作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
Java I18n 的能力是惊人的。支持locales完美运行:
Locale ar = new Locale("ar","SA");
System.out.println(ar.getDisplayName(ar));
输出:العربية (السعودية)
但是对于像Kazakh
语言这样不支持的区域设置,语言名称以相同的语言显示,将以 Enlish(标准)输出,如 Java 规范中所写。
Locale locale = new Locale("kk","KZ");
System.out.println(kk.getDisplayLanguage(kk));
输出:哈萨克语(哈萨克斯坦)
我正在尝试解决这个问题,最后的代码必须像这样输出:Қазазша (Қазазстан)
。
有人知道解决办法吗?
任何猜测(或与 Java SE 开发人员或了解算法的人联系的方式)我都会记录为答案;)
谢谢!
最佳答案
最明显的解决方案是自己提供翻译,即根据语言和国家/地区属性的值将语言环境外部化,并将它们放入 ListResourceBundle 实例中。如果这看起来工作量很大,那应该……其他值得检查的解决方案是使用 ICU .
它不会直接给你 Locale 显示名称,但你可以创建基于 Locale 的 ULocale 对象,这可能只是被翻译。
如果 ICU 技巧不起作用,您可能会被迫通过 CLDR语言列表并自己提供翻译。顺便提一句。塞尔维亚语有完全相同的问题,我不确定他们是否为 JDK7 修复了它...
关于不支持语言环境的 Java I18n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8323051/
我是一名优秀的程序员,十分优秀!