Как локализовать значения перечисления в коде клиента 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.
Ответы
Ответ 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