Using Localized Messages in an MVC Portlet
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

リソースバンドルの集約

ローカライズされたメッセージを共有するモジュールを使用する場合、 bnd ヘッダーで、モジュールに関連付けるリソース バンドルを指定する必要があります。 Liferay は、リソース バンドルを集約するために必要なパラメータを自動的に指定する bnd 命令を提供します。

  1. bnd.bndファイルを開きます。

  2. -liferay-aggregate-resource-bundles: 命令を追加し、現在のモジュールと集約するリソースバンドルを持つモジュールのバンドルシンボル名を割り当てます。

    -liferay-aggregate-resource-bundles: \
        [bundle.symbolic.name1],\
        [bundle.symbolic.name2]
    

    たとえば、モジュールcom.acme.able.implおよびcom.acme.baker.implのリソースバンドルを使用するモジュールは、次のように構成されます。

    -liferay-aggregate-resource-bundles: \
        com.acme.able.impl,\
        com.acme.baker.impl
    

現在のモジュールのリソースバンドルは、リストされているモジュールのリソースバンドルよりも優先されます。

ビルド時に、Liferay の bnd プラグインは、命令を Require-Capability および Provide-Capability パラメータに自動的に変換します。

Liferay のネイティブ モジュールを使用してリソースを集約するには、パラメータを手動で指定する必要があります。

リファレンス

結果のOSGiヘッダは、jarファイルのMANIFEST.MFファイルにあります。 たとえば、モジュールのシンボリック名がcom.acme.webで、com.acme.able.implおよびcom.acme.baker.implのリソースバンドルを使用する場合、Require-Capabilityは次のようになります。

Require-Capability:\
    liferay.language.resources;\
        filter:="(bundle.symbolic.name=com.acme.able.impl)",\
    liferay.language.resources;\
        filter:="(bundle.symbolic.name=com.acme.baker.impl)"

Provide-Capabilityは次のようになります。

Provide-Capability:\
    liferay.language.resources;\
        module.only=true;\
        resource.bundle.base.name="content.Language",\
    liferay.language.resources;\
        resource.bundle.aggregate="(bundle.symbolic.name=com.acme.web),(bundle.symbolic.name=com.acme.able.impl),(bundle.symbolic.name=com.acme.baker.impl)";\
        bundle.symbolic.name="com.acme.web";\
        module.only=true;\
        resource.bundle.base.name="content.Language";\
        service.ranking=1,;\
        servlet.context.name="com.acme.web"

サンプルのProvide-Capabilityヘッダには、次の2つの部分があります。

  1. liferay.language.resources;module.only=true;resource.bundle.base.name="content.Language" は、モジュールがベース名が content.languageであるリソースバンドルを提供することを宣言します。

  2. liferay.language.resources;resource.bundle.aggregate=... ディレクティブは、リソース バンドルが集約されるバンドルのリスト、ターゲット バンドル、ターゲット バンドルのリソース バンドル名、およびこのサービスのランキングを指定します。

    • "(bundle.symbolic.name=com.acme.web),(bundle.symbolic.name=com.acme.able.impl),(bundle.symbolic.name=com.acme.baker.impl)": サービスは、バンドル bundle.symbolic.name=com.acme.web (現在のモジュール) から bundle.symbolic.name=com.acme.able.impl および bundle.symbolic.name=com.acme.baker.implのリソース バンドルを集約します。

    必要な数のバンドルを集約します。 リストされたバンドルは降順で優先されます。

    • bundle.symbolic.name=com.acme.web;resource.bundle.base.name="content.Language": com.acme.web バンドルのリソース バンドル content.Languageをオーバーライドします。

    • module.only=true: これらの言語キーはこのモジュールに固有です。 グローバル翻訳をローカルで上書きすることはできますが、それを共有している他のモジュールは影響を受けません。

    • service.ranking=1:リソースバンドルのサービスランキングは1です。 OSGiフレームワークは、このサービスがcom.acme.webcontent.Languageリソースバンドルを対象とする他のすべてのリソースバンドルサービスを上回る場合、このサービスを適用します。

    • servlet.context.name=com.acme.web:ターゲットリソースバンドルはサーブレットコンテキストcom.acme.webにあります。