我在GWT客户端的代码中使用枚举类来定义一组类型。
public enum MyType {
FIRST_TYPE("first"), SECOND_TYPE("second"), THIRD_TYPE("third");
private String title;
private MyType(String title) {
this.title = title;
}
public String getTitle() {
return this.title;
}
}
如何将枚举值本地化以将其翻译成不同的语言? title
字段并不重要,如果这有助于解决问题,则可以删除。
我知道来自Java的ResourceBundle
方法,但这在GWT的客户端代码中不起作用。
答案 0 :(得分:24)
我设法通过使用GWT的ConstantsWithLookup
接口来解决问题。
这是解决方案:
MyType.java
public enum MyType {
FIRST_TYPE, SECOND_TYPE, THIRD_TYPE;
private final MyConstantsWithLookup constants = GWT.create(MyConstantsWithLookup.class)
public String getTitle() {
return this.constants.getString(this.name());
}
}
MyConstantsWithLookup.java
public interface MyConstantsWithLookup extends ConstantsWithLookup {
String FIRST_TYPE();
String SECOND_TYPE();
String THIRD_TYPE();
}
MyConstantsWithLookup.properties
FIRST_TYPE = first
SECOND_TYPE = second
THIRD_TYPE = third
答案 1 :(得分:4)
我想补充@thommyslaw的回答,在某些情况下,您可能需要通过电汇传递枚举。我的意思是让它们可序列化。 在这种情况下,在Enum中放置GWT.create()将不起作用。 这里有一些Singleton Glossary类很方便,比如:
public class LEGlossary {
private static LEGlossary instance=null;
private static final LocalizationEnum localConstants=GWT.create(LocalizationEnum.class);
private LEGlossary(){
}
public static LEGlossary instance(){
if(instance==null){
instance=new LEGlossary();
}
return instance;
}
public String localizedValue(Enum<?> value){
return localConstants.getString(value.name());
}
}
在我的案例中, LocalizationEnum 扩展了 ConstantsWithLookup 界面。 通过这种方式,您可以在客户端上隔离本地化代码,并使Enum可以通过线路自由传递。
答案 2 :(得分:2)
也许这会对你有所帮助,因为它似乎是gwt方式Internationalization