InChatter現在支持本地化了,其實這個只是很細節的東西,但是咱也是可以走走國際范。哈哈
其實最重要的原因只是想進行一次本地化的開發。這個概念相信大部分人都有,但是在實際項目中真的很少會涉及到,我也就InChatter這個項目來實踐下本地化開發。
1.新建一個新的類庫,命名為:InChatter.Localization
2.在項目右鍵->屬性,打開項目工程的屬性窗口
3.選擇資源頁簽,修改資源的訪問修飾符為Public(這樣我們才可以訪問資源)
4.按圖中的方式添加你定義你的系統資源。保存以后,可以在PRoperties文件夾中看到我們的資源文件Resources.resx
5.在項目工程屬性窗口,你是無法添加兩個資源文件的,我們可以直接將上述的Resources.resx復制一份,修改為Resources.en.resx
6.將語言內容修改為對應的英文即可
通過上述部分,我們變可以成功的完成資源的創建,編譯項目以后的文件目錄:
InChatter.Localization.dllen/而在en目錄中,存在InChatter.Localization.resources.dll
我們默認的資源存儲在InChatter.Localization.dll中,而我們英文的資源存在InChatter.Localization.resources.dll中
如果我們刪除en文件夾,在英文的環境下,因為無法找到en資源,系統將直接使用默認的中文資源。
1.使用生成的dll添加系統引用(需要將默認資源dll以及各個語言資源文件夾copy到系統的bin/Debug目錄下),解決方案下的項目可直接引用項目
2.在WPF中使用項目資源
(1)Xaml中綁定資源
由于Resource中存在的都是靜態屬性的資源,在Xaml中綁定靜態屬性即可
<Window x:Class="InChatter.Client.WPFClient.View.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:InChatter.Client.WPFClient.Utility" Title="{x:Static rex:Resources.MessageWindow}" Height="600" Width="800" WindowStartupLocation="CenterScreen" xmlns:rex="clr-namespace:InChatter.Localization.Properties;assembly=InChatter.Localization" Visibility="{Binding WindowStatus,Mode= TwoWay}" ></Window>
這里我們引用前綴,并綁定了Title屬性
(2)代碼中的綁定
ResourceManager rm = new ResourceManager("InChatter.Localization.Properties.Resources", typeof(InChatter.Localization.Properties.Resources).Assembly)
我們本地測試時,在窗體的InitializeComponent()之前設置:
System.Threading.Thread.CurrentThread.CurrentUICulture=newSystem.Globalization.CultureInfo("en");
強制程序設置為英文的語言環境。
需要注意的是,在WPF由于MVVM綁定,處理時會引入新的線程,所以在WPF測試中,在ViewModel中也需要加入該設置才能保證ViewModel中設置的資源也為英文,這里的都是針對當前運行線程的,如果程序中加入了新的線程,都需要做這樣的處理,當然這是在中文環境下。這里僅限于測試,真實使用時,會根據本地環境自動加載中文或英文,其他語言也可自行開發。
資源信息的加載主要是有CurrentUICulture來決定的,而一些格式化選項則是有CurrentCulture來決定。
CurrentCulture是操作系統的用戶區域環境的設置,而CurrentUICulture則是操作系統的語言設置。
1.使用我們上述的第二種Code的方式
2.對窗體進行自定義,設置窗體屬性的Localizable為true,在默認語言下設置窗體語言,完成以后,將窗體的Language修改為需要本地化的語言(默認為Default),然后再設置窗體界面語言即可。這種方式,資源是跟窗體關聯的。
http://www.science.co.il/Language/Locale-codes.asp
新聞熱點
疑難解答