Winform/WPF国际化处理
1.Winfrom国际化处理方式
==》
Winform中国际化支持可将UI页面和.cs文件分开处理
处理窗体方式如下:
1.选择Form窗体设置其--Language(默认中文--Default)、Localizable(true)
2.选择具体控件-->设置Text属性(重复1.2.操作即可支持国际化,会自动生成对应的资源文件)

处理.cs文件如下:
1.选择项目添加资源文件(新建项-->常规-->资源文件,可多个),实际使用如下:
MessageBox.Show("Test==" + ResourceUse.Properties.Resources.error);
ResourceUse,为命名空间。
注意:程序启动时添加如下代码,可支持英文,反之不添加默认为中文。
//Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
//Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
2.WPF处理国际化
1.选择项目添加资源文件(新建项-->常规-->资源文件,可多个),实际使用如下:
2.UI资源文件应用如下
xmlns:p="clr-namespace:ResourcesUsingWpf.Properties" //添加引用
Title="{x:Static p:Resources.language}" //应用
3..cs文件中资源文件应用如下:
MessageBox.Show("error==" + ResourcesUsingWpf.Properties.Resources.error);
注意:确保要在Wfp页面中使用的资源的访问修饰符为Public,否则无法绑定将出错。
==>

详细介绍如下:
C#国际化方案
MSDN国际化的资料:
http://msdn.microsoft.com/zh-cn/library/9xdxwwkc(v=vs.90).aspx
互联网相关资料
语言代码表
http://www.lingoes.cn/zh/translator/langcode.htm
2.1 分析
使用C#中开发桌面应用时的技术有Winform和Wpf,在开发过程中常用到第三方控件库。因此,国际化问题需考虑以下问题:
l Winform和Wpf的支持;
l 第三方控件的兼容;
2.2 使用技术
l 资源文件技术
l Winform中本地化技术
l Wpf绑定技术
2.3 处理目标
目标 方式
Winform控件 本地化设计
Wpf控件 静态资源绑定
用于显示的代码中的文本 资源读取
3 国际化处理
3.1 自动生成国际化资源----Winform专有技术
VS已在Winform窗体设计时集成了国际化的支持,使得我们在做Winform窗体设计时通过设计器即可自动完成国际化资源的自动生成。
l 步骤
1. 设置From属性设计器中的Localizable属性为True;
2. 打开From数据在“属性”窗口中,将窗体的 Localizable 属性设置为 true。
3. Language 属性已经设置为“(默认值)”。
4. 将 Button 控件从“工具箱”的“Windows 窗体”选项卡拖到窗体上,然后将其 Text 属性设置为 Hello World。
5. 将该窗体的 Language 属性设置为“德语(德国)”。
6. 将该按钮的 Text 属性设置为 Hallo Welt。
7. 将该窗体的 Language 属性设置为“法语(法国)”。
8. 将该按钮的 Text 属性设置为 Bonjour le Monde。如果需要的话,可调整该按钮的大小以容纳较长的字符串。
9. 保存。
经过以上步骤处理完,该From的不同语言的资源文件会自动生成在From1.cs下,包含:Form1.de-DE.resx、Form1.fr-FR.resx、Form1.resx,其中Form1.resx为默认语言的资源文件。
l 内部原理
Winform控件中大多关于大小、外观、文本的属性都标记了特性[Localizable(true)],标记了此特性的属性都支持国际化处理,支持从特定区域对应的资源文件中读取数据并设值。经过国际化处理后的Winform窗体会针对不同的语言生成各自独立的一份资源文件存储各自本地化数据,命名格式为:窗体名称.语言代码.resx,并在窗体的设计代码文件(Form1.Designer.cs)中生成读取区域资源文件数据的代码。
l 注意
Winform控件中大部分关于大小、外观、文本值属性都标记了特性[Localizable(true)],支持国际化处理,已可满足国际化的需求,但并非所有属性都支持。
3.2 手动增加国际化资源
手动增加国际化资源使用的方式适用与所有需要国际化处理的场景。
l 步骤
1. 在“项目”菜单上单击“添加新项”。
2. 在“模板”框中“常规”->“资源文件”模板。在“名称”框中键入文件名,如“WinFormStrings.resx”。WinFormStrings.resx 文件将作为默认语言资源文件。每当应用程序找不到更适合于用户界面区域性的资源时,就将访问这些资源。
该文件被添加到“解决方案资源管理器”中的项目中并自动打开。
3. 在资源视图窗体中设置“访问修饰符”为Public,否则wpf中无法绑定。
4. 在资源视图窗体中选择“字符串”资源类型(也可选择其他类型),单击一个空行,并在“名称”列中输入 strMessage,在“值”列中输入 Hello World。
5. 保存文件。
6. 再执行步骤 1-5 两次以创建两个分别名为 WinFormStrings.de-DE.resx 和 WinFormStrings.fr-FR.resx 的资源文件,并且这两个文件具有在下表中指定的字符串资源。WinFormStrings.de-DE.resx 文件将包含特定于在德国讲的德语的资源。WinFormStrings.fr-FR.resx 文件将包含特定于在法国讲的法语的资源
资源文件名 名称 值
WinFormStrings.de-DE.resx strMessage Hallo Welt
WinFormStrings.fr-FR.resx strMessage Bonjour le Monde
l 规范
Ø 资源应先在默认语言资源文件中增加,如果在其他要使用的语言中有差异,再在对应语言资源文件中用同名命名并设值。原因如下:
1. 如果在某语言环境下运行程序时无法找到对应语言资源,则会从默认语言资源中查找。
2. 在默认语言资源中增加资源后将自动再资源类文件中生成对应的静态资源属性,方便使用。
l 代码访问资源
string str = WinFormStrings.strMessage;
l Wpf元素绑定资源
注意:确保要在Wfp页面中使用的资源的访问修饰符为Public,否则无法绑定将出错。
==>

