Подтвердить что ты не робот

Как локализовать значения перечисления в коде клиента 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 не так важно и может быть отброшено, если это поможет решить проблему.

Я знаю подход ResourceBundle от Java, но это не работает в коде клиента GWT.

4b9b3361

Ответ 1

Мне удалось решить проблему с помощью интерфейса 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

Ответ 2

Я хотел бы добавить к ответу @thommyslaw, что в некоторых случаях вам может потребоваться передать Enums через провод. Я имею в виду сделать их сериализуемыми. В таких случаях включение GWT.create() внутри Enum не будет работать. Здесь вам будет полезен какой-то класс 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 свободным проходить через провод.

Ответ 3

Возможно, это поможет вам, поскольку это похоже на способ gwt Internationalization