2010-06-23 4 views
1

Цели: Я хочу использовать jsf`s i18nПроблемы с i18n в JSF 2.0 (украинский и русский)

Сценарий:

создания ресурса расслоение (UTF-8)

Информация

файла:

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

используя его

лицами-конфигурации:

<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> 

в некоторых 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> 

Проблема: В результате я получаю неправильно закодированный текст для этих кнопок.

Я пытался использовать 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> 

Я получил различные символы, но все же не так.

Я сделал I трюк передачи сообщений с:

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 + '!'; 
     } 
    } 
} 

он был успешным, я получил правильный текст, но это некрасиво использовать в JSF. .

информация: Я использую GlassFish v3, Mac OSX (так defaulst не кодирующая latin1 или ISO-8859-1, - не Shure.)

Q1: что может быть причиной проблемы (плохая кодировка для jsf i18n)? [закрыто]

Q2: возможно ли выполнить трюк, например String (значение.getBytes («ISO-8859-1»), «UTF-8») для jsf с помощью maven или фьючерсами jsf ?

Q3: что не так с конфигурацией maven?

Спасибо!

ответ

1

Q1: причина кодировку файла в файловой системе.

Q2: Я не нашел правильного пути для кодирования этих файлов с помощью maven, но jetBrains Idea делает для меня какой-то трюк - в свойствах есть опции кодирования (кодировки файлов) - и есть конфигурация «Кодировка по умолчанию для свойств файлы "- поместите его в UTF-8 и установите ti true флажок" Transparent native-to-ascii conversion " С этой опцией все работает отлично, но это не так, как я думаю, поэтому я сделаю исследование для правильного Конфигурация плагина maven`s native2ascii.

Если кто-то знает, что не так, моя конфигурация, ответьте на Q3.

Спасибо!

1

Я не уверен, как native2ascii в Maven-2 должен работать, но java.util.ResourceBundle действительно по умолчанию читает ресурсы, используя ISO-8859-1. Предполагается, что средство native2ascii создаст новый набор файлов ресурсов кодированного ISO-8859-1 на основе кодированных UTF-8. Я сам назвал все эти UTF-8 файлов свойств message_xx_XX.utf8.properties, а затем использовать командную строку native2ascii инструмента для кодирования их message_xx_XX.properties следующим образом:

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

Это работает для меня.

Смотрите также:

+0

спасибо, что ответите. Похоже, у меня есть конфигурация кровати для maven .. вам нужно будет провести некоторое исследование. В настоящее время я нашел несколько разных способов, но мне это не подходит. se мои обновления и ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^