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 :

Les ResourceBundle et l'Arabe


Sujet :

AWT/Swing Java

  1. #1
    SGJ
    SGJ est déconnecté
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 59
    Points : 41
    Points
    41
    Par défaut Les ResourceBundle et l'Arabe
    Bonjour,

    J'utilise les ResourceBundle avec succés. En effet, les menus et messages sont affichés en français ou en anglais selon le locale par défault de l'ordinateur. J'ai décidé d'ajouter une langue: l'Arabe. J'ai donc ajouté un fichier MyApp_ar.properties. Voilà le code :

    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
     
    	try {
                resources = ResourceBundle.getBundle("resources.MyApp",new Locale("ar"));
        	} catch (MissingResourceException mre) 
    		{System.exit(1);}
     
        	try {
     
        	      InputStream in = new ByteArrayInputStream(resources.getString("fileLabel").getBytes("UTF-8" ) );  
        	      InputStreamReader chaine = new InputStreamReader(in, "UTF-8" );  
        	      BufferedReader br = new BufferedReader ( chaine ) ;
        	  	char b[]=new char[100];
        	  	chaine.read(b,0,30);
        		String s=String.valueOf(b);
        	} catch (Exception mre) {}

    Le string s est ensuite affiché sur un JLabel. Le problème est que ce qui est affiché ne ressemble à rien et n'est sûrement pas ce qui est écrit dans le fichier de propriété. Je suis passé sous debugger (sous Eclipse) et j'ai inspecté le contenu de la variable s avec de l'afficher sur le JLabel, même résultat.

    J'ai changé mon code en remplaçant la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InputStream in = new ByteArrayInputStream(resources.getString("fileLabel").getBytes("UTF-8" ) );
    par la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InputStream in = new ByteArrayInputStream(******.getBytes("UTF-8" ) );
    La variable s contient cette fois-ci la bonne chaine en arabe sous le debugger et lorsqu'elle est affichée sur JLabel.

    Est ce possible que les resourcesBundle puissent choisir le bon fichier propriètés mais ne sait pas le lire en unicode ? J'ai du mal à le croire, il y a peut être quelque chose que je n'ai pas compris.

    Merci d'avance.

  2. #2
    SGJ
    SGJ est déconnecté
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 59
    Points : 41
    Points
    41
    Par défaut
    J'ai oublié de mentionner que les ****** désignet un String en arabe, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InputStream in = new ByteArrayInputStream("للسلام".getBytes("UTF-8" ) );

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 858
    Points : 22 891
    Points
    22 891
    Billets dans le blog
    51
    Par défaut
    Je ne sais pas si ca aidera mais les fichiers .properties sont bases sur la version "a plat" des Property (il existe egalement une version XML des Property) et ne sont donc pas en codes en UTF-8 mais en ISO-8859-1 :

    Citation Envoyé par Javadoc de la classe PropertyResourceBundle
    Note: PropertyResourceBundle can be constructed either from an InputStream or a Reader, which represents a property file. Constructing a PropertyResourceBundle instance from an InputStream requires that the input stream be encoded in ISO-8859-1. In that case, characters that cannot be represented in ISO-8859-1 encoding must be represented by Unicode Escapes, whereas the other constructor which takes a Reader does not have that limitation.

  4. #4
    SGJ
    SGJ est déconnecté
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 59
    Points : 41
    Points
    41
    Par défaut
    Merci pour ta réponse.
    J'avais remarqué ce commentaire, mais le problème est qu'il n'existe pas de moyen simple pour forcer les ressourcesbundles à créer une PropertyResourceBundle en utilisant un reader. J'ai l'impression que le seul moyen est de créer un ResourceBundle.Control que j'aurai préféré éviter.

    N'hésitez pas à me corriger si vous connaissez d'autres moyens plus simples.

    C'est à se demander pourquoi la PropertyResourceBundle crée par défault est une option restreinte (ISO code) au lieu que ça soit l'option générale (UNICODE).

    Je vous tiendrai au courant de mes progressions.
    A+

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 858
    Points : 22 891
    Points
    22 891
    Billets dans le blog
    51
    Par défaut
    Ah, ca c'est une bonne question. Tout ce que je sais a l'usage c'est qu'apparament la grosse difference entre les deux encodage c'est l'utilisation de "\u<hexacode>" au lieu de "&#<decimalcode>;". Il ne devrait pas etre trop difficile de faire un programme qui convertisse une ou deux chaines pour tester.

    Sauf bourde de ma part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "للسلام" => "\u0644\u0644\u0633\u0644\u0627\u0645"

  6. #6
    SGJ
    SGJ est déconnecté
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 59
    Points : 41
    Points
    41
    Par défaut
    Finalement, j'ai laissé tombé l'utilisation de ResourcesBundle.control et j'utilise l'utilitaire native2ascii fourni avec java. C'est acceptable pour un fichier de ressource qui ne change pas souvent.

    Merci pour votre aide

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

Discussions similaires

  1. Enlever les diacritiques des mots arabes
    Par bayouta19 dans le forum Langage
    Réponses: 11
    Dernier message: 09/12/2013, 15h44
  2. Réponses: 1
    Dernier message: 11/04/2012, 16h44
  3. lire les fichiers écrits en arabe
    Par maths2002000 dans le forum Debian
    Réponses: 1
    Dernier message: 22/06/2009, 09h32
  4. [MySQL] les bases de données arabe
    Par kawther dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/12/2007, 23h37
  5. Recherche programme qui convertit les chiffres arabes en nb
    Par oli57 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 15/06/2002, 03h11

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