1 Star 22 Fork 3

Sunny / SunnyUI.Localization

Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
Clone or Download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

SunnyUI

欢迎交流,QQ群: 56829229 (SunnyUI技术交流群),请给源码项目点个Star吧!!!

介绍

SunnyUI.Localization 是基于.Net框架的C# Winform国际化多语言切换解决方案。
MIT开源协议,免费使用。

架构

C# Winform国际化多语言切换主要包含两个内容:

  • 软件界面上的字符串资源
  • 软件代码内的字符串资源
    SunnyUI.Localization 能够方便、快捷的加载、切换上述两种多语言字符串资源。

SunnyUI.Localization 主要包含:

  • 翻译器(Translator),通过软件界面翻译器(FormTranslator)、软件代码翻译器(CodeTranslator),实现多语言切换。
  • 生成器(Generator),通过读取界面文件(Form.Designer.cs)、软件代码翻译器(CodeTranslator)配置内容,生成多语言配置文件(ini文件),打开多语言配置文件,翻译其内容后,供翻译器使用。

软件界面翻译器已经实现对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
输入图片说明

Repository Comments ( 0 )

Sign in to post a comment

About

SunnyUI.Localization 是基于.Net框架的C# Winform国际化多语言切换解决方案。 expand collapse
Cancel

Releases

No release

SunnyUI.Localization

Contributors

All

Activities

Load More
can not load any more
C#
1
https://gitee.com/yhuse/SunnyUI.Localization.git
git@gitee.com:yhuse/SunnyUI.Localization.git
yhuse
SunnyUI.Localization
SunnyUI.Localization
master

Search