为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Android 中创建多语言枚举?

如何在 Android 中创建多语言枚举?

HUH函数 2023-08-04 16:36:49
我正在使用这个枚举: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;    }}我从服务器获取一个数字 (0-3),并且我想使用本地化字符串来使用枚举的 getText() 方法。textView.setText(FruitType.getById(data.getFruitType()).getText())如何在枚举的“文本”中使用字符串资源而不是静态文本?
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

Android 已经为您提供了一个非常可靠的方法来通过其资源目录结构来解决 i18n 问题。


在您的情况下,最好不要FruitType直接与字符串相关,而是与 res ID 相关:


public enum FruitType {


    APPLE("1", R.string.apple),

    ORANGE("2", R.string.orange),

    BANANA("3", R.string.banana),

    UNKNOWN("0", R.string.unknown_fruit);


    ...

}

然后,您可以定义一个便捷方法来获取这些枚举的实际字符串值,如下所示:


public enum FruitType {


    ...


    public final String getText(Context context) {

       return context.getString(this.Text)

    }


    ...

}

strings.xml现在我们有了这个设置,只需继续根据您的目标区域设置声明多个的常规练习:


../src/main/res

├── values

│   └── strings.xml

├── values-in

│   └── strings.xml

├── values-th

│   └── strings.xml

└── values-vi

    └── strings.xml


查看完整回答
反对 回复 2023-08-04
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信