代码之家  ›  专栏  ›  技术社区  ›  kislo_metal

jsf2.0中i18n的问题(乌克兰语和俄语)

  •  1
  • kislo_metal  · 技术社区  · 16 年前

    脚本:

    文件信息:

     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

    <?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") ;
    

    消息.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,-没有舒尔。)

    问题2:在maven的帮助下或者通过一些jsf的未来,有没有可能为jsf做一个类似字符串(value.getBytes(“ISO-8859-1”),“UTF-8”)的技巧?

    问题3:maven配置有什么问题?

    2 回复  |  直到 14 年前
        1
  •  1
  •   BalusC    16 年前

    我不确定Maven-2中的native2ascii应该如何工作,但是 java.util.ResourceBundle 实际上,默认情况下使用ISO-8859-1读取资源。native2ascii工具应该基于UTF-8编码的资源文件创建一组新的ISO-8859-1编码的资源文件。我自己命名所有这些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
    

    另请参见 :

        2
  •  1
  •   kislo_metal    16 年前

    问题1:原因是文件系统上的文件编码。

    问题2:我还没有找到用maven对这些文件进行编码的正确方法,但是jetBrains的想法为我做了一些技巧——在属性中它有一个编码选项(文件编码)——还有一个配置“属性文件的默认编码”——将其设置为UTF-8,并设置ti true复选框“透明本机到ascii转换” 有了这个选项,一切工作都很完美,但这不是一个正确的方式,因为我认为,所以我将研究右maven的native2ascii插件配置。

    如果有人知道我的配置有什么问题,请在第三季度回答。

    推荐文章