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



我正在重构一个多语言网站到Symfony。

该网站在数据库(产品说明,产品名称...)和语言表中存储了很多语言内容。它看起来很像这些:表产品:-ID-价格-库存-...

表product_language:-id_product-id_language-姓名 - 描述

表语言:-ID-姓名-Code

所以我正在考虑将其迁移到Symfony和Toctrine的最佳方式,我一直在研究可翻译的扩展,但我不知道它是否适合这里(我不确定是否可能将语言表广告中)

谢谢!

我使用KNP翻译行为构建了多语言电子商务板形式,这完全很棒。

它一定会适合您的需求。这是我的"产品"实体及其如何影响您的数据库的快速示例。

//AcmeBundle/Entity/Product.php
use KnpDoctrineBehaviorsModel as ORMBehaviors;
/**
 * @ORMTable(name="product")
 */
class Product
{
    use ORMBehaviorsTranslatableTranslatable;
    /**
     * @var integer
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @var string
     * @ORMColumn(name="sku", type="string", length=255)
     */
    protected $sku;
    // other properties

然后,您将所有可翻译属性都放入一个名为Product Translation的新实体

//AcmeBundle/Entity/ProductTranslation.php
use KnpDoctrineBehaviorsModel as ORMBehaviors;
/**
 * @ORMTable(name="product_translation")
 * @ORMEntity
 */
class ProductTranslation
{
    use ORMBehaviorsTranslatableTranslation,
        ORMBehaviorsSluggableSluggable;
    /**
     * @ORMColumn(name="name", type="string", length=255)
     */
    protected $name;
    /**
     * @ORMColumn(name="description", type="text", nullable=true)
     */
    protected $description; 

这将给您两个表

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

完成后,您可以使用:

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

甚至更好的

$product->getName();

将使用当前的用户语言环境输出良好的翻译。

您可以使用VM5的实体翻译捆绑包。这非常简单且轻巧。它还使用本机学说ORM协会进行翻译。

相关内容

  • 没有找到相关文章

最新更新