Я использовал JMSTranslationBundle раньше в разных проектах без каких-либо проблем.
Однако это мой первый проект Symfony3.4, использующий jms / translation-bundle: dev-master.
Конфигурация выглядит следующим образом:
jms_translation:
configs:
app:
dirs: ["%kernel.root_dir%", "%kernel.root_dir%/../src"]
output_dir: "%kernel.root_dir%/Resources/translations"excluded_names: ["*TestCase.php", "*Test.php"]
excluded_dirs: [cache, data, logs, translations]
output-format: yml
Бег php bin/console translation:extract --config=app en
отлично работает и создает правильные файлы перевода.
Когда я снова запускаю команду, я получаю следующую ошибку:
The format "yml" does not exist.
Чтобы не ошибиться с «.yml ~», не существует ошибки, которую я видел здесь раньше.
У меня нет проблем, когда я использую формат xliff, я могу извлечь файлы несколько раз, и это будет работать так, как должно.
Любая помощь будет принята с благодарностью. Я просматривал все файлы конфигурации из предыдущих проектов в течение нескольких часов, и я не могу точно определить причину проблемы.
Хорошо, я наконец-то нашел это.
Когда я устанавливаю выходной формат ‘yaml’ вместо ‘yml’, не возникает проблем с многократным извлечением переводов. Однако форматирование все испортилось (без группировки).
Это не лучшее решение, когда файлы начинают увеличиваться.
Таким образом, проблема не в извлечении перевода или создании файлов yml. Это происходит, когда мы пытаемся разобрать старые файлы.
Добавив строку
$format = ($format=='yml') ? 'yaml' : $format;
в файле LoaderManager.php из JMSTranslationBundle в строке 84:
protected function getLoader($format)
{
$format = ($format=='yml') ? 'yaml' : $format;
if (!isset($this->loaders[$format])) {
throw new InvalidArgumentException(sprintf('The format "%s" does not exist.', $format));
}
return $this->loaders[$format];
}
Все работает как положено. Файл .yml генерируется и форматируется правильно. Любые последующие извлечения сохраняют форматирование без ошибок.
Конечно, добавление строк в комплект поставщика не является реальным решением, поэтому я буду больше разбираться в нем и отправлю запрос на извлечение, когда найду элегантный способ обойти это.
Других решений пока нет …