MVC2.0本地化(另類解決方案)<下>
本文是對MVC2.0本地化(另類解決方案)上這篇文章內介紹的MVC2.0本地化功能進行加強、細化的結尾篇。如果存在不足的地方,希望您指出。
如何對上篇文章進行加強以及細化呢?主要從以下三點開始。
1、根據用戶瀏覽器自動語言判斷,同時也可由用戶自定義站點語言。
2、多語言加入,類似resource文件,可以有多個語言資源庫。
3、全局本地化,可以本地化非頁面內容,比如為臺異步到前臺的json數據本地化等。
主要步驟如下:
一、根據用戶瀏覽器自動語言判斷,同時也可由用戶自定義站點語言
這個實現思路為:首選判斷存儲在客戶端的用戶“主動”設定的cookie。如果該值為空,則根據用戶瀏覽器自動識別語言。如果不為空則根據用戶設定好的cookie值獲取站點語言。那如何根據客戶瀏覽器識別語言,我們要在web.config的system.web節點添加globalization enableClientBasedCulture="true" culture="auto" uiCulture="auto"/設置。
根據此設置服務器端就就可以使用System.Threading.Thread.CurrentThread.CurrentCulture識別用戶瀏覽器的語言。貼出global中部分代碼以供參考:
protected void Application_BeginRequest(Object sender, EventArgs e) { HttpCookie lang = Request.Cookies["Lang"]; if (lang != null) { if (Response.ContentType == "text/html" || Response.ContentType == "application/json") Response.Filter = new LocalizationHandler(Response.Filter, lang.Value); return; } string langFromBrowser = System.Threading.Thread.CurrentThread.CurrentCulture.ToString(); string strLang = string.Empty; if (string.Compare("zh-CN", langFromBrowser, true) == 0) { strLang = "SimplifiedChinese"; } else if (string.Compare("zh-Hant", langFromBrowser, true) == 0) { strLang = "TraditionalChinese"; } else if (langFromBrowser.Contains("en")) { strLang = "English"; } else { strLang = "English"; } if (Response.ContentType == "text/html" || Response.ContentType == "application/json") Response.Filter = new LocalizationHandler(Response.Filter, strLang); }
通過以上代碼塊,服務端就可以聰明的識別:到底是根據客戶端的cookie還是根據用戶瀏覽器語言設定來顯示站點語言。
二、多語言加入,類似resource文件,可以有多個語言資源庫。
這個擴展就非常簡單了,在上篇文章中只有一個XML文件對應于該XML的.net4.0緩存。如果是多語言包,我們只要建立多個XML文件。以及每個XML文件相對應的緩存機制即可。截圖如下:
Resources文件下的語言包分為為:英文、簡體中文、繁體中文。xml格式請閱 MVC2.0本地化(另類解決方案)上。
如何獲取xml內的翻譯文本,上篇文章中寫的很清晰了。唯一要注意的是為每個xml文件(語言包)建立獨立的緩存機制即可。
三、全局本地化,可以本地化非頁面內容,比如為臺異步到前臺的json數據本地化等
首先看本文實現步驟的第一點中貼出代碼第6行,if
(Response.ContentType ==
"text/html"
|| Response.ContentType ==
"application/json"
) 這里控制了json格式的本地化。說白了以后后臺的異步到前臺的JSON格式的本地化資源,我們也可以寫在XML文件中,只要通過Response.Filter 機制就可以本地化,而無需增加額外的本地化代碼。
具體實現截圖如下:
MVC2.0 JsonResult:
jQuery調用:
最終會將“=language is applied”根據不同的國家的用戶分別顯示成三種語言:
簡體:語言已設定。
繁體:語言已經設定。
英文:Language is applied.
四、程序運行截圖
五、小結
經過上文的介紹,基本上已完成了本地化另類解決方案。該方案也存在其缺點。但是優點是,可以動態的改變本地化內容。而不需要重新修改源代碼,只要修改相應的xml文件內容即可。
希望本篇文章可以給您帶來幫助,如有不足之處歡迎指出,謝謝!