1

我正在使用 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. 成功构建它。

非常感谢。

4

2 回答 2

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 文件。

希望有帮助...

于 2013-08-08T05:07:44.400 回答
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") 指定默认语言环境。

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

于 2013-08-08T13:46:34.407 回答