MVC2.0本地化(另類解決方案)<下>

作者: ryanding  來源: 博客園  發布時間: 2011-01-21 00:03  閱讀: 906 次  推薦: 0   原文鏈接   [收藏]  
摘要:本文是對MVC2.0本地化(另類解決方案)<上>這篇文章內介紹的MVC2.0本地化功能進行加強、細化的結尾篇。如果存在不足的地方,希望您指出。

  本文是對MVC2.0本地化(另類解決方案)上這篇文章內介紹的MVC2.0本地化功能進行加強、細化的結尾篇。如果存在不足的地方,希望您指出。

  如何對上篇文章進行加強以及細化呢?主要從以下三點開始。

  1、根據用戶瀏覽器自動語言判斷,同時也可由用戶自定義站點語言。

  2、多語言加入,類似resource文件,可以有多個語言資源庫。

  3、全局本地化,可以本地化非頁面內容,比如為臺異步到前臺的json數據本地化等。

  主要步驟如下:

  一、根據用戶瀏覽器自動語言判斷,同時也可由用戶自定義站點語言

  這個實現思路為:首選判斷存儲在客戶端的用戶&ldquo;主動&rdquo;設定的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調用:

  最終會將&ldquo;=language is applied&rdquo;根據不同的國家的用戶分別顯示成三種語言:

  簡體:語言已設定。

  繁體:語言已經設定。

  英文:Language is applied.

  四、程序運行截圖

  五、小結

  經過上文的介紹,基本上已完成了本地化另類解決方案。該方案也存在其缺點。但是優點是,可以動態的改變本地化內容。而不需要重新修改源代碼,只要修改相應的xml文件內容即可。

  希望本篇文章可以給您帶來幫助,如有不足之處歡迎指出,謝謝!

  相關文章:MVC2.0本地化(另類解決方案)&lt;上&gt;

0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()