我认为,有关将i18n与vee-validate集成的文档不完整。如果我将i18n与vee-validate一起使用,我仍然不知道如何翻译字段名称。
这是我的main.js:
import ruValidation from 'vee-validate/dist/locale/ru'
import enValidation from 'vee-validate/dist/locale/en'
Vue.use(VeeValidate, {
i18nRootKey: 'validations',
i18n,
dictionary: {
en: enValidation,
ru: ruValidation
},
errorBagName: 'vErrors',
events: ''
})
但是问题是-我该如何转换属性?我尝试过:
import attributesRU from './locales/veevalidate/ru/attributes'
dictionary: {
en: enValidation,
ru: { message: ruValidation, attributes: attributesRU }
},
attributes.js的内容:
export const attributes = {
mail: 'Эл.почта'
}
输入:
<input type="text" name="mail" v-validate="'required|email'">
但是如果我添加,即使没有消息也无法翻译成功
ru: { message: ruValidation, attributes: attributesRU }
代替:
ru: ruValidation
答案 0 :(得分:1)
我可以使用它,但是我不知道这是否是最佳解决方案。
我正在使用Laravel和generator package从php lang文件中创建翻译文件。
JS文件:
/**
* For translations in Vue use i18n Package
*/
import VueInternationalization from 'vue-i18n';
import Locale from './vue-i18n-locales.generated';
Vue.use(VueInternationalization);
const i18n = new VueInternationalization({
locale: 'de',
messages: Locale
});
/**
* Form Validation
*/
import VeeValidate from 'vee-validate';
import { ValidationProvider } from 'vee-validate';
import de from 'vee-validate/dist/locale/de';
import en from 'vee-validate/dist/locale/en';
import fr from 'vee-validate/dist/locale/fr';
Vue.use(VeeValidate, {
i18n,
dictionary: {
en: {
messages: en.messages,
attributes: Locale.en.attributes, // I use a lang file called attributes
},
de: {
messages: de.messages,
attributes: Locale.de.attributes,
},
fr: {
messages: fr.messages,
attributes: Locale.fr.attributes,
},
},
});
要更改JS中的语言环境,请使用
:i18n.locale = 'fr';
对于管理翻译文件,我建议使用BabelEdit
答案 1 :(得分:0)
您可以制作这样的字典
const dictionary = {
en: {
messages: {
required: (field, val) => `Field ${field} is required`
}
},
ru: {
messages: {
required: (field, val) => `поле ${field} обязательно`
}
},
};
export default dictionary;
您必须将其导入到组件中,然后像这样添加到验证程序库中
this.$validator.localize(dictionary);
希望这可以解决您的问题。
答案 2 :(得分:0)
不看更多代码很难回答您的问题。我为您的输入元素here设置了一个有效的codeandbox。修改i18n.locale后,这将成功翻译错误消息和字段。
组件:
<input type="text" name="mail" v-validate="'required|email'" />
{{ errors.first("mail") }}
在index.js中进行设置:
import ru from "vee-validate/dist/locale/ru";
import en from "vee-validate/dist/locale/en";
import VueI18n from "vue-i18n";
Vue.use(VueI18n);
const i18n = new VueI18n({
locale: "ru"
});
Vue.use(VeeValidate, {
i18n,
dictionary: {
ru: {
messages: ru.messages,
attributes: { mail: "Эл.почта" }
},
en: {
messages: en.messages,
attributes: { mail: "mail test" }
}
}
});