0

多言語 (PHP) アプリケーションがあり、i18n に gettext を使用しています。バックエンド/モデルには、printf() のメッセージまたはメッセージ形式を返すクラスがいくつかあります。

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

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

したがって、フロントエンドには次のようなものがあります

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

また

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

これにより、MyModel クラスにダミーの T_("my message %s to translate") 呼び出しを配置し​​ない限り、xgettext を適用して文字列を抽出することができなくなります。

したがって、これはより一般的な質問につながります。

バックエンド クラスで翻訳を適用しますか。どこに翻訳を適用し、翻訳する必要がある文字列をどのように追跡しますか?

(質問: poedit 動的 gettext の回避策を認識しています。)

4

2 に答える 2

1

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

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

次に、翻訳のキーは英語の文字列です (メッセージ コードがあまり好きではないため)。

于 2009-06-05T09:49:16.517 に答える
0

表示されたメッセージを表示されているように保存する必要があるなど、明確に定義されたビジネス上の理由を除いて、翻訳は私にとって完全にビューの問題です。後者は、たとえば、送信された請求書をクライアントに配信されたものとして保存する場合に発生する可能性があります。

于 2009-06-05T09:47:19.143 に答える