Получить NativeEnglishName из символа валюты iso без зависимости от текущей культуры вошедшего в систему пользователя - PullRequest
3 голосов
/ 18 марта 2010

у меня есть валютный код "EUR". Это свойство также можно найти в

RegionInfo class => ri.ISOCurrencySymbol. Но класс RegionInfo зависит от текущего вошедшего в систему пользователя.

Я хочу получить NativeEnglishName, например, "Евро", даже если пользователь из en-De, en-Us, cn-CN и т. Д. *

Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 18 марта 2010

Вы можете сделать:

string currencyName = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
                   .Where(c => new RegionInfo(c.LCID).ISOCurrencySymbol == "EUR")
                   .Select(c => new RegionInfo(c.LCID).CurrencyEnglishName)
                   .FirstOrDefault();

, который вернет "Евро".

Обратите внимание, однако, что это получает first RegionInfo, который соответствует предоставленному символу валюты - на самом деле не проблема в этом конкретном случае, но может быть, если вы используете имя в национальной валюте, потому что первая страна использование валюты дает совпадение, которое может иметь другое региональное имя для валюты, чем другая страна, использующая ту же валюту (хотя, вероятно, не очень вероятно).

2 голосов
/ 18 марта 2010

Неловкая проблема, нет простого способа перебрать доступный RegionInfo. Вам нужно будет перебрать все доступные конкретные культуры и создать их RegionInfo для сравнения. Этот код выполняет свою работу:

public static string GetEnglishCurrencyName(string iso) {
  foreach (var c in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) {
    var reg = new RegionInfo(c.LCID);
    if (string.Compare(iso, reg.ISOCurrencySymbol, true) == 0)
      return reg.CurrencyEnglishName;
  }
  throw new ArgumentException();
}

Остерегайтесь, что это создает много мусора. Если вы делаете это часто, не забудьте сначала кэшировать информацию о регионе в Словаре <>.

0 голосов
/ 10 августа 2011

Я также замечаю, что "CurrencyEnglishName" также не является именем стандарта ISO. например RegionInfo, где ISOCurrencySymbol = "GBP" возвращает "британский фунт стерлингов"

Тем не менее, настоящее стандартное название ISO - это просто "фунт стерлингов".

Я думаю, что лучший способ - это добавить значения ISO в таблицу БД (или, если хотите, в виде файла / раздела конфигурации) и прочитать оттуда.

...