我目前使用的是6.0 version
of hybris。我们的项目完全基于Backoffice。早些时候,我们为印度尼西亚地区配置了in_ID
(languageISOcode_countryISOcode
),并且运行良好,但现在客户端已经请求将地区设置作为印度尼西亚地区的id_ID
进行设置。
请注意,在languageISOcode
中是废弃的,id是印度尼西亚更新的languageISOcode
。
下面是我们狂妄自大中的代码片段:
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中的一个bug,那么在hybri中有什么方法可以获得id_ID吗?
发布于 2019-05-03 07:20:49
您可以使用以下代码:
Locale locale = new Locale("id", "ID");
System.out.print(locale.toLanguageTag().replace('-', '_')) // printed id_ID
顺便说一句。它不是Java中的一个bug,而是具有向后兼容性的“问题”。Java使用ISO 639的第一个版本。后来又更新了标准,并更新了一些代码。Java是完全向后兼容的,所以作者决定不更新这些代码。这就是为什么"id_ID“改为"in_ID”的原因。印度尼西亚语并不是唯一以旧形式使用的代码。至少希伯来语和意第绪语也是以旧的形式使用的。
+---------------------------------+
| Language | ISO 639 | ISO 3166 |
|------------|---------|----------|
| Indonesian | IN | ID |
| Hebrew | HE | IW |
| Yiddish | YI | JI |
+---------------------------------+
发布于 2020-10-06 06:55:19
如果您所处的情况是,本地化文件提供的是id
而不是in
,并且您无法在本地控制它来更改它,那么下面的内容可能会对您有所帮助。
我面临着无法从id
翻译文件中读取本地化的情况,因为id
在内部自动将id
更改为in
。Spring ResourceBundleMessageSource
依赖于访问java语言环境提供的标记,即使是我获得id
语言环境的最佳尝试也导致了“in”的出现。这基本上意味着,每当询问印度尼西亚语时,就找不到必要的in
后缀文件,并返回到默认的英语。由于本地化是由依赖项生成的,所以我无法控制命名,必须使用id
。
由于Java是最终的,并且它用in
积极地覆盖了in
,因此没有一种简单的方法来改变行为。
ResourceBundleMessageSource
本身在很大程度上依赖于区域设置,所以改变行为的一些方法充其量也是很麻烦的。事情比看起来要困难得多,因为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中,我不需要想出一个黑客就可以覆盖某些硬编码的默认行为。
https://stackoverflow.com/questions/55955641
复制相似问题