From 8b653471c9bd85a07d3ee7ef110cb6438727959e Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Thu, 10 Jun 2021 16:18:41 +0200
Subject: [PATCH] auth: port to one i18next instance per component instance

---
 packages/auth/i18next-scanner.config.js    | 1 +
 packages/auth/src/auth-keycloak.js         | 5 +++--
 packages/auth/src/dbp-auth-demo.js         | 5 +++--
 packages/auth/src/i18n.js                  | 8 ++++++--
 packages/auth/src/i18n/de/translation.json | 3 +--
 packages/auth/src/i18n/en/translation.json | 3 +--
 packages/auth/src/login-button.js          | 6 ++++--
 7 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/packages/auth/i18next-scanner.config.js b/packages/auth/i18next-scanner.config.js
index 8c277798..aeb8fdb6 100644
--- a/packages/auth/i18next-scanner.config.js
+++ b/packages/auth/i18next-scanner.config.js
@@ -6,6 +6,7 @@ module.exports = {
     options: {
         debug: false,
         removeUnusedKeys: true,
+        func: {list: ['i18n.t', '_i18n.t']},
         lngs: ['en','de'],
         resource: {
             loadPath: 'src/i18n/{{lng}}/{{ns}}.json',
diff --git a/packages/auth/src/auth-keycloak.js b/packages/auth/src/auth-keycloak.js
index ab5c0020..f5b5ab71 100644
--- a/packages/auth/src/auth-keycloak.js
+++ b/packages/auth/src/auth-keycloak.js
@@ -1,4 +1,4 @@
-import {i18n} from './i18n.js';
+import {createInstance} from './i18n.js';
 import JSONLD from '@dbp-toolkit/common/jsonld';
 import  {KeycloakWrapper} from './keycloak.js';
 import {LoginStatus} from './util.js';
@@ -32,6 +32,7 @@ export class AuthKeycloak extends AdapterLitElement {
         this.entryPointUrl = '';
         this._loginStatus = LoginStatus.UNKNOWN;
         this.requestedLoginStatus = LoginStatus.UNKNOWN;
+        this._i18n = createInstance();
 
         // Keycloak config
         this.keycloakUrl = null;
@@ -49,7 +50,7 @@ export class AuthKeycloak extends AdapterLitElement {
         changedProperties.forEach((oldValue, propName) => {
             switch (propName) {
                 case 'lang':
-                    i18n.changeLanguage(this.lang);
+                    this._i18n.changeLanguage(this.lang);
                 break;
                 case 'entryPointUrl':
                     // for preloading the instance
diff --git a/packages/auth/src/dbp-auth-demo.js b/packages/auth/src/dbp-auth-demo.js
index 96ed5a0f..3b9170f6 100644
--- a/packages/auth/src/dbp-auth-demo.js
+++ b/packages/auth/src/dbp-auth-demo.js
@@ -1,4 +1,4 @@
-import {i18n} from './i18n.js';
+import {createInstance} from './i18n.js';
 import {html} from 'lit-element';
 import {ScopedElementsMixin} from '@open-wc/scoped-elements';
 import {AuthKeycloak} from './auth-keycloak.js';
@@ -14,6 +14,7 @@ export class DbpAuthDemo extends ScopedElementsMixin(DBPLitElement) {
         this.entryPointUrl = '';
         this.auth = {};
         this.noAuth = false;
+        this._i18n = createInstance();
     }
 
     static get scopedElements() {
@@ -36,7 +37,7 @@ export class DbpAuthDemo extends ScopedElementsMixin(DBPLitElement) {
     update(changedProperties) {
         changedProperties.forEach((oldValue, propName) => {
             if (propName === "lang") {
-                i18n.changeLanguage(this.lang);
+                this._i18n.changeLanguage(this.lang);
             }
         });
 
diff --git a/packages/auth/src/i18n.js b/packages/auth/src/i18n.js
index 498d9f03..fbc1b032 100644
--- a/packages/auth/src/i18n.js
+++ b/packages/auth/src/i18n.js
@@ -1,6 +1,10 @@
-import {createInstance} from '@dbp-toolkit/common/i18next.js';
+import {createInstance as _createInstance, setOverrides} from '@dbp-toolkit/common/i18next.js';
 
 import de from './i18n/de/translation.json';
 import en from './i18n/en/translation.json';
 
-export const i18n = createInstance({en: en, de: de}, 'de', 'en');
\ No newline at end of file
+export function createInstance() {
+    return _createInstance({en: en, de: de}, 'de', 'en');
+}
+
+export {setOverrides};
\ No newline at end of file
diff --git a/packages/auth/src/i18n/de/translation.json b/packages/auth/src/i18n/de/translation.json
index 761eaa9c..48287f0d 100644
--- a/packages/auth/src/i18n/de/translation.json
+++ b/packages/auth/src/i18n/de/translation.json
@@ -1,5 +1,4 @@
 {
   "login": "Einloggen",
-  "logout": "Ausloggen",
-  "profile": "Profil"
+  "logout": "Ausloggen"
 }
diff --git a/packages/auth/src/i18n/en/translation.json b/packages/auth/src/i18n/en/translation.json
index fc4a7710..8c6f4faa 100644
--- a/packages/auth/src/i18n/en/translation.json
+++ b/packages/auth/src/i18n/en/translation.json
@@ -1,5 +1,4 @@
 {
   "login": "Login",
-  "logout": "Logout",
-  "profile": "Profile"
+  "logout": "Logout"
 }
diff --git a/packages/auth/src/login-button.js b/packages/auth/src/login-button.js
index cd638494..63e7353d 100644
--- a/packages/auth/src/login-button.js
+++ b/packages/auth/src/login-button.js
@@ -1,4 +1,4 @@
-import {i18n} from './i18n.js';
+import {createInstance} from './i18n.js';
 import {html, css} from 'lit-element';
 import {unsafeHTML} from 'lit-html/directives/unsafe-html.js';
 import {ScopedElementsMixin} from '@open-wc/scoped-elements';
@@ -56,6 +56,7 @@ export class LoginButton extends ScopedElementsMixin(AdapterLitElement) {
     constructor() {
         super();
         this.lang = 'de';
+        this._i18n = createInstance();
         this.auth = {};
     }
 
@@ -93,7 +94,7 @@ export class LoginButton extends ScopedElementsMixin(AdapterLitElement) {
     update(changedProperties) {
         changedProperties.forEach((oldValue, propName) => {
             if (propName === "lang") {
-                i18n.changeLanguage(this.lang);
+                this._i18n.changeLanguage(this.lang);
             }
         });
 
@@ -150,6 +151,7 @@ export class LoginButton extends ScopedElementsMixin(AdapterLitElement) {
     }
 
     render() {
+        let i18n = this._i18n;
         if (this.auth['login-status'] === LoginStatus.LOGGING_IN) {
             // try to keep the layout the same to avoid layout shifts
             return html`
-- 
GitLab