Культуры сгруппированы в три набора: инвариантная культура, нейтральные культуры и специфические культуры. Культура en
является нейтральной культурой, а культура en-US
является специфической культурой.
GetCultureInfo
даст вам ту культуру, которую вы запросили, поэтому, если вы запросите нейтральную культуру, вы также получите нейтральную культуру, такую как en
.
CreateSpecificCulture
создаст определенную культуру из нейтральной культуры, поэтому, если вы назовете CreateSpecificCulture("en")
, возвращается CultureInfo
для культуры en-US
. Я не уверен, как нейтральные культуры сопоставляются с конкретными культурами, но в BCL или Windows должна быть какая-то таблица, которая содержит эти сопоставления и решает, что возвращается en-US
, а не en-GB
. Указание конкретной культуры в качестве аргумента для CreateSpecificCulture
даст вам конкретную CultureInfo
точно так же, как GetCultureInfo
.
Но есть некоторая удивительная особенность созданной конкретной культуры:
Если идентификатор культуры определенной культуры, возвращенный этим методом, совпадает с идентификатором культуры текущей культуры Windows, этот метод создает объект CultureInfo, который использует переопределения культуры Windows. Переопределения включают пользовательские настройки для свойств объекта DateTimeFormatInfo, возвращаемого свойством DateTimeFormat, и объекта NumberFormatInfo, возвращаемого свойством NumberFormat.
Это означает, что если конкретная культура, возвращаемая CreateSpecificCulture
, соответствует культуре, выбранной пользователем в панели управления Регион и язык в Windows, то любые пользовательские настройки для этой культуры включаются в CultureInfo
вернулся. Например. пользователь может изменить шаблон длинной даты или десятичный разделитель, используемый в числах. Еще один способ думать об этом заключается в том, что когда CreateSpecificCulture
возвращает культуру, которая соответствует имени CurrentCulture
, она фактически возвращает эту культуру, включая любые пользовательские настройки.
Насколько я могу судить, GetCultureInfo
не имеет этого свойства и всегда будет возвращать неизмененное CultureInfo
.
И чтобы проверить, действительна ли культура, я бы использовал GetCultureInfo
.