让我一步一步解释我的解决方案:
步骤 1 ) 安装所需的软件包:
npm install nuxt-i18n --save
npm install vee-validate --save
package.json
{
"@nuxtjs/i18n": "^7.0.1",
"vee-validate": "^3.4.12"
}
步骤 2 )在项目的根目录下创建一个名为/locales的文件夹。
步骤 3 )为英文创建文件/locales/en.js
import en from 'vee-validate/dist/locale/en'
export default async (context, locale) => {
return {
validation: en.messages,
email : "email",
};
}
步骤 4 )为第二语言 (Türkçe)创建文件/locales/tr.js
import en from 'vee-validate/dist/locale/tr'
export default async (context, locale) => {
return {
validation: tr.messages,
email : "e-posta",
};
}
步骤 5 ) 创建 i18n 插件文件/plugins/i18n.js
import {configure } from "vee-validate";
export default function ({app}) {
configure({
defaultMessage: (field, values) => {
return app.i18n.t(`validation.${values._rule_}`, values);
}
});
}
步骤 6 ) 创建一个验证插件文件/plugins/validate.js
import Vue from 'vue'
import { ValidationProvider, ValidationObserver, extend} from 'vee-validate';
import { required, email } from 'vee-validate/dist/rules';
Vue.component('appValidationProvider', ValidationProvider);
Vue.component("appValidationObserver", ValidationObserver);
extend("required", required);
extend("email", email);
注意:我在此示例中使用了“必需”和“电子邮件”规则,如果您想使用更多规则,您可以访问指南页面并添加到此文件中。
所有规则列表:https ://vee-validate.logaretm.com/v2/guide/rules.html
步骤 7 ) nuxt.config -> 插件配置
plugins: [
'~/plugins/i18n.js',
'~/plugins/validate.js',
],
步骤 8 ) nuxt.config -> i18n 模块配置
modules: [
['nuxt-i18n', {
baseUrl: 'https://yourdomain.com',
lazy: true,
loadLanguagesAsync: true,
locales: [
{
name: 'English',
code: 'en',
iso: 'en-US',
file: 'en.js'
},
{
name: 'Türkçe',
code: 'tr',
iso: 'tr-TR',
file: 'tr.js'
},
],
langDir: 'locales/',
defaultLocale: 'en',
vueI18n: {
fallbackLocale: 'en'
},
strategy: 'prefix_and_default',
detectBrowserLanguage: {
useCookie: true,
cookieKey: 'i18n_redirected',
alwaysRedirect: false,
fallbackLocale: 'en',
redirectOn: 'root'
},
parsePages: false,
pages: {
'contact/index': {
tr: '/iletisim',
en: '/contact'
}
}
}]
],
第 9 步)nuxt.config -> vee-validate 配置添加:
build: {
transpile: ['vee-validate/dist/rules',
'vee-validate/dist/locale/tr',
'vee-validate/dist/locale/en']
},
用法-> 页面:contact/index.vue
<template>
<app-validation-observer v-slot="{ handleSubmit }">
<form class="form" @submit.prevent="handleSubmit(onSubmit)">
<app-validation-provider rules="required|email" v-slot="{ errors }">
<input type="text" :name="$t('email')" v-model="formData.email">
<span class="is-invalid">{{ errors[0]}}</span>
<button>Test</button>
</app-validation-provider>
</form>
</app-validation-observer>
</template>
<script>
export default {
name: "contact",
data() {
return {
formData: {
email: ''
}
}
},
methods: {
onSubmit() {
console.log('form posted :)');
}
}
}
</script>
<style scoped>
.is-invalid {
color: red;
}
</style>