Android. Comment utiliser les mêmes messages localisables pour toutes les langues d'un pays?

Mon pays (Espagne) a plusieurs langues (es-ES, ca-ES, gl-ES, eu-ES). Nous n'ajouterons pas toutes les langues pour le moment, nous aimerions utiliser la langue principale en Espagne, c'est-à-dire en espagnol. Nous souhaitons afficher /values-es/strings.xml lorsque l'utilisateur a sélectionné l'une des autres langues du pays. Comment peut-on faire ça?

Oh, et nous aimerions utiliser l'anglais comme langue par défaut ( /values/strings.xml ).

  • Comment puis-je accéder aux valeurs stockées d'un Bean d'une autre classe
  • Android - Application de test sur Galaxy S8 ou LG G6
  • Obtenir la liste des chaînes présent dans le fichier strings.xml dans Android
  • Comment déplacer une image de gauche à droite dans Android
  • Comment puis-je gérer Map Pass Fin en utilisant Google Maps pour Android V2?
  • Android: téléchargement d'un fichier protégé par authentification NTLM
  • Il serait formidable d'avoir quelque chose comme /values-ES/strings.xml , mais je suppose que cela ne peut pas être fait car le premier code devrait être le code de langue.

    Maintenant, nous /values-es/strings.xml fichier /values-es/strings.xml vers les autres dossiers ( values-ca , values-gl et values-eu ), mais nous aimerions éviter cela.

  • Création d'un RecyclerView extensible
  • Utiliser le nom du package en XML
  • Ouvrez la page Facebook dans l'application Facebook (si installé) sur Android
  • Le dossier Android SDK prend beaucoup d'espace disque. Devons-nous garder toutes les images du système?
  • Quelle est la console.log () de java?
  • Comment gérer le contact en dehors de la vue dans Android?
  • 7 Solutions collect form web for “Android. Comment utiliser les mêmes messages localisables pour toutes les langues d'un pays?”

    Je pense que vous ne devriez avoir que 2 dossiers avec 1 strings.xml l'un pour l'autre:

    1. Res / values ​​/ strings.xml cette ressource contiendra votre texte en anglais ;
    2. Res / values-es / strings.xml cette ressource contiendra votre texte en espagnol .

    Lorsque votre application est installée sur un périphérique configuré avec la langue italienne , elle utilisera la ressource de fichier sur le cas 1.

    Lorsque votre application est installée sur un périphérique configuré avec une langue espagnole (et il y a beaucoup de langue espagnole , pensez aux pays d'Amérique du Sud ), il utilisera la ressource de fichier sur le cas 2.

    Vous pouvez le faire facilement avec Android Studio:

    1. Cliquez avec le bouton droit de la souris sur le dossier res
    2. Allez dans Nouveau> répertoire de ressources Android
    3. Une fenêtre vous montrera quelques options; Choisissez Locale , puis cliquez sur le bouton avec ces symboles ">>"
    4. Ensuite, dans la liste des langues , choisissez es: espagnol , puis cliquez sur OK, comme indiqué dans l'image ci-dessous (notez que, par défaut, la région spécifique seule a une région sélectionnée!)

    Ajouter un guide d'image locale

    Par expérience: je n'ai jamais fait face à des utilisateurs bretonnes , corse ou provençales qui demandent une traduction complète de l'application dans leur langue (par défaut, l'application a l'anglais par défaut et le français).

    Je dirais que vous voulez faire quelque chose comme ça.

     if (Locale.getDefault().getISO3Country().equals("ESP")) { Locale[] locales = Locale.getAvailableLocales(); for (Locale loc : locales) if (loc.getISO3Language().equals("SPA")) { Locale.setDefault(loc); break; } } 

    Remarque: Je ne suis pas sûr si j'ai eu la langue ISO3 et les codes de pays exacts. Et vous devrez également faire quelque chose pour la situation (rare?) Que le site ES ES n'est pas disponible.

    Si vous essayez d'annuler le catalan avec l'espagnol, vous devriez probablement le faire dans le values-ca/strings.xml .

    La façon de faire ce que vous demandez est de fournir les ressources dans le dossier approprié de ressources de pays mobile, qui a priorité sur les ressources de la région de langue.

    Supposons que vous avez la situation suivante:

    Le code de l'application appelle R.string.text_a Deux fichiers de ressources pertinents sont disponibles: res/values-mcc404/strings.xml , qui comprend text_a dans la langue par défaut de l'application, dans ce cas, l'anglais. res/values-hi/strings.xml , qui inclut text_a en hindi. L'application fonctionne sur un périphérique qui a la configuration suivante: la carte SIM est connectée à un réseau mobile en Inde (MCC 404). La langue est définie sur Hindi (salut). Android va charger text_a à partir de res/values-mcc404/strings.xml (en anglais), même si le périphérique est configuré pour Hindi. C'est parce que dans le processus de sélection de ressource, Android préférez un match de MCC sur une correspondance de langue.

    Le MCC pour l'Espagne est 214.

    (Voir localisation )

    J'ai trouvé une autre solution délicate: des liens difficiles . Bien qu'il ne supprime pas complètement tout le problème, au moins il vous protège de la tâche de routine de copier le fichier dans plusieurs répertoires ou de faire des changements égaux dans tous les fichiers existants avec le risque de manquer quelque chose.

    Mais je dois avouer qu'il y a des réserves:

    1) Certains IDE ne supporte pas le travail avec des liens forts par défaut. Intellij IDEA et Android Studio cassera vos liens forts si vous ne désactivez pas l'option "écriture sécurisée" dans les paramètres.

    2) La plupart des systèmes de contrôle de version ne prennent pas en charge les liens durs par défaut. Prenons le git par exemple. Il va rompre les liens durs existants après avoir repris ou fusionné des modifications.

    À l'heure actuelle, j'utilise un fichier batch pour restaurer des liens difficiles après avoir été cassé par git.

    Dans un terme général, il ne devrait y avoir qu'un seul strings.xml sous le dossier de valeurs contenant les données pertinentes. Si nous spécifions explicitement différentes valeurs de dossier comme les valeurs-ca, values-es, chaque fois qu'il y a des modifications de réglage dans le périphérique Android, il examinera le dossier particulier et prendra la valeur de chaîne appropriée. Si l'exigence est de garder un texte uniforme, il vaut mieux avoir uniquement les valeurs-> strings.xml seul avec les données requises. Mais avec cette approche, l' apk multilingue n'est pas possible, c'est-à-dire pour un autre pays, une langue différente est attendue, il y aura encore des variations. Donc, chaque fois que nous avons besoin d'un langage uniforme, nous allons avec un seul dossier seul et partout où le multilingue est préféré, nous pouvons avoir plusieurs valeurs-es, valeurs-ca dossier comme celui-là. J'espère que cela pourra aider

    Que diriez-vous d'essayer de le définir dans java, au lieu d'utiliser strings.xml. En le faisant de manière programmée, vous avez plus de flexibilité au moment de l'exécution.

      Configuration config = new Configuration(getResources().getConfiguration()); Locale locale = Locale.getDefault(); String country = locale.getCountry(); String language = locale.getLanguage(); if (country.equalsIgnoreCase("ES") && (language.equalsIgnoreCase("ca") || language.equalsIgnoreCase("gl") || language.equalsIgnoreCase("eu"))) { locale = new Locale("es"); } config.setLocale(locale); 

    Et puis vous pouvez simplement avoir un /values-s/strings.xml pour toutes les langues de pays ES.

    Vous pouvez suivre ce lien.

    http://www.androidhive.info/2014/07/android-building-multi-language-supported-app/

    https://www.tutorialspoint.com/android/android_localization.htm

    https://www.icanlocalize.com/site/tutorials/android-application-localization-tutorial/

    Par exemple, si le code charge une chaîne appelée 'R.string.title', Android choisira la valeur correcte pour cette chaîne au moment de l'exécution en chargeant le fichier strings.xml approprié à partir d'un répertoire 'res / values' correspondant.

    Pour avoir une application Android multilingue, vous devez fournir à Android les fichiers de ressources localisés.

    Si la localisation est 'en-US', Android recherchera une valeur de "R.string.title" par – Lorsqu'il parvient à trouver la chaîne dans le fichier de ressources, elle utilise cette valeur et arrête la recherche. Cela signifie que la langue par défaut fonctionne comme une option arrière-arrière et lorsque la traduction existe, elle est utilisée à la place. Cela signifie également que vous devez localiser tout ou rien, car voir les applications à moitié traduites est généralement pire que les applications qui ne sont pas du tout traduites.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.