2009-06-05 11 views
0

私たちは多言語(PHP)アプリケーションを持っており、i18nにはgettextを使用しています。バックエンド/モデルにはprintf()のメッセージやメッセージ形式を返すクラスがいくつかあります。メッセージ文字列の翻訳先 - ビューまたはモデル内?

xgettextを使用して、翻訳したい文字列を抽出します。

フロントエンド/ビューでgettext関数T_()を適用します。これは、それが属する場所のようです。これまでのところ、T_()呼び出しからバックエンドをきれいにしました。この方法で、ユニットテストメッセージを作成することもできます。

我々はいくつかのダミーTを入れない限り、フロントエンドで我々は

echo T_($mymodel->getMessage()); 

または

printf(T_($mymodel->getMessageFormat()), $mymodel->getValue()); 

のようなものを持っている。これは、それが不可能な文字列を抽出するためにxgettextを適用することができます_( "私のメッセージ% MyModelクラス内の "s to translate")コールを呼び出します。

これは、より一般的な質問につながる:

あなたはバックエンドクラス、RESPで翻訳を適用してください。あなたはどこで翻訳を適用しますか?翻訳する文字列をどのように把握していますか?

は(私はQuestion: poedit workaround for dynamic gettextの認識しています。)

答えて

0

翻訳が示すように表示されるメッセージを格納するために持っているような、明確に定義されたビジネス上の理由を除き、完全に私のためのビューの問題です。後者は、例えば、送付された請求書をクライアントに送付して保管したい場合に起こります。

1

私のバックエンドクラスは、通常、パラメータを省略して英語の文字列を出力します。例

["Good job %s you have %i points", "Paul", 10] 

翻訳の鍵は英語の文字列です(メッセージコードは実際には好きではないため)。

+0

これは私たちのやり方とほぼ同じです。あなたはどのように文字列を追跡していますか?翻訳する "%iポイントを持っているよ" – GrGr

+0

多くの場合、テキストを囲んでテキストと表示されるので、簡単にグロッピングしてから、翻訳APIレベルでにグローバル置換します。 –

関連する問題