Programación

1º DAM/DAW - Curso 2023-2024

User Tools

Site Tools


apuntes:localizacion

Localización

¿Qué es la localización?

La localización, también conocida como \emph{l10n} (por el número de caracteres de la propia palabra), es el mecanismo por el que una aplicación se adapta a un idioma y localización.

Por lo general se suelen adaptar, a un idioma y localización concretas, datos como fechas y la presentación de los números.

En Java, se utiliza la clase \emph{Locale} para proporcionar esa capacidad de adaptación a nuestras aplicaciones.

Podemos conocer la localización que, por defecto, tenga asignado nuestro equipo:

Locale locale = Locale.getDefault();
System.out.println(locale.getCountry());            // US
System.out.println(locale.getDisplayCountry());     // United States
System.out.println(locale.getLanguage());           // en
System.out.println(locale.getDisplayLanguage());    // English

También podemos definir la localización para una aplicación, instanciando un objeto de tipo \emph{Locale} especificando el idioma o el idioma y el páis:

Locale locale = new Locale("es");           // Define localización para idioma español
Locale locale = new Locale("es", "ES");     // Define localización para idioma español en España

Asi, podemos utilizar la localización, para representar las fechas siempre acorde con el idioma que el usuario haya seleccionado para la aplicación. En función del idioma escogido instanciaremos el objeto \emph{Locale} acorde con esas preferencias y, más adelante, podremos utilizar dicho objeto para representar las fechas como corresponda:

Locale locale = new Locale("en", "UK");
DayOfWeek dia = LocalDate.now().getDayOfWeek();
System.out.println(dia.getDisplayName(TextStyle.FULL, locale));

Internacionalización

La localización está relacionada con el concepto de internacionalización, que permite que la aplicación se adapte al idioma de la localización escogida. La API de Java, a partir de la clase \emph{ResourceBundle} permite definir unos ficheros de propiedades con los textos en diferentes idiomas y regiones, de forma que, en función de la localización del usuario, se pueden adaptar el idioma en que se muestra cualquier información en la aplicación:

Se puede definir un fichero con los mensajes para un idioma y región

# Fichero textos_es_ES.properties
hola = hola
adios = adios

También para otro idioma y región

# Fichero textos_en_UK.properties
hola = hi
adios = bye

Quizás nos interese definirlo para todo un idioma, independientemente de la región

# Fichero textos_es.properties
hola = hola
adios = adios

E incluso definir cómo queremos que se muestran los mensajes si la localización del usuario no está definida de forma particular, lo que sería la opción por defecto:

# Fichero textos.properties
hola = hi
adios = bye

Finalmente, a la hora de mostrar mensajes al usuario, lo haríamos a través del objeto ResourceBundle, que seleccionaría el texto que mejor se adapte a la localización definida en la aplicación:

Locale locale = new Locale("en", "UK");
. . .
ResourceBundle res = ResourceBundle.getBundle("textos", locale);
System.out.println(res.getString("hola"));          // hi

© 2021-2023 Santiago Faci

apuntes/localizacion.txt · Last modified: 2023/05/28 10:26 by Santiago Faci