Подтвердить что ты не робот

Упрощенный и традиционный китайский против регионов

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

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

  • значения-ж
  • значения-ж-RCN
  • значения-ж-RSG

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

  • значения-ж-RTW
  • значения-ж-RHK

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

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

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

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

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

Обновление:

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

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

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

4b9b3361

Ответ 1

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

Из коробки 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 для получения локали, например, в вашем классе Application с помощью getResources(). GetConfiguration(). Locale.

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

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

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

Ответ 2

Пожалуйста, имейте в виду, что сам Android поддерживает только

  • values-zh
  • values-zh-rCN
  • values-zh-rTW

в соответствии с документацией.

Имея это в виду, и имея в виду, что мои знания о китайце близки к нулю:

Как система знает, где получить упрощенную или традиционную китайскую строку .xml

Если ваша структура правильная, упрощенная предположительно отображается на values-zh-rCN и традиционные карты на values-zh-rTW. Для меня это ощущение назад, но, опять же, я мало знаю о китайском.

Есть ли какое-то предположение, испеченное в том, что говорит, что если я должен показать упрощенное китайское, получим его из значений-zh и получим традиционный из значений-zh-rTW?

Я бы назвал это более точным, так как метки, указанные этими языками в карте приложений настроек, относятся к некоторым конкретным регионам.

Но что, если пользователь находится в HK и устанавливает свое устройство для отображения упрощенного китайского?

Они, с надеждой, упрощают китайский. В стандартном Android нет области HK.

Или что, если эмигрант где-то в мире устанавливает свое устройство на традиционный китайский, но его регион, например. США или CA?

Я не знаю, что это будет вариант на устройстве Android. Знаете ли вы о каких-либо устройствах, предлагающих китайский вариант США вместо или в дополнение к американскому английскому языку?

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

Правильно.

Теперь вопросы, как узнать, какие из них есть?

Это будет в документации для стандартного Android. Различные устройства или ПЗУ могут предлагать другие комбинации языка/региона. Для ведения журнала вы можете использовать объект Configuration, чтобы узнать пользователя, выбранного Locale. Если вы обнаружите, что ваши пользователи используют комбинации языка/региона, помимо тех, которые вы настроили, вы можете решить, поддерживать их или нет.

Ответ 3

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

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

Добавьте файлы 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.

Ответ 4

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

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

Теперь вы можете определить традиционный или упрощенный теги 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 и заменить - в каждом теге на +