当我们的软件需要在国外应用时,就需要将软件界面的文字切换成相应国家的语言,这时就需要实现软件界面的多语言,也称为国际化,本篇博客讲的是C#的多语言版本的实现。本篇博客分别讲解如下内容:
主窗体的多语言实现
自定义窗体的多语言实现
自定义控件的多语言实现
MessageBox对话框的多语言实现、普通字符串的多语言实现。
本篇博客讲解的方法是冷切换而非热切换,即更改语言设置后,软件需要重启才能生效。当你的软件界面/自定义控件很多时,本篇博客的方法重复性工作会很多,多少个窗体/自定义控件就需要重复多少遍下面的操作多少遍,且一个窗体/自定义控件如果是两种语言就需要2个资源文件,随着窗体的增多,资源文件也会增多。目前博主没有找到所有窗体一种语言共用一个资源文件的方法。本篇博客的方法供大家参考学习。
一、主窗体的多语言实现
1.1 实现方法
实现的思路是利用不同的资源文件来实现,基本分为三步:
1.更改主窗体的Localizable属性值。
2.给主窗体增加多个资源文件,每个资源文件为一种语言,然后翻译相应的显示文字。
3.在主窗体的代码段加一两句代码即可。
1.2 操作说明
打开主窗体界面,在属性页找到Localizable属性值,将其修改为True,如下图所示。如果你的VS没有属性页窗口,那就在VS的菜单栏-》视图-》其他窗口-》属性窗口打开它。
添加资源文件并写好资源文件。添加资源文件的方法有两个自动添加和手动添加两种。
1.自动添加。修改窗体的language属性值为相应语言。然后生成一次解决方案,在将language属性值切换到其他选项,此时相应位置会出现一个和窗体同名外加几个字符的资源文件,可能有时不会生成,博主有时也没成功,目前没找到原因,这时候就需要手动添加了。
2.手动添加。在解决方案资源管理器中,在项目名上右键-》添加-》新建项-》资源文件,名称按指定格式命名,命名规则是相应窗体的名称+“.”+ 相应语言字符串+“.resx”。英文是“en”,简体中文是“zh-CHS”。我添加后的情况如下图所示。窗体名.resx这个资源文件是默认资源,自动添加的,另外两个是我手动添加的。
然后是写资源文件,将需要翻译的界面显示字符翻译成相应语言并保存,如果不知道怎么写,可参照默认资源文件,复制其内容再进行修改。我写的资源文件如下图所示。
最后在窗体名的cs文件的构造函数的第一行加入以下代码即可,记住一定要InitializeComponent之前加,根据语言选择下方代码:
//中文
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CHS");
//英文
//System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
1.3 运行结果
运行结果如下图所示:
界面实现了多语言显示,但是可以发现浅蓝色的那块并没有变化,那是放的自定义控件。那么如何实现自定义控件的多语言呢,请看下一节。
二、自定义控件的多语言实现
实现自定义控件的多语言,很简单,只需要完成上方的前两步即可,不需要加代码。操作步骤就不重复说了,直接上我完成的图。
完成以上步骤后,运行,我的运行结果如下图所示:
三、自定义子窗体的多语言实现
先来测试一下,在主窗体中打开一个自定义子窗体,运行结果是什么样的,如下图所示:
很显然,子窗体没有和主窗体相同语言。如何实现呢,首先还是重复前两个步骤。想实现子窗体和主窗体相同语言,方法是给子窗体的构造函数传入一个参数即可,实现如下所示
代码如下:
//在主窗体的构造函数中第一行加如下代码
//language = "en";
language = "zh-CHS";
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
//写一个子窗体的带一个参数的构造函数加入如下代码
public MySubForm(string language)
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
InitializeComponent();
}
//在主窗体创建子窗体的代码部分加如下代码
MySubForm subForm = new MySubForm(language);
完成以上工作后,运行结果如下:
四、MessageBox的多语言实现
在软件编写过程中,经常会用到消息对话框和用户交互,所以消息对话框的多语言实现也至关重要。我们先给按钮写个事件,按一下按钮就弹出一个对话框,代码如下:
运行效果如下:
如何实现呢,消息对话框的多语言实现和前面的方法不太一样,其实它的实现和对任何想要实现多语言的字符串本质上是一样的,所以在此只讲一个。方法如下:
这时不需要添加资源文件,只需要在用到messageBox的窗体的相应资源文件中加内容即可,首先在资源文件中加入想要实现多语言的字符串。下图是我写的,供大家参考。第一列只是个名称,你可以根据需要命名即可(类似于变量名),到时候代码段就是用到这个名称。第二列是你要显示的字符串的多语言版本。
然后写一个方法,以供后面使用代码如下:
///应用资源文件中某个值
///参数1:指定用哪个界面类的资源文件
///参数2:指定用资源文件中的哪个值
public static string ApplyResource(Type resourceObject, string Name)
{
System.Resources.ResourceManager resource = new System.Resources.ResourceManager(resourceObject);
return resource.GetString(Name);
}
然后修改消息对话框位置的代码,我的位置就在按钮的事件中,修改后如下图所示:
private void button1_Click(object sender, EventArgs e)
{
//MessageBox.Show("I am MessageBox", "Hello");
MessageBox.Show(ApplyResource(this.GetType(), "StrMessageBoxContent"),
ApplyResource(this.GetType(), "StrMessageBoxTitle"));
}
改好后,运行结果如下所示:
标签:文件,语言,自定义,C#,编程,应用程序,如下,实现,窗体 From: https://www.cnblogs.com/funiyi816/p/17705189.html