Symfony2 实现数据库翻译的最佳方式

Symfony2 Best way to implement database translations

我正在将一个多语言网站重构为 symfony。

该站点在数据库中存储了大量语言信息(产品描述、产品名称...)和一种语言 table。它看起来很像这些: Table 产品: -ID -价格 -股票 -...

Tableproduct_language: -id_product -id_language -姓名 -描述

Table 语言: -ID -姓名 -代码

所以我正在考虑将其迁移到 symfony 和 doctrine 的最佳方式,我一直在研究 translatable 扩展,但我不知道它是否适合这里(我'我不确定是否可以将语言 table 添加到其中)

谢谢!

我使用 KNP Translatable behavior 构建了一个多语言电子商务平台,它非常棒。

它肯定能满足您的需求。这是我的 "Product" 实体及其如何影响您的数据库的简单示例。

//AcmeBundle/Entity/Product.php
use Knp\DoctrineBehaviors\Model as ORMBehaviors;

/**
 * @ORM\Table(name="product")
 */
class Product
{
    use ORMBehaviors\Translatable\Translatable;

    /**
     * @var integer
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     * @ORM\Column(name="sku", type="string", length=255)
     */
    protected $sku;

    // other properties

然后将所有可翻译属性放入一个名为 ProductTranslation

的新实体中
//AcmeBundle/Entity/ProductTranslation.php
use Knp\DoctrineBehaviors\Model as ORMBehaviors;

/**
 * @ORM\Table(name="product_translation")
 * @ORM\Entity
 */
class ProductTranslation
{
    use ORMBehaviors\Translatable\Translation,
        ORMBehaviors\Sluggable\Sluggable;

    /**
     * @ORM\Column(name="name", type="string", length=255)
     */
    protected $name;

    /**
     * @ORM\Column(name="description", type="text", nullable=true)
     */
    protected $description; 

这会给你两个表

第一个包含您的所有产品信息(在此示例中为 SKU)。第二个将使用 1-N 关系为每个翻译实例创建一行。

完成后,您可以使用:

$product->translate('en')->getName();
$product->translate('fr')->getName();

甚至更好

$product->getName();

将使用当前用户区域设置输出好的翻译。

您可以使用 VM5's Entity Translations bundle。 它非常简单和轻巧。并且它还使用本地 Doctrine ORM 关联进行翻译。