gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:48:24 26 4
gpt4 key购买 nike

我正在使用这个枚举:

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

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

最佳答案

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

关于java - 如何在 Android 中创建多语言枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57987551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com