欢迎交流,QQ群: 56829229 (SunnyUI技术交流群),请给源码项目点个Star吧!!!
SunnyUI.Localization 是基于.Net框架的C# Winform国际化多语言切换解决方案。
MIT开源协议,免费使用。
该项目并不完善,只作为一种多语言切换的思路,作为技术拓展。未计划更新及增加技术支持。
C# Winform国际化多语言切换主要包含两个内容:
SunnyUI.Localization 主要包含:
软件界面翻译器已经实现对Button、TextBox、Label、LinkLabel、CheckBox、RadioButton、GroupBox、RichTextBox、TabControl、DataGridView、MenuStrip、ContextMenuStrip、FolderBrowserDialog、OpenFileDialog、SaveFileDialog等原生控件的语言资源读取。
并兼容后续以Text属性存储界面语言资源的控件的语言资源读取。
1、定义CodeTranslator
// CodeTranslator,从BaseCodeTranslator继承
public class CodeTranslator : BaseCodeTranslator<CodeTranslator>
{
// [ConfigSection("Form1")],关联Form1,资源保存于ini的Form1的Section内
[ConfigSection("Form1")]
public string CloseInfo { get; set; }
// [ConfigSection("Form2")],关联Form1,资源保存于ini的Form2的Section内
[ConfigSection("Form2")]
public string HelloWorld { get; set; }
// 未关联,资源保存于ini的CodeLanguage的Section内
public string AskCaption { get; set; }
// 未关联,资源保存于ini的CodeLanguage的Section内
public string InfoCaption { get; set; }
// 设置默认值
public override void SetDefault()
{
base.SetDefault();
CloseInfo = "您确认要退出程序吗?";
HelloWorld = "你好世界!";
AskCaption = "询问";
InfoCaption = "提示";
}
}
2、创建生成器,保存资源文件
//定义语言资源文件夹
Define.LanguageDir = "Languages";
//创建生成器,输入项目文件(*.csproj)、项目可执行文件路径(*.exe)
Generator generator = new Generator(
@"C:\Users\Sunny\source\repos\SunnyUI.Localization\SunnyUI.Localization.Demo\SunnyUI.Localization.Demo.csproj",
@"C:\Users\Sunny\source\repos\SunnyUI.Localization\Bin\net40\SunnyUI.Localization.Demo.exe");
//保存界面原始语言资源文件
string rawFile = generator.Save();
//生成界面对应语言的资源文件,可重复生成,已有的不覆盖
generator.Save(rawFile, CultureInfos.SimplifiedChinese);
generator.Save(rawFile, CultureInfos.English);
//生成代码对应语言的资源文件,可重复生成,已有的不覆盖
CodeTranslator.Current.Save(CultureInfos.SimplifiedChinese);
CodeTranslator.Current.Save(CultureInfos.English);
生成的语言文件保存于可执行文件路径下语言资源文件夹下:
3、打开语言资源文件,翻译其内容
[Language]此节内容勿动
[Form1]翻译=后面的文字
[Form2]翻译=后面的文字
[CodeLanguage]翻译=后面的文字
整个文件浏览下,可以很容易看到界面文字资源和代码的文字资源都已经在语言资源文件里了。
zh-CN.lang
;<!--配置文件-->
[Language]
Name=zh-CN
ID=2052
NativeName=中文(中国)
DisplayName=中文(简体,中国)
EnglishName=Chinese (Simplified, China)
[Form1]
button1.Text=按钮1
checkBox1.Text=复选框1
Column1.HeaderText=列1
Column2.HeaderText=列2
Column3.HeaderText=列3
menu1ToolStripMenuItem.Text=菜单1
menu2ToolStripMenuItem.Text=菜单2
groupBox1.Text=分组框1
label1.Text=标签1
linkLabel1.Text=链接标签1
tabPage1.Text=页面1
tabPage2.Text=页面2
textBox1.Text=文本
button2.Text=创建多语文件
button3.Text=中文
button4.Text=English
button5.Text=...
Text=演示
radioButton1.Text=单选按钮1
button6.Text=...
menuStrip1.Text=主菜单1
menu1ToolStripMenuItem1.Text=菜单1
menu11ToolStripMenuItem.Text=菜单11
menu12ToolStripMenuItem.Text=菜单12
menu2ToolStripMenuItem1.Text=菜单2
menu21ToolStripMenuItem.Text=菜单21
menu22ToolStripMenuItem.Text=菜单22
folderBrowserDialog1.Description=请选择文件夹
openFileDialog1.FileName=openFileDialog1
openFileDialog1.Title=请选择文件
richTextBox1.Text=你好世界
saveFileDialog1.Title=请输入文件名
button7.Text=打开窗体
CloseInfo=您确认要退出程序吗?
[Form2]
button1.Text=按钮1
Text=窗体2
HelloWorld=你好世界!
[CodeLanguage]
InfoCaption=提示
AskCaption=询问
en-US.lang
;<!--配置文件-->
[Language]
Name=en-US
ID=1033
NativeName=English (United States)
DisplayName=英语(美国)
EnglishName=English (United States)
[Form1]
button1.Text=button1
checkBox1.Text=checkBox1
Column1.HeaderText=Column1
Column2.HeaderText=Column2
Column3.HeaderText=Column3
menu1ToolStripMenuItem.Text=Menu1
menu2ToolStripMenuItem.Text=Menu2
groupBox1.Text=groupBox1
label1.Text=label1
linkLabel1.Text=linkLabel1
tabPage1.Text=tabPage1
tabPage2.Text=tabPage2
textBox1.Text=Text
button2.Text=Create language files
button3.Text=中文
button4.Text=English
button5.Text=...
Text=Demo
radioButton1.Text=radioButton1
button6.Text=...
menuStrip1.Text=menuStrip1
menu1ToolStripMenuItem1.Text=Menu1
menu11ToolStripMenuItem.Text=Menu11
menu12ToolStripMenuItem.Text=Menu12
menu2ToolStripMenuItem1.Text=Menu2
menu21ToolStripMenuItem.Text=Menu21
menu22ToolStripMenuItem.Text=Menu22
folderBrowserDialog1.Description=Please select a folder
openFileDialog1.FileName=openFileDialog1
openFileDialog1.Title=Please select a file
richTextBox1.Text=Hello world!
saveFileDialog1.Title=Please enter the file name
button7.Text=Open form
CloseInfo=Are you sure you want to exit the program?
[Form2]
button1.Text=button1
Text=Form2
HelloWorld=Hello world!
[CodeLanguage]
InfoCaption=Info
AskCaption=Ask
4、运行翻译器,实现多语言切换
Global.CultureInfo = CultureInfos.SimplifiedChinese;
//读取界面语言资源并翻译
FormTranslator.Translate(this, Global.CultureInfo);
//读取代码语言资源供代码使用
CodeTranslator.Current.Load(Global.CultureInfo);
翻译器原理为读取语言资源文件,直接给代码使用并通过反射对界面字符串资源赋值。
中文
English
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型