C#でGUI Formのアプリケーションを多言語化を実装してみました。
手順は次の通りです。
Formの多言語化
下記はAddItemForm.csという
System.Windows.Forum.Form
を多言語化してみた例です。
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には日本語のプロパティを入れます。
AddItemForm.resxには英語のプロパティが入っていることを確認します。
Formの動作検証
このようにしておくと、
日本語環境なら、AddItemForm.ja.resxを参照して起動する。
日本語以外の環境なら、AddItemForm.resxを参照して起動する。
というよう動作するようです。
以下は日本語で起動した時の状態です。
正しく、AddItemForm.ja.resxを参照していることが分かります。
英語環境のテスト
一方、英語環境のテストは少し難しいです。
試しに、
を使って実行してみますが、英語モードでは起動しません。
そこで以下のように、mainメソッドで引数を取るようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
static void Main(string[] args) { if (args.Length > 0) { System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(args[0], false); } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form f1 = new MainForm(); Application.Run(f1); } |
ここで、引数をenとすれば、CurrentUICultureが英語モードとなって起動します。
C:\>(アプリケーション名) en
で実行してみます。
英語モードで起動しました。
MessageBoxなどForm以外の多言語化
FormなどのGUIアプリケーションはここまでの方法で、resxを追加して変更すれば多元化できます。
ここでは、MessageBoxなどのForm以外の部分を多言語化してみます。
プロジェクトの「追加(D)」⇒「新しい項目(W)...」を押します。
更に、アセンブリリソースファイルを追加します。
プロジェクトファイルの直下にある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);
日本語
C#についてはまだまだ、書籍でよいものはないですが、下記の本はよく出来ている方だと思います。
プログラミングの無料レッスン体験
約8,000名の受講生と80社以上の導入実績のあるプログラミングやWebデザインのオンラインマンツーマンレッスンCodecamp
<Codecampの特徴>
1 現役エンジニアによる指導
2オンラインでのマンツーマン形式の講義
3大手企業にも導入されている実践的なカリキュラム
↓無料体験レッスン実施中です。
コメント