vue.js - 如何在我的 vue-route 中使用 vue-i18n?

标签 vue.js vue-router vue-i18n

  1. 我的主要 app.js

            import Vue from 'vue'
            import language from './language'
            import VueI18n from 'vue-i18n'
    
            Vue.use(VueI18n)
            const i18n = new VueI18n({
              locale: 'en', 
              messages: language.messages,
            })
    
            import router from './router'
            new Vue({
              el: '#app',
              i18n,
              router,
              template: '<App/>',
              components: { App }  
            })
    
  2. 语言.js

            export default { 
                messages : {
                en: {
                    hello: 'hello!'
                  },
                  ja: {
                    hello: 'こんにちは!'
                  },
                  zh: {
                    hello: '你好!'
                  }
                }
            }
    
  3. 我的问题是遵循 route.js 代码,我不能使用 this.$i18n.t('hello'),因为 $i18n不可用。

            import Vue from 'vue'
            import Router from 'vue-router'
    
            export const myRouteMap = [
    
              {
                path: '/',
                component: MyComponent,
                redirect: '/myHome',
                //name: 'Home',
                name: this.$i18n.t('hello') // can't use $i18n here.
              }
            ]
    

有没有人遇到类似情况,想在vue-route中使用i18n解决问题?

最佳答案

在您的示例中,this.i18n 不会被定义,因为它不是该文件上下文中的 Vue 实例。

您的根本问题是您试图将显示数据放入路由 的定义中。这通常是一种不好的做法,会导致您遇到的问题。

routename 属性应该是路由的唯一标识符,并且在定义后不应更改。

如果你想将 Vue 实例的属性基于路由的翻译名称(这对我来说仍然太紧密了),你可以在为路由指定的 Vue 组件中执行此操作。

computed: {
  title() {
    return this.$i18n.t(this.$route.name);
  }
}

不过,实际上,您不应该将显示数据基于 route 对象。似乎在相关属性的定义中指定要传递给 this.$i18n.t 的翻译消息 key 会更清晰,工作也更少:

computed: {
  title() {
    return this.$i18n.t('hello');
  }
} 

关于vue.js - 如何在我的 vue-route 中使用 vue-i18n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46613526/

相关文章:

javascript - 每当我导航到不同的 Vue.js 路线时,我都会被发送到我导航到的 View 的底部,我无法弄清楚为什么

javascript - VueJS api 调用留下数据未定义

vue.js - 如何将变量传递给 vue-router v-link

Laravel dusk 看不到 vuejs 选择器

unit-testing - 使用 Vue.js 和 Jest 进行 URL 重定向测试

javascript - Prop 正在变异 VueJs

javascript - 如何禁用 vuejs 路由器链接?

vue.js - Vue-i18n - 来自 http 请求的动态本地化问题

vue.js - 如何在Vite中使用vue-i18n翻译html?

javascript - 使用 `Vue.extend` 和 vue-i18n 测试组件有什么解决方法吗?