2017-04-10 2 views
1

Ich plane Übersetzung Funktion auf Symfony2 zu integrieren.Entity Übersetzungssystem auf Symfony

Was ich tun möchte, ist Entity-Übersetzung, nicht Menü oder irgendwo.

wie

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. 

Ich möchte 'Book (Englisch)' setzen, 'libro (spanisch)', '本 (libro)' in $ name-Eigenschaft.

und setzen Sie diese drei Wörter in diese Eigenschaft auf Sonata Admin Bundle Panel.

Wie kann ich es integrieren?

Wo soll ich anfangen und welche Bündel ??

Sonate-admin/Übersetzung Bündel

oder

StofDoctrineExtensionsBundle

??

Antwort

1

Ich verwendete http://jmsyst.com/bundles/JMSTranslationBundle Version 1.3.1.

Erstellen eines Dienst getaggt jms_translation.file_visitor:

mybundle.translator.entity.extractor: 
    class: MyBundle\Translator\EntityExtractor 
    tags: 
     - { name: jms_translation.file_visitor } 

Und dann die Extraktor-Datei erstellen:

<?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) { } 
} 

Und in Entity-Dateien kann ich Elemente wie das extrahieren:

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

Das sollte dir die Idee geben!

+2

Vielen Dank für Ihre Meinung. Ich werde darüber nachforschen. – whitebear

Verwandte Themen