WPF应用程序支持多国语言解决方案
来源:互联网 发布:小米6相机数据怎么清除 编辑:程序博客网 时间:2024/04/29 00:31
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. 测试新增语言资源文件
更改操作系统的地区设置(“开始” | 控制面板 |“区域和语言选项”)。
代码中控制
//中文为: "zh-CN"
CultureInfo ci =
new
CultureInfo(
"en-US"
);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
二、使用资源字典文件
这种方式的实现相对较为丰富,即可实现新增支持语言无需重新编译,也可实现程序运行中切换语言(参见本文实现动态切换程序显示语言),以下是常用实现方式。
1. 创建资源字典StringResource.xaml,包含需要支持多国语言的字符串
<ResourceDictionary xmlns=
"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
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
<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
- WPF应用程序支持多国语言解决方案
- WPF应用程序支持多国语言解决方案
- WPF应用程序支持多国语言解决方案
- 终极实现WPF应用程序支持多国语言解决方案的源码下载
- WPF一种灵活的程序多国语言支持
- 一种灵活的WPF程序多国语言支持
- 字符串的多国语言支持解决方案 通用解决方案篇
- 多国语言支持
- 支持多国语言
- 字符串的多国语言支持解决方案 Qt篇
- 多国语言解决方案
- WPF 多国语言 localization
- struts多国语言支持
- WP7多国语言支持
- WINCE多国语言支持
- Android支持多国语言
- WPF UI多国语言的实现
- 【VC编程技巧】动态链接库☞1.5设计支持多国语言应用程序
- Spring 几种注入方法
- jQueryEasyUI Messager基本使用
- solr4.40导入mysql数据库数据建立索引
- 集合视图UICollectionView 介绍及其示例程序
- js取消按键事件的默认行为
- WPF应用程序支持多国语言解决方案
- Opengl和windows的逻辑坐标到设备坐标转换的理解
- Java的MD5加密返回32或24位的字符
- Java多维数组第二维维度可以不同
- PHP识别电脑还是手机访问网站
- jquery经典的.ready
- Win8去掉桌面图标的箭头
- 就这样
- 矩阵在初等行变换下的标准型