C# Winform项目多语言实现(支持简/繁/英三种语言)
C# Winform项目多语言实现(支持简/繁/英三种语言)
C# Winform软件快速开发框架|软件开发平台 - 界面多语言实现原理

C# Winform项目多语言实现(支持简/繁/英三种语言)
关于多语言处理,本人尝试过以下几种方案:
1. 使用Form窗体自带的多语言处理。设置Form的Language属性,选择一种语言会自动生成.resx文件。
但是最大的缺点是不易维护,每个语言对应一个resx文件,第个窗体对应至少5个文件!如项目大窗体
数量多会生成数以千计的resx文件!vss控制也成问题。另一个缺点是当界面增加控件时要刷新resx
文件。
2. 使用二维数组存储多语言数据。在用Delphi开发过一个项目,当时用二维数组存储多语言数据。
枚举窗体内所有控件,使用控件名称获取语言数据。
3. 使用XML存储多语言数据。抽象出一个接口用于设置语言。
4. 数据库存储多语言数据、提供多语言管理与维护界面(CSFrameworkV5-旗舰版)
下面介绍第3种方案(XML方式)
一、支持多语言的接口定义:
/// <summary>
/// 支持多语言的接口
/// </summary>
public interface ILanguageSupport
{
/// <summary>
/// 语言编号
/// </summary>
string LanguageISID { get; set; }
/// <summary>
/// 设置语言
/// </summary>
/// <param name="language"></param>
void SetLanguage(string language);
void SetLanguage();
/// <summary>
/// 设置语言标记。用于自动设置语言
/// </summary>
void SetLanguageTag();
定义窗体基类,实现ILanguageSupport接口
public partial class frmBase : XtraForm, ILanguageSupport
{
protected string _LanguageISID;
public frmBase()
{
InitializeComponent();
}
private void frmBase_Load(object sender, EventArgs e)
{
this.SetLanguage();
}
#region ILanguageSupport 成员
public string LanguageISID { get { return _LanguageISID; } set { _LanguageISID = value; } }
public virtual void SetLanguage(string language) { }
public virtual void SetLanguage() { }
public virtual void SetLanguageTag() { }
#endregion
}
www.csframework.com 版权所有
主窗体部分代码
/// <summary>
/// 设置语言按钮事件
/// </summary>
private void OnSetLanguage_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
LanguageType type = (LanguageType)int.Parse(e.Item.Tag.ToString());
LanguageProvider.CurrentLanguageType = type;
this.DoSetLanguage();
}
/// <summary>
/// 重新设置所有打开窗体的语言。
/// </summary>
private void DoSetLanguage()
{
foreach (Form form in Application.OpenForms)
if (form is ILanguageSupport) (form as ILanguageSupport).SetLanguage();
}
/// <summary>
/// 设置主窗体的多语言
/// </summary>
public override void SetLanguage()
{
base.SetLanguage();
this.Text = LanguageProvider.GetLanguage(LanguageProvider.CurrentLanguageType, "frmMain");
btnChild1.Caption = LanguageProvider.GetLanguage(LanguageProvider.CurrentLanguageType,
"frmMain.btnChild1");
btnChild2.Caption = LanguageProvider.GetLanguage(LanguageProvider.CurrentLanguageType,
"frmMain.btnChild2");
btnAbout.Caption = LanguageProvider.GetLanguage(LanguageProvider.CurrentLanguageType,
"frmMain.btnAbout");
btnLanguage.Caption = LanguageProvider.GetLanguage(LanguageProvider.CurrentLanguageType,
"frmMain.btnLanguage");
btnUser.Caption = LanguageProvider.GetLanguage(LanguageProvider.CurrentLanguageType,
"frmMain.btnUser");
}
www.csframework.com 版权所有
语言定义:
<?xml version="1.0" encoding="utf-8" ?>
<LanguageLibrary>
<lan ISID="frmMain" ENG="C# Multi-Language Implement (http://www.csframework.com/)"
CHN_T="C#實現多語言 (WWW.CSFRAMEWORK.COM C/S框架網)"
CHN_S="C#实现多语言 (WWW.CSFRAMEWORK.COM C/S框架网)">
</lan>
<lan ISID="frmMain.btnChild1" ENG="Open Child1 Form" CHN_T="子表單1" CHN_S="子窗体1"></lan>
<lan ISID="frmMain.btnChild2" ENG="Open Child2 Form" CHN_T="子表單2" CHN_S="子窗体2"></lan>
<lan ISID="frmMain.btnAbout" ENG="About Us" CHN_T="關於我們" CHN_S="关于我们"></lan>
<lan ISID="frmMain.btnLanguage" ENG="Select Language" CHN_T="選擇語言" CHN_S="选择语言"></lan>
<lan ISID="frmMain.btnUser" ENG="Current User" CHN_T="當前用戶" CHN_S="当前用户"></lan>
<lan ISID="frmChild1" ENG="Child Form One" CHN_T="子表單1" CHN_S="子窗体1"></lan>
<lan ISID="frmChild2" ENG="Child Form Two" CHN_T="子表單2" CHN_S="子窗体2"></lan>
<lan ISID="gridColumn1" ENG="User Name" CHN_T="姓名" CHN_S="姓名"></lan>
<lan ISID="gridColumn2" ENG="Tel No." CHN_T="電話" CHN_S="电话"></lan>
<lan ISID="gridColumn3" ENG="Address" CHN_T="地址" CHN_S="地址"></lan>
<lan ISID="about" ENG="Open About Us Form" CHN_T="打開關於我們表單" CHN_S="打开关于我们窗体"></lan>
<lan ISID="csframework"
ENG="www.csframework.com will become more and more wonderful with you are surpport.
let’s made a happy family together hand in hand. "
CHN_T="C/S框架網在您的支持下會建設更美好,讓我們攜起手來共同打造一個快樂家園.
感謝您使用C/S框架網,有任何意見或建議請留言!"
CHN_S="C/S框架網在您的支持下会建设更美好,让我们携起手来共同打造一个快乐家园.
感谢您使用C/S框架網,有任何意见或建议请留言!">
</lan>
</LanguageLibrary>
二、程序截图
英文版:


