Упрощенный и традиционный китайский против регионов - PullRequest
68 голосов
/ 16 ноября 2010

В процессе реализации поддержки традиционного и упрощенного китайского языка в моем приложении для Android я не понял, как это должно работать.

Итак, прочитав документацию , а также некоторые обсуждениякак это и это Я поместил упрощенный китайский в

  • values-zh
  • values-zh-rCN
  • values-zh-rSG

и традиционный китайский на

  • values-zh-rTW
  • values-zh-rHK

Это все работает нормально, но как-то не имеет смысла для меня (извините, если я недостаточно понимаю о китайском упрощенном и традиционном использовании).

Из того, что я понял из проверки диалогового окна настроек локали в эмуляторе, а также на телефоне с рутом, пользователь может изменить локаль на упрощенный китайский или традиционный китайский.

Теперь вот вопрос.Как система знает, где взять упрощенный или традиционный китайский strings.xml.Есть ли какое-то предположение, в котором говорится, что если я должен отображать упрощенный китайский, получаю его из values-zh и получаю традиционный из values-zh-rTW?

Но что, если пользователь находится в HK инастроить его устройство для отображения упрощенного китайского?Или что, если эмигрант где-то еще в мире устанавливает свое устройство на традиционный китайский, но его регион, например, США или ЦА?

Что мне нужно сделать, чтобы мои пользователи могли задать свой языковой стандарт и отобразить мое приложениес правильным языком?

Обновление:

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

Например, китаец, живущий в США, который хочет использовать традиционный китайский, может установить язык на традиционный китайский (по крайней мере, нарутированный телефон), а затем будет иметь язык zh-rTW.Он никоим образом не мог установить свою страну отдельно от США.Аналогичным образом, эмигранты любого типа не могут установить свой родной язык со страной, в которой они живут в настоящее время.

В основном это означает, что поддерживается только несколько комбинаций языка и страны.Теперь вопрос в том, как узнать, кто они?

Ответы [ 3 ]

53 голосов
/ 23 ноября 2010

Так что я думаю, что после дальнейшего расследования и с ответом Маркса я собираюсь дать ответ сам. Вот идет:

Из коробки Android имеет только две локали: zh_rCN, что упрощенный китайский, и zh_rTW, являющийся традиционным китайским языком. Как вы можете видеть из приложения «Настройки», это единственные локали:

https://android.googlesource.com/platform/packages/apps/Settings/+/master/res/

Однако любой другой создатель системы Android, например для телефона, проданного в Китае или около того, может изменить то, что они добавляют. Общий теоретически поддерживаемый набор можно найти, просмотрев список локалей, найденных в приложении icu4c:

https://android.googlesource.com/platform/external/icu4c.git/+/master/data/locales/ Как вы видите на китайском есть

  • zh.txt
  • zh_CN.txt
  • zh_HK.txt
  • zh_Hans.txt
  • zh_Hans_CN.txt
  • zh_Hans_HK.txt
  • zh_Hans_MO.txt
  • zh_Hans_SG.txt
  • zh_Hant.txt
  • zh_Hant_HK.txt
  • zh_Hant_MO.txt
  • zh_Hant_TW.txt
  • zh_MO.txt
  • zh_SG.txt
  • zh_TW.txt

Hant - это код ISO для традиционного языка и Hans для упрощенного китайского. Так что теоретически это будет означать, что мы могли бы иметь

  • упрощенный китайский в Китае, Гонконге, Макао и Сингапуре
  • традиционный китайский в Гонконге, Макао и Тайване

Однако имейте в виду, что приложение «Настройки» должно быть изменено, чтобы иметь различные варианты выбора локали. Таким образом, на данном этапе упрощенный китайский переводится как zh_rCN и традиционный zh_rTW, и вы должны быть особенными, если у вас есть такой модифицированный образ Android, который поддерживает другие локали.

В любом случае, чтобы сохранить данные, вы можете использовать класс Configuration для получения локали, например, в вашем классе приложения с помощью getResources (). getConfiguration (). locale.

