我有一个GWT maven webapp项目,它曾经由一个模块组成。由于需求的演变,我需要将一些代码提取到单独的模块中以使它们可重用。到目前为止,这个过程进展顺利,直到我决定提取本地化代码才能在另一个项目中使用它。
我所拥有的是MyAppConstants
和MyAppMessages
与相应.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
中找到。
我觉得我错过了一些东西,因为这似乎不是一件非常重要的任务。处理这种情况的正确方法是什么?
答案 0 :(得分:1)
事实证明,为了进行适当的本地化,您需要在GWT编译时在类路径中包含.properties
个文件。最初,我将它们从localization.jar
中过滤掉了,因为它们的存在导致GWT编译失败,并出现如下消息:
重新绑定结果'com.myapp.client.MyAppConstants_ru'必须是一个类
我深入研究gwt-dev.jar
内容,发现编译器实际检查了类路径中是否存在本地化属性文件,以确定绑定结果。
所以我的问题解决了:
<goal>i18n</goal>
模块中的localization
和相应配置.properties
个文件进入localization.jar
这让我想知道i18n
的{{1}}目标的用途是什么?