普通の多言語対応
多言語対応というと一般的には、リソースファイルを定義してそこから呼び出すという手段がとられると思います。
例えばProperties内のResources.resxで次のように定義したとします。
property.cs
// 日本語用リソースだと”4逓倍”、英語用だと”Multiple 4”
string str = Properties.Resources.Multi4
各言語ごとにリソースファイル用意しておいて、切り替えることでstrに格納される文字列を変えることができるんですね。
一方でEnumでリソースを呼び出そうにも、宣言時には呼び出せません。
enum CountType
{
Multi4,
Multi2,
Multi1
}
解決策
そこで拡張メソッドを使ってリソースファイルから各言語での表記を呼び出します。
public static string GetName(this CountType e)
{
switch (e)
{
case CountType.Multi4:
return Properties.Resources.Multi4;
case CountType.Multi2:
return Properties.Resources.Multi2;
case CountType.Multi1:
return Properties.Resources.Multi1;
default:
return "Undefined";
}
}
使う際はGetName()メソッドを呼び出します。
foreach (CountType type in Enum.GetValues(typeof(CountType)))
{
Combobox.Items.Add(type.GetName());
}
これで日本語表記できるようになりました。
環境
Visual Studio 2017 Community
.Net Framework 4.6
C#
参考文献
WPF アプリの国際化 (多言語対応) と、実行中の動的な言語切り替え
WPF Runtime Localization