nercury / translation-editor-bundle
翻译编辑表单。定义一个表单类型来编辑本地化对象的翻译。
v0.1.4
2015-11-23 09:04 UTC
Requires
- php: >=5.3.2
- doctrine/orm: >=2.1.0
- symfony/symfony: >=2.3
This package is not auto-updated.
Last update: 2024-09-14 13:37:07 UTC
README
这是一个翻译编辑表单。
使用数组
示例数据
$data = array( 'translations' => array( array( 'lang' => 'lt', 'name' => 'Produktas', 'description' => 'Produkto aprašymas' ), array( 'lang' => 'en', 'name' => 'Product', 'description' => 'Product description', ), ), );
表单需要您为内部项创建一个表单类型,在本例中名为 "TestType"
class TestType extends \Symfony\Component\Form\AbstractType { public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder, array $options) { $builder->add('name'); $builder->add('description'); } public function getName() { return 'translation_item_form'; } }
表单类型以类似集合的方式实现。使用 "type" 指定内部表单类型。使用 "locale_field_name" 来重写区域字段名称(默认为 "lang")。
$formBuilder = $this->createFormBuilder($data); $formBuilder->add('translations', 'translations', array( 'type' => new TestType(), 'locale_field_name' => '[lang]', 'locales' => array('lt', 'en', 'ru'), ));
使用集合和实体
表单类型还可以与在此或类似表结构中定义的数据库翻译一起使用
| product | | product_translation |
| id | ------ | product_id |
| lang |
| name (localised) |
它遵循旧 Doctrine1 行为的相同风格。
主要产品实体必须有一个 Doctrine 集合的翻译,以及 "getTranslations()" 方法,并且您应该使用其名称构建表单。
它将在 Doctrine 类元数据中找到其他内容。
表单主题
您可以通过重写 "fields.html.twig" 文件来重写表单主题。
JavaScript
@NercuryTranslationEditorBundle/Resources/public/js/translations_form.js
示例
示例 Doctrine 实体
namespace Example\AcmeBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="acme") */ class Acme { /** * @var \Doctrine\Common\Collections\ArrayCollection|AcmeTranslation[] * * @ORM\OneToMany( * targetEntity="Example\AcmeBundle\Entity\AcmeTranslation", * mappedBy="acme", * cascade={"persist", "remove"} * ) */ private $translations; } namespace Example\AcmeBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="acme_translations") */ class AcmeTranslation { /** * @var Acme $acme * * @ORM\ManyToOne(targetEntity="Example\AcmeBundle\Entity\Acme", inversedBy="translations") * @ORM\JoinColumns({ * @ORM\JoinColumn( * name="acme_id", * referencedColumnName="id", * onDelete="CASCADE", * nullable=false * ) * }) */ private $acme; /** * @var string $lang * * @ORM\Column(name="lang", type="string", length=31, nullable=false) */ private $lang; /** * @var string $title * * @ORM\Column(name="title", type="string", length=255, nullable=false) */ private $title; /** * @var string $description * * @ORM\Column(name="description", type="text", nullable=true) */ private $description; }