如何在GWT客户端代码中本地化枚举值?

时间:2010-09-21 05:45:48

标签: java 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的客户端代码中不起作用。

3 个答案:

答案 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