[英]GWT: Using i18n in UiBinder and dynamically
我想問一個有關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”靜態綁定到任何轉換鍵中。
問題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在那里找到?
非常感謝。
對於問題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等,在“配置”部分中添加以下選項。 (有關更多選項,請參見gwt-maven-plugin文檔)
<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,假設如果ConstantsWithLookup滿足您對問題1的需求,則您有一些DynamicMessages_en.properties,DynamicMessages_es.properties。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.