Парсер на основе регулярных выражений Poedit?

В наших 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, он работает очень хорошо.
Есть ли способ проанализировать строки, которые нужно перевести, из '!t[...]' с помощью Poedit?

Что бы решить проблему, так это своего рода парсер Poedit, основанный на регулярных выражениях. Есть ли такой парсер?

В качестве альтернативы мы могли бы определить парсер исходного кода на основе xgettext с параметром языка PHP в качестве параметра (вы должны это сделать, потому что xgettext не знает о файлах .js и обрабатывает их как файлы C). Затем мы используем следующий формат в наших файлах JS:

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

Излишне говорить, что использовать код, который выглядит как php повсюду, просто для того, чтобы иметь возможность анализировать строки с помощью Poedit, действительно некрасиво.


person Marius Burz    schedule 28.05.2009    source источник


Ответы (2)


Регулярное выражение, соответствующее вашим строкам

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

Я не знаю, следует ли заменять \ 2 на \ 1 или \ 3, ваше решение - модификатор «e», предоставляемый механизмом регулярных выражений PCRE.

person Fabien Ménager    schedule 28.05.2009
comment
Извини, Фабьен, я сомневаюсь, что ты понял, что я ищу. Как сказано в названии, речь идет о синтаксическом анализе строк, которые нужно перевести, с помощью Poedit. Нам это нужно для автоматического извлечения строк для перевода из наших файлов JS. Poedit легко делает это для языков, которые он поддерживает. Он отлично работает с файлами PHP, но не поддерживает JS. Даже если бы это было так, формат, который мы используем, не поддерживался бы из коробки. Что нам действительно нужно, так это какой-то парсер исходного кода на основе Regex для Poedit. PS: Я действительно не понимаю, что решает ваше решение. - person Marius Burz; 29.05.2009
comment
Хорошо, я думал, вы использовали PHP для анализа файлов javascript и перевода токенов с помощью php-gettext. Я думаю, эта страница может помочь вам в том, что вы хотите: tine20.org/wiki /index.php/Developers/Concepts/Translation_Howto - person Fabien Ménager; 29.05.2009

Poedit и xgettext теперь поддерживают JavaScript (честно говоря, я не знаю, было ли это так в 2009 году, но я думаю, что это не так), но они не поддерживают строковые литералы с настраиваемой разметкой в ​​них. Так что вы все еще не можете извлечь из

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

но вы можете легко извлечь с помощью вспомогательной функции:

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

если вы просто добавите t в качестве ключевого слова в Poedit.

person Václav Slavík    schedule 14.02.2016