Вы могли бы, например, зарегистрируйте это и отправьте данные в свою систему отслеживания (независимо от того, что вы используете), или вы можете проверить поддерживаемые и выдать исключение с настройкой локали в сообщении, которое затем появится в вашем рыночном интерфейсе ... однако это будет означать минимум один сбой вашего приложения (если вы находитесь на балу, вы можете опубликовать и обновить через несколько минут ..)

Итак, подведем итоги. Минимальная настройка - это зеркалирование того, что делается в приложении настроек (есть только zh-rCN и zh-rTW), но если вы хотите указать локали по умолчанию для Сингапура, Гонконга, Макао, предоставляющих традиционные китайский по умолчанию вы можете сделать это тоже, и это должно работать. Однако у меня нет никаких доказательств того, что такая конфигурация используется где-либо еще.

Надеюсь, это поможет.

6 голосов
/ 23 ноября 2017

Обновленный ответ

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

Добавить string.xml файлы для традиционного и упрощенного китайского

В Android Studio щелкните правой кнопкой мыши папку res и выберите Создать> Файл ресурсов Android . Введите strings для Имя файла и выберите Locale из списка.

enter image description here

Прокрутите вниз до zh для языка. Добавьте один strings файл для CN: Китай (упрощенный) и один для TW: Тайвань (традиционный). Если вы используете только один, просто выберите Любой регион .

Как я понимаю в документации , поиск сначала проверит, есть ли точное соответствие для языка и региона (например: китайский-традиционный-тайваньский). Тогда он обратится к более широким проверкам. (Эта система на Android 7.0.)

1. zh-Hant-TW   // Chinese - Traditional - Taiwan
2. zh-Hant      // Chinese - Traditional
3. zh           // Chinese

Я не совсем уверен, как все это работает, поэтому, пожалуйста, прочитайте эту и эту документацию.

Следуя этому методу в моем собственном приложении, переключение системных настроек между Традиционным и Упрощенным также изменило отображение приложения.

Преобразование между традиционным и упрощенным

Если у вас уже есть один перевод в традиционном или упрощенном виде, вы можете автоматически преобразовать текст онлайн. Начните с Google Translate, чтобы преобразовать его в другой (просто вставьте файл strings.xml). Это уже делает довольно хорошую работу. Затем сделайте это снова несколько раз, используя один из многих онлайн-конвертеров. Используйте инструмент сравнения текста или сайт ( text-compare.com хорошо), чтобы сравнить результаты конверсий. Это поможет вам отследить любые ошибки, допущенные Google.

2 голосов
/ 12 апреля 2019

https://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources

В Android 7.0 (уровень API 24) появилась поддержка языка BCP 47 теги, которые вы можете использовать для определения языка и региона Ресурсы. Языковой тег состоит из последовательности одного или нескольких подтэги, каждый из которых уточняет или сужает диапазон языка идентифицируется по общему тегу.

теперь вы можете определять традиционные или упрощенные теги BCP 47. (Чтобы использовать языковой тег BCP 47, объедините b + и двухбуквенный языковой код ISO 639-1, за которыми могут следовать дополнительные подтэги, разделенные +.)

более конкретно: -

Упрощенный :

values-b+zh (defaults to simplified) 
values-b+zh+Hans or
values-b+zh+Hans+CN (if you want to include regions)

Традиционный :

values-b+zh+Hant or
values-b+zh+TW (defaults to traditional)
values-b+zh+Hant+TW (if you want to include regions)

Вы можете посмотреть на https://tools.ietf.org/html/bcp47 для других интересных комбинаций. в том числе: -

  zh-cmn-Hans-CN (Chinese, Mandarin, Simplified script, as used in
  China)

  cmn-Hans-CN (Mandarin Chinese, Simplified script, as used in
  China)

  zh-yue-HK (Chinese, Cantonese, as used in Hong Kong SAR)

  yue-HK (Cantonese Chinese, as used in Hong Kong SAR)

  zh-nan-TW (min nan Chinese, as used in Taiwan)

  zh-hak-CN (Chinese, Hakka, China).

не забудьте добавить -b и заменить - в каждом теге на +

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...