2012-01-17 46 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