如何在GWT客户端代码中本地化枚举值?
我在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的客户端代码中不起作用。
我设法通过使用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
我想补充@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可以通过线路自由传递。
也许这会对你有所帮助,因为它似乎是gwt方式的国际化