Подтвердить что ты не робот

Константы для названия CultureInfo

Существует ли набор констант или перечисление в пространстве имен системы/глобализации С#, которое содержит допустимые имена культуры?

Я что-то ищу, поэтому мне не нужно вводить "en-GB" и т.д.

4b9b3361

Ответ 1

Нет, нет. Список доступных культур зависит от системы: вы можете даже зарегистрировать новые пользовательские культуры, используя 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 из коробки, так как оно довольно чувствительно (почему моя культура не включена?).

Ответ 2

Да, есть 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.