« daemonsで簡単デーモン | メイン | auとSoftBankの絵文字一覧YAML »

symfonyでgettext
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

yamaokaです。最近、PHPのフレームワークのsymfonyをいじっています。

symfonyでメッセージの国際化を行う場合、 デフォルトではXLIFFの形式を使うようになっています。 その他、gettextやデータベースからメッセージリソースを取得できるようにもなっているのですが、 その方法があまり公開されていません。

今回はgettextを利用してメッセージの国際化を行う方法を紹介します。 gettextに関する基本的な情報については、 Wikipediaの該当項目ウノウラボの過去記事 などを参考にどうぞ。実際の動作はsymfony 1.0.8で確認しています。

  1. apps/<yourapp>/config/settings.ymlに下記を追記
    all:
      .settings:
        i18n: on                   # 国際化を有効に
        standard_helpers: [I18N]   # ヘルパーとしてI18Nを追加
        charset: UTF-8             # 文字コード設定
    
  2. apps/<yourapp>/config/i18n.ymlを編集
    all:
      default_culture: ja_JP   # デフォルト言語を日本語に
      source: gettext          # gettextを使う設定
    
  3. テンプレートファイル内にメッセージを記述しておく
    <p><?php echo __('Hello!'); ?></p>
  4. アプリケーションディレクトリに移動
  5. xgettextコマンドを使ってi18n/messages.potを作成
    $ xgettext --keyword=__ -l php -o i18n/messages.pot \
       `find modules -name \*.php -type f`
    
  6. msginitコマンドを使ってi18n/ja_JP/messages.poを作成
    $ msginit -i i18n/messages.pot -o i18n/ja_JP/messages.po -l ja
  7. messages.poの文字コード設定の部分をUTF-8に変更、リソースを追記
    "Content-Type: text/plain; charset=UTF-8\n"
    msgid "Hello!"
    msgstr "こんにちはこんにちは!"
    
  8. msgfmtコマンドを使ってi18n/ja_JP/messages.moを作成
    $ msgfmt -o i18n/ja_JP/messages.mo i18n/ja_JP/messages.po
  9. 表示させてみる
    こんにちはこんにちは!

いかがでしょうか。XML形式でわかりやすいXLIFFもいいのですが、 Pootleなどの周辺ツールも揃っているので、 使い慣れたgettextを使うことができるメリットはまだまだあると思います。

symfonyでgettextを使おうと思っている方の手助けになれば幸いです。

トラックバック

このエントリーのトラックバックURL:
http://www.unoh.net/mt32/mt-tb.cgi/997

コメントを投稿


画像の中に見える文字を入力してください。

  [PR] 転職
ウノウラボはウノウ株式会社のエンジニア/デザイナーによる大小のアウトプットを行っていく場です。

現在ウノウは絶賛人材募集中です。詳細は求人ページへ。

About

2007年10月25日 19:40に投稿されたエントリーのページです。

ひとつ前の投稿は「daemonsで簡単デーモン」です。

次の投稿は「auとSoftBankの絵文字一覧YAML」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

ウノウサービス