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

JSF Java Discussion :

Précisions ResourceBundle Internationalisation


Sujet :

JSF Java

  1. #1
    Membre chevronné

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Par défaut Précisions ResourceBundle Internationalisation
    Aujourd'hui, je lisais la FAQ JSF, et je suis tombé sur la question portant sur les resource Bundle. Ni une ni deux, j'ai décidé de tester la chose.

    Donc je crée un fichier "french.properties" dans lequel j'écris que je place dans WebContent, je vais dans ma JSF et j'ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:loadBundle var="msgs" basename="WebContent/french.properties"/>
    et enfin un peu plus bas dans la JSF, j'ajoute ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{msgs.LABEL}" id="libelle"/>
    et le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.util.MissingResourceException: Can't find bundle for base name french.properties, locale fr_FR


    J'ai essayé de creuser la question plus avant, mais le moins qu'on puisse dire, c'est que la doc est très disparate sur la question. Certains implémentent une classe qui hérite de ResourceBundle, d'autres suggèrent d'utiliser la classe par défaut de facelets mais sans dire comment faire, d'autres inventent des bidouillages de type carton bout de ficelle, et bref je sens que je vais y passer des heures alors je me tourne vers vous:

    Où est mon erreur, et comment la résoudre?
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    C'est un ressourcebundle java, il dois donc se trouver dans le classpath. WebContent c'est une dossier de ton IDE. Ce qu'il faut c'est que tu mette ton .properties dans un endroit tel qu'il sera déployé dans WEB-INF/classes ou dans un des .jar qui sera déployé dans WEB-INF/lib

  3. #3
    Membre chevronné

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Par défaut
    Je suis désolé, mais cette réponse est insuffisante pour m'aider. Je vais essayer de préciser toutes les questions que je n'arrive pas à résoudre à cause des diverses contradictions que je rencontre, et du fait que trop de tutoriels oublient des précisions qui ne sont pas aussi évidentes qu'on pourrait le croire.

    1) L'attribut "basename" de la balise f:loadBundle correspond-t-il à un nom de classe ou à un nom de fichier .properties?

    2) Est-il impératif de fournir une implémentation de ResourceBundle, ou est-ce que JSF en possède une?

    3) Si la réponse à la question 1) est "nom de classe", comment JSF retrouve-t-il le fichier .properties? A l'inverse, si la réponse est "nom de fichier .properties", comment JSF retrouve-t-il l'implémentation du ResourceBundle?

    4) Dans le cas où je dois impérativement fournir une implémentation de la classe ResourceBundle, est-il suffisant d'ajouter dans le classpath une "public class ResourceBundleBean extends PropertyResourceBundle" ? sans ajouter d'implémentation particulière et en laissant tout le travail à la classe mère, ou y a t il des choses particulières à y placer?

    5) Certains disent de mettre la balise f:loadBundle dans la JSF, d'autres d'ajouter des balises <message-bundle> et <locale-config> dans le fichier faces-config. Ces deux méthodes sont elles alternatives, complémentaires, conflictuelles?


    J'ai essayé quelques combinaisons de solutions à ces questions qui me paraissaient probantes, mais de là à les essayer toutes il y a un assez grand nombre de possibilités. Pouvez vous m'éclairer?
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    1) Notation identique aux classe, pas d'extension properties
    2) Les ressources bundle, ça exite en base en java. Bien que tu puisse fournir ton implémentation, ce n'est pas nécessaire.
    3) Fonctionnement de base des ressourcebundle en java, JSF ne s'en occupe pas. D'ailleurs, un ressource bundle peut aussi bien être sous forme de fichier .properties que sous forme d'une classe. C'est ResourceBundle.getBundle qui se charge de trouver soit le properties, soit la classe de même nom
    4) irrelevant
    5) t'occupe pas du faces-config pour le moment, c'est plus facile avec f:loadBundle. Mais les méthodes sont complémentaires

    En "gros", si tu a des fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    WEB-INF/classes/traductions/Machin_fr.properties
    WEB-INF/classes/traductions/Machin_nl.properties
    WEB-INF/classes/traductions/Machin_en.properties
    WEB-INF/classes/traductions/Machin.properties
    tu mettra dans ton jsf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:loadBundle basename="traduction.Machin" var="mesTraduction"/>

  5. #5
    Membre chevronné

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Par défaut
    Merci beaucoup pour cette réponse très claire.

    Problème résolu
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/03/2014, 21h13
  2. Internationalisation et ResourceBundle
    Par damien77 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 16/09/2007, 23h33
  3. [internationalisation] [ResourceBundle] Exception
    Par moris113 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 01/03/2007, 18h55
  4. Timer de précision
    Par guigui dans le forum MFC
    Réponses: 1
    Dernier message: 04/12/2002, 15h21
  5. [CR] internationalisation d'un report
    Par osoudee dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 24/06/2002, 16h54

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