リソースバンドルの集約
ローカライズされたメッセージを共有するモジュールを使用する場合、 bnd ヘッダーで、モジュールに関連付けるリソース バンドルを指定する必要があります。 Liferay は、リソース バンドルを集約するために必要なパラメータを自動的に指定する bnd 命令を提供します。
-
bnd.bndファイルを開きます。 -
-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つの部分があります。
-
liferay.language.resources;module.only=true;resource.bundle.base.name="content.Language"は、モジュールがベース名が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(現在のモジュール) から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.webのcontent.Languageリソースバンドルを対象とする他のすべてのリソースバンドルサービスを上回る場合、このサービスを適用します。 -
servlet.context.name=com.acme.web:ターゲットリソースバンドルはサーブレットコンテキストcom.acme.webにあります。