Как перевести имена полей, используя vee-validate и vue-i18n - PullRequest
0 голосов
/ 26 декабря 2018

Документация по интеграции 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 }
  },

Содержимое attribute.js:

export const attributes = {
  mail: 'Эл.почта'
}

Ввод:

<input type="text" name="mail" v-validate="'required|email'">

Но безуспешно, даже сообщения не переводятся, если я добавлю:

ru: { message: ruValidation, attributes: attributesRU }

вместо:

ru: ruValidation

Ответы [ 3 ]

0 голосов
/ 21 января 2019

Трудно ответить на ваш вопрос, не видя больше вашего кода.Я настроил рабочую кодовую коробку для вашего элемента ввода здесь .Это успешно преобразует сообщение об ошибке и поле при изменении i18n.locale.

Компонент:

<input type="text" name="mail" v-validate="'required|email'" />
{{ errors.first("mail") }}

setup в 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" }
    }
  }
});
0 голосов
/ 16 августа 2019

Я мог бы заставить его работать, но я не знаю, является ли это лучшим решением.

Я использую 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

0 голосов
/ 26 декабря 2018

Вы можете создать словарь, подобный этому

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

export default dictionary;

Вы должны импортировать его в свой компонент и добавить в библиотеку валидатора, как это

this.$validator.localize(dictionary);

Надеюсь, что это решит вашу проблему.

...