変更する言語キーがLiferayのアプリケーションのいずれか、またはソースコードを制御できない別のモジュール内にある場合はどうしたらよいでしょうか。モジュールの言語キーはそれぞれのモジュール内にあるため、モジュールの言語キーをオーバーライドするプロセスは、Liferayの言語キーをオーバーライドするプロセスとは異なります。
プロセスは次のとおりです。
- モジュールとそのメタデータおよび言語キーを見つける
- カスタム言語キーの値を記述する
- モジュールのリソースバンドルに優先順位を付ける
モジュールとそのメタデータおよび言語キーを見つける
Gogo shellで、ポートレットの表示名に一致するキーワードのバンドルとgrepをリストします。 言語キーは、ポートレットのWebモジュール(バンドル)にあります。バンドルを見つけたら、そのID番号をメモします。
たとえば、ブログポートレットを見つけるには、Gogoのコマンドと出力は次のようになります。
g!lb | grep Blogs
152|Active | 1|Liferay Blogs Service (1.0.2)
184|Active | 1|Liferay Blogs Editor Config (2.0.1)
202|Active | 1|Liferay Blogs Layout Prototype (2.0.2)
288|Active | 1|Liferay Blogs Recent Bloggers Web (1.0.2)
297|Active | 1|Liferay Blogs Item Selector Web (1.0.2)
374|Active | 1|Liferay Blogs Item Selector API (2.0.1)
448|Active | 1|Liferay Blogs API (3.0.1)
465|Active | 1|Liferay Blogs Web (1.0.6)
true
IDをheaders
コマンドに渡すことにより、バンドルのヘッダーをリストします。
g!headers 465
Liferay Blogs Web (465)
-----------------------
Manifest-Version = 1.0
Bnd-LastModified = 1459866186018
Bundle-ManifestVersion = 2
Bundle-Name = Liferay Blogs Web
Bundle-SymbolicName = com.liferay.blogs.web
Bundle-Version: 1.0.6
...
Web-ContextPath = /blogs-web
g!
Bundle-SymbolicName
、Bundle-Version
、およびWeb-ContextPath
をメモします。Web-ContextPath
値の/
の後は、サーブレットコンテキスト名です。
重要:サーブレットコンテキスト名、バンドルのシンボル名、およびバージョンを記録します。これらは後のプロセスでリソースバンドルローダーを作成するために使用します。
たとえば、LiferayブログのWebモジュールの値は次のとおりです。
- バンドルのシンボル名:
com.liferay.blogs.web
- バンドルバージョン:
1.0.6
- サーブレットコンテキスト名:
blogs-web
次に、モジュールのJARファイルを見つけて、その言語キーを調べます。Liferayは、次のモジュールJARファイルの命名規則に従っています。
[bundle symbolic name]-[version].jar
たとえば、ブログWebバージョン1.0.6モジュールはcom.liferay.blogs.web-1.0.6.jar
にあります。
モジュールJARの検索場所は次のとおりです。
- LiferayのNexusリポジトリ
[Liferay Home]/osgi/modules
[Liferay Home]/osgi/marketplace
のアプリケーションまたはアプリケーションスイートのLPKGファイルに埋め込まれている。
言語プロパティファイルは、モジュールのsrc/main/resources/content
フォルダにあります。Language[_xx].properties
ファイルでオーバーライドする言語キーを特定します。
チェックポイント:モジュールの言語キーをオーバーライドするために必要な以下の情報がそろっていることを確認してください。
- 言語キー
- バンドルのシンボル名
- サーブレットコンテキスト名
次に、言語キーの新しい値を記述します。
カスタム言語キーの値を記述する
リソースバンドルローダーとカスタム言語キーを保持する新しいモジュールを作成します。
モジュールのsrc/main/resources/content
フォルダで、キーをオーバーライドするロケールごとに言語プロパティファイルを作成します。各言語プロパティファイルで、言語キーのオーバーライドを指定します。
次に、モジュールの言語キーをターゲットモジュールのリソースバンドルとして優先順位付けします。
モジュールのリソースバンドルに優先順位を付ける
言語キーが配置されたので、OSGiマニフェストヘッダーを使用して、ターゲットモジュール用の言語キーを指定します。ターゲットモジュールのリソースバンドルを補完するには、リソースバンドルをターゲットモジュールのリソースバンドルに集約します。最初にモジュールをリストして、そのリソースバンドルをターゲットモジュールのリソースバンドルよりも優先させます。以下のサンプルモジュールcom.liferay.docs.l10n.myapp.lang
では、そのリソースバンドルがターゲットモジュールcom.liferay.blogs.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
このサンプルのProvide-Capability
ヘッダーには、次の2つの部分があります。
-
liferay.resource.bundle;resource.bundle.base.name="content.Language"
は、モジュールがベース名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)"
: このサービスは、バンドルcom.liferay.docs.l10n.myapp.lang
およびcom.liferay.blogs.web
からリソースバンドルを集約します。 必要な数のバンドルを集約します。リストされたバンドルは、降順で優先順位が付けられます。 -
bundle.symbolic.name=com.liferay.blogs.web;resource.bundle.base.name="content.Language"
:com.liferay.blogs.web
バンドルのcontent.Language
というリソースバンドルをオーバーライドします。 -
service.ranking:Long="2"
:リソースバンドルのサービスランキングは2
です。OSGiフレームワークは、com.liferay.blogs.web
のcontent.Language
リソースバンドルをターゲットとする他のすべてのリソースバンドルサービスよりランクが上回る場合、このサービスを適用します。 -
servlet.context.name=blogs-web
:ターゲットリソースバンドルはサーブレットコンテキストblogs-web
にあります。
-
モジュールをデプロイして、オーバーライドした言語キーを確認します。
ヒント:オーバーライドが表示されない場合は、Gogo Shellを使用して、競合するリソースバンドルサービスがないか確認してください。ランクが上の別のサービスがある可能性があります。たとえば、集約にcom.liferay.blogs.web
のリソースバンドルが含まれている競合するリソースバンドルサービスがないか確認するには、次のGogo Shellコマンドを実行します。
services “(bundle.symbolic.name=com.liferay.login.web)”
ランキングが高いリソースバンドル集約サービスの結果を検索します。
LiferayのOSGiランタイムでモジュールの言語キーを変更できるようになりました。 オーバーライドする言語キーは、実際にはLiferayのコアにある可能性があることに留意してください。Liferayの言語キーもオーバーライドできます。
関連トピック
Resource Bundle Override Sample Project