Сканируйте код PHP в поисках Gettext

Мне нужно сгенерировать файлы .po для кода Php моего веб-приложения. Это очень большое приложение, которое необходимо перевести на несколько языков. До сих пор я использовал PoEdit для создания своих файлов .po. Проблема заключается в том, что во многих моих файлах отсутствует нотация Gettext echo _ ("message"), а раньше я использовал только echo "message".

Я думаю, это может быть лучшим решением моей проблемы:

  1. Создайте сценарий, который сканирует мой PHP-код и сообщает мне, какие из моих сообщений отображаются, а какие не отображаются, с помощью Gettext. Как мне это сделать?

  2. Замените эту строку, не использующую Gettext, на соответствующий шаблон Gettext.

Не могли бы вы посоветовать мне, как лучше всего получить весь мой код с помощью Gettext, на который мне следует обратить внимание?


person ivantxo    schedule 20.03.2014    source источник
comment
Вряд ли существует автоматизированный способ сделать это. Если у вас нет очень конкретных ограничений на ваш стиль кодирования, практически невозможно отличить строки, которые нуждаются в переводе, от строк, которые не требуют программного перевода. Наверное, нужен хороший обход ручной i18n.   -  person deceze♦    schedule 20.03.2014
comment
@deceze что такое раунд ручного i18n?   -  person ivantxo    schedule 21.03.2014


Ответы (1)


У вас есть один способ конвертировать эхо-сообщения без перевода с помощью gettext в повторяющиеся сообщения с переводом с помощью gettext:

Если вы знаете, что все сообщения представлены только одной переменной, например $Message, следующий путь будет выполнен относительно быстро, иначе вам придется найти все использованные эхо любых сообщений ... и сделать это вручную (в основном, если сообщение только одно - и оно представлено текстом, а не переменной, содержащей этот текст).

В вашем редакторе, чтобы начать глобальный поиск (во всех файлах), а затем переходить файл за файлом и использовать замену - и установить $Message для поиска и _($Message) для замены ... если ваш редактор не позволяет заменять в нескольких файлах одновременно. Тогда вы бы сделали всю замену за один раз.

Я бы не предлагал делать эту замену прямо в php.

person Václav    schedule 20.03.2014
comment
_($Message) совершенно бесполезен. Инкапсуляция переменных в функции gettext не позволяет извлечь строку. _() можно / следует использовать только со строковыми литералами. - person deceze♦; 20.03.2014