Реклама
Рубрики блога
Архив статей
Облако тегов
Переводы (локализация) в Symfony 2
среда, 2 июля 2014 09:04:35, написал Admin
Вызовы переводов в различных частях Symfony: в шаблонах (твиг), контроллере, сущности, форме и меню.
В твиге:
{{ message|trans({'%name%': 'Fabien'}, "app") }}
В самом файле переводов так и пишем:
message: This is %name%
В контроллере:
$translated = $this->get('translator')->trans('Symfony2 is great');
В сущности:
Создаем в базе данных поля с расширением _ru и _en и в зависимости от локали отдаем нужный
/** * @var string * * @ORM\Column(type="string", length=255) */ private $title_en; /** * @var string * * @ORM\Column(type="string", length=255) */ private $title_ru; /** * @param string $title_en * @return $this */ public function setTitleEn($title_en) { $this->title_en = $title_en; return $this; } /** * @return string */ public function getTitleEn() { return $this->title_en; } /** * @param string $title_ru * @return $this */ public function setTitleRu($title_ru) { $this->title_ru = $title_ru; return $this; } /** * @return string */ public function getTitleRu() { return $this->title_ru; } /** * @return string */ public function getTitle($locale = 'ru') { return ('ru' == $locale) ? $this->title_ru : $this->title_en; }
Пример вызова:
<h3>{{ post.title(app.session.get('locale', 'ru')) }}</h3>
В форме:
Просто пишем метки на английском, в файлах перевода пишем
Label: Метка
В меню:
С меню наверное надо было подключать сервис translator прямо в меню. Но было лень делать лишние телодвижения, поэтому решил переопределить твиг.
В конфиге пишем:
knp_menu: twig: template: AcmeDemoBundle::knp_menu.html.twig # your custom knp_menu template
В knp_menu.html.twig ставим это:
{% extends "knp_menu.html.twig" %} {% block label %} {{ item.label|trans }} {% endblock %}
И все, в метках пишем английский вариант, подхватит.
Symfony2 Переводы Symfony2