2015-08-14 45 views
2

我正在使用GWT i18n製作一個網絡應用程序。在這個應用程序中,我想設置一個自定義屬性文件來支持與主要語言的差異。例如,我有一個en_US語言環境,但我也希望en_US_x_custom支持一些重新定義的屬性字段(BCP 47的規範說我可以使用-x標記來支持專用標記)。GWT:如何使用私人標籤的區域

讓我告訴我有什麼現在:

我有一個接口

public interface TestMsg extends Messages { 
    String value(); 
} 

和幾個屬性文件:

  • TestMsg_en_US.properties
  • TestMsg_en_US_x_custom.properties

app.gwt.xml,我有這樣的線

<inherits name="com.google.gwt.i18n.I18N"/> 
<inherits name="com.google.gwt.i18n.CldrLocales"/> 
<extend-property name="locale" values="en_US"/> 
<extend-property name="locale" values="en_US_x_custom"/> 

然而,問題是,編譯失敗,以下消息:

[ERROR] Type com.google.gwt.i18n.client.impl.LocaleInfoImpl_en_US_X-custom could not be referenced because it previously failed to compile with errors: 
     Tracing compile failure path for type 'com.google.gwt.i18n.client.impl.LocaleInfoImpl_en_US_X-custom' 
     [ERROR] Errors in 'generated://74EF808C0035420F02374EADB97661B8/com/google/gwt/i18n/client/impl/LocaleInfoImpl_en_US_X-custom.java' 
      [ERROR] Line 10: Syntax error on token "-", < expected 
      [ERROR] Line 17: The method getLocaleQueryParam() of type LocaleInfoImpl_en_US_X must override or implement a supertype method 
      [ERROR] Line 10: The public type LocaleInfoImpl_en_US_X must be defined in its own file 
      [ERROR] Line 22: The method getDateTimeFormatInfo() of type LocaleInfoImpl_en_US_X must override or implement a supertype method 
      [ERROR] Line 10: Syntax error, insert "AdditionalBoundList1" to complete TypeParameter1 
      [ERROR] Line 27: The method getNumberConstants() of type LocaleInfoImpl_en_US_X must override or implement a supertype method 
      [ERROR] Line 12: The method getLocaleName() of type LocaleInfoImpl_en_US_X must override or implement a supertype method 
    [ERROR] Errors in 'com/google/gwt/i18n/client/LocaleInfo.java' 
     [ERROR] Line 37: Rebind result 'com.google.gwt.i18n.client.impl.LocaleInfoImpl_en_US_X-custom' could not be found 

如何擺脫這個編譯錯誤的?我該如何解決這個問題?

+0

它不應該是'<擴展屬性名稱=「locale」values =「en_US-x_custom」/>'(注意'en_US'後面的短劃線)以匹配屬性文件嗎?或者相反。無論哪種方式,三重檢查文件名與您在模塊文件中定義的語言環境相匹配。 –

+0

我嘗試了兩種定義方法。隨着你告訴我的方式我有以下錯誤:[錯誤]第13行:無效的屬性值'en_US-x_custom' – Alexander

+1

我看到 - 我只是想確保。那麼,在這種情況下,我打賭這是一個錯誤或GWT不支持的東西。您可以在GWT錯誤跟蹤器上報告它,除非有人在這裏找到解決方案。或者深入挖掘一下:看看生成的類,看看它爲什麼不編譯(有一個開關強制GWT編譯器離開臨時生成的類),參見'LocaleInfoGenerator'類來了解如何生成LocaleInfoImpl類。 –

回答

2

您可以省略-x部分語言環境。然後,您可以指定區域設置爲en_US_custom,並具有名爲TestMsg_en_US_CUSTOM.properties(通知大寫字母)的屬性文件。

+0

它在GWT之前的版本(2.3)中沒有使用-x部分。現在我切換到GWT 2.7並編譯後,我得到以下錯誤:[錯誤]生成器'com.google.gwt.i18n.rebind.LocalizableGenerator'拋出一個異常,同時重新綁定'com.package.TestMsg' java.lang。 IllegalArgumentException:無法識別的區域設置格式:en_US_CUSTOM \t at com.google.gwt.i18n.server.GwtLocaleFactoryImpl.fromString(GwtLocaleFactoryImpl.java:198) – Alexander

+0

奇怪的是,我正在使用GWT 2.7測試它。試着在'GwtLocaleFactoryImpl.fromString()'中設置一個斷點,看看爲什麼這個區域會拋出一個錯誤。它應該被解析爲:'language:en','script:null','region:US','variant:custom'。 – Adam

+0

非常感謝!我使用了更多的簡稱,而不是「自定義」。在GwtLocaleFactoryImpl中,如果((len> = 5 && len <= 8)||(len == 4 && Character.isDigit(part.charAt(0)))))定義了「variant」,那麼在我的情況下,無法識別的區域設置格式「異常。現在它可以工作。 – Alexander