【问题标题】:GWT: How to avoid specify default property file using i18n ConstantsGWT:如何避免使用 i18n 常量指定默认属性文件
【发布时间】:2013-08-07 23:09:56
【问题描述】:

我正在使用 GWT i18n 制作一个网络应用程序。

我有一个定义的接口

public interface MyConstants extends Constants {
    String value();
}

和三个属性文件:

MyConstants_en.properties
MyConstants_es.properties
MyConstants_de.properties

当我编译这段代码时,它给了我错误:

[INFO]             Processing interface com.mycompany.myproject.client.i18n.MyConstants
[INFO]                Generating method body for value()
[INFO]                   [ERROR] No resource found for key 'value'

有两种方法可以解决这个问题,

  • 将以下行添加到 GWT 模块定义“.gwt.xml”文件中:

       <set-property name="locale" value="en" />
    

但是,如果这样做,我将无法使用查询参数“&locale=de”指定语言环境。我的页面始终保持为英文。

  • 添加一个附加的属性文件 MyConstants.properties,其中包含与 MyConstants_en.properties.它完美地工作。但是,我不想同时保留具有完全相同内容的 MyConstants.properties 和 MyConstants_en.properties。

    我有什么办法:

    1. 使用 URL 查询参数控制当前语言环境
    2. 不指定附加属性文件
    3. 成功构建它。

非常感谢。

【问题讨论】:

    标签: java gwt internationalization


    【解决方案1】:

    GWT 开箱即用,配置了他们所谓的“默认”区域设置,其中包含一些非常基本的本地化设置。默认语言环境正在寻找您的 MyConstants.properties 文件。如果您希望“默认”区域设置为 MyConstants_en.properties,请对您的 gwt.xml 模块文件进行以下调整。

    <!-- inherit these modules to activate GWT internationalization -->
    <inherits name='com.google.gwt.i18n.I18N' />
    <inherits name="com.google.gwt.i18n.CldrLocales"/>
    
    <!-- add the various locales you wish to support -->
    <extend-property name="locale" values="en"/>
    <extend-property name="locale" values="es"/>
    <extend-property name="locale" values="de"/>
    
    <!-- instructs the application use this locale when there is no locale specified (i.e. replaces the default) -->
    <set-property-fallback name="locale" value="en" />
    

    通过将“set-property-fallback”设置为“en”,应用程序将使用您的 MyConstants_en.properties 文件。

    希望对您有所帮助...

    【讨论】:

    • 感谢您的回复。不幸的是,这不起作用。我可以使用 将默认语言环境设置为 en。但是如果我这样做,我将无法从查询字符串中更改语言环境。
    • @Kevin 我认为你误解了这个例子。不要使用 。您会将您的语言环境“锁定”为“en”。我的例子根本没有这样做。相反,通过使用“扩展属性”,您告诉 GWT 扩展您的语言环境以支持“en,es,de”。通过设置“set-property-fallback”,您告诉 GWT 在浏览器/查询字符串没有指定语言环境时使用指定的语言环境,而不是使用“默认”语言环境(这是内置的)。有意义吗?
    【解决方案2】:

    我已经弄清楚发生了什么。

    我认为 GWT 在编译时会做一些事情来确保常量始终具有默认值。对此的标准方法是定义一个默认属性文件,在我的例子中:

    MyConstants.properties
    

    即使它包含相同的 MyConstants_en.properties 值。

    如果这个文件没有出现,我们必须使用@Defaultxxxxxx注解告诉GWT默认值。

    在我的例子中,我必须提供:

    @LocalizableResource.DefaultLocale("en")
    public interface MyConstants extends Constants {
        @DefaultStringValue("Hello")
        String value();
    }
    

    我还将在 Constant 接口声明中使用 @LocalizableResource.DefaultLocale("en") 指定默认语言环境。

    这允许我的代码在没有默认属性文件的情况下干净地编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多