PhpStorm 中 JSON 文件的 PHP 函数中的自定义建议

问题描述 投票:0回答:1

我有一个

translate("")
函数,当我开始在引号之间输入内容时,我希望 PhpStorm 开始建议 JSON 文件中的值。

我的想法是,我有一个包含翻译字符串的 JSON 文件,当我开始输入时,它应该根据我已经输入的字符建议已包含在该 json 文件中的翻译。

经过一些研究,我认为这在 PhpStorm 中目前是不可能的,但也许这里有人有一个想法或替代方案。

谢谢!

php json phpstorm autosuggest
1个回答
0
投票

我使用 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 编写的

© www.soinside.com 2019 - 2024. All rights reserved.