dzejson91/translationentitybundle

1.0 2018-11-26 23:31 UTC

This package is not auto-updated.

Last update: 2024-10-02 21:01:45 UTC


README

安装

composer install dzejson91/entitytranslationbundle

配置包

在AppKernel中注册已安装的包

$bundles = array(
    [...]
    new TranslationEntityBundle(),
);

配置实体

  • 创建实体(平台ORM)
  • 您的实体必须实现EntityTranslatableInterface接口并使用EntityTranslatableTrait。
  • 在函数getTranslatableClass()中返回将被翻译的类的名称

    [...]
    /**
     * @ORM\Entity()
     * @ORM\Table(name="blog_items")
     */
    class BlogItem implements EntityTranslatableInterface
    {
      use EntityTranslatableTrait;
    
      /**
       * @ORM\Column(type="integer")
       * @ORM\Id()
       * @ORM\GeneratedValue(strategy="AUTO")
       */
      protected $id;
    
      /**
       * @ORM\Column()
       */
      protected $title;
    
      /**
       * @ORM\Column(type=text)
       */
      protected $description;
    [...]
      public static function getTranslatableClass(){
          return BlogItemTrans::class;
      }
    [...]
    
  • 为实体创建翻译类
  • 翻译类必须继承AbstractEntityTranslation
  • 定义您想翻译的属性(属性必须在主实体类中存在)

    [...]
    /**
     * @ORM\Entity()
     * @ORM\Table(name="blog_items_trans")
     */
    class BlogItemsTrans extends AbstractEntityTranslation
    {
      protected $title;
      protected $description;
    }
    
  • 更新doctrine模式

    php bin/console doctrine:schema:update --dump-sql --force
    

配置区域设置

/** @var TranslatableSubscriber $ts */ 
$ts = $container->get('entity_translation_subscriber');
$ts->setDefaultLocale('en_US');
$ts->setCurrentocale('pl_PL');

查询

实体仓库函数

/** @var QueryBuilder $qb */
$qb = $this->createQueryBuilder('b')
    ->where('b.slug = :slug')
    ->setParameter('slug', 'new-post')
;

/** @var Query $query */
$query = $qb->getQuery();
$query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, TranslationWalker::class);
$query->setHint(TranslatableSubscriber::HINT_FALLBACK, true); // optional
$query->setHint(TranslatableSubscriber::HINT_LOCALE, 'pl_PL');// optional

$results = $query->getResult();
return $results;

插入 & 更新

插入和更新会自动执行。