diff --git a/package-lock.json b/package-lock.json
index 59d220d..6a1a5e5 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",
@@ -3246,7 +3260,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",
@@ -6554,6 +6569,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",
@@ -8982,7 +9023,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",
@@ -10131,8 +10173,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",
@@ -10518,7 +10559,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 911a4b7..0dea714 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",
"register-service-worker": "^1.7.1",
diff --git a/public/locales/en.json b/public/locales/en.json
new file mode 100644
index 0000000..680c869
--- /dev/null
+++ b/public/locales/en.json
@@ -0,0 +1,6 @@
+{
+ "invoices": {
+ "title": "Invoices",
+ "new_invoice": "New invoice"
+ }
+}
diff --git a/public/locales/est.json b/public/locales/est.json
new file mode 100644
index 0000000..9d3e4cf
--- /dev/null
+++ b/public/locales/est.json
@@ -0,0 +1,6 @@
+{
+ "invoices": {
+ "title": "Arved",
+ "new_invoice": "Uus arve"
+ }
+}
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 @@
+
+