Я использую PHP , Zend Framework и Zend_Translate (адаптер gettext).Для редактирования переводов я использую POEdit , который использует xgettext для извлечения строк для перевода.
POEdit (xgettext) будет искать ключевые слова, чтобы найти строки для перевода.Таким образом, если поиск по ключевому слову translate
, у POEdit не будет проблем с поиском строки 'Text to translate'
, когда текст передается функции перевода напрямую, например:
echo translate('Text to translate');
Но в других случаях строки будутпередать функции Zend, которые будут выполнять перевод для меня, вызывая функцию перевода с переменной в качестве параметра:
function SomeZendFunction( $array ) {
return translate( $array['string'] );
}
...
echo SomeZendFunction( array('string'=>'Another text to translate') );
// translate('Another text to translate');
Это приведет к тому, что POEdit (xgettext) не сможет найти строку для перевода.В приведенном выше примере строка, которую я хотел найти в POEdit, - 'Another text to translate'
, но, поскольку она не передается непосредственно в функцию translate
, она не будет найдена.
Итак, как решить проблему?
Мое текущее решение - создать фиктивный файл, содержащий длинный список всех строк, которые не были найдены POEdit:
<?php // Dummy file, only accessed by POEdit when scanning for strings to translate
translate('Text to translate');
translate('Another text to translate');
translate('A third text to translate');
....
Но недостатком этого решения является то, что при обновлениистрока, мне нужно изменить фиктивный файл и найти исходную строку.Это усложнит обслуживание.
Другое решение, о котором я думал, - добавление строки перевода в комментарий после вызова SomeZendFunction
(см. Пример выше), но я не могу заставить xgettext принять его какигнорирует комментарии.
Итак, кто-нибудь знает, как заставить xgettext принимать строки в комментариях?Или у кого-нибудь есть другое решение, которое может быть лучше?
Спасибо за любую помощь!
Редактировать:
Я не знаю по какой причинеЯ был против.Но я попытался уточнить вопрос.