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查看配置文件内容如下:[email protected]:/# 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,只保留英语选项和中文选项,我的配置如下:刷新网页后,将会发现中文语言选项,如下:配 ...
一周排行
  • nmon监控服务器资源与单机分析
    http://www.51testing.com/html/00/136628 ...
  • windows cmd 网络常见的9个命令,使用ping命令检查到IP地址210.43.16.17的计算机的连通性,该例为连接正常.共发送了四个测试数据包,正确接收到四个数据包. (2) ping命令的基本应用一般情 ...
  • 在Oracle div:eq(0) > div:eq(3) > table:eq(2) > tbody:eq(0) > tr:eq(0) > td:eq(0) > div:eq(0 ...
  • DMESG NAME dmesg - print or control the kernel ring buffer(打印或者控制内核环缓冲) Usage: dmesg [options] Options: -C, ...
  • Visual Studio .NET 是开发 .NET 应用程序的最流行的方法,.NET 框架提供了非常多的命令工具.此外,.NET Framework SDK 还提供了更多的命令行工具.事实上,像Visual St ...
  •  大约是在2006年的时候起,我就开始在网络上写技术博客,这个时候工作也有几年时间了,写技术博客的目的主要是记录自己遇到问题是如何解决的,起一个备忘的作用,不过这个时候我的阵地还不在51CTO,而是在其它地方.因为那 ...
  • 首先明声一点,本文中主要引用的事件,并非我原创,我们可以在网上很轻松的搜到.而让我知道了这个故事的,是罗辑思维,非常感谢.下面就来引用一件真实发生的事件,让我们来看一看这辆神奇的汽车:有一天美国通用汽车公司的庞帝雅克 ...
  • [1]README 1.0)由于实现进程的切换任务,其功能涉及到 LDT + TSS +GATE + INTERRUPT:下面我们对这些内容进行复习: 1.1) source code from orange's i ...
  •   第一周 所花时间(包括上课) 7小时 代码量(行) 56行 博客量(篇) 4篇 了解到的知识点 学会了一种新的程序编写思想——分割,通过这种思想将复杂的程序分解为一个个简单的小问题,大大减小了程序设计的难度
  • Tableau在斯坦福大学中诞生,基于众多博士的奇思妙想最终实现,它正逐渐成为优秀的数据分析工具之一,可以生动地分析实际存在的任何结构化数据,以在几分钟内生成美观的图表.坐标图.仪表盘与报告.利用 Tableau 简 ...