Можно ли в журнале symfony2 пропустить строки перевода, чтобы я знал, что нужно добавить в мои файлы xilff?

У меня есть проект Symfony, в котором я прошел через шаблоны веток и добавил {% trans %}...{% endtrans %} или добавив переводы как {{ title|trans }} где уместно. Я также добавил файл messages.de.xliff, и он отлично работает для тех нескольких переводов, которые я пробовал.

Есть ли способ получить список строк, отсутствующих в моем файле xliff? Довольно сложно отслеживать каждый перевод, когда я его добавляю. Кажется, что это должно регистрировать неудачу, чтобы получить перевод в файле журнала где-то, но я гуглил некоторое время и не могу ничего найти.

5 ответов

Привет Попробуйте следующее Может быть полезно.

https://github.com/schmittjoh/JMSTranslationBundle/blob/master/Resources/doc/index.rst

Очень мощный инструмент и определенно заботится о вашей проблеме.

Это очень дрянное исправление для применения в vendor/symfony это делает то, что мне нужно. Вероятно, не для запуска на рабочем сервере!

diff --git a/src/Symfony/Component/Translation/MessageCatalogue.php b/src/Symfony/Component/Translation/MessageCatalogue.php
index b55676f..98a5cba 100644
--- a/src/Symfony/Component/Translation/MessageCatalogue.php
+++ b/src/Symfony/Component/Translation/MessageCatalogue.php
@@ -128,6 +128,8 @@ class MessageCatalogue implements MessageCatalogueInterface
             return $this->fallbackCatalogue->get($id, $domain);
         }

+        error_log('Translation not found: "' . $id . '"');
+
         return $id;
     }

Обычно вы должны иметь возможность использовать команду Symfony debug:translation с помощью app/console,

Что-то вроде этого:

$ php app/console debug:translation --only-missing <locale> <Bundle Name>

Конкретный пример будет:

$ php app/console debug:translation --only-missing nl AppBundle

Что бы вывести:

 ----------- ---------- ------------------------------------------------------------------------------------------------------- ------------------------------------------
  State       Domain     Id                                                                                                      Message Preview (nl)
 ----------- ---------- ------------------------------------------------------------------------------------------------------- ------------------------------------------
   missing    messages   Create a clean selection                                                                                Create a clean selection
   missing    messages   New Selection                                                                                           New Selection
   missing    messages   login.labels.geoserver_url                                                                              login.labels.geoserver_url

Мое решение было переписать Translator а также MessageCatalogue классы.

Переводчик:

class RegisteringTranslator extends \Symfony\Component\Translation\Translator
{
    protected function loadCatalogue($locale)
    {
        parent::loadCatalogue($locale);

        if ( ! $this->catalogues[$locale] instanceof RegisteringMessageCatalogue) {
            $registeringCatalogue = new RegisteringMessageCatalogue($locale);
            $registeringCatalogue->addCatalogue($this->catalogues[$locale]);
            $this->catalogues[$locale] = $registeringCatalogue;
        }
    }
}

Каталог:

class RegisteringMessageCatalogue extends \Symfony\Component\Translation\MessageCatalogue
{
    public function get($id, $domain = 'messages')
    {
        if ( ! $this->has($id, $domain)) {
            error_log('Translation not found: "' . $id . '"');
        }

        return parent::get($id, $domain);
    }

}

Конечно, вам нужно использовать новый класс Translator.

Также не очень приятно, потому что он использует защищенные методы и свойства Translator учебный класс. Но лучше, чем менять код Symfony напрямую.

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

Начиная с Symfony 2.6, вы найдете очень хорошее дополнение к панели инструментов веб-отладки, которое показывает, сколько переводов вам не хватает.

При нажатии на него, профилировщик отобразит подробный список отсутствующих переводов.

Работает из коробки, без какой-либо конфигурации.

Другие вопросы по тегам