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 文件已正确生成和格式化。任何后续提取都保持格式完整无误。
当然,向供应商包中添加行并不是一个真正的解决方案,所以我会进一步研究它,并在找到解决此问题的优雅方法后提交拉取请求。
我以前在不同的项目中使用过 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 文件已正确生成和格式化。任何后续提取都保持格式完整无误。
当然,向供应商包中添加行并不是一个真正的解决方案,所以我会进一步研究它,并在找到解决此问题的优雅方法后提交拉取请求。