diff --git a/i18next-scanner.config.js b/i18next-scanner.config.js index 168d6b7d74ce9f18e0747f971f2a43b63b3ea77d..d2338d3ed316fa8d93ed8f6cb1c2acfdb9040ad6 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 852b6920dd1cc7a93a36b82528d73c87a4bd9e44..71ae200bfc5bb2073dda5e2be672e6adfd8bcc23 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 4ff1adf909f3396ca40381ea5c999426cf69b2f1..d077031915db2bd1eb5d8434e62a8f7a49f8d99a 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 96d2aeb4abb80face1413371a3103e21f6087e40..1cae849bc49c5970dfa70ece9780fb875996b3c2 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 f50d7a69f32109557b72a19abe8112a5b5485651..a2037085af3c55e0fb7a3871f0fc57dc72b20e26 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 313cce1eb7a953291cdd376829f18b7b52ef593d..a152effa1ad57a0d16db09fe94d2c07619e20cc5 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 7df7fadfa1c9e2e564f9e241bc5fdc44a8f4a771..0907dbbe06088840b22faa271d56883e935f662d 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 8124af26c8694b62c93c2a69e1ca2c53a0f5ed8a..975c1993e2a567940c74f8d957a6b2a018125548 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