PHPでは _() または gettext() でgettextできるが、CakePHPではそれをラップして __() でgettextできる。
//PHPの例CakePHPではCakeコンソールからi18nできて便利そう。
echo _('We love PHP');
//CakePHPの例
__('You love CakePHP'); //第2引数でtrueを指定すればechoせずに戻り値を返すこともできる
CakePHPでのgettextについては、CakePHP 1.2 の多言語対応メモ - miau's blog?が、参考サイトへのリンクも多く、よくまとまっていて参考になる。
あとはひっかかりそうなところについてのメモ。
複数形
英語など単数と複数でメッセージが変わる場合、__n() を使う。
//例詳しくは、1.2系の多言語対応メモ(2) - Writing Some Codeを参照。
__n('cat', 'cats', $catCount);
echo __n('mouse', 'mice', $mouseCount, true); //第4引数は戻り値を返すかどうか
Rubyよりも使いやすいと思う。
(2008/09/17 追記)
__n()の第3引数は、シンプルな変数でないと機能しないようだ。sprintfとかの関係だろうか?
//NG(追記終わり)
__n('cat', 'cats', $cat['count']);
//OK
$count = $cat['count'];
__n('cat', 'cats', $count);
言語によってメッセージ内のパラメータの順番が違う場合
翻訳メッセージの複数個所に穴埋めで項目名などを入れる場合で、言語によって順番が違う場合の対応方法。
1.2系の多言語対応メモ(3) - Writing Some Codeの後半を参照。
0 件のコメント:
コメントを投稿