您好,欢迎访问三七文档
c#本地化Windows窗体VisualStudio项目系统为本地化Windows窗体应用程序提供相当大的支持。使项目系统为可本地化的用户界面元素(如窗体上的文本和图像)生成资源文件。然后将该资源文件生成到附属程序集中。添加一个资源文件模板对应着XML设计器编辑该模板。1.1生成资源文件步骤:第一步:在“属性”窗口中,将窗体的Localizable属性设置为true。第二步:1)方式一:Language属性已经设置为“(默认值)”。可以在下拉框中选择语言,例如:将该窗体的Language属性设置为“德语(德国)”。将该窗体的Language属性设置为“法语(法国)”。将窗体的Language属性设置为“简体中文”。将窗体的Language属性设置为“英语”。生成解决方案,在对应的窗体目录下将生成对应的资源文件,例如:Form1.de-DE.resx是在德国讲的德语的资源文件。Form1.fr-FR.resx是在法国讲的法语的资源文件。Form1.zh-CHS.resx是简体中文。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调用资源文件显示不同语言风格的窗体,需要访问对应语言的资源文件。代码如下:以下以调用法语资源文件为例进行说明。命名空间:usingSystem.Globalization;usingSystem.Threading;调用函数:Thread.CurrentThread.CurrentUICulture=newCultureInfo(fr-FR);注意:Windows中使用的用户界面语言是“CurrentUICulture”设置的一种功能。如果您的Windows副本装有多语言用户界面包(MUI),则可以在控制面板中更改用户界面语言。有关更多信息,请参阅WindowsServer2003,WindowsXP&Windows2000MUI站点。如果未安装MUI,则可以用编程方式更改当前的UI区域性,如下所述。对于窗体控件中调用资源文件方法中代码如下:解析:此段调用窗体中控件资源,列举常用的控件,调用的资源与对应属性是Resources.ApplyResources()函数,根据实际的窗体需要自己添加控件的资源。1.3添加字符串资源在窗体中有时有些自定义的字符串资源,在访问这些字符串资源时,可以手动将这些自定义资源添加到不同语言的资源文件中。注意:对于不同语言的资源文件访问同一自定义字符串,自定义字符串一定需要具有相同的名称。1.3.1调用字符串资源方法对于已经添加到资源文件中的字符串,在调用过程中需要实例化窗体或者用户控件的资源。ComponentResourceManageresources=newcomponentResourceManager(typeof(XXX));其中XXX为窗体类的名称,例如:publicpartialclassMainFrm:Form,XXX即为MainFrm。调用字符串资源,使用代码如下:resources.GetString(XXX),其中xxx为添加字符串的名称。1.4开发经验1)生成资源文件在1.1中介绍了两种生成的资源文件的方法,经过多次尝试,发现最好的办法是采用方案1。步骤如下:1、设计窗体的时候采用默认的语言,以下winform窗体为例,点击窗体或者用户控件,在对应属性框中设置language、localizable属性,如下图1-1所示图1-1设置窗体的本地资源化注意:Localizable属性值设置为:true;在对应的Designer文件中,会增加相应的代码,例如:resources.ApplyResources(this.label3,label3);作用:将控件与资源文件建立关系,它表示将根据具体的资源文件,来访问label3的属性。2、进行winform窗体的设计。3、设计完成之后,添加多语言版本的资源文件。例如,添加简体中文版本、英文版本生成本地资源文件方式可以采用1.1的三种方式,经过多次开发,本人认为最好采用1.1节中方式一,方式三。对比方式一、方式三主要优点如下:方式一:当窗体改变大小时,可以直接在窗体修改,不需要修改对应的资源文件,便于修改。但是此种方法,偶尔加载资源文件没有成功,暂时还没有找到原因。方式三:也是便于修改窗体的大小,布局,有时窗体中英文翻译的词条过长,之前窗体的布局会改变,那么只需要在窗体上直接修改。,而不需要修改资源文件2)获取当前开发的语言资源,例如是简体中文、还是英文等等在主窗体启动的代码之前,获取当前语言版本,例如当前运行的版本的中文或者英文等等。3)获取当前语言的资源文件调用函数:Thread.CurrentThread.CurrentUICulture=newCultureInfo(fr-FR);4)调用资源文件,这一步比较重要,参照1.2可以实现,在开发过程中发现有更加简单的方法关键点:1、确定本地资源化localizable属性设置为true。2、在主窗体实例化方法中,初始化各控件资源之前,获取当前语言,例如获取当前语言为英语,3、Thread.CurrentThread.CurrentUICulture=newCultureInfo(en);1.5开发用例1.5.1新建工程:步骤:第一步:启动vs2012第二步:点击“文件-新建-项目”。如下图1-2所示。第三步:1、在弹出如下对话框,选择2、输入解决方案的名称为:test,点击按钮,选择位置信息。3、点击“确定”按钮,完成工程的创建。1.5.2窗体设计1、根据实际的需要,添加窗体的控件,对窗体以及控件进行布局,如下图:2、解决方案资源管理器如下图:观察Form1.Designer.cs文件代码如下:///summary///设计器支持所需的方法-不要///使用代码编辑器修改此方法的内容。////summaryprivatevoidInitializeComponent(){this.label1=newSystem.Windows.Forms.Label();this.label2=newSystem.Windows.Forms.Label();this.button1=newSystem.Windows.Forms.Button();this.SuspendLayout();////label1//this.label1.AutoSize=true;this.label1.Location=newSystem.Drawing.Point(29,45);this.label1.Name=label1;this.label1.Size=newSystem.Drawing.Size(101,12);this.label1.TabIndex=0;this.label1.Text=选择开发的语言:;////label2//this.label2.AutoSize=true;this.label2.Location=newSystem.Drawing.Point(168,45);this.label2.Name=label2;this.label2.Size=newSystem.Drawing.Size(29,12);this.label2.TabIndex=1;this.label2.Text=英语;////button1//this.button1.Location=newSystem.Drawing.Point(170,145);this.button1.Name=button1;this.button1.Size=newSystem.Drawing.Size(75,23);this.button1.TabIndex=2;this.button1.Text=确定;this.button1.UseVisualStyleBackColor=true;////Form1//this.AutoScaleDimensions=newSystem.Drawing.SizeF(6F,12F);this.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font;this.ClientSize=newSystem.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设置本地资源化属性1、修改窗体的属性,如下图,修改localizable属性为true观察Form1.Designer.cs文件代码如下:///summary///设计器支持所需的方法-不要///使用代码编辑器修改此方法的内容。////summaryprivatevoidInitializeComponent(){System.ComponentModel.ComponentResourceManagerresources=newSystem.ComponentModel.ComponentResourceManager(typeof(Form1));this.label1=newSystem.Windows.Forms.Label();this.label2=newSystem.Windows.Forms.Label();this.button1=newSystem.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;////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、按
本文标题:c#本地化资源
链接地址:https://www.777doc.com/doc-4699822 .html