Недостающие локали в Java? - PullRequest
10 голосов
/ 21 января 2010

Я обнаружил несколько пропущенных стран в Java-локалях. Если я распечатываю список доступных локалей,

TreeSet< String > m = new TreeSet< String >();
for ( Locale l : Locale.getAvailableLocales() ) {
    m.add( l.getDisplayCountry() );
}
for ( String s : m ) {
    System.out.println( s );
}

Я скучаю по ряду стран, включая Нигерию, Иран, Кыргызстан и Пакистан. Кто-нибудь может пролить свет на это, или есть лучший (более полный) способ получения списка стран в Java?

1.6.0_16-b01

Ответы [ 4 ]

6 голосов
/ 21 января 2010

Sun Java 6 обеспечивает поддержку только ограниченного подмножества локалей. Вектор поддержки форматирования классов / систем записи / и т. Д. указан в документации JDK .

Так вот, я этого не делал, но ...

Вы можете подключить поддержку дополнительных локалей через SPI (см. здесь ). Например, чтобы предоставить средство форматирования даты для новой локали, вы должны сделать это, внедрив службу DateFormatProvider. Вы можете сделать это, украсив существующую реализацию - я бы взглянул на библиотеку ICU4J , чтобы узнать, предоставляет ли она необходимую поддержку.

3 голосов
/ 21 января 2010

нет взаимно однозначного сопоставления между странами мира и регионами. Локали указывают регионы. Они предназначены для обозначения таких вещей, как языковое разнообразие. Просто поясняющий пример: Индия, Шри-Ланка, Пакистан, Бангладеш - все разные страны ... но то, как они используют английский язык, ничем не отличается ... это демографическая вещь ... так что все эти страны могут зависеть от индийский язык

2 голосов
/ 21 января 2010

Статический метод Locale.getISOCountries() возвращает все двухбуквенные коды для стран из списка ISO 3166 Страны . Если вы запустите код ниже:

String[] codes = Locale.getISOCountries();
for (String code : codes) {
    System.out.println(code);
}

Вы заметите, что PK (ПАКИСТАН), NG (НИГЕРИЯ) и KG (КЫРГЫЗСТАН) находятся в списке. Обратите внимание, что это не означает, что языковой стандарт, связанный со страной, установлен. Если вы хотите реализовать любое поведение, специфичное для локали, то поддерживаются только локали, возвращаемые Locale.getAvailableLocales.

1 голос
/ 01 мая 2012

Если вы хотите поддерживать больше локалей / стран, чем доступно в настоящее время в Sun JDK, рассмотрите возможность добавления банок ICU4J в ваш java.ext.dirs - вы не только получите гораздо более полный список стран и локалей, но и также приличная поддержка Collator, DateFormat и т. д.

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