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にて公開しています。必要に応じて、参照してください。
ディスカッション
コメント一覧
まだ、コメントがありません