2017-02-17 9 views
1

Я использую личный перевод StofDoctrineExtensionsBundle. Я настроил свое приложение, но я не могу получить переведенные метки, я всегда получаю текст по умолчанию.Doctrine Extension Translitable не получает перевод

config.yml

# Doctrine Configuration 
doctrine: 
    orm: 
     auto_generate_proxy_classes: "%kernel.debug%" 
     naming_strategy: doctrine.orm.naming_strategy.underscore 
     auto_mapping: true 
     mappings: 
      menu_tree: 
       type: annotation 
       prefix: Gedmo\Tree\Entity 
       dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Entity" 
       alias: MenuTree 
       is_bundle: false 
      gedmo_translatable: 
       type: annotation 
       prefix: Gedmo\Translatable\Entity 
       dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity" 
       alias: GedmoTranslatable # (optional) it will default to the name set for the mapping 
       is_bundle: false 
      gedmo_translator: 
       type: annotation 
       prefix: Gedmo\Translator\Entity 
       dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translator/Entity" 
       alias: GedmoTranslator # (optional) it will default to the name set for the mapping 
       is_bundle: false 

stof_doctrine_extensions: 
    default_locale: "%locale%" 
    translation_fallback: true 
    orm: 
     default: 
      tree: true 
      translatable: true 
      sluggable: true 

Тогда я написал свою личную Entity, это MenuItem

<?php 

namespace App\Entity\Menu; 

use Doctrine\ORM\Mapping as ORM; 
use Gedmo\Mapping\Annotation as Gedmo; 

/** 
* 
* @ORM\Table(name="mnu_item") 
* @ORM\Entity(repositoryClass="App\Repository\Menu\MenuItem") 
* @Gedmo\Tree(type="nested") 
* @Gedmo\TranslationEntity(class="App\Entity\Menu\MenuItemTranslation") 
*/ 
class MenuItem{ 

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

    /** 
    * 
    * @var string 
    * @Gedmo\Translatable 
    * @ORM\Column(name="label", type="string", length=255, nullable=true) 
    */ 
    private $label; 

    /** 
    * @Gedmo\Locale 
    * Used locale to override Translation listener`s locale 
    * this is not a mapped field of entity metadata, just a simple property 
    * and it is not necessary because globally locale can be set in listener 
    */ 
    private $locale; 

    /** 
    * @ORM\OneToMany(targetEntity="\App\Entity\Menu\MenuItemTranslation", 
    *    mappedBy="object", 
    *    cascade={"persist", "remove"}) 
    */ 
    private $translations; 

    /** 
    * @var \App\Entity\Menu\Menu 
    * 
    * @ORM\ManyToOne(targetEntity="App\Entity\Menu\Menu", inversedBy="menuItems") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="menu_id", referencedColumnName="id", onDelete="CASCADE") 
    * }) 
    */ 
    private $menu; 


    /** 
    * Constructor 
    */ 
    public function __construct() { 
     $this->ruoli = new \Doctrine\Common\Collections\ArrayCollection(); 
     $this->children = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() { 
     return $this->id; 
    } 

    /** 
    * Set label 
    * 
    * @param string $label 
    * 
    * @return MenuItem 
    */ 
    public function setLabel($label) { 
     $this->label = $label; 

     return $this; 
    } 

    /** 
    * Get label 
    * 
    * @return string 
    */ 
    public function getLabel() { 
     return $this->label; 
    } 

    /** 
    * Set menu 
    * 
    * @param \App\Entity\Menu\Menu $menu 
    * 
    * @return MenuItem 
    */ 
    public function setMenu(\App\Entity\Menu\Menu $menu = null) { 
     $this->menu = $menu; 

     return $this; 
    } 

    /** 
    * Get menu 
    * 
    * @return \App\Entity\Menu\Menu 
    */ 
    public function getMenu() { 
     return $this->menu; 
    } 

    /** 
    * 
    * @return type 
    */ 
    public function getTranslations(){ 
     return $this->translations; 
    } 

    /** 
    * 
    * @param \App\Entity\Menu\MenuItemTranslation $t 
    */ 
    public function addTranslation(MenuItemTranslation $t){ 
     if (!$this->translations->contains($t)) { 
      $this->translations[] = $t; 
      $t->setObject($this); 
     } 
    } 

    public function setTranslatableLocale($locale){ 
     $this->locale = $locale; 
    } 
} 

По крайней мере, у меня есть мой Переводчик класса

<?php 
namespace App\Entity\Menu; 

use Doctrine\ORM\Mapping as ORM; 
use Gedmo\Translatable\Entity\MappedSuperclass\AbstractPersonalTranslation; 

/** 
* Description of MenuItemTranslation 
/* 
* @ORM\Entity 
* @ORM\Table(name="mnu_menu_item_translations", 
*  uniqueConstraints={@ORM\UniqueConstraint(name="lookup_unique_idx", columns={ 
*   "locale", "object_id", "field" 
*  })} 
*) 
*/ 
class MenuItemTranslation extends AbstractPersonalTranslation { 

    /** 
    * Convenient constructor 
    * 
    * @param string $locale 
    * @param string $field 
    * @param string $value 
    */ 
    public function __construct($locale, $field, $value) 
    { 
     $this->setLocale($locale); 
     $this->setField($field); 
     $this->setContent($value); 
    } 

    /** 
    * @ORM\ManyToOne(targetEntity="App\Entity\Menu\MenuItem", inversedBy="translations") 
    * @ORM\JoinColumn(name="object_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    protected $object; 

} 

Я перевел мой ярлык, и он работает, но в ветви tempate, используя item.label или item.getLabel(), я всегда получаю меню по умолчанию Ценность предмета (например, Тест InstEd из Prova см изображения)

Пункт меню

MenuItem

Пункт меню Translation

MenuItemTranslation

ответ

1

Я перепутались с локалью. Я изменил STOF конфигурацию «соза моего сайта все на английском языке, и мне нужен итальянский перевод

stof_doctrine_extensions: 
    default_locale: "%locale%" #this is my error, just remove this line 
           # to set it back to en_US (default value). 
           # This indicates the locale of original table, 
           # if it's set to the same 
           # locale of the entire system it won't 
           # retrieve any translation 
    translation_fallback: true 
    orm: 
     default: 
      tree: true 
      translatable: true 
      sluggable: true 

Так правильный является

Тогда я изменил STOF конфигурацию» соза моего сайта все на английском и Мне нужен итальянский перевод

stof_doctrine_extensions: 
    translation_fallback: true 
    orm: 
     default: 
      tree: true 
      translatable: true 
      sluggable: true