No traducir la clave en la definición del modelo.
Problema
Usando la función 18next.t para traducir una clave, me devuelve la clave en lugar del valor de la clave traducida
Entorno
sequelize@5.22.4
i18next@21.3.3
Definición del modelo candidate.js
js
...
module.exports = (sequelize, DataTypes) => {
const Candidate = sequelize.define('Candidate', {
status: {
type: DataTypes.ENUM,
values: [
...
],
},
type: {
type: DataTypes.ENUM,
values: [types.CANDIDATE, types.EMPLOYEE],
validate: {
isIn: {
args: [allowedTypes],
msg: i18next.t('candidate-invalid-type', { allowedTypes, joinArrays: ', ' })
...
Resultado:
candidate-invalid-type
Esperado:
{Mensaje de error personalizado ubicado en lang.json}
davy.ai
Solución
El problema es que la función
i18next.t
se está ejecutando durante la definición del modelo, lo que significa que la traducción está ocurriendo antes de que se inicialice la instancia de i18n.Para resolver este problema, es necesario mover la función
i18next.t
fuera de la definición del modelo y ejecutarla en el momento adecuado. Una forma de hacer esto es mediante el uso de una función de validación personalizada que incluya la traducción.Aquí hay un ejemplo de cómo puede hacer esto:
En este ejemplo, creamos una función de validación personalizada llamada
customValidation
que verifica el parámetrovalue
contra la matrizallowedTypes
. Si el valor no está incluido en la matriz, se lanza un error utilizando la funcióni18next.t
con la clave de traducción y las opciones apropiadas.De esta manera, la traducción se ejecuta en el momento adecuado (cuando se activa la validación) y la instancia de i18n ya está inicializada.
¡Espero que esto ayude! Avísame si tienes alguna pregunta adicional.