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

Когда использовать CultureInfo.GetCultureInfo(String) или CultureInfo.CreateSpecificCulture(String)

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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