FrontPage]-[kamo]-[C#についての覚え書き]- [国際化に対応する

国際化に対応する

一口に国際化といっても色々あると思いますが、ここでは C#で作成したフォームと、メッセージや例外で使用する文字列リソースを 国際化する方法を紹介します。

国際化とは?

簡単に言うと使用しているOSの言語設定によって、画面に出てくる 文字を変える仕組みです。たとえば英語のWindowsを使用している人には 「Hello」と表示されるメッセージを、日本語Windowsを使用している人には 「こんにちは」と表示させる事が出来ます。

用語について

まず用語等を憶えましょう。(記述中)
用語説明
グローバリゼーション
ローカリゼーション
サテライトアセンブリ
メインアセンブリ
resXファイル

どうやってやるのか?

フォームとその他の文字列リソースでは、実装方法が異なります。

フォームの国際化を行う

フォームデザイナ上で簡単に実施出来ます。まず最初に自分の使っている 言語で(・・・たぶん日本語だと思いますが)普通にフォームを作成します。 国際化の作業は結合テスト等の作業が、ある程度完了した後で行った方が 良いです。少なくとも、画面の項目が左右されなくなった後で実施しましょう。

ここでは、日本語を話すプログラマが、英語圏へのローカライズを行う 例をとってみましょう。

  1. フォームデザイナを開きます。
  2. Localizableプロパティを「true」に変更します。
  3. Languageプロパティを「英語」にします。
    1. このプロパティには英語(XX)というのがありますが・・・(未講)
    2. file not found../attach/4323544950535FB9F1BADDB2BDA4CBC2D0B1FEA4B9A4EB_A4B3A4B3A4CBB2E8C1FCA4F2C1DEC6FEA4B9A4EBA3B1
  4. テキストボックスやボタンのTextプロパティを、英語表記のデータに
  5. 変更します。例えば「ファイル」→「File」といった具合です。 file not found../attach/4323544950535FB9F1BADDB2BDA4CBC2D0B1FEA4B9A4EB_A4B3A4B3A4CBB2E8C1FCA4F2C1DEC6FEA4B9A4EBA3B2
  6. いつも通りにコンパイルして実行します。

すると、日本語Windowsでは変更前のTextプロパティの値で、画面が表示 されます。ただし、英語Windowsでは変更後のTextプロパティで表示されます。 コンパイルされたファイルを見ると、実行ファイルの位置(\bin\debug\)に 「en」フォルダが出来ていて、「xxxxxxxx.resources.dll」というのが 作成されていると思います。これがサテライトアセンブリと呼ばれるファイル です。「en」はEnglishのenなので、他の言語についても同様に作業を行うと 言語毎のフォルダとサテライトアセンブリが作成されます。

file not found../attach/4323544950535FB9F1BADDB2BDA4CBC2D0B1FEA4B9A4EB_A4B3A4B3A4CBB2E8C1FCA4F2C1DEC6FEA4B9A4EBA3B3

この作業を行った際に登録したTextプロパティの英語文字列は、 「xxxxxxx.en.resx」というファイルにXML形式で登録されています。 このファイルはVisualStudioが自動的に書き換えるので、独自に メンテナンスするのは避けましょう。がんばって作業しても、 一瞬で(特に断わりもなく)上書きされてしまいます。

file not found../attach/4323544950535FB9F1BADDB2BDA4CBC2D0B1FEA4B9A4EB_A4B3A4B3A4CBB2E8C1FCA4F2C1DEC6FEA4B9A4EBA3B4

文字列リソースの国際化を行う

画面に表示する情報は、フォームのコントロールだけではありません。 メッセージボックスに表示する文字列や、例外としてスローするエラー内容 についても、可能な限り国際化するべきです。

文字列リソースを国際化するには、System.Resources.ResourceManager? クラスと、独自に作成する「xxxxxxx.resx」と「xxxxxxx.en.resx」 ファイルを使用します。 この作業はフォームの国際化と異なり、国際化する予定がある場合は 予め準備しておきましょう。

実装について簡単に説明すると、言語毎にresxファイルを作成し、 ResourceManager?でresxから文字列を取得するという処理です。

まず初めに自分の言語用のresxファイルを作成します。 これはVisualStudioを使用して作成する事が出来ます。 新規作成ウィザードで選択しましょう。

file not found../attach/4323544950535FB9F1BADDB2BDA4CBC2D0B1FEA4B9A4EB_A4B3A4B3A4CBB2E8C1FCA4F2C1DEC6FEA4B9A4EBA3B5

(続きはまた今度)


Last-modified: 2004-11-20 03:56:58