グローバル言語キーのオーバーライド

言語ファイルには、アプリケーションのユーザーインターフェイスメッセージの翻訳が含まれています。 ただし、デフォルトの言語キーをグローバルに、および他のアプリケーション(独自のアプリケーションを含む)でオーバーライドすることもできます。言語キーをオーバーライドする手順は次のとおりです。

  1. オーバーライドする言語キーを決定する
  2. 新しい言語プロパティファイルのキーをオーバーライドする
  3. リソースバンドルのサービスコンポーネントを作成する

:かつてLiferay Portal 6.2の一部であった多くのアプリケーションは、現在モジュール化されています。それらの言語キーは、Liferayの言語プロパティファイルからアプリケーションのモジュールの1つに移動されている可能性があります。モジュールの言語キーをオーバーライドするプロセスは、Liferayの言語キーをオーバーライドするプロセスとは異なります。

オーバーライドする言語キーを決定する

それでは、グローバル言語キーを探します。それらは、ソースコードまたはバンドル内のLanguage[xx_XX].propertiesファイルにあります。

  • ソースの場合:

    /portal-impl/src/content/Language[xx_XX].properties

  • バンドルの場合:

    portal-impl.jar

すべての言語プロパティファイルには、言語設定プロパティなど、オーバーライド可能なプロパティが含まれています。

##
## Language settings
##

...
lang.user.name.field.names=prefix,first-name,middle-name,last-name,suffix
lang.user.name.prefix.values=Dr,Mr,Ms,Mrs
lang.user.name.required.field.names=last-name
lang.user.name.suffix.values=II,III,IV,Jr,Phd,Sr
...

デフォルトのメッセージとラベルを更新するためにオーバーライドできる単純なキーも多数あります。

##
## Category titles
##

category.admin=Admin
category.alfresco=Alfresco
category.christianity=Christianity
category.cms=Content Management
...

たとえば、図1は、Liferayのデフォルトのpublish言語キーを使用するボタンを示しています。

`publish=Publish`

図1:Liferayのユーザーインターフェイスに表示されるメッセージはカスタマイズできます。

次に、このキーをオーバーライドする方法を学びます。

新しい言語プロパティファイルのキーをオーバーライドする

オーバーライドするキーがわかったら、必要なロケールの言語プロパティファイル(またはデフォルトのLanguage.propertiesファイル)をモジュールのsrc/main/resources/contentフォルダに作成します。ファイルで、キーを定義します。たとえば、publishキーをオーバーライドするとします。

publish=Publish Override

変更を有効にするには、言語ファイルを参照するリソースバンドルのサービスコンポーネントを作成する必要があります。

リソースバンドルのサービスコンポーネントを作成する

モジュールで、オーバーライドするロケールに合わせてjava.util.ResourceBundleを拡張するクラスを作成します。次に、en_USロケールのリソースバンドルクラスの例を示します。

@Component(
property = { "language.id=en_US" },
service = ResourceBundle.class
)
public class MyEnUsResourceBundle extends ResourceBundle {

@Override
protected Object handleGetObject(String key) {
return _resourceBundle.getObject(key);
}

@Override
public Enumeration<String> getKeys() {
return _resourceBundle.getKeys();
}

private final ResourceBundle _resourceBundle = ResourceBundle.getBundle(
"content.Language_en_US", UTF8Control.INSTANCE);

}

クラスの_resourceBundleフィールドにはResourceBundleが割り当てられます。 ResourceBundle.getBundleの呼び出しには2つのパラメーターが必要です。 content.Language_en_USパラメーターは、モジュールのsrc/main/resourcesフォルダに関する言語ファイルの修飾名です。2番目のパラメーターは、リソースバンドルの言語構文を設定するcontrolです。Liferayの構文と同じ言語構文を使用するには、Liferayのcom.liferay.portal.kernel.language.UTF8Controlクラスをインポートし、2番目のパラメーターをUTF8Control.INSTANCEに設定します。

クラスの@Componentアノテーションは、それをOSGi ResourceBundleサービスコンポーネントとして宣言します。そのlanguage.idプロパティによって、en_USロケールに指定されます。

@Component(
property = { "language.id=en_US" },
service = ResourceBundle.class
)

クラスは次のメソッドをオーバーライドします。

  • handleGetObject:モジュールのリソースバンドル(モジュールの言語プロパティファイルに基づく)でキーを検索し、キーの値をObjectとして返します。

  • getKeys:リソースバンドルのキーのEnumerationを返します。

リソースバンドルのサービスコンポーネントは、デフォルトの言語キーをモジュールの言語キーのオーバーライドにリダイレクトします。

:複数のロケールのグローバル言語キーのオーバーライドには、ロケールごとに個別のモジュールが必要です。各モジュールのResourceBundle拡張クラス(上記のMyEnUsResourceBundleクラスなど)は、language.idコンポーネントプロパティの定義および言語ファイルの修飾名パラメーターでロケールを指定する必要があります。 たとえば、スペイン語ロケールの場合は次のようになります。

重要:お使いのモジュールが別のモジュールの言語キーを使用していて、他のモジュールのキーのいずれかをオーバーライドする場合は、OSGiヘッダーを使用して、モジュールが必要とし、提供する機能を指定してください。これにより、モジュールのリソースバンドルに優先順位を付けることができます。

Liferay言語キーのオーバーライドが機能していることを確認するには、モジュールをデプロイし、キーを使用しているポートレットとページにアクセスしてください。

図2:このボタンは、オーバーライドされたpublish キーを使用しています。

Liferayの言語キーをオーバーライドする手順は以上です。

関連トピック

Resource Bundle Override Sample Project

Upgrading Core Language Key Hooks

Internationalization

« 言語キーのオーバーライドモジュールの言語キーのオーバーライド »
この記事は役に立ちましたか?
1人中0人がこの記事が役に立ったと言っています