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效果展示
resx文件实现Winform多语言切换
窗体属性设置
1.将Form的 Localizable 属性为 true( 设置该属性后,.net 将根据不同的语言,为应用程序生成不同的资源文件),然后将Language属性设置为所需要的语言,如下所示。
2.当把Language属性设置成例如英语后,那么我们对窗体中的控件名称进行调整,如下图
3.别的语言也是这种操作,只是拿英语做个示例。
4.当我们把页面调整完后,我们重新生成一下,然后再把上述Language属性切回到默认或汉语时,再把项目重新生成一下。这样的话,语言文件就会自动生成好了。
注意:一定要重新启动一下,不然改过之后直接运行不会出现语言文件!
项目的Properties的Settings.settings中添加变量DefaultLanguage,用于保存当前设置的默认语言。当下次启动程序时,会读取该变量,从而将程序的语言设置为上次程序关闭时的语言。第一次将默认语言设置为中文zh-CN。