我有一个
translate("")
函数,当我开始在引号之间输入内容时,我希望 PhpStorm 开始建议 JSON 文件中的值。
我的想法是,我有一个包含翻译字符串的 JSON 文件,当我开始输入时,它应该根据我已经输入的字符建议已包含在该 json 文件中的翻译。
经过一些研究,我认为这在 PhpStorm 中目前是不可能的,但也许这里有人有一个想法或替代方案。
谢谢!
我使用 PhpStorm 高级元数据使其工作。
我在项目根目录中创建了一个
.phpstorm.meta.php
文件,这将为 0
方法的第一个 (translate
) 参数添加自动完成/建议:
<?php
namespace PHPSTORM_META {
expectedArguments(
\App\Helper\TranslationHelper::translate(),
0,
/* Generated */
"Test",
/* Generated */
);
}
然后编写了一个 Symfony 命令,从我的翻译文件中获取字符串并将它们包含在两个
/* Generated */
注释之间:
$translations = json_decode(file_get_contents($this->parameterBag->get('app.project.path') . '/resources/translations/de.json'), true);
$metadataPath = $this->parameterBag->get('app.project.path') . '/.phpstorm.meta.php';
$identifier = "/* Generated */";
$regexIdentifier = $this->escape($identifier);
$regex = "/$regexIdentifier(.*?)$regexIdentifier/s";
// Build the arguments string that will be written into the metadata file
$translationsAsArguments = "$identifier\n";
foreach ($translations as $translation) {
$translationsAsArguments .= "\t\t\"$translation\",\n";
}
$translationsAsArguments .= "\t\t$identifier";
// Write to disk
$translationsMetadata = preg_replace($regex, $translationsAsArguments, file_get_contents($metadataPath));
file_put_contents($metadataPath, $translationsMetadata);
该解决方案是使用 Symfony 6.3 用 PHP 编写的