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

AWT/Swing Java Discussion :

[ResourceBundle] emplacement du fichier properties


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut [ResourceBundle] emplacement du fichier properties
    Bonjour,

    j'ai un peu honte de poster un problème si bête, mais bon...
    Je veux internationaliser mon application. Pour se faire j'utilise un ResourceBundle comme proposé dans le tuto de sun.
    Je commence tout petit pour bien démarrer, et forcément ça ne marche pas.

    Je me retrouve avec l'erreur suivante :
    Caused by: java.util.MissingResourceException: Can't find bundle for base name fr.statlife.LAM.IHM.MessagesBundle, locale fr_FR
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1427)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1250)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:777)
    at fr.statlife.LAM.IHM.FenetreLAM.setEtatInitial(FenetreLAM.java:154)
    at fr.statlife.LAM.IHM.FenetreLAM.<init>(FenetreLAM.java:117)
    at fr.statlife.LAM.IHM.FacadeIHM.<init>(FacadeIHM.java:33)
    at fr.statlife.LAM.IHM.FacadeIHM.<init>(FacadeIHM.java:31)
    at fr.statlife.LAM.IHM.FacadeIHM$SingletonHolder.<clinit>(FacadeIHM.java:43)
    ... 10 more
    J'ai bien compris qu'il ne trouvait pas mon fichier properties.
    Grâce à ce post, j'ai cru comprendre qu'il fallait que le fichier properties soit nommé du nom de la classe et qu'il faut l'ajouter dans le classpath (mais je suis pas sur car l'auteur du premier message exposant le problème l'a effacé...).
    Donc mon problème vient sans doute de l'utilisation d'éclipse : je débute en Java et avec cet IDE et j'ai du louper un truc.

    J'ai mis mon fichier properties dans un dossier ressources situé à la racine du projet. J'ai donc l'arborescence suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LAM (nom du projet)
    |_src
    |_test
    |_ressources
            |_fr.statlife.LAM.IHM.MessagesBundle_fr_FR.properties
    J'ai ajouté le dossier ressource au classpath via Eclipse en suivant ce qui était indiqué ici

    et dans le code, je récupère le MessageBundle ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //Initialisation des messages a utiliser pour chaque texte de l'appli
    Locale localCourant = new Locale(langue, pays);
    messages = ResourceBundle.getBundle("fr.statlife.LAM.IHM.MessagesBundle", localCourant);
    est ce que le problème vient du nommage du fichier bundle? de son emplacement? ou du classpath?

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    En fait ton problème vient du fait que tu as mis ton ressource bundle dans un arboresence à part (le dossier ressources) qui n'est pas considéré par eclipse comme un dossier source, donc ne l'ajoute pas au classpath.

    Il suffit que tu mettes ton bundle au niveau des classes dans le dossier src et l'affaire sera jouée.

  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,

    Citation Envoyé par zaboug Voir le message
    j'ai cru comprendre qu'il fallait que le fichier properties soit nommé du nom de la classe
    Plus précisément il est interprété comme une classe. D'ailleurs il est possible d'utiliser une classe Java à la place du fichier *.properties.

    J'ai l'impression que tu donne le nom entier "fr.statlife.LAM.IHM.MessagesBundle_fr_FR.properties" à ton fichier, alors que tu devrais avoir un fichier nommé "MessagesBundle_fr_FR.properties" dans le package "fr.statlife.LAM.IHM", c'est à dire le dossier "fr/statlife/LAM/IHM"


    a++

  4. #4
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    merci pour vos réponses.

    il me semblait pourtant avoir testé en mettant le fichier bundle dans le package IHM... mais j'avais pas du l'ajouté au classpath à ce moment là.

    Bref, je suis sur autre chose de plus urgent là, mais dès que j'ai un moment, je teste ça et je reviens mettre un jolie "résolu" à cette discussion

  5. #5
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,

    Plus précisément il est interprété comme une classe. D'ailleurs il est possible d'utiliser une classe Java à la place du fichier *.properties.

    J'ai l'impression que tu donne le nom entier "fr.statlife.LAM.IHM.MessagesBundle_fr_FR.properties" à ton fichier, alors que tu devrais avoir un fichier nommé "MessagesBundle_fr_FR.properties" dans le package "fr.statlife.LAM.IHM", c'est à dire le dossier "fr/statlife/LAM/IHM"
    en effet, c'est ce que j'avais fait. Je suis donc repartie de zero : j'ai mis mon fichier MessagesBundles_fr_FR.properties dans le package fr.statlife.LAM.IHM

    Citation Envoyé par sinok Voir le message
    En fait ton problème vient du fait que tu as mis ton ressource bundle dans un arboresence à part (le dossier ressources) qui n'est pas considéré par eclipse comme un dossier source, donc ne l'ajoute pas au classpath.

    Il suffit que tu mettes ton bundle au niveau des classes dans le dossier src et l'affaire sera jouée.
    ok, mais en mettant juste le fichier bundle au bon endroit (comme dit ci-dessus), j'ai toujours la même erreur...
    le fait de mettre le fichier properties dans le package ne l'ajoute pas directement au classpath?
    dans Eclipse, en cliquant droit sur le fichier, il y a moyen de faire un "add to build path", mais j'ai testé et ça ne marche pas non plus.

    Y'a un truc qui m'échappe...

  6. #6
    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 zaboug Voir le message
    j'ai mis mon fichier MessagesBundles_fr_FR.properties
    Vérifies qu'il n'y ai pas de fautes de frappes. Il n'y avait pas de "s" à "MessagesBundle" dans ton précédent message...


    a++

  7. #7
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    vérification faite : la faute de frappe est dans le post : j'ai bien un fichier MessagesBundle_fr_FR.properties et dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Locale localCourant = new Locale(langue, pays);
    messages = ResourceBundle.getBundle("MessagesBundle", localCourant);
    une autre idée ?

  8. #8
    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
    Mais maintenant c'est ton code qui est différent... puisque tu n'indiques plus le même nom (il n'y a plus de package).

    • Où est ton fichier exactement ?
    • Quel est le code exact que tu utilises ?


    a++

  9. #9
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    je n'ai pas remis le nom du package suite à ton premier message où tu disais que c'était inutile...

    le fichier properties se nomme MessagesBundle_fr_FR.properties
    il est situé dans l'aroborescence suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    projet
      |_src
          |_fr.statlife.LAM.IHM (package)
              |_ MessagesBundle_fr_FR.properties
    Le code exacte que j'utilise est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    	//Constructeur
    	public FenetreLAM()
    	{
    		super();
     
    		//Initialisation de certains des composants
    		this.listeMammos = new JList();
    		this.progessBar = new JProgressBar();
    		this.progessBar.setStringPainted(true);
    		this.listenerProgressionAnalyse = new ProgressListener(progessBar);
    		this.prefs = Preferences.userNodeForPackage(FenetreLAM.class);
     
    		//Initialisation des messages a utiliser pour chaque texte de l'appli
    		String langue = prefs.get("langue", "fr");
    		String pays = prefs.get("pays", "FR");
    		Locale localCourant = new Locale(langue, pays);
    		messages = ResourceBundle.getBundle("MessagesBundle", localCourant);
     
    		//Initialisation et recuperation des preferences de taille et d'etat (etendue ou normal)
    		//de l'application
    		this.setEtatInitial();
    		this.addListeners();
     
    		//Construction de notre fenetre
    		construire();
    	}
    pour faire tout ça, je me suis inspirée du tuto i18n de Java

    le truc que je n'ai pas encore bien compris, c'est s'il faut ajouter le fichier MessagesBundle_fr_FR.properties au classpath ou pas, et si oui, comment (sous Eclipse)?

  10. #10
    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 zaboug Voir le message
    je n'ai pas remis le nom du package suite à ton premier message où tu disais que c'était inutile...
    Je n'ai pas dit que c'était inutile, mais que le nom du package ne doit pas faire parti du nom du fichier *.properties (ce que semble indiqué ton premier message)

    Citation Envoyé par zaboug Voir le message
    le fichier properties se nomme MessagesBundle_fr_FR.properties
    il est situé dans l'aroborescence suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    projet
      |_src
          |_fr.statlife.LAM.IHM (package)
              |_ MessagesBundle_fr_FR.properties
    fr.statlife.LAM.IHM correspond bien à un vrai package (c'est à dire aux répertoire fr/statlife/LAM/IHM) ?

    Si oui tu dois utiliser le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    messages = ResourceBundle.getBundle("fr.statlife.LAM.IHM.MessagesBundle", localCourant);

    Citation Envoyé par zaboug Voir le message
    le truc que je n'ai pas encore bien compris, c'est s'il faut ajouter le fichier MessagesBundle_fr_FR.properties au classpath ou pas, et si oui, comment (sous Eclipse)?
    Non !

    Le classpath ne comporte pas des fichiers simples mais uniquement des emplacements de base (des répertoires ou des archives jar voir zip). Lorsque tu charges une classe "a.b.C" elle sera recherché sous l'arborescence a/b/C.class à partir des différents emplacement du classpath.

    Le principe est le même pour les ressources-bundles, mis à part la gestion des suffixes de langue/pays...

    a++

  11. #11
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Par défaut
    génial ! ça marche

    le fichier était bien au bon endroit et avec le bon nom, mais j'avais pas compris qu'il fallait mettre le nom du package aussi dans le getBundle

    Merci beaucoup pour les explications sur le classpath, je comprend bien mieux maintenant

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

Discussions similaires

  1. ResourceBundle et properties : emplacement des fichiers
    Par HunTR dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 16/04/2010, 22h21
  2. Emplacement du fichier properties
    Par jmnicolas dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 18/06/2008, 10h40
  3. [ResourceBundle] accéder à un fichier properties
    Par sylsau dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 04/12/2007, 22h10
  4. Emplacement Fichiers properties
    Par alexandre7 dans le forum Struts 1
    Réponses: 8
    Dernier message: 19/04/2007, 15h17
  5. Réponses: 5
    Dernier message: 15/09/2006, 14h26

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