チュートリアル : Windows フォームのローカリゼーション

更新 : 2007 年 11 月

Visual Studio のプロジェクト システムには、Windows フォーム アプリケーションをローカライズするためのさまざまなサポートが用意されています。Visual Studio 開発環境を使ってリソース ファイルを生成する方法は 2 つあります。

  • フォームで使用されるテキストやイメージなどのローカライズ可能な UI 要素の生成をプロジェクト システムに任せます。生成されたリソース ファイルは、サテライト アセンブリに組み込まれます。これはフォーム ベースのリソースと呼ばれます。

  • リソース ファイル テンプレートを追加し、XML デザイナを使ってこのテンプレートを編集します。この方法は、ダイアログ ボックスやエラー メッセージに表示されるローカライズ可能な文字列を作成する場合に使用されます。この方法を使う場合は、後でこれらのリソースにアクセスするためのコードを記述する必要があります。これはプロジェクト リソースと呼ばれます。

  • 通常、Windows フォーム アプリケーションのフォームに固有なリソースについては、すべてフォーム ベースのリソースを使用します。エラーメッセージなど、フォーム ベースではないユーザー インターフェイスの文字列やイメージについては、プロジェクト リソースを使用します。

y99d1cd3.alert_note(ja-jp,VS.90).gifメモ :

同じプロパティではフォーム ベースのリソースとプロジェクト リソースのどちらか一方を使用して、一貫性を持たせることが重要です。PictureBoxImage プロパティなど、多くのイメージ プロパティでは、プロジェクト リソースからイメージを選択するか、フォーム ベースの リソースとして新しいイメージをインポートすることができます。プロジェクト リソースを設定して既定のイメージを設定し、フォーム ベースのリソースを使用して言語固有バージョンのイメージを設定すると、既定のイメージは表示されなくなります。

ここでは、1 つの Windows アプリケーション プロジェクト内での両方のプロセスについて説明します。

また、テキスト ファイルをリソース ファイルに変換することもできます。詳細については、「テキスト ファイル形式のリソース」および「リソース ファイル ジェネレータ (Resgen.exe)」を参照してください。

Visual Studio で自動的にリソース ファイルを生成するには

  1. "WindowsApplication1" という名前の新しい Windows アプリケーションを作成します。詳細については、「方法 : Windows アプリケーション プロジェクトを作成する」を参照してください。

  2. [プロパティ] ウィンドウで、フォームの Localizable プロパティを true に設定します。

    Language プロパティは既に (Default) に設定されています。

  3. Button コントロールをツールボックスの [Windows フォーム] タブからフォームにドラッグし、その Text プロパティを Hello World に設定します。

  4. フォームの Language プロパティを German (Germany) に設定します。

  5. ボタンの Text プロパティを Hallo Welt に設定します。

  6. フォームの Language プロパティを French (France) に設定します。

  7. ボタンの Text プロパティを Bonjour le Monde に設定します。文字列が長い場合は、必要に応じてボタンのサイズを変更できます。

  8. ソリューションを保存してビルドします。

  9. ソリューション エクスプローラの [すべてのファイルを表示] をクリックします。

    リソース ファイルが、Form1.vb、Form1.cs、または Form1.jsl の下に表示されます。Form1.resx は、メイン アセンブリに組み込まれる、既定のカルチャのリソース ファイルです。Form1.de-DE.resx は、ドイツで話されるドイツ語のリソース ファイルです。Form1.fr-FR.resx は、フランスで話されるフランス語のリソース ファイルです。

    さらに、Form1.de.resx および Form1.fr.resx という名前のファイルが表示されます。Visual Studio は、これらのファイルを自動的に作成して、新しいファイルをプロジェクトに追加保存するときに適用される Visual SourceSafe の制限に対処します。.resx ファイルは空で、リソースは含まれていません。

  10. F5 キーを押すか、または [デバッグ] メニューの [開始] をクリックします。

    オペレーティング システムの UI 言語に応じて、英語、フランス語、またはドイツ語のあいさつがダイアログ ボックスに表示されます。

    y99d1cd3.alert_note(ja-jp,VS.90).gifメモ :

    Windows で使用される UI 言語は、CurrentUICulture 設定の関数です。使用している Windows に MUI (Multilingual User Interface Pack) がインストールされている場合は、コントロール パネルで UI 言語を変更できます。詳細については、「Windows Server 2003, Windows XP & Windows 2000 MUI」を参照してください。MUI がインストールされていない場合は、次に説明する方法で、現在の UI カルチャをプログラムから変更できます。

    アプリケーションでフランス語のリソースが表示されるように UI カルチャを設定する手順を次に示します。実際のアプリケーションでは、このように UI カルチャをハード コーディングすることはありません。UI カルチャの設定は、ユーザー設定やアプリケーション設定によって決まります。

特定のリソースを表示するように UI カルチャを設定するには

  1. コード エディタで、モジュールの先頭にある Form1 の宣言の前に、次のコードを追加します。

    ' Visual Basic
    Imports System.Globalization
    Imports System.Threading
    
    // C#
    using System.Globalization;
    using System.Threading;
    
    // Visual J#
    import System.Globalization.*;
    import System.Threading.*;
    
  2. 次のコードを追加します。Visual Basic では、New 関数内の、InitializeComponent 関数を呼び出す前の位置に追加します。Visual C# および Visual J# では、Form1 内の、やはり InitializeComponent 関数を呼び出す前の位置に追加します。

    ' Visual Basic
    ' Sets the UI culture to French (France).
    Thread.CurrentThread.CurrentUICulture = New CultureInfo("fr-FR")
    
    // C#
    // Sets the UI culture to French (France).
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
    
    // Visual J#
    // Sets the UI culture to French (France).
    System.Threading.Thread.get_CurrentThread().set_CurrentUICulture( new CultureInfo("fr-FR"));
    
  3. ソリューションを保存してビルドします。

  4. F5 キーを押すか、または [デバッグ] メニューの [開始] をクリックします。

    これで、フォームが常にフランス語で表示されるようになります。フランス語の長い文字列を表示するためにボタンのサイズを前の段階で変更している場合は、変更されたボタン サイズもフランス語のリソース ファイルに保持されます。

