SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

C#による多言語対応アプリケーション開発のコツ

Visual C# 2008で多言語対応を行う

4.Windows Form Application の管理下にない文字列の多言語化

 前の節では、Windowsフォームアプリケーションでの多言語化について議論しました。

 Windowsフォームアプリケーションにおける多言語化では、フォーム上に配置したコンポーネントについて、コンポーネントのプロパティを設定するだけで、一行もプログラムを書くことなく多言語化を行うことができました。

 これは、コンポーネントがその多言語化設定を、親コントロールであるフォームに依存しているためで、フォームの多言語化設定を整えてやれば、そこに配置されるコンポーネントの多言語化について、製作者が意識しなくても、VC#が面倒を見てくれたためです。

 しかし世の中、多言語化を必要としているのは何もフォームに配置されるコンポーネントばかりではありませんし、そもそもフォームを利用せずに作成される、コンソールアプリケーションのようなアプリケーションで多言語化を行いたいという需要もあるはずです。そういった場合どうするのでしょうか?

 実はそのような場合にも、VC#を用いれば、Windowsフォームアプリケーション同様、手軽に多言語化を施すことができます。

 ここでは、メニューを動的に書き換える例を使って、フォーム上に配置されない部分の多言語化について議論していきたいと思います。

先ほど作成したプロジェクトにボタンとMenuStripをひとつずつ配置します。このとき、MenuStripは配置するだけで、メニューを追加する必要はありません(ここでメニューを追加する場合には、先に述べた方法で多言語化することになります)。

 次に、ソリューションエクスプローラからプロジェクト名を右クリックし、[追加]-[新しい項目]を選択して、このプロジェクトにアセンブリリソースを追加します(Fig.7)。

Fig.7 アセンブリリソースの追加

 ここでは、リソースファイルの名前をMyRes.resxとしました。

 リソースファイルを追加したら、文字列リソースを追加していきます。最初に追加するのは、Languageプロパティが(既定値)の場合に用いられる文字列リソースです。今回は、メニューに使われるリソースの名前としてmenustringを、値としてMyMenuを指定しました(Fig.8)。

Fig.8 リソースに文字列を書きこむ

 これが追加できたら、先ほど配置したボタンのClickイベントに、プログラムを記述していきます(List.1)。記述する内容は単純で、クリックするたびにメニューを追加していくというものです。ただし、追加するメニューの文字列には、先ほど作った文字列リソースを指定するところがミソです。

List.1:ボタンのClickイベントに記述するソース
private void button1_Click(object sender, EventArgs e)
{
    menuStrip1.Items.Add(MyRes.menustring);
}

 この状態で実行すると、ボタンを押すたびにメニューにmenustringとして指定した文字が追加されていくはずなので、確認してください。

 プログラムの骨組みができたので、この動的に作成されるメニューに対して多言語化を施します。先ほど同様、ソリューションエクスプローラから新規項目としてアセンブリリソースを追加します。ここで追加するリソースの名前を、WindowsフォームアプリケーションでVC#が自動的に行ってくれたのと同様、[リソースファイル名].[言語名].[国名].resxの規則に従うように命名します。今回の例では、MyRes.ja.resxとしました(Fig.9)。

Fig.9 決まった名前のアセンブリリソースを追加

 リソースを追加できたら、先ほどと同じく、文字列リソースを追加していきます。今回は、MyMenuとしたところを、マイメニューという文字列に置き換えたいので、MyRes.ja.resx内に、名前として先ほどと同様のmenustringを、値として日本語のメニューという文字列を追加しました(Fig.10)。

Fig.10 多言語化された文字列を、リソースに追加する

 以上で多言語化の手順は終了です。この状態でビルドすれば、ボタンを押したときに追加されるメニューの文字列が日本語化されているはずです。

 ここで注目して欲しいのは、コードを記述したのは日本語化する前であり、日本語に対応したリソースファイルを追加する前だった点です。

 このことから、VC#を用いれば、海外のプログラムを多言語対応させる場合にも、手間がかからないということが分かります。

5.まとめ

 このように、リソースファイルに多言語化したい部分をくくりだしてあげると、プログラム内部の変更は最小限に抑えつつ、多言語対応したプログラムを記述できるようになります。

 さらには、第4節で紹介した例を応用して、自分で追加した文字列リソースファイルから、すべての多言語リソースを参照するようにしたり、フォーム上で自動生成されたリソースファイルに手を加えて多言語リソースを作成することによって、言語情報を一元管理したりすることが可能になります。

 加えて、resxファイルの正体は単純なXMLファイルなので、VC#のような本格的な開発環境を持たない人も、エディタさえあれば、多言語化の作業に参加できるというメリットがあります。

 もちろんこの手法はコンソールプログラムにも応用可能なので、多言語環境を見据えたコンソールプログラムを記述することも可能です。

 Visual Studioの進化によって手軽に多言語化を行えるようになった昨今。ぜひあなたのプログラムも、ワールドワイドな展開を見据えて開発してください。本稿がその一助となれば幸いです。

6.参考資料

 本稿を執筆するに当たり、下記Webサイトを参考にしました。

  1. .NET Tips Windowsフォームを多言語対応にするには?

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

太田 晃(オオタ アキラ)

 ブログ(http://repse.blogspot.com/)では、coLinux上にMinGWを用いてクロスコンパイル環境を構築し、そのうえでSDLやOpenGLを使ってWindows向けのプログラムを書くとか、海外のソフトウェアを(勝手に)日本語化するとか、Windowsのインデックスサービ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3288 2008/12/19 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー