gettext

PHP における利用

since 2012-02-07

資料

MacPortsPHP のアプリを gettext 対応してみる。

まず port install で入れた apache2/php5 に gettext を入れる:

sudo port install php5-gettext
sudo /opt/local/apache2/bin/apachectl restart
sudo port install xgettext

index.php こんな感じ:

<?php
$language ='ja_JP';
putenv("LANG=$language");
setlocale(LC_ALL, $language);
$domain = 'messages';
bindtextdomain($domain, "./locale");
textdomain($domain);
echo gettext("Hello");
$ mkdir -p locale/ja_JP/LC_MESSAGES
$ xgettext -n index.php 
$ mv messages.po locale/ja_JP/LC_MESSAGES/

アプリ版の poedit で messages.po を編集する。

# SOME DESCRIPTIVE TITLE.

(omitted)

"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: index.php:25
msgid "Hello"
msgstr "ほげ"

messages.mo ファイルを作る:

$ cd locale/ja_JP/LC_MESSAGES/
$ msgfmt messages.po

これで echo gettext('') の内容が「ほげ」になっていることが確認できる。

echo _('Hello');

と書くこともできる。

msgfmt しても翻訳が更新されない場合は apache を再起動。面倒だな。。

翻訳が終わった po ファイルと、xgettext しなおしてメッセージが増えてしまった po ファイルをマージするには:

msgmerge locale/ja_JP/LC_MESSAGES/messages.po locale/messages.po > _tmp.po
mv locale/ja_JP/LC_MESSAGES/messages.po locale/ja_JP/LC_MESSAGES/_messages.po
mv _tmp.po locale/ja_JP/LC_MESSAGES/messages.po
  • locale/ja_JP/LC_MESSAGES/messages.po は翻訳済みのファイル
  • locale/messages.po は新しく xgettext して作ったファイル

PHP における代替ライブラリ

PHP 標準 gettext との重複を回避するためにアンダースコア2個の関数を使うことが多いらしい。

Pear Gettext

  • 古い・メンテナンスされていない
  • error_reporting() によっては警告が出る
  • factory("PO", poファイルのパス) すれば直接 po ファイルを読める。
$ sudo pear install channel://pear.php.net/File_Gettext-0.4.1

php-gettext

  • Wordpress が使っているらしい。
  • GPL v2/v3 ライセンス。
gettext.txt · 最終更新: 2012/03/02 19:22 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0