简体   繁体   中英

Poedit regex based parser?

In our JS files we use the following format for Gettext translation:

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

This JS files will be parsed using PHP and the parsed strings get translated via Zend Framework Zend_Translate. The generated JS looks like this:

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

For extracting the strings to be translated and for translating our PHP files we use Poedit, it works very well.
Is there a way to parse the strings to be translated out of '!t[...]' using Poedit?

What would solve the problem is some sort of a Poedit parser that is regex based. Is there any such parser?

As an alternative, we could define a source code parser based on xgettext with the language PHP as parameter(you have to do it because xgettext doesn't know about .js files and it treats them a C files). Then we use the following format in our JS files:

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

Needless to say, it's really uncool to use code that looks like php all over the place just to be able to parse the strings with Poedit.

Poedit and xgettext do support JavaScript now (I honestly don't know if it was the case in 2009, but I think it wasn't), but they don't support string literals with custom markup in them. So you still can't extract from

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

but you can easily extract using a helper function:

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

if you just add t as a keyword in Poedit.

A regexp that matches your strings

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

I don't know if the \\2 should be replaced by \\1 or \\3, you solution is the "e" modifier provided by the PCRE regex engine.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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