言語ファイルには、アプリケーションのユーザーインターフェイスメッセージの翻訳が含まれています。 ただし、デフォルトの言語キーをグローバルに、および他のアプリケーション(独自のアプリケーションを含む)でオーバーライドすることもできます。言語キーをオーバーライドする手順は次のとおりです。
注:かつて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`
次に、このキーをオーバーライドする方法を学びます。
新しい言語プロパティファイルのキーをオーバーライドする
オーバーライドするキーがわかったら、必要なロケールの言語プロパティファイル(またはデフォルトの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言語キーのオーバーライドが機能していることを確認するには、モジュールをデプロイし、キーを使用しているポートレットとページにアクセスしてください。
Liferayの言語キーをオーバーライドする手順は以上です。
関連トピック
Resource Bundle Override Sample Project