es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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}

Tags:  , ,

Answer

  1. Avatar for 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:

    ...
    module.exports = (sequelize, DataTypes) => {
      const Candidate = sequelize.define('Candidate', {
        status: {
          type: DataTypes.ENUM,
          values: [
            ...
          ],
        },
        type: {
          type: DataTypes.ENUM,
          values: [types.CANDIDATE, types.EMPLOYEE],
          validate: {
            customValidation(value) {
              if (!allowedTypes.includes(value)) {
                throw new Error(i18next.t('candidate-invalid-type', { allowedTypes, joinArrays: ', ' }));
              }
            },
          },
    ...
    

    En este ejemplo, creamos una función de validación personalizada llamada customValidation que verifica el parámetro value contra la matriz allowedTypes. Si el valor no está incluido en la matriz, se lanza un error utilizando la función i18next.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.

Comments are closed.