前回、Liferay DXP 7でのカスタイムモジュール(ポートレット)の言語リソースを他モジュールに共有する方法を紹介しました。今回は、Liferay DXP 7.1以降、既存モジュール言語リソースに対するカスタマイズを複数既存モジュールに適用する方法を紹介します。
みなさまはすでにご存知かもしれませんが、Liferay DXP 7.1から、モジュール言語リソースのカスタマイズ方式は従来のOSGI-Service方式からOSGI-Capability方式になりました。従って、bnd-tools Provide-Capabilityのみで、複数モジュールが同じ言語リソースカスタマイズを利用できます。
公式例:
Provide-Capability:\ liferay.resource.bundle;\ resource.bundle.base.name="content.Language",\ liferay.resource.bundle;\ resource.bundle.aggregate:String="(bundle.symbolic.name=com.liferay.docs.l10n.myapp.lang),\ (bundle.symbolic.name=com.liferay.blogs.web)";\ bundle.symbolic.name=com.liferay.blogs.web;\ resource.bundle.base.name="content.Language";\ service.ranking:Long="2";\ servlet.context.name=blogs-web
複数カスタマイズ共有(例として、blogs-webとproduct-navigbation-control-menu-webを対象にする)例。
Provide-Capability:\ liferay.resource.bundle;\ resource.bundle.base.name="content.Language",\ liferay.resource.bundle;\ resource.bundle.aggregate:String="(bundle.symbolic.name=com.liferay.docs.l10n.myapp.lang),\ (bundle.symbolic.name=com.liferay.blogs.web)";\ bundle.symbolic.name=com.liferay.blogs.web;\ resource.bundle.base.name="content.Language";\ service.ranking:Long="2";\ servlet.context.name=blogs-web liferay.resource.bundle;\ resource.bundle.aggregate:String="(bundle.symbolic.name=com.liferay.docs.l10n.myapp.lang),\ (bundle.symbolic.name=com.liferay.product.navigation.control.menu.web)";\ bundle.symbolic.name=com.liferay.product.navigation.control.menu.web;\ resource.bundle.base.name="content.Language";\ service.ranking:Long="2";\ servlet.context.name=product-navigation-control-menu-web
まとめると、Liferay DXP 7.1にでの言語リソース定義は、以下のルールに従いましょう。
- bnd.bndにProvide-Capabilityを追加する
- Provide-Capabilityに以下のディレクティブを追加する
- liferay.resource.bundle;resource.bundle.base.name=...: 言語キー所在パッケージパスを定義する
- liferay.resource.bundle;resource.bundle.aggregate...: カスタム対象モジュールを宣言する
- 複数の対象モジュールがある場合、上記2のディレクテイブを複数記入する
- 全てディレクテイブはコンマ,で区切る