6

PHP + CodeIgniter で多言語アプリケーションを構築しています。私は UI テキストの翻訳に gettext を使用することに決めました。これまでのところ、効率的で使いやすいことが証明されています。

しかし、今、私は本当に厄介なことに直面しています:gettext()関数は1つのパラメーターしか受け入れませんが、Zend Framework の gettext アダプターから得られる printf のような動作が必要%1$sです%2$s。 Zend ビューのtranslate()機能への追加パラメータとして。

.po ファイルと poEdit を使用すると簡単に翻訳を管理できるため、gettext を捨てたくはありません (結局のところ、1 回のクリックで更新できます)。私のオプションは何ですか?

私はすでに gettext と対話するヘルパーを作成しようとしました: gettext を介して最初の引数を実行し、結果の文字列に対して strtr を実行します。あなたが推奨する他の/より良いアプローチはありますか?

4

1 に答える 1

7

実際には非常に簡単です。次のように可変引数関数を定義します。

function myGettext($id)
{
    return vsprintf(gettext($id), array_slice(func_get_args(), 1));
}

これを行うmyGettext('%u %s in a %s', 3, 'monkeys', 'tree')と、プレースホルダーが残りの引数に置き換えられた予想される文字列が返されます。ngettext()明らかに、代わりに呼び出す複数形対応関数を実装する必要もあります。

poEdit に関しては、検索するキーワードを変更する必要があります。最後に使用してからしばらく経ちましたが、非常に単純でした。私が直面した唯一の問題は、複数形サポートのキーワードを特定することでした (これを参照)。

それが役に立てば幸い!

于 2011-03-27T01:52:42.080 に答える