GWT:如何避免使用i18n常量指定默认属性文件

时间:2013-08-07 23:09:57

标签: java gwt internationalization

我正在使用GWT i18n创建一个Web应用程序。

我有一个定义

的界面
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" />
    

但是,如果我这样做,我就无法使用查询参数“&amp; locale = de”指定区域设置。我的页面始终保持英文。

  • 添加一个包含相同内容的其他属性文件MyConstants.properties MyConstants_en.properties.It完美无缺。但是,我不想保留具有完全相同内容的MyConstants.properties和MyConstants_en.properties。

    我有什么办法可以:

    1. 使用URL查询参数来控制当前区域设置
    2. 未指定其他属性文件
    3. 成功构建它。

非常感谢。

2 个答案:

答案 0 :(得分: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文件。

希望有帮助...

答案 1 :(得分:0)

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

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

MyConstants.properties

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

如果未显示此文件,我们必须使用@Defaultxxxxxx注释告知GWT默认值。

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

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

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

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