首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正确的印度尼西亚地区( "id_ID“Vs "in_ID”)?

正确的印度尼西亚地区( "id_ID“Vs "in_ID”)?
EN

Stack Overflow用户
提问于 2019-05-02 15:23:16
回答 2查看 25.1K关注 0票数 9

我目前使用的是6.0 version of hybris。我们的项目完全基于Backoffice。早些时候,我们为印度尼西亚地区配置了in_ID (languageISOcode_countryISOcode),并且运行良好,但现在客户端已经请求将地区设置作为印度尼西亚地区的id_ID进行设置。

请注意,在languageISOcode中是废弃的,id是印度尼西亚更新的languageISOcode

下面是我们狂妄自大中的代码片段:

代码语言:javascript
运行
复制
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

见下面的代码:

代码语言:javascript
运行
复制
import java.util.Locale;

Locale localeIndonesia = new Locale("id", "ID");

System.out.println(localeIndonesia); //printed in_ID

你能帮我把id_ID作为印尼的地点吗?

如果它是Java中的一个bug,那么在hybri中有什么方法可以获得id_ID吗?

EN

回答 2

Stack Overflow用户

发布于 2019-05-03 07:20:49

您可以使用以下代码:

代码语言:javascript
运行
复制
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”的原因。印度尼西亚语并不是唯一以旧形式使用的代码。至少希伯来语和意第绪语也是以旧的形式使用的。

代码语言:javascript
运行
复制
+---------------------------------+
|  Language  | ISO 639 | ISO 3166 |
|------------|---------|----------|
| Indonesian |   IN    |    ID    |
|   Hebrew   |   HE    |    IW    |
|   Yiddish  |   YI    |    JI    |
+---------------------------------+
票数 25
EN

Stack Overflow用户

发布于 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

代码语言:javascript
运行
复制
<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中,我不需要想出一个黑客就可以覆盖某些硬编码的默认行为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55955641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档