我当前正在使用{strong>杂种的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
作为印度尼西亚的语言环境吗?
OR
如果这是Java中的错误,那么有什么方法可以在hybri中获得 id_ID 吗?
答案 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中的某些硬编码默认行为。