From ef4383c9d0dd7b3d16810d3cff3e8d8543461d03 Mon Sep 17 00:00:00 2001
From: Manuel Kocher <manuel.kocher@tugraz.at>
Date: Tue, 14 Jun 2022 11:47:32 +0200
Subject: [PATCH] Implement translation overrides in theme-switcher

---
 packages/theme-switcher/src/demo.js                 |  2 +-
 packages/theme-switcher/src/i18n.js                 |  4 +++-
 packages/theme-switcher/src/theme-switcher.js       | 13 ++++++++++---
 .../assets/theme-switcher.metadata.json             |  2 +-
 .../translation-overrides/de/translation.json       |  6 +++++-
 .../translation-overrides/en/translation.json       |  6 +++++-
 6 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/packages/theme-switcher/src/demo.js b/packages/theme-switcher/src/demo.js
index 7f8725ea..0470dda4 100644
--- a/packages/theme-switcher/src/demo.js
+++ b/packages/theme-switcher/src/demo.js
@@ -101,7 +101,7 @@ export class ThemeSwitcherDemo extends ScopedElementsMixin(LitElement) {
                     <p>${i18n.t('intro')}</p>
                 </div>
                 <div class="content">
-                    <dbp-theme-switcher
+                    <dbp-theme-switcher subscribe="lang, lang-dir"
                         themes='[{"class": "light-theme", "icon": "sun", "name": "Light Mode"}, {"class": "dark-theme", "icon": "night", "name": "Dark Mode"}]'></dbp-theme-switcher>
                 </div>
             </section>
diff --git a/packages/theme-switcher/src/i18n.js b/packages/theme-switcher/src/i18n.js
index 0c6fedc8..96e80814 100644
--- a/packages/theme-switcher/src/i18n.js
+++ b/packages/theme-switcher/src/i18n.js
@@ -1,4 +1,4 @@
-import {createInstance as _createInstance} from '@dbp-toolkit/common/i18next.js';
+import {createInstance as _createInstance, setOverridesByGlobalCache} from '@dbp-toolkit/common/i18next.js';
 
 import de from './i18n/de/translation.json';
 import en from './i18n/en/translation.json';
@@ -6,3 +6,5 @@ import en from './i18n/en/translation.json';
 export function createInstance() {
     return _createInstance({en: en, de: de}, 'de', 'en');
 }
+
+export{setOverridesByGlobalCache};
diff --git a/packages/theme-switcher/src/theme-switcher.js b/packages/theme-switcher/src/theme-switcher.js
index cd138077..473c5b48 100644
--- a/packages/theme-switcher/src/theme-switcher.js
+++ b/packages/theme-switcher/src/theme-switcher.js
@@ -1,4 +1,4 @@
-import {createInstance} from './i18n.js';
+import {createInstance, setOverridesByGlobalCache} from './i18n.js';
 import {html, css} from 'lit';
 import {ScopedElementsMixin} from '@open-wc/scoped-elements';
 import {AdapterLitElement, Icon} from '@dbp-toolkit/common';
@@ -15,6 +15,7 @@ export class ThemeSwitcher extends ScopedElementsMixin(AdapterLitElement) {
         this.boundCloseAdditionalMenuHandler = this.hideModeMenu.bind(this);
         this.detectBrowserDarkMode = false;
         this.darkModeClass = 'dark-theme';
+        this.langDir = '';
     }
 
     static get properties() {
@@ -23,6 +24,7 @@ export class ThemeSwitcher extends ScopedElementsMixin(AdapterLitElement) {
             lang: {type: String},
             themes: {type: Array, attribute: 'themes'},
             darkModeThemeOverride: {type: String, attribute: 'dark-mode-theme-override'},
+            langDir: {type: String, attribute: 'lang-dir'},
         };
     }
 
@@ -55,6 +57,11 @@ export class ThemeSwitcher extends ScopedElementsMixin(AdapterLitElement) {
             this.loadTheme('light-theme');
             this.detectInitialMode();
         });
+        if (this.langDir) {
+          for(let lng of this._i18n.languages) {
+            setOverridesByGlobalCache(this._i18n, this);
+          }
+        }
     }
 
     detectInitialMode() {
@@ -158,8 +165,8 @@ export class ThemeSwitcher extends ScopedElementsMixin(AdapterLitElement) {
             ${commonStyles.getThemeCSS()}
             ${commonStyles.getGeneralCSS()}
             ${commonStyles.getButtonCSS()}
-           
-            
+
+
             mode-button, button.button {
                 border: none;
             }
diff --git a/toolkit-showcase/assets/theme-switcher.metadata.json b/toolkit-showcase/assets/theme-switcher.metadata.json
index 79d3bd98..b7b1ea74 100644
--- a/toolkit-showcase/assets/theme-switcher.metadata.json
+++ b/toolkit-showcase/assets/theme-switcher.metadata.json
@@ -14,5 +14,5 @@
         "de": "Theme Switcher Web Komponente",
         "en": "Theme-Switcher web component"
     },
-    "subscribe": "lang"
+    "subscribe": "lang, lang-dir"
 }
diff --git a/toolkit-showcase/assets/translation-overrides/de/translation.json b/toolkit-showcase/assets/translation-overrides/de/translation.json
index 27d226dd..02197f36 100644
--- a/toolkit-showcase/assets/translation-overrides/de/translation.json
+++ b/toolkit-showcase/assets/translation-overrides/de/translation.json
@@ -1,6 +1,10 @@
 {
     "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."
+      "toolkit-showcase-link": "Es können sogar links mittels <a href=\"{{- link1}}\">interpolation</a> und escaping dargestellt werden.",
+      "color-mode": "Sollte nicht angezeigt werden. Dieser Text ist nur als test vorhanden."
+    },
+    "dbp-theme-switcher": {
+      "color-mode": "Theme ändern"
     }
 }
diff --git a/toolkit-showcase/assets/translation-overrides/en/translation.json b/toolkit-showcase/assets/translation-overrides/en/translation.json
index e3cd5c38..f361db8c 100644
--- a/toolkit-showcase/assets/translation-overrides/en/translation.json
+++ b/toolkit-showcase/assets/translation-overrides/en/translation.json
@@ -1,6 +1,10 @@
 {
     "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."
+      "toolkit-showcase-link": "Furthermore its possible to display links through <a href=\"{{- link1}}\">interpolation</a> and escaping.",
+      "color-mode": "This text is not supposed to be displayed. It is only here for testing."
+    },
+    "dbp-theme-switcher": {
+      "color-mode": "Change theme"
     }
 }
-- 
GitLab