JMSTranslationbundle 格式 "yml" 不存在

JMSTranslationbundle The format "yml" does not exist

我以前在不同的项目中使用过 JMSTranslationBundle,没有任何问题。

然而这是我第一个使用 jms/translation-bundle: dev-master.

的 Symfony3.4 项目

配置如下:

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;

在来自 JMSTranslationBundle 的 LoaderManager.php 文件中的第 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 文件已正确生成和格式化。任何后续提取都保持格式完整无误。

当然,向供应商包中添加行并不是一个真正的解决方案,所以我会进一步研究它,并在找到解决此问题的优雅方法后提交拉取请求。