10

我正在开发一个 Android 应用程序,我想知道我是否可以设置Enum.toString()多语言。

我将Enum在 a上使用它,Spinner并且我想使用多语言文本。

public class Types
{
    public enum Stature
    {
        tall (0, "tall"),
        average(1, "average"),
        small(2, "small");

        private final int stature;
        private final String statureString;

        Stature(int anStature, String anStatureString) { stature = anStature; statureString = anStatureString; }

        public int getValue() { return stature; }

        @Override
        public String toString() { return statureString; }
    }
}

我不知道如何Context.getString()在枚举中使用,我已经硬编码了“高”、“平均”和“小”来测试它。我已经enum在一个辅助类中定义了它。

这就是我使用enumon a 的方式Spinner

mSpinStature.setAdapter(new ArrayAdapter<Stature>(mActivity, android.R.layout.simple_dropdown_item_1line, Stature.values()));

你知道我该怎么做吗?

4

4 回答 4

6

我创建了一个简单的库,它是我的大项目(Xdroid)的一部分:

compile 'com.shamanland:xdroid-enum-format:0.2.4'

现在,您可以通过使用注释来避免所有枚举的相同猴子作业(声明字段、构造函数等):

public enum State {
    @EnumString(R.string.state_idle)
    IDLE,

    @EnumString(R.string.state_pending)
    PENDING,

    @EnumString(R.string.state_in_progress)
    IN_PROGRESS,

    @EnumString(R.string.state_cancelled)
    CANCELLED,

    @EnumString(R.string.state_done)
    DONE;
}

然后使用常见的 Java 方法 - 使用类的扩展java.text.Format

public void onStateChanged(State state) {
    EnumFormat enumFormat = EnumFormat.getInstance();
    toast(enumFormat.format(state));
}

字符串.xml

<string name="state_idle">Idle</string>
<string name="state_pending">Pending</string>
<string name="state_in_progress">In progress</string>
<string name="state_cancelled">Cancelled</string>
<string name="state_done">Done</string>

看看这里如何Toast简单地展示。

您还可以从github编译演示应用程序。

于 2015-04-14T10:50:19.190 回答
1

我将保留 enum 并使用标准 ResourceBundle 方法http://docs.oracle.com/javase/tutorial/i18n/resbundle/concept.html使用 Enum.toString 作为键

于 2013-06-18T11:00:32.853 回答
1

假设这个资源路径

String resourceBundlePath = "my.package.bundles.messages"

在包装中,my.package.bundles您可能有messages.propertiesmessages_en_US.properties

然后,使用

ResourceBundle resourceBundle = ResourceBundle.getBundle(resourceBundlePath);
String messageKey = "myFirstMessage";
String message = resourceBundle.getMessage(messageKey);

message将包含在 上messageKey定义的属性的值messages.properties。如果当前的 Locale 实际上是en_US您将从messages_en_US.properties. 如果当前语言环境是您没有属性文件的内容,则该值将来自默认值messages.properties

你也可以打电话

ResourceBundle.getBundle(resourceBundlePath, myLocale);

但通常最好使用平台语言环境(查看 jvm 参数 -Duser.language,-Duser.country)

您可以为每个要使用枚举元素名称键翻译的枚举拥有一个 ResourceBundle,并在枚举的 toString() 实现中使用它:

@Override
public String toString() {
return resourceBudle.getString(super.toString());
}
于 2013-06-18T11:26:17.230 回答
-1
@Override
public String toString()
{
    //java
    return ResourceBundle.getBundle().getString(id); 
    //android?
    App.getContext().getString(id);

}
于 2013-06-18T11:18:52.797 回答