Я создал класс Language, который автоматически переводит строку при передаче через функцию. Сейчас я работаю над инструментом, который позволит мне извлечь все эти фрагменты текста и сохранить их в файле, готовом для индивидуального перевода, хотя у меня возникают некоторые проблемы при сопоставлении только текста между кавычками с регулярным выражением.
Пример HTML:
<h1><?=$Lang->t("Example text")?></h1>
<h1><?=$Lang->t("Example (text)")?></h1>
<h1><?=$Lang->t("Example %s", 'text')?></h1>
Пример выходов:
Example text
Example (text)
Example %2
Параметр, переданный в третьем примере, должен быть исключен, как показано в выходных данных последнего примера.
Примечание: это должно игнорировать все остальное, что может быть на любой странице, javascript, jQuery, Php и т. Д. И т. Д.
Кто-нибудь может пролить свет на это, пожалуйста? 🙂
Почему бы не использовать то, что уже сделано для вас? GetText
Быстрое и грязное решение было бы выражением как это:
$re = <<<'re'
/
\$Lang->t\(
(
" ( (?: \\. | [^"] )* ) "|
' ( (?: \\. | [^'] )* ) '
)
/x
re;
В основном, матч $Lang->t(
сопровождаемый одинарной или двойной строкой в кавычках относительно экранирования. Использование следующим образом:
$code = <<<'eof'
<h1><?=$Lang->t("Example text")?></h1>
<h1><?=$Lang->t("Example (text)")?></h1>
<h1><?=$Lang->t("Example %s", 'text')?></h1>
<h1><?=$Lang->t("Example\"foo\"", 'text')?></h1>
<h1><?=$Lang->t('Example\'foo\'', 'text')?></h1>
eof;
preg_match_all($re, $code, $m, PREG_SET_ORDER);
print_r(array_map('end', $m));
Это не является пуленепробиваемым, поскольку регулярные выражения не могут полностью проанализировать язык программирования, но в большинстве случаев будут работать нормально.