我正在尝试重写几个月前写过的GWT应用程序。应用程序视图逻辑已经过时,我还有其他理由重写它。
然而,后端保持不变并且有效。我的问题是项目的一般组织。我有客户端,服务器和共享包。客户端包含编译为JavaScript的客户端相关类,服务器包含发布到服务器上的Java类。 我在客户端使用Constants接口,在服务器端使用属性文件。
我在共享包中有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;
}
}
我想用常量替换“Armor”,“Jewelry”,“Recipes”等,这将根据客户端应用程序所需的区域设置进行调整。但是:如果我将枚举紧密地绑定到客户端 - Constants接口,那么在使用服务器端的枚举时可能会遇到麻烦,对吗?
关于翻译共享内容的适当方式的任何想法都非常受欢迎。非常感谢你阅读并帮助我!
P.s。:如果某个地方已经涵盖了这个问题,请原谅。我搜索了开发人员指南(国际化)以及stackoverflow。我找不到合适的解决方案。
答案 0 :(得分:1)
问题是你想在服务器和客户端使用相同的属性文件吗?
我遇到了同样的问题。
我做了什么:
在客户端,您使用ConstantsWithLookup实现,在服务器端使用消息包。因此,您的枚举不依赖于任何翻译代码。
客户方:
String translation = const.getString(yourEnum.name())
服务器端:
String translation = messageSource.getMessage(yourEnum.name(), null, clientLocale)