Programación

1º DAM - Curso 2021-2022

User Tools

Site Tools


apuntes:localizacion

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}

apuntes/localizacion.txt · Last modified: 2021/03/10 13:12 by Santiago Faci