一直以來多語言問題都是個讓人頭疼的問題,不是這個問題有多難,而是很繁瑣,而我們目前的這個專案有點特殊,我希望最大限度的化繁為簡,以下是我解決這個問題的方案。
我們的專案有這樣兩個前提:
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和內容的對映表,將生成的...