4.Windows Form Application の管理下にない文字列の多言語化
前の節では、Windowsフォームアプリケーションでの多言語化について議論しました。
Windowsフォームアプリケーションにおける多言語化では、フォーム上に配置したコンポーネントについて、コンポーネントのプロパティを設定するだけで、一行もプログラムを書くことなく多言語化を行うことができました。
これは、コンポーネントがその多言語化設定を、親コントロールであるフォームに依存しているためで、フォームの多言語化設定を整えてやれば、そこに配置されるコンポーネントの多言語化について、製作者が意識しなくても、VC#が面倒を見てくれたためです。
しかし世の中、多言語化を必要としているのは何もフォームに配置されるコンポーネントばかりではありませんし、そもそもフォームを利用せずに作成される、コンソールアプリケーションのようなアプリケーションで多言語化を行いたいという需要もあるはずです。そういった場合どうするのでしょうか?
実はそのような場合にも、VC#を用いれば、Windowsフォームアプリケーション同様、手軽に多言語化を施すことができます。
ここでは、メニューを動的に書き換える例を使って、フォーム上に配置されない部分の多言語化について議論していきたいと思います。
先ほど作成したプロジェクトにボタンとMenuStripをひとつずつ配置します。このとき、MenuStripは配置するだけで、メニューを追加する必要はありません(ここでメニューを追加する場合には、先に述べた方法で多言語化することになります)。
次に、ソリューションエクスプローラからプロジェクト名を右クリックし、[追加]-[新しい項目]を選択して、このプロジェクトにアセンブリリソースを追加します(Fig.7)。
ここでは、リソースファイルの名前をMyRes.resxとしました。
リソースファイルを追加したら、文字列リソースを追加していきます。最初に追加するのは、Languageプロパティが(既定値)の場合に用いられる文字列リソースです。今回は、メニューに使われるリソースの名前としてmenustringを、値としてMyMenuを指定しました(Fig.8)。
これが追加できたら、先ほど配置したボタンのClickイベントに、プログラムを記述していきます(List.1)。記述する内容は単純で、クリックするたびにメニューを追加していくというものです。ただし、追加するメニューの文字列には、先ほど作った文字列リソースを指定するところがミソです。
private void button1_Click(object sender, EventArgs e)
{
menuStrip1.Items.Add(MyRes.menustring);
}
この状態で実行すると、ボタンを押すたびにメニューにmenustringとして指定した文字が追加されていくはずなので、確認してください。
プログラムの骨組みができたので、この動的に作成されるメニューに対して多言語化を施します。先ほど同様、ソリューションエクスプローラから新規項目としてアセンブリリソースを追加します。ここで追加するリソースの名前を、WindowsフォームアプリケーションでVC#が自動的に行ってくれたのと同様、[リソースファイル名].[言語名].[国名].resxの規則に従うように命名します。今回の例では、MyRes.ja.resxとしました(Fig.9)。
リソースを追加できたら、先ほどと同じく、文字列リソースを追加していきます。今回は、MyMenuとしたところを、マイメニューという文字列に置き換えたいので、MyRes.ja.resx内に、名前として先ほどと同様のmenustringを、値として日本語のメニューという文字列を追加しました(Fig.10)。
以上で多言語化の手順は終了です。この状態でビルドすれば、ボタンを押したときに追加されるメニューの文字列が日本語化されているはずです。
ここで注目して欲しいのは、コードを記述したのは日本語化する前であり、日本語に対応したリソースファイルを追加する前だった点です。
このことから、VC#を用いれば、海外のプログラムを多言語対応させる場合にも、手間がかからないということが分かります。
5.まとめ
このように、リソースファイルに多言語化したい部分をくくりだしてあげると、プログラム内部の変更は最小限に抑えつつ、多言語対応したプログラムを記述できるようになります。
さらには、第4節で紹介した例を応用して、自分で追加した文字列リソースファイルから、すべての多言語リソースを参照するようにしたり、フォーム上で自動生成されたリソースファイルに手を加えて多言語リソースを作成することによって、言語情報を一元管理したりすることが可能になります。
加えて、resxファイルの正体は単純なXMLファイルなので、VC#のような本格的な開発環境を持たない人も、エディタさえあれば、多言語化の作業に参加できるというメリットがあります。
もちろんこの手法はコンソールプログラムにも応用可能なので、多言語環境を見据えたコンソールプログラムを記述することも可能です。
Visual Studioの進化によって手軽に多言語化を行えるようになった昨今。ぜひあなたのプログラムも、ワールドワイドな展開を見据えて開発してください。本稿がその一助となれば幸いです。
6.参考資料
本稿を執筆するに当たり、下記Webサイトを参考にしました。




