From d20423c210e80193cc65b2ef25e209f529feaf02 Mon Sep 17 00:00:00 2001 From: lostdesign Date: Thu, 20 Jun 2019 12:11:32 +0200 Subject: [PATCH] setup i18n --- nuxt.config.js | 1 + package-lock.json | 5 +++++ package.json | 3 ++- plugins/i18n.js | 25 +++++++++++++++++++++++++ store/store.js | 12 ++++++++++++ 5 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 plugins/i18n.js create mode 100644 store/store.js diff --git a/nuxt.config.js b/nuxt.config.js index 6958188..bb19251 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -49,6 +49,7 @@ export default { ** Plugins to load before mounting the App */ plugins: [ + '~/plugins/i18n.js' ], /* diff --git a/package-lock.json b/package-lock.json index 3a57dd0..80613bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10364,6 +10364,11 @@ "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz", "integrity": "sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g==" }, + "vue-i18n": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.11.2.tgz", + "integrity": "sha512-STcpmxqBrG77SyWi7e0Yn/B3DjKR6mSDwYS4F/V7zoi+e/+CPbVb2TaBqFwnrkoDcPmRfjM7nTwsiRQQOGdifw==" + }, "vue-loader": { "version": "15.7.0", "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.0.tgz", diff --git a/package.json b/package.json index 9b83c2f..62231b5 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "dependencies": { "cross-env": "^5.2.0", "nuxt": "^2.4.0", - "nuxt-clipboard2": "^0.2.1" + "nuxt-clipboard2": "^0.2.1", + "vue-i18n": "^8.11.2" }, "devDependencies": { "autoprefixer": "^8.6.4", diff --git a/plugins/i18n.js b/plugins/i18n.js new file mode 100644 index 0000000..e4208be --- /dev/null +++ b/plugins/i18n.js @@ -0,0 +1,25 @@ +import Vue from 'vue' +import VueI18n from 'vue-i18n' + +Vue.use(VueI18n) + +export default ({ app, store }) => { + // Set i18n instance on app + // This way we can use it in middleware and pages asyncData/fetch + app.i18n = new VueI18n({ + locale: store.state.locale, + fallbackLocale: 'en', + messages: { + 'en': require('~/locales/en.json'), + 'fr': require('~/locales/fr.json') + } + }) + + app.i18n.path = (link) => { + if (app.i18n.locale === app.i18n.fallbackLocale) { + return `/${link}` + } + + return `/${app.i18n.locale}/${link}` + } +} diff --git a/store/store.js b/store/store.js new file mode 100644 index 0000000..a48f0d9 --- /dev/null +++ b/store/store.js @@ -0,0 +1,12 @@ +export const state = () => ({ + locales: ['en', 'fr', 'de'], + locale: 'en' +}) + +export const mutations = { + SET_LANG(state, locale) { + if (state.locales.indexOf(locale) !== -1) { + state.locale = locale + } + } +}