Spring Boot: Internacionalización

La verdad es que Spring Boot nos soluciona muchas papeletas a los desarrolladores que utilizamos Java a diario.

Uno de los requisitos que más se repiten a la hora de programar un webservice es que sea multi idioma.

Hay que reconocer que esta papeleta siempre ha sido bien resuelta para Java desde los tiempos de Struts (no como el manejo de fechas), por eso Spring Boot no iba a ser una excepción y con un par de líneas de configuración, podemos tener verbos de nuestro RESTful service en varios idiomas.

¡Empezamos por nuestro fichero de arranque!

1

Como veis, con el método localeResolver le indicamos a Spring que vamos a definir el idioma de las respuestas del webservice utilizando cabeceras en nuestros requests al mismo.

Como idioma predeterminado utilizaremos el inglés americano (Locale.US)

Pero… ¿de dónde va a leer las traducciones Spring?

Muy sencillo, esto, como tantas otras cosas, lo delegamos al fichero de configuración de nuestra aplicación (application.properties) en el que bastará con añadir una sola línea en la que se especifica el nombre de los ficheros de traducción:

spring.messages.basename=messages

Es importante que los ficheros de traducción residan en el mismo directorio que application.properties, que por defecto, siempre nos viene en la carpeta resources.

ficherosIdiomas

Por tanto, nuestros ficheros tendrán la siguiente nomenclatura para que todo funcione:

messages.properties (idioma por defecto)

messages_us.properties (yanqui)

messages_fr.properties (gabacho)

etc…

Y no serán otra cosa que pares clave/valor (un diccionario de datos):

good.morning.message=Buenos dias (En messages_es.properties)

good.morning.message=Good morning (En messages_us.properties)

good.morning.message=Bonjour (En messages_fr.properties)

Y así con cada frase que queramos traducir en cada uno de los idiomas de nuestro aplicativo.

Es importante recordar que si pedimos un idioma que no posee fichero propio, el texto aparecerá en el idioma por defecto (Locale.US en nuestro ejemplo) y que si por un casual queremos devolver una clave no recogida en los ficheros de idioma, el API nos devolverá  un error tal que así:

No message found under code’ xxx.message’ for locale ‘es_ES’.”

Dicho esto, solo nos queda hacer una pruebecilla desde la clase que maneja las peticiones HTTP. Recordad que esta clase debe venir marcada con la anotación @RestController.

2

Esta clase atenderá desde nuestro navegador una petición GET en la siguiente ruta http://localhost:8080/saludo-idiomas utilizando el Locale que tengamos configurado en ese momento.

Si queremos hacer una prueba, podemos utilizar PostMan  e introducir un header a nuestra petición GET especificando el acrónimo de un idioma concreto para el que tengamos traducción y… ¡Voilá! ¡Here you go! ¡Ahí lo llevas!

postman

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

Crea un sitio web o blog en WordPress.com

Subir ↑

Crea tu página web en WordPress.com
Empieza ahora
A %d blogueros les gusta esto: