Skip to content

Commit 5205a9f

Browse files
authored
fix(Settings): Make language loader configureable (openscd#1693)
1 parent c437f5a commit 5205a9f

File tree

5 files changed

+32
-17
lines changed

5 files changed

+32
-17
lines changed

packages/openscd/src/addons/Layout.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ export class OscdLayout extends LitElement {
378378
`;
379379
}
380380

381-
private renderActionItem(me: MenuItem | 'divider'): TemplateResult {
381+
protected renderActionItem(me: MenuItem | 'divider'): TemplateResult {
382382
if(me === 'divider' || !me.actionItem){ return html`` }
383383

384384
return html`

packages/openscd/src/addons/Settings.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
LitElement,
88
css,
99
} from 'lit-element';
10-
import { get, registerTranslateConfig, use } from 'lit-translate';
10+
import { get, registerTranslateConfig, Strings, use } from 'lit-translate';
1111

1212
import '@material/mwc-button';
1313
import '@material/mwc-dialog';
@@ -32,7 +32,7 @@ import {
3232
LoadNsdocEvent,
3333
newLoadNsdocEvent
3434
} from '@openscd/core/foundation/deprecated/settings.js';
35-
import { languages, loader } from '../translations/loader.js';
35+
import { Languages, languages, loader } from '../translations/loader.js';
3636

3737
import '../WizardDivider.js';
3838
import { WizardDialog } from '../wizard-dialog.js';
@@ -45,6 +45,11 @@ import {
4545
} from '../foundation/nsd.js';
4646
import { initializeNsdoc, Nsdoc } from '../foundation/nsdoc.js';
4747

48+
interface LanguageConfig {
49+
loader(lang: string): Promise<Strings>;
50+
languages: Languages;
51+
}
52+
4853
export const defaults: Settings = {
4954
language: 'en',
5055
theme: 'light',
@@ -84,6 +89,9 @@ export class OscdSettings extends LitElement {
8489
@property({ type: Boolean })
8590
nsdUploadButton = true;
8691

92+
@property({ type: Object })
93+
languageConfig: LanguageConfig = { languages, loader };
94+
8795
/**
8896
* Get the versions of the current OpenSCD NSD files.
8997
* @returns Current version, revision and release for all current OpenSCD NSD files.
@@ -333,15 +341,12 @@ export class OscdSettings extends LitElement {
333341
return new DOMParser().parseFromString(text, 'application/xml');
334342
}
335343

336-
constructor() {
337-
super();
344+
connectedCallback(): void {
345+
super.connectedCallback();
338346

339-
registerTranslateConfig({ loader, empty: key => key });
347+
registerTranslateConfig({ loader: this.languageConfig.loader, empty: key => key });
340348
use(this.settings.language);
341-
}
342349

343-
connectedCallback(): void {
344-
super.connectedCallback();
345350
if (this.host) {
346351
this.host!.addEventListener('oscd-settings', (evt: SettingsUIEvent) => {
347352
evt.detail.show ? this.settingsUI.show() : this.settingsUI.close();
@@ -365,7 +370,7 @@ export class OscdSettings extends LitElement {
365370
icon="language"
366371
label="${get('settings.language')}"
367372
>
368-
${Object.keys(languages).map(
373+
${Object.keys(this.languageConfig.languages).map(
369374
lang =>
370375
html`<mwc-list-item
371376
graphic="icon"

packages/openscd/src/translations/loader.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,17 @@ import { Strings } from 'lit-translate';
22
import { de } from './de.js';
33
import { en } from './en.js';
44
import { Language } from '@openscd/core/foundation/deprecated/settings.js';
5-
export const languages = { en, de };
5+
6+
export interface TranslationObject {
7+
[key: string]: string | TranslationObject;
8+
}
9+
10+
export interface Languages {
11+
de: TranslationObject;
12+
en: TranslationObject;
13+
}
14+
15+
export const languages: Languages = { en, de };
616

717
export type Translations = typeof en;
818

packages/plugins/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -659,15 +659,15 @@ snapshots["GOOSE subscriber plugin in Publisher view with a selected GOOSE messa
659659

660660
snapshots["GOOSE subscriber plugin in Subscriber view per default the plugin itsself looks like the latest snapshot"] =
661661
`<div>
662-
<mwc-formfield label="Publisher | Subscriber">
662+
<mwc-formfield label="subscription.goose.view.publisherView">
663663
<mwc-radio
664664
id="goosePublisherView"
665665
name="view"
666666
value="goose"
667667
>
668668
</mwc-radio>
669669
</mwc-formfield>
670-
<mwc-formfield label="Subscriber | Publisher">
670+
<mwc-formfield label="subscription.goose.view.subscriberView">
671671
<mwc-radio
672672
checked=""
673673
id="gooseSubscriberView"
@@ -1187,7 +1187,7 @@ snapshots["GOOSE subscriber plugin in Subscriber view with a selected IED for pa
11871187

11881188
snapshots["in Publisher view per default the plugin itself looks like the latest snapshot"] =
11891189
`<div>
1190-
<mwc-formfield label="Publisher | Subscriber">
1190+
<mwc-formfield label="subscription.goose.view.publisherView">
11911191
<mwc-radio
11921192
checked=""
11931193
id="goosePublisherView"
@@ -1196,7 +1196,7 @@ snapshots["in Publisher view per default the plugin itself looks like the latest
11961196
>
11971197
</mwc-radio>
11981198
</mwc-formfield>
1199-
<mwc-formfield label="Subscriber | Publisher">
1199+
<mwc-formfield label="subscription.goose.view.subscriberView">
12001200
<mwc-radio
12011201
id="gooseSubscriberView"
12021202
name="view"

packages/plugins/test/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,7 +1127,7 @@ snapshots["Sampled Values Plugin in Subscriber view when selecting an IED and su
11271127

11281128
snapshots["in Publisher view initially the plugin looks like the latest snapshot"] =
11291129
`<div>
1130-
<mwc-formfield label="Publisher | Subscriber">
1130+
<mwc-formfield label="subscription.smv.view.publisherView">
11311131
<mwc-radio
11321132
checked=""
11331133
id="smvPublisherView"
@@ -1136,7 +1136,7 @@ snapshots["in Publisher view initially the plugin looks like the latest snapshot
11361136
>
11371137
</mwc-radio>
11381138
</mwc-formfield>
1139-
<mwc-formfield label="Subscriber | Publisher">
1139+
<mwc-formfield label="subscription.smv.view.subscriberView">
11401140
<mwc-radio
11411141
id="smvSubscriberView"
11421142
name="view"

0 commit comments

Comments
 (0)