我正在为symfony重构一个多语言网站。
该网站有大量语言内容存储在数据库(产品说明,产品名称......)和语言表中。看起来很像这样: 表产品: -ID -价钱 -股票 -...
表product_language: -id_product -id_language -名称 -description
表格语言: -ID -名称 -code
所以我想以最好的方式将其迁移到symfony和doctrine,我一直在研究可翻译的扩展,但我不知道它是否适合这里(我不确定它是否可能将语言表添加到其中)
谢谢!
答案 0 :(得分:4)
我使用KNP Translatable behavior构建了一个多语言电子商务平台,它非常棒。
它绝对符合您的需求。这是我的“产品”实体的一个简单示例,以及它如何影响您的数据库。
//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();
将使用当前用户区域设置输出良好的翻译。
答案 1 :(得分:0)
您可以使用VM5's Entity Translations bundle。 它非常简单轻巧。它还使用原生Doctrine ORM关联进行翻译。