LoginSignup
3
4

More than 5 years have passed since last update.

Enumで定義したものを多言語対応させたい

Last updated at Posted at 2019-02-03

普通の多言語対応

多言語対応というと一般的には、リソースファイルを定義してそこから呼び出すという手段がとられると思います。

例えばProperties内のResources.resxで次のように定義したとします。

Resource.png

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());
}

これで日本語表記できるようになりました。

Combobox.png

環境

Visual Studio 2017 Community
.Net Framework 4.6
C#

参考文献

WPF アプリの国際化 (多言語対応) と、実行中の動的な言語切り替え
WPF Runtime Localization

3
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4