如何在gettext .po文件中指定有序变量?

时间:2012-12-20 20:27:04

标签: php localization translation gettext printf

我有一个多语言网站,它使用Zend_Translate PHP数组来处理翻译。它工作正常,但我正在尝试转换为使用gettext,因为它提供了额外的功能。

但是,我还没有发现gettext等同于我在PHP数组翻译中喜欢的功能: n $ position specifier example #4 of PHP sprintf)。

我找到了good example我想要的东西(请注意变量的顺序在英文和中文中有何不同):

#: 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文件才能使用?或者我不应该使用php-mo将.po编译成.mo文件吗?

1 个答案:

答案 0 :(得分:1)

在我尝试评论这行php-mo.php之后,我的.po和.mo文件工作了(我的网页看起来不错):

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

我实际上不确定为什么那条线路根本存在,但移除它让我感到紧张,我可能会引入我尚未发现的错误。但至少它解决了我可以看到的问题!