Если у вас есть приложение, локализованное в pt-br и pt-pt, какой язык вы должны выбрать, если система сообщает только код "pt"? - PullRequest
11 голосов
/ 23 марта 2010

Если у вас есть приложение, локализованное в pt-br и pt-pt, какой язык следует выбрать, если система сообщает только код pt (общий португальский)?

Этот вопрос не зависит от характера приложения, настольного компьютера, мобильного устройства или браузера. Давайте предположим, что вы не можете получить информацию о регионе из другого источника, и вам нужно выбрать один язык в качестве языка по умолчанию.

Этот вопрос относится и к другим случаям, включая:

  • pt-pt и pt-br
  • en-us и en-gb
  • fr-fr и fr-CA
  • zh-cn, zh-tw, .... - фактически в этом случае я знаю, что zh может использоваться в качестве преобладающего языка для упрощенного китайского , где полный код zh-hans. Для традиционного китайского языка с кодами типа zh-tw, zh-hant-tw, zh-hk, zh-mo правильный код (канонический) должен быть zh-hant.

Q1 : Как определить преобладающие языки для указанного метаязыка?

Мне нужно решение, которое будет включать как минимум португальский, английский и французский языки.

Q2 : если система указала упрощенный китайский (КНР) (zh-cn) в качестве предпочтительного языка пользователя, и у меня есть перевод только для английского и традиционного китайского (en,zh-tw) что выбрать один из двух вариантов: en или zh-tw?

Ответы [ 2 ]

10 голосов
/ 23 марта 2010

В общем случае вы должны отделить проблему «угадать отсутствующие параметры» от проблемы «сопоставления списка локалей, который я хочу, со списком локалей, которые у меня есть». Они разные.

Угадай недостающие части

Это все сложные области, и даже (потенциально) политически заряженные.

Но, за очень немногими исключениями, правило состоит в том, чтобы выбрать «оригинальную страну» языка. Исключения в основном основаны на населении. Таким образом, FR-FR для FR, ES-ES и т. Д Некоторые исключения: pt-BR вместо pt-PT, en-US вместо en-GB.

Также общепринятым (и требуется согласно китайским стандартам), что zh отображается на zh-CN.

Возможно, вам также придется посмотреть на страну, чтобы определить сценарий, или наоборот. Например, az => az-AZ, но az-Arab => az-Arab-IR и az_IR => az_Arab_IR

Соответствие «хочу» и «иметь»

Это включает в себя сопоставление списка желаний и списка имущих языков. Работа со списками усложняет задачу. И результат также должен быть отсортирован по-умному, если это возможно. (например, если want = [ fr ro ] и have = [ en fr_CA fr_FR ro_RO ], то вы, вероятно, хотите [ fr_FR fr_CA ro_RO ] в качестве результата.

Не должно быть совпадений между языками с разными сценариями. Таким образом, zh-TW не должен отступать от zh-CN, а mn-Mong не должен отступать от mn-Cyrl. Сложные области: sr-Cyrl не должен отступать от sr-Latn в теории, но это могут понять пользователи. ro-Cyrl может вернуться к ro-Latn, но не наоборот.

Некоторые ссылки

  • RFC 4647 имеет дело с резервным языком (но в этом случае он не очень полезен, поскольку он следует правилу «вырезать из правого»).
  • ICU 4.2 и новее (черновик в 4.0, я думаю) имеет uloc_addLikelySubtagsuloc_minimizeSubtags) в uloc.h. Это реализует http://www.unicode.org/reports/tr35/#Likely_Subtags
  • Также в ICU uloc.h есть uloc_acceptLanguageFromHTTP и uloc_acceptLanguage, которые имеют дело с хотением против. Но они бесполезны, поскольку они принимают UEnumeration * в качестве входных данных, и нет никакого открытого API для создания UEnumeration.
  • Существует некоторая работа по сопоставлению языков, выходящая за рамки простого RFC 4647. См. http://cldr.unicode.org/development/design-proposals/languagedistance
  • Соответствие локали в ActionScript в http://code.google.com/p/as3localelib/
  • API в новом пространстве имен Flash Player 10.1 flash.globalization выполняют как поиск тегов, так и сопоставление языков (http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/globalization/package-detail.html).. Он работает на TR-35 и может выходить за пределы @ и учитывать операцию. Например, если have = [ ja ja@collation=radical ja@calendar=japanese ] и want = [ ja@calendar=japanese;collation=radical ], тогда наилучшее совпадение зависит от желаемой операции. Для форматирования даты лучше подходит ja @ calendar = japanese, но для сопоставления вы хотите ja @ collation = радикал
4 голосов
/ 23 марта 2010

Ожидаете ли вы иметь больше пользователей в Португалии или в Бразилии? Выберите соответственно.

Для вашего общего решения, вы узнаете, прочитав по Ethnologue .

...