特殊的多語言解決方案

2022-04-05 03:33:21 字數 3842 閱讀 7036

一直以來多語言問題都是個讓人頭疼的問題,不是這個問題有多難,而是很繁瑣,而我們目前的這個專案有點特殊,我希望最大限度的化繁為簡,以下是我解決這個問題的方案。

我們的專案有這樣兩個前提:

1、要支援多語言但最多三種語言,一般情況下就兩種語言,所以並沒有隨時切換語言的要求。

2、我們希望有一種可以初期不用管語言問題,之後統一翻譯的方案

基於這麼兩點,我們提出了這樣的方案:

1、初期寫程式時不用關心多語言的翻譯工作,只要將所有使用到中文的地方都用{}擴上

2、在資料庫中chinese會設定為唯一約束

3、所有的翻譯工作會在basepage中的render方法中作

4、所有的頁面會繼承basepage

5、翻譯時會根據當前的語言設定構建以language表中chinese做key,相應的語言為value的字典,然後查詢需要翻譯的字串是不是在字典中,如果不在就生成這一行。

資料庫設計四個字段

id,chinese,english,other

basepage原始碼1. 

using

system;  2. 

using

system.data;  3. 

using

system.configuration;  4. 

using

system.linq;  5. 

using

system.web;  6. 

using

system.web.security;  7. 

using

system.web.ui;  8. 

using

system.web.ui.htmlcontrols;  9. 

using

system.web.ui.webcontrols;  

10. 

using

system.web.ui.webcontrols.webparts;  

11. 

using

system.xml.linq;  

12. 

using

system.text.regularexpressions;  

13. 

using

system.text;  

14. 

using

system.collections;  

15. 

using

system.collections.generic;  

16. 

using

system.io;  

17. 

using

system.diagnostics;  

18.   

19. 

///20

. ///

basepage 的摘要說明  

21. 

///22

. public

class

basepage : system.web.ui.page  

23.   

30.     

//需要替換的標籤,標籤頭為數字字母下劃線漢字  

31.   

32.     

static

readonly

regex re 

=new

regex  

33.         (

@"((\)|(\%7d))

",  

34.         regexoptions.multiline 

|regexoptions.ignorepatternwhitespace);  

35.   

36.     

//不需要替換的標籤  

37.     

static

readonly

regex re_nr 

=new

38.         regex(

@"[\w\w]*?

", regexoptions.multiline 

|regexoptions.ignorecase);  

39.   

40.     

private

string

rendertag(

refstring

content)  

41.       

55.   

56.             content 

=sb.tostring();  

57.         }  

58.         

else

59.           

62.         

return

content;  

63.     }  

64.   

65.     

private

string

replacetag(

refstring

content)  

66.     ,,  

68.         matchcollection mc 

=re.matches(content);  

69.   

70.         

if(dic 

==null

)  71

.           

74.   

75.         

for(

inti =0

; i 

<

mc.count; i

++)  

76.         

')))  

79.             

'));  

81.   

82.                 if(

!dic.containskey(mc[i].value.trimstart(''

)))  

83.                 

'));  

85.                 }  

86.             }  

87.             

else

if(dic[mc[i].value.trimstart(''

)] ==

null

)  88

.               

91.             

else

92.             

')].tostring());  

95.   

96.   

97.             }  

98.         }  

99.         dic.clear();  

100.         

return

content;  

101.     }  

102.     

protected

override

void

render(htmltextwriter writer)  

103.       

123.         

catch

(exception ex)  

124.           

128.         

finally

129.           

133.   

134.     }  

135. } 

一種特殊的多語言解決方案

一直以來多語言問題都是個讓人頭疼的問題,不是這個問題有多難,而是很繁瑣,而我們目前的這個專案有點特殊,我希望最大限度的化繁為簡,以下是我解決這個問題的方案。我們的專案有這樣兩個前提 1 要支援多語言但最多三種語言,一般情況下就兩種語言,所以並沒有隨時切換語言的要求。2 我們希望有一種可以初期不用管語...

一種特殊的多語言解決方案

一直以來多語言問題都是個讓人頭疼的問題,不是這個問題有多難,而是很繁瑣,而我們目前的這個專案有點特殊,我希望最大限度的化繁為簡,以下是我解決這個問題的方案。我們的專案有這樣兩個前提 1 要支援多語言但最多三種語言,一般情況下就兩種語言,所以並沒有隨時切換語言的要求。2 我們希望有一種可以初期不用管語...

多語言版本解決方案

背景 專案在開發過程中都完全使用的中文開發環境,在 配表 ui裡面有非常多的地方都直接使用了中文字串。專案需要上海外,而且支援多個語言版本,切支援個語言版本之間切換,預計會上六七種語言的版本。思路 使用指令碼提取所有含有中文的字串,根據字串內容生成唯一的id,然後生成乙份id和內容的對映表,將生成的...