> Faqs > ¿Cómo traducir los nombres de los campos (input name) en las validaciones Laravel?

¿Cómo traducir los nombres de los campos (input name) en las validaciones Laravel?

Hemos tocado el tema de traducir los mensajes de las validaciones de Laravel. Sin embargo, las traducciones siguen sin estar completas.

Resulta que los nombres de los campos en el formulario están en inglés (están así por buenas prácticas a la hora de programar) y, a pesar de que los mensajes sí están traducidos, los nombres de los campos de formulario en los mensajes aparencen en inglés todavía.

Me explico, el campo es así:

<input type="text" name="currency">

Como vemos, el name del input text está definido como "currency". Entonces el mensaje de validación de Laravel me aparece así:

El campo currency es obligatorio.

Es solo un ejemplo. Por supuesto pasa con todos los nombres de los campos y, aunque se entiende, no queda del todo bien.

¿Cómo podemos traducir esos nombres de campos para que las validaciones de Laravel salgan totalmente en español?

Respuestas

Ok, es un tema importante sin duda eso de traducir los nombres de los campos de validación. Afortunadamente, Laravel ofrece un sistema bastante sencillo y rápido para conseguirlo.

No encontrarás una traducción genérica, puesto que las palabras dependen completamente de los campos que tengas tú en la base de datos. De modo que tienes que editar a mano el archvio de las localizaciones y crear un array con todas las palabras a traducir, que serían los "name" de los <input> y las palabras traducidas en tu idioma.

Para ello tienes que abrir el archivo de la localización de las validaciones, validation.php, que se encuentra en la carpeta lang de tu idioma. Por ejemplo:

resources/lang/es/validation.php

Actualizado: En Laravel 9 las rutas de los archivos de validación han cambiado, ahora las encuentras en la carpeta raíz:

lang/es/validation.php

Obviamente esa es la ruta para la localización al español, pero sirve para traducir los campos a cualquier otro idioma, simplemente cambiando la carpeta "es" por la que sea.

En ese archivo encontrarás un array llamado "attributes". Inicialmente está vacío.

Actualizado: En los archivos de traducciones instalados en una aplicación nueva con Laravel 9 el array attributes no está presente, pero lo puedes generar tú mismo en el array asociativo que encontrarás en validation.php.

  • Como clave (key) del array tienes que colocar el nombre a traducir (el valor del atributo "name", definido en la etiqueta <input>, <select> o cualquier otro elemento de formulario)
  • Como valor tienes que colocar la palabra traducida.

Por ejemplo este sería un posible ejemplo de array de traducciones de atributos name:

'attributes' => [
    'role' => 'rol',
    'name' => 'nombre',
    'password' => 'clave',
],

En Laravel 9 el archivo validation devuelve un array. En el array que devuelve puedes crear un índice con el texto 'attributes', al que asignas el valor de un array con todas las traducciones que necesites para los name de los campos input.

<?php
return [
    'accepted'             => ':attribute debe ser aceptado.',
    
    // Muchas otras entradas de localización

    'attributes' => [
        'title' => 'título',
        'name' => 'nombre',
        'password' => 'clave',
    ],
];
Miguel Angel
3295 146 215 17