如何在GWT共享包中使用本地化常量

如何在GWT共享包中使用本地化常量,gwt,Gwt,我正试图重写几个月前编写的GWT应用程序。不过,应用程序视图逻辑已经过时,我还有其他理由重写它 然而,后端保持不变,并且可以正常工作 我的问题是项目的总体组织。我有客户端、服务器和共享包。客户端包含编译成JavaScript的与客户端相关的类,服务器包含发布到服务器上的Java类。 我在客户端使用常量接口,在服务器端使用属性文件。 我在共享包中有DTO和一些枚举,因为它们在客户端和服务器端都使用。虽然DTO不需要任何类型的翻译,因为它们只保存填充的信息,但枚举确实需要它们。 我的一个枚举如下所示

我正试图重写几个月前编写的GWT应用程序。不过,应用程序视图逻辑已经过时,我还有其他理由重写它

然而,后端保持不变,并且可以正常工作

我的问题是项目的总体组织。我有客户端、服务器和共享包。客户端包含编译成JavaScript的与客户端相关的类,服务器包含发布到服务器上的Java类。 我在客户端使用常量接口,在服务器端使用属性文件。

我在共享包中有DTO和一些枚举,因为它们在客户端和服务器端都使用。虽然DTO不需要任何类型的翻译,因为它们只保存填充的信息,但枚举确实需要它们。 我的一个枚举如下所示:

公共枚举项族{
装甲(0,“A”,“装甲”),
珠宝(1,“J”,“珠宝”),
材料(2,“M”、“材料”),
配方(3,“R”,“配方”),
武器(4,“W”、“武器”);
私有最终int id;
私有最终字符串标签;
私有最终字符串名;
ItemFamily(最终整型id、最终字符串标签、最终字符串名称){
this.id=id;
this.label=标签;
this.name=名称;
}
公共int getId(){
返回id;
}
公共字符串toString(){
退货标签;
}
公共字符串getName(){
返回名称;
}
公共静态ItemFamily fromString(最终字符串str){
对于(ItemFamily e:ItemFamily.values()){
if(例如toString().equalsIgnoreCase(str)){
返回e;
}
}
返回null;
}
公共静态ItemFamily fromId(最终整数id){
对于(ItemFamily e:ItemFamily.values()){
如果(e.id==id){
返回e;
}
}
返回null;
}
}
我想用常量替换“盔甲”、“珠宝”、“食谱”等,这些常量将根据客户端应用程序所需的区域设置进行调整。但是:如果我将枚举与客户端常量接口绑得太紧,那么在服务器端使用枚举时可能会遇到问题,对吗

任何关于翻译共享内容的适当方式的想法都是非常受欢迎的。非常感谢您的阅读和帮助


附言:如果这个问题在什么地方被提到过,请原谅。我搜索了开发者指南(国际化)和stackoverflow。但是我没有找到合适的解决方案。

问题是您希望在服务器和客户端使用相同的属性文件,对吗

我也有同样的问题

我所做的:

  • 我使用com.google.gwt.i18n.client.ConstantsWithLookup接口而不是com.google.gwt.i18n.client.Constants来查找enum dynamicali的翻译
  • 在服务器端,您可以将ResourceBundle配置为使用相同的属性文件
在客户端使用ConstantsWithLookup实现,在服务器端使用消息包。因此,枚举不依赖于任何转换代码

客户端:

    String translation = const.getString(yourEnum.name())
服务器端:

    String translation = messageSource.getMessage(yourEnum.name(), null, clientLocale)

啊!!好吧因此,我必须使用枚举之外的方法将枚举值映射到相应的字符串,因为这些行是不同的,这取决于我是在客户端使用枚举还是在服务器端使用枚举。是的,没错。为什么enum应该知道它在不同语言中的翻译?我是你的朋友。