Poedit正则表达式解析器?

时间:2009-05-28 17:13:28

标签: javascript localization poedit xgettext

在我们的JS文件中,我们使用以下格式进行Gettext转换:

var str1 = '!t[The text that should be translated]';
var str2 = '!t[Some more text]';

这个JS文件将使用PHP进行解析,解析后的字符串将通过Zend Framework Zend_Translate进行翻译。生成的JS看起来像这样:

var str1 = 'The text that should be translated';
var str2 = 'Some more text';

为了提取要翻译的字符串和翻译我们的PHP文件,我们使用Poedit,它的效果非常好 有没有办法使用Poedit解析要从'!t[...]'翻译的字符串?

解决问题的是某种基于正则表达式的Poedit解析器。有没有这样的解析器?

作为替代方案,我们可以使用PHP作为参数定义基于xgettext的源代码解析器(您必须这样做,因为xgettext不知道.js文件并且它们将它们视为C文件)。然后我们在JS文件中使用以下格式:

var str1 = '<?=_t("The text that should be translated")?>';
var str2 = '<?=_t("Some more text")?>';

毋庸置疑,为了能够用Poedit解析字符串,使用看起来像php的代码真的很酷。

2 个答案:

答案 0 :(得分:0)

与您的字符串匹配的正则表达式

 $translated = preg_replace('/[\'"]\!t\[(.+)\][\'"]/e', 'translate_function('\\2')', $str);

我不知道\ 2是否应该被\ 1或\ 3取代,你的解决方案是PCRE正则表达式引擎提供的“e”修饰符。

答案 1 :(得分:0)

Poedit和xgettext现在支持JavaScript(老实说我不知道​​2009年的情况是否如此,但我认为不是这样),但是它们不支持带有自定义标记的字符串文字。所以你仍然无法从中提取

var str1 = '!t[The text that should be translated]';

但您可以使用辅助函数轻松提取:

var str1 = t('The text that should be translated');

如果你只是在Poedit中添加t作为关键字。