我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#WinForm实现多语言切换的示例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#WinForm实现多语言切换的示例

因项目需要,所以在网上找了一些方法实现了该功能,本文也是做一个总结和记录。使用resx文件实现Winform多语言切换,以实现简体中文、英文、泰语的切换为例。如果后续需要增加其它语言的切换,只需要按照步骤重复操作即可。

效果图如下:

中文:

英语:

泰语:

窗体设置

下面来说一下流程:

1.首先将Form1的 Localizable 属性为 true( 设置该属性后,.net 将根据不同的语言,为应用程序生成不同的资源文件),然后将Language属性设置为所需要的语言,如下所示。

2.当把Language属性设置成例如英语后,那么我们对窗体中的控件名称进行调整,如下图:

别的语言也是这种操作,只是拿英语做个示例。当我们把页面调整完后,我们重新生成一下,然后再把上述Language属性切回到默认或汉语时,再把项目重新生成一下。这样的话,语言文件就会自动生成好了。

注意:一定要重新启动一下,不然改过之后直接运行不会出现语言文件!

当我们把窗体的设置全部搞定后,我们来看怎么设置自动切换,如图所示,我是在登录页面就放了一个下拉框,当选中语言时,所有窗体的语言会自动切换,接下来我们看一下实现方法。

实时语言切换

1.项目的Properties的Settings.settings中添加变量DefaultLanguage,用于保存当前设置的默认语言。当下次启动程序时,会读取该变量,从而将程序的语言设置为上次程序关闭时的语言。第一次将默认语言设置为中文zh-CN。

