使用未捆绑的外部全局变量文件

时间:2018-05-22 22:56:42

标签: javascript webpack vue.js internationalization vue-i18n

我有一个用于国际化的JS文件。我希望能够将这个JS文件传递给客户端,以便他们进行编辑,而无需重建整个项目。

目前我将此文件保存在静态文件夹中,以便在构建后将其转移到我的dist文件夹(我使用的是vue-cli-webpack模板)。

translation.js

const messages = {
  en: {
    message: {
      welcome: 'Welcome',
    },
  },
  fr: {
    message: {
      welcome: 'Bonjour',
    },
  },
};

export default messages;

我在main.js中导入了这个,如下所示:

import Vue from 'vue';
import VueI18n from 'vue-i18n';
import App from './App';

import messages from '../static/translation';

Vue.use(VueI18n);

const i18n = new VueI18n({
  locale: 'en', // set locale
  messages, // set locale messages
});

/* eslint-disable no-new */
new Vue({
  i18n,
  el: '#app',
  components: { App },
  template: '<App/>',
});

虽然在我的开发环境中,这正是我想要的热重新加载(在translate.js中更改字符串并更新我的应用程序)但是一旦我构建了应用程序并将其放在生产站点上它将不再热重装。

我怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:0)

以下是我取得预期成果的方法:

在我的Index.html中,我包含以下静态js文件:

<body>
  <div id="app"></div>
  <script src="/static/translation.js"></script>
  <!-- built files will be auto injected -->
</body>

translation.js文件如下:

const messages = {
  en: {
    title: {
      test_page: 'Test Page Title',
    },
  },
};

window.messages = messages;

main.js更改如下:

import Vue from 'vue';
import VueI18n from 'vue-i18n';
import App from './App';

Vue.use(VueI18n);

const i18n = new VueI18n({
  locale: 'en', // set locale
  messages: window.messages, // set locale messages
});

/* eslint-disable no-new */
new Vue({
  i18n,
  el: '#app',
  components: { App },
  template: '<App/>',
});

这允许我全局使用它:

<template>
  <div class="test-parent">
    <h1>{{ $t('title.test_page') }}</h1>
  </div>
</template>

我对translation.js文件所做的任何更改都会显示在生产环境中。