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
Server 2003, Windows XP & Windows 2000 MUI
 站点。如果未安装 MUI,则可以用编程方式更改当前的 UI 区域性,如下所述。

下面的过程说明如何设置用户界面区域性,以便该应用程序显示法语资源。在实际应用程序中,不用这种方式硬编码用户界面区域性。用户界面区域性的设置将取决于用户设置或应用程序设置。

设置用户界面区域性以查看特定资源

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 不同语言(中文,英文等)的更多相关文章

  1. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

  2. Dynamics 365支持的语言(中文语言名/英文语言名)列表

    本人微信和易信公众号:微软动态CRM专家罗勇 ,回复277或者20180803可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...

  3. m_Orchestrate learning system---网站的语言选择功能(中文英文)

    m_Orchestrate learning system---网站的语言选择功能(中文英文) 一.总结 一句话总结:有两种方法,一是session+js端代码,而是session+php端代码. 推 ...

  4. hexo的jacman主题设置语言为英文后偶尔出现中文

    发现这个问题也好久了.问题的具体表现是在根目录下的_config.yml设置了语言为英文,但是每次发布后都会更换一次语言.今天看了文件结构,知道了,每换一次语言“英文.简体中文.繁体中文”,就是这三种 ...

  5. Ubuntu修改系统语言为英文可支持中文

    简单来说,就行修改/etc/default/locale文件,设置语言位UTF-8,如果没有这个语言,就执行命令locale-gen en_US.UTF-8进行安装,没有即时生效的话就重启. 查看当前 ...

  6. R语言中文分词包jiebaR

    R语言中文分词包jiebaR R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据 ...

  7. 学习Nim语言.rar(nim语言中文教程下载)

    学习Nim语言 nim 语法上类似python ,是一门静态编译型语言,nim 使用空格缩进标示语句块的开始和结束, 喜欢python风格的程序员应该也会很容易适应和喜欢nim的风格. nim语言官方 ...

  8. 苹果Swift语言中文教程资源汇总

    苹果swift语言中文教程(零)搭配环境以及代码执行成功http://vjiazhi.com/kaifa/1014.html 苹果Swift语言中文教程(一)基础数据类型 http://vjiazhi ...

  9. sql 查询字段是中文/英文/数字 正则表达式

    一.包含中文字符 select * from 表名 where 列名 like '%[吖-座]%' 二.包含英文字符 select * from 表名 where 列名 like '%[a-z]%' ...

  10. WinForm多语言版本实战项目演练

    一.课程介绍 关于如何实现“WinForm多语言版本”网上有很多实现技术方案,可以说是“琳琅满目”,"包罗万象".俗话说的好:一千个读者就有一千个哈姆雷特!如果您工作中恰好也遇到这 ...

随机推荐

  1. Openresty最佳案例 | 第9篇:Openresty实现的网关权限控制

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78616779 本文出自方志朋的博客 简介 采用openresty 开发出的api网关有很多 ...

  2. python写爬虫的弯路

    一开始按照视频上的找了笔趣阁的网站先爬一部小说, 找了<遮天>,但是章节太多,爬起来太慢, 就换了一个几十章的小说. 根据视频里的去写了代码, 在正则表达式哪里出了很大的问题. from ...

  3. hdu_2588_GCD

    The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b),is the ...

  4. LeetCode-环形链表II

    LeetCode-环形链表II 为找到入口点可以用以下方法 使用快慢指针法直到两个指针相遇 头节点处创建一个新的指针,并且向前移动,两个指针相遇处创建一个新的指针,并且向前移动,直到两个指针相遇为入口 ...

  5. 尚硅谷SpringBoot项目学习源码记录

    链接:https://pan.baidu.com/s/1aNUL1QlHMhDIFtWGhC1mtQ 密码:793v

  6. XPath Helper的安装使用

    XPath Helper的安装使用 xpath helper 是一款chrome浏览器插件,主要用来分析当前网页信息的xpath,在抓取数据时一般会使用到xpath. 安装 下载地址:http://c ...

  7. MySQL索引介绍

    引言 今天Qi号与大家分享什么是索引.其实索引:索引就相当于书的目录 索引介绍 用官方的话说就是 索引是为了加速对表中数据行的检索而创建的一种分散的存储结构.索引是针对表而建立的,它是由数据页面以外的 ...

  8. php+高德地图webapi 高德jsapi 实现 当前位置与目标位置距离 并按照距离排序(坐标逆转换)

    <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak='自己 ...

  9. scala成长之路(7)函数进阶——可能是史上最浅显易懂的闭包教程

    由于scala中函数内部能定义函数,且函数能作为函数的返回值,那么问题来了,当返回的函数使用了外层函数的局部变量时,会发生什么呢?没错,就产生是闭包. 关于闭包的解释网上一大堆,但基本上都是照葫芦画瓢 ...

  10. is和==,编码补充

    一,is和==的区别: 1, 通过一个ID()可以查看到一个变量表示的值在内存中的地址.    s = 'alex' print(id(s)) # 4326667072 s = "alex& ...