我正在重构一个多语言网站到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协会进行翻译。