假设我有以下enum
:
public enum Feelings {
happy("label1"),sad("label2")
private final String name;
private Feelings(String s) {
name = s;
}
public boolean equalsName(String otherName) {
return (otherName == null) ? false : name.equals(otherName);
}
public String toString() {
return name;
}
}
当我调用它的.toString()
时,它返回为不同枚举定义的标签。我在UI上使用这些标签,它们将显示给用户。
当我考虑用不同的语言环境发布我的应用程序时,我想到了如何定义这些标签,以便将它们翻译成其他语言?
应该与在枚举之外处理本地化的方式没有太大区别。只需要传递参考资料。所以类似于:
public enum Feelings {
happy(R.string.happy),
sad(R.string.sad)
private final int nameId;
private Feelings(int nameId) {
this.nameId = nameId;
}
public String toString(Resources res) {
return res.getString(nameId);
}
}
您可以使用字符串资源id,而不是在枚举中设置标签的实际值。
public enum Feelings {
happy(R.string.happy_label), sad(R.string.sad_label);
private final int strId;
private Feelings(int strId) {
this.strId = strId;
}
@StringRes public int getStringId() {
return strId;
}
}
通过这种方式,Android将根据设备的区域设置选择正确的字符串翻译
您的使用情况可能如下所示:
textView.setText(Feelings.happy.getStringId());