アプリにvue-i18nを組み込む際に問題が発生しました。インスピレーションとして このページ を使用。
<b-navbar-nav class="ml-auto" >
<b-nav-item-dropdown :text="display_name" right>
<b-dropdown-item disabled>{{ $t('username') }}: {{ username }}</b-dropdown-item>
<b-dropdown-item disabled>Organisation: {{ organisation }}</b-dropdown-item>
</b-nav-item-dropdown>
</b-navbar-nav>
エラー:Cannot read property '_t' of undefined at Proxy.Vue.$t
Chrome= devtoolsでエラーを追跡すると、vue-i18n.esm.jsの149行目(returnステートメント)に移動します。
Vue.prototype.$t = function (key) {
var values = [], len = arguments.length - 1;
while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];
var i18n = this.$i18n;
return i18n._t.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this ].concat( values ))
};
私はvue-cli-3 webpack configを使用して、npmからvue-i18nをインストールし、プラグインとして使用しています。
i18n.js(src/pluginsディレクトリ):
import Vue from 'vue/dist/vue.js';
import VueI18n from 'vue-i18n';
Vue.use(VueI18n);
const messages = {
'en': {
username: 'Username',
...
},
'se': {
username: 'Användarnamn',
...
}
};
export let i18n = new VueI18n({
locale: 'en', // set locale
fallbackLocale: 'se', // set fallback locale
messages, // set locale messages
});
main.js:
import Vue from 'vue/dist/vue.js'
import VueRouter from 'vue-router'
import BootstrapVue from 'bootstrap-vue'
import VueSpinners from 'vue-spinners'
import i18n from './plugins/i18n'
...
new Vue({
router,
i18n,
data() {
return store;
},
render: h => h(App)
}).$mount('#app')
Package.jsonからの依存関係:
"dependencies": {
"axios": "^0.18.0",
"bootstrap-vue": "^2.0.0-rc.11",
"npm": "^6.5.0",
"ol": "^5.3.0",
"proj4": "^2.5.0",
"qs": "^6.6.0",
"vue": "^2.5.17",
"vue-i18n": "^8.8.1",
"vue-router": "^3.0.2",
"vue-spinners": "^1.0.2"
},
何をする必要がありますか?
誰かが同じ問題でここに来たが、export default
、これをmain.jsに入れました:
import translations from './translations';
new Vue({
translations,
...
}).$mount('#app');
Translations/index.jsがプラグインをロードした場所と、通常のようにすべてのもの。これを正しく機能させるには、インポートに「i18n」という名前を付ける必要があるようです。
import i18n from './translations';
new Vue({
i18n,
...
}).$mount('#app');