From 2a1d67e732327b93cbec0243a71e4db32ca479d3 Mon Sep 17 00:00:00 2001
From: Manuel Kocher <manuel.kocher@tugraz.at>
Date: Thu, 2 Jun 2022 13:49:10 +0200
Subject: [PATCH] Rename lang-files to lang-dir, remove unnecessary attributes

---
 packages/app-shell/src/app-shell.js           |  6 +-
 packages/common/dbp-common-demo.js            |  6 +-
 packages/common/src/i18n.js                   | 26 +------
 packages/common/src/translation.js            | 67 ++++++++-----------
 toolkit-showcase/assets/common.metadata.json  |  2 +-
 .../assets/dbp-toolkit-showcase.html.ejs      |  3 +-
 .../assets/i18n/de/translation.json           |  4 --
 .../assets/i18n/en/translation.json           |  4 --
 .../assets/i18n/overrides/de/translation.json |  6 --
 .../assets/i18n/overrides/en/translation.json |  6 --
 .../translation-overrides/de/translation.json |  6 ++
 .../translation-overrides/en/translation.json |  6 ++
 toolkit-showcase/rollup.config.js             |  2 +-
 .../src/dbp-common-demo-activity.js           |  3 -
 14 files changed, 48 insertions(+), 99 deletions(-)
 delete mode 100644 toolkit-showcase/assets/i18n/de/translation.json
 delete mode 100644 toolkit-showcase/assets/i18n/en/translation.json
 delete mode 100644 toolkit-showcase/assets/i18n/overrides/de/translation.json
 delete mode 100644 toolkit-showcase/assets/i18n/overrides/en/translation.json
 create mode 100644 toolkit-showcase/assets/translation-overrides/de/translation.json
 create mode 100644 toolkit-showcase/assets/translation-overrides/en/translation.json

diff --git a/packages/app-shell/src/app-shell.js b/packages/app-shell/src/app-shell.js
index 15eb1cc0..0c7d2a88 100644
--- a/packages/app-shell/src/app-shell.js
+++ b/packages/app-shell/src/app-shell.js
@@ -74,8 +74,7 @@ export class AppShell extends ScopedElementsMixin(DBPLitElement) {
         this.initateOpenMenu = false;
 
         this.auth = {};
-        this.langFiles = '';
-        this.overrideFiles = '';
+        this.langDir = '';
     }
 
     static get scopedElements() {
@@ -273,8 +272,7 @@ export class AppShell extends ScopedElementsMixin(DBPLitElement) {
             buildTime: {type: String, attribute: 'build-time'},
             env: {type: String},
             auth: {type: Object},
-            langFiles: {type: String, attribute: 'lang-files'},
-            overrideFiles: {type: String, attribute: 'override-files'},
+            langDir: {type: String, attribute: 'lang-dir'},
         };
     }
 
