我正在使用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。
我有什么办法可以:
非常感谢。
答案 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”)指定默认语言环境。
这允许我的代码在没有默认属性文件的情况下干净地编译。