標籤:des blog strong 檔案 for 問題 ar 代碼
辛辛苦苦做出來的軟體,我們當然希望能讓更多的人用,支援多語言是必須的。下面我將以Asp.net Web Form為例來介紹如何支援多語言。其他程式比如windows程式,過程都是大同小異的。
大概分以下幾個步驟:
- 產生預設資源檔,翻譯資源檔。
- 寫一點代碼實現語言切換
- 一些進階話題。例子總是簡單的,真實項目會遇到哪些問題?
下面是詳細步驟:
產生預設資源檔,翻譯資源檔。
- 建立一個Asp.net web form 項目,添加一個WebForm, 裡面加上一些元素,比如label,button等,設定他們的text。
- 選擇菜單 Tool->Generate Local Resource, 你會看到VS自動建立了一個檔案夾App_LocalResources,並且裡面有一個檔案WebForm1.aspx.resx。作為一個技術人員,自己開啟看一下吧,是個xml檔案。
Note:對於Asp.net MVC我們不能用這樣的方式自動產生資源檔,需要自己建立。
- 3.這時,開啟WebForm1.aspx,你會看到有些東西變了,出現了一些類似meta:resourcekey="Label1Resource1"的代碼。這就是理解Asp.net 支援多語言最基礎的東西。Asp.net將通過這個resoruceKey來從資源檔中找到對應這個label在不同語言下應該顯示的文本。
- 這個時候,你嘗試改變資源檔中的文本呢,然後重新啟動調試,你會看到頁面上內容會發生變化。好了,到現在已經完成了支援多語言的最基礎的東西。
- 複製這個資源檔WebForm1.aspx.resx,把新檔案命名為WebForm1.aspx.zh-CN.resx,把裡面的文本改成漢語的。如果你一開始寫的就是漢語,那麼你可以把它命名為en-US,然後把內容改為英語。
寫一點代碼實現語言切換
6. 如何讓頁面顯示翻譯後的內容呢?非常簡單,為了測試你可以先這麼做:在WebForm1後台代碼添加如下方法:
protected override void InitializeCulture() { Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("zh-CN"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN"); base.InitializeCulture(); }
- 添加如上代碼後,啟動調試你將看到中文頁面。嘗試把zh-CN改為其他語言代碼你的系統將會顯示為其他語言。
一點小提醒 :如果對英語言的資源檔不存在,或者某些項不存在,系統將會自動從預設資源檔中尋找,所以即使沒有翻譯完介面上也不會顯示空白。
- 實際項目中你很可能會希望網站可移動台改變語言,這也不複雜,只需要在介面上加上幾個連結或者按鈕,有時候可以是幾個小圖片顯示不同國家的國旗,當使用者點擊後把使用者的選擇儲存一下然後再動態替換InitializeCulture()函數中的語言代碼即可。
- 沒有多語言經驗的程式員在平時編程時會把一些要在介面上顯示的內容寫入程式碼到代碼中,這樣的話在支援多遠之前需要把這些硬式編碼文本提取到資源檔中。要不然是沒法支援多語言的。VS的代碼檢查工具可以幫你找到這些支援多語言有問題的代碼。除了VS自動產生的資源檔,你還可以建立自己的資源檔。
一些進階話題。
好吧,實際項目當然沒有這麼簡單,這篇小文章給當然也不可能把實際項目中可能遇到的問題全部講清楚。我會把我曾經遇到過的比較典型的一些問題以及解決方案寫一下。
-
- 資源的翻譯問題。
實際項目肯定要找專業的翻譯人員來翻譯,他們怎麼開啟我們的資源檔呢?比較常用的做法是把資源檔匯出到Excel中,或者其他翻譯行業專用的格式,翻譯完瞭然後再匯入。已經有一些工具支援這個功能。有的項目會有幾百個資源檔,這些檔案的管理確實並不簡單。
- 翻譯的版本管理。
當我們完成了第一個版本的翻譯,有開發出第二個版本時,當然也要對第二個版本進行翻譯,因為介面上會有很多新加入的和改變的內容。也許你已經想到將會面臨的問題了,該如何找到這些變化了的內容然後把他們發給翻譯人員呢?總不能手動比較然後一個一個挑選出來吧!在這裡推薦一個我們自己開發的工具,可以幫你找到這些變化了的資源,翻譯人員直接登入網站即可完成翻譯。網址是 rtp.cleancodesoft.com
- 介面的布局問題。
當項目實際翻譯完成後,你會發現介面上有些東西亂套了。中文是兩個字元的內容英語可能要一長串。對於web程式在寫css的時候要考慮這些問題,對於windows程式,則需要重新開啟設計器,從屬性視窗中選擇語言,這時設計器會自動載入選中語言的資源,然後你可以重新調整布局。沒有捷徑,你需要重新檢查所有介面,最好有個細心的tester幫你做這件事。
- 可不可以不用.resx資源檔?
當然可以。原理都是一樣,把需要翻譯的內容提取出來,然後動態讀取。怎麼儲存無所謂,方便就好。有很多開源項目和其他平台下的項目都有自己五花八門的辦法。但據我所知用.resx應該是最簡單的。