diff --git a/packages/common/i18next.js b/packages/common/i18next.js index 9e9262a711721defbc1da35a23eb2882693f657b..e22b61976c88677a33fe275a88a7d34f5687593c 100644 --- a/packages/common/i18next.js +++ b/packages/common/i18next.js @@ -100,20 +100,24 @@ export function createInstance(languages, lng, fallback, namespace) { * object is equal to removing all overrides. * * @param {i18next.i18n} i18n - The i18next instance - * @param {object} overrides - The override data in the following format: "{language: {namespace: {key: value}}}" + * @param {HTMLElement} element - The element at which the overrides are targeted + * @param {object} overrides - The override data in the following format: "{language: {tag-name: {key: value}}}" */ -export function setOverrides(i18n, overrides) { +export function setOverrides(i18n, element, overrides) { // We add a special namespace which gets used with priority and falls back // to the original one. This way we an change the overrides at runtime // and can even remove them. + + // The scoped mixin saves the real tag name under data-tag-name + let tagName = ((element.dataset && element.dataset.tagName) || element.tagName).toLowerCase(); let namespace = i18n.options.fallbackNS; let overrideNamespace = getOverrideNamespace(namespace); let hasOverrides = false; for(let lng of i18n.languages) { i18n.removeResourceBundle(lng, overrideNamespace); - if (overrides[lng] === undefined || overrides[lng][namespace] === undefined) + if (overrides[lng] === undefined || overrides[lng][tagName] === undefined) continue; - let resources = overrides[lng][namespace]; + let resources = overrides[lng][tagName]; hasOverrides = true; i18n.addResourceBundle(lng, overrideNamespace, resources); } diff --git a/packages/common/test/i18next.js b/packages/common/test/i18next.js index a2b5f5f2f72b4ad8ca5e542a23f89b3481529432..dd311e5fee6798393b7474f8ab0cdb7559c52d40 100644 --- a/packages/common/test/i18next.js +++ b/packages/common/test/i18next.js @@ -49,22 +49,23 @@ suite('i18next', () => { }); test('overrides', () => { - let namespace = 'ns'; + let namespace = 'some-ns'; + let element = document.createElement(namespace); var inst = i18next.createInstance({en: {foo: 'bar'}}, 'en', 'en', namespace); assert.equal(inst.t('foo'), 'bar'); assert.equal(inst.t('quux'), 'quux'); - i18next.setOverrides(inst, {en: {[namespace]: {quux: 'bla'}}}); + i18next.setOverrides(inst, element, {en: {[namespace]: {quux: 'bla'}}}); assert.equal(inst.t('quux'), 'bla'); assert.equal(inst.t('foo'), 'bar'); - i18next.setOverrides(inst, {en: {[namespace]: {}}}); + i18next.setOverrides(inst, element, {en: {[namespace]: {}}}); assert.equal(inst.t('quux'), 'quux'); assert.equal(inst.t('foo'), 'bar'); - i18next.setOverrides(inst, {en: {[namespace]: {foo: 'hmm'}}}); + i18next.setOverrides(inst, element, {en: {[namespace]: {foo: 'hmm'}}}); assert.equal(inst.t('foo'), 'hmm'); - i18next.setOverrides(inst, {en: {[namespace]: {quux: 'bla'}}}); + i18next.setOverrides(inst, element, {en: {[namespace]: {quux: 'bla'}}}); assert.equal(inst.t('foo'), 'bar'); assert.equal(inst.t('quux'), 'bla'); - i18next.setOverrides(inst, {}); + i18next.setOverrides(inst, element, {}); assert.equal(inst.t('foo'), 'bar'); assert.equal(inst.t('quux'), 'quux'); }); diff --git a/packages/language-select/src/dbp-language-select-demo.js b/packages/language-select/src/dbp-language-select-demo.js index cabad2ed8a3c1ec6889354b6832498af54f8ba62..11b1264a75f2dd3e189d0ef79ec31fe1538abdd5 100644 --- a/packages/language-select/src/dbp-language-select-demo.js +++ b/packages/language-select/src/dbp-language-select-demo.js @@ -9,12 +9,12 @@ import {createInstance, setOverrides} from './i18n.js'; // This is an example on how to override translations at runtime let OVERRIDES = { 'de': { - 'translation': { + 'dbp-language-select-display': { 'demo': 'Überschrieben' } }, 'en': { - 'translation': { + 'dbp-language-select-display': { 'demo': 'Overridden' } } @@ -26,7 +26,7 @@ class LanguageSelectDisplay extends AdapterLitElement { super(); this.lang = 'de'; this._i18n = createInstance(); - setOverrides(this._i18n, OVERRIDES); + setOverrides(this._i18n, this, OVERRIDES); } static get properties() {