一直以來多語言問題都是個讓人頭疼的問題,不是這個問題有多難,而是很繁瑣,而我們目前的這個專案有點特殊,我希望最大限度的化繁為簡,以下是我解決這個問題的方案。
我們的專案有這樣兩個前提:
1、要支援多語言但最多三種語言,一般情況下就兩種語言,所以並沒有隨時切換語言的要求。
2、我們希望有一種可以初期不用管語言問題,之後統一翻譯的方案
基於這麼兩點,我們提出了這樣的方案:
1、初期寫程式時不用關心多語言的翻譯工作,只要將所有使用到中文的地方都用{}擴上
2、在資料庫中chinese會設定為唯一約束
3、所有的翻譯工作會在basepage中的render方法中作
4、所有的頁面會繼承basepage
5、翻譯時會根據當前的語言設定構建以language表中chinese做key,相應的語言為value的字典,然後查詢需要翻譯的字串是不是在字典中,如果不在就生成這一行。
資料庫設計四個字段
id,chinese,english,other
basepage原始碼
using
system;
using
system.data;
using
system.configuration;
using
system.linq;
using
system.web;
using
system.web.security;
using
system.web.ui;
using
system.web.ui.htmlcontrols;
using
system.web.ui.webcontrols;
using
system.web.ui.webcontrols.webparts;
using
system.xml.linq;
using
system.text.regularexpressions;
using
system.text;
using
system.collections;
using
system.collections.generic;
using
system.io;
using
system.diagnostics;
//////
basepage 的摘要說明
///public
class
basepage : system.web.ui.page
//需要替換的標籤,標籤頭為數字字母下劃線漢字
static
readonly
regex re
=new
regex(@"
((\)|(\%7d))",
regexoptions.multiline
|regexoptions.ignorepatternwhitespace);
//不需要替換的標籤
static
readonly
regex re_nr
=new
regex(
@"[\w\w]*?
", regexoptions.multiline
|regexoptions.ignorecase);
private
string
rendertag(
refstring
content)
content
=sb.tostring();
}else
return
content;
}private
string
replacetag(
refstring
content)
,,matchcollection mc
=re.matches(content);
if(dic
==null
)for
(inti =
0; i
<
mc.count; i++)
')))
'));if(
!dic.containskey(mc[i].value.trimstart(''
)))'
));}
}else
if(dic[mc[i].value.trimstart(''
)] ==
null
)else
')].tostring());}}
return
content;
}protected
override
void
render(htmltextwriter writer)
catch
(exception ex)
finally}}
這樣設計的
優點1、初期寫程式時不用關心多語言的翻譯工作,只要將所有使用到中文的地方都用{}擴上
2、省去了大量命名相應文字的工作
3、直接用中文標示要顯示到頁面的文字,容易理解
缺點1、如果中文是一樣的翻譯,而其他語言翻譯卻不一樣時不好解決,但這種情況似乎不常見
一種特殊的多語言解決方案
一直以來多語言問題都是個讓人頭疼的問題,不是這個問題有多難,而是很繁瑣,而我們目前的這個專案有點特殊,我希望最大限度的化繁為簡,以下是我解決這個問題的方案。我們的專案有這樣兩個前提 1 要支援多語言但最多三種語言,一般情況下就兩種語言,所以並沒有隨時切換語言的要求。2 我們希望有一種可以初期不用管語...
特殊的多語言解決方案
一直以來多語言問題都是個讓人頭疼的問題,不是這個問題有多難,而是很繁瑣,而我們目前的這個專案有點特殊,我希望最大限度的化繁為簡,以下是我解決這個問題的方案。我們的專案有這樣兩個前提 1 要支援多語言但最多三種語言,一般情況下就兩種語言,所以並沒有隨時切換語言的要求。2 我們希望有一種可以初期不用管語...
Cool MVC 多語言的另一種解決方案
hello,這篇文章之所以叫 mvc多語言的另一種解決方案,是因為園子裡已經有一篇叫 asp.net mvc 多語言解決方案 的文章了。文中提到 這裡使用了 resx 資源檔案,注意這裡這個檔案需要被編譯後才能使用,否則找不到已經增加的項。編譯這個可以使用.net 自帶的 resgen.exe。意思...