php で gettext 基本編

gettext とは

国際化するためのもの。具体的にはエラーメッセージやら本文のテキストをワンソースで英語・日本語などに切り替える。切り替えるテキストだけ別に保存して、それを読み込む的な。

gettext で置換するテキストの書き方

例:index.php

 if(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'en')
  $language = 'en';
 else
  $language = 'ja_JP';

 putenv("LANG=$language"); setlocale(LC_ALL, $language);
 $domain = 'messages'; bindtextdomain($domain, './locale');
 textdomain($domain);
 echo _('Hello');

gettext で読み込ませる方法

まず以下で messages.po に gettext するテキストを読み込ませて locale ディレクトリ配下に配置。

 xgettext index.php --from-code=utf-8 -o messages.po
 msgfmt messages.po
 mkdir -p locale/ja/LC_MESSAGES
 mkdir -p locale/en/LC_MESSAGES
 cp messages.po locale/ja/LC_MESSAGES
 cp messages.po locale/en/LC_MESSAGES

locale/ja/LC_MESSAGES を編集

 msgid "Hello"
 msgstr "こんにちは"

gettext が読める形式 (*.mo) に変換

 cd locale/ja/LC_MESSAGES/
 msgfmt messages.po
 cd ../../locale/en/LC_MESSAGES/
 msgfmt messages.po

po ファイルをマージ

新しく項目を増やしたときは以下のようにして既にある項目とマージする。

 msgmerge ja_JP/LC_MESSAGES/messages.po messages.pot -o ja_JP/LC_MESSAGES/messages.po