ステップ 7 ハンズオン:

Visual Studio .NET 2003 を使用して、Windows アプリケーション UI の国際化を行う

マイクロソフト株式会社 デベロッパー マーケティング本部
デベロッパー エバンジェリスト 近藤和彦

目標 Windows アプリケーションの UI を国際化する方法について理解
使用技術
  • Windows フォーム
  • Visual Basic .NET
取り上げるトピックス
  • Visual Studio .NET 2003 における UI の国際化方法
前提知識
備考 特になし

準備

このハンズオンを行うために、3 つの画像ファイルを用意してください。
このサンプル アプリケーションでは "Japan.bmp", "Korea.bmp", "default.bmp" という 3 つのビットマップファイルを使用します。

Step 1 :

アプリケーションの設計を行います。

設計時においてはグローバリゼーションを考慮し、できる限り特定のカルチャ(文化や言語など)に依存しない、汎用的なデザインや機能を設計することがポイントです。

ここでは、起動時にカルチャに応じたイメージ (PictureBox コントロール) と文字列 (Label コントロール) が表示されるアプリケーションを作成します。

図 1 : サンプル アプリケーションの実行例 (日本)

また、事前にアプリケーションでサポートするカルチャを決定しておきます。ここでは、日本と韓国に対応したアプリケーションを作成します。

Step 2 :

Windows アプリケーションを新規に作成します。

Windows アプリケーションの作成方法の手順については、「 10 行でズバリ !! Windows フォームによるクライアント アプリケーション開発」を参考にしてください。

ここでは、サポートするすべてのカルチャで共通となるデザインを行います。PictureBox コントロールとLabel コントロールを貼り付け、下記の図のようにレイアウトします。

図 2 : サンプル アプリケーションのデザイン

Step 3 :

既定の UI をデザインします。

アプリケーションが想定していないカルチャが指定された場合 (このサンプル アプリケーションでは日本と韓国以外が指定された場合) に、ここで設定した UI が表示されます。ここでは既定のカルチャを英語とします。

まず、Windows フォームの以下の 2 つのプロパティを設定します。

コントロール ID プロパティ名 設定値
Form1 Language (既定値)
Form1 Localizable True

次に既定カルチャ用の UI のデザインを行います。

コントロール ID プロパティ名 設定値
Label1 Text Hello
PictureBox1 Image Default.bmp

図 3 : サンプル アプリケーションのデザイン (既定)

最後にアプリケーションを実行し、エラーが発生しないことを確認します。

Step 4 :

各カルチャに対応した UI をデザインします。
まず、日本のカルチャ向けにローカライズしましょう。
Windows フォームのプロパティを以下のように設定します。

コントロール ID プロパティ名 設定値
Form1 Language 日本語 (日本)

次に日本向けの UI のデザインを行います。

コントロール ID プロパティ名 設定値
Label1 Text こんにちは
PictureBox1 Image Japan.bmp

図 4 : サンプル アプリケーションのデザイン (日本語)

次に、韓国向けにローカライズしましょう。
Windows フォームのプロパティを以下のように設定します。

コントロール ID プロパティ名 設定値
Form1 Language 韓国語 (韓国)

※Language プロパティの設定直後、Visual Studio .NET 2003 上のデザイン画面が、既定のデザインに戻ることに注目してください。

韓国向けの UI のデザインを行います。

コントロール ID プロパティ名 設定値
Label1 Text 안녕하세요
PictureBox1 Image Korea.bmp

図 5 : サンプル アプリケーションのデザイン (韓国語)

もう一度日本語 UI のデザインを行いたい場合は、Windows フォームの Language プロパティを "日本語 (日本)" に設定すれば、先ほど作成した日本語 UI のデザイン画面が表示されます。

Step 5 :

カルチャ切り替えのための、テスト コードを埋め込みます。

Windows アプリケーションの UI は、Windows OS の言語バージョンによって自動的に決められます。例えば、日本語バージョンの OS を使用している場合には、日本語の UI が常に選択され、韓国語バージョンの OS を使用している場合には、韓国語の UI が選択されます。

ここでは、特定の言語バージョンの OS を使用していることを前提に、テストコードを埋め込み、プログラムでカルチャを変更する方法を行います。

多言語バージョンで動作を確認する場合には、このテスト コードは不要です。コントロール パネルより該当するカルチャを設定してください。

まず、韓国語 (韓国) にカルチャを明示的に切り替えるための、テスト コードを埋め込みます。下記赤字のコードを New メソッド (コンストラクタ) に記述してください。

Public Sub New ( ) 
    MyBase.New ( ) 
    System.Threading.Thread.CurrentThread.CurrentUICulture = _
        New System.Globalization.CultureInfo ("ko-KR") 
    'この呼び出しはWindows フォーム デザイナで必要です。
    InitializeComponent ( ) 
    'InitializeComponent ( )  呼び出しの後に初期化を追加します。
