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.
quelle
Antworten:
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
Hant ist der ISO-Code für traditionelles und Hans für vereinfachtes Chinesisch. Theoretisch würde dies bedeuten, dass wir haben könnten
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.
quelle
values-zh-rHK
.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.xml
Dateien für traditionelles und vereinfachtes Chinesisch hinzuKlicken Sie in Android Studio mit der rechten Maustaste auf den
res
Ordner und wählen Sie Neu> Android-Ressourcendatei . Geben Siestrings
den Dateinamen ein und wählen Sie Gebietsschema aus der Liste.Scrollen Sie nach unten zu zh für die Sprache. Fügen Sie eine
strings
Datei 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.xml
Datei 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.quelle
https://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources
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
quelle