簡體   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