【C# winform 两种方式实现多语言切换】


最近做程序的时候需要用到软件进行多语言版本的问题,在网上收集了一些资料后,现对两种文件方式实现,具体内容整理如下,请参考。

xml文件实现Winform多语言切换

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

逻辑设计图

逻辑框图

代码及配置部分展示

1.属性配置

窗体属性Localizable设为TRUE,Language选择需要的语言
配置设置展示

2.Form代码展示

        public Form2(Form1 form1)
        {
    
    
            InitializeComponent();
            SetLanguage();
        }


        private void SetLanguage()
        {
    
    
            this.button1.Text = GlobalData.GlobalLanguage.Login_UserName;
            this.button2.Text = GlobalData.GlobalLanguage.Login_UserPwd;
            this.button3.Text = GlobalData.GlobalLanguage.Login_Login;
        }

3.GlobalData类代码展示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;

namespace MyNoteTool
{
    
    
    public class GlobalData
    {
    
    
        /// <summary>
        /// 系统语言(Chinese(中文),English(英文)。。。)
        /// </summary>
        public static string SystemLanguage = System.Configuration.ConfigurationManager.AppSettings["Language"];

        private static Language globalLanguage;
        public static Language GlobalLanguage
        {
    
    
            get
            {
    
    
                if (globalLanguage == null)
                {
    
    
                    globalLanguage = new Language();
                    return globalLanguage;
                }
                return globalLanguage;
            }
        }
    }
}

4.Language类代码展示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace MyNoteTool
{
    
    
    public class Language
    {
    
    
        #region 登陆界面
        public string Login_UserName = "";
        public string Login_UserPwd = "";
        public string Login_Login = "";
        #endregion

        protected Dictionary<string, string> DicLanguage = new Dictionary<string, string>();
        public Language()
        {
    
    
            XmlLoad(GlobalData.SystemLanguage);
            BindLanguageText();
        }

        /// <summary>
        /// 读取XML放到内存
        /// </summary>
        /// <param name="language"></param>
        protected void XmlLoad(string language)
        {
    
    
            try
            {
    
    
                XmlDocument doc = new XmlDocument();
                string address = AppDomain.CurrentDomain.BaseDirectory + "Languages\\" + language + ".xml";
                doc.Load(address);
                XmlElement root = doc.DocumentElement;

                XmlNodeList nodeLst1 = root.ChildNodes;
                foreach (XmlNode item in nodeLst1)
                {
    
    
                    DicLanguage.Add(item.Name, item.InnerText);
                }
            }
            catch (Exception ex)
            {
    
    
                throw ex;
            }
        }

        public void BindLanguageText()
        {
    
    
            Login_UserName = DicLanguage["Login_UserName"];
            Login_UserPwd = DicLanguage["Login_UserPwd"];
            Login_Login = DicLanguage["Login_Login"];
        }
    }
}

5.App.config代码展示

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<startup>
		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
	</startup>
	<appSettings>
		<!-- Language的值只能是Simple Chinese(中文),English(英文) -->
		<add key="Language" value="Simple Chinese"/>
	</appSettings>

</configuration>

6.English.xml代码展示

注意:生成的language文件夹默认生成在工程根目录下,需要复制到生成对应的exe所在文件夹下!

<?xml version="1.0" encoding="utf-8" ?>
<English>
	<Login_UserName>Find</Login_UserName>
	<Login_UserPwd>Replace</Login_UserPwd>
	<Login_Login>All Replace</Login_Login>
</English>

7.Simple Chinese.xml代码展示

<?xml version="1.0" encoding="utf-8" ?> 
<Chinese>
 <Login_UserName>查找</Login_UserName>
  <Login_UserPwd>替换</Login_UserPwd>
   <Login_Login>全部替换</Login_Login>
 </Chinese>

Demo效果展示

展示1
展示2

resx文件实现Winform多语言切换

窗体属性设置

1.将Form的 Localizable 属性为 true( 设置该属性后,.net 将根据不同的语言,为应用程序生成不同的资源文件),然后将Language属性设置为所需要的语言,如下所示。
配置
2.当把Language属性设置成例如英语后,那么我们对窗体中的控件名称进行调整,如下图
1
3.别的语言也是这种操作,只是拿英语做个示例。
在这里插入图片描述

4.当我们把页面调整完后,我们重新生成一下,然后再把上述Language属性切回到默认或汉语时,再把项目重新生成一下。这样的话,语言文件就会自动生成好了。
在这里插入图片描述
注意:一定要重新启动一下,不然改过之后直接运行不会出现语言文件!

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

猜你喜欢

转载自blog.csdn.net/weixin_37864926/article/details/131222194