首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

win8开发(六)——资源 & 本地化

2012-12-24 
win8开发(6)——资源 & 本地化在实际开发中,也许我们需要做这样的界面,可分为两种情况:1、应用程序具备多语言

win8开发(6)——资源 & 本地化
在实际开发中,也许我们需要做这样的界面,可分为两种情况:

1、应用程序具备多语言版本(如中文简体,中文繁体,英文等),用户界面上显示的文本会根据系统

的情况自动套用资源,比如我的系统是简体中文版的,那就使用简体中文的资源文件中的内容。

2、用户可以选择语言如简体中文、繁体中文。根据用户选择的语言,动态加载资源文件中的字符串。

就像我为本文做的这个例子,运行后,默认选中“简体中文”,即页面中的文本显示为简体中文。
win8开发(六)——资源 & 本地化 

然后,选择“繁體中文”,这时候,界面上的文本也相应地进行变化。

win8开发(六)——资源 & 本地化 

嗯,大致效果就是这样了。
接下来,我们一起来做一做这个实例,通过实例来理解其中的奥妙吧。
1、启动VS 2012,新建一个空页面的应用程序项目(此处省略47个字)。

2、在项目中新建一个文件夹,名为“Strings”,再在这个新文件夹下再建两个文件夹,分别名为

“zh-Hans”和“zh-Hant”,注意,语言限定名不要输错,前者是简体中文,后者是繁体中文。

3、分别在上面建的两个文件夹中各建一个资源文件,文件名按默认即可,Resources.resw。

这方便在代码中引用。(操作方法是在文件夹上右击,从菜单中选择“新建项”,找到“资源文件”)。

如果您的操作无误,现在您的项目资源目录结构就像下图那样。

win8开发(六)——资源 & 本地化 

记住,不管你用的是法语,日语,中文还是鸟语,资源文件的名字必须一样,只是放在不同文

件夹下,而文件夹以语言标记命名(如zh-CN),就这么简单, 不要弄错就行了。


4、先打开简体中文zh-Hans下面的资源文件,输入三个项,再打开zh-Hant下面的资源文件,

也输入三个项,记着,键名必须相同,只是值不同罢了,该用什么语言就用什么,牛语言的资

源就输入牛语,用作鸟语的资源就输入鸟语,就像翻译一样。

如下图所示。

win8开发(六)——资源 & 本地化 


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)

        win8开发(六)——资源 & 本地化

热点排行