WinFormアプリの多言語対応(2)

どもです。

前回の投稿では、#/WinFormのアプリの多言語対応について書きました。この投稿では、画面コントロール(ボタンやFormのタイトル、など)を対象としていました。これは、各コントロールのプロパティから設定する項目です。

今回の投稿では、メッセージボックスの表示内容など、コードから表示する内容を設定する場合での多言語対応について書きます。

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. 対象画面

今回の対象は、前回の投稿で紹介した画面のボタンを押した際に表示されるメッセージボックスとします。



3. 設定

まず、メッセージボックスの多言語対応のために必要な設定を行います。なお、前提として、前回の投稿で行った各コントロールに対する多言語対応は実施済みであるとします。

3.1. Resource.resx の設定

まず、Resource.resxファイルへリソースを追加します。今回は、メッセージボックスに表示する本文(メッセージ)とタイトルの内容を追加します。追加手順は、以下の通りです。

  1. Propertiesの左の三角矢印をクリックして、ツリーを展開する。
  2. Resources.resxファイルをクリックして、内容を表示する。
  3. 以下のように、「名前」と「値」を設定する。


3.2. 日本語対応のメッセージの追加

次に、日本語に対応したリソースファイルを追加します。この時、追加するファイルのファイル名は、Resources.ja.resxとします。必ず言語タグを含む必要があります。ファイルの追加は、以下の通りです。

  1. プロジェクトを右クリックして、[追加]-[新しい項目]を選択する。
  2. [リソースファイル]を選択し、[名前(N):]に「Resources.ja.resx」を設定する。
  3. [追加(A)]ボタンをクリックする。

リソースファイルが追加されたら、次に対応する文字列を設定します。設定する内容は、ココで示した内容と同じです。以上で、日本語のメッセージの追加は完了です。

3.3. 英語対応のメッセージの追加

次に、英語のリソースファイルを追加します。基本的な手順は、日本語の場合と同じです。違いは、以下の通りです。

  • リソースファイル名は、「Resources.en.resx
  • リソースの「名前」に対する値が「英語」である

具体的には、リソースファイルの内容は、以下のようになります。



なお、この英訳が適切か否かは責任持ちませんので、ご了承ください。

4. 実装

追加したリソース、文字列を使用する方法です。追加したリソースは、以下のような構文で使用します。

string resourceValue = Properties.Resources.RESOURCE_NAME;

今回の例では、例えばID_MESSAGE_BOX_MESSAGEに対応した文字列を取得するためのコードは、以下のようになります。

string message = Properties.Resources.ID_MESSAGE_BOX_MESSAGE;

これを踏まえ、画面上のボタンをクリックした際に、リソースファイルで設定したメッセージおよびタイトルをメッセージボックスに表示するコードは、以下のようになります。

public partial class Form1 : Form
{
	private void pushMeButton_Click(object sender, EventArgs e)
	{
		string message = Properties.Resources.ID_MESSAGE_BOX_MESSAGE;
		string title = Properties.Resources.ID_MESSAGE_BOX_TITLE;

		MessageBox.Show(message, title, MessageBoxButtons.OK);
	}
}

以上です。

5. 実行

このコードの実行結果は、下図の通りです。まずは日本語の場合。



英語の場合は、下図です。



6. まとめ

今回は、メッセージボックスなど、画面に表示する文字列をコードで指定する場合の多言語対応について書きました。基本的なやり方は、フォームのコントロールに対する多言語対応の場合と同じでした。違うのは、文字列を使用するための実装が必要なことくらいです。とても簡単です。

今回の内容が、誰かの助けになれば幸いです。

ではっ!

ex. 公開しています

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