GWT.create(class) to "instantiate" an interface that
extends Constants returns an instance of an automatically
generated subclass that is implemented using values from a property file
selected based on locale.
Locale is specified at run time using a meta tag or query string as described for Localizable.
Constants
Constants, begin by defining an interface that extends
it. Each interface method is referred to as a constant accessor, and
the name of each constant accessor is assumed to match the name of a property
defined in a properties file. For example,
public interface NumberFormatConstants extends Constants {
/**
* @return the localized decimal separator
*/
String decimalSeparator();
/**
* @return the localized thousands separator
*/
String thousandsSeparator();
}
expects to find properties named decimalSeparator and
thousandsSeparator in an associated properties file. For
example, the following properties would be used for a German locale:
decimalSeparator = , thousandsSeparator = .
The following example demonstrates how to use constant accessors defined in the interface above:
public void useNumberFormatConstants() {
NumberFormatConstants constants = (NumberFormatConstants) GWT.create(NumberFormatConstants.class);
String decimalSep = constants.decimalSeparator();
String thousandsSep = constants.thousandsSeparator();
String msg = "Decimals are separated using '" + decimalSep + "'";
msg += ", and thousands are separated using '" + thousandsSep + "'";
showMessage(msg);
}
It is also possible to change the property name bound to a constant accessor
using the gwt.key doc comment. For example,
public interface NumberFormatConstantsWithAltKey extends Constants {
/**
* @gwt.key fmt.sep.decimal
* @return the localized decimal separator
*/
String decimalSeparator();
/**
* @gwt.key fmt.sep.thousands
* @return the localized thousands separator
*/
String thousandsSeparator();
}
would match the names of the following properties:
fmt.sep.decimal = . fmt.sep.thousands = ,
T methodName()where
T is one of the return types in the following table:
| The property value is interpreted as... | |
|---|---|
String | A plain string value |
String[] | A comma-separated array of strings; use '\\,' to escape
commas |
int | An int value, checked during compilation |
float | A float value, checked during compilation |
double | A double value, checked during compilation |
boolean | A boolean value ("true" or "false"), checked during
compilation |
Map | A comma-separated list of property names, each of which is a key into a generated map; the value mapped to given key is the value of the property having named by that key |
Map, for the following property file:
a = X b = Y c = Z someMap = a, b, cthe constant accessor
someMap() would return a
Map that maps "a" onto "X",
"b" onto "Y", and "c" onto
"Z".
org.example.foo.Intf extends
Constants and the following code is used to create an object
from Intf as follows:
Intf constants = (Intf)GWT.create(Intf.class);then
constants will be assigned an instance of a generated
class whose constant accessors are implemented by extracting values from a
set of matching properties files. Property values are sought using a
best-match algorithm, and candidate properties files are those which (1)
reside in the same package as the interface (org/example/foo/),
(2) have a base filename matching the interface name (Intf),
and (3) have a suffix that most closely matches the locale. Suffixes are
matched as follows:
locale is... | The properties file that binds to
org.example.foo.Intf is... |
|---|---|
| unspecified | org/example/foo/Intf.properties |
x | org/example/foo/Intf_x.properties if it exists and
defines the property being sought, otherwise treated as if
locale were unspecified |
x_Y | org/example/foo/Intf_x_Y.properties if it exists and
defines the property being sought, otherwise treated as if
locale were x |
x and Y are language and locale
codes, as described in the documentation for
Localizable.
Note that the matching algorithm is applied independently for each constant accessor. It is therefore possible to create a hierarchy of related properties files such that an unlocalized properties file acts as a baseline, and locale-specific properties files may redefine a subset of those properties, relying on the matching algorithm to prefer localized properties while still finding unlocalized properties.
com.google.gwt.i18n.I18N.
<module> <!-- other inherited modules, such as com.google.gwt.user.User --> <inherits name="com.google.gwt.i18n.I18N"/> <!-- additional module settings --> </module>