【问题标题】:How to integrate VeeValidate with vue-i18n?如何将 VeeValidate 与 vue-i18n 集成?
【发布时间】:2020-10-16 08:20:48
【问题描述】:

通过单击事件,我更改了 vue-i18n 语言,我想将 vee-validate 字典更改为相同的语言

ma​​in.js

import VeeValidate from 'vee-validate'
import validations from './validations.js'
import i18n from './lang'
Vue.use(VeeValidate)
new Vue({
   router,
   store,
   i18n,
   render: h => h(App)
}).$mount('#app')

vue-i18n 文件夹 > lang/index.js

import Vue from 'vue'
import VueI18n from 'vue-i18n'
import en from './locals/en'
import es from './locals/es'

Vue.use(VueI18n)

export default new VueI18n({
  locale: 'en',
  messages: {
    en: {
      lang: en
    },
    es: {
      lang: es
    }
  }
})

vee-validate 文件夹 > src/validations.js

import {Validator} from 'vee-validate'
const dictionary = {
    en: {
        custom: {
            signupEmail: {
                required: 'Error',
            },
              
        }
    },
    es: {
        custom: {
            signupEmail: {
                required: 'Hubo un error',
            },
              
        }
    }    
}
Validator.localize(dictionary)
const validator = new Validator()
validator.localize('en')
export default Validator

我正在尝试以 validator.localize('en') 为目标,但我无法更改为 es 字典,即使我手动更改它 validator.localize('es')。我缺少什么?

【问题讨论】:

    标签: javascript vue.js vuejs2 vee-validate vue-i18n


    【解决方案1】:

    看起来您已经很接近了,但缺少一些关键部分。

    你可以在连接 VeeValidate 时像这样pass an object

    Vue.use(VeeValidate, {
       i18nRootKey: 'custom', // customize the root path for validation messages.
       i18n,
       dictionary: {
        en: {
        custom: {
            signupEmail: {
                required: 'Error',
            },        
          }
        },
        es: {
        custom: {
            signupEmail: {
                required: 'Hubo un error',
            },    
           }
         }
       }
    });
    

    显然我只是将您的字典内联在这里,最好将其保存为单独的文件并以这种方式导入。

    【讨论】:

    • 嗨@maxshuty,我认为我仍然缺少一些东西,这就是我对你的代码所做的,1.评论validations.js 2.将你的代码添加到main.js 3.更改语言并且仍然只会英语
    • @AlexHunter 你确定你的语言确实触发了你认为的变化吗?
    • 当然,实际上我用moment.js和vue-i18n同时改变语言,但我不能让它和veevalidate一起工作
    • 你是否将 VeeValidate before i18n 加载到 Vue 实例中?
    • 谢谢。有点做到了:) codesandbox.io/s/…
    【解决方案2】:

    我自己想出了怎么做。

    在App.vue set里面的mounted循环钩子

    VeeValidate.Validator.locale = `${language}`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-06
      • 2021-10-24
      • 1970-01-01
      • 2017-09-15
      • 2021-12-16
      • 2020-01-19
      • 1970-01-01
      相关资源
      最近更新 更多