Windowsフォームアプリケーション(.NET6)での多言語対応についての備忘録。
プロジェクトを作成してデザイナー画面のフォームを選択し以下の設定を行う。
①Languageプロパティは(Default)、LocalizableプロパティはTrueにする。
②ラベル(label1)とボタン(button1)を貼り付ける。
②リソースファイル(Form1.resx)を開いて以下の通り設定する。

フォームは以下のように表示される。

次にイタリア語に対応するため以下の通り設定を行う。
④デザイナー画面でフォームを選択し、Languageプロパティをイタリア語 (イタリア)、LocalizableプロパティをTrueにする。
⑤リソースファイル(Form1.it-IT.resx)が作成されるので、これを開いて以下の通り設定する。

フォームを開き直すと以下のように表示される。

⑥ソースコードを記述する。
using System;
using System.Globalization;
using System.Threading;
namespace MultiLang
{
public partial class Form1 : Form
{
private const int CLangJapanese = 0;
private const int CLangItaly = 1;
public Form1()
{
//int lang = CLangJapanese;
int lang = CLangItaly;
if (lang == CLangJapanese)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("ja-JP");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("ja-JP");
}
else
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("it-IT");
}
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(DateTime.Today.ToLongDateString());
throw new NotImplementedException();
}
}
ここでは簡単のため、lang変数に直接定数を代入しているが、実際にはデータベースやファイルから取得することになるだろう。
⑥lang変数をイタリア語にして実行すると以下のフォームが開く。

ボタンを押すと日付を表示した後、例外をスルーするようにしてみた。以下の通りイタリア語で表示されるのがわかる。


⑦lang変数を日本語にして実行すると以下のフォームが開く。

ボタンを押すと、日本語で表示されることがわかる。


なお、デザイナー画面を使ってLanguageプロパティに従ってコントロールのTextプロパティ等を設定すれば、リソースファイルを直接触らなくても良いようだ。(Languageプロパティがイタリア語ならコントロールのTextプロパティをイタリア語で入力する。)
コメント