一步一步实现网站的多语言版本
? ? 網(wǎng)站在開發(fā)的過程中需要實(shí)現(xiàn)多語言版本,我們暫且認(rèn)為有英語和漢語兩個版本。網(wǎng)站結(jié)構(gòu)包括,UI過程,rest服務(wù),以及相應(yīng)的js,各個部分我們都要實(shí)現(xiàn)多語言,不要求一鍵切換,但是在部署過程中要能實(shí)現(xiàn)多與語言配置。
首先我們出場的是資源文件,C#的項(xiàng)目實(shí)現(xiàn)本地化和區(qū)域化,我們要用到資源文件。
添加資源文件夾
添加資源文件項(xiàng)
這里文件的命名最好能規(guī)范,如英文版本建議?lang.en.resx,漢語版本建議用lang.zh-cn.resx
實(shí)際使用效果
資源文件夾由各個語言版本的資源文件組成,資源文件以.resx后綴和.cs后綴成對出現(xiàn),其實(shí)質(zhì)是一定規(guī)則的Xml文件。這個很容易理解,應(yīng)用程序通過資源文件實(shí)現(xiàn)多語言版本的切換,這個資源文件自然保存著語言版本的鍵值對應(yīng)關(guān)系。
如果你還不太理解的資源文件的話,可以用記事本打開.resx文件,為了真正看到資源文件的核心數(shù)據(jù),我們先提前添加一個資源
.resx文件
以root為根節(jié)點(diǎn)的xml文件,剛才我們添加的資源表示為:
<data name="website" xml:space="preserve"><value>cnblogs</value></data>我們操作.resx文件就是要形成多個data節(jié)點(diǎn)
接下來我們要添加鍵值對應(yīng)關(guān)系了,如果鍵值對應(yīng)對比較少,我們可以通過上圖中的圖形化界面操作,但是既然是網(wǎng)站,需要翻譯的內(nèi)容必定會很多,難道我們一個一個添加嗎?
既然核心文件就是這個data節(jié)點(diǎn),我們只要保證data節(jié)點(diǎn)補(bǔ)充完整即可。
這里我們提供兩種方法供參考。
1 可以先把鍵值對事先批量保存在數(shù)據(jù)庫中,再通過讀取數(shù)據(jù),使用程序批量生成data節(jié)點(diǎn)集合,補(bǔ)充完整即可。這樣做的好處是可以把數(shù)據(jù)保存下來,省去手工添加的繁瑣。
其實(shí)在實(shí)際開發(fā)過程中,翻譯內(nèi)容鍵是會不斷增加調(diào)整的,并且資源文件不允許重復(fù)鍵,也就意味著要不斷的修改數(shù)據(jù)和程序??傊?#xff0c;這不算一種科學(xué)的方法。
2 我們需要發(fā)現(xiàn)一個工具,vs早已經(jīng)準(zhǔn)備好了,Resgen
它可以實(shí)現(xiàn)txt文件與.resx文件的相互轉(zhuǎn)化,準(zhǔn)確快速
上圖中的txt文件格式可以是這樣
website=網(wǎng)站
service=服務(wù)
以上兩種方法各有利弊,我個人還是推薦第二種方法
生成資源文件是實(shí)現(xiàn)多語言版本的第一步,有些需要注意的地方
1)鍵的名字不能重復(fù),最好是有意義的無空格及特殊字符的。
2)多個語言版本的文件中需要都有指定的鍵
即?
<data name="website" xml:space="preserve"><value>cnblogs</value></data>這個節(jié)點(diǎn)需要在lang.en.resx和lang.zh-cn.resx文件中都存在,只是value值不同,否則在讀取時(shí)會出現(xiàn)混淆
讀取使用資源文件
資源文件整理完以后,我們需要替換所有需要翻譯的內(nèi)容為資源文件變量,無論是前臺aspx頁面還是cs文件都可以按照以下格式替換
<%=Resources.lang.website%>這個時(shí)候可以體現(xiàn)鍵名字規(guī)范的好處,智能提示可以清晰的找出,并且不會出現(xiàn)_等符號
js中實(shí)現(xiàn)多語言
js實(shí)際上與資源文件是沒有關(guān)系的,所以以上 的資源文件在js部分不能直接使用。既然js也需要有多語言版本,所以js也必定有自己的"資源文件"--json
我們借助json存儲需要翻譯的js提示語言,value等值的對應(yīng)關(guān)系。
兩個語言版本,我們生成3個js文件,以備后用
每個文件中存放的相應(yīng)的json數(shù)組,翻譯內(nèi)容鍵值對應(yīng)
var note ?{ website:"博客園",sure:"確定"}
使用:
在需要使用的js文件中引入lang.en.js和?lang.zh-cn.js,做相應(yīng)的替換即可。
///<reference path="/Jscript/Translate/lang.en.js" /> ///<reference path="/Jscript/Translate/lang.js" /> ///<reference path="/Jscript/Translate/lang.zh-cn.js" />note.sure
為了代碼規(guī)范我建議在生成json文件時(shí)加上注釋
///<param name="TianJia" type="String">添加</param> Add: "Add",js多語言翻譯的關(guān)鍵是js中需要翻譯的內(nèi)容被相應(yīng)的js文件中的json值替換。比如翻譯英文版的 "確定"
在程序中我們必須讀到相應(yīng)的?lang.en.js 文件,這樣才可以取到sure值
我們可以通過cookie來決定加載哪個翻譯的js"資源文件",也可以部署時(shí)直接把相應(yīng)的js轉(zhuǎn)移到 lang.js,而刪除其它不用的js翻譯文件。這也是以上我說生成3個js文件的原因。
說完了js的配置,我們再返回頭來說說資源文件的配置
程序如何決定網(wǎng)站啟動時(shí)使用哪個資源文件?
資源文件由在webconfig的<system.web>下globalization節(jié)點(diǎn)設(shè)置,打開相應(yīng)的本地化節(jié)點(diǎn)即可
<globalization culture="en-US" uiCulture="en-US"/>
<!--<globalization culture="zh-CN" uiCulture="zh-CN"/>-->
? ? ?這樣就實(shí)現(xiàn)了網(wǎng)站的多語言配置,如果要實(shí)現(xiàn)真正的一鍵切換,需要在cookie和Global.asax繼續(xù)處理,如果你覺得我的文章對你有所幫助,請點(diǎn) 【推薦】
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/needrunning/archive/2012/10/27/2742957.html
總結(jié)
以上是生活随笔為你收集整理的一步一步实现网站的多语言版本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哪些情况下索引会失效?
- 下一篇: [CareerCup][Google I