Как локализовать перечисляемые значения в коде клиента GWT? - PullRequest
19 голосов
/ 21 сентября 2010

Я использую класс перечисления в коде моего клиента 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.

Ответы [ 3 ]

24 голосов
/ 21 сентября 2010

Мне удалось решить проблему с помощью интерфейса 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
4 голосов
/ 30 декабря 2011

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

2 голосов
/ 21 сентября 2010

Может быть, это поможет вам, так как кажется, что путь gwt Интернационализация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...