Internacionalización y localización en Java

¬ŅSabes c√≥mo funciona la internacionalizaci√≥n y localizaci√≥n en Java? O, antes de continuar, ¬Ņsabes qu√© son la internacionalizaci√≥n y localizaci√≥n en Java?

More...

Tanto la internacionalización y la localización se utiliza para mostrar tus programas en varios idiomas. Pero, antes de continuar, te aclararé qué es qué y, como bonus, te voy a explicar cómo hacerlo en IntelliJ.

Este, por cierto, es uno de los objetivos del examen OCP de Java.

Internacionalización y localización en Java

¬ŅQu√© son la internacionalizaci√≥n y la localizaci√≥n?

  • La internacionalizaci√≥n es el paso anterior a la localizaci√≥n. Consiste en utilizar en tu c√≥digo no el texto literal que aparece en la interfaz, sino referencias a dicho texto.

Es decir, que tomas todo el texto que aparece en tu c√≥digo (interfaz, men√ļs, pop-ups...) y lo unes en un √ļnico documento. A cada cadena de texto le asignas una referencia y, el c√≥digo, utilizas esta referencia en lugar del texto literal.

Y esto, ¬Ņpara qu√©?

Para pasar al siguiente paso:

  • La localizaci√≥n consiste en traducir esa lista de cadenas de texto y guardarlas en documentos en cuyo nombre se hace referencia al idioma e, incluso, a la regi√≥n (en_US para el ingl√©s de EEUU, en_UK para el ingl√©s brit√°nico).

Así, partiendo del idioma del sistema operativo donde se ejecute tu programa, las referencias existentes en el código apuntarán a una lista de cadenas de texto u otra. O a una predeterminada, si no existe la traducción al idioma necesario.

Esto es algo que se utiliza continuamente en las apps de smartphones, ya que est√°n disponibles para todo el mundo.

Existen dos maneras de realizar la internacionalización y la localización en Java: mediante archivos con la extensión .properties, o mediante una clase que extiende ListResourceBundle.

Internacionalización y localización en Java con archivos .properties

Estructura del archivo .properties

Los archivos con la extensión .properties no son más que archivos de texto que contienen la lista de cadenas de texto que vamos a utilizar en nuestro programa.

Las reglas para componerlos son pocas y sencillas.

Sintaxis del archivo .properties

  • La estructura es "referencia=cadena de texto". Entre ambos puede haber un espacio en blanco, dos puntos (:) o un signo de igual (=). Cada par referencia-elemento ocupa una nueva l√≠nea.
  • Las cadenas de texto solo pueden ser eso, Strings, nada m√°s. Si colocas un valor num√©rico, igual se guarda como una String.
  • No utilices espacios en blanco al inicio (a excepci√≥n del espacio que separa la cadena de texto de su referencia, si lo utilizas) ni al final de la cadena de texto, ya que se eliminan.
  • Puedes utilizar s√≠mbolos como \t o \n.
  • Si una cadena de texto es muy larga, puedes dividirla en dos l√≠neas utilizando la barra inclinada (\). No obstante, ten en cuenta que ese salto de l√≠nea no aparecer√° en el programa. Sirve para hacer el documento m√°s f√°cil de leer, sin l√≠neas largas.
  • Los comentario comienzan por ! o #.

Cada uno de los textos de los botones contiene un tabulado y un símbolo.

Nombre del archivo .properties

Como ves, el archivo se llama Interfaz_es. Es decir, se utilizar√° cuando el idioma del sistema sea espa√Īol, sea cual sea la regi√≥n. Si lo hubiese llamado es_ES, se utilizar√≠a solo para espa√Īol de Espa√Īa. En ese caso, si el idioma del sistema fuera es_MX (espa√Īol de M√©xico) obtendr√≠as una bonita java.util.MissingResourceException.

Si no especificas la región en el nombre del archivo, Java lo utilizará si no encuentra un archivo con un nombre más específico. Es decir, como no existe Interfaz_es_MX, deja caer la región y utiliza Interfaz_es, que sí existe.

Un archivo .properties cuyo nombre no contenga ninguna referencia a idioma (es decir, que se llamase interfaz.properties) actuaría como idioma predeterminado.

Cómo utilizar las referencias recogidas en el .properties

Solo necesitas una línea de código:

Cómo hacerlo en IntelliJ

Con IntelliJ hay un par de pasos m√°s que tienes que seguir para internacionalizar y localizar:

  • En primer lugar, especificar d√≥nde se encuentran los archivos .properties.
  • En segundo lugar, establecer el texto de los elementos de la interfaz.

El primer paso lo realizas en Main.java de tu proyecto, dentro del método start(Stage primaryStage):

Para el segundo paso tienes dos opciones.

En primer lugar, puedes especificar la referencia en el código fxml. Si es un elemento que no vas a modificar de manera dinámica, como una etiqueta, quizá esta sea la opción más sencilla:

text="%name"

Si prefieres hacerlo en Java, puedes utilizar el método setText, setTitle o similar desde dentro del método initialize() en el Controller

Internacionalización y localización en Java con una clase

La ventaja de utilizar una clase es que puedes modificar la lista de cadenas de texto de manera din√°mica y, adem√°s, puedes guardar cualquier Objeto, no solo Strings.

¬ŅQu√© tiene de especial esta clase?

  • El nombre de la clase ha de seguir la misma l√≥gica que la del archivo .propertiesNombre_<idioma>_<REGI√ďN> 
  • Extiende ListResourceBundle

Hay un método de ListResourceBundle que tu clase ha de implementar: Object[][] getContents().

Como el array[][] contiene objetos de tipo Object, para obtenerlos utiliza el método getObject() y un cast al tipo concreto:

Por √ļltimo, ten en cuenta que, de haber empate (es decir, un properties y una clase que contienen la misma referencia), la clase tiene preferencia. Adem√°s, puedes tener unas referencias en un properties y otras en una clase; no es imprescindible que todas las referencias est√©n juntas. Si por idioma o regi√≥n est√°n disponibles, ser√°n utilizadas de ser necesario.

Deja una respuesta 0 comentarios

Utilizamos cookies propias y de terceros para realizar el an√°lisis de la navegaci√≥n de los usuarios y mejorar nuestros servicios. Si contin√ļa navegando, consideramos que acepta su uso. Puede cambiar la configuraci√≥n u obtener m√°s informaci√≥n en nuestra pol√≠tica de cookies. ACEPTAR

Aviso de cookies