Android:enums,其值可以转换为其他语言环境



假设我有以下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());

相关内容

  • 没有找到相关文章

最新更新