2011年9月8日 星期四

完整的C#多國語言解決方案(二)- 字串多國語言

首先,為專案加入一個資源檔,如圖所示,選新增項目,然後選擇資源檔,要建立兩個檔案,注意檔名要相同,而檔名跟副檔名(.resx)之間要多一個語言次檔名,這個副檔名是有規則有規定的,請參照文化語言表。比方取名為LanguagePack.en.resx 跟LanguagePack.zh-TW.resx 就可以根據系統是中文還是英文,來取出對應的文字。












檔案增加好了之後程式怎麼撰寫?請看:
假設此專案的Namespace名稱為MultiLanguageTest
假設把語言包取名為LanguagePack
假設LanguagePack.en.resx裡面有新增一個StringTest001的字串。內容是:"我是中文的字串"
假設LanguagePack.zh-TW.resx裡面有新增一個StringTest001的字串。內容是:"I am English"


利用ResourceManager來取得對應文化的resx檔案,然後利用GetString()告訴ResourceManager你要取得那個字串,如此,就會根據你的OS來抓取正確的語言檔.resx


ResourceManager Rm = new ResourceManager( "MultiLanguageTest.LanguagePack", Assembly.GetExecutingAssembly( ) );
MessageBox.Show( Rm.GetString( "StringTest001" ) );




「這樣測試過後,只能看到中文的字串,因為我用的是中文的作業系統啊,怎麼知道這樣寫對不對?」在你的Program.cs 的main()裡加上這個Thread.CurrentThread.CurrentUICulture = new CultureInfo( "en" ); ,執行之後,你就可以讓程式強制在英文的語言文化來呈現了。


加上這行之後,編譯可能看到「Thread不存在目前內容中」、「CultureInfo不存在目前內容中」的錯誤訊息,Using引用進來就好了。

2 則留言:

  1. 實作時美中不足:
    LanguagePack.zn-TW.resx 應該是 zh-TW
    :D

    回覆刪除
  2. 唉呀呀,真是抱歉,疏忽了,造成困擾真不好意思

    回覆刪除