如何在GWT共享包中使用本地化常量
问题描述:
我正在尝试重写几个月前写过的GWT应用程序。那个应用程序查看逻辑已经过时了,我还有其他的理由来重写它。如何在GWT共享包中使用本地化常量
然而,后端保持不变并且有些作品。我的问题是项目的总体组织。我有客户端,服务器和共享软件包。客户端包含编译为JavaScript的客户端相关类,服务器包含发布到服务器上的Java类。 我在客户端使用Constants-interface,在服务器端使用属性文件。
我在共享包中有DTO和一些枚举,因为它们在客户端和服务器端都使用。虽然DTO不需要任何翻译,因为它们只保存填充的信息,所以列举确实需要它们。 我列举的一个看起来是这样的:
public enum ItemFamily {
ARMORS(0, "A", "Armor"),
JEWELRY(1, "J", "Jewelry"),
MATERIALS(2, "M", "Materials"),
RECIPES(3, "R", "Recipes"),
WEAPONS(4, "W", "Weapons");
private final int id;
private final String label;
private final String name;
ItemFamily(final int id, final String label, final String name) {
this.id = id;
this.label = label;
this.name = name;
}
public int getId() {
return id;
}
public String toString() {
return label;
}
public String getName() {
return name;
}
public static ItemFamily fromString(final String str) {
for (ItemFamily e : ItemFamily.values()) {
if (e.toString().equalsIgnoreCase(str)) {
return e;
}
}
return null;
}
public static ItemFamily fromId(final int id) {
for (ItemFamily e : ItemFamily.values()) {
if (e.id == id) {
return e;
}
}
return null;
}
}
我想用常数取代“甲”,“珠宝”,“配方”等,这将取决于由需要什么样的区域调整客户端应用程序。但是,如果我将枚举过于紧密地绑定到客户端 - 常量接口上,那么在服务器端使用枚举时可能遇到麻烦,对吗?
任何关于翻译共享内容的适当方式的想法都非常受欢迎。非常感谢您阅读和帮助我!
P.s .:如果这个问题已经覆盖某处,我请求原谅。我已经搜索了开发者指南(国际化)以及*。但我没有找到合适的解决方案。
答
问题是你想在服务器和客户端使用相同的属性文件吗?
我有同样的问题。
我做了什么:
- 我用com.google.gwt.i18n.client.ConstantsWithLookup接口,而不是com.google.gwt.i18n.client.Constants以查找翻译为枚举动态。
- 在服务器端,您可以将ResourceBundle配置为使用相同的属性文件。
在客户端,您使用ConstantsWithLookup实现,并在服务器端使用消息包。因此,你的枚举不依赖于任何翻译代码。
客户端:
服务器端:
String translation = messageSource.getMessage(yourEnum.name(), null, clientLocale)
啊!好吧..所以我必须将枚举值映射到我的枚举之外的适当字符串,因为这些行根据我在客户端还是服务器端使用枚举而不同。 – Igor
是的,这是正确的。为什么一个枚举要用不同的语言来翻译它?我是解除责任的朋友。 – Peter