diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9286d57a..01e8a16c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -27,13 +27,13 @@ "tus-js-client": "^3.1.1", "utif": "^3.1.0", "vue": "^3.3.4", - "vue-i18n": "^9.2.2", + "vue-i18n": "^9.3.0", "vue-lazyload": "^3.0.0", "vue-router": "^4.2.4", "vue-toastification": "^2.0.0-rc.5" }, "devDependencies": { - "@intlify/unplugin-vue-i18n": "^0.12.3", + "@intlify/unplugin-vue-i18n": "^1.0.1", "@types/lodash-es": "^4.17.9", "@types/node": "^20.6.0", "@typescript-eslint/eslint-plugin": "^6.6.0", @@ -2166,21 +2166,21 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, "node_modules/@intlify/bundle-utils": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-7.0.2.tgz", - "integrity": "sha512-8wbx9xhbawBFTE5LPTECiK26RRqrNS31jyWSur72ZXZZ4it5jiZTcG6eUJlNirr4+jXYio2DGY299JsGVT4cpw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-7.2.0.tgz", + "integrity": "sha512-ORmE/wx7ffb4hml+WsDYSciEX3cJhc/1hY3OUzByN/utvMnRkA/k/2AkRg5t2v9OUR/FuWgCPIsf2ERIF8EITA==", "dev": true, "dependencies": { - "@intlify/message-compiler": "9.3.0-beta.24", - "@intlify/shared": "9.3.0-beta.24", + "@intlify/message-compiler": "^9.3.0", + "@intlify/shared": "^9.3.0", "acorn": "^8.8.2", "escodegen": "^2.0.0", "estree-walker": "^2.0.2", - "jsonc-eslint-parser": "^1.0.1", + "jsonc-eslint-parser": "^2.3.0", "magic-string": "^0.30.0", "mlly": "^1.2.0", "source-map-js": "^1.0.1", - "yaml-eslint-parser": "^0.3.2" + "yaml-eslint-parser": "^1.2.2" }, "engines": { "node": ">= 14.16" @@ -2195,65 +2195,42 @@ } }, "node_modules/@intlify/core-base": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz", - "integrity": "sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.3.0.tgz", + "integrity": "sha512-SRzn8TMnPZ6MY8OFrgouRq4DGaf01SHcJEF6FglYFYvRkgPzziEcQe+v2PD+O5lUp/rJafP4dabm1CmsVAA7rA==", "dependencies": { - "@intlify/devtools-if": "9.2.2", - "@intlify/message-compiler": "9.2.2", - "@intlify/shared": "9.2.2", - "@intlify/vue-devtools": "9.2.2" + "@intlify/devtools-if": "9.3.0", + "@intlify/message-compiler": "9.3.0", + "@intlify/shared": "9.3.0", + "@intlify/vue-devtools": "9.3.0" }, "engines": { - "node": ">= 14" - } - }, - "node_modules/@intlify/core-base/node_modules/@intlify/message-compiler": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz", - "integrity": "sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==", - "dependencies": { - "@intlify/shared": "9.2.2", - "source-map": "0.6.1" + "node": ">= 16" }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@intlify/core-base/node_modules/@intlify/shared": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz", - "integrity": "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==", - "engines": { - "node": ">= 14" + "funding": { + "url": "https://github.com/sponsors/kazupon" } }, "node_modules/@intlify/devtools-if": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz", - "integrity": "sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.3.0.tgz", + "integrity": "sha512-5aKZnqj0Ff4dfwBX2Oo+MheVs00CBnC0RzWK26aT2M4AF0cxdFLOJAs51/eHT01jmzrxSvfBMjdArUWHwgetfg==", "dependencies": { - "@intlify/shared": "9.2.2" + "@intlify/shared": "9.3.0" }, "engines": { - "node": ">= 14" - } - }, - "node_modules/@intlify/devtools-if/node_modules/@intlify/shared": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz", - "integrity": "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==", - "engines": { - "node": ">= 14" + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" } }, "node_modules/@intlify/message-compiler": { - "version": "9.3.0-beta.24", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.3.0-beta.24.tgz", - "integrity": "sha512-prhHATkgp0mpPqoVgiAtLmUc1JMvs8fMH6w53AVEBn+VF87dLhzanfmWY5FoZWORG51ag54gBDBOoM/VFv3m3A==", - "dev": true, + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.3.0.tgz", + "integrity": "sha512-D8tSJEhTCSFcCzkThjE4Sbk1tIdvzkYa1FaVIzUtZ8hKPATvokNrOiDw1i/h671m8A80l9Ywq594i/LPTB6EJA==", "dependencies": { - "@intlify/shared": "9.3.0-beta.24", + "@intlify/shared": "9.3.0", "source-map-js": "^1.0.2" }, "engines": { @@ -2264,10 +2241,9 @@ } }, "node_modules/@intlify/shared": { - "version": "9.3.0-beta.24", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.3.0-beta.24.tgz", - "integrity": "sha512-AKxJ8s7eKIQWkNaf4wyyoLRwf4puCuQgjSChlDJm5JBEt6T8HGgnYTJLRXu6LD/JACn3Qwu6hM/XRX1c9yvjmQ==", - "dev": true, + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.3.0.tgz", + "integrity": "sha512-MMGRz6zWxtz7rHtxIIdnyb8SYOIaaseN1IvUhAEs9tOW4u77RD4DFp4qgPXesp2Gxo/5QitH9kwSs0jnxGUNEw==", "engines": { "node": ">= 16" }, @@ -2276,13 +2252,13 @@ } }, "node_modules/@intlify/unplugin-vue-i18n": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-0.12.3.tgz", - "integrity": "sha512-0riPtSfTM58JmGNMmJho/aHD2z3K24BESYAmkLvKlo61/LbaPvnjYU1DbSbJEm6bSjE2oEjUj+di3QaYxXei/w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-1.0.1.tgz", + "integrity": "sha512-fqiT42Sd619juSjjBcv5x3itVZ+77xYSB0AaQHpE01gPyfc7TNGaKDsTJJXGzkTCznOSjnhJZbiTzrZEnJ1vDQ==", "dev": true, "dependencies": { - "@intlify/bundle-utils": "^7.0.2", - "@intlify/shared": "9.3.0-beta.24", + "@intlify/bundle-utils": "^7.2.0", + "@intlify/shared": "^9.3.0", "@rollup/pluginutils": "^5.0.2", "@vue/compiler-sfc": "^3.2.47", "debug": "^4.3.3", @@ -2315,23 +2291,18 @@ } }, "node_modules/@intlify/vue-devtools": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz", - "integrity": "sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.3.0.tgz", + "integrity": "sha512-kEaxIz1VEgsz2q5RhoS+fBGTkXr/4+pxmK9mN14+speVGb82HPRntKBmz0GO18I1JisD4Z0vAva+KCTHGeAqbQ==", "dependencies": { - "@intlify/core-base": "9.2.2", - "@intlify/shared": "9.2.2" + "@intlify/core-base": "9.3.0", + "@intlify/shared": "9.3.0" }, "engines": { - "node": ">= 14" - } - }, - "node_modules/@intlify/vue-devtools/node_modules/@intlify/shared": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz", - "integrity": "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==", - "engines": { - "node": ">= 14" + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" } }, "node_modules/@jridgewell/gen-mapping": { @@ -4212,22 +4183,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -5073,55 +5028,55 @@ } }, "node_modules/jsonc-eslint-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz", - "integrity": "sha512-hXBrvsR1rdjmB2kQmUjf1rEIa+TqHBGMge8pwi++C+Si1ad7EjZrJcpgwym+QGK/pqTx+K7keFAtLlVNdLRJOg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.3.0.tgz", + "integrity": "sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==", "dev": true, "dependencies": { - "acorn": "^7.4.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^1.3.0", - "espree": "^6.0.0", - "semver": "^6.3.0" + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">=8.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" } }, - "node_modules/jsonc-eslint-parser/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/jsonc-eslint-parser/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { - "acorn": "bin/acorn" + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/jsonc-eslint-parser/node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6.0.0" - } + "node_modules/jsonc-eslint-parser/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/jsonc-parser": { "version": "3.2.0", @@ -5339,9 +5294,9 @@ } }, "node_modules/mlly": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.1.tgz", - "integrity": "sha512-SCDs78Q2o09jiZiE2WziwVBEqXQ02XkGdUy45cbJf+BpYRIjArXRJ1Wbowxkb+NaM9DWvS3UC9GiO/6eqvQ/pg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", + "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", "dev": true, "dependencies": { "acorn": "^8.10.0", @@ -6204,6 +6159,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -6791,30 +6747,25 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/vue-i18n": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz", - "integrity": "sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.3.0.tgz", + "integrity": "sha512-+2L+ae/e4+fixhjym3lgzGCGQG8wVGlGrDHzjfdgUudheHvbVHu5i6tn6FF+buH75UFA7T5ZO2ZO7zrh6CzuaA==", "dependencies": { - "@intlify/core-base": "9.2.2", - "@intlify/shared": "9.2.2", - "@intlify/vue-devtools": "9.2.2", - "@vue/devtools-api": "^6.2.1" + "@intlify/core-base": "9.3.0", + "@intlify/shared": "9.3.0", + "@intlify/vue-devtools": "9.3.0", + "@vue/devtools-api": "^6.5.0" }, "engines": { - "node": ">= 14" + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" }, "peerDependencies": { "vue": "^3.0.0" } }, - "node_modules/vue-i18n/node_modules/@intlify/shared": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz", - "integrity": "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==", - "engines": { - "node": ">= 14" - } - }, "node_modules/vue-lazyload": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/vue-lazyload/-/vue-lazyload-3.0.0.tgz", @@ -6973,32 +6924,29 @@ "dev": true }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/yaml-eslint-parser": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.3.2.tgz", - "integrity": "sha512-32kYO6kJUuZzqte82t4M/gB6/+11WAuHiEnK7FreMo20xsCKPeFH5tDBU7iWxR7zeJpNnMXfJyXwne48D0hGrg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz", + "integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.3.0", - "lodash": "^4.17.20", - "yaml": "^1.10.0" - } - }, - "node_modules/yaml-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, + "eslint-visitor-keys": "^3.0.0", + "lodash": "^4.17.21", + "yaml": "^2.0.0" + }, "engines": { - "node": ">=4" + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" } }, "node_modules/yocto-queue": { diff --git a/frontend/package.json b/frontend/package.json index b23e0ced..7e31e45f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -33,13 +33,13 @@ "tus-js-client": "^3.1.1", "utif": "^3.1.0", "vue": "^3.3.4", - "vue-i18n": "^9.2.2", + "vue-i18n": "^9.3.0", "vue-lazyload": "^3.0.0", "vue-router": "^4.2.4", "vue-toastification": "^2.0.0-rc.5" }, "devDependencies": { - "@intlify/unplugin-vue-i18n": "^0.12.3", + "@intlify/unplugin-vue-i18n": "^1.0.1", "@types/lodash-es": "^4.17.9", "@types/node": "^20.6.0", "@typescript-eslint/eslint-plugin": "^6.6.0", diff --git a/frontend/src/i18n/index.js b/frontend/src/i18n/index.ts similarity index 70% rename from frontend/src/i18n/index.js rename to frontend/src/i18n/index.ts index 5665137c..4cd72d40 100644 --- a/frontend/src/i18n/index.js +++ b/frontend/src/i18n/index.ts @@ -24,29 +24,9 @@ import("dayjs/locale/uk"); import("dayjs/locale/zh-cn"); import("dayjs/locale/zh-tw"); -import he from "./he.json"; -import hu from "./hu.json"; -import ar from "./ar.json"; -import de from "./de.json"; -import en from "./en.json"; -import es from "./es.json"; -import fr from "./fr.json"; -import is from "./is.json"; -import it from "./it.json"; -import ja from "./ja.json"; -import ko from "./ko.json"; -import nlBE from "./nl-be.json"; -import pl from "./pl.json"; -import pt from "./pt.json"; -import ptBR from "./pt-br.json"; -import ro from "./ro.json"; -import ru from "./ru.json"; -import sk from "./sk.json"; -import tr from "./tr.json"; -import uk from "./uk.json"; -import svSE from "./sv-se.json"; -import zhCN from "./zh-cn.json"; -import zhTW from "./zh-tw.json"; +// All i18n resources specified in the plugin `include` option can be loaded +// at once using the import syntax +import messages from "@intlify/unplugin-vue-i18n/messages"; export function detectLocale() { // locale is an RFC 5646 language tag @@ -132,7 +112,8 @@ export function detectLocale() { return locale; } -const removeEmpty = (obj) => +// TODO: was this really necessary? +function removeEmpty(obj: Record): void { Object.keys(obj) .filter((k) => obj[k] !== null && obj[k] !== undefined && obj[k] !== "") // Remove undef. and null and empty.string. .reduce( @@ -142,37 +123,14 @@ const removeEmpty = (obj) => : Object.assign(newObj, { [k]: obj[k] }), // Copy value. {} ); +} export const rtlLanguages = ["he", "ar"]; export const i18n = createI18n({ locale: detectLocale(), fallbackLocale: "en", - messages: { - he: removeEmpty(he), - hu: removeEmpty(hu), - ar: removeEmpty(ar), - de: removeEmpty(de), - en: en, - es: removeEmpty(es), - fr: removeEmpty(fr), - is: removeEmpty(is), - it: removeEmpty(it), - ja: removeEmpty(ja), - ko: removeEmpty(ko), - "nl-be": removeEmpty(nlBE), - pl: removeEmpty(pl), - "pt-br": removeEmpty(ptBR), - pt: removeEmpty(pt), - ru: removeEmpty(ru), - ro: removeEmpty(ro), - sk: removeEmpty(sk), - sv: removeEmpty(svSE), - tr: removeEmpty(tr), - uk: removeEmpty(uk), - "zh-cn": removeEmpty(zhCN), - "zh-tw": removeEmpty(zhTW), - }, + messages, // expose i18n.global for outside components legacy: true, }); diff --git a/frontend/src/stores/auth.ts b/frontend/src/stores/auth.ts index 2b4defa8..8aefe926 100644 --- a/frontend/src/stores/auth.ts +++ b/frontend/src/stores/auth.ts @@ -27,15 +27,18 @@ export const useAuthStore = defineStore("auth", { const locale = user.locale || detectLocale(); dayjs.locale(locale); + // according to doc u only need .value if legacy: false but they lied + // https://vue-i18n.intlify.dev/guide/essentials/scope.html#local-scope-1 //@ts-ignore - i18n.global.locale = locale; + i18n.global.locale.value = locale; this.user = user; }, updateUser(user: Partial) { if (user.locale) { dayjs.locale(user.locale); + // see above //@ts-ignore - i18n.global.locale = user.locale; + i18n.global.locale.value = user.locale; } this.user = { ...this.user, ...cloneDeep(user) } as IUser; diff --git a/frontend/src/views/settings/Global.vue b/frontend/src/views/settings/Global.vue index 23ac3754..92d6f6b5 100644 --- a/frontend/src/views/settings/Global.vue +++ b/frontend/src/views/settings/Global.vue @@ -158,6 +158,7 @@

{{ t("settings.defaultUserDescription") }}

+