如何在.js文件中使用Vue i18n翻译?

鲍比·达·洪伯尔

我正在研究VueCLI。我创建了.js文件,其中包含输入规则:

import Vue from 'vue'

export const $t = (sign) => Vue.prototype.$t(sign)

function checkMail(email) {
  const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ // eslint-disable-line no-eval
  return re.test(String(email).toLowerCase())
}

const rules = {
  gdprRequired: (v) => !!v || $t('registerPage.gdprNotChecked'),
  emailRules: [(v) => checkMail(v) || $t('registerPage.wrongMail')],
}

export default rules

我想在外部js文件中声明规则,然后将其导入其他vue文件中。当我执行此规则时,请正确检查值,但不会显示已翻译的错误消息。我尝试过export const $t = (sign) => Vue.prototype.$t(sign),bcs类似的代码适用于nuxt,但是在VueCLI中,我得到了错误:

vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in beforeMount hook: "ReferenceError: $t is not defined"

found in

---> <VTextField>
       <VForm>
         <Register>
           <VMain>
             <VApp>
               <Session> at src/layouts/Session/Session.vue
                 <App> at src/App.vue
                   <Root>

和这个:

vue.runtime.esm.js?2b0e:1888 ReferenceError: $t is not defined
    at rules.emailRules (rules.js?d86d:21)
    at VueComponent.validate (index.ts?91bf:254)
    at VueComponent.beforeMount (index.ts?91bf:217)
    at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1854)
    at callHook (vue.runtime.esm.js?2b0e:4219)
    at mountComponent (vue.runtime.esm.js?2b0e:4043)
    at VueComponent.Vue.$mount (vue.runtime.esm.js?2b0e:8415)
    at init (vue.runtime.esm.js?2b0e:3118)
    at createComponent (vue.runtime.esm.js?2b0e:5978)
    at createElm (vue.runtime.esm.js?2b0e:5925)

这里在“ register.vue”中导入代码:

import rulesConstant from "@/constants/rules";

计算导出规则到vue变量:

computed: {
    rules() {
      return rulesConstant;
    },
  },

使用示例:

<v-checkbox
          class="custom-checkbox"
          :rules="[rules.gdprRequired]"
          v-model="gdprCheck"
        ></v-checkbox>

你能帮助我吗?

米哈尔·莱维(MichalLevý)

vue-i18n在Vue组件外部使用的最常见方式是导入VueI18nclass的单例实例并直接使用它:

@ / i18n / index.js

import Vue from 'vue'
import VueI18n from 'vue-i18n'
import locales from './locales'

Vue.use(VueI18n);

export default new VueI18n({
  locale: 'en',
  messages: locales,
});

@ /常量/规则

import i18n from '@/i18n/index.js'

const rules = {
  gdprRequired: (v) => !!v || i18n.t('registerPage.gdprNotChecked'),
  emailRules: [(v) => checkMail(v) || i18n.t('registerPage.wrongMail')],
}

export default rules

这样,您就可以使用所有实例方法,而不仅仅是t

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章