Переводы (локализация) в 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
  

Поделиться статьей с друзьями:

  

Комментарии к статье