Когда использовать CultureInfo.GetCultureInfo (String) или CultureInfo.CreateSpecificCulture (String) - PullRequest
37 голосов
/ 12 июня 2009

Когда мне следует вызывать CultureInfo. CreateSpecificCulture (String), а не CultureInfo. GetCultureInfo (String). Документация MSDN не очень понятна.

Также есть ли способ удешевить проверку, является ли название культуры действительным?

Я думаю если вы передадите «en» вместо «en-GB» в CultureInfo.CreateSpecificCulture (String), вы получите ошибку, но CultureInfo.GetCultureInfo (String) не против Например. CultureInfo.GetCultureInfo (String) может справиться, если вы только передадите язык. Однако мне все еще неясно по этому поводу.

Ответы [ 2 ]

25 голосов
/ 14 ноября 2013

Культуры сгруппированы в три набора: инвариантная культура, нейтральные культуры и специфические культуры. Культура 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.

14 голосов
/ 13 июня 2009

Это немного зависит от того, для чего вам нужна культура. Короткие имена («en», «fr» и т. Д.) Используются для нейтральных культур, достаточных для управления ресурсами конкретного языка. Но для числового форматирования и форматирования даты вам нужна особая культура, например "en-GB".

И CultureInfo.CreateSpecificCulture("en"); отлично работает здесь. Он специально предназначен для получения «особой» культуры для нейтральной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...