"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Enumeraciones y idiomas en Laravel

Enumeraciones y idiomas en Laravel

Publicado el 2024-11-07
Navegar:469

Informe
En un proyecto en el que trabajé, había un campo de selección que tenía valores definidos que no cambiarían. Entonces, para enumerar los elementos en esta selección, decidí crear una clase de enumeración y luego describir estos valores. Sin embargo, el proyecto necesitaba soportar los idiomas inglés y español, y el texto de las opciones seleccionadas debía adaptarse a esto sin perder la referencia al elemento de enumeración respectivo. En otras palabras, si seleccioné el elemento "caballo", necesitaba que el sistema supiera que este elemento sigue siendo "caballo" aunque aparezca como "caballo" o "caballo". Fue para mantener la integridad de los datos que creé la siguiente estructura integrando enum y lang en el proyecto.

¿Qué son las enumeraciones?
Una breve introducción. A partir de la versión 8.1 de PHP, se introdujo una clase especial para enumerar valores. En la práctica, esto significa que podemos crear una clase cuyos valores de propiedad serán constantes. Un ejemplo es el estado, porque si lo dejas libre, a lo largo del código probablemente tendrás un estado "activo", otro "Activo", otro "Activo" etc. Pero si vincula el estado a una enumeración y usa la enumeración en lugar de escribir la cadena, me aseguraré de que en cualquier parte del código el valor siempre será el de la enumeración.

enum Status
{
    case ATIVO = "ativo";
    case INATIVO = "inativo";
    case PENDENTE = "pendente";
}

Enumeraciones e idioma
Dado que la enumeración es una clase, normalmente puedo crear métodos para mi clase. Entonces, creé el método display() que será responsable de manejar la visualización de mi valor de enumeración, adaptándolo al idioma que está usando el usuario, sin embargo, sin cambiar el valor original en mi elemento de enumeración. En otras palabras, para el usuario, el estado aparece "Pendiente", o "Pendiente", o "Pendiente"; pero en la base de datos solo se guarda como "pendiente", que es el valor original y a través de él puedo obtener mi elemento de la enumeración, y desde ese elemento usar el método de visualización para mostrarlo traducido al usuario.
Pero antes de mostrar el ejemplo, una introducción a Laravel lang. lang es una carpeta en la raíz del proyecto para almacenar las traducciones que admitirá su proyecto. Cada idioma tiene una carpeta y en esa carpeta se guardan los archivos para los contextos de traducción. Estos archivos tienen una matriz, donde la clave es una representación de la palabra y el valor es la traducción al idioma respectivo.

Enums e lang no Laravel

Configurando el método de visualización
En la carpeta de idioma, crearé un archivo status.php para cada carpeta de idioma con la siguiente matriz:

value => "Ativo",
    Status::INATIVO->value => "Inativo",
    Status::PENDENTE->value => "Pendente",
];

Corrijo los valores del array a las respectivas traducciones del idioma respectivo.
Y mi método de visualización buscará la traducción del elemento de enumeración en estos archivos status.php y devolverá este valor.

public function display(): string
{
    return trans('status.'.$this->value);
}

Ejemplo de uso:

// EN
echo Status::ATIVO->display(); // Active

// PT_BR
echo Status::INATIVO->display(); // Inativo

// ES
echo Status::PENDENTE->display(); // Pediente

Conclusión
Con esto garantizo que mi valor de enumeración se mantiene constante en mi código, pero se adapta al idioma del usuario usando el método display sin perder la integridad de los datos. También sigue siendo flexible si agrego un nuevo idioma al sistema. Espero que lo hayas disfrutado y nos vemos la próxima.

Declaración de liberación Este artículo se reproduce en: https://dev.to/eunael/enums-e-lang-no-laravel-43am?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3