win8開發(6)——資源 & 本地化

在實際開發中,也許我們需要做這樣的界面,可分爲兩種情況:

1、應用程序具備多語言版本(如中文簡體,中文繁體,英文等),用戶界面上顯示的文本會根據系統

的情況自動套用資源,比如我的系統是簡體中文版的,那就使用簡體中文的資源文件中的內容。

2、用戶可以選擇語言如簡體中文、繁體中文。根據用戶選擇的語言,動態加載資源文件中的字符串。

就像我爲本文做的這個例子,運行後,默認選中“簡體中文”,即頁面中的文本顯示爲簡體中文。
1.png 

然後,選擇“繁體中文”,這時候,界面上的文本也相應地進行變化。

2.png 

嗯,大致效果就是這樣了。
接下來,我們一起來做一做這個實例,通過實例來理解其中的奧妙吧。
1、啓動VS 2012,新建一個空頁面的應用程序項目(此處省略47個字)。

2、在項目中新建一個文件夾,名爲“Strings”,再在這個新文件夾下再建兩個文件夾,分別名爲

“zh-Hans”和“zh-Hant”,注意,語言限定名不要輸錯,前者是簡體中文,後者是繁體中文。

3、分別在上面建的兩個文件夾中各建一個資源文件,文件名按默認即可,Resources.resw。

這方便在代碼中引用。(操作方法是在文件夾上右擊,從菜單中選擇“新建項”,找到“資源文件”)。

如果您的操作無誤,現在您的項目資源目錄結構就像下圖那樣。

3.png 

記住,不管你用的是法語,日語,中文還是鳥語,資源文件的名字必須一樣,只是放在不同文

件夾下,而文件夾以語言標記命名(如zh-CN),就這麼簡單, 不要弄錯就行了。


4、先打開簡體中文zh-Hans下面的資源文件,輸入三個項,再打開zh-Hant下面的資源文件,

也輸入三個項,記着,鍵名必須相同,只是值不同罷了,該用什麼語言就用什麼,牛語言的資

源就輸入牛語,用作鳥語的資源就輸入鳥語,就像翻譯一樣。

如下圖所示。

4.png 


5、打開MainPage.xaml,佈局代碼我直接貼,也不解釋了。

  • <Page  
  •     x:Class="App2.MainPage"  
  •     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  •     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  •     xmlns:local="using:App2"  
  •     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
  •     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
  •     mc:Ignorable="d">  
  •   
  •     <Page.Resources>  
  •         <Style x:Key="tbTitle" TargetType="TextBlock">  
  •             <Setter Property="FontSize" Value="20"/>  
  •             <Setter Property="Margin" Value="4,20,0,3"/>  
  •         </Style>  
  •         <Style x:Key="strdisplaytb" TargetType="TextBlock">  
  •             <Setter Property="FontSize" Value="28"/>  
  •             <Setter Property="TextWrapping" Value="Wrap"/>  
  •         </Style>  
  •     </Page.Resources>  
  •       
  •     <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">  
  •         <StackPanel Margin="25">  
  •             <ComboBox x:Name="cbSelectLang" Width="235" HorizontalAlignment="Left">  
  •                 <ComboBoxItem>簡體中文</ComboBoxItem>  
  •                 <ComboBoxItem>繁體中文</ComboBoxItem>  
  •             </ComboBox>  
  •             <TextBlock Text="第一項文本:" Style="{StaticResource tbTitle}"/>  
  •             <TextBlock x:Name="txtbText1" Style="{StaticResource strdisplaytb}"/>  
  •             <TextBlock Text="第二項文本:" Style="{StaticResource tbTitle}"/>  
  •             <TextBlock x:Name="txtbText2" Style="{StaticResource strdisplaytb}"/>  
  •             <TextBlock Text="第三項文本:" Style="{StaticResource tbTitle}" />  
  •             <TextBlock x:Name="txtbText3" Style="{StaticResource strdisplaytb}" />  
  •         </StackPanel>  
  •     </Grid>  
  • </Page>  
上面的XAML我相信你能看懂的,如果看不懂,說明你很有必要複習一下WPF。

6、打開代碼視圖(MainPage.xaml.cs),在構造函數中爲ComboBox綁定一個事件處理程序。

  • public MainPage()  
  • {  
  •     this.InitializeComponent();  
  •     this.cbSelectLang.SelectionChanged += cbSelectLang_SelectionChanged;  
  • }  
7、cbSelectLang_SelectionChanged方法的代碼如下:
  • void cbSelectLang_SelectionChanged(object sender, SelectionChangedEventArgs e)  
  • {  
  •     ComboBox cb = sender as ComboBox;  
  •     if (cb != null)  
  •     {  
  •         string appLanguage = string.Empty;  
  •         switch (cb.SelectedIndex)  
  •         {  
  •             case 0:  
  •                 appLanguage = "zh-Hans";  
  •                 break;  
  •             case 1:  
  •                 appLanguage = "zh-Hant";  
  •                 break;  
  •             default:  
  •                 appLanguage = "zh-Hans";  
  •                 break;  
  •         }  
  •         //更改語言   
  •         ResourceContext rsContext = ResourceManager.Current.DefaultContext;  
  •         rsContext.Languages = new List<string>(new string[] { appLanguage });  
  •         //rsContext.QualifierValues["Language"] = appLanguage;   
  •         //加載資源   
  •         ResourceLoader loader = new ResourceLoader();  
  •         this.txtbText1.Text = loader.GetString("item1");  
  •         this.txtbText2.Text = loader.GetString("item2");  
  •         this.txtbText3.Text = loader.GetString("item3");  
  •     }  
  • }  
設置應用程序的語言可以用上面代碼中的
                ResourceContext rsContext = ResourceManager.Current.DefaultContext;
                rsContext.Languages = new List<string>(new string[] { appLanguage });
同時,下面有一行我給註釋了。
                //rsContext.QualifierValues["Language"] = appLanguage;
也就是說,兩種方法都可以修改首選語言。
一是設置ResourceContext的Languages屬性;

二是ResourceContext的QualifierValues是一個字典集合,我們修改其中鍵爲Language的值

也能達到同樣效果。


那麼,應用程序的資源的URI和結構以及引用資源的標識符是如何分佈的呢?且聽下回分解。88

5.png (23.63 KB, 下載次數: 0)

5.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章