2017-04-10 15 views
1

symfony2に翻訳機能を統合する予定です。symfonyのエンティティ翻訳システム

私がしたいのは、メニューではなく、エンティティの翻訳です。

class MyEntity 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 



    /** 
    * @ORM\Column(type="string") 
    */ 
    private $name; <-- use some lang versions. 

よう

私は、$ nameプロパティに 'ブック(英語)'、 'リブロ(スペイン語)'、 '本(リブロ)' を入れたいと思います。

この3つの単語をソナタ管理バンドルパネルのこのプロパティに入力します。

どうすれば統合できますか?

どこから始めたらいいですか?

ソナタ管理者/翻訳バンドル

または

StofDoctrineExtensionsBundle

答えて

1

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', 
     ]; 
    } 
} 

をそれはあなたにアイデアを与えるはずです!

+2

ありがとうございます。私はこれを研究します。 – whitebear

関連する問題