JMSTranslationbundle格式“yml”不存在

时间:2017-10-25 13:09:17

标签: php translation symfony-3.4

我之前在不同项目中使用过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格式时,我没有问题,我可以多次提取文件,它将按照预期的方式工作。

我将非常感谢任何帮助,我已经查看了以前项目中的所有配置文件几个小时,我无法确定问题的根源。

1 个答案:

答案 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文件。任何后续提取都会保持格式完好无误。

当然,向供应商包添加行并不是一个真正的解决方案,所以当我找到一个优雅的方法时,我会更多地研究并提交拉取请求。