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

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

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


person rjmunro    schedule 03.07.2012    source источник


Ответы (5)


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

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

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

person bharatesh    schedule 08.11.2012

Это очень дерьмовый патч для применения в 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;
     }
person rjmunro    schedule 03.07.2012

Мое решение состояло в том, чтобы перезаписать классы 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.

person Gedrox    schedule 18.10.2012

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

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

введите здесь описание изображения

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

Работает из коробки, без каких-либо настроек.

person Andrea Sprega    schedule 11.09.2015

Обычно вы должны иметь возможность использовать команду 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
person ohvitorino    schedule 08.07.2016