1.resx簡介
winform/wpf里,如果想切換中英文,可以通過自己定義key-value數據(xml,json,數據庫,txt,xaml等形式),來遍歷控件(winform)或者修改資源引用(wpf)等方法來實現。
但是對winform來說,系統提供了rest資源文件,通過rest資源文件來保存key-value對應關系似乎更方便。
詳細請參考文檔:https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/y99d1cd3(v=vs.100)?redirectedfrom=MSDN
resx根據創建形式分為兩種:form-based和手動添加。
2.form-based resx創建步驟
默認form自身帶有resx,當我們修改控件屬性的時候,此文件會變化,此文件本身是xml格式文件。
選中form,修改Localizable為true,修改language為某一個地區為【中國】, 這時候,並且修改button1 和button2的名稱分別:英文,中文
再次選中form,修改language為【英語】,並且修改button1 和button2的名稱分別:english,chinese
這個時候,就建立了兩個語言包,在form1前面的三角點擊一下,可以看到文件大概如下:
其中:form1.resx是默認的,form1.en-us.resx是英文語言包,form1.zh-cn.resx是中文語言包。
我們可以看到 資源包的名稱是這樣的:【form1.zh-cn.resx】即【文件名】+【.語言-地區】+【.resx】
在button1和button2的事件里,切換語言:
var culture = new CultureInfo("en-US"); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; ResourceManager r = new ResourceManager("winform_通過地區文化語言切換.Form1", typeof(Form1).Assembly); button1.Text = r.GetString("button1.Text"); button2.Text = r.GetString("button2.Text");
其中 resourceManager的第一個參數是:【名稱空間.文件名】
效果就是點擊【語言按鈕】后 ,各個控件的Text變為對應的語言,如下圖:
點擊英文:
點擊chinese后
3.手動添加語言包
手動添加的方法是:類庫上,右鍵,添加,新建項,找到資源文件,然后命名:【文件名】+【.語言-地區】+【.resx】
比如我新建了兩個文件:language.en-US.resx和language.zh-CN.resx,
雙擊資源文件,我們可以編輯資源文件的key-value值。
編輯完成后,就可以代碼來調用了
ResourceManager rm = new ResourceManager("winform_通過地區文化語言切換.language", typeof(Form1).Assembly); MessageBox.Show(rm.GetString("String1", culture));
同樣 ResourceManager的第一個參數是:【名稱空間】+【資源文件名】 ,第二個參數是:assemble。rm.GetString的參數是:key名稱,culture
這樣,就可以取得資源里面的內容,實現語言切換了。
另外可以用resx2word工具編輯resx文件:
http://resx.sourceforge.net/
另行參考:
https://limitedcode.blogspot.com/2016/09/c-globalization.html
4.源碼下載
https://files.cnblogs.com/files/lizhijian/20201026winform%E9%80%9A%E8%BF%87%E5%9C%B0%E5%8C%BA%E6%96%87%E5%8C%96%E8%AF%AD%E8%A8%80%E5%88%87%E6%8D%A2.rar