Ответ 1
Существует несколько систем для локальных идентификаторов. Многие из них похожи на первый взгляд, но не тогда, когда вы идете глубже:
Некоторые примеры (сербская-сербия с латинским Script, японско-японская с радикальной сортировкой):
- UTS-35, ICU, Mac OS X, Flash: sr-Latn-RS, ja-JP @collation = радикальный
- Новое расширение UTS-35, BCP 47 U: sr-Latn-RS, ja-JP-u-co-unihan
- Win 2000, XP: 0x81a, 0x10411
- Vista, Win 7: sr-Latn-CS, ja-JP_radical
- Java: sr_CS, ja_JP
- Java 7: sr_RS, ja_JP
- Linux: sr_RS @latin, ja_JP.utf8
Подумайте об этом, как о разных способах говорить о цветах (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).