preg_replace и проблема gettext - PullRequest
       6

preg_replace и проблема gettext

1 голос
/ 21 февраля 2011

В моем проекте есть шаблоны с HTML. Чтобы упростить локализацию, я добавил префикс и суффикс ко всем вещам, которые я хочу перевести для шаблонов HTML. Поскольку я не могу использовать _() внутри HTML, перед заменой шаблона я делаю замену:

preg_replace("%\<t\>([a-zA-Z0-9\.\\s)]*)\</t\>%is",_("$1"),$template);

Я заменил _() на мою tr() функцию перевода, и, видимо, ее ударили, просто я не могу найти перевод, я думаю.

Когда я использую print _('same text');, он отображается правильно.

preg_replace("%\<t\>([a-zA-Z0-9\.\\s)]*)\</t\>%is",_("hello"),$template);

Так что я предполагаю, что есть какая-то проблема с поиском переводов при использовании preg_replace вот так.

Я не ищу альтернатив для хранения данных, я ищу решение этой проблемы, если у вас есть.

Ответы [ 2 ]

2 голосов
/ 21 февраля 2011

Используйте preg_replace_callback или /e (eval - и у него есть причина, по которой он звучит как зло!) Модификатор preg_replace.

1 голос
/ 21 февраля 2011

Вы вызываете функцию gettext до запуска preg_replace, вам нужно разрешить библиотеке PCRE вызывать эту функцию для вас, если вы используете PHP5 +, попробуйте следующее:

preg_replace_callback("%\<t\>([a-zA-Z0-9\.\\s)]*)\</t\>%is",function($matches){
    return $matches[1];
},$template);
...