Недавно закончил модуль локализации для системы, которую пишу. И столкнулся с проблемой, о которой сейчас расскажу.
Так как я рассказываю на этом сайте о Zend Framework, то перевод я осуществлял естественно при помощи Zend_Translate. Компонент Zend_Translate позволяет использовать несколько адаптеров для
перевода. Я же в основном до этого всегда использовал gettext – встроенный в php механизм для перевода текстов. Есть с ним ряд проблем, но в целом мне очень нравится работать с ним. Огромный плюс – это, пожалуй,
возможность автоматического сканирования всего проекта на предмет необходимости перевода. Нажал кнопку и тут же получил список того, что необходимо перевести, т.е. не надо запоминать и вносить в файлик
строчки для перевода, а потом в случае изменения лезть в этот же самый файлик и ручками править. Удобно 😉
Но обычно я использовал перевод в .php файлах, поэтому никаких проблем у меня не возникало. Кстати, я использую gui программу для редактирования, называется она Poedit. Это редактор .po файлов (в них собственно и содержится перевод, плюс дополнительная инфа о том, кто перевел и т.д). Poedit использует консольную утилитку xgettext, которая ищет строчки в файлах для перевода.
Вот тут я и столкнулся с проблемой 😉 В Zend Framework по умолчанию используются шаблоны вида .phtml. И я долго удивлялся, почему при сканировании проекта не могу получить список строк для перевода.
Недолго думая, я залез в Установки – Парсеры, выбрал PHP и добавил .phtml в качестве еще одного расширения. Но тут получил следующую ошибку:
xgettext: warning: file /var/www/demo/application/modules/admin/views/scripts/error/error.phtml' extension
phtml' is unknown
Неизвестное расширение для xgettext, хотя я только что его прописал. Оказалось, что нужно дополнительно сообщить xgettext, что он имеет дело с php файлами при помощи опции
–language=PHP
Вот скриншот того, что получилось. Надеюсь заметка кому-нибудь пригодится и удачного перевода!
P.S. Завтра опубликую новый пост касательно Zend Framework 😉
Спасибо! 😀
Спасибо 🙂
Добрый день! обязательно ли сперва расставить метки во всех местах, где нужен перевод в phtm файлах?
Или можно как то научить его выковырить все слова в po файл и расставить метки автоматом?
Проект уже большой и хочется автоматизировать..
Автоматом вряд ли получится выдрать произвольные слова. Инструмент можно настроить на определенные функции (по дефолту, _). Так что сначала придется обернуть все переводы в функцию.