gettext
gettext
PHP における利用
since 2012-02-07
資料
- msgcat とか msgmerge とか http://makunouchi.jp/zope3/8440297694
MacPorts で PHP のアプリを 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 を編集する。
- emacs で開くと poedit モードになる
# 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