From effd030b284d4950ffcdc5bf5b0b054085d7df20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <ciaranainsworth@outlook.com> Date: Wed, 28 Jul 2021 14:40:49 +0100 Subject: [PATCH] Set up vue3-gettext --- package.json | 8 ++++---- src/PageMixin.vue | 3 +-- src/main.js | 46 +++++++++++++++++++++++++++++++++++----------- src/setup.js | 32 -------------------------------- yarn.lock | 10 +++++----- 5 files changed, 45 insertions(+), 54 deletions(-) delete mode 100644 src/setup.js diff --git a/package.json b/package.json index f2f2f6b3..83c74f94 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "i18n-extract": "scripts/i18n-extract.sh" }, "dependencies": { + "@jshmrtn/vue3-gettext": "^1.0.4", + "@vue/compat": "^3.1.0", "axios": "^0.18.0", "core-js": "^3.6.5", "fork-awesome": "^1.1.7", @@ -19,8 +21,6 @@ "typeface-montserrat": "^0.0.54", "typeface-noto-sans": "^0.0.72", "vue": "^3.1.0", - "@vue/compat": "^3.1.0", - "vue-gettext": "^2.1.2", "vue-head": "^2.1.1", "vue-router": "^3.0.1" }, @@ -29,6 +29,7 @@ "@vue/cli-plugin-eslint": "~4.5.13", "@vue/cli-plugin-pwa": "~4.5.13", "@vue/cli-service": "~4.5.13", + "@vue/compiler-sfc": "^3.1.0", "@vue/eslint-config-prettier": "^6.0.0", "babel-eslint": "^10.1.0", "easygettext": "^2.7.0", @@ -40,8 +41,7 @@ "prettier": "^2.2.1", "purecss": "^1.0.0", "raw-loader": "^3.1.0", - "sass-loader": "^10.1.1", - "@vue/compiler-sfc": "^3.1.0" + "sass-loader": "^10.1.1" }, "eslintConfig": { "root": true, diff --git a/src/PageMixin.vue b/src/PageMixin.vue index 41202950..a3a6aa02 100644 --- a/src/PageMixin.vue +++ b/src/PageMixin.vue @@ -1,5 +1,4 @@ <script> -import Vue from "vue"; import locales from "./locales"; export default { @@ -88,7 +87,7 @@ export default { let self = this; import(`./translations/${newValue}.json`) .then(response => { - Vue.$translations[newValue] = response.default[newValue]; + this.$translations[newValue] = response.default[newValue]; }) .finally(() => { // set current language twice, otherwise we seem to have a cache somewhere diff --git a/src/main.js b/src/main.js index 9c443d3b..31faffcc 100644 --- a/src/main.js +++ b/src/main.js @@ -1,16 +1,40 @@ -import Vue from "vue"; +import { createApp } from "vue"; import App from "./App.vue"; import VueHead from "vue-head"; -import "./setup"; -Vue.use(VueHead, { - separator: "-", - complement: "Funkwhale" -}); import router from "./router"; +import locales from "@/locales"; +import { createGettext } from "@jshmrtn/vue3-gettext"; + +require("fork-awesome/css/fork-awesome.min.css"); + +let availableLanguages = (function() { + let l = {}; + locales.locales.forEach(c => { + l[c.code] = c.label; + }); + return l; +})(); +let defaultLanguage = "en_US"; + +const gettext = createGettext({ + availableLanguages: availableLanguages, + defaultLanguage: defaultLanguage, + translations: {}, + silent: true, + setGlobalProperties: true +}); + +const mainApp = createApp(App) + .use(router) + .use(gettext) + .use(VueHead, { + separator: "-", + complement: "Funkwhale" + }); + +// This is a workaround since vue3-gettext does not expose $translations +// as a global property. We should check to see if there's a better way. -Vue.config.productionTip = false; +mainApp.config.globalProperties.$translations = gettext.translations; -new Vue({ - router, - render: h => h(App) -}).$mount("#app"); +mainApp.mount("#app"); diff --git a/src/setup.js b/src/setup.js deleted file mode 100644 index 057f8725..00000000 --- a/src/setup.js +++ /dev/null @@ -1,32 +0,0 @@ -import Vue from "vue"; -require("fork-awesome/css/fork-awesome.min.css"); - -import GetTextPlugin from "vue-gettext"; - -import locales from "@/locales"; - -let availableLanguages = (function() { - let l = {}; - locales.locales.forEach(c => { - l[c.code] = c.label; - }); - return l; -})(); -let defaultLanguage = "en_US"; -Vue.use(GetTextPlugin, { - availableLanguages: availableLanguages, - defaultLanguage: defaultLanguage, - languageVmMixin: { - computed: { - currentKebabCase: function() { - return this.current.toLowerCase().replace("_", "-"); - } - } - }, - translations: {}, - silent: true -}); - -Vue.config.productionTip = false; - -export default {}; diff --git a/yarn.lock b/yarn.lock index 8184f3e1..b6862863 100644 --- a/yarn.lock +++ b/yarn.lock @@ -944,6 +944,11 @@ cssnano-preset-default "^4.0.0" postcss "^7.0.0" +"@jshmrtn/vue3-gettext@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@jshmrtn/vue3-gettext/-/vue3-gettext-1.0.4.tgz#a33faa87c9149013927aa6996540de95265443c5" + integrity sha512-FX2BcSnvutGpDG49NCIVuwIZ70x8sc9ARA1OPVrv8fOBk/IpgCTGzI9UihgAs0Ift3nDkAOM8k8MyI4SHIiG6g== + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -9416,11 +9421,6 @@ vue-eslint-parser@^7.0.0: lodash "^4.17.21" semver "^6.3.0" -vue-gettext@^2.1.2: - version "2.1.12" - resolved "https://registry.yarnpkg.com/vue-gettext/-/vue-gettext-2.1.12.tgz#444d3220149b17fa4c7caeded3f12d439b698f33" - integrity sha512-7Kw36xtKvARp8ZafQGPK9WR6EM+dhFUikR5f0+etSkiHuvUM3yf1HsRDLYoLLdJ0AMaXxKwgekumzvCk6KX8rA== - vue-head@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/vue-head/-/vue-head-2.2.0.tgz#9e3a141d5a011599a3f6d7adb42a65c428cf73e1" -- GitLab