簡體   English   中英

GWT:在UiBinder中動態使用i18n

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM