Vue – i18n
Localize
Localize is one of important topic to expand application.
There are some library to support it for vue.
I want to introduce one of them.
vue-i18n made by kazupon is good library for i18n
vue-i18n
To install this, it’s easy.
npm intall --save vue-i18n
Same as other library, creating i18n object and pass it to Vue arguments.
I use previous entry example(made using vue-cli) and clean codes
If you don’t know it, please check my previous vuex entry (Vue – vuex)
This is project structure
vuex2
|- src
|- assets
|- components
| |- FieldInput.vue
| |- MsgDiv.vue
| |- Page.vue Support i18n
|- i18n
| |- index.js setup i18n
| |- message.json localization file
|- router
| |- index.js
|- store
| |- index.js
|- App.vue
|- main.js Add parameter for i18n
Let’s check core part first
i18n/index.js
import Vue from 'vue';
import VueI18n from 'vue-i18n';
const data = require('./message.json');
Vue.use(VueI18n)
const i18n = new VueI18n({
locale: navigator.language.split("-")[0], // Use browser first language
messages: data
});
export default i18n
I use browser first language.
If you want to set specific language, you can change like this
const i18n = new VueI18n({
locale: 'ja'
messages: data
});
i18n/message.json
{
"ja": {
"message": "チワッス"
},
"en": {
"message": "Hi"
}
}
Add json style data.
I supported both Japanese and English. We can write 2 languages in the same file.
main.js
Set i18n library to Vue object
import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store'
import i18n from './i18n'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
i18n,
router,
template: '<App/>',
components: { App },
store
})
components/Page.vue
Localize UI
<template>
<div>
<FieldInput></FieldInput>
<button v-on:click="clickAction">{{ $t("message") }}</button>
<MsgDiv></MsgDiv>
</div>
</template>
<script>
import FieldInput from '@/components/FieldInput'
import MsgDiv from '@/components/MsgDiv'
import { mapActions } from 'vuex'
export default {
name: 'Page',
date() {
return {
message : ''
}
},
methods: {
...mapActions('Page', {
'clickAction': 'clickAction'
})
},
components: {
FieldInput,
MsgDiv
}
}
</script>
<style>
</style>
The point is {{$t(“key”)}}
This part will be localized
