技術情報提供ブログ
ローカライズ技術の解説
シックス・アパートの柳下(やぎした)です。暑い日々が続きますが、がんばっていきましょう。第3回目の今回は、Movable Type 3.3で正式にサポートされたプラグインのローカライズ技術(多言語対応)についてご紹介します。今回の技術を利用することで、他の言語環境でも利用できるプラグインを開発できるだけでなく、UTF-8やEUC-JPといった文字エンコーディングを意識しないプラグインを開発できます。
ローカライズ技術: 言語別に表示を変更する仕組み
Movable Typeの管理画面では、次の言語をサポートしています。
- 日本語
- 英語
- フランス語
- ドイツ語
- スペイン語
- オランダ語
Movable Typeの管理画面にログインし、自身のプロフィールの中で「使用言語」を日本語以外の言語に変更して保存してみましょう。ユーザー・インターフェイスが、変更した言語で表示されます。

Movable Typeの管理画面は、表示する内容を定義した「テンプレート・ファイル」をテンプレート・エンジンが解析、処理して表示されます。テンプレート・エンジンは、テンプレート・ファイルに記述してある文字列を、現在の言語情報(ログインしている投稿者のプロフィールで指定した言語もしくは環境変数DefaultLanguageの値)をもとに、辞書ファイルから翻訳結果を抽出して表示しています。
管理画面の表示用のテンプレート・ファイルは、Movable Typeをインストールしたディレクトリ内のtmpl/cmsディレクトリにあります。これらテンプレート・ファイルの中で、再構築時に発生したエラー・メッセージの表示に利用するerror.tmplファイルをみてみましょう。error.tmplファイル内に、次の行をみつけることができます。

これは、エラー・メッセージを表示しているウィンドウを閉じるためのボタンを記述したものです。valueの箇所(赤字の箇所)に注目してください。この<MT_TRANS phrase="Close">が、言語情報を適用して文字列を表示するための宣言になります。テンプレート・エンジンは、phrase"..."で指定した内容についてじフレーズについて言語情報が日本語の場合閉じると表示するように処理し、英語の場合はそのままCloseと表示します。
各言語に対応した辞書ファイルは、アプリケーション・ディレクトリ(Movable Typeをインストールしたディレクトリ)内のlib/MT/L10N/ディレクトリにあります。辞書ファイルのファイル名は、"言語名.pm"になっています。
| 言語 | 辞書ファイル名 |
|---|---|
| 日本語 | ja.pm |
| 英語 | en_us.pm |
| フランス語 | fr.pm |
| ドイツ語 | de.pm |
| スペイン語 | es.pm |
| オランダ語 | nl.pm |
辞書の定義は、=> の左側に対象の文字列(フレーズ)を、右側に変換結果を定義するというシンプルなフォーマットです。たとえば、前述のフレーズCloseについて、閉じると表示するには、日本語を表示する辞書ファイルja.pm内に、次のように定義します。
'Close' => '閉じる',
また、機能の解説のように、変換対象の文字列が単文でない場合、_から始まるキーワードを利用することもできます。
辞書ファイルの参照は、次の順序でおこないます。
- 指定した言語情報の辞書ファイルを最初に参照します。たとえば、日本語の場合、ja.pmの内容を最初に参照します。
- 最初の参照で変換結果がみつからない場合、英語の辞書ファイルen_us.pmの内容を参照します。
- 英語の辞書ファイルにもみつからない場合は、変換する対象が文字列ならば文字列を、キーワード(_から始まる文字列)の場合はエラーを表示します。
この辞書機能を、テンプレート・ファイルだけではなく、スクリプト内で利用するための関数(メソッド)として、translate関数が用意されています。この関数を利用することで、エラーメッセージやログなどのスクリプトの処理結果を言語にあわせて出力できます。translate関数を使った例は、前回の解説を参照してください。
言語別に処理する仕組みをプラグインにも適用する
プラグインについても同様に、<MT_TRANS phrase="...">やtranslate関数を利用することで、言語にあわせた出力ができます。また、Movable Type 3.3やMovable Type Enterprise 1.02以降のバージョンでは、辞書ファイルをプラグイン毎に定義できるため、Movable Typeの辞書ファイルを直接編集しなくても結構です。
では、前回のWelcomeプラグインについて、言語にあわせて出力するように変更してみましょう。
変更箇所: プラグインの登録
変更した内容は、次の図のとおりです。なお、ソースをダウンロードできますので、是非ともご利用ください。

- 言語別に表示したい箇所に、<MT_TRANS phrase="...">を適用します(上の図の赤字部分)。
- プラグインの登録の際に、l10n_classを設定します(上の図の青字部分)。これは、プラグインで独自の辞書ファイルを利用するための宣言で、該当のプラグインのlibディレクトリ内のパッケージを設定します。
辞書ファイルを利用するためのパッケージの作成
独自の辞書ファイルを利用するためのクラスライブラリ(パッケージ)を次のように作成し、ファイル名をL10N.pmとして保存します。L10N.pmファイルの内容は、パッケージの宣言を除き、プラグインで共通のものです。この例では、lib/MyPlugin03/L10N.pmとなります。

辞書ファイルの作成
辞書ファイルを言語別に作成します。辞書ファイルは、l10n_classで設定した場所のL10Nディレクトリ内に保存します。この例では、lib/MyPlugin03/L10Nディレクトリ内に保存します。
日本語辞書ファイル: ja.pm
英語辞書ファイル: en_us.pm
実際にプラグインをインストールし、確認してみましょう。次の図のように、プラグインの登録情報が日本語で表示されます。

まとめ
今回は、前回のWelcomeプラグインの日本語化を中心に、以下の内容をご紹介しました。
- Movable Typeのローカライゼーションの原理
- プラグインに対応した辞書ファイルの作成方法
- プラグインで辞書ファイルを利用する方法
サンプルプラグインのダウンロード(MyPlugin03.zip)
次回は、テキスト情報に様々な操作を行うことができるフィルター・プラグインの開発について解説します。
プラグイン開発ステップ・バイ・ステップ インデックス
- 第1回 プラグイン開発のためのファーストステップ (2006.07.25公開)
- 第2回 テンプレート・タグ(変数タグ) プラグインの開発 (2006.08.04公開)
- 第3回 ローカライズ技術の解説 (2006.08.18公開)
- 第4回 フィルター プラグインの開発 (2006.09.01公開)
- 第5回 テンプレート・タグ(コンテナ・タグ) プラグインの開発 (2006.10.05公開)
- 第6回 テンプレート・タグ(条件タグ) プラグインの開発 (2006.10.05公開)
- 第7回 Transformerプラグインの開発 (2006.10.12公開)
- 投稿者 yagishita
- カテゴリー Plugin
トラックバック
トラックバック URL

