Saltar al contenido principal

Algunos usos de vue-i18n

init-qy10 de junio de 2021desarrollo front-endvueAlrededor de 1 min

Comenzar

Cuando se trabaja en proyectos grandes con Vue, a menudo se utiliza Vue i18n como solución de internacionalización.

La mayoría de los casos de uso se pueden encontrar en la documentación oficialopen in new window, aquí solo se registrarán algunos problemas que se pueden encontrar en el uso práctico.

Problemas

const choices = message.split("|"); // line:1807

Por lo tanto, si tu mensaje contiene '|', por favor no utilices tc().

<el-form
  :model="numberValidateForm"
  ref="numberValidateForm"
  label-width="100px"
  class="demo-ruleForm"
>
  <el-form-item
    label="年龄"
    prop="age"
    :rules="[
      { required: true, message: '请输入年龄'}
    ]"
  >
    <el-input type="age" v-model.number="numberValidateForm.age" autocomplete="off" placeholder="请输入年龄"></el-input>
  </el-form-item>
</el-form>

En este formulario, 'Edad' necesita internacionalización, al igual que 'Por favor ingrese su edad'. Esto significa que la internacionalización ocupa dos líneas:

{
  "age": "年龄",
  "agePlaceholder": "请输入年龄"
}

La internacionalización de cada campo implica el doble de trabajo. Si además se divide la internacionalización en módulos, el código se vuelve redundante: $('modelA.modelB.age') y $('modelA.modelB.agePlaceholder'). Para este tipo de situaciones, se puede escribir un método que los reemplace, como se muestra a continuación:

    placeholder(key, inputType = 0, lengthOption = { min: 1, max: 128 }) {
      // 1 input 2 pick 3 length
      const name = this.$t(`modelA.modelB.${key}`);
      if (inputType === 0) {
        return name;
      } else if (inputType === 1) {
        return this.$t('modelA.modelB.nullPrompt') + name;
      } else if (inputType === 2) {
        return this.$t('modelA.modelB.nullPick') + name;
      } else if (inputType === 3) {
        return name + this.$t('modelA.modelB.nameLength', lengthOption);
      }
    },

Este post está traducido usando ChatGPT, por favor feedbackopen in new window si hay alguna omisión.