IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Problème identification langue


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut Problème identification langue
    Bonjour,

    Sur mon application, énormément de gens se plaignent de la langue qui se met en Français alors que j'avais prévu que : si le téléphone n'est pas francophone, la langue par défaut est l'anglais.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     //Si le téléphone est en francais
            if(Locale.getDefault().getDisplayLanguage().equals("français")) {
     
    // bla bla bla
     
            }
     
            //sinon il est en anglais
            else{
    // bla bla bla 2
    Certains anglais l'ont pourtant en Français, comment cela est possible ?
    Merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 586
    Points
    586
    Par défaut
    Le plus simple est p'tet de virer ce bout de code. Il me semble que le langage de base d'une appli est l'anglais. Pour preuve, le fichier string.xml sur trouve dans res/values et non pas dans res/values-fr.

    La bonne question à se poser est : comment procèdes tu pour l'internationalisation ? où mets tu tes différents fichiers suivant les langues.

  3. #3
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    L'internationalisation ne se règle pas au niveau du code mais au niveau des ressources qualifiées :

    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    res/values/string.xml         #par défaut
    res/values-fr/string.xml                         #français
    res/values-it/string.xml                         #italien



    Toute dépend ensuite de la "LOCALE" (FR_fr,IT_it, etc) du téléphone. Et cela peut être changé par l'utilisateur.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    La langue ne se gère normalement pas dans le code mais avec les ressources.
    Par défaut c'est l'anglais avec res/values/strings.xml.
    Si tu as besoin de français ce sera dans res/values-fr/strings.xml

    Voir : http://developer.android.com/guide/t...alization.html
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Merci de vos réponses, j'ai géré en effet la plupart des choses dû au langage dans les ressources mais pour ce point là, j'ai besoin de le faire dynamiquement : ça génére des bases de données differentes selon la langue en fait.

    Je voulais donc le faire comme ça et pour moi ça marchait. Si la personne est française, son téléphone est en français et boum, ça passe dans le morceau de code qu'il faut. Sinon, ça va dans la partie pour les anglophones.
    Hors il ne semble pas que cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Locale.getDefault().getDisplayLanguage().equals("français")
    soit très fiable et ne prenne que les français.

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Défini une chaine dans tes ressources localisées. Ne reste plus qu'a tester cette chaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <string name="langue">FR</string>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String langue= getResources().getString(R.string.langue);
    if(langue.equals('FR'))
    //
    else
    //
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Ah, c'est pas bête ! Merci !
    Tu penses que ça réglera le problème ?

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Je ne sais pas si ca réglera ton problème en particulier mais tu sera certains de la langue utilisée en tout cas.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Par contre, ma classe extends SqliteOpenHelper donc la méthode getRessources ne fonctionne pas. Comment puis je accéder aux ressources depuis cette classe ?

  10. #10
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    SQLiteOpenHelper utilise un contexte pour s'initialiser....

    Context.getResources()


    Et même pas besoin de stocker une chaine là dedans !

    context.getResources().getConfiguration().locale donnera la locale des ressources.
    context.getResources().getConfiguration().locale.getLanguage() le code ISO de la langue
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Ah oui c'est vrai, désolé >.<

    J'ai peur que le getConfiguration.locale.getLanguage() fonctionne aussi mal que le Locale.getDefault().getDisplayLanguage().equals("français") qui normalement devrait marcher, non ?

  12. #12
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Haaa ben non....

    de toute manière on ne fait jamais:
    locale.getDisplayLanguage().equals("français")

    mais:
    locale.getLanguage().equals("fr")

    (déjà le 'ç' pose problème dans le source: "fran\u00E7ais")
    Mais bon.. de toute manière, il n'y a aucun différence entre aller taper dans "strings_fr.xml" et vérifier un truc "language" qui vaut fr....
    et récupérer le "_fr" du fichier (qui lui vient de Configuration.locale)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Ok je vais essayer comme tu me dis, mais sait tu pourquoi justement ça passe plus dans le Locale.getDefault().getDisplayLanguage().equals("français") que ça ne devrait ? Parce que si j'ai bien compris ta réponse, ça ne devrait justement pas passé dans cette boucle

  14. #14
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Quelle boucle ?

    La logique est la suivante:
    * Le téléphone a une "locale" globale définie par l'utilisateur (avec tout un tas d'autres préférences concernant l'affichage des dates / heures etc...).
    * Quand on arrive dans une application, le système définit tout un tas de trucs par défaut: la "default" locale (Locale.getDefault()) et la Configuration pour les ressources. A noter qu'à ce moment: Configuration.locale correspond à Locale.getDefault()
    * Quand on lit une ressource (String), le système va regarder la langue dans Configuration.locale... par exemple "pt_BR" et va chercher la ressource dans les fichiers suivants: {values}_pt_BR.xml {values}_pt.xml {values}.xml. Donc stocker dedans une chaine du genre "language = 'pt' " est inutile ... Configuration.locale.getLanguage() donnera la même chose...

    Pour être précis d'ailleurs, il faudrait utiliser Configuration.locale.toLanguageTag(), puisque "pt-PT" (portugais) est bien différent (niveau langage) par exemple que "pt-BR" (brésilien)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 18
    Points
    18
    Par défaut
    Je comprends bien cela mais ça n'explique pas pourquoi mon " Locale.getDefault().getDisplayLanguage().equals("français") " capte plus de réponses que prévu et c'est surtout ça qui m'intrigue. Utiliser votre solution du dernier message revient à mettre ce que j'avais au début plus ou moins, j'ai donc peur que ça ne résoude pas mon probleme. Pourquoi est ce que pour de non francophone, la condition Locale.getDefault().getDisplayLanguage().equals("français") est elle parfois vraie ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probléme utilisation langue arabe?
    Par dj_techno dans le forum Delphi
    Réponses: 2
    Dernier message: 28/12/2006, 16h51
  2. Problème de langue avec GTK 2.10.3
    Par Feysal dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 27/10/2006, 14h38
  3. Problème de langues (russe)
    Par tonydiniro dans le forum Langage
    Réponses: 1
    Dernier message: 25/10/2006, 15h26
  4. Fonction today() et problème de langue
    Par zia77 dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 22/05/2006, 14h43
  5. [conception] problème identification relative
    Par mel02 dans le forum Modélisation
    Réponses: 4
    Dernier message: 19/01/2006, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo