4 Star 42 Fork 11

Sunny / SunnyUI.Localization

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

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
输入图片说明

MIT License Copyright (c) 2021 Sunny Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

SunnyUI.Localization 是基于.Net框架的C# Winform国际化多语言切换解决方案。 展开 收起
C#
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C#
1
https://gitee.com/yhuse/SunnyUI.Localization.git
git@gitee.com:yhuse/SunnyUI.Localization.git
yhuse
SunnyUI.Localization
SunnyUI.Localization
master

搜索帮助