Когда использовать
en_GB
и en-GB
?
В чем разница?
Есть ли имя ISO для этой комбинации ISO 639-1
(язык) и ISO 3166
(страна)?Когда использовать
en_GB
и en-GB
?
В чем разница?
Есть ли имя ISO для этой комбинации ISO 639-1
(язык) и ISO 3166
(страна)?Существует несколько систем для локальных идентификаторов. Многие из них похожи на первый взгляд, но не тогда, когда вы идете глубже:
Некоторые примеры (сербская-сербия с латинским Script, японско-японская с радикальной сортировкой):
Подумайте об этом, как о разных способах говорить о цветах (RGB, CMYB, HSV, Pantone и т.д.).
Так что -
vs. _
не имеет смысла, если вы не укажете, какая среда вы используете. Используйте -
, и Java это не поймет, используйте _
, и Windows этого не поймет.
ICU (и системы, построенные поверх него) принимают как -
, так и _
, но создают стиль _
.
Нет ISO, который охватывает комбинацию языка-страны. Но есть ИСО, которые охватывают различные части (язык, страна, script). Точная версия ISO также зависит от системы, используемой для локальных идентификаторов.
В общем, вы должны принимать как _
, так и -
, и генерировать только один ( "быть либеральным в том, что вы принимаете и строгим в том, что вы испускаете" ) (например, ICU).
Если вы общаетесь с системами, использующими идентификатор языкового стандарта другого типа, вам нужно будет отобразить карту в/из вашей системы. Это заставит вас использовать _
или -
.
Некоторые из отображений будут потеряны (нет возможности указывать альтернативные календари в Windows, Linux или альтернативной сортировке или скриптах в Java старше 7 и т.д.), А круговое отключение может быть невозможно (несколько похожее на преобразования RGB- CMYK).
Дополнение: все зависит не только между системами, но они могут меняться во времени. Например, Java 7 добавила поддержку sr_RS и для скриптов, Windows продолжает добавлять поддержку для большего количества локалей, создавать новые страны (разделение Судана, Россия, Сербия) или исчезать (Восточная Германия, США, Югославия) и т.д.
Для внутреннего представления вы можете выбрать самый мощный, который может представлять все, и это UTS-35/BCP 47 (также используется CLDR и ICU).
Локаль представляет собой комбинацию языка и региона (обычно это страна).
Сепаратор ca будет _
или -
, но рекомендуемый - тире.
Вероятно, вы ищете стандарт BCP-47, который использует коды языков из ISO 639-1 и регионы региона/страны из ISO 3166-1 alpha-2 (обычно пишутся в верхнем регистре).
Здесь вы можете найти более подробную информацию о них http://blog.i18n.ro/simplified-locale-codes/
Он распространяется для Интернета в RFC 3066 и обозначает "en-GB", а не "en_GB"
Это зависит от технологии. Например, в Java Locale.UK предоставит вам код en_GB (если вас достаточно беспокоит вызов toString()
). Это то, что вы проходили бы между модулями (если только вы не передаете конкретный тип), и это то, что вы напишете в файлах конфигурации (т.е. Faces-context.xml).
В .Net, с другой стороны, вы, безусловно, будете использовать en-GB.
en-GB определенно более распространена, и в большинстве случаев это форма, которую вы должны использовать.
Разные очевидны: разделитель:) В противном случае нет разницы (по смыслу конкретная технология может налагать некоторые ограничения на идентификатор Locale).
Нет нормативного документа ISO, который обрабатывает сочетание языков и стран, по моим знаниям. В Интернационализации программного обеспечения он является частью модели Locale.