2012-09-27 2 views
21

Есть ли набор констант или перечисление в пространстве имен системы/глобализации C#, которое содержит допустимые имена культуры?Константы для CultureInfo Имя

Я ищу что-то, так что я не должен вводить в «ан-ГБ» и т.д.

+0

http://msdn.microsoft.com/en-us/goglobal/bb896001.aspx –

ответ

9

Нет, не существует. Список доступных культур зависит от системы - вы можете даже зарегистрировать новые пользовательские культуры, используя CultureAndRegionInfoBuilder.

Итак, если вы хотите этого, вам нужно будет создать собственное перечисление или константы для подмножества общих культур, которые вас интересуют, например.:

public static class KnownCulture 
{ 
    public readonly String EnglishUS = "en-US"; 
    public readonly String EnglishGB = "en-GB"; 
    ... etc ... 
} 

или

public enum KnownLCID 
{ 
    EnglishUS = 0x409, 
    EnglishGB = 0x809, 
    ... 
} 

Это аналогично KnownColor перечисления: это не возможно создать перечисление всех возможных цветов, но это может иметь смысл иметь перечисление для часто используемых из них.

Я бы не ожидал, что Microsoft предоставит эквивалент KnownCulture перечисления из коробки, так как это довольно чувствительно (почему моя культура не включена?).

+1

«Я бы не ожидал, что Microsoft предоставит эквивалентное перечисление KnownCulture из коробки,« хорошо существуют стандарты iso, которые java locale следует за ... – NimChimpsky

22

Да, есть, GetCultures:

System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.SpecificCultures) 

Это возвращает массив CultureInfo объектов, так что если вы хотите, чтобы имена строк вы могли бы использовать что-то вроде:

IEnumerable<CultureInfo> cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures); 
string[] names = cultures.Select(c => c.Name).ToArray(); 

Обратите внимание на «Культура Типы» перечисления (по ссылке MSDN). Я полагаю, наиболее полезными были бы NeutralCultures и SpecificCultures.

  • NeutralCultures Культуры, которые связаны с языком, но не являются специфическими для страны/региона. Имена культур .NET Framework состоят из строчного двухбуквенного кода, полученного из ISO 639-1. Например: «en» (английский) - это нейтральная культура. Пользовательские культуры могут иметь любое имя, указанное пользователем, а не только двухбуквенный код. Инвариантная культура включена в массив культур, возвращаемых методом CultureInfo.GetCultures, который задает это значение.
  • Конкретные культуры Культуры, характерные для страны/региона. Названия этих культур соответствуют RFC 4646 (Windows Vista и более поздние версии). Формат - «-», где - строчный двухбуквенный код, полученный из ISO 639-1, и представляет собой прописной двухбуквенный код, полученный из ISO 3166. Например, «en-US» для английского языка (США) является специфической культуры. Пользовательские культуры могут иметь любое имя, указанное пользователем, а не только стандартное имя.
  • УстановленныеWin32Cultures Все культуры, которые установлены в операционной системе Windows. Обратите внимание, что не все культуры, поддерживаемые платформой .NET Framework, установлены в операционной системе.
  • AllCultures Все культуры, которые поставляются с платформой .NET Framework, включая нейтральные и конкретные культуры, культуры, установленные в операционной системе Windows, и пользовательские культуры, созданные пользователем.
  • UserCustomCulture Пользовательские культуры, созданные пользователем.
  • ReplacementCultures Пользовательские культуры, созданные пользователем, которые заменяют культуры, поставляемые с .NET Framework.
Смежные вопросы