2013-11-14 4 views
1

В ПОЕДИТЕ Кажется, что анализатор кода удаляет любые комментарии PHP перед разбором кода.PoEdit не анализирует строку в комментариях PHP

Это означает, что любой перевод, который не найден в комментарии PHP (// или #) или Блок документации (/ * * /), пропускается.

Есть ли какие-либо решения для их включения и их определения?

Вот пример того, что я пытаюсь сделать:

class One{ 
    public static $enum = array(
     '0' => 'No', // _('No') 
     '1' => 'Yes' // _('Yes') 
    ); 
} 

Я хотел бы PoEdit обнаружить «// _ („Нет“)»

Тогда после того, как я мог бы перевести как это "echo _ (One :: $ enum [0]);"

Спасибо за любые дополнительные ответы :)

Карл.

- EDIT - Наконец, после 3 лет, я думаю, что нашел решение довольно простым. Поскольку статическая переменная является открытым, я могу заполнить его youtside класс:

One::$enum = array(
    '0' => _('No'), 
    '1' => _('Yes') 
); 
class One{ 
    public static $enum = array(); 
} 

Что вы думаете об этом решении?

+0

Удалить комментарии. – sectus

ответ

1

The way gettext works, xgettext (это то, что звонит Poedit - больше ничего не происходит в нем) извлекает переводимые строки из исходного кода. Если строка не используется в исходном коде, то она, очевидно, никогда не будет использоваться во время выполнения, и нет смысла ее переводить - перевод не будет использоваться. Комментарии не входят в код, поэтому , конечно,xgettext игнорирует их. Просто не имеет смысла делать иначе.

Gettext имеет gettext_noop() функция, described well in the manual для обработки редкой ситуации, такой как ваша.

Возможно, вы захотите определить некоторую вспомогательную функцию, подобную этой, и использовать ее в качестве дополнительного ключевого слова в Poedit, хотя ответ на вопрос this StackOverflow question объясняет, почему такая вещь не имеет смысла в PHP.

+0

Привет! Спасибо вам за ваш ответ. gettext_noop имеет ту же проблему, вы не можете использовать какие-либо функции во время объявления переменной класса. Есть ли какие-либо параметры xgettext, чтобы заставить его принимать комментарии PHP? –

+0

Нет - на самом деле это не имело бы смысла. Вы должны рассмотреть возможность изменения кода для работы с API gettext PHP. –

2

Довольно старая нить ...
, но я полагаю, что это может помочь, чтобы указать мой способ делать вещи

Прежде всего, главная проблема с вашим предложением является дублирование кода

public static $enum = array(
    '0' => 'No', // _('No') 
    '1' => 'Yes' // _('Yes') 
); 

Этот означает, что вам нужно помнить, что нужно дважды обновить строку, если вы хотите ее изменить ...
Скорее всего, вы в какой-то момент забудете или пропустите один.

Это, как я имею дело с такого рода вещами

class One 
{ 
    const ENUM_NO = 0; 
    const ENUM_YES = 1; 

    public static function getEnum() (
     return [ 
      self::ENUM_NO => _('No'), 
      self::ENUM_YES => _('Yes') 
     ]; 
    ); 
} 

Итак, это означает, что довольно некоторые дополнительные линии ...
Но Gettext работает из коробки и строки только для редактирования в одном месте

Согласованный, лучше всего было бы для PHP, чтобы позволить

class One 
{ 
    public static $enum = array(
     '0' => _('No'), 
     '1' => _('Yes') 
    ); 
}