Android应用中的 ,但问题可能也适用于Java / OOP。
在我的应用程序中,我有一个Job类,它代表了一个供用户完成的工作。其中一个属性是status
,它只能有三个值:'要完成','待定'或者'已完成'。
我想允许将应用翻译成其他语言,因此我一直使用Android中的string-array
资源类型存储这些值:
<string-array name="jobs_statuses">
<item>To be done</item>
<item>Pending</item>
<item>Completed</item>
</string-array>
我希望能够使用代码中的status
属性进行比较,例如:
if (myJob.getStatus() == Job.STATUS_COMPLETED) // Do something
我考虑过将属性作为int或其他数字类型存储在类中,并在类中声明三个常量,如下所示:
public static final int STATUS_TO_BE_DONE = 1;
public static final int STATUS_PENDING = 2;
这样可以在我的代码中轻松确定给定作业的状态,但是,如何获取字符串值以便在我的UI中使用?我考虑过使用单独的getStatusString
方法,可以这样使用:
myJob.getStatus(); // returns 1
myJob.getStatusString(); // returns localised string for 'To be done' status
因此,简而言之,我希望能够:
我错过了一个明显的解决方案吗?
提前致谢。
答案 0 :(得分:1)
正如Dave Newton已经建议的那样,我会做这样的事情:
enum Status {
TO_BE_DONE(R.string.to_be_done),
PENDING(R.string.pending),
COMPLETED(R.string.completed);
private final int mStringResource;
private Status(final int stringResource) {
mStringResource = stringResource;
}
public String asString(final Context context) {
return context.getString(mStringResource);
}
}
允许您使用==
进行比较,以及获取本地化的String
到asString()
方法。
答案 1 :(得分:0)
这可能不是您问题标题的确切答案,但如果您正在寻找并轻松翻译不同语言的应用,Google确实会为此提供服务。 http://developer.android.com/distribute/googleplay/publish/localizing.html