WinFormアプリの多言語対応

どもです。

今回は、C#/WinFormアプリの多言語対応について書きます。

1. 開発環境

毎度ですが、開発環境です。

開発/実行環境
項目 内容
OS Windows10 Pro(22H2)
CPU i7-8700
メモリ 16GB
IDE Visual Studio Community 2022
Version 17.7.6
.NET .NET Framework 4.8.1

2. 対象画面

WinFormの画面は、以下のようなシンプルなモノにします。



このフォームのタイトル(「Form1」)、及びボタンのタイトル(「button1」)の言語切替を行ってみます。

3. 設定

まず、多言語対応のために必要な設定を行います。

3.1. Localizableの設定

多言語に対応するために、一番最初に設定する内容です。フォームのデザイナの「プロパティ」を表示し、「Localizable」設定を「True」に設定します(デフォルトは「False」)。



3.2. 日本語の内容の設定

次に、言語を選択します。まずは、「日本語」を選択します。



ここまで設定できたら、まずFormのタイトルを設定します。これは、Form1の「Text」プロパティで設定します。お試しとして多言語対応おためしと設定してみます。すると、ソリューションエクスプローラの「Form1」の下に、「Form1.ja.resx」というファイルが追加されます。



このファイルをダブルクリックして表示すると、たった今設定した文字列が確認できます。



同じ要領で、ボタンの名前も設定してみます。今回は「ボタン1(日本語)」を設定します。

これらの設定を行ったアプリケーションを実行すると、以下のようになります。



設定した通りの内容が表示されます。

3.3. 英語の場合

英語の設定を行います。実施手順は、日本語の場合と同じです。「Language」プロパティに設定する値を「英語」を設定します。ここで設定を切り替えると、日本語で設定した内容がリセットされます。

FormとButtonのタイトルを設定すると、ソリューションエクスプローラに、「Form1.en.resx」が生成されています。このファイルの中に、英語の内容が設定されています。



ところが、この状態で実行してみても、表示は英語にならず、日本語のままです。

3.4. 言語の設定

言語毎の設定を行っても、実際にアプリケーションの言語設定を変更しなければ、表示される言語は切り換わりません。アプリケーションの言語設定は、以下のようにして設定します(言語に「日本語」を設定する場合)。

CultureInfo culture = CultureInfo.CreateSpecificCulture("ja");
Thread.CurrentThread.CurrentUICulture = culture;

表示を英語に切り替えたい場合には、上述のコードで「ja」となっている箇所を「en」に設定します。

このコードを、プログラムの起動時に実行するようにします。そうすることで、実行中は、指定した言語に対応した内容が、各コントロールに表示されるようになります。

4. まとめ

今回は、C#/WinFormアプリでの多言語対応について書きました。

WinFormの各コントロールに表示する文字列については、当然言語ごとに設定する必要があります。しかし、プロパティを少し設定し、かつ各言語ごとに文字列を作成すればよい、ということになります。とても簡単です。

ところで、多言語で表示したい内容には、メッセージボックスの内容があったりします。そういった内容については、別のエントリで書こうと思います。

ではっ!

ex. 公開しています

今回のエントリの中で紹介したコードの全容は、GitHubにて公開しています。必要に応じて、参照してください。