C#的窗体应用程序的多语言实现

C# 专栏收录该内容
1 篇文章 0 订阅

当我们的软件需要在国外应用时,就需要将软件界面的文字切换成相应国家的语言,这时就需要实现软件界面的多语言,也称为国际化,本篇博客讲的是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"));
}

                                   

改好后,运行结果如下所示:

                                                

  • 2
    点赞
  • 1
    评论
  • 12
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页

打赏作者

楚俊慕

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值