Переведите переменные с помощью POEdit / xgettext - PullRequest
1 голос
/ 04 октября 2011

Я использую 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 принимать строки в комментариях?Или у кого-нибудь есть другое решение, которое может быть лучше?

Спасибо за любую помощь!

Редактировать:

Я не знаю по какой причинеЯ был против.Но я попытался уточнить вопрос.

Ответы [ 3 ]

2 голосов
/ 12 апреля 2012

Если вы собираетесь использовать фиктивную функцию и передавать ей строки, почему бы не выполнить рефакторинг функции someZendFunction для приема строкового параметра, а затем добавить имя этой функции "someZendFunction" в список ключевых слов poedit? Это устраняет дополнительные вызовы функций и делает код немного чище. Или вы можете заключить эту «someZendFunction» в функцию t (9, чтобы она выполняла за вас грязную работу! Это также избавит вас от лишней печати!

Пример:

function t($str){
    echo someZendFunction($str);
}

и затем где-нибудь в вашем коде:

t('Translate this string please!');

Надеюсь, это поможет!

0 голосов
/ 04 октября 2011

Я только что понял! Создав фиктивную функцию

function t($string) {
    return $string;
}

echo SomeZendFunction( t('Another text to translate') );

Я могу добавить эту функцию t к ключевым словам перевода в POEdit. Затем я могу встроить все строки, которые позже будут переведены Zend в эту функцию Dummy.

Таким образом Zend будет разрешено перевести его, а POEdit распознает его как строку для перевода.

Если у кого-то есть лучшее решение, пожалуйста, опубликуйте его.

0 голосов
/ 04 октября 2011

Как говорится в слове, «Переменная» означает, что значение меняется время от времени, поэтому нет никакой возможности заранее узнать, что будет значением.То, как вы переводите, неверно.

...