braune-digital / translation-base-bundle
TranslationBase 插件
1.1.2
2016-09-23 13:22 UTC
Requires
- a2lix/translation-form-bundle: 2.0.4
- egeloen/ckeditor-bundle: 2.5.2
- knplabs/doctrine-behaviors: 1.3.2
README
此 Symfony2-Bundle 提供了翻译的基本功能,并提供 SonataAdmin 集成。
要求
为了安装此插件,您需要
- KNPDoctrineBehaviors(基本可翻译功能)
- DoctrineORM(实体持久化)
如果您想使用 SonataAdmin 集成,还需要更多
- SonataAdmin(后端管理)
- A2LixTranslationFormBundle(翻译表单渲染)
- 可能需要从
IvoryCKEditorBundle
的 ckeditor 字段
安装
只需运行 composer
composer require braune-digital/translation-base-bundle
并在 AppKernel.php 中启用 Bundle
public function registerBundles() { $bundles = array( ... new BrauneDigital\TranslationBaseBundle\BrauneDigitalTranslationBaseBundle(), ... );
配置
您可能希望使用替代的 Admin-Layout,其中您有一个下拉菜单而不是翻译标签
只需配置 SonataAdmin 和 A2lix 以在您的 config.yml
中使用扩展布局。
sonata_admin: templates: layout: "BrauneDigitalTranslationBaseBundle:admin/translation_layout.html.twig" a2lix_translation_form: templating: "BrauneDigitalTranslationBaseBundle:admin/a2lix_form.html.twig"
用法
实体(YourEntity)的可翻译属性将移动到新的 YourEntityTranslation 实体
实体:
<?php namespace YourBundle\Entity; use Knp\DoctrineBehaviors\Model as ORMBehaviors; /** * Entity */ class Entity { use ORMBehaviors\Translatable\Translatable; use \BrauneDigital\TranslationBaseBundle\Model\Translatable\TranslatableMethods { \BrauneDigital\TranslationBaseBundle\Model\Translatable\TranslatableMethods::proxyCurrentLocaleTranslation insteadof ORMBehaviors\Translatable\Translatable; } /** * @var int */ private $id; /** * @param $method * @param $arguments * @return mixed */ public function __call($method, $arguments) { return $this->proxyCurrentLocaleTranslation($method, $arguments); } /** * Get id * * @return int */ public function getId() { return $this->id; } /** * @return mixed */ public function getTitle() { $title = $this->translate()->getTitle(); if ($title) { return $title; } else { return $this->translate($this->getDefaultLocale())->getTitle(); } } /** * __toString * * @return string */ public function __toString() { return $this->getTitle(); } }
使用魔法 __call()
方法将调用委托给翻译属性。对于某些插件(如 SonataAdmin),您仍然需要定义所需的方法(例如 getTitle
)。在大多数情况下,对于 SonataAdmin,__toString
方法也适用于关系。
实体翻译:
<?php namespace YourBundle\Entity; use Knp\DoctrineBehaviors\Model as ORMBehaviors; /** * EntityTranslation */ class EntityTranslation { use ORMBehaviors\Translatable\Translation; /** * @var string */ protected $title; /** * @return string */ public function getTitle() { return $this->title; } /** * @param string $title */ public function setTitle($title) { $this->title = $title; } }
您仍然需要在 Doctrine 中注册这两个实体,但您无需担心翻译关系,因为它们将由 DoctrineBehaviors 动态添加,因此您只需定义正常字段和关系即可。
SonataAdmin 集成
此插件提供了一个基本的 TranslationAdmin,您可能希望从中扩展
<?php namespace YourBundle\Admin; use BrauneDigital\TranslationBaseBundle\Admin\TranslationAdmin; use Sonata\AdminBundle\Datagrid\ListMapper; use Sonata\AdminBundle\Datagrid\DatagridMapper; use Sonata\AdminBundle\Form\FormMapper; class EntityAdmin extends TranslationAdmin { // Fields to be shown on create/edit forms protected function configureFormFields(FormMapper $formMapper) { $this->setCurrentLocale(); $this->buildTranslations($this->subject); $formMapper ->with('Localization') ->add('translations', 'a2lix_translations', array( 'locales' => $this->currentLocale, 'required_locales' => $this->currentLocale, 'fields' => array( 'title' => array( 'field_type' => 'text', 'label' => 'Title', 'empty_data' => '' ) ) ), array( 'label' => '' ))->end() /* ->with('General') ... other non localized properties ... ->end() */ ; } // Fields to be shown on filter forms protected function configureDatagridFilters(DatagridMapper $datagridMapper) { } // Fields to be shown on lists protected function configureListFields(ListMapper $listMapper) { $listMapper ->addIdentifier('title') ; } }
语言
此插件还提供了一个基本的语言实体,也可以通过 SonataAdmin 管理。
待办事项
在 composer.json
中添加带有版本的依赖项。