我想在GWT中提出与i18n相关的问题。
我有一个使用UIBinding的Web应用程序,我按照在线指令成功制作了UIBinder i18n。 GWT编译器生成的属性放在以下目录中:
src/main/java/com/google/gwt/i18n/client/LocalizableResource_en.properties
src/main/java/com/google/gwt/i18n/client/LocalizableResource_de.properties
src/main/java/com/google/gwt/i18n/client/LocalizableResource_es.properties
因此,我可以通过在URL的查询字符串中指定“& locale = de”来在Web应用程序中切换语言。
这是问题所在。我有一些其他字符串不适合UiBinder。它们在运行时决定,因此需要动态读取。例如,给定一个文件,我需要锻炼其文件类型并以适当的语言显示文件类型并显示如下内容:
mytextfile.txt -> "TEXT"
“TEXT”这个词需要改变取决于语言。因为我从服务器获取文件并且可以是任何文件,所以我无法将“TEXT”静态绑定到任何翻译密钥中。
问题1:如何在UiBinder中执行此操作?
我知道我可以在不使用UIBinder的情况下完成此操作。我可以使用扩展常量的类并创建getter方法来读取i18n属性文件。但是,问题是在上面的属性文件中,字符串键是MD5字符串。这是由GWT编译器生成的。对于那些不在UiBinder中的属性,没有与它相同的MD5。如何将它们放在属性文件中?
我的属性文件看起来像这样:
952D2C56D0485958336747BCDD98590D=Hello
Apology=Sorry
第一个属性用于UIBinder,第二个属性动态使用。
问题2: 我有没有机会避免这种混合属性的混合方式?使用单独的属性文件或其他东西。
问题3: 另一个问题是: 属性文件当前的命名如上。这是因为一些在线资料说GWT将自动选择属性文件:
com/google/gwt/i18n/client/
和文件名
LocalizableResource_xxxx.properties
我是否可以将此属性文件放在Maven的标准资源目录中并告诉GWT找到它?
非常感谢。
答案 0 :(得分:1)
对于问题1:
我不完全理解这个问题。如果您知道不同的文件类型及其翻译,您可以将它们放在本地化的.properties中吗?
例如你会有
txt=TEXTE
在
LocalizableResource_fr.properties
然后当您更改区域设置时,您只需使用
Constants myConstants = GWT.create(MyConstants.class);
String fileTypeProperlyTranslated = myConstants.txt();
您还可以按照评论中的建议检查"dictionary"和ConstantWithLookup。
对于问题3:
您必须向gwt.xml添加一个包。 假设您将.properties放在com.company.myProject.client包中,那么您应该在gwt.xml中有这个
<entry-point class="com.company.myProject.client.MyEntryPoint" />
<source path="client" />
然后将您的.properties放入符合Maven的src/main/resources/com/company/myProject/client/
您可以配置GWT Maven插件......在您的POM.xml中看起来像这样:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>${gwt-maven-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>i18n</goal>
<goal>...</goal>
...
</goals>
</execution>
</executions>
假设您的属性文件名为Messages_en.properties,Messages_es.properties等,请在“configuration”部分添加以下选项。 (有关更多选项,请参阅gwt-maven-plugin doc)
<configuration>
<module>${gwt.module}</module>
<hostedWebapp>${webappDirectory}</hostedWebapp>
<i18nMessagesBundle>com.company.myProject.client.Messages</i18nMessagesBundle>
<i18nConstantsWithLookupBundle>com.company.myProject.client.DynamicMessages</i18nConstantsWithLookupBundle>
</configuration>
</plugin>
我添加了i18nConstantsWithLookupBundle,假设您有一些DynamicMessages_en.properties,DynamicMessages_es.properties,如果ConstantsWithLookup满足您对问题1的需求。