2017-02-17 50 views
1

我使用StofDoctrineExtensionsBundle的個人翻譯。 我配置了我的應用程序,但我無法檢索翻譯的標籤,我總是得到默認文本。Doctrine擴展可翻譯不檢索翻譯

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 

然後我寫我個人的實體,這是一個菜單項

<?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

菜單項翻譯

MenuItemTranslation

回答

1

我搞砸與語言環境。 我改變了STOF配置「COS我的網站是全英文的,我需要的意大利語翻譯

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配置」 COS我的網站全是英文和我需要意大利語翻譯

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