Traducciones: Traducir un array con parámetros

traducciones

Supongamos que tenemos el siguiente problema. Necesitamos acceder a un array en el fichero de traducciones y sustituir los parámetros por su valor. Se trata de una estructura que va a tener siempre las mismas claves. Un ejemplo que nos encontramos a menudo es el texto con el que construimos un correo electrónico. Imagina el fichero message.php cuya ruta completa sería resources/lang/en/message.php

Si accedemos a tinker. Nos situamos con el terminal en la carpeta raíz de nuestro proyecto y ejecutamos:

Podemos pedir todo este array con una serie de valores definidos:

Cómo puedes comprobar, el efecto no es el deseado. Querríamos obtener el mismo array pero con los parámetros sustituidos por su valor. Veamos como conseguir este efecto.

Para ello usaremos dos superpoderes de Laravel. Las colecciones y las macros en colecciones.

Lo primero que debemos hacer es recorrer el array que nos devuelve la función trans. Esto se consigue convirtiendo el array en una colección con collect() y usando el método map:

Esto ya nos devuelve lo que queremos pero… es un poco díficil de recordar… ¿No?. Laravel nos permite esconder esta complejidad, si se puede generalizar, tras una macro. Pero antes vamos a cambiar un poco nuestro código.

Saquemos el nombre de la llave que queremos traducir fuera:

También podemos sacar fuera de este código el array con las traducciones:

Y ya nos queda algo que podemos empezar a mirar como una macro. Vamos a crearla. Para ello entramos en app/Providers/AppServiceProvider.php y añadimos el siguiente código. Vamos a añadir también que lo que nos devuelva esta macro sea un array:

Y ahora podemos hacer:

Podemos ocultar esto bajo una función en app/Helpers.php

y nuestro código quedaría ejecutado en tinker:

¿Te ha ayudado este post? ¿Tienes dudas? Te veo en los comentarios 😀

Comparte este artículo

Entra en la discusión y deja tu comentario

Veces