End Sub

(注意事項)

  • New メソッド (コンストラクタ) は Windows フォーム デザイナで生成されたコードの中にあります。
  • テスト コードは、InitializeComponent () より前に記述する必要があります。これは InitializeComponent () の中でコントロールの初期化が行われるためです。
  • CultureInfo メソッドの引数には、該当のカルチャ コードを指定します。
カルチャーコード

カルチャ コードは、特定のカルチャを示す一意のコードで、言語コード、地域コードから構成されます。

カルチャ コードの中には言語コードのみを指定するものもあります。これはニュートラル カルチャと呼ばれ、特にその言語圏を示しています。例として、英語圏全般を示す en というニュートラル カルチャがあります。

しかし、このニュートラル カルチャでは特定できない要素もあります。例えば通貨です。英語圏の中でも、たとえばアメリカとイギリスでは通貨が異なります。

この場合、さらにカルチャを特定したアメリカを示す en-US やイギリスを示す en-GB といった固有カルチャの指定が必要となります。

図 6 : カルチャーコード

カルチャ カルチャコード
英語圏全般 en
英語 - アメリカ en-US
英語 - イギリス en-GB
英語 - カナダ en-CA
日本語 - 日本 ja-JP
韓国語 - 韓国 ko-KR


詳細については MSDN Library 「CultureInfo クラス」を参考にしてください。

Step 6 :

アプリケーションを実行してみましょう。

まず、韓国語の UI が表示されることを確認します。

図 7 : サンプル アプリケーションの実行例 (韓国)

次に日本語の UI が表示されることを確認します。

Step 5 で記述したテスト コードを下記赤字のように変更して実行します。なお日本語版の OS を使用している場合は、テスト コード自体を削除して確認してください。

Public Sub New ( ) 
    MyBase.New ( ) 
     System.Threading.Thread.CurrentThread.CurrentUICulture = _
        New System.Globalization.CultureInfo ("ja-JP")
    'この呼び出しはWindows フォーム デザイナで必要です。
    InitializeComponent ( ) 
    'InitializeComponent ( )  呼び出しの後に初期化を追加します。
End Sub

図 8 : サンプル アプリケーションの実行例 (日本)

カルチャに応じて、それぞれローカライズされた UI が表示されることが確認できました。

Step 7 :

次にアプリケーションが想定していないカルチャが指定されたときの動作を確認します。

ここでは、Step 5 で記述したテスト コードを下記赤字のように変更し、カルチャとしてドイツ語 (オーストリア) を指定します。

Public Sub New ( ) 
    MyBase.New ( ) 
    System.Threading.Thread.CurrentThread.CurrentUICulture = _
        New System.Globalization.CultureInfo ("de-AT")
    'この呼び出しはWindows フォーム デザイナで必要です。
    InitializeComponent ( ) 
    'InitializeComponent ( )  呼び出しの後に初期化を追加します。
End Sub

図 9 : サンプル アプリケーションの実行例 (既定)

カルチャの構成を図 10 の様に階層構造として見立てた場合、カルチャは階層の下からさかのぼって検索されます。これをリソース フォールバック プロセスと呼びます。

図 10 : カルチャの構成

指定したカルチャがアプリケーションによってサポートされている場合には、そのカルチャがそのまま適用されます。しかし、特定の固有カルチャで合致しなかった場合には、階層をさかのぼって適するリソースが存在するか検索が行われます。

厳密には、リソース フォールバック プロセスは、アセンブリが配置されている場所などの様々な条件に依存します。詳細については「アプリケーションのリソース」を参考にしてください。

このサンプルでは、リソース フォールバック プロセスに従って、最終的に既定カルチャのUIが選択され表示されることが確認できます。

まとめ

このように Windows アプリケーションの UIに関して国際化対応する場合、Visual Studio .NET によって、コーディングレスで実現することができます。

実際の開発においては、アプリケーションの国際化を行う場合、下記の 3 つの手順を推奨しています。

  • グローバリゼーション

    複数のカルチャで使用できる共通的な設計・実装を行う。

  • ローカライズ対象の確認

    グローバル化されたアプリケーションがローカライズできる段階に達しているか品質を確認する。

  • ローカリゼーション

    特定のカルチャに合わせてアプリケーションをカスタマイズする。

詳細は参考資料「国際対応アプリケーションの開発」 を参考にしてください。

実際のアプリケーションにおいては、アプリケーションの処理ロジックで、動的に文字列や画像を操作する必要がある場合もあります。

この場合の実現方法については、「.NET Framework を活用し、コードによる Windows アプリケーションの国際化を行う」を参照してください。

参考資料 :

  • アプリケーションのグローバライズとローカライズ
  • 国際対応アプリケーションの開発

 

ページのトップへ