2

Zend_TranslatePHP配列を使用して翻訳を処理する多言語サイトがあります。正常に動作しますが、追加機能を提供するため、gettextを使用するように変換しようとしています。

ただし、PHP配列の変換で気に入った機能であるn $位置指定子PHP sprintfの例4 )に相当するgettextをまだ発見していません。

私が欲しいものの良い例を見つけました(変数の順序が英語と中国語でどのように異なるかに注意してください):

#: wp-admin/upload.php:96
#, php-format
msgid "File %1$s of type %2$s is not allowed."
msgstr "类型为%2$s的文件%1$s不允许被上传。"

しかし、私はそれが私のために働くようになりませんでした。私のen/messages.poファイルには次のものがあります。

#, php-format
msgid "Earn X cash"
msgstr "%1$sEarn 1-30%% cash back%2$s, get money-saving coupons, and find the best price on every purchase at %3$s2,500+ stores%4$s."

そしてPHPはこれです(これは翻訳の配列スタイルで機能していましたが、変更されることはないと思います):

<?php echo $this->translate('Earn X cash', '<span class="earnCashBack">', '</span>', '<a href="/stores" class="numStores">', '</a>'); ?>

次のように、HTMLが間違って表示されます。

$sEarn 1-30% cash back$s, get money-saving coupons, and find the best price on every purchase at $s2,500+ stores$s.

これを機能させるには、.poファイルをどのように編集する必要がありますか?または、.poを.moファイルにコンパイルするためにphp-moを使用するべきではありませんか?

4

1 に答える 1

1

php-mo.php の次の行をコメントアウトしてみたら、.po ファイルと .mo ファイルが機能しました (そして、私の Web ページは見栄えがよくなりました)。

$x = str_replace('$', '\\$', $x);

なぜその行が存在していたのかは実際にはまったくわかりませんが、削除すると、まだ発見していないバグが発生するのではないかと心配になります。しかし、少なくとも、私見ることができた問題は修正されました!

于 2012-12-20T20:58:28.050 に答える