【Windows Forms】C#で多言語化対応をしてみる

csharp C#

この記事の内容

この記事では、C# Windows Formsにて多言語化対応する方法を記載します。

.NET Frameworkは4.6.1、Visual Studio 2019にて確認しています。

多言語化の概要

多言語化で重要になってくる概念がCultureです。Cultureは文化圏を表し、日本や、英語(イギリス)などがあげられます。

このCultureごとに各Formのラベルなどの表記を設定すると、各Cultureごとにリソースファイルが作成されます。

各Cultureごとにリソースファイルを生成したのちビルドすることで、サテライトアセンブリという単一のCultureごとの情報を保持するdllが作成されます。これにより、現在のCultureにより表示内容を切り替えることができます。図にすると以下のようなイメージです。

実行時のCulture設定は、Cultureは System.Globalization.CultureInfo オブジェクトとして表現されます。
スレッドのCultureは, System.Threading.Thread.CurrentThread.CurrentCulture に保持され、UI Cultureは, System.Threading.Thread.CurrentThread.CurrentUICulture に保持されます。

多言語化サンプルアプリ作成手順

今回はサンプルで以下のような、LabelとTextBox、Buttonを配置したFormを作成します。

まずは、日本語設定の場合の表示設定をしていくため、FormのLanguageプロパティを日本語に設定します。

この状態で、以下の様に日本語で各コントロールの設定をします。

こうすることで、日本語設定のリソースにラベルの名称やボタンの名称、また位置なども日本語設定に紐づくようになります。

詳しくは後ほど説明します。

次は英語の設定をしていきます。FormのLanguageを英語に設定します。

この状態で以下の様に英語版の設定をします。ラベルの位置やテキストボックスの位置も変更してレイアウト調整します。この調整も言語設定に紐づけることができます。

編集完了後は、Languageを(規定値)に戻します。

コードは以下の様に設定します。まずは、日本語(ja)をThread.CurrentThread.CurrentUICultureに設定して、日本語設定で動作させてみます。

動作させると、以下の様に日本語のリソースで表示されます。

次は、英語(en)で動作させるように、以下の設定で動作させてみます。

英語で動作させると、英語のリソースをで表示することができます。

リソースファイルについて

上記で作成したアプリのリソースファイルを見ていきます。

Form1.en.resxというのが英語に紐づいたリソースとして作成されます。

(日本語版も同様にForm1.ja.resxファイルが作成されます)

内容は以下の通りです。

ButtonやLabelの位置情報はその他の部分に保持されています。

ビルドしたモジュールは以下の様に作成されます。

ここで重要なのは、サテライト・アセンブリと呼ばれる、単一のCultureに紐づくアセンブリが作成されるところです。

サテライト・アセンブリは、enやjaフォルダ以下に作成されます。

サテライト・アセンブリ(en)

サテライト・アセンブリ(ja)

以上が多言語化対応する方法になります。

コメント