×
Namespaces

Variants
Actions
Revision as of 08:40, 30 November 2012 by hamishwillee (Talk | contribs)

Windows Phone应用本地化和全球化

From Nokia Developer Wiki
Jump to: navigation, search
SignpostIcon XAML 40.png
SignpostIcon WP7 70px.png
Article Metadata

代码示例
兼容于
文章
renlin 在 05 Nov 2012 创建
最后由 hamishwillee 在 30 Nov 2012 编辑

Contents

介绍

本文基于Windows Phone 8 SDK开发,着重介绍语言的选择和改变,本地化的其他特性,如日期显示格式等可参考应用本地化和全球化将介绍如何根据手机的设置自动适配语言,如何设置应用在磁贴或应用列表的显示语言,如何在程序中动态改变语言。

根据设备的设置进行本地化

新建工程后,在MainPage.xaml中添加一个TextBlock用来显示文字。 右键单击工程中Resource文件夹,添加一个Resource文件,命名为AppResources.zh-CN.resx,这里zh-CN表示中文简体,每种语言对应的符号请参考文化和语言支持文档; 在该资源文件中添加你要进行翻译的字符串,如图所示:
LanguageResources.png
在工程中的默认资源文件AppResources.resx中同样添加进这两个字符串,如法炮制可添加对其他语言的支持。

保存资源文件的添加后我们可在文件AppResources.Designer.cs中找到这两个字符串的定义:

        public static string PageName {
get {
return ResourceManager.GetString("PageName", resourceCulture);
}
}
...
public static string TestString {
get {
return ResourceManager.GetString("TestString", resourceCulture);
}
}

下一步就是将资源文件中定义的字符串绑定到需要用到的地方,本文需要用到的是页面名称和一个TextBlock。

 <TextBlock Text="{Binding Path=LocalizedResources.PageName,Source={StaticResource LocalizedStrings}}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
...
<TextBlock Grid.Row="1" Name="textBlock" Text="{Binding Path=LocalizedResources.TestString,Source={StaticResource LocalizedStrings}}" />

最后用文本打开工程文件LocalizationTest.csproj,找到项SupportedCultures,添加所有需要支持的语言符号到该项中。

<SupportedCultures>zh-CN;en-GB;fr-FR</SupportedCultures>

正确做完以上工作,就可以通过在模拟器的设置中改变语言和区域设置来测试你的本地化是否成功。

在磁贴和应用列表中应用标题的显示语言

根据微软的文档如何本地化 Windows Phone 应用程序标题,这部分工作似乎在Windows Phone Sdk中找不到解决方法,不过有牛人已经制作出一个免费的可执行文件,可以非常简单的生成需要的语言包File:WP7AppResLib.zip,在命令行中运行可执行文件会生成相应dll文件,在project中右键添加已存在文件的方式全部添加到工程中,如图所示是添加的支持中文简体和英语美国的dll包
AddDll.png

打开WMAppManifest.xml文件,在Display Name 和 Tile Title中分别添加@AppResLib.dll,-100,@AppResLib.dll,-200如图所示:
WMAppmanifest.png 运行,检查你的应用列表和磁贴中的应用程序标题是否符合本地化。

动态改变显示语言

为了显示动态改变显示语言i,在xaml文件中添加ListBox用来显示支持语言,添加一个Button进行页面切换,另外添加Page1.xaml,同样绑定页面标题和一个TextBlock。当用户点击语言项时,页面中的绑定的字符串将随之变为相应的语言。实现ListBox的SelecationChanged事件:

        private void TheList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string lan = null;
string indexString = theList.SelectedIndex.ToString();
switch (indexString)
{
case "0": lan = "zh-CN"; break;
case "1": lan = "en-GB"; break;
case "2": lan = "fr-FR"; break;
default: lan = "en-US"; break;
}
CultureInfo newCulture = new CultureInfo(lan);
Thread.CurrentThread.CurrentCulture = newCulture;
Thread.CurrentThread.CurrentUICulture = newCulture;
 
AppResources.Culture = newCulture;
//Manually set the language of current page.
textBlock.Text = LocalizationTest.Resources.AppResources.TestString;
pageTextBlk.Text = LocalizationTest.Resources.AppResources.PageName;
}

在这段代码中,当前页面两个字符串都是手动来改变的,这是因为虽然Culture已经变化,但是因为页面已经加载,TextBlock没有得到显示语言已经改变的通知。 而点击Button切换到另一页面,可以看到此页的显示语言已经随着上一页的选择而变化了。

Summary

代码示例:File:LocalizationTest.zip

相关链接

210 page views in the last 30 days.
×