C#Windowsフォームプログラミング備忘録

C# 多言語対応

C#

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プロパティをイタリア語で入力する。)

コメント