WinForm界面程序 多语言切换[.Net 6.0]

WinForm界面程序 多语言切换[.Net 6.0]

创建窗体

开发环境:VS2022 社区版 中文界面 .Net 6.0 WinForm界面程序

  1. 创建窗体,并添加几个按钮;添加切换语言的RadioButton;
  2. 修改窗体的Localizable属性为True
  3. 修改窗体的Language属性为’英语(美国)',修改按钮文本
  4. 编译生成工程
  5. 检查解决方案资源管理器的Form1.cs下面是否生成Form1.en-US.resx文件

注意事项

  1. 建议不要手动修改*.resx文件,特别是名称栏
  2. 修改语言,生成项目后,关闭窗体设计器再次打开才会显示不同语言版本的窗体设计器

效果

效果显示

关键代码

Radio按钮选择事件及封装的语言管理类

public partial class Form1 : Form
{
    private void ra_ZH_CheckedChanged(object sender, EventArgs e)
    {
        LanguageManager.ChangeLanguage(this, LanguageManager.LangKeys.zh_CN);
    }

    private void ra_EN_CheckedChanged(object sender, EventArgs e)
    {
        LanguageManager.ChangeLanguage(this, LanguageManager.LangKeys.en_US);
    }
}

/// <summary>
/// WinForm本地化语言管理
/// </summary>
public static class LanguageManager
{
    /// <summary>
    /// 常用语言
    /// </summary>
    public static class LangKeys
    {
        public const string zh_CN = "zh-CN";
        public const string zh_TW = "zh-TW";
        public const string en_US = "en-US";
    }

    private static void ApplyResources(ComponentResourceManager resources, Control root, string Name)
    {
        foreach (var item in root.Controls)
        {
            Control? ctl = item as Control;
            if (ctl != null)
            {
                ApplyResources(resources, ctl, ctl.Name);
            }
        }
        resources.ApplyResources(root, Name);
    }
    /// <summary>
    /// 改变窗体语言
    /// </summary>
    /// <param name="root">窗体</param>
    /// <param name="LanguageKey">语言Key带后缀的(如:zh-CN)</param>
    public static void ChangeLanguage(Form root, string LanguageKey)
    {
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(LanguageKey);
        ComponentResourceManager resources = new ComponentResourceManager(root.GetType());
        ApplyResources(resources, root, root.Name);
    }
}

截图

窗体属性:
窗体本地化属性

资源管理器不同语言文件:Form1.resx为默认语言中文
语言资源
不同语言的窗体设计器:
中文窗体
英文窗体
中文资源
英文资源

优缺点

  1. LanguageManager使用递归查找控件;自动切换语言不需要每增加一个控件加一句代码;
  2. resx文件的名称的资源名称不能手动修改
  3. 有多个语言版本时建议先复制一个非默认的resx文件;复制一份并修改文件名称
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文光山石

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值