GWT多模块项目中的本地化

时间:2014-04-12 14:39:13

标签: java maven gwt internationalization

我有一个GWT maven webapp项目,它曾经由一个模块组成。由于需求的演变,我需要将一些代码提取到单独的模块中以使它们可重用。到目前为止,这个过程进展顺利,直到我决定提取本地化代码才能在另一个项目中使用它。

我所拥有的是MyAppConstantsMyAppMessages与相应.properties文件的接口,这些文件通过GWT.create()在客户端代码中使用。我将它们移到了单独的模块,添加了Localization.gwt.xml文件,并在pom.xml

中指定了以下内容
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>gwt-maven-plugin</artifactId>
    <configuration>
        <module>com.myapp.Localization</module>
        <!-- Do not compile source files, just check them -->
        <validateOnly>true</validateOnly>
        <!-- i18n -->
        <i18nConstantsBundle>com.myapp.client.MyAppConstants_ru</i18nConstantsBundle>
        <i18nMessagesBundle>com.myapp.client.MyAppMessages_ru</i18nMessagesBundle>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>i18n</goal>
                <goal>resources</goal>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

在主应用程序模块中,我只是继承了Localization.gwt.xml。作为编译的结果,我可以看到.cache.html文件不包含他们曾经拥有的本地化常量和消息(它们看起来像\u0410\u043B...)。我想这是因为GWT编译器在com.myapp.client.MyAppConstants_ru.java文件夹中没有看到源文件(f.e.,.generated),它们通常在成功执行maven插件的i18n阶段后驻留在该文件夹中。相反,它们可以在localization.jar中找到。

我觉得我错过了一些东西,因为这似乎不是一件非常重要的任务。处理这种情况的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

事实证明,为了进行适当的本地化,您需要在GWT编译时在类路径中包含.properties个文件。最初,我将它们从localization.jar中过滤掉了,因为它们的存在导致GWT编译失败,并出现如下消息:

  

重新绑定结果'com.myapp.client.MyAppConstants_ru'必须是一个类

我深入研究gwt-dev.jar内容,发现编译器实际检查了类路径中是否存在本地化属性文件,以确定绑定结果。

所以我的问题解决了:

  • 删除<goal>i18n</goal>模块中的localization和相应配置
  • 确保.properties个文件进入localization.jar

这让我想知道i18n的{​​{1}}目标的用途是什么?