踩坑笔记(二) 五行代码实现C# WindowsForm 多语言切换

开发环境:.NET Framerwork 4.7.2 如果按照本教程仍没有实现功能 请查看是否为版本原因

1.创建一个windowsform窗体应用,拖两个按钮上去修改文本为中文
在这里插入图片描述

2.鼠标左键单击窗体,然后在右下角的属性栏中找到Localizable 修改为True
在这里插入图片描述

3.在Language中选择或者输入另一种语言,本教程选用的是English
在这里插入图片描述

4.进入之后发现和之前的窗体是一样的,这时候我们修改控件的文本为英文
在这里插入图片描述

5.在右边的工程目录下会生成一个新的.resx后缀的文件用于保存这个语言版本下的控件信息
在这里插入图片描述

6.现在给按钮的点击事件配置处理代码,以下为英文版本切换中文,中文切换英文只需将“zh-CN”修改为“en-US”(代码的文本形式在下边)
在这里插入图片描述

代码解释

1.前两句是修改文化以及加载资源,这里需要注意的是ResourCeManger构造器中的参数typeof() 括号中的参数对应的是文件目录
在这里插入图片描述
2.第三行以下的代码是修改文本,解释一下Getstring函数的参数,下图是From.en.resx文件,可以明显看出参数就是这个目录下的Name,而返回值就是对应的Value,所以也可以采用挨个赋值的方法改变文本,如下图
在这里插入图片描述
在这里插入图片描述

注意

1.想要添加控件或者修改控件位置、大小等信息,均需要将语言修改回默认再进行操作,举例来说,在English版本下移动了button的位置,在默认版本下button的位置是不会变的,而且由于English版本的控件均依赖原版本生成,此情况下再在原版本中进行修改可能会导致English版本中的控件位置发生不可描述的变化…这点大家可以试试…

2.如果想将当前配置保存下来,举例来说,在界面内设置了英文版本,希望下次打开还是英文版本,这里需要在Properties->Setting.settings中添加一个语言变量,每次在窗体内修改语言都会修改这个变量,并且在窗体加载的事件中添加代码,在加载窗体时将当前线程语言设置为这个语言变量所对应的语言…这个功能我后续会更新

3.把整个vs的截图给大家,便于查找我说的位置
在这里插入图片描述

代码

 // 修改当前线程的语言
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");
            // 加载资源
            ResourceManager rm = new ResourceManager(typeof(Form1));
            //  遍历控件重新赋值文本
            foreach (Control ctl in Controls)
            {
                ctl.Text = rm.GetString(ctl.Name + ".Text");
            }
            // 窗体的文本赋值
            this.Text = rm.GetString("$this.Text");

以上

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值