braune-digital/translation-base-bundle

TranslationBase 插件

1.1.2 2016-09-23 13:22 UTC

This package is auto-updated.

Last update: 2024-09-10 23:16:48 UTC


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 中添加带有版本的依赖项。