Ga naar hoofdinhoud

Internationalization (i18n)

Ten behoeve van meertaligheid van onze Web Componenten maken we gebruik van i18next.

De taal is Nederlands (default) of Engels. De huidige taal wordt bepaald door in het DOM te zoeken naar het dichtstbijzijnde element met lang-attribuut. Het lang-attribuut mag op elk element staan, waarmee secties in hetzelfde document verschillende talen kunnen hebben. De taalinstelling gebeurt eenmalig net nadat het Web Component in het DOM is geplaatst. Web Componenten luisteren niet naar een eventuele wijziging van het lang-attribuut in het DOM.

Naast het Web Component definiëren we een typescript file met daarin een const translations de we exporteren:

<web-component-naam>.i18n.ts

import { Resource } from "../../utils/i18n";

export const translations: Resource = {
en: {
"dso-<web-component-naam>": {
simple: "Simple text",
interpolate: "{{var}} has not been found.",
},
},
nl: {
"dso-web-component-naam": {
simple: "Eenvoudige tekst",
interpolate: "{{var}} is niet gevonden.",
},
},
};

In het Web Component maken we gebruik van een onze custom utility function i18n. Daar geven we een functie die het host-element retourneert en de translations van het web component aan mee. (DsoAlert als voorbeeld)

import { i18n } from "../../utils/i18n";

import { translations } from "./alert.i18n";

@Element()
host!: HTMLDsoAlertElement;

private text = i18n(() => this.host, translations);

Dit stelt ons in staat teksten als volgt op te halen:

Een eenvoudige tekst (zonder interpolatie):

this.text("simple");

resulteert in : Eenvoudige tekst of Simple text.

Een tekst met interpolatie:

this.localVar = "dummy";
this.text("interpolate", { var: this.localVar });

resulteert in : dummy is niet gevonden of dummy has not been found.