From c93550681f3373062d490a3c3a1836c72e034adc Mon Sep 17 00:00:00 2001 From: Manuel Kocher <manuel.kocher@tugraz.at> Date: Wed, 17 Aug 2022 11:08:50 +0200 Subject: [PATCH] Remove i18n from adapter, add translation overrides to all components that use i18n --- packages/common/src/adapter-lit-element.js | 14 -------- packages/common/src/translation.js | 14 ++++++-- .../data-table-view/src/data-table-view.js | 8 ++++- packages/data-table-view/src/i18n.js | 4 ++- packages/file-handling/src/clipboard.js | 11 ++++-- packages/file-handling/src/file-sink.js | 7 +++- packages/file-handling/src/file-source.js | 13 ++++--- packages/file-handling/src/i18n.js | 4 ++- .../src/nextcloud-file-picker.js | 36 +++++++++++-------- ...owledge-base-web-page-element-view-demo.js | 12 ++++++- .../src/i18n.js | 4 ++- .../knowledge-base-web-page-element-view.js | 10 +++++- packages/matomo/src/dbp-matomo-demo.js | 13 ++++++- packages/matomo/src/i18n.js | 4 ++- .../notification/src/dbp-notification-demo.js | 12 ++++++- packages/notification/src/i18n.js | 4 ++- packages/notification/src/notification.js | 7 +++- .../src/dbp-person-profile-demo.js | 7 +++- packages/person-profile/src/i18n.js | 4 ++- packages/person-profile/src/person-profile.js | 11 +++++- .../src/dbp-person-select-demo.js | 12 ++++++- packages/person-select/src/i18n.js | 4 ++- packages/person-select/src/person-select.js | 9 +++-- packages/provider/src/dbp-provider-demo.js | 13 +++++-- packages/provider/src/i18n.js | 4 ++- .../src/dbp-qr-code-scanner-demo.js | 11 ++++-- packages/qr-code-scanner/src/i18n.js | 4 ++- .../qr-code-scanner/src/qr-code-scanner.js | 9 +++-- .../src/dbp-resource-select-demo.js | 12 ++++++- packages/resource-select/src/i18n.js | 4 ++- .../resource-select/src/resource-select.js | 8 ++++- packages/theme-switcher/src/theme-switcher.js | 8 ++++- packages/tooltip/src/dbp-tooltip-demo.js | 12 ++++++- packages/tooltip/src/i18n.js | 4 ++- packages/typescript-example/src/i18n.ts | 4 ++- .../src/typescript-example.ts | 14 +++++++- 36 files changed, 259 insertions(+), 72 deletions(-) diff --git a/packages/common/src/adapter-lit-element.js b/packages/common/src/adapter-lit-element.js index 5d46a75b..aebc8115 100644 --- a/packages/common/src/adapter-lit-element.js +++ b/packages/common/src/adapter-lit-element.js @@ -1,6 +1,5 @@ import {LitElement} from 'lit'; import {Logger} from './logger'; -import {createInstance, setOverridesByGlobalCache} from './i18n.js'; export class AdapterLitElement extends LitElement { constructor() { @@ -15,10 +14,6 @@ export class AdapterLitElement extends LitElement { this.subscribe = ''; this.unsubscribe = ''; - // dir and i18next instance of translation overrides - this._i18n = createInstance(); - this.langDir = ''; - this.callbackStore = []; // Previously we used direct properties like this["lang"] (instead of this.propertyStore["lang"]) for storing the @@ -84,11 +79,6 @@ export class AdapterLitElement extends LitElement { this.connected = true; - // use translation overrides if path is given - if(this.langDir != '') { - setOverridesByGlobalCache(this._i18n, this); - } - const that = this; this.addEventListener( @@ -276,10 +266,6 @@ export class AdapterLitElement extends LitElement { value ); - if(this.langDir) { - setOverridesByGlobalCache(this._i18n, this); - } - // If value is an object set it directly as property if (typeof value === 'object' && value !== null) { // Logger.debug("value is object", value); diff --git a/packages/common/src/translation.js b/packages/common/src/translation.js index bb4ea411..58eb373e 100644 --- a/packages/common/src/translation.js +++ b/packages/common/src/translation.js @@ -2,7 +2,7 @@ import {html} from 'lit'; import {unsafeHTML} from 'lit/directives/unsafe-html.js'; import DBPLitElement from '../dbp-lit-element'; import * as commonStyles from '../styles.js'; -import {getOverrideNamespace, setOverridesByGlobalCache} from './i18n.js'; +import {getOverrideNamespace, setOverridesByGlobalCache, createInstance} from './i18n.js'; export class Translation extends DBPLitElement { constructor() { @@ -11,6 +11,11 @@ export class Translation extends DBPLitElement { this.lang = ''; this.interpolation = ''; this.unsafe = false; + + // dir and i18next instance of translation overrides + this._i18n = createInstance(); + this.langDir = ''; + } static get properties() { @@ -37,6 +42,11 @@ export class Translation extends DBPLitElement { // get overrides everytime setOverridesByGlobalCache(this._i18n, this); + // use translation overrides if path is given + //if(this.langDir != '') { + // setOverridesByGlobalCache(this._i18n, this); + //} + // supercall after default i18n init to override translations only // if a override with this tagname is given super.connectedCallback(); @@ -84,7 +94,7 @@ export class Translation extends DBPLitElement { } else if (this._i18n.hasResourceBundle(this.lang, overrideNamespace)){ keyComment = unsafeHTML("<!-- key '" + this.key + "' not found! -->"); translation = ""; - console.error("Key '" + this.key + "' not found! " + this._i18n.t(this.key)); + console.error("Key '" + this.key + "' not found!"); } else { keyComment = unsafeHTML("<!-- key '" + this.key + "' and namespace '" + overrideNamespace + "' not found! -->"); translation = ""; diff --git a/packages/data-table-view/src/data-table-view.js b/packages/data-table-view/src/data-table-view.js index 576934ea..aff9e74e 100644 --- a/packages/data-table-view/src/data-table-view.js +++ b/packages/data-table-view/src/data-table-view.js @@ -7,7 +7,7 @@ import bttn from 'datatables.net-buttons-dt'; import bttn2 from 'datatables.net-buttons'; import bttnHtml5 from 'datatables.net-buttons/js/buttons.html5.js'; import bttnPrint from 'datatables.net-buttons/js/buttons.print.js'; -import {createInstance} from './i18n'; +import {createInstance, setOverridesByGlobalCache} from './i18n'; import {css, html, unsafeCSS} from 'lit'; import de from '../assets/datatables/i18n/German'; import en from '../assets/datatables/i18n/English'; @@ -30,6 +30,7 @@ export class DataTableView extends AdapterLitElement { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; // datatable properties this.table = null; this.responsive = null; @@ -246,6 +247,11 @@ export class DataTableView extends AdapterLitElement { this.updateComplete.then(this.set_datatable(this.data, languageChange)).catch((e) => { console.log(e); }); + + if(this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + super.update(changedProperties); } diff --git a/packages/data-table-view/src/i18n.js b/packages/data-table-view/src/i18n.js index 0c6fedc8..930f3538 100644 --- a/packages/data-table-view/src/i18n.js +++ b/packages/data-table-view/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/file-handling/src/clipboard.js b/packages/file-handling/src/clipboard.js index fedc4d8e..a607d0dc 100644 --- a/packages/file-handling/src/clipboard.js +++ b/packages/file-handling/src/clipboard.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n'; +import {createInstance, setOverridesByGlobalCache} from './i18n'; import {css, html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import * as commonUtils from '@dbp-toolkit/common/utils'; @@ -21,6 +21,8 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; + this.allowedMimeTypes = ''; this.clipboardFiles = {files: ''}; this.clipboardSelectBtnDisabled = true; @@ -109,6 +111,11 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { break; } }); + + if(this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + super.update(changedProperties); } @@ -865,7 +872,7 @@ export class Clipboard extends ScopedElementsMixin(AdapterLitElement) { ${commonStyles.getTabulatorStyles()} ${fileHandlingStyles.getFileHandlingCss()} - + a { border-bottom: var(--dbp-border); padding: 0; diff --git a/packages/file-handling/src/file-sink.js b/packages/file-handling/src/file-sink.js index f30ef90c..6b0b75af 100644 --- a/packages/file-handling/src/file-sink.js +++ b/packages/file-handling/src/file-sink.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n'; +import {createInstance, setOverridesByGlobalCache} from './i18n'; import {css, html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import * as commonUtils from '@dbp-toolkit/common/utils'; @@ -22,6 +22,7 @@ export class FileSink extends ScopedElementsMixin(DbpFileHandlingLitElement) { this.context = ''; this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; this.nextcloudAuthUrl = ''; this.nextcloudWebDavUrl = ''; this.nextcloudName = 'Nextcloud'; @@ -101,6 +102,10 @@ export class FileSink extends ScopedElementsMixin(DbpFileHandlingLitElement) { } }); + + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } } async downloadCompressedFiles() { diff --git a/packages/file-handling/src/file-source.js b/packages/file-handling/src/file-source.js index da8abdd4..73839baf 100644 --- a/packages/file-handling/src/file-source.js +++ b/packages/file-handling/src/file-source.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n'; +import {createInstance, setOverridesByGlobalCache} from './i18n'; import {css, html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import * as commonUtils from '@dbp-toolkit/common/utils'; @@ -38,6 +38,7 @@ export class FileSource extends ScopedElementsMixin(DbpFileHandlingLitElement) { super(); this.context = ''; this._i18n = createInstance(); + this.langDir = ''; this.lang = this._i18n.language; this.nextcloudAuthUrl = ''; this.nextcloudName = 'Nextcloud'; @@ -174,6 +175,10 @@ export class FileSource extends ScopedElementsMixin(DbpFileHandlingLitElement) { } }); + + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } } disconnectedCallback() { @@ -595,8 +600,8 @@ export class FileSource extends ScopedElementsMixin(DbpFileHandlingLitElement) { ${commonStyles.getModalDialogCSS()} ${fileHandlingStyles.getFileHandlingCss()} - - + + p { margin-top: 0; } @@ -686,7 +691,7 @@ export class FileSource extends ScopedElementsMixin(DbpFileHandlingLitElement) { .paddles { display: inherit; } - + .paddles.hidden { display: none } diff --git a/packages/file-handling/src/i18n.js b/packages/file-handling/src/i18n.js index 0c6fedc8..930f3538 100644 --- a/packages/file-handling/src/i18n.js +++ b/packages/file-handling/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/file-handling/src/nextcloud-file-picker.js b/packages/file-handling/src/nextcloud-file-picker.js index 2521f62a..6ee29370 100644 --- a/packages/file-handling/src/nextcloud-file-picker.js +++ b/packages/file-handling/src/nextcloud-file-picker.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n'; +import {createInstance, setOverridesByGlobalCache} from './i18n'; import {css, html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import DBPLitElement from '@dbp-toolkit/common/dbp-lit-element'; @@ -22,6 +22,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; this.auth = {}; this.authUrl = ''; @@ -323,6 +324,11 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { window.addEventListener('resize', this.boundRefreshOnWindowSizeChange); }); + + // set translation overrides if requested + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } } tableBuiltFunction() { @@ -494,7 +500,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { for (let key of Object.keys(localStorage)) { if ( key.includes('nextcloud-webdav-username-') || - key.includes('nextcloud-webdav-password-') || + key.includes('nextcloud-webdav-password-') || key.includes('nextcloud-webdav-url-') ) { localStorage.removeItem(key); @@ -839,7 +845,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { ]); if (this._('.tabulator-placeholder-contents')) { - this._('.tabulator-placeholder-contents').innerText = + this._('.tabulator-placeholder-contents').innerText = i18n.t('nextcloud-file-picker.no-favorites', { name: this.nextcloudName, }); @@ -977,7 +983,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { '</d:literal>' + ' </d:gte>' + - + ' <d:or>' + this.getMimeTypes() + ' </d:or>' + @@ -996,7 +1002,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { ' </d:limit>' + ' </d:basicsearch>' + ' </d:searchrequest>', - + }) .then((contents) => { parseXML(contents.data).then((davResp) => { @@ -1010,7 +1016,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { this.tabulatorTable.setSort([{column: 'lastmod', dir: 'desc'}]); if (this._('.tabulator-placeholder-contents')) { - this._('.tabulator-placeholder-contents').innerText = + this._('.tabulator-placeholder-contents').innerText = i18n.t('nextcloud-file-picker.no-recent-files', { name: this.nextcloudName, }); @@ -1061,21 +1067,21 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { getMimeTypes() { let mimePart = ''; - + if (this.allowedMimeTypes && this.allowedMimeTypes !== 0 && this.allowedMimeTypes !== '*/*') { const mimeTypes = this.allowedMimeTypes.split(','); - + mimeTypes.forEach((str) => { - mimePart += + mimePart += ' <d:like>' + ' <d:prop>' + ' <d:getcontenttype/>' + - ' </d:prop>' + - ' <d:literal>' + str + '</d:literal>' + + ' </d:prop>' + + ' <d:literal>' + str + '</d:literal>' + ' </d:like>'; }); } else { - mimePart = + mimePart = ' <d:like>' + ' <d:prop>' + ' <d:getcontenttype/>' + @@ -1239,7 +1245,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { this.tabulatorTable.setSort([{column: 'lastmod', dir: 'desc'}]); if (this._('.tabulator-placeholder-contents')) { - this._('.tabulator-placeholder-contents').innerText = + this._('.tabulator-placeholder-contents').innerText = i18n.t('nextcloud-file-picker.no-recent-files', { name: this.nextcloudName, }); @@ -3004,7 +3010,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { left: 0px; top: 1px; } - + .table-wrapper { max-width: 100%; width: 100%; @@ -3349,7 +3355,7 @@ export class NextcloudFilePicker extends ScopedElementsMixin(DBPLitElement) { <li class="${classMap({hidden: !this.storeSession})}" title="${i18n.t('nextcloud-file-picker.log-out')}"> - <a + <a class="" @click="${() => { this.logOut(); diff --git a/packages/knowledge-base-web-page-element-view/src/dbp-knowledge-base-web-page-element-view-demo.js b/packages/knowledge-base-web-page-element-view/src/dbp-knowledge-base-web-page-element-view-demo.js index 84ad091a..b65aaf9a 100644 --- a/packages/knowledge-base-web-page-element-view/src/dbp-knowledge-base-web-page-element-view-demo.js +++ b/packages/knowledge-base-web-page-element-view/src/dbp-knowledge-base-web-page-element-view-demo.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n'; +import {createInstance, setOverridesByGlobalCache} from './i18n'; import {css, html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import {AuthKeycloak, LoginButton} from '@dbp-toolkit/auth'; @@ -12,6 +12,7 @@ export class KnowledgeBaseWebPageElementViewDemo extends ScopedElementsMixin(DBP super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; this.entryPointUrl = ''; this.noAuth = false; } @@ -33,6 +34,15 @@ export class KnowledgeBaseWebPageElementViewDemo extends ScopedElementsMixin(DBP }; } + connectedCallback() { + super.connectedCallback(); + + // set translation overrides if requested + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + } + update(changedProperties) { changedProperties.forEach((oldValue, propName) => { if (propName === 'lang') { diff --git a/packages/knowledge-base-web-page-element-view/src/i18n.js b/packages/knowledge-base-web-page-element-view/src/i18n.js index 0c6fedc8..930f3538 100644 --- a/packages/knowledge-base-web-page-element-view/src/i18n.js +++ b/packages/knowledge-base-web-page-element-view/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/knowledge-base-web-page-element-view/src/knowledge-base-web-page-element-view.js b/packages/knowledge-base-web-page-element-view/src/knowledge-base-web-page-element-view.js index 598075f5..9bf0ddd5 100644 --- a/packages/knowledge-base-web-page-element-view/src/knowledge-base-web-page-element-view.js +++ b/packages/knowledge-base-web-page-element-view/src/knowledge-base-web-page-element-view.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n'; +import {createInstance, setOverridesByGlobalCache} from './i18n'; import {html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import {MiniSpinner} from '@dbp-toolkit/common'; @@ -14,6 +14,7 @@ export class KnowledgeBaseWebPageElementView extends ScopedElementsMixin(Adapter super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; this.value = ''; this.html = ''; this.entryPointUrl = ''; @@ -129,6 +130,13 @@ export class KnowledgeBaseWebPageElementView extends ScopedElementsMixin(Adapter .catch(); } + connectedCallback() { + super.connectedCallback(); + + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + } update(changedProperties) { changedProperties.forEach((oldValue, propName) => { if (propName === 'lang') { diff --git a/packages/matomo/src/dbp-matomo-demo.js b/packages/matomo/src/dbp-matomo-demo.js index 18748614..0af5ce76 100644 --- a/packages/matomo/src/dbp-matomo-demo.js +++ b/packages/matomo/src/dbp-matomo-demo.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n.js'; +import {createInstance, setOverridesByGlobalCache} from './i18n.js'; import {css, html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import {AuthKeycloak, LoginButton} from '@dbp-toolkit/auth'; @@ -12,6 +12,8 @@ export class MatomoDemo extends ScopedElementsMixin(DBPLitElement) { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; + this.entryPointUrl = ''; this.matomoUrl = ''; this.matomoSiteId = -1; @@ -37,6 +39,15 @@ export class MatomoDemo extends ScopedElementsMixin(DBPLitElement) { }; } + connectedCallback() { + super.connectedCallback(); + + // use translation overrides if path is given + if(this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + } + update(changedProperties) { changedProperties.forEach((oldValue, propName) => { if (propName === 'lang') { diff --git a/packages/matomo/src/i18n.js b/packages/matomo/src/i18n.js index 0c6fedc8..930f3538 100644 --- a/packages/matomo/src/i18n.js +++ b/packages/matomo/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/notification/src/dbp-notification-demo.js b/packages/notification/src/dbp-notification-demo.js index 7470f538..f0bfa34b 100644 --- a/packages/notification/src/dbp-notification-demo.js +++ b/packages/notification/src/dbp-notification-demo.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n'; +import {createInstance, setOverridesByGlobalCache} from './i18n'; import {send as notify} from '@dbp-toolkit/common/notification'; import {css, html, LitElement} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; @@ -11,6 +11,7 @@ export class NotificationDemo extends ScopedElementsMixin(LitElement) { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; } static get scopedElements() { @@ -25,6 +26,15 @@ export class NotificationDemo extends ScopedElementsMixin(LitElement) { }; } + connectedCallback() { + super.connectedCallback(); + + // use translation overrides if path is given + if(this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + } + update(changedProperties) { changedProperties.forEach((oldValue, propName) => { if (propName === 'lang') { diff --git a/packages/notification/src/i18n.js b/packages/notification/src/i18n.js index 0c6fedc8..930f3538 100644 --- a/packages/notification/src/i18n.js +++ b/packages/notification/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/notification/src/notification.js b/packages/notification/src/notification.js index f1079be4..78e81ab9 100644 --- a/packages/notification/src/notification.js +++ b/packages/notification/src/notification.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n'; +import {createInstance, setOverridesByGlobalCache} from './i18n'; import {createUUID} from './utils'; import {css, html} from 'lit'; import DBPLitElement from '@dbp-toolkit/common/dbp-lit-element'; @@ -11,6 +11,7 @@ export class Notification extends DBPLitElement { constructor() { super(); this._i18n = createInstance(); + this.langDir = ''; this.lang = this._i18n.language; } @@ -64,6 +65,10 @@ export class Notification extends DBPLitElement { // mark the event as handled e.preventDefault(); }); + + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } } removeMessageId(messageElementId) { diff --git a/packages/person-profile/src/dbp-person-profile-demo.js b/packages/person-profile/src/dbp-person-profile-demo.js index 08e5a30b..f6c07f3d 100644 --- a/packages/person-profile/src/dbp-person-profile-demo.js +++ b/packages/person-profile/src/dbp-person-profile-demo.js @@ -1,5 +1,5 @@ import {AuthKeycloak, LoginButton} from '@dbp-toolkit/auth'; -import {createInstance} from './i18n.js'; +import {createInstance, setOverridesByGlobalCache} from './i18n.js'; import {css, html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import DBPLitElement from '@dbp-toolkit/common/dbp-lit-element'; @@ -14,6 +14,7 @@ export class PersonProfileDemo extends ScopedElementsMixin(DBPLitElement) { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; this.entryPointUrl = ''; this.person = ''; this.selectedPerson = ''; @@ -74,6 +75,10 @@ export class PersonProfileDemo extends ScopedElementsMixin(DBPLitElement) { that.selectedPerson = $(this).data('object').identifier; }; }); + + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } } static get styles() { diff --git a/packages/person-profile/src/i18n.js b/packages/person-profile/src/i18n.js index 0c6fedc8..930f3538 100644 --- a/packages/person-profile/src/i18n.js +++ b/packages/person-profile/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/person-profile/src/person-profile.js b/packages/person-profile/src/person-profile.js index 125c1a4d..f073d4f5 100644 --- a/packages/person-profile/src/person-profile.js +++ b/packages/person-profile/src/person-profile.js @@ -1,6 +1,6 @@ import JSONLD from '@dbp-toolkit/common/jsonld'; import {css, html} from 'lit'; -import {createInstance} from './i18n.js'; +import {createInstance, setOverridesByGlobalCache} from './i18n.js'; import DBPLitElement from '@dbp-toolkit/common/dbp-lit-element'; import * as commonStyles from '@dbp-toolkit/common/styles'; @@ -9,6 +9,7 @@ export class PersonProfile extends DBPLitElement { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; this.entryPointUrl = ''; this.jsonld = null; this.value = ''; @@ -27,6 +28,14 @@ export class PersonProfile extends DBPLitElement { }; } + connectedCallback() { + super.connectedCallback(); + + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + } + update(changedProperties) { changedProperties.forEach((oldValue, propName) => { switch (propName) { diff --git a/packages/person-select/src/dbp-person-select-demo.js b/packages/person-select/src/dbp-person-select-demo.js index 18ab05f5..363f40dc 100644 --- a/packages/person-select/src/dbp-person-select-demo.js +++ b/packages/person-select/src/dbp-person-select-demo.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n.js'; +import {createInstance, setOverridesByGlobalCache} from './i18n.js'; import {css, html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import {PersonSelect} from './person-select.js'; @@ -11,6 +11,7 @@ export class PersonSelectDemo extends ScopedElementsMixin(DBPLitElement) { constructor() { super(); this._i18n = createInstance(); + this.langDir = ''; this.lang = this._i18n.language; this.entryPointUrl = ''; this.noAuth = false; @@ -49,6 +50,15 @@ export class PersonSelectDemo extends ScopedElementsMixin(DBPLitElement) { ]; } + connectedCallback() { + super.connectedCallback(); + + // set translation overrides if requested + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + } + update(changedProperties) { if (changedProperties.has('lang')) { this._i18n.changeLanguage(this.lang); diff --git a/packages/person-select/src/i18n.js b/packages/person-select/src/i18n.js index 0c6fedc8..930f3538 100644 --- a/packages/person-select/src/i18n.js +++ b/packages/person-select/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/person-select/src/person-select.js b/packages/person-select/src/person-select.js index f56fc9b6..cd0bed53 100644 --- a/packages/person-select/src/person-select.js +++ b/packages/person-select/src/person-select.js @@ -6,7 +6,7 @@ import select2LangEn from './i18n/en/select2'; import JSONLD from '@dbp-toolkit/common/jsonld'; import {css, html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; -import {createInstance} from './i18n.js'; +import {createInstance, setOverridesByGlobalCache} from './i18n.js'; import {Icon} from '@dbp-toolkit/common'; import * as commonUtils from '@dbp-toolkit/common/utils'; import * as commonStyles from '@dbp-toolkit/common/styles'; @@ -30,6 +30,7 @@ export class PersonSelect extends ScopedElementsMixin(AdapterLitElement) { this.auth = {}; this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; this.entryPointUrl = ''; this.jsonld = null; this.$select = null; @@ -93,6 +94,10 @@ export class PersonSelect extends ScopedElementsMixin(AdapterLitElement) { // try an init when user-interface is loaded this.initJSONLD(); }); + + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } } disconnectedCallback() { @@ -395,7 +400,7 @@ export class PersonSelect extends ScopedElementsMixin(AdapterLitElement) { .select2-bug .loading-results { display: none !important; } - + .select2-results__option.loading-results, { background-image: url("data:image/gif;base64,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") diff --git a/packages/provider/src/dbp-provider-demo.js b/packages/provider/src/dbp-provider-demo.js index becd642c..f2d0d982 100644 --- a/packages/provider/src/dbp-provider-demo.js +++ b/packages/provider/src/dbp-provider-demo.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n.js'; +import {createInstance, setOverridesByGlobalCache} from './i18n.js'; import {css, html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import {AuthKeycloak, LoginButton} from '@dbp-toolkit/auth'; @@ -14,6 +14,7 @@ class ProviderDemo extends ScopedElementsMixin(DBPLitElement) { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; } static get scopedElements() { @@ -34,6 +35,14 @@ class ProviderDemo extends ScopedElementsMixin(DBPLitElement) { }; } + connectedCallback() { + super.connectedCallback(); + + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + } + attributeChangedCallback(name, oldValue, newValue) { console.debug( 'ProviderDemo (' + @@ -146,7 +155,7 @@ class ProviderDemo extends ScopedElementsMixin(DBPLitElement) { </div> </dbp-provider> </dbp-provider> - + <h2> DBP Provider Adapter</h2> <p> The dbp-provider is for third party webcomponents, which we want to configure with a provider.</p> <pre><dbp-provider id="demoadapter" dbp-style-red="color:red;" dbp-style-green="color:green;" ></dbp-provider></pre> diff --git a/packages/provider/src/i18n.js b/packages/provider/src/i18n.js index 0c6fedc8..930f3538 100644 --- a/packages/provider/src/i18n.js +++ b/packages/provider/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/qr-code-scanner/src/dbp-qr-code-scanner-demo.js b/packages/qr-code-scanner/src/dbp-qr-code-scanner-demo.js index 248b91e2..df27f246 100644 --- a/packages/qr-code-scanner/src/dbp-qr-code-scanner-demo.js +++ b/packages/qr-code-scanner/src/dbp-qr-code-scanner-demo.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n'; +import {createInstance, setOverridesByGlobalCache} from './i18n'; import {css, html, LitElement} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import * as commonUtils from '@dbp-toolkit/common/utils'; @@ -10,6 +10,7 @@ export class QrCodeScannerDemo extends ScopedElementsMixin(LitElement) { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; } static get scopedElements() { @@ -24,6 +25,12 @@ export class QrCodeScannerDemo extends ScopedElementsMixin(LitElement) { }; } + connectedCallback() { + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + } + update(changedProperties) { if (changedProperties.has('lang')) { this._i18n.changeLanguage(this.lang); @@ -37,7 +44,7 @@ export class QrCodeScannerDemo extends ScopedElementsMixin(LitElement) { ${commonStyles.getThemeCSS()} ${commonStyles.getGeneralCSS()} ${commonStyles.getButtonCSS()} - + h1 { margin-bottom: 20px; } diff --git a/packages/qr-code-scanner/src/i18n.js b/packages/qr-code-scanner/src/i18n.js index 0c6fedc8..930f3538 100644 --- a/packages/qr-code-scanner/src/i18n.js +++ b/packages/qr-code-scanner/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/qr-code-scanner/src/qr-code-scanner.js b/packages/qr-code-scanner/src/qr-code-scanner.js index e1ffcd07..bf50eb9a 100644 --- a/packages/qr-code-scanner/src/qr-code-scanner.js +++ b/packages/qr-code-scanner/src/qr-code-scanner.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n'; +import {createInstance, setOverridesByGlobalCache} from './i18n'; import {css, html, unsafeCSS} from 'lit'; import DBPLitElement from '@dbp-toolkit/common/dbp-lit-element'; import * as commonStyles from '@dbp-toolkit/common/styles'; @@ -122,6 +122,7 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; this._askPermission = false; this._loading = false; @@ -175,6 +176,10 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) { if (!this.stopScan) { await this.startScanning(); } + + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } } async disconnectedCallback() { @@ -446,7 +451,7 @@ export class QrCodeScanner extends ScopedElementsMixin(DBPLitElement) { ${commonStyles.getGeneralCSS()} ${commonStyles.getSelect2CSS()} ${commonStyles.getButtonCSS()} - + #loadingMessage { text-align: center; padding: 40px; diff --git a/packages/resource-select/src/dbp-resource-select-demo.js b/packages/resource-select/src/dbp-resource-select-demo.js index 7fad3a5d..4c550238 100644 --- a/packages/resource-select/src/dbp-resource-select-demo.js +++ b/packages/resource-select/src/dbp-resource-select-demo.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n.js'; +import {createInstance, setOverridesByGlobalCache} from './i18n.js'; import {css, html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import {ResourceSelect} from './resource-select.js'; @@ -12,6 +12,7 @@ export class ResourceSelectDemo extends ScopedElementsMixin(DBPLitElement) { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; this.entryPointUrl = ''; this.noAuth = false; } @@ -33,6 +34,15 @@ export class ResourceSelectDemo extends ScopedElementsMixin(DBPLitElement) { }; } + connectedCallback() { + super.connectedCallback(); + + // set translation overrides if requested + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + } + update(changedProperties) { if (changedProperties.has('lang')) { this._i18n.changeLanguage(this.lang); diff --git a/packages/resource-select/src/i18n.js b/packages/resource-select/src/i18n.js index 0c6fedc8..930f3538 100644 --- a/packages/resource-select/src/i18n.js +++ b/packages/resource-select/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/resource-select/src/resource-select.js b/packages/resource-select/src/resource-select.js index ec19718c..151e3408 100644 --- a/packages/resource-select/src/resource-select.js +++ b/packages/resource-select/src/resource-select.js @@ -1,7 +1,7 @@ import $ from 'jquery'; import select2 from 'select2'; import select2CSSPath from 'select2/dist/css/select2.min.css'; -import {createInstance} from './i18n.js'; +import {createInstance, setOverridesByGlobalCache} from './i18n.js'; import {css, html} from 'lit'; import * as commonUtils from '@dbp-toolkit/common/utils'; import * as commonStyles from '@dbp-toolkit/common/styles'; @@ -21,6 +21,7 @@ export class ResourceSelect extends AdapterLitElement { this.auth = {}; this.lang = this._i18n.language; + this.langDir = ''; this.entryPointUrl = null; this.resourcePath = null; this.value = null; @@ -57,6 +58,11 @@ export class ResourceSelect extends AdapterLitElement { super.connectedCallback(); document.addEventListener('click', this._onDocumentClicked); this._updateAll(); + + // set translation overrides if requested + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } } disconnectedCallback() { diff --git a/packages/theme-switcher/src/theme-switcher.js b/packages/theme-switcher/src/theme-switcher.js index 4d7374e9..2370f803 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'; @@ -10,6 +10,8 @@ export class ThemeSwitcher extends ScopedElementsMixin(AdapterLitElement) { super(); this._i18n = createInstance(); + this.langDir = ''; + this.lang = this._i18n.language; this.themes = []; this.boundCloseAdditionalMenuHandler = this.hideModeMenu.bind(this); @@ -57,6 +59,10 @@ export class ThemeSwitcher extends ScopedElementsMixin(AdapterLitElement) { this.loadTheme('light-theme'); this.detectInitialMode(); }); + + if(this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } } detectInitialMode() { diff --git a/packages/tooltip/src/dbp-tooltip-demo.js b/packages/tooltip/src/dbp-tooltip-demo.js index 59d4025c..c6f86e70 100644 --- a/packages/tooltip/src/dbp-tooltip-demo.js +++ b/packages/tooltip/src/dbp-tooltip-demo.js @@ -1,4 +1,4 @@ -import {createInstance} from './i18n.js'; +import {createInstance, setOverridesByGlobalCache} from './i18n.js'; import {css, html} from 'lit'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import * as commonUtils from '@dbp-toolkit/common/utils'; @@ -13,6 +13,7 @@ export class TooltipDemo extends ScopedElementsMixin(DBPLitElement) { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; } static get scopedElements() { @@ -30,6 +31,15 @@ export class TooltipDemo extends ScopedElementsMixin(DBPLitElement) { }; } + connectedCallback() { + super.connectedCallback(); + + // set translation overrides if requested + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + } + update(changedProperties) { changedProperties.forEach((oldValue, propName) => { if (propName === 'lang') { diff --git a/packages/tooltip/src/i18n.js b/packages/tooltip/src/i18n.js index 0c6fedc8..930f3538 100644 --- a/packages/tooltip/src/i18n.js +++ b/packages/tooltip/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/typescript-example/src/i18n.ts b/packages/typescript-example/src/i18n.ts index 0c6fedc8..930f3538 100644 --- a/packages/typescript-example/src/i18n.ts +++ b/packages/typescript-example/src/i18n.ts @@ -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/typescript-example/src/typescript-example.ts b/packages/typescript-example/src/typescript-example.ts index 3df50f67..a80bb0de 100644 --- a/packages/typescript-example/src/typescript-example.ts +++ b/packages/typescript-example/src/typescript-example.ts @@ -1,22 +1,34 @@ import {html, LitElement} from 'lit'; -import {createInstance} from './i18n'; +import {createInstance, setOverridesByGlobalCache} from './i18n'; export class TypeScriptExample extends LitElement { private _i18n; + private langDir; constructor() { super(); this._i18n = createInstance(); this.lang = this._i18n.language; + this.langDir = ''; } static get properties() { return { lang: {type: String}, + langDir: {type: String}, }; } + connectedCallback() { + super.connectedCallback(); + + // set translation overrides if requested + if (this.langDir != '') { + setOverridesByGlobalCache(this._i18n, this); + } + } + update(changedProperties) { if (changedProperties.has('lang')) { this._i18n.changeLanguage(this.lang); -- GitLab