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

Collection et Stream Java Discussion :

MissingRessourceException en utilisant un ResourceBundle


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut MissingRessourceException en utilisant un ResourceBundle
    Bonjour,
    a peine prétentieux, je me dit que mon programme pourrait intéresser aussi bien des anglais, des français, des danois et j'en passe, je me suis donc un peu penché sur l'internationalisation et l'utilisation de ResourceBundle.
    Vous vous en doutez ça marche pas comme je voudrais (voir pas du tout en fait).
    Je souhaite faire un MakeReseau (ça c'est ma classe) et j'ai donc fait un fichier MakeReseauRessourcesBundle_fr_FR.properties qui se présente comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    echelle = échelle
    unite = unité
    precision = précision
    dimension = dimension
    largeur = largeur
    profondeur = profondeur
    defaut = réseau par défaut ?
    Il est enregistré dans le même répertoire que le fichier MakeReseau.class

    Le code du MakeReseau (enfin la partie qui pose probleme):
    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
     
    public class MakeReseau {
     
    	private ResourceBundle ressources;
     
    	public MakeReseau(Locale malocale){
    		try{
    		ressources=ResourceBundle.getBundle("MakeReseauRessourcesBundle",malocale);}
     
    		catch (Exception e){
    //juste pour obtenir le stackTrace dans un fichier car des fois c'est trop long pour le lire en entier sur la console ;)
    			System.out.println("exception 1");
         		        String cheminEntre="erreur1.txt";
    			cheminEntre=cheminEntre.replace('/', File.separatorChar);
    			File entre = new File(cheminEntre);
    			try{
    				PrintStream fileout = new PrintStream(entre);
        			        e.printStackTrace(fileout);
       		 		fileout.flush();
        			        fileout.close();
    			}
    			catch (Exception ex3){System.out.println("exception fichier");}}
    	}
     
    }
    et voici ce que je recupere dans mon fichier erreur1.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    java.util.MissingResourceException: Can't find bundle for base name MakeReseauRessourcesBundle, locale fr_FR
    	at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1508)
    	at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1262)
    	at java.util.ResourceBundle.getBundle(ResourceBundle.java:789)
    	at rails.graphique.MakeReseau.<init>(MakeReseau.java:18)
    	at Desktop.<init>(Desktop.java:70)
    	at Desktop.main(Desktop.java:20)
    Le Desktop est un bout de code qui me permet de tester mes composants au fur et a mesure il est dans le package par defaut de l'application.
    dedans je fais juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Locale maLocale = new Locale("fr","FR");
    MakeReseau mk = new MakeReseau(maLocale);
    //etc
    la ligne 70 correspond a cet appel et la ligne 18 de MakeReseau correspond a la ligne try.
    J'ai essayé en baladant mon fichier MakeReseauRessourcesBundle_fr_FR.properties un peu partout mais ça ne change rien...
    D'où vient le problème : les _ qui ne devrait pas être là, le fichier qui n'est pas au bon endroit ?
    merci d'avance pour vos lumières,

    Bon code,
    kerinel

  2. #2
    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,


    getBundle() attend un nom de classe, c'est à dire comprenant le package :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ressources=ResourceBundle.getBundle("rails.graphique.MakeReseauRessourcesBundle",malocale);
    Plus d'info dans la doc

    a++

  3. #3
    Membre confirmé Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut
    Bonjour,
    merci de la réponse rapide. Mais mon fichier n'est pas une classe non ?

    J'ai vu qu'il y avait aussi moyen de faire un truc comme ça :
    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
     
    package rails.graphique;
    import java.util.*;
     
    public class MakeReseauRessourcesBundle_fr_FR extends ListResourceBundle{
     
    	public Object[][] getContents(){
    		return contents;
    	}
     
    	private Object [][] contents ={
    		{"echelle","échelle"},
    		{"unite","unité"},
    		{"precision","précision"}
    	};
    }
    C'est donc un véritable objet qui est utilisé, mais la première version me semblait plus légère et donc plus simple (avec la seconde, on commence à rentrer dans l'introspection non ?).
    Au passage c'est quoi l'intérêt de cette seconde méthode ?

    Bon je teste avec le chemin complet ce soir, merci bien. Si c'est ça, c'est encore mieux car je pourrais faire un répertoire avec juste les ressources. Encore plus propre...

    Bon code
    kerinel

  4. #4
    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 kerinel Voir le message
    merci de la réponse rapide. Mais mon fichier n'est pas une classe non ?
    En effet, mais dans la doc il est bien indiqué que getBundle() recherche une classe ou un fichier properties.

    Donc "rails.graphique.MakeReseauRessourcesBundle" avec la locale fr_FR recherchera les classes suivantes :
    • rails.graphique.MakeReseauRessourcesBundle_fr_FR
    • rails.graphique.MakeReseauRessourcesBundle_fr
    • rails.graphique.MakeReseauRessourcesBundle

    Mais également les fichiers properties suivant :
    • /rails/graphique/MakeReseauRessourcesBundle_fr_FR.properties
    • /rails/graphique/MakeReseauRessourcesBundle_fr.properties
    • /rails/graphique/MakeReseauRessourcesBundle.properties


    Tu peux utiliser une classe ou un fichier properties


    Citation Envoyé par kerinel Voir le message
    Au passage c'est quoi l'intérêt de cette seconde méthode ?
    Tu peux étendre ResourceBundle ou une de ses classes filles comme ListResourceBundle pour récupérer les informations de localisations depuis une autre source qu'un fichier properties... ou pour pallier ses défauts (encodage ISO-8859-1 pas très sympathique avec certaines locales).

    Par exemple pour récupérer les chaines localisées directement depuis une base de données, ou bien pour utiliser un format de fichier différents (pratique si tu dois porter une application localisé avec un format spécifique de fichier de langue). Mieux avec la classe ResourceBundle.Control de Java 6 tu peux faire cela de manière totalement transparente...


    Mais dans la plupart des cas les fichiers properties sont amplement suffisant


    a++

  5. #5
    Membre confirmé Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut
    Super, ça fonctionne. Il ne me reste plus qu'à apprendre le Danois
    Effectivement pour l'usage que je veux en faire je pense que le fichier properties sera amplement suffisant.
    Bon je vais poser une autre question (dans un autre topic bien sur )

    bon code,
    kerinel

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2010, 12h29
  2. comment utilise le ResourceBundle
    Par Saif_24 dans le forum JSF
    Réponses: 3
    Dernier message: 11/03/2010, 18h41
  3. Utilisation de ResourceBundle.getBundle()
    Par laurentze dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 08/03/2010, 16h50
  4. Comment utiliser plusieurs ResourceBundle avec struts-menu ?
    Par m.ben.hamida dans le forum Struts 1
    Réponses: 5
    Dernier message: 18/02/2008, 12h14
  5. Réponses: 3
    Dernier message: 02/08/2006, 13h59

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