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

我正在使用这个枚举:


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())

如何在枚举的“文本”中使用字符串资源而不是静态文本?


HUH函数
浏览 87回答 1
1回答

12345678_0001

Android 已经为您提供了一个非常可靠的方法来通过其资源目录结构来解决 i18n 问题。在您的情况下,最好不要FruitType直接与字符串相关,而是与 res ID 相关:public enum FruitType {&nbsp; &nbsp; APPLE("1", R.string.apple),&nbsp; &nbsp; ORANGE("2", R.string.orange),&nbsp; &nbsp; BANANA("3", R.string.banana),&nbsp; &nbsp; UNKNOWN("0", R.string.unknown_fruit);&nbsp; &nbsp; ...}然后,您可以定义一个便捷方法来获取这些枚举的实际字符串值,如下所示:public enum FruitType {&nbsp; &nbsp; ...&nbsp; &nbsp; public final String getText(Context context) {&nbsp; &nbsp; &nbsp; &nbsp;return context.getString(this.Text)&nbsp; &nbsp; }&nbsp; &nbsp; ...}strings.xml现在我们有了这个设置,只需继续根据您的目标区域设置声明多个的常规练习:../src/main/res├── values│&nbsp; &nbsp;└── strings.xml├── values-in│&nbsp; &nbsp;└── strings.xml├── values-th│&nbsp; &nbsp;└── strings.xml└── values-vi&nbsp; &nbsp; └── strings.xml
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java