加载 Java 消息属性以进行内部化

Loading of Java message properties for internalization

我有以下 Java i18n 消息 class.:

public class Messages { 

    private static final String BUNDLE_NAME = "languages.message";
    private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);

    private Messages() {
    }

    public static String getI18n(String key) {
        try {
            return RESOURCE_BUNDLE.getString(key);
        } catch (MissingResourceException e) {
            return '!' + key + '!';
        }
    }

    public static String getI18n(String key, Object... params  ) {
        try {
            return MessageFormat.format(RESOURCE_BUNDLE.getString(key), params);
        } catch (MissingResourceException e) {
            return '!' + key + '!';
        }
    }
}

我创建了以下邮件属性文件。:

message.properties
message_de.properties
message_de_DE.properties

在我的程序中,我根据系统的默认语言环境获取翻译。如果是 de_DE,则加载德语消息属性 message_de_DE.properties

如果默认语言环境是 de_CH,则没有消息属性文件。那么 message_de.properties 是作为后备加载还是需要我自己实现?

根据 this 博客 post 你是对的。

So when the default locale of your system is de_DE and you request a resource for locale en_US, the lookup order for the properties files is:

  1. MyApp_en_US.properties
  2. MyApp_en.properties
  3. MyApp_de_DE.properties
  4. MyApp_de.properties
  5. MyApp.properties