2016-08-03 3 views
1

У меня есть многоязычное приложение, построенное в Symfony 3.0.8, и у меня есть все литералы, но в формах он не работает, потому что он использует метод __toString. Это мое лицо:Получить локали в объекте symfony

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use AppBundle\Annotation\UdalaEgiaztatu; 
use JMS\Serializer\Annotation\ExclusionPolicy; 
use JMS\Serializer\Annotation\Expose; 

/** 
* Atala 
* 
* @ORM\Table(name="atala", indexes={@ORM\Index(name="ordenantza_id_idx", columns={"ordenantza_id"})}) 
* @ORM\Entity 
* @ExclusionPolicy("all") 
* @UdalaEgiaztatu(userFieldName="udala_id") 
*/ 
class Atala 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="bigint", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string 
    * @Expose 
    * 
    * @ORM\Column(name="kodea", type="string", length=9, nullable=true) 
    */ 
    private $kodea; 


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

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


    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="created_at", type="datetime", nullable=false) 
    */ 
    private $createdAt; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="updated_at", type="datetime", nullable=false) 
    */ 
    private $updatedAt; 


    public function __construct() 
    { 
     $this->createdAt = new \DateTime(); 
     $this->updatedAt = new \DateTime(); 
    } 

    public function __toString() 
    { 
     return $this->getKodea() . " - " . $this->getIzenburuaeu(); 
    } 


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

    /** 
    * Set kodea 
    * 
    * @param string $kodea 
    * 
    * @return Atala 
    */ 
    public function setKodea($kodea) 
    { 
     $this->kodea = $kodea; 

     return $this; 
    } 

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

    /** 
    * Set izenburuaeu 
    * 
    * @param string $izenburuaeu 
    * 
    * @return Atala 
    */ 
    public function setIzenburuaeu($izenburuaeu) 
    { 
     $this->izenburuaeu = $izenburuaeu; 

     return $this; 
    } 

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

    /** 
    * Set izenburuaes 
    * 
    * @param string $izenburuaes 
    * 
    * @return Atala 
    */ 
    public function setIzenburuaes($izenburuaes) 
    { 
     $this->izenburuaes = $izenburuaes; 

     return $this; 
    } 

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


    /** 
    * Set createdAt 
    * 
    * @param \DateTime $createdAt 
    * 
    * @return Atala 
    */ 
    public function setCreatedAt($createdAt) 
    { 
     $this->createdAt = $createdAt; 

     return $this; 
    } 

    /** 
    * Get createdAt 
    * 
    * @return \DateTime 
    */ 
    public function getCreatedAt() 
    { 
     return $this->createdAt; 
    } 

    /** 
    * Set updatedAt 
    * 
    * @param \DateTime $updatedAt 
    * 
    * @return Atala 
    */ 
    public function setUpdatedAt($updatedAt) 
    { 
     $this->updatedAt = $updatedAt; 

     return $this; 
    } 

    /** 
    * Get updatedAt 
    * 
    * @return \DateTime 
    */ 
    public function getUpdatedAt() 
    { 
     return $this->updatedAt; 
    } 


} 

Что я хочу, это изменить метод toString, чтобы вернуть значение в зависимости от языкового стандарта. Что-то вроде этого было бы замечательно:

public function __toString() 
{ 
    if ($locale == "es") { 
     return $this->getKodea() . " - " . $this->getIzenburuaes(); 
    } else { 
     return $this->getKodea() . " - " . $this->getIzenburuaeu(); 
    }   
} 

Но как я знаю модель в модели?

любая помощь или подсказка?

+0

Вы можете добавить новый атрибут с именем 'private $ locale' в свой объект, сопоставленный с вашей базой данных со значением по умолчанию (например,« es »), установленным в' '__constructor', а затем протестируйте его следующим образом:' if ($ this -> locale == 'es') '... – DOZ

+0

yap, но мне нужно сравнить с текущей локалью –

+0

С этим решением текущая локаль <=>' private $ locale ', вам просто нужно подумать об установке этого атрибута при изменении локали – DOZ

ответ

2

В вашей организации, вы можете сделать:

use Symfony\Component\Intl\Locale; 

И затем

$locale = Locale::getDefault(); 

Используйте волшебный метод, чтобы легко получить хороший перевод

public function getIzenburua() 
{ 
    $locale = Locale::getDefault(); 
    return $this->{'izenburua'.$locale}; 
} 
0

Locale :: getDefault (); неправильно.

Действительно, используемый в настоящий момент язык сохраняется в запросе. Поэтому вам нужно сделать сервис, чтобы сделать это.

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