C#で多言語化を行う

シェアする

  • このエントリーをはてなブックマークに追加

C#でGUI Formのアプリケーションを多言語化してみました。
手順は次の通りです。

スポンサードリンク

Formの多言語化

下記はAddItemForm.csというSystem.Windows.Forum.Formを多言語化してみた例です。

image

System.Windows.Forum.Formのプロパティ、LocalizableをTrueにして、Languageを英語や日本語に変更してみて、コンパイルしてみます。
Languageには同じ英語でも、英語(米国)、英語(英国)とかいろいろあるのですが、特に注意書きのないタダの英語を選択します。
日本語の方も、日本語と日本語(日本)と2つありますが、特に注意書きのないタダの日本を選択します。

そうこうすると元々、AddItemForm.resxというファイルしかなかったのに、AddItemForm.ja.resxとAddItemForm.en.resという2個のファイルが追加されていることが分かります。
この2個のファイルが言語のプロパティファイルです。

2個のファイルが追加されていることを確認したら、Languageは(既定値)に設定しておきます。

ここを(既定値)に設定しておかないと、後からこのFormにコントロールを追加することが出来ません。

なお(既定値)の時に、コントロール類はすべて英語化しておいた方がよいと思います。

この後、AddItemForm.en.resxについては特に中に値が入っていない状態であることを確認します。

AddItemForm.ja.resxには日本語のプロパティを入れます。

image

AddItemForm.resxには英語のプロパティが入っていることを確認します。

スポンサードリンク

Formの動作検証

このようにしておくと、

  • 日本語環境なら、AddItemForm.ja.resxを参照して起動する。
  • 日本語以外の環境なら、AddItemForm.resxを参照して起動する。

というよう動作するようです。

以下は日本語で起動した時の状態です。
正しく、AddItemForm.ja.resxを参照していることが分かります。

WS000069

スポンサードリンク

英語環境のテスト

一方、英語環境のテストは少し難しいです。
試しに、Windowsのコマンドプロンプトを英語モードに変更する を使って実行してみますが、英語モードでは起動しません。
そこで以下のように、mainメソッドで引数を取るようにします。

ここで、引数をenとすれば、CurrentUICultureが英語モードとなって起動します。

C:\>(アプリケーション名) en
で実行してみます。

英語モードで起動しました。

WS000070

MessageBoxなどForm以外の多言語化

FormなどのGUIアプリケーションはここまでの方法で、resxを追加して変更すれば多元化できます。
ここでは、MessageBoxなどのForm以外の部分を多言語化してみます。

プロジェクトの「追加(D)」⇒「新しい項目(W)...」を押します。

image

 

更に、アセンブリリソースファイルを追加します。

image

プロジェクトファイルの直下にあるPropertiesの下にResources.resxというファイルが存在するので、Resources.ja.resxというアセンブリリソースファイルを追加します。

この2個のファイルに名前と値を入力します。

例として、Resource.resxの方には、

名前

MessageBoxEmpty There is an empty field

Resource.ja.resxの方には、

名前

MessageBoxEmpty 空欄があります

と入力しました。
このように設定して、以下を実行すると、Formと同様に多言語化されていることが分かります。

DialogResult result = MessageBox.Show(Wise.Properties.Resources.MessageBoxEmpty,
"MessageBox", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);

日本語

WS000073

英語
WS000072

C#についてはまだまだ、書籍でよいものはないですが、下記の本はよく出来ている方だと思います。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です