From eb85ab4e1bf51cd8d8fdc1f39e2c834925085181 Mon Sep 17 00:00:00 2001 From: Karel Vendla Date: Mon, 19 Apr 2021 13:23:59 +0300 Subject: [PATCH] i18n --- package-lock.json | 54 +++++++++++++++++++++++++---- package.json | 3 ++ public/locales/en.json | 5 +++ public/locales/est.json | 5 +++ src/components/LanguageSwitcher.vue | 35 +++++++++++++++++++ src/components/TheFooter.vue | 3 ++ src/config/i18n.config.js | 35 +++++++++++++++++++ src/main.js | 2 ++ src/router.js | 12 +++++++ src/store/language.js | 27 +++++++++++++++ src/store/store.js | 2 ++ src/views/dashboard/Invoices.vue | 3 +- 12 files changed, 179 insertions(+), 7 deletions(-) create mode 100644 public/locales/en.json create mode 100644 public/locales/est.json create mode 100644 src/components/LanguageSwitcher.vue create mode 100644 src/config/i18n.config.js create mode 100644 src/store/language.js diff --git a/package-lock.json b/package-lock.json index 88ac434..9bcde7c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -795,7 +795,6 @@ "version": "7.11.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", - "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } @@ -942,6 +941,21 @@ "node-fetch": "^2.6.0" } }, + "@panter/vue-i18next": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@panter/vue-i18next/-/vue-i18next-0.15.2.tgz", + "integrity": "sha512-7VX9GyxHJNEJKa2CRzC294Oz5EEbzVDZ1o3O/P8gL/PWBmcFOFsuivRbP/1a9ga2ihv/NBzoCWMCNIEEeCcONQ==", + "requires": { + "deepmerge": "^2.0.0" + }, + "dependencies": { + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + } + } + }, "@soda/friendly-errors-webpack-plugin": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz", @@ -3143,7 +3157,8 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "dev": true, + "optional": true }, "coa": { "version": "2.0.2", @@ -6439,6 +6454,32 @@ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, + "i18next": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.2.1.tgz", + "integrity": "sha512-JLruWDEQ3T6tKT6P7u+DsNtToMHUwUcQIYOMRcnNBdUhSfKkoIDUKdVDKgGtmqr//LrirxjADUdr3d5Gwbow6g==", + "requires": { + "@babel/runtime": "^7.12.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", + "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "i18next-browser-languagedetector": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.0.tgz", + "integrity": "sha512-NXbr/qPqkg6VyUwPrzmVOAafqIk1zdjzhYVxZWoSi338XEGmuOeroEglLdR8nJUJcf5BfOSHva80tqCPwXFTFQ==", + "requires": { + "@babel/runtime": "^7.5.5" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -8821,7 +8862,8 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true + "dev": true, + "optional": true }, "pify": { "version": "4.0.1", @@ -9964,8 +10006,7 @@ "regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, "regenerator-transform": { "version": "0.14.5", @@ -10346,7 +10387,8 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true + "dev": true, + "optional": true }, "rx-lite-aggregates": { "version": "4.0.8", diff --git a/package.json b/package.json index 8a3dc22..94a72b6 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "lint": "vue-cli-service lint" }, "dependencies": { + "@panter/vue-i18next": "^0.15.2", "@vuex-orm/core": "^0.36.3", "@vuex-orm/plugin-change-flags": "https://github.com/mareksmakosz/plugin-change-flags.git", "bootstrap": "^4.5.2", @@ -15,6 +16,8 @@ "core-js": "^2.6.5", "dayjs": "^1.10.3", "es6-promise": "^4.2.6", + "i18next": "^20.2.1", + "i18next-browser-languagedetector": "^6.1.0", "localforage": "^1.9.0", "lodash": "^4.17.21", "vue": "^2.6.10", diff --git a/public/locales/en.json b/public/locales/en.json new file mode 100644 index 0000000..1eb07aa --- /dev/null +++ b/public/locales/en.json @@ -0,0 +1,5 @@ +{ + "invoices": { + "title": "Invoices" + } +} diff --git a/public/locales/est.json b/public/locales/est.json new file mode 100644 index 0000000..690aa32 --- /dev/null +++ b/public/locales/est.json @@ -0,0 +1,5 @@ +{ + "invoices": { + "title": "Arved" + } +} diff --git a/src/components/LanguageSwitcher.vue b/src/components/LanguageSwitcher.vue new file mode 100644 index 0000000..533b10e --- /dev/null +++ b/src/components/LanguageSwitcher.vue @@ -0,0 +1,35 @@ + + diff --git a/src/components/TheFooter.vue b/src/components/TheFooter.vue index 48b2e4e..f886c29 100644 --- a/src/components/TheFooter.vue +++ b/src/components/TheFooter.vue @@ -6,6 +6,7 @@ {{ theme === 'dark' ? 'wb_sunny' : 'brightness_2' }} +
-

Invoices

+

{{ $t('title') }}

@@ -30,6 +30,7 @@ import InvoicesList from '@/components/invoices/InvoicesList'; export default { name: 'invoices', + i18nOptions: { namespaces: 'invoices' }, components: { InvoicesList, BDropdown,