Symfony 2. Мультиязычность контента

Недавно передо мной стояла задача сделать мультиязычность контента у сайта, написанного с использованием фреймворка symfony 2. Из мануалов было ясно, что встроенная мультиязычность подходит только для перевода интерфейсов. Мне нужна возможность определения у каких полей сущностей будет перевод, а у каких не будет перевода.

Нашел библиотеку Doctrine2 Behaviors от KnpLabs. В документации есть инструкция по использованию с анотациями. Но у меня сущности описываются в yml файлах. С yml файлами, как оказалось тоже все работает, главное – правильно описать.

Установить Doctrine2 Behaviors можно следующей командой:

После установки нужно подключить бандл в файле app/AppKernel.php

И импортировать сервисы в файле app/config/config.yml

Установка завершена. Можно приступать к работе с библиотекой.

Создадим сущность Page. Для этого нам понадобится файл Page.yml

Сущность с переводом всегда называется также как и оригинальная сущность, только с суффиксом Translation. В нашем случае это будет PageTranslation. Создадим для нее файл PageTranslation.yml

Далее выполним в консоли команду для генерации классов сущностей:

И команду для создания таблиц в базе данных:

Теперь нужно внести изменения в файлы классов. В файл Page.php добавим следующие строки:

В класс PageTranslation добавим следующие строки:

Теперь создание страницы с переводами на английском и французском языках будет выглядеть так:

Получение перевода осуществляется тоже через метод translate()

Данный способ переводов проверен на версиях symfony 2.6 и symfony 2.7

Спасибо за внимание.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: