我之前在不同项目中使用过JMSTranslationBundle没有任何问题。
然而,这是我使用jms / translation-bundle的第一个Symfony3.4项目:dev-master。
配置如下:
ViewPlayerViewController
正在运行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
不要误以为“.yml~”不存在我以前见过的错误。
当我使用xliff格式时,我没有问题,我可以多次提取文件,它将按照预期的方式工作。
我将非常感谢任何帮助,我已经查看了以前项目中的所有配置文件几个小时,我无法确定问题的根源。
答案 0 :(得分:0)
好的,我终于找到了这个。
当我将输出格式设置为'yaml'而不是'yml'时,多次提取转换没有问题。然而,格式化全部搞砸了(没有分组)。 当文件开始变大时,这不是一个很好的解决方案。
所以这个问题不是来自翻译的提取,也不是'yml'文件的创建。它来自于我们尝试解析旧文件时。
添加行
$format = ($format=='yml') ? 'yaml' : $format;
来自第84行的JMSTranslationBundle的LoaderManager.php文件中的:
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文件。任何后续提取都会保持格式完好无误。
当然,向供应商包添加行并不是一个真正的解决方案,所以当我找到一个优雅的方法时,我会更多地研究并提交拉取请求。