This is an old revision of the document!
Localización
\section{¿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:
\begin{lstlisting}[language=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 \end{lstlisting}
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:
\begin{lstlisting}[language=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 \end{lstlisting}
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:
\begin{lstlisting}[language=java] Locale locale = new Locale(“en”, “UK”); DayOfWeek dia = LocalDate.now().getDayOfWeek(); System.out.println(dia.getDisplayName(TextStyle.FULL, locale)); \end{lstlisting}
\subsection{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 \begin{lstlisting}[language=java] # Fichero textos_es_ES.properties hola = hola adios = adios \end{lstlisting}
También para otro idioma y región \begin{lstlisting}[language=java] # Fichero textos_en_UK.properties hola = hi adios = bye \end{lstlisting}
Quizás nos interese definirlo para todo un idioma, independientemente de la región \begin{lstlisting}[language=java] # Fichero textos_es.properties hola = hola adios = adios \end{lstlisting}
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: \begin{lstlisting}[language=java] # Fichero textos.properties hola = hi adios = bye \end{lstlisting}
Finalmente, a la hora de mostrar mensajes al usuario, lo haríamos a través del objeto \emph{ResourceBundle}, que seleccionaría el texto que mejor se adapte a la localización definida en la aplicación:
\begin{lstlisting}[language=java] Locale locale = new Locale(“en”, “UK”); . . . ResourceBundle res = ResourceBundle.getBundle(“textos”, locale); System.out.println(res.getString(“hola”)); hi \end{lstlisting}