如何在自定义 VuePress 组件中使用 vue-i18n?

How to use vue-i18n in custom VuePress components?

我正在使用 .vuepress/components/ 目录中的 VuePress framework to build a multilingual website for my project. The Internationalization Guide in the VuePress docs is quite helpful, but it doesn't explain, how to translate custom Vue.js components

据我所知,最好的解决方案是将 vue-i18n 插件与 VuePress 集成,但似乎没有关于如何集成的指南?

这可能不是完美的解决方案,但它按预期工作:

  1. 按照 Internationalization Guide 并设置多个语言环境。
  2. 安装 vue-i18nnpm i vue-i18n.
  3. 假设您使用的是默认主题,我们将扩展它以将 vue-i18n 挂接到其中。创建自定义主题目录:mkdir ./.vuepress/theme/.
  4. 在新建的主题目录下添加一个index.js文件:
// .vuepress/theme/index.js

module.exports = {
  extend: '@vuepress/theme-default' // extend the default VuePress theme
}
  1. 通过将另一个文件添加到同一目录来安装 vue-i18n,enhanceApp.js 文件允许您执行一些操作 App Level Enhancements:
// .vuepress/theme/enhanceApp.js

import VueI18n from 'vue-i18n'

export default ({ Vue, options }) => {
  Vue.use(VueI18n);

  options.i18n = new VueI18n({
    locale: 'en',
  });
}
  1. 在您的自定义组件中,您可以设置传递给全局计算的当前语言环境 属性 $lang:
// .vuepress/components/Foo.vue

export default {
  mounted() {
    this.$i18n.locale = this.$lang;
  },
  i18n: {
    messages: {
      'en-US': { title: 'Foo' },
      'de-DE': { title: 'Bar' }
    }
  }
};

我找不到挂接到根组件以全局设置当前语言环境的简单解决方案。也许其他人有关于如何很好地实现这一目标的提示?