Vor Kurzem wurde ich gefragt, wie die Lokalisierung von Vokabular innerhalb der App bewältigt werden kann, ohne Lokalisierungsdateien zu verwenden, die als Teil der Konfiguration bereitgestellt wurden. Zu meiner Überraschung ist dies bereits seit Version 6.0 möglich. Diese Funktion fand so wenig Beachtung, dass fast niemand darüber Bescheid wusste. Zumindest muss ich mich nicht dafür schämen, dass ich der einzige bei Nuxeo bin, der nichts davon wusste.

Vokabulare sind Nachschlagetabellen, die Sie mit Vorschlags-Widgets in der Nuxeo Platform verwenden können.


Vorschlags-Widget
Vorschlags-Widget

Jeder Eintrag besteht typischerweise aus einem Schlüssel und einer Beschreibung. Wenn Sie aber Benutzer mit unterschiedlichen Sprachen haben, möchten Sie natürlich, dass die Beschreibungen in die jeweilige Sprache übersetzt werden. Es ist definitiv nicht toll, die Konfiguration aktualisieren zu müssen, nur um einen Eintrag und seine Übersetzungen hinzuzufügen oder zu ändern. Die Nuxeo Platform ermöglicht Ihnen, dies direkt in der App auszuführen, und stellt dafür auch einen API-Endpunkt zur Verfügung. Zuerst müssen Sie jedoch das Vokabular konfigurieren.

Letztendlich ist ein Vokabular nur ein anderer Name für "Verzeichnis". Um ein neues Verzeichnis zu konfigurieren, benötigen wir zunächst ein Schema. Dieses Schema enthält eine Eigenschaft für jede Sprache, die wir unterstützen möchten. Hier verwenden wir Englisch, Französisch, Spanisch und Deutsch.

<?xml version="1.0"?>
<xs:schema
    targetNamespace="http://www.nuxeo.org/ecm/schemas/customl10nxvocabulary"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="id" type="xs:string"/>
    <xs:element name="parent" type="xs:string"/>
    <xs:element name="label_en" type="xs:string"/>
    <xs:element name="label_fr" type="xs:string"/>
    <xs:element name="label_es" type="xs:string"/>
    <xs:element name="label_de" type="xs:string"/>
    <xs:element name="obsolete" type="xs:integer" default="0"/>
</xs:schema>

Beachten Sie, dass das gleiche Schema für mehrere Vokabulare wiederverwendet werden kann. Im nächsten Schritt legen wir das Verzeichnis mit dem entsprechenden Erweiterungspunkt fest.

<component name="org.nuxeo.samples.vocabularies.l10n.directory">
    <extension point="directories" target="org.nuxeo.ecm.directory.sql.SQLDirectoryFactory">
        <directory name="customl10ncoverage">
            <schema>customl10nxvocabulary</schema>
            <parentDirectory>customl10nxvocabulary</parentDirectory>
            <dataSource>java:/nxsqldirectory</dataSource>
            <cacheTimeout>3600</cacheTimeout>
            <cacheMaxSize>1000</cacheMaxSize>
            <table>customl10nxvocabulary</table>
            <idField>id</idField>
            <autoincrementIdField>false</autoincrementIdField>
            <createTablePolicy>on_missing_columns</createTablePolicy>
        </directory>
    </extension>
</component>

Damit allein können wir bereits den API-Endpunkt des Verzeichnisses verwenden, um Einträge in unserem Verzeichnis customl10ncoverage abzurufen, hinzuzufügen, zu aktualisieren oder zu löschen. Das war ziemlich einfach.


Nuxeo API Playground
Nuxeo API Playground

Darüber hinaus ist das Vokabular auch für die Verwendung mit dem Vorschlags-Widget in der UI verfügbar. Wir sehen weiter unten, dass die Beschreibungen lokalisiert sind, wenn wir das Benutzergebietsschema ändern.


Vorschlags-Widget mit lokalisierten Beschreibungen
Vorschlags-Widget mit lokalisierten Beschreibungen (Englisch)


Vorschlags-Widget mit lokalisierten Beschreibungen
Vorschlags-Widget mit lokalisierten Beschreibungen (Deutsch)

Die Konfiguration des Widgets mit Nuxeo Studio könnte nicht einfacher sein. Wir müssen nur das Widget suggestOneDirectory mit einer Zeichenfolgeneigenschaft verwenden, den Vokabularnamen (mit einer benutzerdefinierten Eigenschaft festlegen und sicherstellen, dass wir die Eigenschaften localize und Activate database localization auf "Wahr" setzen.


Widget-Editor in Nuxeo Studio
Widget-Editor in Nuxeo Studio

Wir gehen noch einen Schritt weiter und verwalten das Vokabular aus dem Admin Center. Dafür müssen wir ein Layout definieren und es registrieren. Ich möchte hier nicht näher darauf eingehen. Wenn Sie mehr erfahren möchten, ist die XML-Konfiguration des Layouts hier verfügbar.


Vokabular-Editor im Admin Center
Vokabular-Editor im Admin Center

Letztendlich ist nichts in Stein gemeißelt und Sie können jederzeit neue Sprachen hinzufügen, indem Sie lediglich das Schema und das Layout des Admin Centers aktualisieren. Die vollständige Quelle dieses Beispiels befindet sich in unserem GitHub-Repository.