.NETアプリの多言語化

Published by

on

今回はWindowsFormsでUIを作成したアプリケーションを多言語化対応してみます。

項目バージョン
.NET10.0
言語C#

■プロジェクトの作成

まずはWindowsFormsアプリケーションを新規作成します。

プロジェクト名、保存場所を決めます。

2025/11現在最新の.NET10を選択します。

これでいったんプロジェクト作成は完了です。

■UI(画面)の多言語化

WindowsFormsアプリのプロジェクトを新規作成した状態から画面にラベルを一つ張り付けた状態が下記のとおりです。ラベルの文字は適当に「Message」としています。

今回は英語と日本語の2つのバージョンを用意するとします。まずはFormを選択した状態でプロパティの「Language」を「(Default)」から「英語」へ変更します。

英語用の画面設定を行える状態になるので、この状態でForm上のラベルの文字(Text)を変更します。ここでは「Hello, World!」としました。デザイナのタブが「Form1.cs[デザイン – 英語]」となっていることに注目します。

この時点でソリューションエクスプローラを見ると「Form1.en.resx」という英語用のリソースファイルが追加されているのがわかります。

次に日本語用の設定を行います。Defaultから英語へ変更した際と同じ要領で日本語を選択します。

デザイナのタブが「Form1.cs[デザイン – 日本語]」となっていることを確認の上、ラベルの文字を変更します。

「Form1.ja.resx」が追加されていることを確認します。

アプリの修正はいったんこれで終了し、次にビルドを行います。

■アプリのビルド

アプリのビルド時はフォームの言語の設定は「(Default)」に戻しましたが英語や日本語のままでも問題ないと思われます。

アプリのビルドを行うと、「en」、「ja」のように言語ごとのリソース情報を保持したファイルがフォルダが分けられ出力されます。実行環境にはそのままの構成で配置するようにします。

■アプリの実行確認

アプリの実行確認の前に、稼働環境のシステムロケールを確認します。「システムロケール」は日付・通貨の表示規則を定義したりUnicode非対応のアプリケーション等でプログラムの既定の言語を定義するものです。「ja-JP」のように「言語コード-国(地域コード)」の形式で示されます。

Powershellより「Get-WinSystemLocale」で確認ができます。

Get-WinSystemLocale

この環境は日本語、日本ということが確認できました。

この環境で実行すると日本語のリソースが自動選択され、以下のように表示されました。

次にシステムロケールが「en-US」の環境でアプリを実行してみます。今回は仮想マシンでWindowsServer2025を英語環境として設定した環境で動かしてみます。

アプリケーション一式を実行環境にコピーします。(実行環境には.NET10のランタイムもしくはSDKのインストールが事前に必要となりますので注意ください)

「winform-i18n.exe」を実行すると英語のメッセージが表示されることを確認できました。

■ソース上でのリソースについて

「Form1.en.resx」、「Form1.ja.resx」のように画面×言語で設定を行いましたが、修正の際はいちいち切り替えるのが大変かと思います。

Form1.resxを編集で開くと下記のようにリソース定義名(例えばlabel1.Text)毎に言語ごとの値を一覧から設定できるので便利です。「Hello, World!」、「こんにちは、世界!」が左右に並ぶので間違いも気づきやすいですね。

■その他の確認方法

上記手順だと実行環境をそれぞれの言語ごとに用意しないといけなくなり、かなり大変です。もっと簡易的に確認する方法としてUIの表示言語をコードから変更する方法があります。CultureInfoクラスを用いて「en-US」や「ja-JP」といったカルチャ名を文字列で指定して適用させることで実現します。

この時の注意点はInitializeComponentの画面要素を初期化する前に実行する必要があることです。順序が逆だとカルチャ情報が反映されないので気を付けます。

public Form1()
{
    CultureInfo.CurrentUICulture = new CultureInfo("en-US", false);
    InitializeComponent();
}

■まとめ

今回紹介した方法ですとFormの数だけ言語を切り替えて設定を定義する形となります。もっと効率が良い方法があるかもしれませんが画面が少ない場合は特に問題なくわかりやすいですね。

コメントを残す