diff --git a/packages/common/dbp-common-demo.js b/packages/common/dbp-common-demo.js
index 7893841f..9448fb39 100644
--- a/packages/common/dbp-common-demo.js
+++ b/packages/common/dbp-common-demo.js
@@ -302,10 +302,8 @@ html {
                         </dbp-translated>
                     </div>
                     <div class="control" id="dbp-translation-demo">
-                        <p><dbp-translation key="toolkit-showcase" subscribe="lang, lang-files"></dbp-translation></p>
-                        <p><dbp-translation key="toolkit-showcase" subscribe="lang, lang-files, override-files"></dbp-translation></p>
-                        <p><dbp-translation key="toolkit-showcase-link" var='{"link1": "https://www.i18next.com/translation-function/interpolation"}' subscribe="lang, lang-files" unsafe></dbp-translation></p>
-                        <p><dbp-translation key="toolkit-showcase-link" var='{"link1": "https://dbp-demo.tugraz.at/"}' subscribe="lang, lang-files, override-files" unsafe></dbp-translation></p>
+                        <dbp-translation key="toolkit-showcase" subscribe="lang, lang-dir"></dbp-translation>
+                        <dbp-translation key="toolkit-showcase-link" var='{"link1": "https://www.i18next.com/translation-function/interpolation"}' subscribe="lang, lang-dir" unsafe></dbp-translation>
                     </div>
                 </div>
             </section>
diff --git a/packages/common/src/i18n.js b/packages/common/src/i18n.js
index 67966f71..63ed95a6 100644
--- a/packages/common/src/i18n.js
+++ b/packages/common/src/i18n.js
@@ -7,30 +7,8 @@ export function createInstance() {
     return _createInstance({en: en, de: de}, 'de', 'en');
 }
 
-export async function createInstanceAsync(langFile, namespace) {
-    if (namespace == undefined)
-      namespace = 'translation';
-    // check if a path to language files is given
-    if(langFile) {
-
-      // request german lang file asynchronously
-      let result = await
-          fetch(langFile + 'de/' + namespace +'.json', {
-              headers: {'Content-Type': 'application/json'},
-          });
-      const dynDe = await result.json();
-
-      // request english lang file asynchronously
-      result = await
-          fetch(langFile + 'en/' + namespace + '.json', {
-              headers: {'Content-Type': 'application/json'},
-          });
-      const dynEn = await result.json();
-
-      return _createInstance({en: dynEn, de: dynDe}, 'de', 'en', namespace);
-    }
-
-    return _createInstance({en: en, de: de}, 'de', 'en', namespace);
+export function createInstanceGivenResources(en, de) {
+    return _createInstance({en: en, de: de}, 'de', 'en');
 }
 
 export {setOverridesByFile};
diff --git a/packages/common/src/translation.js b/packages/common/src/translation.js
index 46000971..53895066 100644
--- a/packages/common/src/translation.js
+++ b/packages/common/src/translation.js
@@ -1,18 +1,15 @@
 import {css, html} from 'lit';
-import {until} from 'lit/directives/until.js';
 import {unsafeHTML} from 'lit/directives/unsafe-html.js';
 import DBPLitElement from '../dbp-lit-element';
-import {createInstanceAsync, setOverridesByFile} from './i18n.js';
+import {createInstanceGivenResources, setOverridesByFile} from './i18n.js';
 
 export class Translation extends DBPLitElement {
     constructor() {
         super();
         this.key = '';
         this.lang = '';
-        this.langFiles = '';
         this.interpolation = '';
-        this.namespace = '';
-        this.overrideFiles = '';
+        this.langDir = '';
     }
 
     static get properties() {
@@ -20,11 +17,9 @@ export class Translation extends DBPLitElement {
             ...super.properties,
             key: {type: String},
             lang: {type: String},
-            langFiles: {type: String, attribute: 'lang-files'},
             interpolation: {type: Object, attribute: 'var'},
             unsafe: {type: Boolean, attribute: 'unsafe'},
-            namespace: {type: String, attribute: 'ns'},
-            overrideFiles: {type: String, attribute: 'override-files'},
+            langDir: {type: String, attribute: 'lang-dir'},
         };
     }
 
@@ -39,22 +34,21 @@ export class Translation extends DBPLitElement {
 
     connectedCallback() {
       super.connectedCallback();
-      if (this.namespace == '') {
-        this._i18n = createInstanceAsync(this.langFiles);
-      }
-      else {
-        this._i18n = createInstanceAsync(this.langFiles, this.namespace);
-      }
 
-      let local = this;
-      let overrideFiles = this.overrideFiles;
+      // init objects with empty string as value for key
+      const de = {};
+      const en = {};
+      de[this.key] = "";
+      en[this.key] = "";
+
+      // create i18n instance with given translations
+      this._i18n = createInstanceGivenResources(en, de);
 
-      if (this.overrideFiles) {
-        this._i18n.then(function(response) {
-          setOverridesByFile(response, local, overrideFiles).then(function(response) {
-              local._i18n = response;
-              local.requestUpdate();
-          });
+      // after init of overrides rerender page
+      let local = this;
+      if (this.langDir) {
+        setOverridesByFile(this._i18n, this, this.langDir).then(function(response) {
+            local.requestUpdate();
         });
       }
     }
@@ -64,9 +58,7 @@ export class Translation extends DBPLitElement {
         changedProperties.forEach((oldValue, propName) => {
             switch (propName) {
                 case 'lang':
-                    Promise.resolve(this._i18n).then(function(response) {
-                      response.changeLanguage(lang);
-                    });
+                    this._i18n.changeLanguage(lang);
                     break;
             }
         });
@@ -75,24 +67,19 @@ export class Translation extends DBPLitElement {
     }
 
     render() {
-        // save global key in local variable for async use
-        let key = this.key;
-        let interpolation = this.interpolation;
-        let unsafe = this.unsafe;
-
-        // async request to i18n translation
-        const translation = Promise.resolve(this._i18n).then(function(response){
-          if (interpolation && unsafe)
-            return unsafeHTML(response.t(key, interpolation));
-          else if (interpolation)
-            return response.t(key, interpolation);
+        // request to i18n translation
+        const translation = (() => {
+          if (this.interpolation && this.unsafe)
+            return unsafeHTML(this._i18n.t(this.key, this.interpolation));
+          else if (this.interpolation)
+            return this._i18n.t(this.key, this.interpolation);
           else
-            return response.t(key);
-        });
+            return this._i18n.t(this.key);
+        })();
 
-        // load translation text when available, otherwise display "Loading.."
+        // load translation text
         return html`
-            ${until(translation, html`Loading..`)}
+            ${translation}
         `;
     }
 }
diff --git a/toolkit-showcase/assets/common.metadata.json b/toolkit-showcase/assets/common.metadata.json
index 12f74b5c..de1f70c7 100644
--- a/toolkit-showcase/assets/common.metadata.json
+++ b/toolkit-showcase/assets/common.metadata.json
@@ -14,5 +14,5 @@
         "de": "Gemeinsame Web Components",
         "en": "Common web components"
     },
-    "subscribe": "lang,entry-point-url,lang-files"
+    "subscribe": "lang,entry-point-url"
 }
diff --git a/toolkit-showcase/assets/dbp-toolkit-showcase.html.ejs b/toolkit-showcase/assets/dbp-toolkit-showcase.html.ejs
index 9d45cbe4..07b21311 100644
--- a/toolkit-showcase/assets/dbp-toolkit-showcase.html.ejs
+++ b/toolkit-showcase/assets/dbp-toolkit-showcase.html.ejs
@@ -113,8 +113,7 @@
 <<%= name %>
     provider-root
     lang="de"
-    lang-files="<%= getPrivateUrl('i18n/') %>"
-    override-files="<%= getPrivateUrl('i18n/overrides/') %>"
+    lang-dir="<%= getPrivateUrl('translation-overrides/') %>"
     entry-point-url="<%= entryPointURL %>"
     nextcloud-auth-url="<%= nextcloudWebAppPasswordURL %>"
     nextcloud-web-dav-url="<%= nextcloudWebDavURL %>"
diff --git a/toolkit-showcase/assets/i18n/de/translation.json b/toolkit-showcase/assets/i18n/de/translation.json
deleted file mode 100644
index 2d759b35..00000000
--- a/toolkit-showcase/assets/i18n/de/translation.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-    "toolkit-showcase": "Dieser Text wird mithilfe von i18n aus einer benutzerdefinierten Sprachdatei gelesen und ins Englische übersetzt wenn man die Sprache auf Englisch stellt.",
-    "toolkit-showcase-link": "Es können sogar links mittels <a href=\"{{- link1}}\">interpolation</a> und escaping dargestellt werden."
-}
diff --git a/toolkit-showcase/assets/i18n/en/translation.json b/toolkit-showcase/assets/i18n/en/translation.json
deleted file mode 100644
index 5d133a06..00000000
--- a/toolkit-showcase/assets/i18n/en/translation.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-    "toolkit-showcase": "This text will be translated to german using i18n with a user defined language file when the language is changed to german.",
-    "toolkit-showcase-link": "Furthermore its possible to display links through <a href=\"{{- link1}}\">interpolation</a> and escaping."
-}
diff --git a/toolkit-showcase/assets/i18n/overrides/de/translation.json b/toolkit-showcase/assets/i18n/overrides/de/translation.json
deleted file mode 100644
index b3b136fb..00000000
--- a/toolkit-showcase/assets/i18n/overrides/de/translation.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-    "dbp-translation": {
-      "toolkit-showcase": "Ãœberschriebener i18n toolkit-showcase Text",
-      "toolkit-showcase-link": "Ãœberschriebener i18n toolkit-showcase-link Text mit <a href=\"{{- link1}}\">TestLink</a>"
-    }
-}
diff --git a/toolkit-showcase/assets/i18n/overrides/en/translation.json b/toolkit-showcase/assets/i18n/overrides/en/translation.json
deleted file mode 100644
index 3892525b..00000000
--- a/toolkit-showcase/assets/i18n/overrides/en/translation.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-    "dbp-translation": {
-      "toolkit-showcase": "Overriden i18n toolkit-showcase text",
-      "toolkit-showcase-link": "Overriden i18n toolkit-showcase-link text with a <a href=\"{{- link1}}\">test link</a>"
-    }
-}
diff --git a/toolkit-showcase/assets/translation-overrides/de/translation.json b/toolkit-showcase/assets/translation-overrides/de/translation.json
new file mode 100644
index 00000000..27d226dd
--- /dev/null
+++ b/toolkit-showcase/assets/translation-overrides/de/translation.json
@@ -0,0 +1,6 @@
+{
+    "dbp-translation": {
+      "toolkit-showcase": "Dieser Text wird mithilfe von i18n aus einer benutzerdefinierten Sprachdatei gelesen und ins Englische übersetzt wenn man die Sprache auf Englisch stellt.",
+      "toolkit-showcase-link": "Es können sogar links mittels <a href=\"{{- link1}}\">interpolation</a> und escaping dargestellt werden."
+    }
+}
diff --git a/toolkit-showcase/assets/translation-overrides/en/translation.json b/toolkit-showcase/assets/translation-overrides/en/translation.json
new file mode 100644
index 00000000..e3cd5c38
--- /dev/null
+++ b/toolkit-showcase/assets/translation-overrides/en/translation.json
@@ -0,0 +1,6 @@
+{
+    "dbp-translation": {
+      "toolkit-showcase": "This text will be translated to german using i18n with a user defined language file when the language is changed to german.",
+      "toolkit-showcase-link": "Furthermore its possible to display links through <a href=\"{{- link1}}\">interpolation</a> and escaping."
+    }
+}
diff --git a/toolkit-showcase/rollup.config.js b/toolkit-showcase/rollup.config.js
index e02d2ed1..5320e77e 100644
--- a/toolkit-showcase/rollup.config.js
+++ b/toolkit-showcase/rollup.config.js
@@ -168,7 +168,7 @@ Dependencies:
                     {src: 'assets/icon-*.png', dest: 'dist/' + (await getDistPath(pkg.name))},
                     {src: 'assets/apple-*.png', dest: 'dist/' + (await getDistPath(pkg.name))},
                     {src: 'assets/safari-*.svg', dest: 'dist/' + (await getDistPath(pkg.name))},
-                    {src: 'assets/i18n', dest: 'dist/' + (await getDistPath(pkg.name))},
+                    {src: 'assets/translation-overrides', dest: 'dist/' + (await getDistPath(pkg.name))},
                     {
                         src: 'assets/manifest.json',
                         dest: 'dist',
diff --git a/toolkit-showcase/src/dbp-common-demo-activity.js b/toolkit-showcase/src/dbp-common-demo-activity.js
index 7dee8d6b..fc633b9d 100644
--- a/toolkit-showcase/src/dbp-common-demo-activity.js
+++ b/toolkit-showcase/src/dbp-common-demo-activity.js
@@ -13,7 +13,6 @@ class DbpCommonDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
         super();
         this.lang = 'en';
         this.entryPointUrl = '';
-        this.langFiles = '';
     }
 
     static get scopedElements() {
@@ -26,7 +25,6 @@ class DbpCommonDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
         return {
             ...super.properties,
             lang: {type: String},
-            langFiles: {type: String, attribute: 'lang-files'},
             entryPointUrl: {type: String, attribute: 'entry-point-url'},
         };
     }
@@ -65,7 +63,6 @@ class DbpCommonDemoActivity extends ScopedElementsMixin(AdapterLitElement) {
             <dbp-common-demo
                 id="demo"
                 lang="${this.lang}"
-                lang-files="${this.langFiles}"
                 entry-point-url="${this.entryPointUrl}"></dbp-common-demo>
         `;
     }
-- 
GitLab