2011-01-08 11 views
22

Estoy teniendo todos mis valores de paquete de recursos en la tabla y formateados según los requisitos. Tengo que cambiar los idiomas en el sitio web según la selección del usuario en el menú desplegable en la parte superior de la página. Si uso el código de idioma como en_US, está funcionando bien. si uso en-Us como código de idioma, entonces no funciona. Cuál podría ser el problema. ¿Cuál es correcto seguir?¿Cuál es la diferencia entre crear la configuración regional para en-US y en_US?

Respuesta

17

"en" es el código de idioma especificado por ISO 639. mientras que Estados Unidos es el código de país especificado por 3166.
En Java, el objeto Locale reconoce el lenguaje como languageCode_countryCode (por ejemplo en_US) y no como languageCode- countryCode.

21

"en-US" es un IETF language tag. Mientras que la clase Java'a Locale se basó claramente en etiquetas de lenguaje IETF, utiliza guiones bajos en lugar de guiones cuando separa códigos de idioma de códigos de país (y también variantes), por lo que llamar al toString() en el equivalente Locale le dará en_US.

A partir de Java 7 puede usar Locale.forLanguageTag(String) y toLanguageTag() para convertir entre etiquetas de idioma y objetos Locale.

Al convertir cadenas a objetos Locale es una buena idea normalizar dividiendo componentes en guiones y guiones bajos, minúsculas del primer componente (el código de idioma) y mayúsculas del segundo componente (el código de país).

+0

Esta respuesta es la mejor respuesta sobre qué hacer en el código de Java. Para otros lenguajes/marcos, no tanto. Al hacer llamadas entre frameworks con diferentes convenciones, tiene una "pratfall" del codificador que necesita saber que se requiere una conversión. recomendamos usar la convención del marco desde el que llama. Cuando realice llamadas a otro marco, proporcione "proxies" que realicen la conversión. ¿Por qué? elimina la necesidad de saber que el marco llamado usa una convención diferente. Los colaboradores SÓLO "verán" una convención usando eso evitará la pratfall. – DaBlick

6

O puede usar Locale us = Locale.forLanguageTag("en-US") y us.toLanguageTag(), y eso hará la conversión por usted sin tener que crear su propia implementación propensa a errores. .

1

A partir de Java8, Inicializando la configuración regional se debe hacer uso de la etiqueta de idioma "en-US" Locale.forLanguageTag ("en-US") toString(); devuelve el resultado: en_US

Donde como Locale.forLanguageTag ("en_US") no crea la configuración regional requerida. Se establecerá de manera predeterminada en la configuración regional del sistema. Locale.forLanguageTag ("en_US"). ToString() devuelve nulo

Cuestiones relacionadas