WP7多国语言支持 from:http://blog.csdn.net/lee353086/article/details/6260676
2012-11-17 11:17
465 查看
WP7多国语言支持
Kagula2011/3/17
前言
本文阅读对象是有一定Visual Studio 2010使用经验的程序员。这里通过一些示例介绍如何让你的Windows Phone7 With Silverlight应用程序支持多国语言。
写本文时的开发环境为Visual Studio 2010专业版 with Windows Phone7开发包。使用的开发语言为C#
正文
语言定义采用“region-neutral”格式,例如,zh-CN 为中国(中华人民共和国),zh-TW为中国台湾,其它定义,参考附录[1]。右键单击[project name]->[Properties]->Application页面->点击[Assembly Information]->设置[Neutral Language]为[English(United States)],即默认语言为英文(美国), 当然在这里可以选择其它默认语言。
实现本地化
添加资源文件右键[project name]->[New Folder]命名为Resources。
右键[Resources]->[Add]->[New Item]->[Installed Templates]->[Visual C#]->[General]->[Resources File]->给待添加的资源文件起名为StringLibrary.resx,确保“Access Modifier”为“Public”。添加一条字符串资源定义:Name列填“HelloWorld”,Value列填“Hello,World!”。当Silverlight找不到你指定的语言所对应的资源时,会从这个文件取资源。
添加第二个资源文件起名为“StringLibrary.en-US.resx”,添加一条字符串资源:Name列填“HelloWorld”,Value列填“Hello,World!”。确保“Access Modifier”为“No Code Generation”。
添加第三个资源文件起名为“StringLibrary.zh-CN.resx”,添加一条字符串资源定义:Name列填“HelloWorld”,Value列填“你好,世界!”。确保“Access Modifier”为“No Code Generation”。
添加第四个资源文件起名为“StringLibrary.ja.resx” ,添加一条字符串资源定义:Name列填“HelloWorld”,Value列填“こんにちは、中国!”。确保“Access Modifier”为“No Code Generation”。
右键单击[project name]->[Unload Project]
右键单击[project name]->[Edit]
找到<SupportedCultures>标签对,在里面添加“en-US;zh-CN;ja”,如果你还支持其它多种语言,需要使用“;”符号分隔。比如“zh-CN; fr;fr-FR;ru;ru-RU;”具体含义查看附录[1]
右键单击[project name]->[Reload Project]
C#代码示例
[c-sharp] view plaincopy
//直接调用指定资源文件中的字符串资源
//ResourceManager rm = null;
//rm = new ResourceManager("testLocalized.Resources.StringLibrary.en-US", Assembly.GetExecutingAssembly());
//string hw = rm.GetString("HelloWorld");
//textBlock1~textBlock5 为textBlock控件的实例
//默认语言
textBlock1.Text = testLocalized.Resources.StringLibrary.HelloWorld;
//设置当前语言为中国(中华人民共和国)
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("zh-CN");
testLocalized.Resources.StringLibrary.Culture = ci;
textBlock2.Text = testLocalized.Resources.StringLibrary.HelloWorld;
//设置当前语言为日语(所有支持日文的区域)
//同理设置当前语言为中文(所有支持中文的区域),只要把"ja"改为"zh"就可以了,当然
//你需要增加一个名为StringLibrary.zh.resx的资源文件,而且要在<SupportedCultures>标签对
//里添加"zh"
System.Globalization.CultureInfo ciJA = new System.Globalization.CultureInfo("ja");
testLocalized.Resources.StringLibrary.Culture = ciJA;
textBlock3.Text = testLocalized.Resources.StringLibrary.HelloWorld;
//设置当前语言为韩语(所有支持韩文的区域)
//由于韩语不属于<SupportedCultures>标签对里支持的语言,而且也没有对应的资源文件
//所以Silverlight4调用StringLibrary.resx里“HelloWorld”的定义。
//这里不会抛出异常,程序会继续正常运行。
System.Globalization.CultureInfo ciKO = new System.Globalization.CultureInfo("ko");
testLocalized.Resources.StringLibrary.Culture = ciKO;
textBlock4.Text = testLocalized.Resources.StringLibrary.HelloWorld;
//恢复默认语言
testLocalized.Resources.StringLibrary.Culture = System.Threading.Thread.CurrentThread.CurrentUICulture;
textBlock5.Text = testLocalized.Resources.StringLibrary.HelloWorld;
//你可以改变System.Threading.Thread.CurrentThread.CurrentUICulture的值,来改变当前UI语言
XAML代码示例
在XAML本地化之前先添加class,C#代码如下
[c-sharp] view plaincopy
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace testLocalized
{
public class LocalizedStrings
{
public LocalizedStrings()
{
}
private static testLocalized.Resources.StringLibrary res = new testLocalized.Resources.StringLibrary();
public testLocalized.Resources.StringLibrary Resource1 { get { return res; } }
}
}
然后App.xaml中添加如下代码
[xhtml] view plaincopy
<Application.Resources>
<local:LocalizedStrings xmlns:local ="clr-namespace:testLocalized"
x:Key="LocalizedStrings" />
</Application.Resources>
上面这段代码的“Application.Resources”标签是原来就在的。里面的内容才是你需要添加的。
最后你的XAML代码可以实现本地化了,样例代码如下
[xhtml] view plaincopy
<TextBlock Height="30" HorizontalAlignment="Left" Margin="10,209,0,0" Name="textBlock6" Text="{Binding Path=Resource1.HelloWorld, Source={StaticResource LocalizedStrings }}" VerticalAlignment="Top" Width="180" />
其中Text="{Binding Path=Resource1.HelloWorld, Source={StaticResource LocalizedStrings }}" 的作用我做一下解释。LocalizedStrings是你刚才新建的class的名称。Resource1是你刚才新建的class定义的属性。HelloWorld则是key,用来在资源文件中搜索资源。如果你当前的UICulture是“zh-CN”,则Text属性的值会被“你好,世界!”这个字符串代替。
改变System.Threading.Thread.CurrentThread.CurrentUICulture的值后,在InitializeComponent执行后,你当前页面的UI才会反应对当前语言的修改。
附录
[1]《Culture Info Class》http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=VS.95).aspx
[2]《Localizing Silverlight-based Applications》
http://msdn.microsoft.com/en-us/library/cc838238(v=VS.95).aspx#localization_and_resource_files
663
相关文章推荐
- WP7多国语言支持
- [C] 跨平台使用TCHAR——让Linux等平台也支持tchar.h,解决跨平台时的格式控制字符问题,多国语言的同时显示(兼容vc/gcc/bcb,支持Windows/Linux/Mac)
- 图文并茂教你做ios本地化(支持多国/地区语言)
- utf-8支持多国语言,GB2312支持简体中文的。
- 【原创】多国语言支持的几个步骤
- WPF应用程序支持多国语言解决方案
- 终极实现WPF应用程序支持多国语言解决方案的源码下载
- EasyJWeb中灵活的多国语言支持
- WPF一种灵活的程序多国语言支持
- Make uploadify button text support multiple languages(使uploadify的buttonText支持多国语言)
- Android本地语言和多国语言支持
- iOS中代码支持多国语言切换的实现(Xcode5+iOS7)
- iOS中代码支持多国语言切换的实现(Xcode5+iOS7)
- iOS中代码支持多国语言切换的实现(Xcode5+iOS7)
- EasyJWeb中灵活的多国语言支持
- delphi支持多国语言简单方法
- C#多国语言支持的WinForm程序开发
- 红米Note4G TD/W版 专用TWRP2.8.1.5中文版(TTF字体,支持多国语言)
- .NET多国语言支持_文献翻译
- 多国语言支持36款杀毒引擎的在线病毒扫描网