WindowsStoreApp全球化:应用中设置语言选项

当开发者将开发的应用上传到Windows应用商店以后,使用Windows 8系统的用户可能会看到并下载这些应用,而这些用户所在的区域或者所使用的语言可能都不相同,如果他们在使用应用程序时希望改变应用显示信息的语言为自己所熟悉的语言,这就需要应用能够提供一个语言设置选项,并在选项中包括用户所在地区的语言,这样就能够在应用中更加准确的为用户提供所需要的界面语言而不受区域的影响。下面将通过示例讲解如何在应用中添加“语言设置”选项,通过设置应用的语言来显示不同的信息。

新建一个Windows应用商店的空白应用程序项目,并命名为ChangeAppLanguage。在项目中添加如18.2.3小节示例中相同的语言文件夹、资源文件以及资源。

通常情况下在应用程序中都会提供一个设置页面用于对应用的基本参数包括语言进行设置,本小节将沿用这样的习惯,在项目中新建一个空白页作为语言设置页面,并在其中添加设置选项。

右键单击项目图标à添加à新建项,选择一个“空白页”模版,并命名为SetLanguage。这样就为项目添加了一个语言设置页面SetLanguage用于添加设置选项,并通过此选项来改变应用程序显示信息的语言。

下面首先在MainPage页面添加代码用于布局显示信息页面。双击打开MainPage.xaml文件,在Grid元素中添加“设置语言”和“显示信息”两个按钮,“设置语言”按钮用于跳转到SetLanguage语言设置页面,“显示信息”按钮用于显示资源的值。再添加两个TextBlock文本块分别用于显示提示信息和资源文件中资源的值,代码如下所示:

<Button Content="设置语言" FontSize="20" HorizontalAlignment="Left" Margin="512,141,0,0" VerticalAlignment="Top" Height="71" Width="114" Click="SetLanguage_Click"/>

<Button Content="显示信息" HorizontalAlignment="Left" FontSize="20" Margin="512,217,0,0" VerticalAlignment="Top" Height="71" Width="114" Click="ShowMessage_Click"/>

<TextBlock FontSize="25" HorizontalAlignment="Left" Name="GetResource" Margin="677,230,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="46" Width="139"/>

<TextBlock HorizontalAlignment="Left" Margin="512,230,0,0" TextWrapping="Wrap" Text="显示信息为:" FontSize="20" VerticalAlignment="Top" Height="30" Width="129"/>

此时运行程序可以查看显示信息页面的效果,如图18-22所示:

18-22 显示信息页面效果

通过上面的代码可以看到,“显示信息”和“设置语言”按钮的单击事件分别使用ShowMessage_Click方法和SetLanguage_Click方法来处理,下面我们来实现这两个方法。先来看ShowMessage_Click方法的代码实现。

using Windows.ApplicationModel.Resources.Core;

 

private void ShowMessage_Click(object sender, RoutedEventArgs e)

{

    //StringResource资源的值赋给GetResource文本块的Text属性

    GetResource.Text = ResourceManager.Current.MainResourceMap.GetValue("Resources/StringResource").ValueAsString;

//为状态更改事件注册处理方法

ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += QualifierValues_MapChanged;

}

async private void QualifierValues_MapChanged(IObservableMap<string, string> sender, IMapChangedEventArgs<string> @event)

{

    //使用DispatcherRunAsync方法将更改后的语言配置资源值显示到界面中

    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>

    {

        GetResource.Text = ResourceManager.Current.MainResourceMap.GetValue("Resources/StringResource").ValueAsString;

    });

}

在本示例中,ShowMessage_Click方法的所使用的代码和18.3.1小节示例中的后台代码是相同的,所以这里不再重复讲解。

接着来看一下SetLanguage_Click方法的实现,此方法用于跳转到SetLanguage语言设置页面,代码如下所示:

private void SetLanguage_Click(object sender, RoutedEventArgs e)

{

    //跳转到SetLanguage语言设置页面

    Frame.Navigate(typeof(SetLanguage));

}

在上面的代码中调用Frame.Navigate方法跳转到SetLanguage语言设置页面。下面在SetLanguage页面中添加语言设置选项。

双击打开SetLanguage.xaml文件,在Grid元素中添加一个Button按钮、一个TextBlock文本块和一个ComboBox控件。设置Button按钮的Content属性值为“确认选择”,此按钮用于返回显示信息页面。TextBlock文本块用于显示“选择语言”文本信息。ComboBox控件用来设置应用程序显示信息的语言,在ComboBox控件中添加两个ComboBoxItem列表项,这两个列表项的Content属性值分别为“简体中文”和“英语”,代码如下所示:

