Skip to content
Snippets Groups Projects
Commit 50ed61d5 authored by Reiter, Christoph's avatar Reiter, Christoph :snake:
Browse files

language-select: Port to new translation overrides API

We need a separate i18next instance per component instance and
call setOverrides() to override the translations.
parent d71fa224
No related branches found
No related tags found
No related merge requests found
Pipeline #45029 passed
...@@ -6,6 +6,7 @@ module.exports = { ...@@ -6,6 +6,7 @@ module.exports = {
options: { options: {
debug: false, debug: false,
removeUnusedKeys: true, removeUnusedKeys: true,
func: {list: ['i18n.t', '_i18n.t']},
lngs: ['en','de'], lngs: ['en','de'],
resource: { resource: {
loadPath: 'src/i18n/{{lng}}/{{ns}}.json', loadPath: 'src/i18n/{{lng}}/{{ns}}.json',
......
...@@ -4,7 +4,7 @@ import * as commonUtils from '@dbp-toolkit/common/utils'; ...@@ -4,7 +4,7 @@ import * as commonUtils from '@dbp-toolkit/common/utils';
import { ScopedElementsMixin } from '@open-wc/scoped-elements'; import { ScopedElementsMixin } from '@open-wc/scoped-elements';
import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element"; import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
import {Provider} from "@dbp-toolkit/provider"; import {Provider} from "@dbp-toolkit/provider";
import {i18n} from './i18n.js'; import {createInstance, setOverrides} from './i18n.js';
// This is an example on how to override translations at runtime // This is an example on how to override translations at runtime
let OVERRIDES = { let OVERRIDES = {
...@@ -20,23 +20,13 @@ let OVERRIDES = { ...@@ -20,23 +20,13 @@ let OVERRIDES = {
} }
}; };
function applyOverrides(i18n, namespace, overrides) {
for(let lang of Object.keys(overrides)) {
let data = overrides[lang][namespace];
if (data !== undefined) {
i18n.addResourceBundle(lang, namespace + '-override', data);
}
}
}
class LanguageSelectDisplay extends AdapterLitElement { class LanguageSelectDisplay extends AdapterLitElement {
constructor() { constructor() {
super(); super();
this.lang = 'de'; this.lang = 'de';
this._i18n = i18n.cloneInstance(); this._i18n = createInstance();
// FIXME: this overrides the translations for all clones setOverrides(this._i18n, OVERRIDES);
applyOverrides(this._i18n, 'translation', OVERRIDES);
} }
static get properties() { static get properties() {
......
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 de from './i18n/de/translation.json';
import en from './i18n/en/translation.json'; import en from './i18n/en/translation.json';
export const i18n = createInstance({en: en, de: de}, 'de', 'en'); export function createInstance() {
\ No newline at end of file return _createInstance({en: en, de: de}, 'de', 'en');
}
export {setOverrides};
\ No newline at end of file
import {html, css} from 'lit-element'; import {html, css} from 'lit-element';
import {i18n} from './i18n.js'; import {createInstance} from './i18n.js';
import * as commonStyles from '@dbp-toolkit/common/styles'; import * as commonStyles from '@dbp-toolkit/common/styles';
import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element"; import {AdapterLitElement} from "@dbp-toolkit/provider/src/adapter-lit-element";
/** /**
* Emits a dbp-language-changed event where event.detail.lang is the new selected language * Emits a dbp-language-changed event where event.detail.lang is the new selected language
*/ */
...@@ -13,11 +14,12 @@ export class LanguageSelect extends AdapterLitElement { ...@@ -13,11 +14,12 @@ export class LanguageSelect extends AdapterLitElement {
this._lang = 'de'; this._lang = 'de';
this.languages = ['de', 'en']; this.languages = ['de', 'en'];
this._i18n = createInstance();
// for the i18next scanner // for the i18next scanner
i18n.t('de'); this._i18n.t('de');
i18n.t('de-action'); this._i18n.t('de-action');
i18n.t('en'); this._i18n.t('en');
i18n.t('en-action'); this._i18n.t('en-action');
} }
_getNextLanguage(lang) { _getNextLanguage(lang) {
...@@ -58,7 +60,7 @@ export class LanguageSelect extends AdapterLitElement { ...@@ -58,7 +60,7 @@ export class LanguageSelect extends AdapterLitElement {
// Unlike other cases we use the next language for the translations so that // Unlike other cases we use the next language for the translations so that
// users not knowing the current language can understand it. // users not knowing the current language can understand it.
// In case of more than two this doesn't make that much sense, but for now.. // In case of more than two this doesn't make that much sense, but for now..
i18n.changeLanguage(this.next); this._i18n.changeLanguage(this.next);
} }
} }
...@@ -106,7 +108,7 @@ export class LanguageSelect extends AdapterLitElement { ...@@ -106,7 +108,7 @@ export class LanguageSelect extends AdapterLitElement {
} }
render() { render() {
var linkTitle = i18n.t(this.next + '-action'); var linkTitle = this._i18n.t(this.next + '-action');
return html` return html`
<a href="#" title="${linkTitle}" @click=${this.onClick}>${this.next.toUpperCase()}</a> <a href="#" title="${linkTitle}" @click=${this.onClick}>${this.next.toUpperCase()}</a>
`; `;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment