[英]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.