<Button Content="确定选择" FontSize="20" HorizontalAlignment="Left" Margin="848,126,0,0" VerticalAlignment="Top" Height="44" Width="128" Click="ConfirmSelected_Click"/>

<TextBlock HorizontalAlignment="Left" FontSize="30" Margin="559,134,0,0" TextWrapping="Wrap" Text="选择语言" VerticalAlignment="Top" Height="29" Width="131"/>

<ComboBox Name="LanguageSelected" HorizontalAlignment="Left" SelectedValuePath="Content" SelectionChanged="LanguageSelected_SelectionChanged" Margin="714,134,0,0" VerticalAlignment="Top" Width="105">

    <ComboBoxItem Content="简体中文"/>

    <ComboBoxItem Content="英语"/>

</ComboBox>

这时运行程序,在显示信息页面中单击“设置语言”按钮将跳转到SetLanguage语言设置页面,效果如图18-23所示,但是单击ComboBox控件的文本框选择列表项和单击“确定选择”按钮不会实现相应的功能,因为还没有为这两个控件的相关事件添加事件处理方法。

18-23 语言设置页面

通过上面的代码可以看到,“确认选择”按钮的单击事件使用ConfirmSelected_Click方法来处理,ComboBox控件的SelectionChanged事件使用LanguageSelected_SelectionChanged方法来处理,下面在SetLanguage.xaml.cs文件中实现这两个方法。

首先实现LanguageSelected_SelectionChanged方法,此方法用于设置应用显示信息的语言,代码如下所示:

private void LanguageSelected_SelectionChanged(object sender, SelectionChangedEventArgs e)

{

    string selectedLanguage = LanguageSelected.SelectedValue.ToString();

    if (selectedLanguage == "简体中文")

    {

        //设置应用语言为“中文(简体)”

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "zh-CN";

    }

    if (selectedLanguage == "")

    {

        //设置应用语言为“英语”

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "en-US";

    }

}

LanguageSelected_SelectionChanged方法中,定义了一个string类型的变量selectedLanguage,将用户选择的应用语言选项通过ToString方法转化为字符串存储在selectedLanguage变量中,然后判断选择的语言是“简体中文”还是“英语”。

当选择语言为“简体中文”时,将Windows.Globalization命名空间下的ApplicationLanguages类的PrimaryLanguageOverride属性赋值为“zh-CN”,PrimaryLanguageOverride属性用于获取或设置应用程序的首选语言标记,当此属性值为“zh-CN”时表示设置应用程序的主要语言为中文(简体)。当选择语言为“英语”时,则将PrimaryLanguageOverride属性赋值为“en-US”,表示应用程序的主要语言为英语。

然后为“确认选择”按钮添加单击事件处理方法ConfirmSelected_Click,单击此按钮将返回MainPage显示信息页面,代码如下所示:

private void ConfirmSelected_Click(object sender, RoutedEventArgs e)

{

    //跳转到MainPage显示信息页面

    Frame.Navigate(typeof(MainPage));

}

在上面的代码中调用Frame.Navigate方法跳转到MainPage显示信息页面。

运行程序查看效果,在显示信息页面中单击“设置语言”按钮,跳转到语言设置页面,在语言列表框中选择“简体中文”,单击“确认选择”按钮返回显示信息界面后,单击“显示信息”按钮,会显示中文信息的“你好世界”。如果在语言设置页面选择的语言为“英语”,单击“确认选择”按钮返回显示信息界面后单击“显示信息”按钮,会显示英语信息的“Hello World”。上述操作过程如图18-2418-27所示。

18-24 在语言设置页面选择“简体中文”

18-25 在显示信息页面显示“你好世界”

18-26 在语言设置页面选择“英语”

    

    18-27 在显示信息页面显示“Hello World

本小节实现了通过添加的语言设置选项来改变应用程序显示信息的语言。下一小节将要讲解如何设置指定页面中信息的语言。

