2013-12-23 2 views
0

Пожалуйста, помогите мне перевести пользовательскую аннотацию. Я пытаюсь перевести @Render (title = "Страница"). Генератор сообщений не нашел этого, и заголовок не транслат. Я пытаюсь понять, как это делается при проверке компонентов Symfony, но ничего не происходит.symfony2 пользовательский аннотация перевод

<?php 
    namespace Shooos\ProductBundle\Controller\Admin; 

    use Sensio\Bundle\FrameworkExtraBundle\Configuration as PRS; 
    use Shooos\CoreBundle\Controller\BaseController; 
    use Aft\RenderParkingBundle\Annotations as CA; 
    use Gedmo\Mapping\Annotation\Translatable; 

    /** 
    * @PRS\Route("/admin") 
    * Class CategoryController 
    * @package Shooos\ProductBundle\Controller\Admin 
    */ 
    class CategoryController extends BaseController 
    { 
     /** 
     * @CA\Render(title="Categories") 
     * @PRS\Route("/categories", name="admin.categories") 
     */ 
     public function indexAction() 
     { 
     } 
    } 

<?php 
namespace Aft\RenderParkingBundle\Annotations\Driver; 

use Doctrine\Common\Annotations\Reader; 
use Sensio\Bundle\FrameworkExtraBundle\Templating\TemplateGuesser; 
use Symfony\Component\HttpKernel\Event\FilterControllerEvent; 
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; 
use Aft\RenderParkingBundle\Annotations; 
use Symfony\Component\Translation\TranslatorInterface; 

class AnnotationDriver 
{ 
    /** 
    * @var Reader 
    */ 
    private $reader; 

    /** 
    * @var TemplateGuesser 
    */ 
    private $guesser; 

    /** 
    * @var TranslatorInterface 
    */ 
    private $translator; 

    public function __construct(Reader $reader, TemplateGuesser $guesser, TranslatorInterface $translator) 
    { 
     $this->reader = $reader; 
     $this->guesser = $guesser; 
     $this->translator = $translator; 
    } 

    /** 
    * This event occurs when call any controller 
    */ 
    public function onKernelController(FilterControllerEvent $event) 
    { 
     /** Controller exists */ 
     if (!is_array($controller = $event->getController())) { 
      return; 
     } 

     /** 
     * Controller 
     * @var \ReflectionObject $object 
     */ 
     $object = new \ReflectionObject($controller[0]); 
     $method = $object->getMethod($controller[1]); 
     foreach ($this->reader->getMethodAnnotations($method) as $configuration) { 
      if ($configuration instanceof Annotations\Render) { 
       $request = $event->getRequest(); 

       $title = $this->translator->trans($configuration->getTitle()); 

       $request->attributes->set('_page_title', $title); 

       if (null === $configuration->getTemplate()) { 
        $configuration->setTemplate(
         $this->guesser->guessTemplateName(
          $controller, 
          $request 
         )); 
       } 

       $request->attributes->set('_page_template', $configuration->getTemplate()); 
      } 
     } 
    } 
} 
+0

Пожалуйста, разместите код, имеющий отношение к вопросу. Вы можете сделать это, отредактировав свой собственный вопрос и добавив его там, в суть вопроса. Это поможет нам помочь вам. – Touki

+0

Я добавляю код с подсказкой user2041082. –

ответ

1

На аннотации к объекту конвертера, где Вы вводите читатель аннотаций, вводит услугу переводчика и перевести значение в процессе трансформации, из аннотации к объекту.

 $description = $this->translator->trans($transformedAnnotationObject->getDescription()); 
+0

Выполнено - но перевод не генерируется при выполнении команды php app/console translation: extract en --bundle = ProductBundle --output-format = yml –

+0

Это генератор JMSTranslationBundle. Я предполагаю, что переводная строка должна кэшироваться экстрактором. –

Смежные вопросы