在Android资源中(如字符串(values-XX)),希伯来语的区域代码是什么?以及在哪里可以找到其他代码?
提前感谢。
实践证明,情况并非如此。 从本地化指南可以看到: “请注意,Java使用了多个已弃用的两位字母代码。希伯来语(“he”)语言代码被重写为“iw”...”
public class Locales {
public static void main(String[] args) {
System.out.printf("Java version: %s%n", Runtime.version().feature());
String language = "iw";
Locale locale = new Locale(language);
ResourceBundle rb = ResourceBundle.getBundle("com.acme.locale.messages", locale);
System.out.printf("%nLanguage Code: %s%n", language);
System.out.printf("Resource Bundle Locale: %s_%s%n",rb.getLocale().getLanguage(),rb.getLocale().getCountry());
System.out.printf("message: %s%n", rb.getString("message"));
language = "he";
locale = new Locale(language);
rb = ResourceBundle.getBundle("com.acme.locale.messages", locale);
System.out.printf("%nLanguage Code: %s%n", language);
System.out.printf("Resource Bundle Locale: %s_%s%n",rb.getLocale().getLanguage(),rb.getLocale().getCountry());
System.out.printf("message: %s%n", rb.getString("message"));
}
}
messages.properties(默认资源)
message=This is a en_US locale message.
messages_iw.properties
message=\u05D4\u05D5\u05D3\u05E2\u05EA \u05D1\u05D3\u05D9\u05E7\u05D4 \u05D1\u05E2\u05D1\u05E8\u05D9\u05EA locale iw_
messages_he.properties
message=\u05D4\u05D5\u05D3\u05E2\u05EA \u05D1\u05D3\u05D9\u05E7\u05D4 \u05D1\u05E2\u05D1\u05E8\u05D9\u05EA locale he_
使用 Java 16 运行此代码将会产生以下输出结果:
Java version: 16
Language Code: iw
Resource Bundle Locale: iw_
message: הודעת בדיקה בעברית locale iw_
Language Code: he
Resource Bundle Locale: iw_
message: הודעת בדיקה בעברית locale iw_
如果您删除或重命名 'messages_iw.properties' 资源,您将加载默认的英语资源 'messages.properties'。
然而,在 Java 17 下运行此示例会产生以下输出:
Java version: 17
Language Code: iw
Resource Bundle Locale: he_
message: הודעת בדיקה בעברית locale he_
Language Code: he
Resource Bundle Locale: he_
message: הודעת בדיקה בעברית locale he_
因此,似乎它总是在尝试加载“messages_he.properties”资源。但是,如果您删除或重命名“messages_he.properties”资源,那么“messages_iw.properties”资源就会被加载。
从Java 17开始,似乎不再需要使用希伯来语资源包的命名策略进行欺骗和魔法。只需使用“he” ISO语言代码即可。这比永远不做要好,因为这一直是一个痛点,并引起了很多问题。