![(https://img-blog.csdnimg.cn/f24ff43e30c746469681cd2413ad7466.jpg)

2.创建一个静态类(MultiLanguage.cs)用于编写与切换语言相关的变量和代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CodePrint
{
    //用于编写与切换语言相关的变量和代码
    class MultiLanguage
    {
        //当前默认语言
        public static string DefaultLanguage = "zh-CN";

        /// <summary>
        /// 修改默认语言
        /// </summary>
        /// <param name="lang">待设置默认语言</param>
        public static void SetDefaultLanguage(string lang)
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
            DefaultLanguage = lang;
            Properties.Settings.Default.DefaultLanguage = lang;
            Properties.Settings.Default.Save();
        }


        /// <summary>
        /// 加载语言
        /// </summary>
        /// <param name="form">加载语言的窗口</param>
        /// <param name="formType">窗口的类型</param>
        public static void LoadLanguage(Logins form, Type formType)
        {
            if (form != null)
            {
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(formType);
                resources.ApplyResources(form, "$this");
                Loading(form, resources);
            }
        }

        /// <summary>
        /// 加载语言
        /// </summary>
        /// <param name="control">控件</param>
        /// <param name="resources">语言资源</param>
        private static void Loading(Control control, System.ComponentModel.ComponentResourceManager resources)
        {
            if (control is MenuStrip)
            {
                //将资源与控件对应
                resources.ApplyResources(control, control.Name);
                MenuStrip ms = (MenuStrip)control;
                if (ms.Items.Count > 0)
                {
                    foreach (ToolStripMenuItem c in ms.Items)
                    {
                        //遍历菜单
                        Loading(c, resources);
                    }
                }
            }

            foreach (Control c in control.Controls)
            {
                resources.ApplyResources(c, c.Name);
                Loading(c, resources);
            }
        }


        /// <summary>
        /// 遍历菜单
        /// </summary>
        /// <param name="item">菜单项</param>
        /// <param name="resources">语言资源</param>
        private static void Loading(ToolStripMenuItem item, System.ComponentModel.ComponentResourceManager resources)
        {
            if (item is ToolStripMenuItem)
            {
                resources.ApplyResources(item, item.Name);
                ToolStripMenuItem tsmi = (ToolStripMenuItem)item;
                if (tsmi.DropDownItems.Count > 0)
                {
                    foreach (ToolStripMenuItem c in tsmi.DropDownItems)
                    {
                        Loading(c, resources);
                    }
                }
            }
        }
    }
}

3.在窗体的Load(双击Form1即可跳转至该事件)事件中读取Properties.Settings.Default.DefaultLanguage,并将ComboBox赋值为当前默认语言,即简体中文或英文。

private void Login_Load(object sender, EventArgs e)
        {
            //设置combobox的值
            string language = Properties.Settings.Default.DefaultLanguage;
            if (language == "zh-CN")
            {
                comboBox1.Text = "简体中文(默认)";
            }
            else if (language == "en-US")
            {
                comboBox1.Text = "English";
            }
            else if(language == "th-TH")
            {
                comboBox1.Text = "ไทย";
            }
            MultiLanguage.LoadLanguage(this, typeof(Logins));
        }

4.编写用于切换语言的ComboBox的SelectedIndexChanged事件,使得当用户选择对应的语言时,程序会切换到该语言。

事件添加方式如下:选中ComboBox,点击事件,在SelectedIndexChanged事件中输入方法名languageTxt_SelectedIndexChanged,按回车即可自动生成。

private void languageTxt_SelectedIndexChanged(object sender, EventArgs e)
        {
            comboBox1.Enabled = false;
            if (comboBox1.Text == "中文")
            {
                //修改默认语言
                MultiLanguage.SetDefaultLanguage("zh-CN");
                //对所有打开的窗口重新加载语言
                foreach (Form form in Application.OpenForms)
                {
                    LoadAll(form);
                }
            }
            else if (comboBox1.Text == "English")
            {
                //修改默认语言
                MultiLanguage.SetDefaultLanguage("en-US");
                //对所有打开的窗口重新加载语言
                foreach (Form form in Application.OpenForms)
                {
                    LoadAll(form);
                }
            }
            else if(comboBox1.Text == "ไทย")
            {
                //修改默认语言
                MultiLanguage.SetDefaultLanguage("th-TH");
                //对所有打开的窗口重新加载语言
                foreach (Form form in Application.OpenForms)
                {
                    LoadAll(form);
                }
            }
            comboBox1.Enabled = true;
        }

LoadAll(form)方法:

private void LoadAll(Form form)
        {
            if (form.Name == "Logins")
            {
                MultiLanguage.LoadLanguage((Logins)form, typeof(Logins));
            }
            else if (form.Name == "CodePrint")
            {
                MultiLanguage.LoadLanguage((Logins)form, typeof(CodePrint));
            }
            else if(form.Name == "CodePrint")
            {
                MultiLanguage.LoadLanguage((Logins)form, typeof(CodePrint));
            }
        }

if里面就是我们可以切换的窗体名称。

到此这篇关于C#WinForm实现多语言切换的示例的文章就介绍到这了,更多相关C# WinForm多语言切换内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#WinForm实现多语言切换的示例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#WinForm实现多语言切换的示例

本文主要介绍了C#WinForm实现多语言切换的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-30

vue element plus多语言切换怎么实现

这篇文章主要讲解了“vue element plus多语言切换怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue element plus多语言切换怎么实现”吧!解决一下问题:如何
2023-06-22

C语言完数的实现示例

C语言中的完数指的是一个正整数,本文主要介绍了C语言完数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-20

C语言实现常见进制转换的示例代码

生活中最常见的进制是十进制,而有一类编程题会要求将十进制转换为其他进制,本文将主要讲述C语言中常见的几类进制转换问题,希望对大家有所帮助
2023-05-14

Android实现app应用多语言切换功能

最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种:1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成,下次重新打开 App ,也是用户设置的语言
2022-06-06

Android app应用多语言切换功能实现

本文实例为大家分享了Android app应用实现多语言切换功能,供大家参考,具体内容如下 1.添加多语言文件 在不同的 value 文件夹下(例如 value 、value-en、values-zh-rTW 文件夹)添加不同语言的 st
2022-06-06

基于Vue2.0和Typescript实现多主题切换的示例

本文主要介绍了基于Vue2.0和Typescript实现多主题切换的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-16

C语言多功能动态通讯录实现示例

这篇文章主要为大家介绍了C语言多功能动态通讯录实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-31

实现微信小程序中的多语言切换功能

随着全球化的发展,各行各业都在越来越多地使用多种语言进行交流和沟通。而在开发微信小程序时,为了让更多的用户能够方便地使用小程序,多语言切换功能的实现就变得非常重要了。在本文中,我们将介绍如何在微信小程序中实现多语言切换功能,并提供具体的代码
实现微信小程序中的多语言切换功能
2023-11-21

C语言实现字符串替换的示例代码怎么写

本篇文章给大家分享的是有关C语言实现字符串替换的示例代码怎么写,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 替换,意思就是用另一个字符串str3来替换str1中所有的str2
2023-06-26

C语言实现成绩统计示例

这篇文章主要介绍了C语言实现成绩统计示例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

C语言模拟实现memmove的示例代码

memmove函数用于拷贝字节,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后源内容会被更改。本文主要介绍了C语言模拟实现memmove的示例代码,需要的可以参考一下
2022-12-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录