2011-01-17 14 views
7

Estoy buscando una forma de agregar más configuraciones regionales a las configuraciones regionales disponibles en Java 1.6. Pero los Locales que quiero crear no tienen códigos de país ISO-3166, ni códigos de idioma ISO-639. ¿Hay alguna manera de hacer esto de todos modos? Las locales que quiero agregar sólo difieren en los nombres de los idiomas, pero el más pequeño es un grupo étnico, más exigente que consiguen sobre su identidad ;-)Cómo ampliar la lista de configuraciones regionales Java disponibles

así que pensé en la ampliación de una configuración regional existente, algo así como

UserDefinedLocale extends Locale { 
    UserDefinedLocale (Locale parentLocale) {...} 
} 

pero java.util.Locale es definitiva, lo que hace que sea especialmente difícil de piratear algo alrededor ...

Por lo tanto, es la idea de que la lista de entornos nacionales Java es exhaustiva? ¿Soy el primero en perderme más Locales?

Respuesta

1

Ver this answer:

... se puede conectar en 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 la asistencia que desea.

+0

Gracias. Tristemente manipular a todos los usuarios JRE no es una opción para mi aplicación: "Dado que los SPI de Servicios Locale Sensitive se basan en el Mecanismo de Extensión Java estándar, puede empaquetarlos como un archivo JAR (con algunos trucos en su archivo MANIFEST, que puede se encuentra aquí) y colóquelo en el directorio de extensión. " – alfonx

4

Lea el javadoc para java.util Locale.

Dice: "Crear un objeto Locale utilizando los constructores en esta clase:"

También dice: "Debido a que un objeto Locale es sólo un identificador para una región, sin comprobación de validez se realiza cuando se construir una configuración regional "

También dice: " Una configuración regional es el mecanismo para identificar el tipo de objeto (NumberFormat) que desea obtener. La configuración regional es solo un mecanismo para identificar objetos, no un contenedor para el objetos en sí mismos "

Y, por último, el Javadoc para las getAvailableLocales() Método dice: "La matriz devuelta representa la unión de las locales soportadas por el entorno de ejecución de Java y las instaladas implementaciones LocaleServiceProvider"

Por lo que sólo hay que inventar un código de lenguaje que no está en la lista estándar, y lo usa como un identificador para su configuración regional.

+0

_ "Entonces solo tiene que inventar un código de idioma que no está en la lista estándar y usarlo como un identificador para su configuración regional." _ - ¿Echo de menos el bit que citó sobre la instalación de un 'LocaleServiceProvider'? –

+0

Acepto que es un atajo. Pero dado que el OP no explicó explícitamente a qué se refería con "ampliar la lista de locales disponibles", sospeché que lo que quería solo lo necesitaba para crear una nueva instancia. El uso de ResourceBundle no necesita nada más que una nueva configuración regional. El formato de número y fecha podría reutilizar las reglas de otro idioma. Entonces solo tendría que usar un nuevo código de país o código de variante. –

Cuestiones relacionadas