java - google - gwt tutorial
¿Cómo localizar valores de enumeración en el código del cliente GWT? (3)
Logré resolver el problema usando la interfaz ConstantsWithLookup
de GWT. Aquí está la solución:
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
Estoy usando una clase de enumeración en el código de mi cliente GWT para definir un conjunto de tipos.
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;
}
}
¿Cómo es posible localizar los valores de enumeración para traducirlos a diferentes idiomas? El campo del title
no es tan importante y podría eliminarse si esto ayuda a resolver el problema.
Conozco el enfoque de ResourceBundle
de Java, pero eso no funciona en el código de cliente de GWT.
Me gustaría agregar a la respuesta de @thommyslaw que en algunos casos es posible que tenga que pasar los Enums a través del cable. Me refiero a hacerlos serializables. En tales casos, poner GWT.create () dentro del Enum no funcionará. Aquí es donde algún tipo de clase de glosario Singleton será útil, como:
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());
}
}
Donde LocalizationEnum en mi caso extiende la interfaz ConstantsWithLookup . De esta manera, aísla el código de localización en el cliente y deja el Enum libre para pasar por el cable.
Tal vez esto te ayude, ya que parece ser la forma de Internationalization