用c#创建支持多语言的WinForm应用程序

    技术2025-02-02  16

    实现多语言的方法可能有使用资源文件,或者配置xml两种方法吧。没时间研究过多,学习了一下使用资源文件的方法,成功了。

    在.net2.0 中,m$ 为我们提供了一种简单方便的方法, 使用资源文件1.新建一个 Winform 应用程序, 新建一 Form ,名为 Form1,添加一个菜单一个按钮。如图2. 设置 Form1 的 Localizable 属性为 true, 设置该属性后,.net 将根据不同的语言,为应用程序生成不同的资源文件3.设置各个控件的文本(系统默认语言下)4.更改 Form1 的 Language 属性为想要支持的另一种语言,此例中我们选用 English5.重新设置各个控件的文本 注:此时.net 将为 Form1 生成另一个资源文件,在本例中名为 Form1.en.resx当你需要添加新的控件时,需要切换到default语言。6. 如果有其它的语言要设置,请重复第4,第5步7.编写代码 (需要消息框多语言支持的话,就用form做消息框吧。同时也做成多语言支持。)

    大气象 using  System; using  System.Collections.Generic; using  System.ComponentModel; using  System.Data; using  System.Drawing; using  System.Text; using  System.Windows.Forms; using  System.Threading; using  System.Globalization; namespace  GlobalResource{     public   partial   class  Form1 : Form    {         public  Form1()        {            InitializeComponent();        }         private   void  button1_Click( object  sender, EventArgs e)        {            Msg msg  =   new  Msg();            msg.ShowDialog();        }         private   void  退出ToolStripMenuItem_Click( object  sender, EventArgs e)        {            Application.Exit();        }         private   void  中文ToolStripMenuItem_Click( object  sender, EventArgs e)        {             // 更改当前线程的 CultureInfo             // zh-CN 为中文,更多的关于 Culture 的字符串请查 MSDN             Thread.CurrentThread.CurrentUICulture  =  CultureInfo.GetCultureInfo( " zh-CN " );             // 对当前窗体应用更改后的资源             ApplyResource();        }         private   void  英文ToolStripMenuItem_Click( object  sender, EventArgs e)        {             // 更改当前线程的 CultureInfo             // en 为英文,更多的关于 Culture 的字符串请查 MSDN             Thread.CurrentThread.CurrentUICulture  =  CultureInfo.GetCultureInfo( " en " );             // 对当前窗体应用更改后的资源             ApplyResource();        }         ///   <summary>          ///  应用资源         ///  ApplyResources 的第一个参数为要设置的控件         ///                   第二个参数为在资源文件中的ID,默认为控件的名称         ///   </summary>          private   void  ApplyResource()        {            System.ComponentModel.ComponentResourceManager res  =   new  ComponentResourceManager( typeof (Form1));             foreach  (Control ctl  in  Controls)            {                res.ApplyResources(ctl, ctl.Name);            }             // 菜单              foreach  (ToolStripMenuItem item  in   this .menuStrip1.Items)            {                res.ApplyResources(item, item.Name);                 foreach  (ToolStripMenuItem subItem  in  item.DropDownItems)                {                    res.ApplyResources(subItem, subItem.Name);                }            }             // Caption             res.ApplyResources( this " $this " );        }    }}

     判断操作系统语言的方法:

     

    大气象 private   void  Form1_Load( object  sender, EventArgs e){     // 不需要判断操作系统的语言,使用资源文件会自动选择。     // if (System.Globalization.CultureInfo.InstalledUICulture.Name == "zh-CN")     // {     //     Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("zh-CN");     //      // 对当前窗体应用更改后的资源     //     ApplyResource();     // }     // else     // {     //     Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en");     //      // 对当前窗体应用更改后的资源     //     ApplyResource();     // } }

     

    源码下载:http://files.cnblogs.com/greatverve/GlobalResource.rar

    参考:http://www.cnblogs.com/michaelhuwei/archive/2007/06/05/771954.aspxhttp://www.cnblogs.com/robertzml/archive/2009/08/20/1550445.htmlhttp://topic.csdn.net/u/20081030/00/71d2a66b-19bc-4b28-9f18-2dd038e80e3c.htmlhttp://topic.csdn.net/u/20081020/16/4440219e-b4a8-41ee-85a3-58ac45870f72.html?seed=1079612622

     

    转自:http://www.cnblogs.com/greatverve/archive/2010/10/20/csharp-Multi-Language.html

    最新回复(0)