2008年9月15日月曜日

CakePHP 1.2 で多国語対応(GetText)調査メモ

PHPでは _() または gettext() でgettextできるが、CakePHPではそれをラップして __() でgettextできる。

//PHPの例
echo _('We love PHP');
//CakePHPの例
__('You love CakePHP'); //第2引数でtrueを指定すればechoせずに戻り値を返すこともできる
CakePHPではCakeコンソールからi18nできて便利そう。
CakePHPでのgettextについては、CakePHP 1.2 の多言語対応メモ - miau's blog?が、参考サイトへのリンクも多く、よくまとまっていて参考になる。


あとはひっかかりそうなところについてのメモ。


複数形
英語など単数と複数でメッセージが変わる場合、__n() を使う。
//例
__n('cat', 'cats', $catCount);
echo __n('mouse', 'mice', $mouseCount, true); //第4引数は戻り値を返すかどうか
詳しくは、1.2系の多言語対応メモ(2) - Writing Some Codeを参照。
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 件のコメント:

ブログ アーカイブ

tags