2012-02-10 9 views
7

Мне нужно получить System.Globalization.CultureInfo для разных валютных кодов.получить CultureInfo из кода валюты?

Примеры: EUR, GBP,

USD

В настоящее время я делаю следующее в распределительном заявление на основании этого 3 буквенный код валюты, очевидно, это не способ сделать это:

var ci = new System.Globalization.CultureInfo("en-US"); 

У кого-то есть чистый способ добиться тех же результатов, используя вместо этого код валюты?

+1

Какую культуру вы ожидаете получить от EUR, когда есть несколько культур с одинаковой валютой? –

+0

Многие культуры делят валюты. Как вы собираетесь это отображать? К чему, например, относится карта EUR? – tdammers

+1

Я думаю, что это отвечает на мой вопрос, я хотел бы fr-FR, поэтому мне нужно будет создать таблицу поиска для результатов, которые я хочу - спасибо Jon Skeet! – Slee

ответ

12

Короткие: Это невозможно. Например, евро будет отображаться в де-DE, fr-FR, nl-NL и других странах. Нет сопоставления из валюты в культуру, поскольку несколько стран используют валюту.

16
static IEnumerable<CultureInfo> GetCultureInfosByCurrencySymbol(string currencySymbol) 
{ 
    if (currencySymbol == null) 
    { 
     throw new ArgumentNullException("currencySymbol"); 
    } 

    return CultureInfo.GetCultures(CultureTypes.SpecificCultures) 
     .Where(x => new RegionInfo(x.LCID).ISOCurrencySymbol == currencySymbol); 
} 

Например

foreach (var culture in GetCultureInfosByCurrencySymbol("GBP")) 
{ 
    Console.WriteLine(culture.Name); 
} 

принты:

cy-GB 
gd-GB 
en-GB 
+0

Все, что мне нужно, это поиск кода ISO («GBP») и количества мест для размещения (2), поэтому этот метод работал для меня. Я просто взял первую культуру и использовал культуру.NumberFormat.CurrencyDecimalDigits для создания поиска при запуске. Это предполагает, что все культуры, использующие валюту, используют одинаковое количество мест для делений, что является достаточно хорошим предположением для моих морских свиней. –