Traducciones de Laravel: ¿Short keys o strings como claves?

  • Publicado el 23 agosto, 2024
  • Palabras: 450

Las funciones de traducción de Laravel proporcionan una forma conveniente de recuperar cadenas en varios idiomas, lo que le permite admitir fácilmente múltiples idiomas dentro de su aplicación.

Traducciones de Laravel: ¿Short keys o strings como claves?

Es fácil utilizar traducciones de texto en Laravel. Sin embargo, hay dos formas de identificar una clave: como un string como clave (__('My profile')) o como un array key (short key)  (__('users.my_profile')). Déjame darte mi opinión sobre cuál es la mejor opción.

 

Usar la traducción de un string como clave puede resultar tentador, ya que es más fácil para las personas sin conocimientos técnicos traducir esas frases desde JSON que desde un array PHP.

 

Sin embargo, para proyectos más grandes, tener un único es.json enorme puede ser un problema de mantenimiento. También puede generar errores o comportamientos inesperados. Examinemos dos problemas.

 

#Problema 1. Falta de contexto: significado poco claro

 

La misma frase corta podría tener distintos significados en función de algunas condiciones. Por ejemplo, si tenemos esto:

 

{{ __('Order') }}

 

La palabra "Order" puede tener dos significados:

 

  • Comprar un producto
  • Posición de un registro en la tabla/lista

 

Por lo tanto, si solo hay una clave para ambos casos, el traductor pondrá el mismo valor de traducción.

 

Por ejemplo, una traducción al alemán:

 

lang/de.json:

 

{
    "Order": "bestellen"
}

 

Esa palabra no tendría sentido si la usaras para reordenar registros de tablas, ¿cierto?

 

Por supuesto, podemos hacerlo así:

 

lang/de.json:

 

{
    "Order a product": "bestellen",
    "Order of records": "Reihenfolge"
}

 

Pero es incluso mejor dividir las traducciones en diferentes secciones de array keys o incluso archivos, para tener todo el contexto en un solo lugar.

 

En este caso, el uso de una clave de matriz podría resolver el problema.

 

lang/de/products.php:

 

return [
    'checkout_page' => [
        'order' => 'bestellen',
        // ...
    ],
    'table' => [
        'order' => 'Reihenfolge',
        // ...
    ],
];

 

Luego, en el blade, llamando a esta clave.

 

{{ __('products.checkout_page.order') }}
{{ __('products.table.order') }}

 

#Problema 2. Colocar la palabra como nombre de archivo por accidente

 

El uso de string como claves también puede generar conflictos.

 

Por ejemplo, si utiliza el mismo ejemplo de ‘products’ en algún lugar de su aplicación, existe una gran probabilidad de que utilice la palabra productos. Por lo tanto, la traduciría como __('products ').

 

Pero, como el archivo de traducción products.php ya existe, obtendrá un error.

 

htmlspecialchars() argument #1 ($string) must be of type string array given

 

Esto se debe a que intenta devolver el archivo completo.

 

En mi experiencia, el uso de array keys (short keys)  para las traducciones crearía una aplicación Laravel más fácil de mantener y con menos espacio para errores.

Si bien puede requerir una configuración inicial, los beneficios a largo plazo superan el esfuerzo. En cualquier caso, cualquiera que sea la opción que elija, recuerde tener claves claras tanto para los desarrolladores como para los traductores no técnicos.

Antonio Jenaro

Antonio Jenaro

Web Developer

Archivado en:

Fuente: Laravel Daily

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión