Java 印度尼西亚的正确地区设置(“id”与“in”中的“id”)?
我目前正在使用hybris的Java 印度尼西亚的正确地区设置(“id”与“in”中的“id”)?,java,localization,locale,hybris,backoffice,Java,Localization,Locale,Hybris,Backoffice,我目前正在使用hybris的6.0版本。我们的项目完全基于后台。早些时候,我们在印尼语言环境的(languageISOcode\u countryISOcode)中配置了,工作正常,但现在客户端请求为印尼语言环境设置为ID\u ID 请注意,inlanguageISOcode已弃用,id是印度尼西亚更新的languageISOcode 下面是我们的hybris中的代码片段: final Locale locale = cockpitLocaleService.getCurrentLocale()
6.0版本。我们的项目完全基于后台。早些时候,我们在印尼语言环境的
(languageISOcode\u countryISOcode
)中配置了,工作正常,但现在客户端请求为印尼语言环境设置为ID\u ID
请注意,inlanguageISOcode
已弃用,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\u id
,那么convertOldISOCodes
方法(在Locale.class
中)也在将id\u id
转换为in\u id
请参阅下面的代码:
import java.util.Locale;
Locale localeIndonesia = new Locale("id", "ID");
System.out.println(localeIndonesia); //printed in_ID
你能帮我把印尼的id\u id
作为当地语言吗
或
如果它是Java中的一个bug,那么有没有办法在hybris中获得id\u id?您可以使用以下代码:
Locale=newlocale(“id”、“id”);
System.out.print(locale.toLanguageTag().replace('-','''.')//打印id\u id
顺便说一句,这不是Java中的错误,而是向后兼容性的“问题”。Java使用ISO 639的第一个版本。后来,标准更新了,一些代码也更新了。Java被设计为完全向后兼容,因此作者决定不更新这些代码。这就是为什么“id_id”更改为“in_id”的原因。印尼语并不是唯一以旧形式使用的代码。至少希伯来语和意第绪语也用在旧形式中
+---------------------------------+
| Language | ISO 639 | ISO 3166 |
|------------|---------|----------|
| Indonesian | IN | ID |
| Hebrew | HE | IW |
| Yiddish | YI | JI |
+---------------------------------+
如果您所处的情况是,本地化文件提供了id
,而不是中的,并且您无法在本地对其进行控制以更改此设置,那么以下内容可能会对您有所帮助
我面临的情况是,我无法从id
翻译文件中读取本地化信息,因为Java会在内部将id
更改为。SpringResourceBundleMessageSource
依赖于访问java语言环境提供的标记,即使是我最好的获取id
Locale的尝试也会导致仍然获取“in”。这基本上意味着,无论何时查询印尼语,都无法在
后缀文件中找到必要的,并返回到默认英语。由于本地化是由依赖项生成的,因此我无法控制命名,必须使用id
由于Java语言环境是最终的,并且它在
中用积极地覆盖id
,因此没有简单的方法来更改行为
ResourceBundleMessageSource
本身很大程度上依赖于区域设置,因此重写某些方法来更改行为充其量也会很混乱。事情比看起来更困难,因为spring消息源在下面使用java.util.ResourceBundle
,这依赖于最终的、相当严格的语言环境
因此,最后我设法想出了一个解决方案,我只需编辑我的Maven pom.xml文件,使用Maven antrun插件将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>
org.apache.maven.plugins
maven antrun插件
3.0.0
产生资源
跑
这个变通方法对我来说很有效,而且从某种意义上讲很干净,我不需要想出一个方法来覆盖Spring或Locale中的一些硬编码默认行为。您运行的是什么版本的Java?我在1.7.0_79、1.8.0_181和11.0.1上进行了测试,这三个版本都有toLanguageTag()
返回id id
两个Locale.forLanguageTag(“id”)和Locale.forLanguageTag(“in id”)
Hi Andreas,我也得到toLanguageTag()作为“id”,但我需要Locale值作为“id”您能帮我在hybris端或java端获得印度尼西亚语言环境的确切值作为“id_id”(也可以)。