Java I18n для не поддерживаемых локалей - PullRequest
5 голосов
/ 30 ноября 2011

Возможность Java I18n потрясающая. Поддерживается locales отлично работает:

Locale ar = new Locale("ar","SA");
System.out.println(ar.getDisplayName(ar));

выходы: العربية (السعودية)

Но для не поддерживаемых локалей, таких как Kazakh язык, имя языка, отображаемое на том же языке, будет выводиться на английском (стандартный), как написано в спецификации Java.

Locale locale = new Locale("kk","KZ");
System.out.println(kk.getDisplayLanguage(kk));

выходы: Kazakh (Kazakhstan)

Я пытаюсь решить эту проблему, последний код должен выводиться так: Қазақша (Қазақстан).

Кто-нибудь знает решение?

Любые предположения (или способы связи с разработчиком Java SE, или с теми, кто знает алгоритмы) я отмечу как ответ;)

Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Наиболее очевидным решением было бы предоставить переводы самостоятельно, то есть экстернализировать языковой стандарт на основе значения свойств языка и страны и поместить их в экземпляр ListResourceBundle.Если это кажется большой работой, следует ... Другое решение, которое стоит проверить, - это использование ICU .
. Оно не даст вам отображаемое имя локали напрямую, но вы можете создать объект на основе ULocale.в Locale, и это может быть просто переведено.
Если трюк с ICU не сработает, вам, вероятно, придется просмотреть список языков CLDR и предоставить переводы самостоятельно.КСТАТИ.У сербов была точно такая же проблема, я не уверен, исправили ли они это для JDK7 ...

1 голос
/ 30 ноября 2011

Предполагая, что вы работаете в Windows, вам нужно изменить локаль в региональных настройках ОС.Пожалуйста, смотрите эту ссылку.(На win 2000 казахский язык появляется, однако на win 7 его нет в списке ...).В Linux вы можете установить локаль с помощью утилиты localedef .

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...