繁体   English   中英

基于Poedit正则表达式的解析器?

[英]Poedit regex based parser?

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

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

将使用PHP解析此JS文件,并通过Zend Framework Zend_Translate转换解析后的字符串。 生成的JS看起来像这样:

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

为了提取要翻译的字符串并翻译我们的PHP文件,我们使用Poedit,它可以很好地工作。
有没有一种方法可以使用Poedit从'!t[...]'解析出要翻译的字符串?

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

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

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

不用说,在各处使用看起来像php的代码只是真的很酷,以便能够使用Poedit解析字符串。

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

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

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

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

如果您只是在Poedit中将t添加为关键字。

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

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

我不知道应将\\ 2替换为\\ 1还是\\ 3,您解决的是PCRE regex引擎提供的“ e”修饰符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM