C#でリソースファイル (Resource.resx) を使って動的に英語対応、多言語対応の切り替え

プログラミング
スポンサーリンク

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のコマンドプロンプトを英語モードに変更する
LinuxではLANGなどの環境変数を使ってコマンドプロンプトを英語環境に変更することができるのですが、Windowsではそのような環境変数はないようです。 今回、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#についてはまだまだ、書籍でよいものはないですが、下記の本はよく出来ている方だと思います。

 

 

 

プログラミングの無料レッスン体験

 

約8,000名の受講生と80社以上の導入実績のあるプログラミングやWebデザインのオンラインマンツーマンレッスンCodecamp

<Codecampの特徴>

1 現役エンジニアによる指導

2オンラインでのマンツーマン形式の講義

3大手企業にも導入されている実践的なカリキュラム

↓無料体験レッスン実施中です。

プログラミングのオンラインスクールCodeCamp

 

 

 

コメント

タイトルとURLをコピーしました