步骤如下:
1. 在xaml中引用资源类命名控件,如下:
xmlns:loclp="clr-namespace:WfpInternationalizationTest.Properties"
2. 在元素上绑定
<Button Width="85"
Height="30"
Margin="121,139,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Content="{Binding Source={x:Static loclp:WinFormStrings.strMessage},Mode=OneTime}" />
或者
Content="{x:Static loclp:WinFormStrings.strMessage}"
使用Binding的方式时,如果遇到资源值与绑定属性数据类型不匹配时会尝试通过TypeConverter进行数据转换,而直接使用静态设置方式不会尝试转换。如需要将Wpf的Margin字符串资源设置到元素上时可使用Binding方式,资源中使用Margin的字符串如“10,20,3,1”形式即可,wpf内部会自动通过TypeConverter将字符串转换为Margin数据类型System.Windows.Thickness。
4 国际化开发指导
为保证国际化工作的效率,可先将所有需要国际化数据在默认语言资源文件中增加资源并使用,待默认语言资源填充完或到一个阶段后,将资源数据复制到Excel中,翻译完毕后再手动增加其他语言资源文件,并将翻译好的Excel中的资源数据复制到资源文件。
步骤如下:
1. 在VS设计器中改变所有设计好的Winform窗体的Localizable属性为True;
2. 将所有Wpf中使用到的文本和影响元素国际化的其他数据,如元素的Width,都在手动建立的默认语言资源文件中加入,并在元素中绑定;
3. 将所有代码中会在界面中显示的非数据库中的字符串数据全在默认语言资源文件中加入,并通过代码获取;
4. 所有Winform窗体下的默认语言资源文件的需国际化处理的资源数据,及所有手动增加的默认资源文件中需国际化处理的资源数据,针对资源文件分别创建Excel 文件并将数据复制进入。
5. 在Excel中创建特定语言的Sheet页,并将默认语言资源数据复制进入,将翻译好的数据修改填写到对应的值单元格中。针对所遇Excel做相同处理。
6. 针对每种语言,对Winform窗体生成的和手动创建的资源文件建立“资源文件名.语言代码.resx”命名格式的特定语言资源文件,并将翻译完的数据复制进入。
7. 在应用程序入口加入设置语言区域的代码测试,如下代码为针对美国英语的测试:
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
Winform/WPF国际化处理的更多相关文章
- Winform/WPF中内嵌BeetleX的HTTP服务
在新版本的BeetleX.FastHttpApi加入了对netstandard2.0支持,如果程序基于.NetFramework4.6.1来构建WinForm或WPF桌面程序的情况下可以直接把Beet ...
- 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案
Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: 1. 在winform中操作ppt,翻页.播放.退出:显示 总页数.当前播放页数 2. 启动播放ppt时录制视 ...
- 优雅的在WinForm/WPF/控制台 中使用特性封装WebApi
优雅的在WinForm/WPF/控制台 中使用特性封装WebApi 说明 在C/S端作为Server,建立HTTP请求,方便快捷. 1.使用到的类库 Newtonsoft.dll 2.封装 HttpL ...
- MFC,QT与WinForm,WPF简介
编程语言的组成编程语言做为一种语言自然和英语这些自然语言有类似的地方.学英语时我们知道要先记26个字母,然后单词及其发音,接下来就是词组,句子.反正简单的说就是记单词,熟悉词法,句法.接下来就是应用了 ...
- 把演讲人的桌面、头像、声音合成后推送到 指定的直播流平台上; 录制电脑桌面、摄像头头像、声音保存为本地视频; 适用于讲课老师、医生等演讲内容保存为视频; 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案
提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案 Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: ...
- 后续来啦:Winform/WPF中快速搭建日志面板
后续来啦:Winform/WPF中快速搭建日志面板 继昨天发文ASP.NET Core 可视化日志组件使用(阅读文章,查看视频)后,视频下有朋友留言 "Winform客户端的程序能用它不?& ...
- winform,wpf,winrt获取屏幕分辨率
winform 当前的屏幕除任务栏外的工作域大小 this.Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Widt ...
- 初识MFC,WinForm,WPF,Q't
MFC和QT是C++中常见的GUI框架,而WinForm和WPF是C#中常用的框架,不过我们一般很少叫WinForm框架,可能直接叫图形控件类库更多点.反正只是个称呼罢了,爱咋叫就咋叫.另外WinFo ...
- 初识MFC,WinForm,WPF,Q't
MFC和QT是C++中常见的GUI框架,而WinForm和WPF是C#中常用的框架,不过我们一般很少叫WinForm框架,可能直接叫图形控件类库更多点.反正只是个称呼罢了,爱咋叫就咋叫.另外WinFo ...
随机推荐
- 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境
做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框 ...
- Wamp安装使用+Git for Windows
相信很多朋友都曾在windows上做过web开发,我们常用的Web应用程序平台是:Apache+Mysql+Perl/PHP/Python,在windows下集成称为WAMP.web开发新手有时候由于 ...
- codeforces magic five --快速幂模
题目链接:http://codeforces.com/contest/327/problem/C 首先先算出一个周期里面的值,保存在ans里面,就是平常的快速幂模m做法. 然后要计算一个公式,比如有k ...
- sgu548 Dragons and Princesses 贪心+优先队列
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=548 题目意思: 有一个骑士,要经过n个房间,开始在第一个房间,每个房间里面有龙或者 ...
- RViz 实时观测机器人建立导航2D封闭空间地图过程 (SLAM) ----27
原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ ROS提供了非常强大的图形化模拟环境 RViz,这个 RViz 能做的事情非常多.今天我们学习一下如何使 ...
- php部分---对数据的多条件查询,批量删除
1.给多条件查询,添加条件 <h1>新闻信息查看</h1> <?php $tiaojian1=" 1=1"; $tiaojian2=" 1= ...
- HTMO DOM部分---小练习;列表之间移动、日期选择、好友选中、滑动效果、滚动条效果、飞入飞出效果。
一:列表之间数据移动 第一个列表里面有内容,第二个里面没有 实现功能: 点击左侧列表选中一项内容,点击按钮,复制到右侧 点击复制所有按钮,将左侧列表所有数据,复制到右侧 扩展功能:右侧列表实现去重复 ...
- Memcached安装及配置
一.Memcached介绍 1.Memcached是国外社区网站LiveJournal团队开发,通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能. 2.官方站点http://me ...
- spark 分析sql内容再插入到sql表中
package cn.spark.study.core.mycode_dataFrame; import java.sql.DriverManager;import java.util.ArrayLi ...
- Java泛型和链表
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...