gettext メッセージカタログの作成方法

このページを多言語対応してみましょう

次の PHP ファイルをみてください。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
</head>
<body>
<h1><?php echo _("Hello!"); ?></h1>
</body>
</html>

基本的に HTML であり、一箇所だけ h1 タグの内容が Hello! という文字列を PHP のコードとしてプリントしています。

_() を認識しない、未定義の関数呼び出しのエラーが発生する場合は、PHP の gettext エクステンションが有効になっていないので、 当サイトの gettext を利用した多言語対応方法 などを参考にして有効にしてください。

この PHP ファイルに対する po ファイル (gettext メッセージカタログファイル) を作成する方法を説明します。

ここでは Poedit を利用した po ファイルの作成方法を説明します。

ソースから自動的にメッセージカタログを作成する

いろいろな方法があるのかもしれませんが、ここでは私が普段利用している方法を説明します。

Poedit というプログラムがあり、これを利用すると PHP ソースファイルを解析し、メッセージ部分を自動的に抽出してくれます

このため翻訳漏れがチェックしやすいこと加えて、同じ文章、文字列については翻訳を使いまわしてくれるので大変便利です。

具体的な例として、上記のファイルを C:\temp\public_html\index.php として保存している場合を考えましょう。 (私は Windows 7 を利用しています)

  1. Poedit をダウンロードしてインストールします。

    私はこの記事を書いている時点の最新であるバージョン 1.4.2 (poedit-1.4.2-setup.exe) をダウンロードしてインストールしました。 (Windows バージョンの poedit-1.4.2-setup.exe をダウンロードしてインストーラに従って、そのままインストールするだけです)

    Poedit の初回起動時には UI の言語選択を聞かれますが、私は Japanese を選択しています。

    また名前とメールアドレスの入力ボックスも現れますので入れておきます。

    OK をクリックすると、次のように Poedit が起動します。

  2. ファイル メニューから 新規カタログ... を選択します。

  3. プロジェクトの設定 は以下のように入力します。

    情報 タブではプロジェクトの名前やソースのエンコーディング方式や言語設定について記載します。 ここでは UTF-8 のソースファイルで、英語で作成されたページを日本語表示できるようにカタログを作ろうと考えています。

    Poedit にてエンコーディング方式などの情報を登録する

    パス にはソースコードのパスを入力します。ここにおいてあるソースコードとカタログを同期します。

    Poedit でソースコードのパスを指定する

    ちなみに、ベースのパス に環境依存のパスを入力して、パスのアイテムとして環境依存しない部分を入力します。 また、この UI ではグレーアウトしているように見えるボタンが押せたりしますので、注意してください。 左から2番目のボタンをクリックすると新しいアイテムを追加できます。

    キーワード タブでは、翻訳対象の文字を識別するためのキーワードを入力します。

    Poedit にてキーワードを登録する

    ここでは _('Hello!') のような箇所から 'Hello!' を認識し、抽出できるよう _ (アンダースコア) をキーワードとして登録しています。

    入力が終わったら OK をクリックします。

  4. po ファイルを保存します。

    ここでは、次のようなパスに保存します。

    C:\Temp\locale\ja_JP\LC_MESSAGES\test1.po

    po ファイルは Portable Object という名前の通り、それ単体で使えるものなので、この時点ではパスは重要ではありませんが、 後で利用するときのことを考えて、今は上記のパスに保存しています。

    ちなみに C:\Temp\locale はテキストドメインにバインドするパス。その次の ja_JP は 言語コード_国コード という構成。 その下に LC_MESSAGES というディレクトリを作り、その中にテキストドメインと同じ名前のファイルを配置します。

    すると、自動的にメッセージが認識されます。

    Poedit がソース内からメッセージを自動的に認識した

    OK をクリックすると、次のようにカタログにメッセージが登録されます。

    Poedit にてメッセージカタログにメッセージが登録された

  5. メッセージを翻訳します。

    下図のように、メッセージを選択すると原文が下側の二つのテキストボックスのうち上側に表示され、下側に翻訳メッセージを入力できます。

    Poedit でメッセージを翻訳する

    複数のメッセージが存在する場合は、この画面に複数のエントリが表示されますから、コツコツと全て翻訳します。

  6. 翻訳が完了したら カタログを保存 します。

    Poedit でカタログを保存する

    すると、同時に test1.mo ファイルというバイナリファイルも作成されます。 この mo ファイルが実行時に利用されるメッセージカタログです。

    ちなみに、あまり設定変更する必要は無いと思いますが、以下のオプションを変更すると、 mo ファイルが作成されなかったりします。(「ファイル」メニューの「設定」から変更可能)

    Poedit の mo ファイル作成オプション

以上で、gettext メッセージカタログファイルが作成できました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説