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. 修改语言,生成项目后,关闭窗体设计器再次打开才会显示不同语言版本的窗体设计器

效果

WinForm界面程序 多语言切换[.Net 6.0]_第1张图片

关键代码

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);
    }
}

/// 
/// WinForm本地化语言管理
/// 
public static class LanguageManager
{
    /// 
    /// 常用语言
    /// 
    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);
    }
    /// 
    /// 改变窗体语言
    /// 
    /// 窗体
    /// 语言Key带后缀的(如:zh-CN)
    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);
    }
}

截图

窗体属性:
WinForm界面程序 多语言切换[.Net 6.0]_第2张图片

资源管理器不同语言文件:Form1.resx为默认语言中文
WinForm界面程序 多语言切换[.Net 6.0]_第3张图片
不同语言的窗体设计器:
WinForm界面程序 多语言切换[.Net 6.0]_第4张图片
WinForm界面程序 多语言切换[.Net 6.0]_第5张图片

WinForm界面程序 多语言切换[.Net 6.0]_第6张图片

优缺点

  1. LanguageManager使用递归查找控件;自动切换语言不需要每增加一个控件加一句代码;
  2. resx文件的名称的资源名称不能手动修改
  3. 有多个语言版本时建议先复制一个非默认的resx文件;复制一份并修改文件名称

你可能感兴趣的:(WinForm,.net,microsoft,c#)