Vereinfachtes und traditionelles Chinesisch gegen Regionen

74

Bei der Implementierung der traditionellen und vereinfachten chinesischen Unterstützung in meiner Android-Anwendung war ich verwirrt darüber, wie dies funktionieren soll.

Nach dem Lesen der Dokumentation sowie einiger Diskussionen wie dieser und jener habe ich vereinfachtes Chinesisch eingeführt

  • Werte-zh
  • Werte-zh-rCN
  • Werte-zh-rSG

und traditionelle chinesische in

  • Werte-zh-rTW
  • Werte-zh-rHK

Das alles funktioniert gut, macht aber irgendwie keinen Sinn für mich (sorry, wenn ich nicht genug über die vereinfachte chinesische Sprache im Vergleich zur traditionellen Verwendung verstehe).

Soweit ich weiß, kann ein Benutzer das Gebietsschema in vereinfachtes Chinesisch oder traditionelles Chinesisch ändern, wenn er das Dialogfeld zur Einstellung des Gebietsschemas im Emulator sowie auf einem gerooteten Telefon überprüft.

Hier ist die Frage. Woher weiß das System, woher die vereinfachten oder traditionellen chinesischen Zeichenfolgen.xml stammen? Gibt es eine Art Annahme, die besagt, wenn ich vereinfachtes Chinesisch anzeigen soll, bekomme ich es von Werten-zh und traditionell von Werten-zh-rTW?

Aber was ist, wenn sich ein Benutzer in HK befindet und sein Gerät so einrichtet, dass vereinfachtes Chinesisch angezeigt wird? Oder was ist, wenn ein Auswanderer irgendwo anders auf der Welt sein Gerät auf traditionelles Chinesisch setzt, seine Region jedoch z. B. USA oder CA ist?

Was muss ich tun, damit meine Benutzer ihr Gebietsschema festlegen und meine App mit dem richtigen Gebietsschema angezeigt werden kann?

Aktualisieren:

Aufgrund weiterer Untersuchungen glaube ich, dass ein Android-Benutzer das Land nicht getrennt von der Sprache einstellen kann. Sie können nur das so genannte Gebietsschema in der Benutzeroberfläche festlegen. Es besteht aus Sprache und Land, aber die Liste ist begrenzt, so dass viele Kombinationen nicht möglich sind.

Beispielsweise könnte eine in den USA lebende chinesische Person, die traditionelles Chinesisch verwenden möchte, die Sprache auf traditionelles Chinesisch einstellen (zumindest auf einem verwurzelten Telefon) und dann ein Gebietsschema von zh-rTW haben. Er konnte sein Land in keiner Weise separat als US festlegen. In ähnlicher Weise kann jede Art von Auswanderer ihre Muttersprache nicht mit dem Land festlegen, in dem sie derzeit leben.

Grundsätzlich bedeutet dies, dass nur eine Reihe von Kombinationen aus Sprache und Land unterstützt werden. Die Frage ist nun, wie man herausfindet, welche es sind.

Manfred Moser
quelle
Ich weiß, ich könnte versuchen, dies herauszufinden, indem ich die Quelle lese. Und ich werde es wahrscheinlich tun, wenn mir niemand hilft.
Manfred Moser

Antworten:

58

Ich denke also, nach weiteren Nachforschungen und mit Marks Antwort werde ich selbst eine Antwort geben. Hier geht's:

Standardmäßig verfügt Android nur über die beiden Gebietsschemas zh_rCN (vereinfachtes Chinesisch) und zh_rTW (traditionelles Chinesisch). Wie Sie in der Einstellungen-App sehen können, sind dies die einzigen mitgelieferten Gebietsschemas:

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

Jeder andere Entwickler eines Android-Systems, z. B. für ein in China verkauftes Telefon oder so, könnte jedoch ändern, was er hinzufügt. Die theoretisch unterstützte Gesamtmenge finden Sie in der Liste der Gebietsschemas in der icu4c-App:

https://android.googlesource.com/platform/external/icu4c.git/+/master/data/locales/ Wie Sie für Chinesisch sehen können, gibt es

  • 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 ist der ISO-Code für traditionelles und Hans für vereinfachtes Chinesisch. Theoretisch würde dies bedeuten, dass wir haben könnten

  • vereinfachtes Chinesisch in China, Hongkong, Macau und Singapur
  • traditionelles Chinesisch in Hongkong, Macau und Taiwan

Beachten Sie jedoch, dass die Einstellungen-App geändert werden muss, um die verschiedenen Ländereinstellungen zu erhalten. In diesem Stadium bedeutet vereinfachtes Chinesisch also zh_rCN und traditionelles zh_rTW, und Sie sollten für Benutzer getrennt sein, die über ein derart modifiziertes Android-Image verfügen, das andere Gebietsschemas unterstützt.

In jedem Fall können Sie die Konfigurationsklasse verwenden, um das Gebietsschema abzurufen, z. B. in Ihrer Anwendungsklasse mit getResources (). GetConfiguration (). Locale.

Sie könnten dies beispielsweise protokollieren und die Daten an Ihr Tracking-System senden (was auch immer Sie verwenden), oder Sie könnten nach unterstützten suchen und eine Ausnahme mit der Gebietsschemaeinstellung in der Nachricht auslösen, die dann in Ihrer Marktoberfläche angezeigt wird ... es würde jedoch mindestens einen Absturz Ihrer App bedeuten (wenn Sie am Ball sind, können Sie einige Minuten später veröffentlichen und aktualisieren ..)

