Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将硬编码枚举转换为不同的语言?_Java_Enums_Internationalization - Fatal编程技术网

Java 如何将硬编码枚举转换为不同的语言?

Java 如何将硬编码枚举转换为不同的语言?,java,enums,internationalization,Java,Enums,Internationalization,我有一个由我使用的Web服务自动生成的枚举,因此我不能修改这个枚举类,因为进一步的更新会覆盖它 我想为enum提供翻译: //I cannot modify this class public enum Time { PAST("Past"), PRESENT("Present"), FUTURE("Future"); private final String value; } //my code Time time = getTimeFromWebservice()

我有一个由我使用的Web服务自动生成的枚举,因此我不能修改这个枚举类,因为进一步的更新会覆盖它

我想为enum提供翻译:

//I cannot modify this class
public enum Time {
    PAST("Past"), PRESENT("Present"), FUTURE("Future");
    private final String value;
}


//my code    
Time time = getTimeFromWebservice();
String translation;

switch(time.value()) {
   case: "Past": translation = "Vergangenheit"; break;
   case: "Present": translation = "Gegenwart"; break;
   case: "Future": translation = "Zukunft"; break;
}

如何改进此功能?

您无法在运行时动态扩展/修改枚举。它们被视为常量

通常,如果您想进行国际化,所有翻译都是从
ResourceBundle
加载的。可以将枚举文字用作键:

String translation = bundle.getString(time.name());
或者,您可能希望在密钥前加前缀:

String translation = bundle.getString("myprefix." + time.name());

// or use full qualified name:
String translation = bundle.getString(time.getClass().getCanonicalName() + "." + time.name());

有关详细信息,请参阅。

首先,我将打开枚举值本身,而不是它们的字符串值:
switch(time){case pass:…case PRESENT:…}
哦,是的,这样更好!