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

Java Discussion :

I18n - discussion sur des choix à faire


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Par défaut I18n - discussion sur des choix à faire
    Bonjour,
    Au niveau du dev, je travaille sur un projet Java actuellement. J'utilise les ResourceBundle pour la partie internationalisation. A ce niveau là pas de souci.

    Cependant, je me pose quelques questions existentielles
    - Vaut-il mieux traduire toute l'application au chargement de celle-ci et une fois pour toute (la langue ne changera jamais de manière dynamique) ou alors juste à chaque fois que je construits un objet. Vu de loin et sans avoir trop creusé, je dirai que la première solution semble être la plus coûteuse au démarrage mais fera moins d'appel à la ressource. L'avantage de la première solution c'est qu'on n'internationalise que ce dont a besoin ... mais on le fait souvent et surtout on risque de le faire plusieurs fois.
    - Si la bonne solution est l'internationalisation de toutes les chaînes une fois pour toute et au démarrage, est-ce un erreur de déclarer en static toutes mes chaînes internationalisées ? L'avantage est bien sur que la traduction est faite une fois pour toute au démarrage sans avoir à mettre en place de mécanisme compliqué. Les deux questions sont bien évidement très fortement liées.

    J'ai pas forcément des besoins de perfs exceptionnels dans mon cas précis, mais c'est plus pour ma culture... Car pour le moment, dans mon projet, quand une fenêtre est crée je l'internationalise. Je la ferme et je la ré-ouvre et je la ré-internationalise ... je trouve ça dommage .. et je me dis que sur le long terme ça peut-être coûteux. Le risque du static, c'est que dans un environnement multithreadé c'est que j'imposerai la langue à tout le monde Donc j'exclus ce cas là.

    Ou alors je me fais des films et c'est vraiment pas coûteux d'internationaliser à chaque fois que je fais une action et suivant les actions plusieurs fois les mêmes choses.


    Autre question, moins importante.... dans le cas d'un gros projet je précise.
    - Vaut-il mieux un très gros fichiers de ressource qui englobe toutes les traductions de l'appli, ou alors plusieurs fichiers si c'est possible (parties de l'application très différentes)

  2. #2
    Membre extrêmement actif
    Profil pro
    Développeur Java Indépendant
    Inscrit en
    Mai 2007
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java Indépendant

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 333
    Par défaut
    Moi ce que je ferrais, je mettre toutes les chaines en français dans un fichier.property.

    Tu créer donc un fichier .property par langue, et tu le choisis au démarrage. Ensuite, chaque éléments viendra chercher les chaines de caractère à leur instanciation dans le fichier choisis.

    Je crois qu'en struts c'est comme ça que ça marche.
    A +

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Petite question avant de commencer : il s'agit d'une application desktop ou d'une application web ?



    Perso j'aurais plutôt tendance à utiliser le ResourceBundle à chaque fois que j'en ai besoin plutôt que de remplir une multitude de champs static. C'est long et fastidieux mais surtout cela n'apporte pas grand chose : je ne pense pas que l'accès à un ResourceBundle entraine des problèmes de performances...


    Quand à découper les fichiers en plusieurs cela peut être une éventualité, en particulier si ton application est découpé en plusieurs section bien différente. Tu pourrais avoir un fichier commum + 1 fichier par "section".


    a++

    PS : zag-yoshi, c'est ce que fait les ResourceBundle

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Par défaut
    Petite question avant de commencer : il s'agit d'une application desktop ou d'une application web ?
    Alors dans mon cas actuel, il s'agit d'une application desktop. Mais c'est plus de la réflexion générale sur des choix à adopter pour de l'internationalisation pas coûteuse. Qu'elles seraient les différences entre les deux types d'appli dans ce cas là? Je ne vois pas de différence mais c'est sûrement parce que je n'ai pas suffisamment de recul vis-à-vis des applis web. .

    Quand à découper les fichiers en plusieurs cela peut être une éventualité, en particulier si ton application est découpé en plusieurs section bien différente. Tu pourrais avoir un fichier commum + 1 fichier par "section".
    c'était la philo qui avait été adoptée sur un précédent projet sur lequel j'avais travaillé... j'avais trouvé le principe pas mal mais je ne l'ai pas retrouvé systématiquement donc je voulais savoir si c'était un bon choix.
    On avait une appli serveur et des applis clientes. Chacune des applis avaient leur dicos + une partie commune pour certains points qui étaient identiques.

    Bon ok, je me suis peut-être fait une frayeur pour rien.... je sais pas, ça m'a pris comme ça ce matin en regardant le code et me rendant compte que très souvent les mêmes clés étaient traduites plusieurs fois.
    Je n'ai pas remarqué des pbs de perfs de mon côté, c'est juste que je me pose des questions pour mes futurs projets

    @zag-yoshi : ouais effectivement, les RessourcesBundle font déjà ça et c'est ce que je fais. En fait côté implémentation j'ai pas de pbs, ce sont plus des questions de conception que je me pose pour voir si en réfléchissant mieux au départ j'aurais pu faire mieux.

    J'attends quand même d'autres avis

    merci à vous deux pour le moment.

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kisame Voir le message
    Qu'elles seraient les différences entre les deux types d'appli dans ce cas là? Je ne vois pas de différence mais c'est sûrement parce que je n'ai pas suffisamment de recul vis-à-vis des applis web.
    Dans une appli web la langue dépend du client et peut donc varier d'une requête à l'autre. Il est donc préférable de laisser le Resourcebundle s'en charger

    Citation Envoyé par kisame Voir le message
    Je n'ai pas remarqué des pbs de perfs de mon côté, c'est juste que je me pose des questions pour mes futurs projets
    Ben en fait la solution du static alourdirait surtout le développement.
    Sans compter que les EDIs savent très bien gérer les ResourceBundle et ont généralement une fonction "externalize string" qui fait tout cela automatiquement (et qui permet d'éviter d'en oublier )

    a++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Par défaut
    ok pour la remarque sur les applis web.

    --

    Je connaissais cette fonctionnalité mais il y a un truc que j'avais trouvé moyen top quand même.

    si j'ai une chaîne construite de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String toto = "le résultat de cette opération vaut " + variable + " patates"
    L'externaliseur crée deux clés. Une pour le résultat de cette opération vaut et une pour patates.
    donc je me retrouve avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String toto = Messages.getString("clé1") + variable + Messages.getString("clé2").
    et provoque donc la création de deux entrée dans message properties
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    clé1=le résultat de cette opération vaut
    cle2= patates
    J'aurais préféré que ça me génère un truc dans le genre :
    Object[] params= new Object[1];
    params[0]=variable;
    String toto = Messages.getString("cle1",params)
    Avec une fonction getString adaptée. Ainsi je n'aurai plus qu'une clé dans mon fichier de ressource :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cle1=le résultat de cette opération vaut {0} patates
    Au delà du fait qu'il y a moins de clé, car je ne suis pas avare à ce point, je trouve plus normal de proposer une mécanisme pour traduire une telle chaîne en une fois, plutôt que de se créer 2 mots.

    bon après libre à moi d'adapter le code généré pour ces cas là. C'était juste pour faire une parenthèse sur la fonctionnalité d'externalisation d'eclipse.
    -----

    Si ça se trouve, le truc est faisable via l'interface mais j'ai rien trouvé....

    en tout cas merci pour les remarques

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/10/2014, 18h08
  2. [VB6] Comment faire un update sur des textbox qui sont créés
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 27
    Dernier message: 16/02/2006, 14h52
  3. Faire des retry sur des erreurs FTP
    Par fejjal dans le forum Réseau
    Réponses: 4
    Dernier message: 15/02/2006, 23h34
  4. Réponses: 8
    Dernier message: 24/08/2004, 22h25
  5. [VB.Net] Faire du JS sur des contrôles côté serveur
    Par TagadaTsoin dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/11/2003, 15h51

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