プロジェクトに手動でリソース ファイルを追加して編集するには

  1. [プロジェクト] メニューの [新しい項目の追加] をクリックします。

  2. [テンプレート] ボックスの [アセンブリ リソース ファイル] をクリックします。[プロジェクト名] ボックスにファイル名として「WinFormStrings.resx」と入力します。WinFormStrings.resx ファイルには、英語のフォールバック リソースが格納されます。これらのリソースは、アプリケーションが UI カルチャにより対応しているリソースを見つけることができなかった場合にアクセスされます。

    ソリューション エクスプローラでプロジェクトにファイルが追加され、XML デザイナのデータ ビューでファイルが自動的に開きます。

  3. [データ テーブル] ペインの [data] をクリックします。

  4. [データ] ペインで空の行をクリックし、[name] 列に strMessage と入力します。次に、[value] 列に Hello World と入力します。

    文字列に対して [type] および [mimetype] を指定する必要はありません。これらはオブジェクトに対して使用されます。型指定子には、保存するオブジェクトのデータ型が指定されます。オブジェクトがバイナリ データで構成されている場合、MIME 型指定子には格納するバイナリ情報の基本型 (base64) が指定されます。

  5. [ファイル] メニューの [WinFormStrings.resx の保存] をクリックします。

  6. 手順 1. から手順 5. をこの後 2 回繰り返して、次の表に指定された文字列リソースで、WinFormStrings.de-DE.resx および WinFormStrings.fr-FR.resx という 2 つのリソース ファイルを作成します。WinFormStrings.de-DE.resx ファイルには、ドイツで話されるドイツ語に固有のリソースが格納されます。WinFormStrings.fr-FR.resx ファイルには、フランスで話されるフランス語に固有のリソースが格納されます。

    リソース ファイル名

    名前

    WinFormStrings.de-DE.resx

    strMessage

    Hallo Welt

    WinFormStrings.fr-FR.resx

    strMessage

    Bonjour le Monde

手動で追加したリソースにアクセスするには

  1. コード エディタで、 System.Resources 名前空間をコード モジュールの先頭でインポートします。

    ' Visual Basic
    Imports System.Resources
    
    // C#
    using System.Resources;
    
    // Visual J#
    import System.Resources.*;
    
  2. デザイン ビューで、ボタンをダブルクリックして、対応する Click イベント ハンドラのコードを表示し、次のコードを追加します。ResourceManager コンストラクタには 2 つの引数があります。1 つ目は、リソースのルート名 (カルチャおよび .resx サフィックスのないリソース ファイルの名前) です。2 つ目の引数はメイン アセンブリです。

    このチュートリアルでは、名前空間は宣言されません。したがって、ResourceManager の第 1 の引数には ProjectName.ResourceFileRootName の形式を適用できます。ただし、実際のアプリケーションでは DefaultNamespace プロパティを設定します。その場合は、名前空間を含む、リソース ファイルの絶対ルート パス名を使用してリソース マネージャを宣言する必要があります。たとえば、既定の名前空間が MyCompany.MyApplication.MyComponent の場合、ResourceManager コンストラクタの最初の引数は MyCompany.MyApplication.MyComponent.WinFormStrings になります。

    ' Visual Basic
    ' Declare a Resource Manager instance.
    Dim LocRM As New ResourceManager("WindowsApplication1.WinFormStrings", GetType(Form1).Assembly)
    ' Assign the string for the "strMessage" key to a message box.
    MessageBox.Show(LocRM.GetString("strMessage"))
    
    // C#
    // Declare a Resource Manager instance.
    ResourceManager LocRM = new ResourceManager("WindowsApplication1.WinFormStrings",typeof(Form1).Assembly);
    // Assign the string for the "strMessage" key to a message box.
    MessageBox.Show(LocRM.GetString("strMessage"));
    
    // Visual J#
    // Declare a Resource Manager instance.
    ResourceManager LocRM = new ResourceManager("WindowsApplication1.WinFormStrings",
       System.Type. GetType("WindowsApplication1.Form1").get_Assembly());
    // Assign the string for the "strMessage" key to a message box.
    MessageBox.Show(LocRM.GetString("strMessage"));
    
    y99d1cd3.alert_note(ja-jp,VS.90).gifメモ :

    既定では、ResourceManager オブジェクトは大文字と小文字が区別されます。"TXTWELCOME" で "txtWelcome" と同じリソースが取得されるような、大文字と小文字が区別されない検索を行うには、リソース マネージャの IgnoreCase プロパティを true に設定します。ただし、パフォーマンス上の理由から、リソース名では常に大文字と小文字を正しく区別して指定することをお勧めします。大文字と小文字を区別しないリソース検索を実行すると、パフォーマンス上の問題が発生することもあります。

  3. フォームをビルドして実行します。ボタンをクリックします。

    UI カルチャ設定に対応した文字列がメッセージ ボックスに表示されます。UI カルチャに対応しているリソースが見つからない場合は、フォールバック リソースの文字列が表示されます。

参照

処理手順

方法 : Windows フォームのグローバリゼーション用のカルチャおよび UI カルチャを設定する