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

2022-09-02 12:44:56

我在 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的方法,但这在GWT的客户端代码中不起作用。ResourceBundle


答案 1

我设法通过使用GWT的界面解决了这个问题。解决方案如下:ConstantsWithLookup

我的类型.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

答案 2

我想补充一@thommyslaw答案,在某些情况下,您可能需要通过电线传递枚举。我的意思是使它们可序列化。在这种情况下,将 GWT.create() 放入枚举中将不起作用。以下是某种单例词汇表类将很方便的地方,例如:

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 自由地通过网络。


推荐