如果您使用 Java 6 或更新版本,则有些东西。显然,他们必须实现这种区域设置层次结构才能从属性文件中加载字符串。您可以使用ResourceBundle.Control获取区域设置的分层列表:
Control control = Control.getControl(Control.FORMAT_DEFAULT);
List<Locale> locales = control.getCandidateLocales("messages",
Locale.forLanguageTag("zh-HK"));
for (Locale locale : locales) {
System.out.println(locale.toLanguageTag());
}
这将返回(Java 7):
zh-Hant-HK
zh-Hant
zh-HK
zh
und
其中“und”表示“未定义”。甚至更好,因为您实际上可以构建文件的名称:
Control control = Control.getControl(Control.FORMAT_DEFAULT);
List<Locale> locales = control.getCandidateLocales("messages",
Locale.forLanguageTag("pl-PL"));
for (Locale locale : locales) {
String bundleName = control.toBundleName("messages", locale);
System.out.println(bundleName);
String resourceName = control.toResourceName(bundleName, "properties");
System.out.println(resourceName);
}
结果是:
messages_pl_PL
messages_pl_PL.properties
messages_pl
messages_pl.properties
messages
messages.properties
当然,您需要知道特定文件是否存在,但这应该非常简单。