印度尼西亚的正确语言环境(“ id_ID”与“ in_ID”)?

Arj*_*haw 0 java locale localization hybris backoffice

我目前使用6.0 version的hybris。我们的项目完全基于Backoffice。之前我们为印度尼西亚语言环境配置了in_IDlanguageISOcode_countryISOcode),并且工作正常,但是现在客户已要求像id_ID印度尼西亚语言环境一样进行语言环境设置。

请注意,in languageISOcode已弃用,而id是languageISOcode印度尼西亚的更新。

以下是我们的hybris中的代码片段:

final Locale locale = cockpitLocaleService.getCurrentLocale();

LOG.info("locale : " + locale); //Here I'm getting in_ID value of locale in all scenario
Run Code Online (Sandbox Code Playgroud)

它正在调用Java的Locale.class文件,如果我通过了,id_ID那么convertOldISOCodesmethod(inside Locale.class)也将转换id_IDin_ID

参见下面的代码:

import java.util.Locale;

Locale localeIndonesia = new Locale("id", "ID");

System.out.println(localeIndonesia); //printed in_ID
Run Code Online (Sandbox Code Playgroud)

您能否帮助我获得id_ID印度尼西亚的语言环境。

要么

如果这是Java中的错误,那么有没有办法在hybri中获取id_ID

aga*_*rys 5

您可以使用以下代码:

Locale locale = new Locale("id", "ID");
System.out.print(locale.toLanguageTag().replace('-', '_')) // printed id_ID
Run Code Online (Sandbox Code Playgroud)

顺便说一句。它不是Java中的错误,而是向后兼容的“问题”。Java使用ISO 639的第一个版本。后来该标准已更新,并且一些代码已更新。Java被设计为完全向后兼容,因此作者决定不更新该代码。这就是为什么将“ id_ID”更改为“ in_ID”的原因。印度尼西亚语不是唯一以旧格式使用的代码。至少希伯来语和意第绪语也以旧形式使用。

+---------------------------------+
|  Language  | ISO 639 | ISO 3166 |
|------------|---------|----------|
| Indonesian |   IN    |    ID    |
|   Hebrew   |   HE    |    IW    |
|   Yiddish  |   YI    |    JI    |
+---------------------------------+
Run Code Online (Sandbox Code Playgroud)

  • 在 Java 17 中,它们破坏了向后兼容性,现在 in_ID 被映射到 id_ID。请参阅 https://bugs.openjdk.org/browse/JDK-8267069 可以使用系统属性 -Djava.locale.useOldISOCodes=true 恢复旧行为 (6认同)