2015-05-13 2 views
3

Я перерабатываю многоязычный веб-сайт для symfony.Symfony2 Лучший способ реализовать переводы базы данных

На сайте много языковых материалов, хранящихся в базах данных (описания продуктов, название продукта ...) и языковая таблица. Это выглядит так, как это: Таблицы продукт: -id -Цен -stock -...

Таблица product_language: -id_product -id_language -name -description

язык Таблица : -id -name -кода

Так что я имею в виду в лучшем способе мигрирует это Symfony и доктрины, Я б een смотрит в переводное расширение, но я не знаю, будет ли он здесь соответствовать (я не уверен, возможно ли его разместить в нем таблицу языков)

Спасибо!

ответ

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; 

Это даст вам две таблицы

Первые из них всей информации вашего продукта (в данном примере СКУ). Второй будет иметь строку для каждого переведенного экземпляра с использованием отношения 1-N.

После того, как вы закончите вы можете использовать:

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

Или еще лучше

$product->getName(); 

будет использовать текущую локаль пользователя для вывода хороший перевод.

+0

Он отлично работает, спасибо! – petekaner

+1

Можете ли вы добавить образец кода для использования переводов в Twig? –

+0

@ A.L Конечно, я очень занят в эти дни, но я попробую обновить свой ответ в выходные дни. Мир. –

0

Вы можете использовать VM5's Entity Translations bundle. Это довольно простой и легкий. И он также использует собственные ассоциации ORM Doctrine для переводов.

Смежные вопросы