更多相关文章
  • 原文链接:http://blog.polossk.com/201405/c-plus-plus-g-plus-plus G++? 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编译器中编译C++程序的命令而已. 那么他们之间的区别是什么? 在提交题目中的语言选项里,G++和C+ ...
  • 上一小节介绍了通过在应用程序中添加语言设置选项来改变整个应用显示信息的语言,而有时用户只想对应用中某一页面信息的语言进行调整,这时就不能使用上一小节所讲述的知识来对应用进行设置.下面将通过一个示例介绍如何在指定页面上添加语言可选项,选择语言选项后单击"显示信息"按钮来显示相应语言 ...
  • 上文提到了引用字符串资源具有两种方式,分别是在XAML元素中和在后台代码中引用资源文件中的字符串资源.在第一小节已经介绍了如何在XAML元素中引用字符串资源,本小节将讲解在后台代码中引用字符串资源的相关知识点. 下面通过一个示例直接讲述如何在后台代码中引用资源文件中的字符串资源.新建一个Window ...
  • 在应用程序中可以通过XAML元素和后台代码两种方式引用资源文件中的字符串资源.本小节先讲述如何在XAML元素中引用字符串资源的相关知识点. 在XAML元素中可以通过使用x:Uid属性来引用资源文件中的字符串资源,这些字符串资源存储在资源文件中,下面介绍如何在项目中新建资源文件.添加字符串资源以及在X ...
  •    R有着非常强大的绘图功能,我们可以利用简单的几行代码绘制出各种图形来,但是有时候默认的图形设置没法满足我们的需要,甚至会碰到各种各样的小问题:如坐标轴或者标题出界了,或者图例说明的大小或者位置遮挡住了图形,甚至有时候默认的颜色也不能满足我们的需求.如何进行调整呢?这就用到了"强大&q ...
  • 设置语言的流程一.关联的配置文件/etc/config/luci查看配置文件内容如下:root@hbg:/# cat /etc/config/luci config core 'main'        option mediaurlbase '/luci-static/openwrt.org'   ...
  • 前面几个小节介绍了如何引用自身项目的资源,而有时在应用程序开发过程中可能需要访问其他项目中的资源.例如,当几个人或十几个人一起设计一个解决方案时,每个人的工作都是不同的,编写的项目也是不同的,但是每个人都可能需要访问其他项目的某些资源,这就引入了类库资源的概念.对于每一个项目都能够引用的资源,我们称 ...
  • zabbix2.2.4没有中文语言选项和关闭其它语言选项方法
    今天更新zabbix监控时发现2.2.4版本中默认没有中文语言选项,如下:需要在include/locales.inc.php文件中的第50行到80行配置,将需要的语言选项配置为true,而没有必须的配置为false,只保留英语选项和中文选项,我的配置如下:刷新网页后,将会发现中文语言选项,如下:配 ...
一周排行
  • iOS培训章节——C++函数的重载
    蓝鸥iOS培训老师推荐:在C中如果要实现一个结果可有多种方法,可用不同的展示.那么比如说: ...
  • 使用Wireshark来检测一次HTTP连接过程
    Wireshark是一个类似tcpdump的嗅探软件,界面更人性化一些,今天我用它来检测一 ...
  •  Apache Cassandra是一个大规模可伸缩的开源NoSQL数据库.Cassandra完美地支持管理大量的结构化,半结构化和非结构化数据,且能够跨多个数据中心和云.Cassandra提供了持续可用性,线性扩展 ...
  • python和C++一样,支持多继承.概念虽然容易,但是困难的工作是如果子类调用一个自身没有定义的属性,它是按照何种顺序去到父类寻找呢,尤其是众多父类中有多个都包含该同名属性. class P1 #(object): ...
  • Android开源框架(1)
        刚看了CSDN上的Android开源项目,我就自己自身情况,觉得可以学的做了如下整 ...
  • 在Linux系统中一般采用编译源码的方式来安装apache,有两种方法可以让apache在系统启动时自动启动. 方法一:修改配置文件      配置文件路径:# vi /etc/rc.d/rc.local      ...
  • 背景知识: 安卓系统在收到短信时,会发出一个广播Intent,动作名称为android.provider.Telephony.SMS_RECEIVED Intent中的pdus(Object[])中存放短信内容 &l ...
  • office2007、2010无法使用搜狗、谷歌等输入法解决
    故障情况:有时候用office2010办公的时候调用不出搜狗拼音.谷歌等输入法,系统其他程 ...
  • 文档目录1.DataGrid2.DropDownList3.GridView4.Repeater5.TreeView6.IFRAME    Datagrid ; padding-right:3px;}solid#B2 ...
  • 成功者价值连城的习惯,你一定要养成!成功是一种习惯,失败也是一种习惯.你的习惯无法改变,但可以用好的习惯来代替.成功很简单,只要简单的事情重复做,养成习惯,如此而己.以下是成功者的13个价值连城的习惯,可称之为百万元 ...