终极实现WPF应⽤程序⽀持多国语⾔解决⽅案的源码下载或者,代码需要使⽤ 4.0
促使程序赢得更多客户的最好、最经济的⽅法是使之⽀持多国语⾔,⽽不是将潜在的客户群限制为全球近70亿⼈⼝中的⼀⼩部分。本⽂介绍四种实现WPF应⽤程序⽀持多国语⾔的解决⽅案。
效果如下图:
Language - en-US (英⽂)
Language - zh-CN (中⽂)
阅读⽬录
⼀、使⽤LocBaml⼯具
这是微软MSDN给出的⼀种解决⽅案,请参见。这种⽅式操作相对繁琐,不能⽅便的在程序运⾏过程中动态切换语⾔,但是新增⽀持语⾔⽆需重新编译程序,这是这种实现⽅式的⼀个亮点。
1. 设置默认语⾔环境
备孕需要注意什么
项⽬⽂件LocalizationDemo.csproj添加<UICulture>en-US</UICulture>,程序集信息AsmblyInfo.cs中把[asmbly: 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. 编译项⽬,⽣成语⾔资源⽂件
⽣成的sources.dll,在\bin\Debug\en-US\⽬录下。
初三周记5. 将语⾔资源⽂件输出存储为 .csv ⽂件,以作进⼀步分析
将 复制到应⽤程序的 bin\debug ⽂件夹,即创建主应⽤程序集的位置。打开Visual Studio 命令提⽰(2010),进⼊bin\debug⽬录,运⾏命令: /par sources.dll /out:en-US.csv
6. 翻译可本地化内容
注意此步应当使⽤兼容unicode的⽂本编辑器进⾏编辑翻译。或者中⽂系统下将 .csv ⽂件在 Microsoft Excel 中进⾏查看,对最后⼀列(值)进⾏翻译更改,另存为zh-CN.csv。
21的因数有此时会弹出如下消息提⽰框,选择"是(Y)",
然后⽤记事本打开zh-CN.csv ⽂件,选择"另存为",如下图(初始编码为"ANSI")选择"UTF-8"
保存。
7. 使⽤ LocBaml ⽣成新增语⾔的.resources.dll 资源⽂件
胡辣汤怎么做好吃运⾏下⾯命令根据翻译的zh-CN.csv ⽣成中⽂资源⽂件sources.dll ,可以在E:\⽬录下找到,将⽣成
的sources.dll 复制到项⽬\bin\Debug\zh-CN\⽬录下即可。
< /generate sources.dll /trans:zh-CN.csv /out:E:\ /cul:zh-CN
8. 测试新增语⾔资源⽂件
更改操作系统的地区设置(“开始” | 控制⾯板 |“区域和语⾔选项”)。
代码中控制
⼆、使⽤资源字典⽂件
这种⽅式的实现相对较为丰富,即可实现新增⽀持语⾔⽆需重新编译,也可实现程序运⾏中切换语⾔(参见本⽂),以下是常⽤实现⽅式。
1. 创建资源字典StringResource.xaml ,包含需要⽀持多国语⾔的字符串
//中⽂为: "zh-CN"
CultureInfo ci = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;焦雅亮
1<ResourceDictionary xmlns="/winfx/2006/xaml/prentation"
2 xmlns:x="/winfx/2006/xaml"
3 xmlns:sys="clr-namespace:System;asmbly=mscorlib">
4<sys:String x:Key="WinTitle">MainWindow</sys:String>
5<sys:String x:Key="TblText">Support multi language demo.</sys:String>
6<sys:String x:Key="BtnOK">OK</sys:String>
7<sys:String x:Key="HdNo">No.</sys:String>
8<sys:String x:Key="HdName">Name</sys:String>
9<sys:String x:Key="HdGender">Gender</sys:String>
10<sys:String x:Key="HdDept">Dept</sys:String>
11<sys:String x:Key="HdEmail">Email</sys:String>
12<sys:String x:Key="HdTel">Tel</sys:String>
13<sys:String x:Key="MsgShowTime">Now time is:{0}</sys:String>
14</ResourceDictionary>
2.
1<Application x:Class="LocalizationDemo.App"
2 xmlns="/winfx/2006/xaml/prentation"
3 xmlns:x="/winfx/2006/xaml"
4 StartupUri="MainWindow.xaml" Exit="Application_Exit">
5<Application.Resources>
6<ResourceDictionary>
7<ResourceDictionary.MergedDictionaries>
8<ResourceDictionary Source="Resources\StringResource.xaml"/>
9<ResourceDictionary Source="Resources\StringResource.zh-CN.xaml"/>
10</ResourceDictionary.MergedDictionaries>
11</ResourceDictionary>
12</Application.Resources>
开学第一课观后感600字
13</Application>
3.
.
xaml⽂件,Text="{StaticResource TblText}"
.cs⽂件,string s = Application.Current.FindResource("MsgShowTime").ToString();
4.
1<ResourceDictionary xmlns="/winfx/2006/xaml/prentation"学炸酱面
2 xmlns:x="/winfx/2006/xaml"
3 xmlns:sys="clr-namespace:System;asmbly=mscorlib">
4<sys:String x:Key="WinTitle">主窗体</sys:String>
5<sys:String x:Key="TblText">⽀持多国语⾔⽰例。</sys:String>
6<sys:String x:Key="BtnOK">确定</sys:String>
7<sys:String x:Key="HdNo">员⼯号</sys:String>
8<sys:String x:Key="HdName">姓名</sys:String>
9<sys:String x:Key="HdGender">性别</sys:String>
10<sys:String x:Key="HdDept">部门</sys:String>
11<sys:String x:Key="HdEmail">邮箱</sys:String>
12<sys:String x:Key="HdTel">电话</sys:String>
13<sys:String x:Key="MsgShowTime">现在时间是:{0}</sys:String>
14</ResourceDictionary>
5.
List<ResourceDictionary> dictionaryList = new List<ResourceDictionary>();
foreach (ResourceDictionary dictionary in Application.Current.Resources.MergedDictionaries)
{
dictionaryList.Add(dictionary);
}
string requestedCulture = string.Format(@"Resources\StringResource.{0}.xaml", Culture);
ResourceDictionary resourceDictionary = dictionaryList.FirstOrDefault(d => d.Source.OriginalString.Equals(requestedCulture));
if (resourceDictionary == null)
{
requestedCulture = @"Resources\StringResource.xaml";
resourceDictionary = dictionaryList.FirstOrDefault(d => d.Source.OriginalString.Equals(requestedCulture));
}
if (resourceDictionary != null)
{
Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary);
Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
}
6.
这种⽅式和Winform⽀持多国语⾔保持⼀致,相对较容易实现,新增⽀持语⾔需要重新编译程序,所有的.resx⽂件必须放在同⼀个主程序集中。
1.
在资源⽂件sx中添加字符串资源,并将访问修饰符设置为Public。
新生儿怎么抱