Um es noch einmal zusammenzufassen: Das minimale Setup würde spiegeln, was in der Einstellungs-App gemacht wird (nur zh-rCN und zh-rTW), aber wenn Sie Standard-Gebietsschemas für Singapur, Hongkong und Macau bereitstellen möchten, die standardmäßig traditionelles Chinesisch liefern Sie können das auch tun und es sollte funktionieren. Ich habe jedoch keine Beweise dafür, dass eine solche Konfiguration irgendwo verwendet wird.

Hoffentlich hilft das.

Manfred Moser
quelle
Wenn ein Benutzer seit Android 7.0 zh-rSG auswählt, sucht er nach zh-rSG. Wenn er es nicht findet, sucht er stattdessen nach zh-rCN oder einem anderen Gebietsschema mit dem vereinfachten Skript. - Das gleiche gilt, wenn ein Benutzer sv-rFI auswählt, wird er in der folgenden Reihenfolge suchen: sv-rFI, sv, sv-rSE
Liggliluff
Das aktuelle Repository bietet values-zh-rHK.
Koala Yeung
1
values-zh-rCN wird nicht kompiliert. Es heißt ungültiger Ressourcenverzeichnisname.
Janusz
10

Antwort aktualisiert

Die Frage und die vorherigen Antworten sind ziemlich alt. Es ist schwer zu sagen, wie korrekt sie noch sind. Diese Antwort richtet sich an andere Personen, die hierher kommen und sowohl traditionelles als auch vereinfachtes Chinesisch in ihrer App unterstützen möchten, sich jedoch nicht übermäßig um die Details der Lokalität kümmern.

Fügen Sie string.xmlDateien für traditionelles und vereinfachtes Chinesisch hinzu

Klicken Sie in Android Studio mit der rechten Maustaste auf den resOrdner und wählen Sie Neu> Android-Ressourcendatei . Geben Sie stringsden Dateinamen ein und wählen Sie Gebietsschema aus der Liste.

Geben Sie hier die Bildbeschreibung ein

Scrollen Sie nach unten zu zh für die Sprache. Fügen Sie eine stringsDatei für CN: China (vereinfacht) und eine für TW: Taiwan (traditionell) hinzu. Wenn Sie nur eine verwenden, wählen Sie einfach Beliebige Region .

Nach meinem Verständnis der Dokumentation wird bei der Suche zunächst geprüft, ob Sprache und Region genau übereinstimmen (Beispiel: Chinesisch-Traditionell-Taiwan). Dann wird auf umfassendere Kontrollen zurückgegriffen. (Dieses System ist ab Android 7.0 verfügbar.)

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

Ich bin mir nicht ganz sicher, wie das alles funktioniert. Bitte lesen Sie diese und diese Dokumentation.

Nach dieser Methode in meiner eigenen App wurde durch Umschalten der Systemeinstellungen zwischen "Traditionell" und "Vereinfacht" auch die App-Anzeige geändert.

Konvertieren zwischen traditionell und vereinfacht

Wenn Sie bereits eine Übersetzung in "Traditionell" oder "Vereinfacht" haben, können Sie den Text online automatisch konvertieren. Beginnen Sie mit Google Translate, um in die andere zu konvertieren (fügen Sie einfach Ihre strings.xmlDatei ein). Es macht schon einen ziemlich guten Job. Dann machen Sie es mehrmals mit einem der vielen Online-Konverter. Verwenden Sie ein Textvergleichstool oder eine Website ( text-compare.com ist gut), um das Ergebnis der Conversions zu vergleichen. Auf diese Weise können Sie Fehler von Google erkennen.

Suragch
quelle
6

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

Android 7.0 (API-Level 24) führte die Unterstützung für BCP 47-Sprach-Tags ein, mit denen Sie sprach- und regionenspezifische Ressourcen qualifizieren können. Ein Sprach-Tag besteht aus einer Folge von einem oder mehreren Subtags, von denen jedes den durch das Gesamt-Tag identifizierten Sprachbereich verfeinert oder einschränkt.

Sie können jetzt mithilfe der BCP 47-Tags traditionell oder vereinfacht definieren. (Um ein BCP 47-Sprach-Tag zu verwenden, verketten Sie b + und einen aus zwei Buchstaben bestehenden ISO 639-1-Sprachcode, optional gefolgt von zusätzlichen durch + getrennten Untertags.)

genauer: -

Vereinfacht :

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

Traditionell :

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

Weitere interessante Kombinationen finden Sie unter https://tools.ietf.org/html/bcp47 . einschließlich: -

  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).

Denken Sie daran, -b hinzuzufügen und das - in jedem Tag durch + zu ersetzen

Engel Koh
quelle
1
Dies sollte die richtige Antwort sein, insbesondere wenn Sie nur zwei Übersetzungen bereitstellen möchten: Hans und Hant für alle Regionen. Hans wird in Festlandchina und Singapur verwendet, und Hant wird in Hongkong und Taiwan verwendet. Und wenn Sie Audioinhalte über Text in Sprache bereitstellen möchten, ist der zweite Teil dieser Antwort möglicherweise gut.
ZZZ