Java I18n功能令人惊叹。 支持的locales完美无缺:
Locale ar = new Locale("ar","SA");
System.out.println(ar.getDisplayName(ar));
输出:العربية (السعودية)
但是对于不支持Kazakh
语言的语言环境,语言名称显示在Enlish(标准)中的相同语言中,如Java Spec中所述。
Locale locale = new Locale("kk","KZ");
System.out.println(kk.getDisplayLanguage(kk));
输出:Kazakh (Kazakhstan)
我正在尝试解决此问题,最后一个代码必须输出如下:Қазақша (Қазақстан)
。
有人知道解决方案吗?
任何猜测(或与Java SE开发人员联系的方式,或与谁知道算法的方式)我都会注意到答案;)
谢谢!
答案 0 :(得分:2)
最明显的解决方案是自己提供翻译,即根据语言和国家/地区属性的值外部化语言环境,并将这些翻译成ListResourceBundle实例。如果这似乎很多工作,它应该......
值得一试的其他解决方案是使用ICU
它不会直接为您提供Locale显示名称,但您可以根据Locale创建ULocale对象,这可能只是被翻译。
如果ICU技巧不起作用,您可能会被迫通过CLDR语言列表并自行提供翻译。 BTW。塞尔维亚语有完全相同的问题,我不确定他们是否修复了JDK7 ......
答案 1 :(得分:1)
假设您在Windows上运行,则需要在操作系统区域设置中更改区域设置。 请参阅this链接。 (在胜利2000哈萨克斯坦出现,然而,在胜利7它没有出现在名单......)。在linux上,您可以使用localedef utility设置语言环境。
祝你好运!
答案 2 :(得分:0)
由于您的帖子很旧,我认为从 Java JDK 9 开始,您的代码应该可以正常工作。
使用 Java 11 测试的示例:
Locale country = new Locale.Builder().setRegion("KZ").build();
Locale lang = new Locale.Builder().setLanguage("kk").build();
System.out.println(country.getDisplayCountry(lang));
请注意,在 Java 8 中该问题仍然存在(没有翻译)。