讓你的.NET程序支持多語言

辛辛苦苦作出來的軟件,咱們固然但願能讓更多的人用,支持多語言是必須的。下面我將以Asp.net Web Form爲例來介紹如何支持多語言。其餘程序好比windows程序,過程都是大同小異的。css

大概分如下幾個步驟:

  1. 生成默認資源文件,翻譯資源文件。
  2. 寫一點代碼實現語言切換
  3. 一些高級話題。例子老是簡單的,真實項目會遇到哪些問題?

下面是詳細步驟:程序員

生成默認資源文件,翻譯資源文件。

    1. 建立一個Asp.net web form 項目,添加一個WebForm, 裏面加上一些元素,好比label,button等,設置他們的text。
    2. 選擇菜單 Tool->Generate Local Resource, 你會看到VS自動建立了一個文件夾App_LocalResources,而且裏面有一個文件WebForm1.aspx.resx。做爲一個技術人員,本身打開看一下吧,是個xml文件。
      Note:對於Asp.net MVC咱們不能用這樣的方式自動生成資源文件,須要本身建立。
    3. 3. 這時,打開WebForm1.aspx,你會看到有些東西變了,出現了一些相似meta:resourcekey="Label1Resource1"的代碼。這就是理解Asp.net 支持多語言最基礎的東西。Asp.net將經過這個resoruceKey來從資源文件中找到對應這個label在不一樣語言下應該顯示的文本。

       

    4. 這個時候,你嘗試改變資源文件中的文本呢,而後從新啓動調試,你會看到頁面上內容會發生變化。好了,到如今已經完成了支持多語言的最基礎的東西。
    5. 複製這個資源文件WebForm1.aspx.resx,把新文件命名爲WebForm1.aspx.zh-CN.resx,把裏面的文本改爲漢語的。若是你一開始寫的就是漢語,那麼你能夠把它命名爲en-US,而後把內容改成英語。

寫一點代碼實現語言切換

6. 如何讓頁面顯示翻譯後的內容呢?很是簡單,爲了測試你能夠先這麼作:在WebForm1後臺代碼添加以下方法:web

protected override void InitializeCulture()
 {
 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("zh-CN");
 Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");
 base.InitializeCulture();
 }

 

    1. 添加如上代碼後,啓動調試你將看到中文頁面。嘗試把zh-CN改成其餘語言代碼你的系統將會顯示爲其餘語言。
      一點小提醒 :若是對英語言的資源文件不存在,或者某些項不存在,系統將會自動從默認資源文件中查找,因此即便沒有翻譯完界面上也不會顯示空白。
    2. 實際項目中你極可能會但願網站可移動臺改變語言,這也不復雜,只須要在界面上加上幾個連接或者按鈕,有時候能夠是幾個小圖片顯示不一樣國家的國旗,當用戶點擊後把用戶的選擇保存一下而後再動態替換InitializeCulture()函數中的語言代碼便可。
    3. 沒有多語言經驗的程序員在平時編程時會把一些要在界面上顯示的內容硬編碼到代碼中,這樣的話在支持多遠以前須要把這些硬編碼的文本提取到資源文件中。要否則是無法支持多語言的。VS的代碼檢查工具能夠幫你找到這些支持多語言有問題的代碼。除了VS自動生成的資源文件,你還能夠建立本身的資源文件。

一些高級話題。

好吧,實際項目固然沒有這麼簡單,這篇小文章給固然也不可能把實際項目中可能遇到的問題所有講清楚。我會把我曾經遇到過的比較典型的一些問題以及解決方案寫一下。編程

      1. 資源的翻譯問題。
        實際項目確定要找專業的翻譯人員來翻譯,他們怎麼打開咱們的資源文件呢?比較經常使用的作法是把資源文件導出到Excel中,或者其餘翻譯行業專用的格式,翻譯完了而後再導入。已經有一些工具支持這個功能。有的項目會有幾百個資源文件,這些文件的管理確實並不簡單。
      2. 翻譯的版本管理。
        當咱們完成了第一個版本的翻譯,有開發出第二個版本時,固然也要對第二個版本進行翻譯,由於界面上會有不少新加入的和改變的內容。也許你已經想到將會面臨的問題了,該如何找到這些變化了的內容而後把他們發給翻譯人員呢?總不能手動比較而後一個一個挑選出來吧!在這裏推薦一個咱們本身開發的工具,能夠幫你找到這些變化了的資源,翻譯人員直接登陸網站便可完成翻譯。網址是 rtp.cleancodesoft.com
      3. 界面的佈局問題。
        當項目實際翻譯完成後,你會發現界面上有些東西亂套了。中文是兩個字符的內容英語可能要一長串。對於web程序在寫css的時候要考慮這些問題,對於windows程序,則須要從新打開設計器,從屬性窗口中選擇語言,這時設計器會自動加載選中語言的資源,而後你能夠從新調整佈局。沒有捷徑,你須要從新檢查全部界面,最好有個細心的tester幫你作這件事。
      4. 可不能夠不用.resx資源文件? 固然能夠。原理都是同樣,把須要翻譯的內容提取出來,而後動態讀取。怎麼保存無所謂,方便就好。有不少開源項目和其餘平臺下的項目都有本身五花八門的辦法。但據我所知用.resx應該是最簡單的。 
相關文章
相關標籤/搜索