我当前正在使用hyccis的6.0 version。我们的项目完全基于Backoffice。早些时候,我们为印度尼西亚语言环境配置了in_IDlanguageISOcode_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    |
+---------------------------------+

09-27 09:23