パーソナルツール
現在の場所: ホーム plone 日本語 国際化の仕組み
書いた本
Plone 完全活用ガイド の Chapter 1, 2, 3, 11 を執筆しました。
plone のインストール、使い方から、機能・デザインのカスタマイズ、プロダクトの作り方まで、 plone のすべてがぎゅっと詰まっている書籍になっていると思います。
plone に興味がある人から、すでに使いこなしている方まで、ぜひ読んでみてください。
Plone 完全活用ガイドのサポートページ
ナビゲーション

 
文書操作

国際化の仕組み

作成者 takanori 最終変更日時 2005年02月21日 08時58分

ploneサイトや各種プロダクトの国際化が実現されている仕組みについて説明します。

目次

  • ploneサイトの国際化[i18n]
  • PlacelessTranslationServiceの動作[pts]

ploneサイトの国際化[i18n]

ploneサイトをインストールすると、最初から「ホーム」「ナビゲーション」など最初から日本語で表示されると思います。 これは、日本語を受け取れますよ(Accept-Language)と指定したWeb browserに対して、ploneは日本語に対応しているので日本語のページを返してくれているのです。

例えば、Web browserの受け取る言語をスペイン語としたとします。 (これは Firefox での設定画面例です。)

Browser language setup

すると、このようにスペイン語で表示されるようになります。

Espanol plone site

このようにploneは最初から国際化(internatinalisation: 略して i18n と言われます)対応しており、現在対応済みの言語の数は Existing Translations のページによると42言語となっています。

このploneの国際化機能は、ploneをインストールするときに一緒にインストールした 付属するプロダクト のPlacelessTranslationServiceによって実現されています。

PlacelessTranslationServiceの動作[pts]

先ほど説明した通り、ploneサイトの国際化はPlaselessTranslationService(以下 PTS)というプロダクトによって実現されています。 このPTSは、plone用のプロダクトではなくZope 2で国際化を行なうためのプロダクトです。

具体的に、PTSがどのように動作して国際化を実現しているかというと、このような手順になっています。

zopeサーバ起動時[startup]

ここでは、zopeサーバ起動時にPTSが行なっている国際化の準備処理について説明します。

  1. PTSがzopeサーバにロードされ、初期化スクリプト(__init__.py)が実行されます。
  2. PTSは初期化スクリプトの中で、各プロダクトに i18n というディレクトリが存在するかを調べます。
  3. i18n ディレクトリが存在したら、その下の *.po というファイルを探します。

    この *.po というファイルはPortable Object(.po)ファイルと呼ばれるものです。 .poファイルの中には「翻訳対象のメッセージ」と「翻訳した文字列」が対になって記述してあります。 (つまり、翻訳対象の言語の数だけファイルが存在します。)

  4. 存在する *.po ファイルを一つ一つ読み込んで、 GettextMessageCatalog というオブジェクトを生成します。
  5. 2.〜4.を対象となるプロダクトがなくなるまで繰り返し実行します。

zopeサーバ起動時に読み込まれた .poファイルの一覧は以下の手順で確認できます。 まず、zopeサーバの管理画面を表示し、Control_Panel/TranslationService を選択します。

Select translation service

すると、以下のように読み込んだ.poファイルの一覧が表示されます。

List of placeless translation service

また、各アイテムをクリックすると、その.poファイル(を読み込んだGettext Message Catalog)の情報が表示されます。内容としては対応する言語、プロダクト、翻訳者の情報などが表示されています。

View plone-ja.po

このように、各種プロダクトの国際化用.poファイルが読み込まれていることが確認できます。

ページ表示時[view]

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>

上記のソースの domainmsgid の組によって、PTSが.poファイルから翻訳後の文字列(msgstr)を取得して置換処理を行います。 msgid が指定されていない場合は、タグに囲まれている文字列がそのまま msgid として使用されます。(上記の例では some messagemsgid となります。)


Powered by vine linux, python, zope, plone, coreblog