2011-11-30 17 views
5

La capacidad de Java I18n es increíble. soportados locales obras perfectas:Java I18n para configuraciones regionales no compatibles

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

salidas: العربية (السعودية)

Pero para las locales no soportados como Kazakh idioma, el nombre de idioma se muestra en la misma Lang salida en Enlish (Standard), como está escrito en Java Espec.

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

salidas: Kazakh (Kazakhstan)

que estoy tratando de resolver este problema, último código ha de salida como esta: Қазақша (Қазақстан).

¿Alguien sabe la solución?

Cualquier conjetura (o formas de contactar con el desarrollador de Java SE, o con quienes conocen algoritmos) que se nota como respuesta;)

Gracias!

Respuesta

1

Suponiendo que se ejecuta en Windows, debe cambiar la configuración regional en la configuración regional del sistema operativo. Consulte this enlace. (En el triunfo 2000 aparece kazajo, sin embargo, en Win 7 no aparece en la lista ...). En Linux, puede establecer la configuración regional con localedef utility.

¡Buena suerte!

+0

Mejor tarde que nunca ^^ – erko

2

La solución más obvia sería proporcionar las traducciones usted mismo, es decir, externalizar la configuración regional en función del valor del idioma y las propiedades del país y ponerlas en, por ejemplo, la instancia de ListResourceBundle. Si esto parece mucho trabajo, debería ... Otra solución que vale la pena consultar es usar ICU.
No le dará directamente el nombre para mostrar en la configuración regional, pero puede crear el objeto ULocale basado en la configuración regional y esto podría simplemente traducirse.
Si el truco de la ICU no funciona, probablemente se lo forzará a pasar por la lista de idiomas CLDR y proporcionar las traducciones usted mismo. Por cierto. Serbio tenía exactamente el mismo problema, no estoy seguro si lo arreglaron para JDK7 ...

Cuestiones relacionadas