C# Winform项目多语言实现(支持简/繁/英三种语言)
作者:C/S框架网  发布日期:2011-06-26 22:02:29
  C# Winform项目多语言实现(支持简/繁/英三种语言)

C# Winform项目多语言实现(支持简/繁/英三种语言)



关于多语言最新文章(2021年):


C# Winform支持多语言界面切换的软件快速开发平台

http://www.csframework.com/archive/1/arc-1-20210520-3437.htm


C# Winform软件快速开发框架|软件开发平台 - 界面多语言实现原理

http://www.csframework.com/archive/1/arc-1-20210520-3436.htm



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();

    }


http://www.csframework.com/ 版权所有



定义窗体基类,实现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>

 



程序截图


英文版:

贴图图片


简体中文:

贴图图片

繁体中文:

贴图图片




C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务


Source code for VIP:

点击下载附件 点击下载附件 (如下载失败,请邮件通知我们寄回给您,或QQ:23404761留言.)
上一篇 下一篇