2010-06-23 6 views
1

Objectif: Je veux utiliser jsf`s i18nProblème avec i18n dans JSF 2.0 (Ukrainienne et russe)

Scénario:

bundle création de ressources (utf-8)

Information fichier:

file -I ./messages.properties 
./messages.properties: text/plain; charset=utf-8 

en utilisant par

faces-config:

<application> 
     <locale-config> 
      <default-locale>uk_UA</default-locale> 
      <supported-locale>en_US</supported-locale> 
      <supported-locale>ru_RU</supported-locale> 
     </locale-config>   
     <resource-bundle> 
      <base-name>ua.eset.oasys.hydra.i18n.messages</base-name> 
      <var>i18n</var> 
     </resource-bundle> 
    </application> 

dans certains index.xhtml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:vt="http://java.sun.com/jsf/composite/security"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
</head> 
<body> 

<ui:composition template="layout/template.xhtml"> 
    <ui:define name="top"> 
     <h:form> 
      <h:panelGrid border="4"> 

... 
       <f:view>      
        <h:commandButton value="#{i18n['logout']}" action="#{securityBacking.logout}"/> 
       </f:view> 
      </h:panelGrid> 
     </h:form> 
    </ui:define> 

    ... 

</ui:composition> 

</body> 
</html> 

Problème: En conséquence, je me trompe texte codé pour les boutons.

j'essayé d'utiliser native2asciiin maven

pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <artifactId>oasys</artifactId> 
     <groupId>ua.co.oasys</groupId> 
     <version>1.0</version> 
    </parent> 

    <groupId>ua.co.oasys</groupId> 
    <artifactId>hydra</artifactId> 
    <packaging>war</packaging> 
    <name>Hydra</name> 


    <properties> 
     <project.build.sourceEncoding> 
      UTF-8 
     </project.build.sourceEncoding> 

     <project.reporting.outputEncoding> 
      UTF-8 
     </project.reporting.outputEncoding> 
    </properties> 


    <dependencies> 

     <!-- SL4J API --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.0</version> 
     </dependency> 

     <!-- SLF4J JDK14 Binding --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-jdk14</artifactId> 
      <version>1.6.0</version> 
     </dependency> 

     <!-- Injectable Weld-Logger --> 
     <dependency> 
      <groupId>org.jboss.weld</groupId> 
      <artifactId>weld-logger</artifactId> 
      <version>1.0.0-CR2</version> 
     </dependency> 

     <!--<dependency>--> 
     <!--<groupId>org.jboss.weld</groupId>--> 
     <!--<artifactId>weld-extensions</artifactId>--> 
     <!--<version>1.0.0.Alpha2</version>--> 
     <!--</dependency>--> 
     <!--<dependency>--> 
     <!--<groupId>org.jboss.weld</groupId>--> 
     <!--<artifactId>weld-api</artifactId>--> 
     <!--<version>1.0-CR4</version>--> 
     <!--</dependency>--> 


     <dependency> 
      <groupId>javax.enterprise</groupId> 
      <artifactId>cdi-api</artifactId> 
      <scope>provided</scope> 
      <version>1.0-CR1</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>6.0</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.eclipse.persistence</groupId> 
      <artifactId>javax.persistence</artifactId> 
      <version>2.0.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish</groupId> 
      <artifactId>javax.ejb</artifactId> 
      <version>3.0</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish</groupId> 
      <artifactId>javax.servlet</artifactId> 
      <version>3.0-b70</version> 
      <type>jar</type> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <finalName>hydra</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.0.2</version> 
       <configuration> 
        <encoding>utf8</encoding> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>native2ascii-maven-plugin</artifactId> 
       <version>1.0-alpha-1</version> 
       <configuration> 
        <dest>target/classes</dest> 
        <src>src/main/resources</src> 
       </configuration> 
       <executions> 
        <execution> 
         <id>native2ascii-utf8</id> 
         <goals> 
          <goal>native2ascii</goal> 
         </goals> 
         <!-- specific configurations --> 
         <configuration> 
          <!--<encoding>UTF8</encoding>--> 
          <tasks> 
           <native2ascii encoding="UTF-8" 
               src="." 
               dest="src/main/resources" includes="**/*.properties"> 
            <mapper type="glob" from="*.properties.utf8" 
              to="*.properties"/> 
           </native2ascii> 
          </tasks> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

je suis arrivé symboles différents, mais toujours tort.

Je fis truc I en passant des messages avec:

String (value.getBytes("ISO-8859-1"),"UTF-8") ; 

Messages.java:

public class Messages { 
    private static final String BUNDLE_NAME = "ua.eset.oasys.hydra.i18n.messages"; 
    private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME); 

    private Messages() { 

    } 

    public static String getString(String key) { 
     try { 
      String value = (String) RESOURCE_BUNDLE.getString(key); 
      try { 
        return new String (value.getBytes("ISO-8859-1"),"UTF-8") ; 
      } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
        return null; 
      } 
     } catch (MissingResourceException e) { 
       return '!' + key + '!'; 
     } 
    } 
} 

il a réussi, je me suis un texte valide, mais il est laid à utiliser dans jsf. .

info: J'utilise GlassFish v3, Mac OS X (pour coder defaulst latin1 ou ISO-8859-1, - pas shure.)

Q1: ce qui pourrait être une cause de problème (mauvais codage pour jsf i18n)? [closed]

Q2: est-il possible de faire un truc comme String (value.getBytes ("ISO-8859-1"), "UTF-8") pour jsf avec l'aide de maven ou de certains contrats à terme sur jsf ?

Q3: quel est le problème avec la configuration de maven?

Merci beaucoup!

Répondre

1

Q1: la cause est l'encodage de fichiers sur le système de fichiers. Q2: Je n'ai pas trouvé la bonne façon d'encoder ces fichiers avec maven, mais jetBrains Idea me fait un truc - dans les propriétés il a une option de codage (encodage de fichier) - et il y a la configuration "Codage par défaut pour les propriétés fichiers "- mettez-le à UTF-8 et définissez la case à cocher ti true" conversion native native-à-ASCII " Avec cette option tous fonctionnent parfaitement, mais ce n'est pas une bonne façon que je pense, donc je vais faire des recherches pour le droit Configuration du plugin native2ascii de maven.

Si quelqu'un sait ce qui ne va pas dans ma configuration, veuillez répondre à Q3.

Merci!

1

Je ne sais pas comment native2ascii dans Maven-2 est censé fonctionner, mais le java.util.ResourceBundle lit en effet les ressources en utilisant ISO-8859-1. L'outil native2ascii est supposé créer un nouvel ensemble de fichiers de ressources codés ISO-8859-1 basés sur des fichiers codés en UTF-8. Je me nomme toutes ces propriétés UTF-8 fichiers message_xx_XX.utf8.properties et puis utilisez l'outil native2ascii pour les encoder commandline à message_xx_XX.properties comme suit:

native2ascii.exe -encoding UTF-8 text_xx_XX.utf8.properties text_xx_XX.properties 

Cela fonctionne pour moi.

Voir aussi:

+0

merci de votre réponse. On dirait que j'ai la configuration du lit pour maven .. devra faire quelques recherches à ce sujet. J'ai trouvé un moyen différent actuellement, mais ça ne me convient pas assez. Suis mes mises à jour et réponds. –