ploneサイトをインストールすると、最初から「ホーム」「ナビゲーション」など最初から日本語で表示されると思います。 これは、日本語を受け取れますよ(Accept-Language)と指定したWeb browserに対して、ploneは日本語に対応しているので日本語のページを返してくれているのです。
例えば、Web browserの受け取る言語をスペイン語としたとします。 (これは Firefox での設定画面例です。)
すると、このようにスペイン語で表示されるようになります。
このようにploneは最初から国際化(internatinalisation: 略して i18n と言われます)対応しており、現在対応済みの言語の数は Existing Translations のページによると42言語となっています。
このploneの国際化機能は、ploneをインストールするときに一緒にインストールした 付属するプロダクト のPlacelessTranslationServiceによって実現されています。
先ほど説明した通り、ploneサイトの国際化はPlaselessTranslationService(以下 PTS)というプロダクトによって実現されています。 このPTSは、plone用のプロダクトではなくZope 2で国際化を行なうためのプロダクトです。
具体的に、PTSがどのように動作して国際化を実現しているかというと、このような手順になっています。
ここでは、zopeサーバ起動時にPTSが行なっている国際化の準備処理について説明します。
__init__.py)が実行されます。i18n というディレクトリが存在するかを調べます。i18n ディレクトリが存在したら、その下の *.po というファイルを探します。 この *.po というファイルはPortable Object(.po)ファイルと呼ばれるものです。
.poファイルの中には「翻訳対象のメッセージ」と「翻訳した文字列」が対になって記述してあります。
(つまり、翻訳対象の言語の数だけファイルが存在します。)
*.po ファイルを一つ一つ読み込んで、
GettextMessageCatalog というオブジェクトを生成します。 zopeサーバ起動時に読み込まれた .poファイルの一覧は以下の手順で確認できます。
まず、zopeサーバの管理画面を表示し、Control_Panel/TranslationService を選択します。
すると、以下のように読み込んだ.poファイルの一覧が表示されます。
また、各アイテムをクリックすると、その.poファイル(を読み込んだGettext Message Catalog)の情報が表示されます。内容としては対応する言語、プロダクト、翻訳者の情報などが表示されています。
このように、各種プロダクトの国際化用.poファイルが読み込まれていることが確認できます。
zopeサーバ起動時にPTSが読み込んだ .poファイル(を元に生成したGettext Message Catalog)を使用して、どのようにページ表示時に国際化が行なわれるかについて説明します。
ページテンプレートやDTMLで作成されたページ表示時に、下記のような i18n:domain, i18n:translate, dtml-translate といったタグや属性が存在すると、PTSによって翻訳処理が行なわれます。
ページテンプレートの例:
<html i18n:domain="yourdomain">
:
<div i18n:translate="">some message</div>
<div i18n:translate="some_message">some long message..</div>
:
</html>
DTML:
<dtml-translate domain=yourdomain>some message</dtml-translate>
<dtml-translate domain=yourdomain msgid=some_message>some long message..
</dtml-translate>
上記のソースの domain と msgid の組によって、PTSが.poファイルから翻訳後の文字列(msgstr)を取得して置換処理を行います。
msgid が指定されていない場合は、タグに囲まれている文字列がそのまま msgid として使用されます。(上記の例では some message が msgid となります。)