Существует ли набор констант или перечисление в пространстве имен системы/глобализации С#, которое содержит допустимые имена культуры?
Я что-то ищу, поэтому мне не нужно вводить "en-GB" и т.д.
Существует ли набор констант или перечисление в пространстве имен системы/глобализации С#, которое содержит допустимые имена культуры?
Я что-то ищу, поэтому мне не нужно вводить "en-GB" и т.д.
Нет, нет. Список доступных культур зависит от системы: вы можете даже зарегистрировать новые пользовательские культуры, используя 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
из коробки, так как оно довольно чувствительно (почему моя культура не включена?).
Да, есть 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" для английского языка (США) является специфической культуры. Пользовательские культуры могут иметь любое пользовательское имя, а не только стандартное имя.
- InstalledWin32Cultures. Все культуры, которые установлены в операционной системе Windows. Обратите внимание, что не все культуры, поддерживаемые платформой .NET Framework, установлены в операционной системе.
- AllCultures Все культуры, поставляемые с .NET Framework, включая нейтральные и конкретные культуры, культуры, установленные в операционной системе Windows, и пользовательские культуры, созданные пользователем.
- UserCustomCulture Пользовательские культуры, созданные пользователем.
- ReplacementCultures Пользовательские культуры, созданные пользователем, которые заменяют культуры, поставляемые с .NET Framework.