2022年c#本地化资源讲课稿.pdf
c#本 地 化 资 源精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 17 页 - - - - - - - - - - c# 本地化 Windows 窗体Visual Studio 项目系统为本地化Windows 窗体应用程序提供相当大的支持。使项目系统为可本地化的用户界面元素(如窗体上的文本和图像)生成资源文件。然后将该资源文件生成到附属程序集中。添加一个资源文件模板对应着 XML 设计器编辑该模板。1.1 生成资源文件步骤:第一步:在“属性”窗口中,将窗体的 Localizable 属性设置为 true。第二步:1)方式一:Language 属性已经设置为“(默认值 )”。 可以在下拉框中选择语言,例如:将该窗体的 Language 属性设置为“德语(德国)”。将该窗体的 Language 属性设置为“法语(法国)”。将窗体的 Language 属性设置为“简体中文”。将窗体的 Language属性设置为“英语”。生成解决方案,在对应的窗体目录下将生成对应的资源文件,例如:Form1.de-DE.resx 是在德国讲的德语的资源文件。Form1.fr-FR.resx 是在法国讲的法语的资源文件。Form1.zh-CHS.resx是简体中文。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 17 页 - - - - - - - - - - Form1.en.resx是英语。2)方式二:1、复制对应窗体的默认的资源文件Form1.resx,如果需要生成对应的资源文件,需要修改复制的资源文件的名称,如果是简体中文的资源文件,则需要重命名为 Form1.zh-CHS.resx. 注意:对应不同的语言的资源文件一定要严格修改正确的名称,例如简体中文,只能是 Form1.zh-CHS.resx 。2、在对应的窗体下添加对应语言的资源文件。3)方式三:1、类似创建 Winform 窗体的方法,右击解决方案文件,在右键菜单中点击“添加 -新建项”,弹出对话框中,选择新建资源文件项。2、输入对应资源文件的名称如果是简体中文的资源文件,则需要重命名为Form1.zh-CHS.resx. 注意:对应不同的语言的资源文件一定要严格修改正确的名称,例如简体中文,只能是 Form1.zh-CHS.resx 。1.2 调用资源文件显示不同语言风格的窗体,需要访问对应语言的资源文件。代码如下:以下以调用法语资源文件为例进行说明。命名空间:using System.Globalization; using System.Threading; 调用函数:Thread.CurrentThread.CurrentUICulture = new CultureInfo(fr-FR); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 17 页 - - - - - - - - - - 注意 :Windows 中使用的用户界面语言是“CurrentUICulture”设置的一种功能。如果您的 Windows 副本装有多语言用户界面包 (MUI) ,则可以在控制面板中更改用户界面语言。有关更多信息,请参阅 Windows Server 2003, Windows XP & Windows 2000 MUI 站点。如果未安装 MUI ,则可以用编程方式更改当前的 UI 区域性,如下所述。对于窗体控件中调用资源文件方法中代码如下:精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 17 页 - - - - - - - - - - 解析:此段调用窗体中控件资源,列举常用的控件,调用的资源与对应属性是Resources.ApplyResources ()函数,根据实际的窗体需要自己添加控件的资源。1.3 添加字符串资源在窗体中有时有些自定义的字符串资源,在访问这些字符串资源时,可以手动将这些自定义资源添加到不同语言的资源文件中。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 17 页 - - - - - - - - - - 注意: 对于不同语言的资源文件访问同一自定义字符串,自定义字符串一定需要具有相同的名称。1.3.1调用字符串资源方法对于已经添加到资源文件中的字符串,在调用过程中需要实例化窗体或者用户控件的资源。 ComponentResourceManage resources = new componentResourceManager(typeof(XXX); 其中XXX 为窗体类的名称,例如: public partial class MainFrm : Form ,XXX 即为MainFrm。调用字符串资源,使用代码如下:resources.GetString(XXX ),其中 xxx为添加字符串的名称。1.4 开发经验1) 生成资源文件在 1.1中介绍了两种生成的资源文件的方法,经过多次尝试,发现最好的办法是采用方案1。步骤如下:1、设计窗体的时候采用默认的语言,以下 winform 窗体为例,点击窗体或者用户控件,在对应属性框中设置language 、localizable 属性,如下图 1-1 所示精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 17 页 - - - - - - - - - - 图 1-1 设置窗体的本地资源化注意: Localizable 属性值设置为: true ;在对应的 Designer文件中,会增加相应的代码,例如:resources .ApplyResources (this .label3 , label3 ); 作用:将控件与资源文件建立关系,它表示将根据具体的资源文件,来访问 label3 的属性。2、进行 winform 窗体的设计。3、设计完成之后,添加多语言版本的资源文件。例如,添加简体中文版本、英文版本生成本地资源文件方式可以采用1.1的三种方式,经过多次开发,本人认为最好采用 1.1节中方式一,方式三。 对比方式一、方式三主要优点如下:方式一:当窗体改变大小时,可以直接在窗体修改,不需要修改对应的资源文件,便于修改。但是此种方法,偶尔加载资源文件没有成功,暂时还没有找到原因。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 17 页 - - - - - - - - - - 方式三:也是便于修改窗体的大小,布局,有时窗体中英文翻译的词条过长,之前窗体的布局会改变,那么只需要在窗体上直接修改。,而不需要修改资源文件 2)获取当前开发的语言资源,例如是简体中文、还是英文等等在主窗体启动的代码之前,获取当前语言版本,例如当前运行的版本的中文或者英文等等。 3)获取当前语言的资源文件调用函数:Thread.CurrentThread.CurrentUICulture = new CultureInfo(fr-FR); 4)调用资源文件,这一步比较重要,参照1.2 可以实现,在开发过程中发现有更加简单的方法关键点:1、确定本地资源化 localizable 属性设置为 true。2、在主窗体实例化方法中,初始化各控件资源之前,获取当前语言,例如获取当前语言为英语,3、Thread.CurrentThread.CurrentUICulture = new CultureInfo(en); 1.5 开发用例1.5.1 新建工程:步骤:第一步:启动 vs2012 第二步:点击“文件-新建-项目”。如下图1-2所示。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 17 页 - - - - - - - - - - 第三步:1、在弹出如下对话框,选择2、输入解决方案的名称为:test,点击按钮,选择位置信息。3、点击“确定”按钮,完成工程的创建。1.5.2 窗体设计精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 17 页 - - - - - - - - - - 1、根据实际的需要,添加窗体的控件,对窗体以及控件进行布局,如下图:2、解决方案资源管理器如下图:观察 Form1.Designer.cs文件代码如下:/设计器支持所需的方法 - 不要/使用代码编辑器修改此方法的内容。/privatevoid InitializeComponent() this .label1 = new System .Windows .Forms .Label (); this .label2 = new System .Windows .Forms .Label (); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 17 页 - - - - - - - - - - this .button1 = new System .Windows .Forms .Button (); this .SuspendLayout(); / / label1/ this .label1 .AutoSize = true ; this .label1 .Location = new System .Drawing .Point (29, 45); this .label1 .Name = label1 ; this .label1 .Size = new System .Drawing .Size(101, 12); this .label1 .TabIndex = 0; this .label1 .Text = 选择开发的语言:; / / label2/ this .label2 .AutoSize = true ; this .label2 .Location = new System .Drawing .Point (168, 45); this .label2 .Name = label2 ; this .label2 .Size = new System .Drawing .Size(29, 12); this .label2 .TabIndex = 1; this .label2 .Text = 英语 ; / / button1/ this .button1.Location = new System .Drawing .Point (170, 145); this .button1.Name = button1; this .button1.Size = new System .Drawing .Size (75, 23); this .button1.TabIndex = 2; this .button1.Text = 确定 ; this .button1.UseVisualStyleBackColor = true ; / / Form1/ this .AutoScaleDimensions = new System .Drawing .SizeF (6F, 12F); this .AutoScaleMode = System .Windows.Forms .AutoScaleMode.Font ; this .ClientSize = new System .Drawing .Size(309, 216); this .Controls .Add (this .button1); this .Controls .Add (this .label2 ); this .Controls .Add (this .label1 ); this .Name = Form1 ; this .Text = 进行多语言开发 ; this .ResumeLayout(false ); this .PerformLayout(); 1.5.3 设置本地资源化属性精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 17 页 - - - - - - - - - - 1、修改窗体的属性,如下图,修改localizable属性为 true 观察 Form1.Designer.cs文件代码如下:/设计器支持所需的方法 - 不要/使用代码编辑器修改此方法的内容。/privatevoid InitializeComponent() System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1); this .label1 = new System .Windows .Forms .Label (); this .label2 = new System .Windows .Forms .Label (); this .button1 = new System .Windows .Forms .Button (); this .SuspendLayout(); / / label1/ resources.ApplyResources(this.label1, label1); this .label1 .Name = label1 ; resources.ApplyResources(this.label2, label2); this .label2 .Name = label2 ; / / button1/ resources.ApplyResources(this.button1, button1); this .button1.Name = button1; this .button1.UseVisualStyleBackColor = true ; / 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 17 页 - - - - - - - - - - / Form1/ resources.ApplyResources(this, $this); this .AutoScaleMode = System .Windows.Forms .AutoScaleMode.Font ; this .Controls .Add (this .button1); this .Controls .Add (this .label2 ); this .Controls .Add (this .label1 ); this .Name = Form1 ; this .ResumeLayout(false ); this .PerformLayout(); 说明:红色代码,即将控件、窗体与资源文件中控件、窗体资源相关联。1.5.4添加资源文件1、按照 1.1 方式 3添加资源文件第一步:右击解决方案“ test-添加 -新建项”,如下图所示:第二步:在弹出下图对话框中,选择添加新项的类型为“资源文件”精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 17 页 - - - - - - - - - - 注意:一定要注意资源文件的命名,资源文件的命名规则:命名分为 3部分:第一部分:当前操作窗体或者用户控件的名称,如上图为“ Form”;第二部分:语言标志,例如英语为“ en” /中文“ zh-CHS”第三部分:资源文件,后缀“ .resx” ; 按照上述操作,添加中文资源文件、英文资源文件,观察解决方案资源管理器如下图:精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 17 页 - - - - - - - - - - 第三步:修改中文资源文件、英文资源文件。以英文资源文件为例:1、双击上图中 Form1.en.resx文件。弹出如下图所示窗体,2、需要在 1中将窗体中所有控件资源翻译成英文。关键点: 1)可以对照,默认的资源文件Form1.resx文件,双击查看,将所有的中文项,复制。如下图:精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 15 页,共 17 页 - - - - - - - - - - 2)粘贴到 1 所在窗体,如下图:3)将对应的中文,翻译成英文,如下图:1.5.5 调用资源文件在 1.5.3节中,观察 Form1.Designer.cs文件,通过红色代码,建立了窗体资源与窗体关联。那么就需要在调用此文件中代码之前,获取当前的资源文件。1、获取当前资源文件的代码为Thread.CurrentThread.CurrentUICulture = new CultureInfo(en); 2、调用 Form1.Designer.cs中代码是在 Form1 窗体实例化之前,为此修改代码如下:精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 16 页,共 17 页 - - - - - - - - - - 3、运行此窗体,得到英文版的界面,如下图4、若添加其它子窗体界面,只需按照1.5.3-1.5.4的方法,编辑对应资源文件即可,不需要做任何代码的改动。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 17 页,共 17 页 - - - - - - - - - -