web-dev-qa-db-fra.com

Chinois simplifié et traditionnel vs régions

Dans le processus de mise en œuvre du support chinois traditionnel et simplifié dans mon Android et je ne sais pas comment cela est censé fonctionner.

Donc, en lisant le documentation ainsi que certaines discussions comme this et this j'ai mis du chinois simplifié dans

  • valeurs-zh
  • valeurs-zh-rCN
  • valeurs-zh-rSG

et chinois traditionnel en

  • valeurs-zh-rTW
  • valeurs-zh-rHK

Tout fonctionne bien, mais cela n'a pas de sens pour moi (désolé si je ne comprends pas assez bien le chinois simplifié par rapport à l'utilisation traditionnelle).

D'après ce que je comprends de la vérification de la boîte de dialogue des paramètres régionaux dans l'émulateur ainsi que sur un téléphone rooté, un utilisateur peut changer les paramètres régionaux en chinois simplifié ou chinois traditionnel.

Voici maintenant la question. Comment le système sait-il où obtenir le chinois simplifié ou traditionnel strings.xml. Y a-t-il une sorte d'hypothèse cuite qui dit que si je suis censé afficher le chinois simplifié, obtenez-le de valeurs-zh et obtenez traditionnel de valeurs-zh-rTW?

Mais que se passe-t-il si un utilisateur se trouve à Hong Kong et configure son appareil pour afficher le chinois simplifié? Ou si un émigrant ailleurs dans le monde règle son appareil sur le chinois traditionnel mais sa région est par exemple US ou CA?

Que dois-je faire pour permettre à mes utilisateurs de définir leurs paramètres régionaux et que mon application apparaisse avec les paramètres régionaux appropriés?

Mise à jour:

D'après une enquête plus approfondie, je pense qu'un utilisateur de téléphone Android Android ne peut pas définir le pays séparément de la langue. Il ne peut définir que ce qu'on appelle les paramètres régionaux dans l'interface utilisateur. Il se compose de la langue et du pays, mais la liste est limitée donc de nombreuses combinaisons ne sont pas possibles.

Par exemple. une personne chinoise vivant aux États-Unis qui souhaite utiliser le chinois traditionnel pourrait définir la langue sur le chinois traditionnel (au moins sur un téléphone enraciné) et aurait alors une locale de zh-rTW. Il ne pouvait en aucun cas définir séparément son pays comme étant les États-Unis. De la même manière, aucune sorte d'émigrant ne peut définir sa langue maternelle avec le pays dans lequel il vit actuellement.

Fondamentalement, cela signifie que seul un tas de combinaisons de langue et de pays sont pris en charge. Maintenant, la question est de savoir comment ils sont?

69
Manfred Moser

Je pense donc qu'après une enquête plus approfondie et avec la réponse de Marks, je vais répondre moi-même. Voici va:

Hors de la boîte Android n'a que les deux paramètres régionaux zh_rCN, qui est le chinois simplifié et zh_rTW, qui est le chinois traditionnel. Comme vous pouvez le voir dans l'application Paramètres, ce sont les seuls paramètres régionaux fournis:

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

Cependant, tout autre créateur d'un système Android par exemple pour un téléphone vendu en Chine ou ainsi pourrait changer ce qu'ils ajoutent. L'ensemble global théoriquement pris en charge peut être trouvé en consultant la liste des paramètres régionaux trouvés dans le application icu4c:

https://Android.googlesource.com/platform/external/icu4c.git/+/master/data/locales/ Comme vous pouvez le voir pour le chinois, il existe

  • 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 est le code ISO pour le traditionnel et Hans pour le chinois simplifié. Donc, théoriquement, cela signifierait que nous pourrions avoir

  • chinois simplifié en Chine, Hong Kong, Macao et Singapour
  • chinois traditionnel à Hong Kong, Macao et Taiwan

Cependant, gardez à l'esprit que l'application Paramètres devrait être modifiée pour avoir les différentes sélections de paramètres régionaux. Donc, à ce stade, le chinois simplifié se traduit par zh_rCN et zh_rTW traditionnel et vous devriez être à part pour les utilisateurs qui ont une telle image modifiée Android qui prend en charge d'autres paramètres régionaux).

