1

我正在使用PHPZend Framework和 Zend_Translate(gettext 适配器)。为了编辑翻译,我使用POEdit,它利用xgettext来获取要翻译的字符串。

POEdit (xgettext) 将搜索关键字以查找要翻译的字符串。因此,如果搜索关键字,当文本直接传递给翻译函数时translate,POEdit 将没有问题找到字符串,如:'Text to translate'

echo translate('Text to translate');

但是,在其他情况下,字符串将被传递给 Zend 函数,这些函数将为我进行翻译,调用带有变量作为参数的 translate 函数:

function SomeZendFunction( $array ) {
    return translate( $array['string'] );
}

...

echo SomeZendFunction( array('string'=>'Another text to translate') );
// translate('Another text to translate');

这将导致 POEdit (xgettext) 无法找到要翻译的字符串。在上面的示例中,我希望 POEdit 查找的字符串是'Another text to translate',但由于它没有直接传递给translate函数,因此找不到。

那么,如何解决问题呢?

我当前的解决方案是创建一个虚拟文件,其中包含 POEdit 未找到的所有字符串的长列表:

<?php // Dummy file, only accessed by POEdit when scanning for strings to translate
translate('Text to translate');
translate('Another text to translate');
translate('A third text to translate');
....

但是这个解决方案的缺点是更新字符串时,我都需要更改虚拟文件并找到原始字符串。这将使其更难维护。

我想到的另一个解决方案是在调用后将翻译字符串添加到评论中SomeZendFunction(参见上面的示例),但我无法让 xgettext 接受它,因为它忽略了评论。

那么,任何人都知道如何让 xgettext 接受评论中的字符串?或者任何人有任何其他可能更好的解决方案?

谢谢你的帮助!

编辑:

我不知道为什么我被否决了。但我试图澄清这个问题。

4

3 回答 3

2

如果您要使用虚拟函数并向其传递字符串,为什么不重构 someZendFunction 以接受字符串参数,然后将该函数名称“someZendFunction”添加到 poedit 关键字的列表中?这消除了额外的函数调用并使代码更简洁。或者您可以将“someZendFunction”包装到 t(9 函数中,以便它为您完成脏活!这也可以让您免于额外输入!

例子:

function t($str){
    echo someZendFunction($str);
}

然后在你的代码中的某个地方:

t('Translate this string please!');

希望这可以帮助!

于 2012-04-12T01:27:05.290 回答
0

正如这个词所说,“变量”意味着值会不时变化,因此无法提前知道值会是什么。您要翻译的方式不正确。

于 2011-10-04T07:53:41.917 回答
0

我刚得到它!通过创建一个虚拟函数

function t($string) {
    return $string;
}

echo SomeZendFunction( t('Another text to translate') );

我可以将此t功能添加到 POEdit 中的翻译关键字中。然后我可以将稍后将由 Zend 翻译的所有字符串嵌入到这个 Dummy 函数中。

这样 Zend 将被允许翻译它,并且 POEdit 将把它识别为一个要翻译的字符串。

如果有人有更好的解决方案,请发布。

于 2011-10-04T08:02:04.740 回答