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