Можно ли в журнале 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, вы найдете очень хорошее дополнение к панели инструментов веб-отладки, которое показывает, сколько переводов вам не хватает.
При нажатии на него, профилировщик отобразит подробный список отсутствующих переводов.
Работает из коробки, без какой-либо конфигурации.