====== 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:

<code java>
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
</code>

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:

<code java>
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
</code>

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:

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

===== 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
<code java>
# Fichero textos_es_ES.properties
hola = hola
adios = adios
</code>

También para otro idioma y región
<code java>
# Fichero textos_en_UK.properties
hola = hi
adios = bye
</code>

Quizás nos interese definirlo para todo un idioma, independientemente de la región
<code java>
# Fichero textos_es.properties
hola = hola
adios = adios
</code>

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:
<code java>
# Fichero textos.properties
hola = hi
adios = bye
</code>

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:

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

----

(c) 2021-2023 Santiago Faci