国際化の手順
ここでは、PTSを使用してプロダクトを国際化する方法について説明します。
国際化対応していないプロダクトを、PTSを使用して国際化するために必要な作業について説明します。
目次
- プロダクトのPTS対応[ptstaiou]
- 翻訳テンプレートファイルを作成[pot]
- 手作業[byhand]
- i18ndudeを使用[i18ndude]
- PTSを使用[usepts]
- 翻訳ファイルを作成[po]
- 翻訳ファイルをインストール[install]
プロダクトのPTS対応[ptstaiou]
自分が作成したプロダクトをPTSに対応させて国際化するためには、ページテンプレートやDTMLで作成したコードを、修正する必要があります。
コードを修正するためには、まずドメイン名 domain を決める必要があります。ドメイン名には一般的にプロダクトの名前をそのまま使うようです。
次に、国際化対応させたい部分を i18n:tranlate 等の記述を行い、対象となる msgid を指定します。
なお、msgid の名前の付け方としては、以下のガイドラインに従って接頭辞をつけることをおすすめします。
(Guidelines for translators より)
- heading_ - ''タグに使用します。
- description_ - 説明用のテキストに使用します。
- legend_ -
<legend>タグに使用します。 - label_ - フィールドのラベルと入力時のラベルに使用します。
つまり
<label>と<a>タグです。 - help_ - 入力フォームに対するヘルプテキストに使用します。
- box_ - portletの中のコンテンツに使用します。
- listingheader_ - テーブルのヘッダです。
- date_ - 日付/時刻関連のデータです。(例 "Yesterday", "Last week")
- text_ - どのカテゴリーにも属さないメッセージ。たいていは
<p>タグで囲まれます。 - batch_ - 置換文字列が入る場合に使用します。(例 "全 Z 文書中 X から Y 番目を表示しています。")
翻訳テンプレートファイルを作成[pot]
プロダクトのPTS対応が終わったら、次に.poファイルを作るための雛形となる
Portable Object Template(.pot)ファイルの作成を行ないます。
.potファイルのフォーマットは .po ファイルと同じですが、
翻訳した文字列(msgstr)が全て空の状態になっています。
PTSの動作上.potファイルは必ずしも作成する必要はありません。 しかし、自分が作成したプロダクトを公開して、他の言語圏の人に.poファイルを作ってもらうためには、.potファイルを作成する方がよりよいと思います。
PTSに付属する資料によると、.potファイルの作成にはいくつかの方法があるようです。
手作業[byhand]
何もない状態からエディタ等を使用して、プロダクト用の .potファイルを作成します。msgid と msgstr を手作業で書き込んでいきます。
i18ndudeを使用[i18ndude]
プロダクトの表示部分がZPT(Zope Page Template)で記述されている場合に、i18ndudeを使用してZPTファイルから .potファイルを作成することが出来ます。 なお、i18ndudeを使用するにはXMLパーサの pyXML が必要になります。
以下は、Fooプロダクト用のテンプレートファイルの一覧を TEMPLATES に設定し、 その後 i18ndude コマンドを使用して .pot ファイルを作成する手順を表しいています。
$ cd /var/lib/zope/Products/Foo $ TEMPLATES = `find . -name '*.?pt'` $ i18ndude rebuild-pot --pot /tmp/foo.pot --create foo $TEMPLATES
- pyXMLのダウンロードURL: http://sourceforge.net/project/showfiles.php?group_id=6473
- i18ndudeのダウンロードURL: http://sourceforge.net/project/showfiles.php?group_id=66950&package_id=106648
- 参考: How To Rebuild Plone POT With i18ndude
PTSを使用[usepts]
上記のどの手段も使えない場合には、PTSによって .pot ファイルを作成することができます。
その作業は以下の手順で行ないます。
- 対象となるプロダクトの
i18nディレクトリに、空の .poファイルを作成します。まず最初に、
english.poという名前の、中身が空の .poファイルをi18nディレクトリに作成します。空といっても、最低限以下の内容を記述しておきます。Domainには対象となるプロダクトのドメイン名を指定します。msgid "" msgstr "" "Language-code: en\n" "Language-name: English\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Domain: MyProduct\n"
また、同じディレクトリに
english.missingという空のファイルを作成しておきます。例えば、以下のようなファイルが作成されます。/var/lib/zope/Products/MyProduct/i18n/english.po /var/lib/zope/Products/MyProduct/i18n/english.missing
- 次に、zopeサーバを再起動し、
english.poファイルを読み込ませます。PTSがenglish.poを読み込む時にエラーメッセージが出力されていないことを確認します。 - zopeサーバが再起動したら、対象となるプロダクトの追加・編集等の操作を行ないます。
すると、PTSはi18nの対象となっている部分を変換しようとして、メッセージが存在しない場合にはその内容を
english.missingに出力します。 (つまり、全画面を表示すれば全ての項目が出力されます。) - 全ての出力が終了したら、
english.poとenglish.missingを結合して、MyProduct.potファイルを作成します。 - 最後に、
english.poとenglish.missingファイルを削除します。
翻訳ファイルを作成[po]
.potファイル(翻訳テンプレートファイル)を元に、翻訳を行なった.poファイルを作成します。
通常は、*.pot というファイル('*' にはプロダクト名が入る)が存在するはずなので、そのファイルを *-ja.po という名前でコピーして編集します。
編集の内容は翻訳した文字列(msgstr)を埋めていくことになります。
編集方法の詳細については プロダクトの日本語化 を参照してください。
翻訳ファイルをインストール[install]
作成した.poファイル(おそらく *-ja.po というファイル名になっていると思います。)を対象となるプロダクトの i18n ディレクトリに配置します。
その後、zopeサーバを再起動し、PTSに.poファイルを読み込ませます。
.poファイルが正しく記述できていれば、PTSによる変換が行なわれ日本語等で表示されるようになります。