Когда использовать 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) может справиться, если вы только передаете язык. Однако я до сих пор не понимаю.
Ответы
Ответ 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
.