Liferay Portalは、対応したい言語の数だけ対応できるように設計されています。 これは、すべての言語固有のテキストを取り出し、 language.properties ファイルに保存することで行われます。 こうすることで、ページがロードされると、Liferay Portalは言語を検出し、対応する言語ファイルを引き出して、テキストを正しい言語で表示することができます。
これさえあれば、できる:
- 希望する多言語(または少数)に簡単に対応できます、
- 多言語の一元化をすること、
- ある単語の翻訳方法を変更する。 必要であれば、「Message Boards」ポートレットを事実上「Forums」という名前に変更することができます。
解像度
portal.propertiesのカスタマイズ
Liferay Portalには、ポータルをカスタマイズするために簡単に設定できるプロパティが多数用意されています。 これらのプロパティは、 …/portal-impl/classes/portal.propertiesにある portal.properties ファイルで確認することができます。 これらのプロパティのデフォルト値を変更するには、オーバーライドしたい値のみを含むこのファイルのEXTバージョンを作成します。
デフォルトの言語とデフォルトの国を設定する
portal.properties ファイルに、以下の設定があります:
# # This sets the default locale of the portal, overriding the properties # "user.language" and "user.country" specified in system.properties. # # company.default.locale=en_US
言語ごとに異なるユニークなURLを設定する
Liferay Portalでは、I18nServletを介して、特定の言語に対してユニークなURLを提供することができます。 例としては、以下のようなものがあります:
| 言語 | ユニークなURL |
|---|---|
| 中国語簡体字 | http://www.liferay.com/zh_CN/web/guest/home |
| ドイツ語 | http://www.liferay.com/de/web/guest/home |
このためのマッピングは、 web.xmlで行われています:
<servlet-mapping> <servlet-name>I18n Servlet</servlet-name> <url-pattern>/de/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>I18n Servlet</servlet-name> <url-pattern>/zh_CN/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>I18n Servlet</servlet-name> <url-pattern>/zh_TW/*</url-pattern> </servlet-mapping>
この機能により、特定のドメインを1つのサイトの特定の言語に向けることができるようになります。
不要な言語を削除する
デフォルトでは、Liferay Portalは以下の言語をすべてサポートしています(Liferay 6.2の portal.properties ファイルからの抜粋):
locales=ar_SA,eu_ES,bg_BG,ca_AD,ca_ES,zh_CN,zh_TW,hr_HR,cs_CZ,da_DK,nl_NL,nl_BE,en_US,en_GB,en_AU,et_EE,fi_FI,fr_FR,fr_CA,gl_ES,de_DE,el_GR,iw_IL,hi_IN,hu_HU,in_ID,it_IT,ja_JP,ko_KR,lo_LA,lt_LT,nb_NO,fa_IR,pl_PL,pt_BR,pt_PT,ro_RO,ru_RU,sr_RS,sr_RS_latin,sl_SI,sk_SK,es_ES,sv_SE,tr_TR,uk_UA,vi_VN
英語、ドイツ語、スペイン語のみをサポートしたい場合は、不要なロケールを削除して、localeesの値を次のようにします:
locales=en_US,de_DE,es_ES locales.enabled=en_US,de_DE,es_ES
language.properties およびその他の言語ファイルでのカスタマイズ。
言語ファイルは多数存在し、ある言語ファイル内の設定は他の言語ファイルの設定を上書きする可能性があります:
- EXTバージョンは非EXTバージョンより優先される
- 言語別バージョンは、非言語別バージョンより優先される
- ロケーション固有のバージョンは、ロケーション固有でないバージョンより優先される
北米英語(en_US)を例にとって、ランキングを紹介します:
Language-ext_en_US.properties Language_en_US.properties Language-ext_en.properties Language_en.properties Language-ext.properties Language.properties
言語表示情報は、 …/portal-impl/src/content/Language.propertiesで定義されており、その他にも外国語のための様々なLanguage_.propertiesファイルがあります。 Language.propertiesは、主要かつ「デフォルト」の言語定義ファイルですが、このファイルの定義は、言語固有の定義によって上書きされることがあります。 例えば、Language_en.propertiesというファイルには英語版の定義が、Language_fr.propertiesというファイルにはフランス語版の定義が含まれているなどです。
言語ファイルは、ロケール固有の定義も持つことができます。 Language_en_US.properties(存在する場合):米国で定義された英語のフレーズバリエーションが含まれています。 他の言語でも、ロケール固有の定義を持つことができます。
言語ファイルの項目は、-ext.propertiesファイルを上書きすることで、デプロイメントごとに再定義することができる。 例えば、Language-ext.propertiesは、 …/portal-impl/src/content/Language.propertiesにある定義をオーバーライド/エクステンドします。
重要な注意点は以下の通りです:
- ロケール固有の定義が優先され、言語固有の定義が続き、デフォルトの定義が続く。 Language.propertiesの項目のほとんどは、Language_xx.propertiesに言語固有の項目があるので、それらの項目が常に優先される。 例えば、Language_en.propertiesのエントリーをオーバーライドするには、新しいエントリーを
…/Language-ext_en.propertiesに記述する必要があります。 Liferay 4.1.2時点では、ロケール固有のファイルはほとんど存在しません(例えば、英語ファイルのロケール固有のバリエーションは存在しません)。 例えば、米国で最も優先順位の高いファイルは、Language_en_US.propertiesの拡張子で、…/Language-ext_en_US.propertiesとなります。 もし、変更した内容が表示されない場合は、そのファイルに入れてみてください。 - localesプロパティで定義された同じ言語のロケールが複数ある場合、同じ言語の別のロケールで翻訳を要求しても翻訳された値が見つからないときは、リストの最初のものが使用されます。 例えば、pt_BRとpt_PTのような2つのロケールがある場合(この順番)、pt_PTで見つからないキーはpt_BRで探されることになります。
既存の言語エントリーを変更する
例Liferayの既存のポートレットのテキストを "Message Boards "から "Forums "に変更する。
…/portal-impl/src/content/Language_en.propertiesに以下のエントリがあるため、Liferayは現在ポートレットに対して「Message Boards」と表示します:
javax.portlet.title.19=Message Boards
変更するには、Language-ext_en.propertiesファイルを作成/修正し、 …/Language-ext_en.propertiesに次のエントリーを追加してください:
javax.portlet.title.19=Forums
新しい言語エントリーを作成する
新しく作成されたポートレットの場合、新しい言語固有のテキストが存在する可能性があります。
例新しいポートレットのタイトルを、デフォルトのタイトルから「レポート」に変更する。
ポートレットのLanguage-ext.propertiesファイルを作成・変更し、以下の項目を追加してください:
javax.portlet.title.xx=Reports
JSPファイルに複数の言語を表示させる
これらの言語がどのように保存され、どのように上書きするのかが理解できたので、引き続き「JSPページで異なる言語を表示する方法」について説明します。
English Language_en.propertiesファイルに以下の行があります:
use-ldap-password-policy=Use LDAP Password Policy
と、Spanish Language_es.propertiesファイルに以下の行を追加します:
use-ldap-password-policy=Utilizar la política de contraseñas de LDAP
選択した言語に応じてこのテキストを表示するには、JSPファイルに次の行を追加する必要があります:
ユーザーがサイトのスペイン語版を表示することを選択した場合、英語の代わりにスペイン語が表示されます。
LanguageUtilヘルパーの使用
LanguageUtilクラスは、JSPファイル内で使用することで、特定の言語キーの動的な翻訳を提供することも可能です。 このクラスは、例えば、翻訳が必要な動的パラメータが複数ある場合に便利です:
<%= LanguageUtil.format(pageContext, "back-to-x", pageTitle); %>
上記の文は、引数としてページタイトルを含む、あるページに戻るためのラベルを表示します。 また、Objectの配列を渡すことで、複数の引数を追加することが可能です。
HTML構文を含むメッセージは、例えば、Object型の引数の代わりに、LanguageWrapper型の別の引数が必要です:
<%= LanguageUtil.format(pageContext, "back-to-x", new LanguageWrapper("", pageTitle, "")); %>
Javaファイルに複数の言語を表示させる
LiferayのLanguageUtilクラスは、特定の言語キーのプログラム的な翻訳を提供するために使用できます。
よくある質問
最初は「Language.properties」の中にその項目があり、「Language-ext.properties」を編集してその値を上書きすればいいと思っているかもしれません。 しかし、「Language.properties」の値はすべて「Language_en.properties」にも存在し、ロケール固有の定義が優先されるため、何も変わりません。 したがって、「Language_en.properties」は、「Language-ext.properties」で行った変更を上書きすることになります。 これを防ぐには、「Language-ext_en.properties」ファイルを編集する必要があります。
同じファイルを編集して、言語設定、ポートレットタイトル、カテゴリタイトル、アクション名、メッセージなど、言語に依存するテキストを変更することができます。
追加情報
ページの現在の言語IDは、例えばthemeDisplay.getLanguageId()から引き出すことができます: