winform 不同语言(中文,英文等)
Visual Studio 对于.NET 程序的本地化提供了完整的支持,这里仅介绍实现多语言版本本地化程序的简单步骤.
注意黑体处为关键点.
一. 窗体本地化
对于Windows 窗体,你需要做的第一步是确定你的默认界面语言,默认语言是指当执行程序无法找到已定义的本地化资源时,默认使用的语言,由于.net使用utf-8作为默认编码,一般情况下在任何语言的系统上都能正常显示.
本地化窗体一个关键的步骤是将窗体的本地化属性(Localizable)设置为True,此时窗体代码中自动生成的代码部分的字符串(Text属性)将由原来的"this.Text
= Form1"变为resources.ApplyResources(this, "$this")",并且窗体文件名下面会多出一个资源文件"Form1.resx",双击该资源文件可以看到字符串已经生成为资源了
像往常一样在窗体上加入你需要的控件,并设置好属性,控件的Text属性同样会自动生成为资源(双击Form1.resx看看吧~),简单吧,我们来看下一步,本地化窗体.
下面我们来添加英语环境下的窗体.在窗体属性窗口中找到Language属性(挨着Localizable),选择"英语(美国)",现在我们把窗体上的各个字符串翻译成英文,并修改窗体的默认字体为Arial,字号8,完成后你会看到窗体文件名下面多出一个Form1.en-US.resx,这里用来保存已本地化为英文的资源.编译程序,拷贝到英文系统下执行程序看看,效果怎么样?(什么?你没有英文环境?好吧,后面会提供解决办法)
现在你已经成功的实现了中文简体与英文美国的完美支持,如果需要其他语种的支持,选择Language属性列表中相应的语种重复上述步骤即可.需要注意的是.net使用的是unicode编码,需要用unicode编码其他语种后输入到界面上,否则特别像繁体字容易出现乱码.
需要注意的情况:如果需要在窗体上添加删除控件,必须把窗体语言属性(Language)修改为默认后才可以进行修改.
下面我们来看一下资源文件如何处理
二. 资源本地化
在工程名称上点击右键,选择添加新项目,生成Resource1.resx文件,双击打开该文件,默认为字符串资源编辑器,在这里你可以定义字符串资源,在字符串值中输入"Hello
World"(不包含双引号),现在就可以在代码中直接用Resource1.String1来引用了,注意这里的资源也是同窗体一样,是默认语言下的资源,在解释如何添加其他语言前,我们先介绍一下.net解析资源的步骤
.net 资源文件名(这里是Resource1.resx)由根名称(即Resource1),本地语言名称(默认情况下还没有)及扩展名组成,在读取资源时,资源管理器会根据当前环境决定需要的本地语言名称,例如英语,然后试图以全名读取资源,美国英语的本地名称为en-US(更多语言名称可以从MSDN中查询CultureInfo信息得到),那么资源全名为Resource1.en-US.resx,如果存在该文件,则载入该文件作为资源文件,如果没有则使用默认值Resource1.resx,确定好资源文件后开始查找指定的资源(例如"String1"),如果在本地资源文件中没有找到,则向上查找上一级的本地资源文件,最终找到根名称Resource1为止.更多信息参考文章最后所附连接.
现在我们来添加美国英语资源,使用项目菜单添加新项,添加一个新的资源文件,命名为Resource1.en-US.resx,双击打开,把Resource1.resx中的资源翻译成英语填入其中,在代码中添加一个窗体载入事件,在事件处理代码中添加一行MessageBox.Show(Resource1.String1);编译运行程序,观察在中文简体系统和英文系统下的显示内容.
不停的在不同语言系统环境下切换很麻烦,下面提供可以在一台电脑上测试不同语种的解决方案.
三. 切换显示语言
C# 窗体程序使用CultureInfo来管理当前语言,这里CultureInfo分为两种,一种决定语言格式,一种决定语言资源(这里我们仅需要后者),只需简单的设置如下两个变量即可改变程序显示语言:
System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture;
在窗体初始化之前,我们设置
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
即可把程序执行语言切换为美国英语,编译程序试试看吧
演练:本地化 Windows 窗体
Visual Studio 项目系统为本地化 Windows 窗体应用程序提供相当大的支持。下面是两种使用 Visual
Studio 开发环境生成资源文件的方法:
- 使项目系统为可本地化的用户界面元素(如窗体上的文本和图像)生成资源文件。然后将该资源文件生成到附属程序集中。
- 添加一个资源文件模板然后使用 XML 设计器编辑该模板。采取后一种方法的原因之一是为了生成在对话框和错误信息中出现的可本地化字符串。然后,必须编写代码以访问这些资源。
本演练主题在一个 Windows 应用程序项目中演示这两种过程。
还可以将文本文件转换为资源文件;有关更多信息,请参见文本文件格式中的资源和资源文件生成器 (Resgen.exe)。
使 Visual Studio 生成资源文件
1. 创建名为“WindowsApplication1”的新 Windows 应用程序。有关详细信息,请参见如何:创建 Windows 应用程序项目。
2. 在“属性”窗口中,将窗体的 Localizable 属性设置为 true。
Language 属性已经设置为“(默认值)”。
3. 将 Button 控件从“工具箱”的“Windows 窗体”选项卡拖到窗体上,然后将其 Text 属性设置为 Hello
World。
4. 将该窗体的 Language 属性设置为“德语(德国)”。
5. 将该按钮的 Text 属性设置为 Hallo
Welt。
6. 将该窗体的 Language 属性设置为“法语(法国)”。
7. 将该按钮的 Text 属性设置为 Bonjour
le Monde。如果需要的话,可调整该按钮的大小以容纳较长的字符串。
8. 保存和生成解决方案。
9. 单击“解决方案资源管理器”中的“显示所有文件”按钮。
资源文件出现在 Form1.vb、Form1.cs 或 Form1.jsl 下面。Form1.resx 是默认区域性的资源文件,它将生成到主程序集中。Form1.de-DE.resx 是在德国讲的德语的资源文件。Form1.fr-FR.resx 是在法国讲的法语的资源文件。
此外,您将看到名为 Form1.de.resx 和 Form1.fr.resx 的文件。Visual
Studio 自动创建这些文件,以便解决 Visual SourceSafe 中存在的一个限制,即 Visual SourceSafe 不得不在保存操作期间处理将新文件添加到项目中的操作。.resx 文件为空并且不包含任何资源。
10. 按 F5 键或从“调试”菜单中选择“启动”。
现在将看到对话框中出现英语、法语或德语的问候,具体看到哪一种取决于操作系统的 UI 语言。
注意 |
Windows 中使用的用户界面语言是“CurrentUICulture”设置的一种功能。如果您的 Windows 副本装有多语言用户界面包 (MUI),则可以在控制面板中更改用户界面语言。有关更多信息,请参阅 Windows |
下面的过程说明如何设置用户界面区域性,以便该应用程序显示法语资源。在实际应用程序中,不用这种方式硬编码用户界面区域性。用户界面区域性的设置将取决于用户设置或应用程序设置。
设置用户界面区域性以查看特定资源
1. 在“代码编辑器”中,在模块开始处将下面的代码添加到 Form1 声明之前:
2. ' Visual Basic
3. Imports System.Globalization
4. Imports System.Threading
5.
6. // C#
7. using System.Globalization;
8. using System.Threading;
9.
10. // Visual J#
11. import System.Globalization.*;
import System.Threading.*;
12. 添加下列代码。在 Visual Basic 中,调用 InitializeComponent 函数前应使用 New 函数。在 Visual
C# 和 Visual J# 中,应使用 Form1,并且也在调用 InitializeComponent 函数之前。
13. ' Visual Basic
14. ' Sets the UI culture to French (France).
15. Thread.CurrentThread.CurrentUICulture = New CultureInfo("fr-FR")
16.
17. // C#
18. // Sets the UI culture to French (France).
19. Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
20.
21. // Visual J#
22. // Sets the UI culture to French (France).
System.Threading.Thread.get_CurrentThread().set_CurrentUICulture( new CultureInfo("fr-FR"));
23. 保存和生成解决方案。
24. 按 F5 键或从“调试”菜单中选择“启动”。
现在该窗体将始终以法语显示。如果早已更改了该按钮的大小以容纳较长的法语字符串,则请注意,在法语资源文件中也已经保持了该按钮的大小。
手动向项目中添加资源文件并编辑它们
1. 在“项目”菜单上单击“添加新项”。
2. 在“模板”框中选择“程序集资源文件”模板。在“名称”框中键入文件名“WinFormStrings.resx”。WinFormStrings.resx 文件将包含英语的后备资源。每当应用程序找不到更适合于用户界面区域性的资源时,就将访问这些资源。
该文件被添加到“解决方案资源管理器”中的项目中,并在 XML 设计器内的“数据”视图里自动打开。
3. 在“数据表”窗格中选择“data”。
4. 在“数据”窗格中,单击一个空行,并在“名称”列中输入 strMessage,在“值”列中输入 Hello
World。
无需指定字符串的类型或 MIME 类型;它们用于对象。类型说明符保留所保存对象的数据类型。如果对象由二进制数据组成,则 MIME 类型说明符保持所存储的二进制信息的基类型 (base64)。
5. 在“文件”菜单上,单击“保存 WinFormStrings.resx”。
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 |
访问手动添加的资源
1. 在“代码编辑器”中,在代码模块的开始处导入 System.Resources 命名空间。
2. ' Visual Basic
3. Imports System.Resources
4.
5. // C#
6. using System.Resources;
7.
8. // Visual J#
import System.Resources.*;
9. 在“设计”视图中,双击该按钮以显示其 Click 事件处理程序的代码并添加下面的代码。ResourceManager 构造函数带两个参数。第一个参数是资源的根名称,即不带区域性和 .resx 后缀的资源文件的名称。第二个参数是主程序集。
在本演练中,不声明任何命名空间,因此 ResourceManager 构造函数的第一个参数可以采用ProjectName.ResourceFileRootName的形式。但是,在实际的应用程序中,您应设置 DefaultNamespace 属性。在该情况下,您将需要通过资源文件的完全限定的根名称(包括其命名空间)声明资源管理器。例如,如果默认命名空间为MyCompany.MyApplication.MyComponent,则ResourceManager 构造函数的第一个参数可以为MyCompany.MyApplication.MyComponent.WinFormStrings。
' Visual Basic
' Declare a Resource Manager instance.
Dim LocRM As New ResourceManager("WindowsApplication1.WinFormStrings", GetType(Form1).Assembly)
' Assign the string for the "strMessage" key to a message box.
MessageBox.Show(LocRM.GetString("strMessage"))
// C#
// Declare a Resource Manager instance.
ResourceManager LocRM = new ResourceManager("WindowsApplication1.WinFormStrings",typeof(Form1).Assembly);
// Assign the string for the "strMessage" key to a message box.
MessageBox.Show(LocRM.GetString("strMessage"));
// Visual J#
// Declare a Resource Manager instance.
ResourceManager LocRM = new ResourceManager("WindowsApplication1.WinFormStrings",
System.Type. GetType("WindowsApplication1.Form1").get_Assembly());
// Assign the string for the "strMessage" key to a message box.
MessageBox.Show(LocRM.GetString("strMessage"));
注意 |
默认情况下,ResourceManager 对象区分大小写。如果希望执行不区分大小写的查找(例如使“TXTWELCOME”与“txtWelcome”检索相同的资源),则可以将资源管理器的 IgnoreCase 属性设置为 true。但是,为了提高性能,最好始终为资源名称指定正确的大小写。如果执行不区分大小写的资源查找,则可能会导致性能问题。 |
10. 生成并运行窗体。单击按钮。
消息框将显示适合于用户界面区域性设置的字符串;或者如果它不能找到该用户界面区域性的资源,它将显示来自后备资源的字符串。
winform 不同语言(中文,英文等)的更多相关文章
- Windows server 2012 添加中文语言包(英文转为中文)(离线)
Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...
- Dynamics 365支持的语言(中文语言名/英文语言名)列表
本人微信和易信公众号:微软动态CRM专家罗勇 ,回复277或者20180803可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...
- m_Orchestrate learning system---网站的语言选择功能(中文英文)
m_Orchestrate learning system---网站的语言选择功能(中文英文) 一.总结 一句话总结:有两种方法,一是session+js端代码,而是session+php端代码. 推 ...
- hexo的jacman主题设置语言为英文后偶尔出现中文
发现这个问题也好久了.问题的具体表现是在根目录下的_config.yml设置了语言为英文,但是每次发布后都会更换一次语言.今天看了文件结构,知道了,每换一次语言“英文.简体中文.繁体中文”,就是这三种 ...
- Ubuntu修改系统语言为英文可支持中文
简单来说,就行修改/etc/default/locale文件,设置语言位UTF-8,如果没有这个语言,就执行命令locale-gen en_US.UTF-8进行安装,没有即时生效的话就重启. 查看当前 ...
- R语言中文分词包jiebaR
R语言中文分词包jiebaR R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据 ...
- 学习Nim语言.rar(nim语言中文教程下载)
学习Nim语言 nim 语法上类似python ,是一门静态编译型语言,nim 使用空格缩进标示语句块的开始和结束, 喜欢python风格的程序员应该也会很容易适应和喜欢nim的风格. nim语言官方 ...
- 苹果Swift语言中文教程资源汇总
苹果swift语言中文教程(零)搭配环境以及代码执行成功http://vjiazhi.com/kaifa/1014.html 苹果Swift语言中文教程(一)基础数据类型 http://vjiazhi ...
- sql 查询字段是中文/英文/数字 正则表达式
一.包含中文字符 select * from 表名 where 列名 like '%[吖-座]%' 二.包含英文字符 select * from 表名 where 列名 like '%[a-z]%' ...
- WinForm多语言版本实战项目演练
一.课程介绍 关于如何实现“WinForm多语言版本”网上有很多实现技术方案,可以说是“琳琅满目”,"包罗万象".俗话说的好:一千个读者就有一千个哈姆雷特!如果您工作中恰好也遇到这 ...
随机推荐
- Unicode转化为汉字
+ (NSString *)replaceUnicode:(NSString *)unicodeStr { NSString *tempStr1 = [unicodeStrstringByReplac ...
- 菜鸟崛起 DB Chapter 2 MySQL 5.6的概述与安装
在上文菜鸟崛起 DB Chapter 1 数据库概述我们初步认识了数据库,也知道市面上常见的几种数据库,下面我们就针对常见的MySQL数据库展开对DataBase的探讨. 2.1 MySQL介绍 M ...
- python 之函数
一 函数的定义:对功能和动作的封装和定义.二 函数的格式:def 函数名(形参列表): 函数名就是变量名:规则就是变量的规则 函数体(return) ret = 函数名(实参列表)三 函数的返回值:函 ...
- Sql Server 查看存储过程最后修改时间
Sql Server 查看存储过程最后修改时间 select * from sys.procedures order by modify_date desc
- 《Linux 性能优化实战—倪朋飞 》学习笔记 CPU 篇
平均负载 指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,即平均活跃进程数 可运行状态:正在使用CPU或者正在等待CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态 (Run ...
- CentOS7 minimal 没有netstat命令
在CentOS 7 minimal中使用netstat 时,发现显示如下,明显没有了netstat 命令 [root@localhost ~]# netstat -a -bash: netstat: ...
- Redis学习推荐
Redis快速入门 https://www.yiibai.com/redis/redis_quick_guide.html Redis用途和使用场景 https://blog.csdn.net/wei ...
- 【linux运维递进】
================================云计算和虚拟化=================================== docker openstack svn git ...
- 第四课:PHP 变量
变量指程序中使用的数值是可以变化的量,与常量(一旦被定义,就无法改变)相反. 变量是用于存储信息的"容器": 实例 <?php $x=5; $y=6; $z=$x+$y; e ...
- Ubunut18.04与Windows传输文件的方式
ubunut18.04与Windows传输文件的方式 开发环境:ubuntu18.04; 虚拟机:virtual box; 操作系统:Win10_64bits/专业版 在以前使用的ubuntu12.0 ...