2012-01-17 49 views
0

我有以下方法可以更改winform的语言。使用资源更改WinForm的语言

private void LoadLanguage(string lang) 
    { 
     foreach (Control c in this.Controls) 
     { 
      ComponentResourceManager resources = new ComponentResourceManager(typeof(MainForm)); 
      resources.ApplyResources(c, c.Name, new CultureInfo(lang)); 
     } 
    } 

我在方法中调用此方法。在窗体内我有一个选项卡控件,但tabPage文本属性不会更改。另一方面,Label已正确更改为适当的语言。有什么建议么?

+0

您是否已经为resx文件中的tabpage文本翻译了文本? – Reniuz 2012-01-17 15:18:08

+0

是的,我在资源 – pikk 2012-01-17 15:30:13

+0

中有适当的文本您是否尝试过制作测试应用程序来测试本地化是否正确处理tabpages? – Reniuz 2012-01-17 18:59:36

回答

2

删除你的方法,并尝试在Program.cs的文件这样做:

//Add this line 
Thread.CurrentThread.CurrentUICulture = new CultureInfo(languageString); 
Application.Run(new Form()); 

编辑:

为什么你的代码不能正常工作最主要的是,你申请表单控件语言。这意味着你应用TabControl控件,但TabControl也有“内部”控件(标签页)。因此,您需要递归迭代通过控件为所有控件和子控件应用语言。试试这段代码:

private void LoadLanguage(string lang) 
{ 
    ComponentResourceManager resources = new ComponentResourceManager(typeof(main)); 
    CultureInfo cultureInfo = new CultureInfo(lang); 

    doRecursiveLoading(this, cultureInfo, resources); 
} 

private void doRecursiveLoading(Control parent, CultureInfo cultureInfo, ComponentResourceManager resources) 
{ 
    foreach (Control c in parent.Controls) 
    { 
     resources.ApplyResources(c, c.Name, cultureInfo); 
     if (c.Controls.Count > 0) 
      doRecursiveLoading(c, cultureInfo, resources); 
    } 
} 
+0

是的,但我要求用户选择第一种形式的语言。你知道我该如何在program.cs中工作吗? – pikk 2012-01-18 11:53:24

+0

看看编辑 – Reniuz 2012-01-18 12:19:25

+0

我正在寻找改变我的表格的标题。您必须添加以下行: this.Text = resources.GetString(“MainTitle”,cultureInfo); 您必须在调用LoadLanguage方法中的doRecursiveLoading之后添加此行,并在每种语言的资源文件中添加一个字段“MainTitle”。 – monstergold 2013-06-11 10:53:54