Dans tous les cas, pour être du côté de la sauvegarde, vous pouvez utiliser la classe Configuration pour obtenir les paramètres régionaux, par exemple dans votre classe Application avec getResources (). getConfiguration (). locale.

Vous pourriez par exemple enregistrez-le et envoyez les données à votre système de suivi (quoi que vous utilisiez) ou vous pouvez vérifier celles prises en charge et lever une exception avec le paramètre local dans le message et cela apparaîtra ensuite dans votre interface de marché ... cela signifierait cependant un minimum d'un plantage de votre application (si vous êtes dans le coup, vous pouvez publier et mettre à jour quelques minutes plus tard ..)

Donc, pour récapituler .. la configuration minimale serait de refléter ce qui est fait dans l'application des paramètres (uniquement zh-rCN et zh-rTW), mais si vous souhaitez fournir des paramètres régionaux par défaut pour Singapour, Hong Kong, Macao fournissant le chinois traditionnel par défaut vous pouvez le faire aussi et cela devrait fonctionner. Je n'ai cependant aucune preuve qu'une telle configuration soit utilisée n'importe où ..

J'espère que ça t'as aidé.

54
Manfred Moser

Réponse mise à jour

La question et les réponses précédentes sont assez anciennes. Il est difficile de dire à quel point ils sont toujours corrects. Cette réponse s'adresse à d'autres personnes venant ici qui souhaitent simplement prendre en charge le chinois traditionnel et le chinois simplifié dans leur application, mais ne sont pas trop préoccupés par les détails de la localité.

Ajouter string.xml fichiers pour le chinois traditionnel et simplifié

Dans Android Studio, cliquez avec le bouton droit sur le dossier res et choisissez Nouveau> Android . Tapez strings pour le Nom du fichier et choisissez Paramètres régionaux dans la liste.

enter image description here

Faites défiler jusqu'à zh pour la langue. Ajoutez un fichier strings pour CN: Chine (simplifié) et un pour TW: Taiwan (traditionnel). Si vous n'en utilisez qu'une, choisissez simplement N'importe quelle région .

Si je comprends bien la documentation , la recherche vérifiera d'abord s'il existe une correspondance exacte pour la langue et la région (exemple: chinois-traditionnel-Taiwan). Ensuite, il reviendra à des contrôles plus larges. (Ce système est en date de Android 7.0.)

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

Je ne suis pas complètement sûr de la façon dont tout cela fonctionne, alors veuillez lire la documentation this et this .

En suivant cette méthode dans ma propre application, le basculement des paramètres système entre Traditionnel et Simplifié a également changé l'affichage de l'application.

Conversion entre traditionnel et simplifié

Si vous avez déjà une traduction en traditionnel ou simplifié, vous pouvez convertir automatiquement le texte en ligne. Commencez avec Google Translate pour convertir à l'autre (collez simplement votre strings.xml fichier). Il fait déjà un assez bon travail. Recommencez ensuite plusieurs fois en utilisant l'un des nombreux convertisseurs en ligne. Utilisez un outil de comparaison de texte ou un site ( text-compare.com est bon) pour comparer le résultat des conversions. Cela vous aidera à détecter les erreurs que Google a commises.

8
Suragch

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

Android 7.0 (API niveau 24) a introduit la prise en charge des balises de langue BCP 47, que vous pouvez utiliser pour qualifier les ressources spécifiques à la langue et à la région. Une balise de langue est composée d'une séquence d'une ou plusieurs sous-balises, chacune d'elles affinant ou rétrécissant la plage de langues identifiée par la balise globale.

vous pouvez désormais définir traditionnel ou simplifié à l'aide des balises BCP 47. (Pour utiliser une balise de langue BCP 47, concaténer b + et un code de langue ISO 639-1 à deux lettres, éventuellement suivis de sous-balises supplémentaires séparées par +.)

plus précisement: -

Simplifié :

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

Traditionnel :

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

vous pouvez consulter https://tools.ietf.org/html/bcp47 pour d'autres combinaisons intéressantes. comprenant: -

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

n'oubliez pas d'ajouter -b et de remplacer le - dans chaque balise par +

3
Angel Koh