WPF应用程序支持多国语言解决方案

WPF应用程序支持多国语言解决方案

促使程序赢得更多客户的最好、最经济的方法是使之支持多国语言,而不是将潜在的客户群限制为全球近70亿人口中的一小部分。本文介绍四种实现WPF应用程序支持多国语言的解决方案。

效果如下图:

Language - en-US (英文)

Language - zh-CN (中文)

一、使用LocBaml工具

这是微软MSDN给出的一种解决方案,请参见如何:对应用程序进行本地化。这种方式操作相对繁琐,不能方便的实现在程序运行过程中动态切换语言,但是新增支持语言无需对项目重新编译,这是这种实现方式的一个亮点。
1. 设置默认语言环境

项目文件LocalizationDemo.csproj添加<UICulture>en-US</UICulture>,程序集文件AssemblyInfo.cs中把[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]注释去掉。
2. 在xaml文件中添加Uid

打开Visual Studio 命令提示(2010)如下图,进入项目文件.csproj所在目录,运行命令:msbuild /t:updateuid LocalizationDemo.csproj;若要验证是否缺少或重复Uid,运行命令:msbuild /t:checkuid LocalizationDemo.csproj。

3. 通过Localization.Attributes,设置本地化的特性(属性)

如:<DataGridTextColumn x:Uid="DataGridTextColumn_1" Header="No." Width="auto" Binding="{Binding No}" Localization.Attributes="$Content(Ignore) Width(Ignore) Header(None Readable Modifiable)"/>,这里Width(Ignore)设置Width属性不实现本地化,Header(None Readable Modifiable)设置Header属性可读可写需要实现本地化,更多本地化特性细节请参见本地化特性和注释。
4. 编译项目,生成语言资源文件

生成的LocalizationDemo.resources.dll会在binDebugen-US目录下。
5. 将语言资源文件输出存储为 .csv 文件,以作进一步分析

将 LocBaml.exe(LocBaml 工具是一种尚未投产使用的应用程序。它显示为一种示例,该示例使用某些本地化 API 并演示如何编写本地化工具。点击下载LocBaml)复制到应用程序的 bindebug 文件夹,即创建主应用程序集的位置。打开Visual Studio 命令提示(2010),进入bindebug目录,运行命令:LocBaml.exe /parse en-US/LocalizationDemo.resources.dll /out:en-US.csv
6. 翻译可本地化内容

注意此步应当使用兼容unicode的文本编辑器进行编辑翻译。或者中文系统下将 .csv 文件在 Microsoft Excel 中进行查看,对最后一列(值)进行翻译更改,另存为zh-CN.csv。

此时会弹出如下消息提示框,选择"是(Y)",

然后用记事本打开zh-CN.csv文件,选择"另存为",如下图(初始编码为"ANSI")选择"UTF-8"保存。

7. 使用 LocBaml 生成新增语言的.resources.dll资源文件

运行下面命令根据翻译的zh-CN.csv生成中文资源文件LocalizationDemo.resources.dll,可以在E:目录下找到,将生成的LocalizationDemo.resources.dll复制到项目binDebugzh-CN目录下即可。

LocBaml.exe /generate en-US/LocalizationDemo.resources.dll /trans:zh-CN.csv /out:E: /cul:zh-CN
8. 测试新增语言资源文件

   更改操作系统的地区设置(“开始” | 控制面板 |“区域和语言选项”)。

   代码中控制

双击代码全选
1
2
3
4
//中文为: "zh-CN"   
CultureInfo ci = new CultureInfo( "en-US" );   
Thread.CurrentThread.CurrentCulture = ci;   
Thread.CurrentThread.CurrentUICulture = ci;

二、使用资源字典文件

这种方式的实现相对较为丰富,即可实现新增支持语言无需重新编译,也可实现程序运行中切换语言(参见本文实现动态切换程序显示语言),以下是常用实现方式。

1. 创建资源字典StringResource.xaml,包含需要支持多国语言的字符串

双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
                      xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:sys= "clr-namespace:System;assembly=mscorlib" >   
      <sys:String x:Key= "WinTitle" >MainWindow</sys:String>   
      <sys:String x:Key= "TblText" >Support multi language demo.</sys:String>   
      <sys:String x:Key= "BtnOK" >OK</sys:String>   
      <sys:String x:Key= "HdNo" >No.</sys:String>   
      <sys:String x:Key= "HdName" >Name</sys:String>   
      <sys:String x:Key= "HdGender" >Gender</sys:String>   
      <sys:String x:Key= "HdDept" >Dept</sys:String>   
      <sys:String x:Key= "HdEmail" >Email</sys:String>   
      <sys:String x:Key= "HdTel" >Tel</sys:String>   
      <sys:String x:Key= "MsgShowTime" >Now time is :{0}</sys:String>   
  </ResourceDictionary>

2. 在app.xaml中使用MergedDictionary

双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
<Application x:Class= "LocalizationDemo.App"
               xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
               xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml"
               StartupUri= "MainWindow.xaml" Exit= "Application_Exit" >   
      <Application.Resources>   
          <ResourceDictionary>   
              <ResourceDictionary.MergedDictionaries>   
                  <ResourceDictionary Source= "ResourcesStringResource.xaml" />   
                  <ResourceDictionary Source= "ResourcesStringResource.zh-CN.xaml" />   
              </ResourceDictionary.MergedDictionaries>   
          </ResourceDictionary>   
      </Application.Resources>   
  </Application>

3. 在程序中使用资源字典中的字符串

  • .xaml文件,Text="{StaticResource TblText}"

转载地址:http://tech.ddvip.com/2012-10/1351006517184005.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值