| 14件目(121件中) |

CakePHPの国際化で使用するpoファイルを更新する

固定リンク:#0000000117   投稿者:ZiSTA 日時:2010-08-21 15:18:14   コメント( 0

今回のミッション

poファイル(翻訳ファイル)の更新の作業手順を簡略化せよ

背景

アプリケーションを更新した際には、都度次のようにpoファイルを作成する必要があります。

  • cakeのコンソールを使ってi18nコマンドを実行して対話的にpotファイルを生成
  • 出来たpotファイルをlocale/jpn/LC_MESSAGES/にコピーして拡張子をpoに変更
  • poファイルを翻訳する
  • 更新時には再度potファイルを生成し、既存のpoファイルとマージする


i18nコマンドが対話的なので、コマンドのオプションを使うなど手作業な部分を減らして簡単に行なう方法を探しました。

実装

シェルスクリプト(po_update.sh)を作成して対応しました。アプリケーションで文言の追加や変更があったらpo_update.shを実行すれば、翻訳ファイル(poファイル)が最新の状態になり、すぐにpoファイルの翻訳に取りかかれます。

cakeコンソールのi18nコマンドでpotファイルを生成

cakeのコンソールのi18nコマンドの実行時にオプションで必要なパスを渡しておけば対話的な部分がほとんど省略出来ます。すべてのメッセージを1ファイル化するために-merge yesを加えています。最後に上書きするかどうかだけ答えてあげる必要があります。これでlocaleディレクトリにdefault.potが生成されます。

msgmergeで既存poファイルをマージ

i18nコマンドで生成されたdefault.potファイルと既存の翻訳ファイル(例えば/locale/jpn/default.po )をマージします。マージにはmsgmergeコマンド(getText付属)が利用できます。今回の例では日本語ファイルだけマージしています。


po_update.sh

AppPath="/path/to/cake/app"
/path/to/cake/console/cake i18n extract  -paths $AppPath  -output $AppPath/locale/ -merge yes
msgmerge -U  $AppPath/locale/jpn/LC_MESSAGES/default.po $AppPath/locale/default.pot
echo "msgmerge Done."


なお、エラー処理、ファイルのバックアップ等は行なっていません。

参考

地域化と国際化

 

コメント

| 14件目(121件中) |
↑ ページトップ