我当前正在使用hyccis的6.0 version
。我们的项目完全基于Backoffice。早些时候,我们为印度尼西亚语言环境配置了in_ID
(languageISOcode_countryISOcode
),并且工作正常,但现在客户已要求将印度尼西亚语言环境设置为id_ID
。
请注意,不建议使用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
它正在调用Java的Locale.class文件,如果我通过
id_ID
,那么convertOldISOCodes
方法(在Locale.class
内部)也会将id_ID
转换为in_ID
。参见下面的代码:
import java.util.Locale;
Locale localeIndonesia = new Locale("id", "ID");
System.out.println(localeIndonesia); //printed in_ID
您能否帮助我获取
id_ID
印度尼西亚的语言环境。要么
如果这是Java中的错误,那么有没有办法在hybris中获取id_ID?
最佳答案
您可以使用以下代码:
Locale locale = new Locale("id", "ID");
System.out.print(locale.toLanguageTag().replace('-', '_')) // printed id_ID
顺便说一句。它不是Java中的错误,而是向后兼容的“问题”。 Java使用ISO 639的第一个版本。后来该标准已更新,并且一些代码已更新。 Java被设计为完全向后兼容,因此作者决定不更新该代码。这就是为什么将“ id_ID”更改为“ in_ID”的原因。印度尼西亚语不是唯一以旧格式使用的代码。至少希伯来语和意第绪语也以旧形式使用。
+---------------------------------+
| Language | ISO 639 | ISO 3166 |
|------------|---------|----------|
| Indonesian | IN | ID |
| Hebrew | HE | IW |
| Yiddish | YI | JI |
+---------------------------------+