2010-01-21 21 views
9

he encontrado una serie de países que faltan en java locales- si yo imprimir una lista de lugares disponibles,¿Falta la configuración regional en Java?

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

me falta una serie de países, entre ellos Nigeria, Irán, Kirguistán y Pakistán . ¿Alguien puede arrojar algo de luz sobre esto, o hay una forma mejor (más completa) de obtener una lista de países en Java?

1.6.0_16-b01

+0

Sospecho que las restricciones de exportación del Departamento de Estado tienen al menos algo que ver con esa lista ... – kdgregory

+1

Pero independientemente, me pregunto si la tabla de configuración regional es una forma razonable de compilar una lista de países. Depende de tu uso, por supuesto, pero creo que la mayoría de las aplicaciones estarían mejor con una lista más pequeña, mientras que cualquier cosa que tenga que ver con datos históricos necesita una lista mucho más grande. – kdgregory

+0

Me da curiosidad si hay alguna manera de agregar de alguna manera tu configuración regional a la lista ... – Stroboskop

Respuesta

2

no existe una correspondencia de uno a uno entre los países en el mundo y los lugares. Los entornos locales especifican regiones. Están destinados a marcar cosas como la diversidad del lenguaje. Solo un ejemplo esclarecedor: India, Sri Lanka, Pakistán, Bangladesh son países diferentes ... pero la forma en que usan el idioma inglés no es diferente de ninguna manera significativa ... es una cuestión demográfica ... así que todos estos países podrían depender de la local indio

+0

Sí, sé que en realidad no hay una asignación conceptual 1-1 entre configuraciones regionales y países; Sin embargo, esperaba (¿asumiendo?) Que estaba obteniendo una lista completa (supongo que no se veía lo suficientemente cerca). La lista ISO que las referencias de javadoc también faltan a Pakistán (http://www.loc.gov/standards/iso639-2/php/English_list.php), pero de nuevo es una lista de idiomas, no de países. –

2

El método estático Locale.getISOCountries() devuelve todos los códigos de dos letras para países en la lista ISO 3166 Countries. Si se ejecuta el código de abajo:

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

Usted notará que PK (Pakistán), NG (Nigeria) y KG (Kirguistán) están en la lista. Tenga en cuenta que esto no significa que la configuración regional asociada con el país está instalada. Si desea implementar cualquier comportamiento específico de configuración regional, las únicas configuraciones regionales compatibles son aquellas devueltas por Locale.getAvailableLocales.

+0

@Tendayi Mawushe - los códigos de país pueden estar presentes, pero eso no significa que los formateadores de fecha/número (por ejemplo) proporcionarán automáticamente la funcionalidad requerida. – McDowell

+1

Sí, PK está ahí, pero por lo que puedo decir, no puede hacer nada más que obtener el código ISO de 2 letras.No puede, por ejemplo, obtener un nombre de país codificado con el código de 2 letras. –

+0

Soy consciente de que esto no significa que la configuración regional del país en cuestión está instalada. Sin embargo, la pregunta parece estar tratando de obtener una lista de países en lugar de hacer un comportamiento específico de la configuración regional. Lo dejaré en claro en la respuesta. –

6

Sun Java 6 solo proporciona soporte para un subconjunto limitado de configuraciones regionales. El vector de soporte para formatear clases/sistemas de escritura/etc. se enumera en el JDK documentation.

Ahora, no he hecho esto, pero ...

Puede conectar el apoyo a lugares adicionales a través de las SPI (descrito here). Por ejemplo, para proporcionar un formateador de fecha para una nueva configuración regional, lo haría implementando un servicio DateFormatProvider. Es posible que pueda hacer esto decorando una implementación existente. Echaré un vistazo a la biblioteca ICU4J para ver si proporciona el soporte que desea.

1

Si quieres apoyar más locales/países que están actualmente disponibles en Sun JDK, considerar la adición de ICU4J frascos a su java.ext.dirs - que no sólo conseguir mucho más completa lista de países y lugares, sino también el apoyo decente para Collator, DateFormat , etc.

Cuestiones relacionadas