WinForm c# 程序的界面多语言切换

我需要实现多国语言的界面切换,而且切换各种语言版本的时候希望程序是动态的加载语言,不希望切换语言后重新启动程序。

在.net2.0 中,m$  为我们提供了一种简单方便的方法, 使用资源文件
1.新建一个 Winform 应用程序, 新建一 Form ,名为 Form1,添加两个按钮 btnChinese, btnEnglish
2. 设置 Form1 的 Localizable 属性为 true, 设置该属性后,.net 将根据不同的语言,为应用程序生成不同的资源文件
3.设置各个控件的文本(系统默认语言下)
4.更改 Form1 的 Language 属性为想要支持的另一种语言,此例中我们选用 English
5.重新设置各个控件的文本

 注:修改各控件上的字符串,一旦改变某个控件的属性,VS就会自动生成一个资源文件formname.en-US.resx。

   资源文件命名方式 [资源文件主题名].[语言区域.].resx   

     在.NET开发中,VS2010为每一个窗口都自动创建一个与窗口同名的资源文件,后缀名为.resx(如下图)



对于一个窗口,我们添加了其相应的几个语言版本的resx资源文件以后,就应该在资源文件中添加不同语言版的字符串资源。需要注意的是,不同语言版本的资源文件中,相应各个语言的版本的字符串的名字必须是相同的!见下面的截图,两个资源文件中的不同版本的字符串资源的名字是相同的。

WinForm c# 程序的界面多语言切换_第1张图片

6. 如果有其它的语言要设置,请重复第4,第5步
7.编写代码
private void btnChinese_Click(object sender, EventArgs e)
        
{
            
//更改当前线程的 CultureInfo
            
//zh-CN 为中文,更多的关于 Culture 的字符串请查 MSDN
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("zh-CN");
            
//对当前窗体应用更改后的资源
            ApplyResource();
        }


        
private void btnEnglish_Click(object sender, EventArgs e)
        
{
            
//更改当前线程的 CultureInfo
            
//en 为英文,更多的关于 Culture 的字符串请查 MSDN
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en");
            
//对当前窗体应用更改后的资源
            ApplyResource();
        }

        
        
/**//// 
        
/// 应用资源
        
/// ApplyResources 的第一个参数为要设置的控件
        
///                  第二个参数为在资源文件中的ID,默认为控件的名称
        
/// 

        private void ApplyResource()
     
{
                 
  System.ComponentModel.ComponentResourceManager res = new ComponentResourceManager(typeof(Form1));
                      foreach (Control ctl in Controls)
                       {
                                  res.ApplyResources(ctl, ctl.Name);
                        }
                         this.ResumeLayout(false);
                        this.PerformLayout();
                          res.ApplyResources(this, "$this");
          }

你可能感兴趣的:(WinForm c# 程序的界面多语言切换)