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

API standards et tierces Java Discussion :

Comment créer une application multilingue ? [FAQ]


Sujet :

API standards et tierces Java

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 243
    Points
    243
    Par défaut Comment créer une application multilingue ?
    Bonjour,

    J'ai beau chercher sur le net et sur les forums développez, étrangement je ne trouve pratiquement aucune info sur le développement d'applications multilingues en JAVA. Même Ivor Horton n'en touche pas un mot dans le pavé que je lui ai acheté.

    Pouvez-vous me donner quelques liens traitants du sujet ? Peut-être que je ne cherche pas les bons termes

  2. #2
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Première lecture : le tutoriel de Sun sur le sujet.

    A savoir : internationalization c'est long à dire et à écrire, c'est pourquoi, on le trouve souvent sous la forme i18n (parce qu'il y a 18 lettres entre le 'i' et le 'n').
    Avec ça tu devrais trouver beaucoup plus de choses sur Google.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 243
    Points
    243
    Par défaut
    Merci pour le lien. Qqn m'a également proposé de simplement stocker mes textes dans des fichiers XML. ça me semble tout bête et bien plus facile à implémenter que les principes d'internationalization. Qu'en pensez-vous ?

  4. #4
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Je pense que ça dépend que ce doit faire l'appli !

    Quand on dit multilingue, ça peut aller assez loin : les fichiers (XML ou autre) peuvent suffire, mais ils peuvent aussi n'être qu'un élément de la solution.

    Jusqu'où le multi lingue doit-il aller ?
    C'est pour ça que le doc. de Sun est intéressant : il est assez poussé pour permettre au lecteur de voir tous les aspects à considérer (ça m'étonnerait que quelqu'un tous seul dans son coin pense à tout ça).
    Il permet de suffisament bien cerner le problème pour savoir ce qu'on va mettre en place et ce qu'on va occulter volontairement.

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 243
    Points
    243
    Par défaut
    Effectivement je vois que par exemple le format des nombres est géré, etc. Mon application ne va pas aussi loin, je dois juste traduire quelques écrans en anglais. Je pense que les fichiers XML me suffiront.

    Mais j'ai appris qqch avec le i18n

  6. #6
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    En effet, si c'est juste traduire quelques libellés, la solution maison avec des XML est bien.
    Je dirais même que si c'est une petite appli qui ne va pas beaucoup bouger, une classe avec des constantes peut suffire.

    Attention quand même, si en plus de libellés, tu as des messages utilisateurs.
    Il faut savoir que d'une langue à l'autre, l'ordre des mots varie. Et si des messages prennent en compte un paramètre c'est plus délicat à gérer.
    Exemple (bidon, ok, mais j'ai rien trouvé de mieux) de message :
    • "Vous avez sélectionné la voiture rouge" (ou la verte, la bleue ...)
      "You have selected the red car" (ou the green car, ou the blue car).

    -> On ne peut pas se contenter de concaténer des morceaux de texte, il faut gérer un texte paramétré !

  7. #7
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 243
    Points
    243
    Par défaut
    Oui, je suis conscient de ces problèmes. Je pense avoir une structure de ce type :

    <accueil>
    <menu>
    <item1>premier menu</item1>
    <item2>deuxième menu</item2>
    </menu>
    </accueil>

    Ainsi j'isole chaque phrase et la traduction sera correcte. Je n'ai pratiquement pas de variables dynamiques devant s'intercaler au milieu de phrases, donc ça doit jouer.

    Utiliser une classe est également une idée, mais les fichiers XML sont bien plus faciles à gérer en cas d'ajout d'une nouvelle langue.

  8. #8
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    C'est sûr que la solution "fichier" est plus souple (pas de re-compilation).

    Bon courage !

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 851
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 851
    Points : 22 863
    Points
    22 863
    Billets dans le blog
    51
    Par défaut
    Question bete : plutot que de dupliquer le ficher XML de description du menu, pourquoi ne pas l'associer a des PropertyRessourceBundle qui sont specialises dans la gestion des fichiers i18n et l10n (localization) ?

    gui.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <accueil> 
      <menu key="FILE_MENU> 
        <item key="OPEN_ACTION"/>
        <item key="SAVE_ACTION"/> 
        <item key="SAVE_AS_ACTION"/> 
      </menu> 
    </accueil>
    gui_fr.properties (ou gui_fr_FR.properties)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    FILE_MENU=Fichier
    OPEN_ACTION=Ouvrir...
    SAVE_ACTION=Sauvegarder
    SAVE_AS_ACTION=Sauvegarder sous...
    QUIT_MESSAGE=<html><body>Désirez vous réellement quitter sans sauvegarder votre travail ?</body></html>
    OVERWRITE_FILE_MESSAGE=<html><body>Le fichier \"{0}\" <br/>existe déjà ; voulez-vous l'écraser ?</body></html>
    gui.properties (ou gui_en.properties ou gui_en_US.properties)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    FILE_MENU=File
    OPEN_ACTION=Open...
    SAVE_ACTION=Save
    SAVE_AS_ACTION=Save As...
    QUIT_MESSAGE=<html><body>Do you really want to quit without saving your work?</body></html>
    OVERWRITE_FILE_MESSAGE=<html><body>File \"{0}\" <br/>already exists; do you want to overwrite?</body></html>
    Notez que les regles de presentation et de grammaire sont differentes entre l'anglais et le francais:

    Sauvegarder sous...
    Save As...

    <html><body>Le fichier \"{0}\" existe déjà ; voulez-vous l'écraser ?</body></html>
    <html><body>File \"{0}\" already exists; do you want to overwrite?</body></html>


    Moi j'utilise un procede similaire mais etendu pour pouvoir egalement charger les info-bullles, les acceleateur (keystroke), les mnemonic (lettre active dans le label) ... et les icones* (!) a partir d'une meme cle.

    * car une image ok dans une culture peut-etre offensante dans une autre.

    Pour les message composes il faut utiliser MessageFormat (lire la doc de cette classe attentivement). Attention cependant au genre et au nombre (la quantite, pas les chiffres) qui peuvent etre different suivant les languages. Il peut etre parfois assez difficile de faire des messages generiques composes.

    ex : peuple est singulier, people est pluriel.

    => en se basant sur un prog anglais a traduire en francais :

    People are angry

    En anglais on peut faire facilement un message compose genre

    {0} are {1}

    En francais une traduction literalle serait

    Les {0} sont {1}

    Et la ca ne passe pas (la traduc a un sens different et l'adjectif n'est pas accorde au nombre). Idem si on utilise un mot feminin.

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

Discussions similaires

  1. Comment créer une application MDI ?
    Par DeveloMagaly dans le forum Débuter
    Réponses: 2
    Dernier message: 12/09/2008, 21h09
  2. Réponses: 0
    Dernier message: 17/10/2005, 08h05

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