yamaokaです。最近、PHPのフレームワークのsymfonyをいじっています。
symfonyでメッセージの国際化を行う場合、 デフォルトではXLIFFの形式を使うようになっています。 その他、gettextやデータベースからメッセージリソースを取得できるようにもなっているのですが、 その方法があまり公開されていません。
今回はgettextを利用してメッセージの国際化を行う方法を紹介します。 gettextに関する基本的な情報については、 Wikipediaの該当項目や ウノウラボの過去記事 などを参考にどうぞ。実際の動作はsymfony 1.0.8で確認しています。
-
apps/<yourapp>/config/settings.ymlに下記を追記
all: .settings: i18n: on # 国際化を有効に standard_helpers: [I18N] # ヘルパーとしてI18Nを追加 charset: UTF-8 # 文字コード設定
-
apps/<yourapp>/config/i18n.ymlを編集
all: default_culture: ja_JP # デフォルト言語を日本語に source: gettext # gettextを使う設定
-
テンプレートファイル内にメッセージを記述しておく
<p><?php echo __('Hello!'); ?></p>
- アプリケーションディレクトリに移動
-
xgettextコマンドを使ってi18n/messages.potを作成
$ xgettext --keyword=__ -l php -o i18n/messages.pot \ `find modules -name \*.php -type f`
-
msginitコマンドを使ってi18n/ja_JP/messages.poを作成
$ msginit -i i18n/messages.pot -o i18n/ja_JP/messages.po -l ja
-
messages.poの文字コード設定の部分をUTF-8に変更、リソースを追記
"Content-Type: text/plain; charset=UTF-8\n"
msgid "Hello!" msgstr "こんにちはこんにちは!"
-
msgfmtコマンドを使ってi18n/ja_JP/messages.moを作成
$ msgfmt -o i18n/ja_JP/messages.mo i18n/ja_JP/messages.po
-
表示させてみる
こんにちはこんにちは!
いかがでしょうか。XML形式でわかりやすいXLIFFもいいのですが、 Pootleなどの周辺ツールも揃っているので、 使い慣れたgettextを使うことができるメリットはまだまだあると思います。
symfonyでgettextを使おうと思っている方の手助けになれば幸いです。