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

时间:2019-05-02 15:23:16

标签: java localization locale hybris backoffice

我当前正在使用{strong>杂种的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作为印度尼西亚的语言环境吗?

OR

如果这是Java中的错误,那么有什么方法可以在hybri中获得 id_ID 吗?

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码:

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    |
+---------------------------------+

答案 1 :(得分:0)

如果您遇到的情况是,本地化文件是由id而不是in提供的,并且您无法在本地对其进行更改,那么以下内容可能会对您有所帮助。

>

我遇到了无法从id转换文件读取本地化的情况,因为Java在内部自动将id更改为in。 Spring ResourceBundleMessageSource依赖于访问Java语言环境所提供的标签,即使我尽最大的努力获取id语言环境也导致仍然陷入困境。这基本上意味着,每当查询印度尼西亚语时,都找不到所需的in后缀文件,并且该文件将恢复为默认的英语。由于本地化是由某个依赖项生成的,因此我无法控制命名,因此不得不使用id

由于Java语言环境是最终版本,并且会用id覆盖in,因此没有简单的方法来更改行为。

ResourceBundleMessageSource本身非常依赖于Locale,因此重写某些改变行为的方法充其量是很混乱的。事情比看起来要困难得多,因为spring消息源在下面使用了java.util.ResourceBundle,而这取决于最终且相当严格的Locale

所以最后我设法提出了一个解决方案,我只编辑了Maven pom.xml文件以使用maven-antrun-plugin将id本地化文件复制到in

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-antrun-plugin</artifactId>
     <version>3.0.0</version>
     <executions>
         <execution>             
             <phase>generate-resources</phase>
             <configuration>
                 <target>
                     <copy file="${messagesdir}/myProps_id.properties"
                           tofile="${messagesdir}/myProps_in.properties" />
                 </target>
             </configuration>
             <goals>
                 <goal>run</goal>
             </goals>
         </execution>
     </executions>
</plugin>

此变通办法对我有用,在某种意义上说我是干净的,因为我不必提出破解方法来覆盖Spring或Locale中的某些硬编码默认行为。