繁体中文:

最新支持多语言的快速开发平台 - Winform框架
C/S架构软件快速开发平台-旗舰版V5.1 (Ultimate Edition 2021)
https://www.csframework.com/cs-framework-5.1.htm
全局翻译英文





演示视频下载:https://www.csframework.com/cs-framework-5.0-demo.htm

Source code for VIP:
开发框架多语言包Language.dll (支持简/繁/英三种语言)
C/S软件授权注册系统V3.0(Winform+WebApi+.NET8+EFCore版本)|C/S开发框架
C# Winform等待窗体WaitingForm组件下载(CSFramework提供)|C/S开发框架
C# Winform等待窗体WaitingForm组件下载(CSFramework提供)
C# Winform等待窗体WaitingForm组件下载(CSFramework提供)
企业级C/S系统快速开发框架(Winform+.NET8+EFCore)|C/S开发框架
最新MES系统快速开发平台(Winform+NET8+EFCore)|C/S开发框架
Winform软件开发框架|快速开发平台推荐|C/S开发框架
Winform开发框架 | 表格编辑窗体权限控制|C/S开发框架
DevExpress组件版本下载、安装与VS开发环境 | Winform C/S框架|C/S开发框架
使用Winform代码生成器生成FastReport.NET报表模板文件(frx文件)
.NET代码生成器V6.1 - 快速生成Winform窗体代码
C#Winform代码生成器新功能 - 支持配置每个字段可弹窗选择数据
C# Winform代码生成器新功能 - 生成表格编辑窗体
WinFormsApp窗体应用快速开发框架(.NET7+EFCore+VS2022)
Winform C/S架构自动升级程序 AutoUpgraderV1.2迭代记录|C/S开发框架
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
