Спрощена та традиційна китайська проти регіонів


74

У процесі впровадження традиційної та спрощеної китайської підтримки в моєму додатку для Android я заплутався у тому, як це має працювати.

Так от читання документації , а також деякі дискусії , як це і цього я клав спрощеним китайців в

  • значення-ж
  • значення-zh-rCN
  • значення-ж-рСГ

і традиційні китайські в

  • значення-zh-rTW
  • значення-ж-рХК

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

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

Тепер ось питання. Як система знає, де взяти спрощений або традиційний китайський strings.xml. Чи є в цьому певне припущення, яке говорить, якщо я повинен відображати спрощений китайський, отримати його з values-zh і отримати традиційний з values-zh-rTW?

Але що, якщо користувач знаходиться в Гонконгі і налаштує свій пристрій на відображення спрощеної китайської мови? Або що, якщо емігрант десь у світі налаштовує свій пристрій на традиційну китайську мову, але його регіон, наприклад, США чи Каліфорнія?

Що я повинен зробити, щоб дозволити моїм користувачам встановлювати свою локаль і відображати мою програму з правильною мовою?

Оновлення:

З подальшого розслідування я вважаю, що користувач телефону Android не може встановити країну окремо від мови. Вони можуть встановити лише те, що називається мовою в інтерфейсі. Він складається з мови та країни, але список обмежений, тому багато комбінацій неможливі.

Наприклад, китаець, який мешкає в США і хоче використовувати традиційну китайську мову, може встановити мову традиційною китайською (принаймні на корінному телефоні), а потім матиме мову zh-rTW. Він жодним чином не міг визначити свою країну окремо США. Подібним чином будь-який вид емігрантів не може встановити рідну мову з країною, в якій зараз живе.

В основному це означає, що підтримується лише купа поєднань мови та країни. Тепер питання полягає в тому, як дізнатися, які вони?


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

Відповіді:


59

Тому я думаю, що після подальшого розслідування та відповіді Маркса я збираюся дати відповідь сам. Ось іде:

Нестандартно 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), але якщо ви хочете вказати локалі за замовчуванням для Сінгапуру, Гонконгу, Макао, постачаючи традиційну китайську мову за замовчуванням Ви можете зробити це теж, і це повинно спрацювати. Однак я не маю доказів того, що така конфігурація використовується де-небудь ..

Сподіваюся, що це допомагає.


Починаючи з Android 7.0, якщо користувач вибере zh-rSG, він буде шукати zh-rSG, а якщо не зможе його знайти, то буде шукати zh-rCN або будь-яку іншу локаль із спрощеним сценарієм. - Те ж саме, якщо користувач вибрав sv-rFI, він буде шукати по порядку: sv-rFI, sv, sv-rSE
Liggliluff

Поточний репозиторій дійсно надає values-zh-rHK.
Koala Yeung

1
values-zh-rCN не компілюється. Там написано недійсне ім’я каталогу ресурсів.
Януш

10

Оновлена ​​відповідь

Питання та попередні відповіді досить давні. Важко сказати, наскільки вони все ще правильні. Ця відповідь призначена для інших людей, які приїжджають сюди і просто хочуть підтримати традиційну та спрощену китайську у своєму додатку, але не надто стурбовані деталями місцевості.

Додайте string.xmlфайли для традиційної та спрощеної китайської мов

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

введіть тут опис зображення

Прокрутіть вниз до 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.


6

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 і замінити - у кожному тегу на +


1
Це повинна бути правильна відповідь, особливо коли ви хочете надати лише 2 переклади: Ганс та Хант для всіх регіонів. Ганса використовують у материковому Китаї та Сінгапурі, а Ханта - у Гонконгу та Тайвані. І якщо ви хочете надати аудіовміст через текст на мовлення, друга частина цієї відповіді може бути непоганою.
ZZZ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.