在實際開發中,也許我們需要做這樣的界面,可分爲兩種情況:
1、應用程序具備多語言版本(如中文簡體,中文繁體,英文等),用戶界面上顯示的文本會根據系統
的情況自動套用資源,比如我的系統是簡體中文版的,那就使用簡體中文的資源文件中的內容。
2、用戶可以選擇語言如簡體中文、繁體中文。根據用戶選擇的語言,動態加載資源文件中的字符串。
就像我爲本文做的這個例子,運行後,默認選中“簡體中文”,即頁面中的文本顯示爲簡體中文。
然後,選擇“繁體中文”,這時候,界面上的文本也相應地進行變化。
嗯,大致效果就是這樣了。
接下來,我們一起來做一做這個實例,通過實例來理解其中的奧妙吧。
1、啓動VS 2012,新建一個空頁面的應用程序項目(此處省略47個字)。
2、在項目中新建一個文件夾,名爲“Strings”,再在這個新文件夾下再建兩個文件夾,分別名爲
“zh-Hans”和“zh-Hant”,注意,語言限定名不要輸錯,前者是簡體中文,後者是繁體中文。
3、分別在上面建的兩個文件夾中各建一個資源文件,文件名按默認即可,Resources.resw。
這方便在代碼中引用。(操作方法是在文件夾上右擊,從菜單中選擇“新建項”,找到“資源文件”)。
如果您的操作無誤,現在您的項目資源目錄結構就像下圖那樣。
記住,不管你用的是法語,日語,中文還是鳥語,資源文件的名字必須一樣,只是放在不同文
件夾下,而文件夾以語言標記命名(如zh-CN),就這麼簡單, 不要弄錯就行了。
4、先打開簡體中文zh-Hans下面的資源文件,輸入三個項,再打開zh-Hant下面的資源文件,
也輸入三個項,記着,鍵名必須相同,只是值不同罷了,該用什麼語言就用什麼,牛語言的資
源就輸入牛語,用作鳥語的資源就輸入鳥語,就像翻譯一樣。
如下圖所示。
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
|