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

标签 java enums internationalization

我有一个由我使用的 Web 服务自动生成的枚举,因此我无法修改此枚举类,因为进一步的更新将覆盖它。

我想提供枚举的翻译:

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

或者您可能想为 key 添加前缀:

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

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

参见http://docs.oracle.com/javase/tutorial/i18n/resbundle/index.html了解详情。

关于java - 如何将硬编码枚举转换为不同的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20287009/

相关文章:

ruby - 如果文件名在 Windows 上具有 unicode 字符,Ruby 1.9.1 能否最终获得文件名列表?

Spring security + i18n = 如何让它一起工作?

java - 多实例 MQ 中的切换故障转移和自动重新连接

c# - 使用反射创建枚举

java - 最高序数枚举值

c# - 按未知对象类型的值进行比较

xml - 使用多种语言呈现 XML 文档

java - 对 JUnit 测试进行分组

java - OneToMany 与 Java 的最佳实践

java - 语法错误: Unexpected token s in JSON at position 0 at JSON.解析+ angularjs