就像当我接受输入(he-IL)时,输出就像"iw_IL“。但我不想把这个转换成旧的。
public static void main(String[] args) {
Locale locale = getLocaleIn("he-IL");
System.out.println(locale.toString());
}
private static Locale getLocaleIn(String langCode) {
LocaleCode code = LocaleCode.getByCodeIgnoreCase(langCode);
Locale locale = code.toLocale();
return locale;
}OutPut:iw_IL,预期产出:he-IL
主要问题在这里,在Java Locale.Class:

最后,我想要一个区域设置对象,而不需要转换为旧的.。
发布于 2021-12-13 09:18:41
您应该避免在问题描述中使用非标准的第三方类,特别是当它们根本没有造成问题时。
我们可以简单地使用
Locale locale = new Locale("he", "IL");
System.out.println(locale.toString());
locale = new Locale("iw", "IL");
System.out.println(locale.toString());并获取
iw_IL
iw_IL在JDK 8下,与文献资料保持一致。
此构造函数同时接受旧代码("iw“、"ji”和"in")和新代码("he“、"yi”和"id"),但是Locale上的所有其他API只返回旧代码。
这改变了与JDK 17
过时的ISO 639代码("iw“、"ji”和"in")映射到它们当前的格式。
并使用JDK 17运行相同的示例程序,因此现在打印
he_IL
he_IL因此,最干净也可能是唯一的解决方案就是更新Java版本。任何迫使Locale返回旧版本中的新代码的修补程序都可能会导致与依赖于旧行为的运行时其他组件的兼容性问题。
https://stackoverflow.com/questions/70307754
复制相似问题