Estoy usando esta enumeración:
public enum FruitType{
APPLE("1", "Apple"),
ORANGE("2", "Orange"),
BANANA("3", "Banana"),
UNKNOWN("0", "UNKNOWN");
private static final Map<String, FruitType> lookup
= new HashMap<String, FruitType>();
static {
for ( FruitType s : EnumSet.allOf(FruitType.class) )
lookup.put(s.getCode(), s);
}
public static FruitType getById(String id) {
for(FruitType e : values()) {
if(e.Code.equals(id)) return e;
}
return UNKNOWN;
}
private String Code;
private String Text;
FruitType( String Code, String Text ) {
this.Code = Code;
this.Text = Text;
}
public final String getCode() {
return Code;
}
public final String getText() {
return Text;
}
}
Estoy recibiendo un número (0-3) de un servidor, y quiero usar una cadena localizada por usar el método de la enumeración getText ().
textView.setText(FruitType.getById(data.getFruitType()).getText())
¿Cómo puedo utilizar recursos de cadena en el "texto" de la enumeración en lugar de texto estático?
Android ya le ha proporcionado un enfoque bastante sólido para resolver i18n a través de su estructura de directorio de recursos.
En su caso, probablemente es mejor no tener FruitType
directamente relacionada con una cadena, sino más bien un identificador de res:
public enum FruitType {
APPLE("1", R.string.apple),
ORANGE("2", R.string.orange),
BANANA("3", R.string.banana),
UNKNOWN("0", R.string.unknown_fruit);
...
}
A continuación, puede definir un método de conveniencia para obtener el valor de la cadena real de estas enumeraciones, así:
public enum FruitType {
...
public final String getText(Context context) {
return context.getString(this.Text)
}
...
}
Ahora tenemos esta configuración, simplemente proceda con la fresa habitual de declarar múltiples strings.xml
de acuerdo con la configuración regional de destino:
../src/main/res
├── values
│ └── strings.xml
├── values-in
│ └── strings.xml
├── values-th
│ └── strings.xml
└── values-vi
└── strings.xml