i18n 常量
常量
本示例将逐步介绍在您的 GWT 应用程序中创建一组国际化常量字符串“hello, world”和“goodbye, world”的过程。该示例将创建一个名为MyConstants
的 Java 接口,用于抽象化这些字符串。您可以在 GWT 代码中引用MyConstants
方法,当您想要向用户显示这些字符串之一时,这些字符串将针对所有具有匹配.properties
文件的语言环境进行适当的翻译。
首先,在您的 GWT 项目中创建一个名为MyConstants.properties
的默认属性文件。您可以将该文件放置在模块源路径中的任何位置,但.properties
文件和相应的接口必须在同一个包中。将该文件放置在与模块入口点类相同的包中是可以的。
helloWorld = hello, world
goodbyeWorld = goodbye, world
您还可以为每个支持的语言环境创建本地化翻译,并将它们存储在单独的属性文件中。属性文件的命名必须与我们的接口名称相同(在本例中为MyConstants
),并添加适当的后缀以指示语言环境设置。在本例中,我们使用文件名MyConstants_es.properties
对西班牙语进行本地化。
helloWorld = hola, mundo
goodbyeWorld = adi?s, mundo
现在,定义一个接口,通过扩展内置的Constants
接口来抽象化这些字符串。在创建.properties
文件的同一个包中创建一个新的 Java 接口。方法名称必须与.properties
文件中使用的标签名称匹配。
public interface MyConstants extends Constants {
String helloWorld();
String goodbyeWorld();
}
提示:i18nCreator 工具可自动生成 Constants 接口的子接口(如上所示)。该工具会生成 Java 代码,这样您只需维护.properties
文件即可。它也适用于ConstantsWithLookup
和Messages
类。
请注意,MyConstants
声明为接口,因此您无法使用new
直接实例化它。要使用国际化常量,您可以使用GWT.create(Class)功能创建MyConstants
的 Java 实例。
public void useMyConstants() {
MyConstants myConstants = GWT.create(MyConstants.class);
Window.alert(myConstants.helloWorld());
}
您无需担心静态字符串类的 Java 实现。静态字符串初始化使用延迟绑定生成器,该生成器允许 GWT 编译器根据语言环境自动生成实现Constants
子接口所需的 Java 代码。
ConstantsWithLookup
ConstantsWithLookup接口与Constants
相同,只是它还包含一个方法,用于按属性名称查找字符串,这便于在运行时按名称动态绑定到常量。ConstantsWithLookup
在高度数据驱动的应用程序中可能会有用。但需要注意的是,ConstantsWithLookup
的效率低于Constants
,因为编译器无法丢弃未使用的常量方法,从而导致应用程序变大。
使用注解
此处讨论的注解是特定于Constants
和ConstantsWithLookup
的 - 有关共享注解,请参阅主要国际化页面。
方法注解
以下注解适用于Constants
子类型的中的方法,并且必须与方法的返回类型相对应。它们提供了一种类型安全的引用常量的方式,并且可以包含 Java 编译时常量引用。
@DefaultBooleanValue(boolean val)
设置返回boolean
的方法的默认值。@DefaultDoubleValue(double val)
设置返回double
的方法的默认值。@DefaultFloatValue(float val)
设置返回float
的方法的默认值。@DefaultIntValue(int val)
设置返回int
的方法的默认值。@DefaultStringArrayValue({String str, ...})
设置返回String
数组的方法的默认值。@DefaultStringMapValue({String key, String value, ...})
设置返回Map<String,String>
或原始映射(它仍然是String=>String
映射)的方法的默认值。提供的值的个数必须是偶数,每对中的第一个条目是键,第二个条目是值。@DefaultStringValue(String str)
设置返回String
的方法的默认值。
使用属性文件
Constants
和ConstantsWithLookup
的属性文件格式很简单,就是key=value
,但有一些需要注意的地方。
#
必须转义,因为它是一个注释字符。- 当方法的类型为
String[]
时,使用 ASCII 逗号来分隔值,这意味着值中包含的任何逗号都必须用反斜杠转义。另外,要注意翻译人员是否使用其他字符来分隔翻译后的值。 - 对于
Map
值方法,该方法在属性文件中的条目将是一组用逗号分隔的键,然后这些键将有自己的条目以及它们关联的值。例如
Map<String,String> colorMap();
colors=header, body, footer
header=red
body=white
footer=blue
将生成一个映射{ header=>red, body=>white, footer=>blue }
。