Я построил пластину электронной коммерции с несколькими языками, используя 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();
будет использовать текущую локаль пользователя для вывода хороший перевод.
Он отлично работает, спасибо! – petekaner
Можете ли вы добавить образец кода для использования переводов в Twig? –
@ A.L Конечно, я очень занят в эти дни, но я попробую обновить свой ответ в выходные дни. Мир. –