1. Go to this page and download the library: Download perfectneeds/locale-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
perfectneeds / locale-bundle example snippets
namespace PN\Bundle\CMSBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use VM5\EntityTranslationsBundle\Model\Translatable;
use PN\LocaleBundle\Model\LocaleTrait;
/**
* Blogger
*
* @ORM\HasLifecycleCallbacks
* @ORM\Table(name="blogger")
* @ORM\Entity(repositoryClass="PN\Bundle\CMSBundle\Repository\BloggerRepository")
*/
class Blogger implements Translatable {
use LocaleTrait;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
protected $title;
/**
* @ORM\OneToMany(targetEntity="PN\Bundle\CMSBundle\Entity\Translation\BloggerTranslation", mappedBy="translatable", cascade={"ALL"}, orphanRemoval=true)
*/
protected $translations;
/**
* Now we tell doctrine that before we persist or update we call the updatedTimestamps() function.
*
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function updatedTimestamps() {
$this->setModified(new \DateTime(date('Y-m-d H:i:s')));
if ($this->getCreated() == null) {
$this->setCreated(new \DateTime(date('Y-m-d H:i:s')));
}
}
/**
* Constructor
*/
public function __construct() {
$this->translations = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get id
*
* @return int
*/
public function getId() {
return $this->id;
}
/**
* Set title
*
* @param string $title
*
* @return Blogger
*/
public function setTitle($title) {
$this->title = $title;
return $this;
}
/**
* Get title
*
* @return string
*/
public function getTitle() {
return !$this->currentTranslation ? $this->title : $this->currentTranslation->getTitle();
}
}
namespace PN\Bundle\CMSBundle\Entity\Translation;
use Doctrine\ORM\Mapping as ORM;
use VM5\EntityTranslationsBundle\Model\EditableTranslation;
use PN\LocaleBundle\Model\TranslationEntity;
/**
* @ORM\Entity
* @ORM\Table(name="blogger_translations")
*/
class BloggerTranslation extends TranslationEntity implements EditableTranslation {
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
protected $title;
/**
* @var
* @ORM\Id
* @ORM\ManyToOne(targetEntity="PN\Bundle\CMSBundle\Entity\Blogger", inversedBy="translations")
*/
protected $translatable;
/**
* @var Language
* @ORM\Id
* @ORM\ManyToOne(targetEntity="PN\LocaleBundle\Entity\Language")
*/
protected $language;
/**
* Set title
*
* @param string $title
*
* @return Blogger
*/
public function setTitle($title) {
$this->title = $title;
return $this;
}
/**
* Get title
*
* @return string
*/
public function getTitle() {
return $this->title;
}
}
$blogger = new Blogger();
// Arabic
$arabicTranslation = new BloggerTranslation();
$arabicTranslation->setLanguage($arabicLanguage);
$arabicTranslation->setTitle('Title on arabic');
$blogger->addTranslation($arabicTranslation);
// French
$frenchTranslation = new BloggerTranslation();
$frenchTranslation->setLanguage($frenchLanguage);
$frenchTranslation->setTitle('Title on french');
$blogger->addTranslation($frenchTranslation);
$em->persist($blogger);
$em->flush();
namespace PN\Bundle\CMSBundle\Form\Translation;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class BloggerTranslationType extends AbstractType {
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('title')
;
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'data_class' => \PN\Bundle\CMSBundle\Entity\Translation\BloggerTranslation::class
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix() {
return 'pn_bundle_cmsbundle_blogger';
}
}
namespace PN\Bundle\CMSBundle\Form;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use VM5\EntityTranslationsBundle\Form\Type\TranslationsType;
use PN\Bundle\CMSBundle\Form\Translation\BloggerTranslationType;
use PN\Bundle\CMSBundle\Entity\BloggerTag;
use PN\Bundle\SeoBundle\Form\SeoType;
class BloggerType extends AbstractType {
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('title')
->add('publish')
->add('seo', SeoType::class)
->add('post', PostType::class)
->add('translations', TranslationsType::class, [
'entry_type' => BloggerTranslationType::class,
'entry_language_options' => [
'en' => [
'