From dc2c2be09a3f12501afa2de0936979d0da3c9153 Mon Sep 17 00:00:00 2001 From: Christoph Reiter <reiter.christoph@gmail.com> Date: Tue, 13 Jul 2021 15:54:42 +0200 Subject: [PATCH] Separate i18next instance per element --- i18next-scanner.config.js | 2 +- src/dbp-official-signature-pdf-upload.js | 15 ++++++++++----- src/dbp-pdf-annotation-view.js | 13 +++++++------ src/dbp-pdf-preview.js | 10 +++++----- src/dbp-qualified-signature-pdf-upload.js | 16 +++++++++++----- src/dbp-signature-verification-full.js | 17 ++++++++++------- src/dbp-signature-verification.js | 9 +++++---- src/i18n.js | 10 ++++------ 8 files changed, 53 insertions(+), 39 deletions(-) diff --git a/i18next-scanner.config.js b/i18next-scanner.config.js index 168d6b7..d2338d3 100644 --- a/i18next-scanner.config.js +++ b/i18next-scanner.config.js @@ -8,7 +8,7 @@ module.exports = { removeUnusedKeys: true, lngs: ['en','de'], func: { - list: ['i18n.t'] + list: ['i18n.t', '_i18n.t'] }, resource: { loadPath: 'src/i18n/{{lng}}/{{ns}}.json', diff --git a/src/dbp-official-signature-pdf-upload.js b/src/dbp-official-signature-pdf-upload.js index 852b692..71ae200 100644 --- a/src/dbp-official-signature-pdf-upload.js +++ b/src/dbp-official-signature-pdf-upload.js @@ -1,4 +1,4 @@ -import {createI18nInstance} from './i18n.js'; +import {createInstance} from './i18n.js'; import {humanFileSize} from '@dbp-toolkit/common/i18next.js'; import {css, html} from 'lit-element'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; @@ -21,12 +21,11 @@ import {Activity} from './activity.js'; import {PdfAnnotationView} from "./dbp-pdf-annotation-view"; import * as SignatureStyles from './styles'; -const i18n = createI18nInstance(); - class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElement) { constructor() { super(); - this.lang = i18n.language; + this._i18n = createInstance(); + this.lang = this._i18n.language; this.entryPointUrl = ''; this.nextcloudWebAppPasswordURL = ""; this.nextcloudWebDavURL = ""; @@ -133,6 +132,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem * Processes queued files */ async handleQueuedFiles() { + const i18n = this._i18n; this.endSigningProcessIfQueueEmpty(); if (this.queuedFilesCount === 0) { // reset signingProcessEnabled button @@ -203,6 +203,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem * @param event */ onReceiveBeforeUnload(event) { + const i18n = this._i18n; // we don't need to stop if there are no signed files if (this.signedFilesCount === 0) { return; @@ -263,7 +264,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem changedProperties.forEach((oldValue, propName) => { switch (propName) { case "lang": - i18n.changeLanguage(this.lang); + this._i18n.changeLanguage(this.lang); break; case "entryPointUrl": JSONLD.getInstance(this.entryPointUrl).then((jsonld) => { @@ -316,6 +317,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem * @returns {*[]} Array of html templates */ getQueuedFilesHtml() { + const i18n = this._i18n; const ids = Object.keys(this.queuedFiles); let results = []; @@ -380,6 +382,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem */ getSignedFilesHtml() { const ids = Object.keys(this.signedFiles); + const i18n = this._i18n; let results = []; ids.forEach((id) => { @@ -408,6 +411,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem */ getErrorFilesHtml() { const ids = Object.keys(this.errorFiles); + const i18n = this._i18n; let results = []; ids.forEach((id) => { @@ -447,6 +451,7 @@ class OfficialSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElem render() { const placeholderUrl = commonUtils.getAssetURL(pkgName, 'official-signature-placeholder.png'); + const i18n = this._i18n; return html` <div class="${classMap({hidden: !this.isLoggedIn() || !this.hasSignaturePermissions() || this.isLoading()})}"> diff --git a/src/dbp-pdf-annotation-view.js b/src/dbp-pdf-annotation-view.js index 4ff1adf..d077031 100644 --- a/src/dbp-pdf-annotation-view.js +++ b/src/dbp-pdf-annotation-view.js @@ -1,4 +1,4 @@ -import {createI18nInstance} from './i18n.js'; +import {createInstance} from './i18n.js'; import {css, html} from 'lit-element'; import {classMap} from 'lit-html/directives/class-map.js'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; @@ -9,15 +9,14 @@ import { send } from '@dbp-toolkit/common/notification'; import * as commonStyles from '@dbp-toolkit/common/styles'; import * as utils from './utils'; -const i18n = createI18nInstance(); - /** * PdfAnnotationView web component */ export class PdfAnnotationView extends ScopedElementsMixin(DBPLitElement) { constructor() { super(); - this.lang = 'de'; + this._i18n = createInstance(); + this.lang = this._i18n.language; this.isTextHidden = false; this.isSelected = false; this.annotationRows = []; @@ -52,7 +51,7 @@ export class PdfAnnotationView extends ScopedElementsMixin(DBPLitElement) { changedProperties.forEach((oldValue, propName) => { switch (propName) { case "lang": - i18n.changeLanguage(this.lang); + this._i18n.changeLanguage(this.lang); break; } }); @@ -84,7 +83,7 @@ export class PdfAnnotationView extends ScopedElementsMixin(DBPLitElement) { } validateValues() { - + const i18n = this._i18n; for (let annotation of this.annotationRows) { const annotationTypeData = utils.getAnnotationTypes(annotation['annotationType']); @@ -343,6 +342,7 @@ export class PdfAnnotationView extends ScopedElementsMixin(DBPLitElement) { * @returns {*[]} Array of html templates */ getAnnotationsHtml() { + const i18n = this._i18n; const annotations = this.annotationRows || []; const ids = Object.keys(annotations); let results = []; @@ -381,6 +381,7 @@ export class PdfAnnotationView extends ScopedElementsMixin(DBPLitElement) { } render() { + const i18n = this._i18n; return html` <div id="pdf-main-container"> <div id="pdf-meta"> diff --git a/src/dbp-pdf-preview.js b/src/dbp-pdf-preview.js index 96d2aeb..1cae849 100644 --- a/src/dbp-pdf-preview.js +++ b/src/dbp-pdf-preview.js @@ -1,4 +1,4 @@ -import {createI18nInstance} from './i18n.js'; +import {createInstance} from './i18n.js'; import {css, html} from 'lit-element'; import {classMap} from 'lit-html/directives/class-map.js'; import {live} from 'lit-html/directives/live.js'; @@ -11,15 +11,14 @@ import pdfjs from 'pdfjs-dist/legacy/build/pdf.js'; import {name as pkgName} from './../package.json'; import {readBinaryFileContent} from './utils.js'; -const i18n = createI18nInstance(); - /** * PdfPreview web component */ export class PdfPreview extends ScopedElementsMixin(DBPLitElement) { constructor() { super(); - this.lang = 'de'; + this._i18n = createInstance(); + this.lang = this._i18n.language; this.pdfDoc = null; this.currentPage = 0; this.totalPages = 0; @@ -74,7 +73,7 @@ export class PdfPreview extends ScopedElementsMixin(DBPLitElement) { changedProperties.forEach((oldValue, propName) => { switch (propName) { case "lang": - i18n.changeLanguage(this.lang); + this._i18n.changeLanguage(this.lang); break; } }); @@ -581,6 +580,7 @@ export class PdfPreview extends ScopedElementsMixin(DBPLitElement) { render() { const isRotationHidden = !this.allowSignatureRotation; + const i18n = this._i18n; return html` diff --git a/src/dbp-qualified-signature-pdf-upload.js b/src/dbp-qualified-signature-pdf-upload.js index f50d7a6..a203708 100644 --- a/src/dbp-qualified-signature-pdf-upload.js +++ b/src/dbp-qualified-signature-pdf-upload.js @@ -1,4 +1,4 @@ -import {createI18nInstance} from './i18n.js'; +import {createInstance} from './i18n.js'; import {humanFileSize} from '@dbp-toolkit/common/i18next.js'; import {css, html} from 'lit-element'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; @@ -21,12 +21,11 @@ import {PdfAnnotationView} from "./dbp-pdf-annotation-view"; import { ExternalSignIFrame } from './ext-sign-iframe.js'; import * as SignatureStyles from './styles'; -const i18n = createI18nInstance(); - class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitElement) { constructor() { super(); - this.lang = i18n.language; + this._i18n = createInstance(); + this.lang = this._i18n.language; this.entryPointUrl = ''; this.nextcloudWebAppPasswordURL = ""; this.nextcloudWebDavURL = ""; @@ -147,6 +146,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle * Processes queued files */ async handleQueuedFiles() { + const i18n = this._i18n; this.endSigningProcessIfQueueEmpty(); if (this.queuedFilesCount === 0) { // reset signingProcessEnabled button @@ -217,6 +217,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle * @param event */ onReceiveBeforeUnload(event) { + const i18n = this._i18n; // we don't need to stop if there are no signed files if (this.signedFilesCount === 0) { return; @@ -247,6 +248,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle * @param error */ parseError(error) { + const i18n = this._i18n; let errorParsed = error; // Common Error Messages fpr pdf-as: https://www.buergerkarte.at/konzept/securitylayer/spezifikation/20140114/errorcodes/errorcodes.html // SecurityLayer Error: [6000] Unklassifizierter Abbruch durch den Bürger. @@ -372,7 +374,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle changedProperties.forEach((oldValue, propName) => { switch (propName) { case "lang": - i18n.changeLanguage(this.lang); + this._i18n.changeLanguage(this.lang); break; case "entryPointUrl": JSONLD.getInstance(this.entryPointUrl).then((jsonld) => { @@ -427,6 +429,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle */ getQueuedFilesHtml() { const ids = Object.keys(this.queuedFiles); + const i18n = this._i18n; let results = []; ids.forEach((id) => { @@ -490,6 +493,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle */ getSignedFilesHtml() { const ids = Object.keys(this.signedFiles); + const i18n = this._i18n; let results = []; ids.forEach((id) => { @@ -518,6 +522,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle */ getErrorFilesHtml() { const ids = Object.keys(this.errorFiles); + const i18n = this._i18n; let results = []; ids.forEach((id) => { @@ -576,6 +581,7 @@ class QualifiedSignaturePdfUpload extends ScopedElementsMixin(DBPSignatureLitEle render() { const placeholderUrl = commonUtils.getAssetURL(pkgName, 'qualified-signature-placeholder.png'); + const i18n = this._i18n; return html` <div class="${classMap({hidden: !this.isLoggedIn() || !this.hasSignaturePermissions() || this.isLoading()})}"> diff --git a/src/dbp-signature-verification-full.js b/src/dbp-signature-verification-full.js index 313cce1..a152eff 100644 --- a/src/dbp-signature-verification-full.js +++ b/src/dbp-signature-verification-full.js @@ -1,4 +1,4 @@ -import {createI18nInstance} from './i18n.js'; +import {createInstance} from './i18n.js'; import {humanFileSize} from '@dbp-toolkit/common/i18next.js'; import {css, html} from 'lit-element'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; @@ -15,12 +15,11 @@ import metadata from './dbp-signature-verification-full.metadata.json'; import {Activity} from './activity.js'; import * as SignatureStyles from './styles'; -const i18n = createI18nInstance(); - class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitElement) { constructor() { super(); - this.lang = i18n.language; + this._i18n = createInstance(); + this.lang = this._i18n.language; this.entryPointUrl = ''; this.nextcloudWebAppPasswordURL = ""; this.nextcloudWebDavURL = ""; @@ -117,7 +116,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme this.uploadInProgress = true; let params = {}; - this.uploadStatusText = i18n.t('signature-verification.upload-status-file-text', { + this.uploadStatusText = this._i18n.t('signature-verification.upload-status-file-text', { fileName: file.name, fileSize: humanFileSize(file.size, false), }); @@ -150,7 +149,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme if (!event.isTrusted) { // note that this only works with custom event since calls of "confirm" are ignored // in the non-custom event, see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event - const result = confirm(i18n.t('signature-verification.confirm-page-leave')); + const result = confirm(this._i18n.t('signature-verification.confirm-page-leave')); // don't stop the page leave if the user wants to leave if (result) { @@ -212,7 +211,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme changedProperties.forEach((oldValue, propName) => { switch (propName) { case "lang": - i18n.changeLanguage(this.lang); + this._i18n.changeLanguage(this.lang); break; case "entryPointUrl": JSONLD.getInstance(this.entryPointUrl).then((jsonld) => { @@ -342,6 +341,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme * @returns {*[]} Array of html templates */ getQueuedFilesHtml() { + const i18n = this._i18n; const ids = Object.keys(this.queuedFiles); let results = []; @@ -378,6 +378,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme */ getVerifiedFilesHtml() { const ids = Object.keys(this.verifiedFiles); + const i18n = this._i18n; let results = []; ids.forEach((id) => { @@ -433,6 +434,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme */ getErrorFilesHtml() { const ids = Object.keys(this.errorFiles); + const i18n = this._i18n; let results = []; ids.forEach((id) => { @@ -471,6 +473,7 @@ class SignatureVerificationFull extends ScopedElementsMixin(DBPSignatureLitEleme } render() { + const i18n = this._i18n; const placeholderUrl = commonUtils.getAssetURL(pkgName, 'official-signature-placeholder.png'); const activity = new Activity(metadata); diff --git a/src/dbp-signature-verification.js b/src/dbp-signature-verification.js index 7df7fad..0907dbb 100644 --- a/src/dbp-signature-verification.js +++ b/src/dbp-signature-verification.js @@ -1,4 +1,4 @@ -import {createI18nInstance} from './i18n.js'; +import {createInstance} from './i18n.js'; import {css, html} from 'lit-element'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; import DBPSignatureLitElement from "./dbp-signature-lit-element"; @@ -7,12 +7,12 @@ import * as commonStyles from '@dbp-toolkit/common/styles'; import metadata from './dbp-signature-verification.metadata.json'; import {Activity} from './activity.js'; -const i18n = createI18nInstance(); class SignatureVerification extends ScopedElementsMixin(DBPSignatureLitElement) { constructor() { super(); - this.lang = i18n.language; + this._i18n = createInstance(); + this.lang = this._i18n.language; } static get scopedElements() { @@ -30,7 +30,7 @@ class SignatureVerification extends ScopedElementsMixin(DBPSignatureLitElement) changedProperties.forEach((oldValue, propName) => { switch (propName) { case "lang": - i18n.changeLanguage(this.lang); + this._i18n.changeLanguage(this.lang); break; } }); @@ -104,6 +104,7 @@ class SignatureVerification extends ScopedElementsMixin(DBPSignatureLitElement) } render() { + const i18n = this._i18n; const activity = new Activity(metadata); return html` <h2>${activity.getName(this.lang)}</h2> diff --git a/src/i18n.js b/src/i18n.js index 8124af2..975c199 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -1,10 +1,8 @@ -import {createInstance} from '@dbp-toolkit/common/i18next.js'; +import {createInstance as _createInstance} from '@dbp-toolkit/common/i18next.js'; import de from './i18n/de/translation.json'; import en from './i18n/en/translation.json'; -const i18n = createInstance({en: en, de: de}, 'de', 'en'); - -export function createI18nInstance () { - return i18n.cloneInstance(); -} +export function createInstance() { + return _createInstance({en: en, de: de}, 'de', 'en'); +} \ No newline at end of file -- GitLab