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 :

Bundle et fichier unicode


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut Bundle et fichier unicode
    Bonjour à tous !

    Pour gérer le multilinguisme de mon application, j'utilise le composant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <f:loadBundle basename="monFichier.de.libelles"
    		var="la.var.pour.mon.fichier" />
    Mon problème c'est que je viens de me rendre compte que nativement, il n'arrivait pas à charger des fichiers de libellés unicode (chaque caractère sur deux octets au lieu d'un).

    j'obtiens donc des messages du genre :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    javax.faces.el.EvaluationException: /common/connexion.jsp @17,67 value="#{commonLabels['menu.connexionTitre']}": Exception getting value of property menu.connexionTitre of base of type : com.sun.facelets.tag.jsf.core.LoadBundleHandler$ResourceBundleMap
    	at com.sun.facelets.el.LegacyValueBinding.getValue(LegacyValueBinding.java:60)
    	at javax.faces.component.UIOutput.getValue(UIOutput.java:167)
    	at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getStringValue(RendererUtils.java:223)
    	at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.renderOutput(HtmlTextRendererBase.java:69)
    	at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.encodeEnd(HtmlTextRendererBase.java:57)
    	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:740)
    	at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:242)
    	at com.sun.facelets.tag.jsf.ComponentSupport.encodeRecursive(ComponentSupport.java:239)
    	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:580)
    	at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
    	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:214)
    	at mon.package.util.RecosFacesServlet.service(RecosFacesServlet.java:89)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:100)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:100)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:696)
    	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:474)
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
    	at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:220)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
    	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    	at java.lang.Thread.run(Thread.java:534)
    Caused by: java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key menu.connexionTitre
    	at java.util.ResourceBundle.getObject(ResourceBundle.java:325)
    	at java.util.ResourceBundle.getObject(ResourceBundle.java:322)
    	at com.sun.facelets.tag.jsf.core.LoadBundleHandler$ResourceBundleMap.get(LoadBundleHandler.java:122)
    	at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:81)
    	at com.sun.facelets.el.LegacyELContext$LegacyELResolver.getValue(LegacyELContext.java:141)
    	at com.sun.el.parser.AstValue.getValue(AstValue.java:96)
    	at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:183)
    	at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
    	at com.sun.facelets.el.LegacyValueBinding.getValue(LegacyValueBinding.java:56)
    	... 50 more
    Hors mon appli, doit être traduite en grecque, en russe et en ukrainien !
    Caractère UTF-8 oblige, je suis obligé d'avoir des fichiers unicodes pour que ces caractères soient correctement interprété...

    Précision : mes fichiers contiennent bien les libellés que je cherche à charger... si je remplace le contenu de mon fichier de libellés francais par un fichier non unicode, ca fonctionne

    Je ne trouve pas grand chose sur la toile....

    Merci d'avance pour votre aide !!

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu définis l'encoding de ta page jsp?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="ISO-8859-1" %>
    c'est juste un exemple..

  3. #3
    Membre éclairé Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    je ne peux pas définir l'encodage de cette façon j'utilise facelet avec du xhtml et non des jsp...

    j'ai tenté ces solutions :
    http://www.developpez.net/forums/d51...-jsf-facelets/

    ainsi que
    http://www.developpez.net/forums/d36...facelets-utf8/

    Mais rien n'y fait

    Ca a pourtant fonctionné pendant un temps....

  4. #4
    Membre éclairé Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    Tout à l'air en utf-8 dans mon projet :
    - les fichiers de bundle et mes pages web sont bien enregistré en utf-8
    - j'ai forcé l'encodage du request en UTF-8
    - J'ai également forcé l'encodage de Tomcat en utf-8
    ...

    Et pourtant, mon application continu d'afficher des choses du genre :
    Déconnexion
    plutot que
    Déconnexion

    Si je regarde mes fichiers de bundle avec un éditeur héxadécimal, à l'intérieur, c'est interprété par
    Déconnexion
    Sauf que comme l'encodage du fichier est en utf-8, lorsque je l'ouvre avec un éditeur de texte, le "Déconnexion" est bien interprété en "Déconnexion"

    C'est un peu comme si ma page n'interprétait pas l'utf-8.... et qu'elle m'affichait tout en ISO-8859-1 alors qu'on lui passe bien quelque chose en utf-8

    Pourtant si je vais dans les options d'affichage de mon navigateur et que je regarde la partie "encodage des caractères" je suis bien en UTF-8, c'est que mon entête HTML est correcte

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu as testé sur différents navigateurs?

  6. #6
    Membre éclairé Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    ouep

    Mëme punition sous FF2 et IE6

  7. #7
    Membre éclairé Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    Déjà fait malheureusement
    Citation Envoyé par maloups Voir le message
    - j'ai forcé l'encodage du request en UTF-8
    j'avance un peu dans le problème...
    En fait, j'ai l'impression que mes fichiers bundle sont mal encodé.... enfin, qu'ils n'ont pas le bon type d'encodage....

    Si j'ecrit dans un fichier la lettre é et que je sauvegarde ce fichier en utf-8, en ouvrant ce fichier avec un éditeur hexa, il a convertit le "é" en "é"
    Alors qu'en jouant avec eclipse, j'ai réussis à lui faire convertir le "é" en "é."
    qui du coup s'affiche correctement dans ma page....

    Alors soit il y a plusieurs façon d'encoder du texte en utf-8, soit jsf ne comprend rien à rien
    C'est peut etre moi qui ne comprend rien à rien

    Précision : le problème ne se produit qu'avec le texte provenant de mes bundles!!! si j'écrit du grecque directement dans ma page web, aucun soucis... si j'affiche de texte provenant de ma base de donnée, aucun soucis !!!

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Il y'a un moyen de convertir les fichiers properties en UTF-8,

    native2ascii

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $native2ascii -encoding UTF-8 messages_src.properties > messages_dest.properties

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

Discussions similaires

  1. [debutant] creation d un fichier UNICODE
    Par 83stef dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/10/2007, 18h06
  2. Conversion de fichiers Unicode
    Par Atatorus dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 10/09/2007, 17h13
  3. [VB.NET] Fichiers unicode
    Par cd090580 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/10/2006, 10h25
  4. Convertir un fichier unicode en ansi?
    Par Faiche dans le forum C++
    Réponses: 7
    Dernier message: 06/10/2006, 08h15
  5. Lecture de fichiers Unicode en Perl
    Par papet dans le forum Langage
    Réponses: 1
    Dernier message: 24/07/2006, 10h53

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