http://jmsyst.com/bundles/JMSTranslationBundleバージョン1.3.1を使用しました。
サービスの作成はjms_translation.file_visitor
をタグ付け:その後、
mybundle.translator.entity.extractor:
class: MyBundle\Translator\EntityExtractor
tags:
- { name: jms_translation.file_visitor }
と抽出ファイルを作成:
<?php
namespace MyBundle\Translator;
use JMS\TranslationBundle\Model\FileSource;
use JMS\TranslationBundle\Model\Message;
use JMS\TranslationBundle\Model\MessageCatalogue;
use JMS\TranslationBundle\Translation\Extractor\FileVisitorInterface;
use PhpParser\Node;
use PhpParser\NodeTraverser;
use PhpParser\NodeVisitor;
class EntityExtractor implements FileVisitorInterface, NodeVisitor
{
private $traverser;
private $catalogue;
private $file;
public function __construct()
{
$this->traverser = new NodeTraverser();
$this->traverser->addVisitor($this);
}
public function enterNode(Node $node)
{
if (!$node instanceof Node\Scalar\String_) {
return;
}
$id = $node->value;
if (preg_match('/.*\./', $id)) {
$domain = 'messages';
$message = new Message($id, $domain);
$message->addSource(new FileSource((string) $this->file, $node->getLine()));
$this->catalogue->add($message);
}
}
public function visitPhpFile(\SplFileInfo $file, MessageCatalogue $catalogue, array $ast)
{
$this->file = $file;
$this->catalogue = $catalogue;
if ($this->file->getPathInfo()->getFilename() == 'Entity') {
$this->traverser->traverse($ast);
}
}
public function beforeTraverse(array $nodes) { }
public function leaveNode(Node $node) { }
public function afterTraverse(array $nodes) { }
public function visitFile(\SplFileInfo $file, MessageCatalogue $catalogue) { }
public function visitTwigFile(\SplFileInfo $file, MessageCatalogue $catalogue, \Twig_Node $ast) { }
}
そして、実体ファイルで、私はそのような要素を抽出することができます。
<?php
namespace MyBundle\Entity;
class MyEntity {
public static function getStatus()
{
return [
'a-hadir-tepat' => 'status.kehadiran.hadir.tepat',
'b-hadir-telat' => 'status.kehadiran.hadir.telat',
'c-alpa' => 'status.kehadiran.alpa',
'd-izin' => 'status.kehadiran.izin',
'e-sakit' => 'status.kehadiran.sakit',
];
}
}
をそれはあなたにアイデアを与えるはずです!
ありがとうございます。私はこれを研究します。 – whitebear