如何在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) 
+0

啊!好吧..所以我必须将枚举值映射到我的枚举之外的适当字符串,因为这些行根据我在客户端还是服务器端使用枚举而不同。 – Igor

+0

是的,这是正确的。为什么一个枚举要用不同的语言来翻译它?我是解除责任的朋友。 – Peter