====== 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
----
(c) 2021-2023 Santiago Faci