2010-11-15 2 views
58

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

Так от чтения documentation , а также некоторые дискуссии, как this и this я поставил упрощенный китайский в

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

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

  • значения-ж-RTW
  • значения-ж- ЖДА

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

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

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

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

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

Update:

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

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

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

+0

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

ответ

45

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

У Android есть только две локали zh_rCN, которая является упрощенной китайской и zh_rTW, которая является традиционной китайской.Как вы можете видеть из настроек приложения только эти Прилагаемые локали:

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

Однако любой другой создатель андроида системы, например, для телефона, проданного в Китае, или так может изменить то, что они добавляют. В целом теоретически поддерживаются набор можно найти, посмотрев на списке локалей, найденном в приложении 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_H ans_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, которое поддерживает другие локали.

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

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

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

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

+0

С Android 7.0, если пользователь выбирает zh-rSG, он будет искать zh-rSG, если он не может найти его, он будет искать zh-rCN или любой другой язык с упрощенным скриптом. - То же самое происходит, если пользователь выбирает sv-rFI, он будет искать, в порядке: sv-rFI, sv, sv-rSE – Liggliluff

+0

Текущий репозиторий предоставляет 'values-zh-rHK'. –

+0

значения-zh-rCN не будут компилироваться. В нем указано недопустимое имя каталога ресурсов. – Janusz

1

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

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

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

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

enter image description here

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

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

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

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

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

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

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

Смежные вопросы