Nuxeo Platformにいくつの言語を組み込むことができるか?


Thu 03 November 2016 作成者: Michael Vachette

構成の一部としてデプロイされたi18nファイルを使用する代わりに、アプリ内の語彙のローカリゼーションを管理する方法について、最近尋ねられました。バージョン6.0以降であれば可能であることに驚きました。この機能は今まで注目されることがなかったので、ほとんど知られていませんでした(少なくとも私は、Nuxeoでそのことを知らない唯一の人間になることだけは避けられました!)。

ボキャブラリは、Nuxeo Platformの提案ウィジェットで使用できるルックアップテーブルです。


提案ウィジェット
提案ウィジェット

各エントリは、通常、キーとラベルから構成されます。もちろん、異なる言語を話すユーザがいる場合は、言語ごとにラベルをローカライズすることができます。エントリとその翻訳の追加/変更のためだけに構成を更新しなければならないのは問題なので、Nuxeo Platformを使用すれば、アプリ内で直接行うことができ、APIエンドポイントも提供できます。しかし、まずボキャブラリを構成する必要があります。

ボキャブラリというのは、ディレクトリと呼ばれるものの、もっと一般的な抽象概念の別名です。新しいディレクトリを構成するために最初に必要とされるものは、サポートしたい言語のプロパティを含むスキーマです。ここでは、英語、フランス語、スペイン語、ドイツ語を使用します。

<?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>

同じスキーマは複数のボキャブラリに再使用できますので、注意してください。次に、対応する拡張ポイントでディレクトリを宣言することができます。

<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>

これで、Directory API Endpointを使用して、新しいcustoml10ncoverageディレクトリのエントリを取得、追加、更新、または削除することができます。本当に簡単ですね。


Nuxeo APIプレイグラウンド
Nuxeo APIプレイグラウンド

さらに、ボキャブラリはUIの提案ウィジェットで使用することもできます。以下で、ユーザロケールを変更したときにラベルがローカライズされていることがわかります。


<img src='/assets/imgs/blog/english.png' alt='ローカライズされたラベル付きの提案ウィジェット alt="English"/>
ローカライズされたラベル付きの提案ウィジェット(英語)


ローカライズされたラベル付きの提案ウィジェット
ローカライズされたラベル付きの提案ウィジェット(ドイツ語)

Nuxeo Studioがあれば、ウィジェットの構成は、このうえなく簡単になります。文字列プロパティでsuggestOneDirectoryウィジェットを使用し、ボキャブラリ名((カスタムプロパティで)を設定し、localizeおよびActivate database localizationプロパティを真(true)に設定する必要があります。


Nuxeo Studioのウィジェットエディタ
Nuxeo Studioのウィジェットエディタ

さらに、Admin Centerからボキャブラリを管理してみましょう。そのためには、Admin Centerのレイアウトを定義し、登録する必要があります。ここでは詳細に触れませんが、詳しいことを知りたい場合は、レイアウトXML構成がこちらでご覧になれます。


Admin Centerのボキャブラリエディタ
Admin Centerのボキャブラリエディタ

最後に、何も設定されていないので、後でスキーマとAdmin Centerのレイアウトを更新するだけで、新しい言語を追加することができます。この事例の詳細な情報は、githubリポジトリにあります。


タグ付き: Nuxeo Platform, How to