Реклама
Рубрики блога
Архив статей
Облако тегов
Переводы (локализация) в 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