Java Language
Localización e internacionalización.
Buscar..
Observaciones
Java viene con un mecanismo poderoso y flexible para localizar sus aplicaciones, pero también es fácil de usar mal y terminar con un programa que ignora o maneja la configuración regional del usuario, y por lo tanto cómo esperan que se comporte su programa.
Sus usuarios esperarán ver datos localizados en los formatos a los que están acostumbrados, y tratar de admitir esto manualmente es una tarea estúpida. Este es solo un pequeño ejemplo de las diferentes formas en que los usuarios esperan ver el contenido que usted podría asumir que se muestra "siempre" de cierta manera:
fechas | Números | Moneda local | Moneda extranjera | Distancias | |
---|---|---|---|---|---|
Brasil | |||||
China | |||||
Egipto | |||||
Méjico | 20/3/16 | 1.234.56 | $ 1,000.50 | 1,000.50 USD | |
Reino Unido | 20/3/16 | 1,234.56 | £ 1,000.50 | 100 km | |
Estados Unidos | 20/20/16 | 1,234.56 | $ 1,000.50 | 1,000.50 MXN | 60 mi |
Recursos Generales
- Wikipedia: Internacionalización y localización.
Recursos de Java
- Tutorial de Java: Internacionalización
- Oracle: Internacionalización: Entendiendo la configuración regional en la plataforma Java
- JavaDoc:
Locale
Fechas formateadas automáticamente usando "locale"
SimpleDateFormatter
es genial en caso de apuro, pero como su nombre indica, no se escala bien.
Si codificas "MM/dd/yyyy"
toda tu aplicación, tus usuarios internacionales no estarán contentos.
Deja que Java haga el trabajo por ti.
Utilice los métodos static
en DateFormat
para recuperar el formato correcto para su usuario. Para una aplicación de escritorio (donde confiará en la configuración regional predeterminada ), simplemente llame:
String localizedDate = DateFormat.getDateInstance(style).format(date);
Donde style
es una de las constantes de formato ( FULL
, LONG
, MEDIUM
, SHORT
, etc.) especificadas en DateFormat
.
Para una aplicación del lado del servidor donde el usuario especifica su configuración regional como parte de la solicitud, debe pasarla explícitamente a getDateInstance()
lugar:
String localizedDate =
DateFormat.getDateInstance(style, request.getLocale()).format(date);
Comparación de cuerdas
Compara dos cuerdas ignorando el caso:
"School".equalsIgnoreCase("school"); // true
No usar
text1.toLowerCase().equals(text2.toLowerCase());
Los idiomas tienen diferentes reglas para convertir mayúsculas y minúsculas. Un 'I' se convertiría a 'i' en inglés. Pero en turco un 'yo' se convierte en un 'ı'. Si tiene que usar toLowerCase()
use la sobrecarga que espera una Locale
: String.toLowerCase(Locale)
.
Comparando dos cadenas ignorando diferencias menores:
Collator collator = Collator.getInstance(Locale.GERMAN);
collator.setStrength(Collator.PRIMARY);
collator.equals("Gärten", "gaerten"); // returns true
Ordene las cadenas respetando el orden del lenguaje natural, ignorando mayúsculas y minúsculas (use la clave de intercalación para:
String[] texts = new String[] {"Birne", "äther", "Apfel"};
Collator collator = Collator.getInstance(Locale.GERMAN);
collator.setStrength(Collator.SECONDARY); // ignore case
Arrays.sort(texts, collator::compare); // will return {"Apfel", "äther", "Birne"}
Lugar
La clase java.util.Locale
se utiliza para representar una región "geográfica, política o cultural" para localizar un texto, número, fecha u operación dado. Por lo tanto, un objeto Locale puede contener un país, región, idioma y también una variante de un idioma, por ejemplo, un dialecto hablado en una determinada región de un país, o hablado en un país diferente al país desde el cual se origina el idioma.
La instancia de Locale se entrega a los componentes que necesitan localizar sus acciones, ya sea para convertir la entrada, la salida o solo para las operaciones internas. La clase Locale no puede hacer ninguna internacionalización o localización por sí misma.
Idioma
El idioma debe ser un código de idioma ISO 639 de 2 o 3 caracteres, o una subetiqueta de idioma registrado de hasta 8 caracteres. En caso de que un idioma tenga un código de idioma de 2 y 3 caracteres, use el código de 2 caracteres. Puede encontrar una lista completa de códigos de idiomas en el Registro de subetiquetas de idiomas de la IANA.
Los códigos de idioma no distinguen entre mayúsculas y minúsculas, pero la clase Locale siempre usa versiones en minúsculas de los códigos de idioma
Creando una Localidad
La creación de una instancia de java.util.Locale
se puede hacer de cuatro maneras diferentes:
Locale constants
Locale constructors
Locale.Builder class
Locale.forLanguageTag factory method
Java ResourceBundle
Usted crea una instancia de ResourceBundle como esta:
Locale locale = new Locale("en", "US");
ResourceBundle labels = ResourceBundle.getBundle("i18n.properties");
System.out.println(labels.getString("message"));
Considere que tengo un archivo de propiedades i18n.properties
:
message=This is locale
Salida:
This is locale
Configuración regional
Si desea reproducir el estado utilizando otros idiomas, puede usar el método setDefault()
. Su uso:
setDefault(Locale.JAPANESE); //Set Japanese