2012-01-17 13 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ファイルのタブページテキストのテキストを翻訳していますか? – Reniuz

+0

はいリソースに適切なテキストがあります – pikk

+0

ローカライゼーションがタブページで正しく機能するかどうかをテストするためのテストアプリケーションを作成しようとしましたか? – Reniuz

答えて

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

+0

編集を見て – Reniuz

+0

私のフォームのタイトルを変更したいのですが。次の行を追加する必要があります。 this.Text = resources.GetString( "MainTitle"、cultureInfo); LoadLanguageメソッドでdoRecursiveLoadingを呼び出した直後にこの行を追加し、各言語のリソースファイルに "MainTitle"フィールドを追加する必要があります。 – monstergold

関連する問題