1

在我看来,关于 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
4

3 回答 3

2

如果不查看更多代码,很难回答您的问题。我在这里为您的输入元素设置了一个工作代码框。当 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" }
    }
  }
});
于 2019-01-21T10:43:24.287 回答
1

我可以让它工作,但我不知道这是否是最好的解决方案。

我正在使用 Laravel 和生成器包从 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

于 2019-08-16T13:40:26.367 回答
-1

你可以制作这样的字典

const dictionary = {
  en: {
    messages: {
      required: (field, val) => `Field ${field} is required`
    }
  },
  ru: {
    messages: {
      required: (field, val) => `поле ${field} обязательно`
    }
  },
};

export default dictionary;

你必须在你的组件中导入它并像这样添加到验证器库中

this.$validator.localize(dictionary);

希望这能解决您的问题。

于 2018-12-26T07:25:26.790 回答