Цель: Я хочу использовать i18n jsf
Сценарий:
создание пакета ресурса (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 знатока
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>
Я получил различные символы, но все еще неправильно.
Я сделал, я обманываю путем передачи сообщений с:
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: действительно ли возможно сделать прием как Строка (value.getBytes ("ISO-8859-1"), "UTF-8") для jsf с помощью знатока или некоторыми jsf фьючерсами?
Q3: что не так с конфигурацией знатока?
Спасибо!
Q1: причина в кодировке файла в файловой системе.
Q2: Я не нашел правильный способ закодировать этот файл с помощью maven, но JetBrains Idea может помочь мне - в свойствах есть параметры кодирования (кодировки файлов) - и есть конфигурация «Кодировка по умолчанию для файлов свойств. "- переместите его в UTF-8 и установите ti true флажок" Прозрачное преобразование native-to-ascii " С этим вариантом все работает идеально, но, как я думаю, это неправильный путь, поэтому я проведу исследование для правильной конфигурации плагина maven native2ascii.
Если кто-то знает, что не так в моей конфигурации, ответьте на вопрос 3.
Спасибо!
Я не уверен, как должен работать 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
Это работает для меня.
См. также: