Skip to content

Мульти язычность

andchir edited this page Oct 26, 2019 · 12 revisions

Основная локаль (язык) сайта всегда - "en". Этот параметр можно изменить в конфигурационном файле config/packages/translation.yaml (translator.fallbacks). Текущая локаль сайта (по умолчанию) задается в параметре "Локаль" в настройках. Изменить этот параметр можно в интерфейсе администратора в разделе "Настройки". Переводы текстов, которые используются в шаблонах и коде сайта, находятся в папке "translations". В шаблонах для перевода можно использовать фильтр "trans" или "transchoice".

Примеры:

{% trans %}Hello %name%{% endtrans %}

{{ message|trans }}

{{ message|transchoice(5) }}

{{ message|trans({'%name%': 'Fabien'}, 'app') }}

{{ message|transchoice(5, {'%name%': 'Fabien'}, 'app') }}

Аргументы фильтров:

  1. Параметры, которые используются в переводе.
  2. Домен перевода, например "validators". Домен по умолчанию - "messages".

Пример использования фильтра "transchoice" для перевода текста со склонениями по падежам:

{{ '%count% product found|%count% products found' | transchoice(totalItems, {}, 'local') }}

В файле translations/local.ru.yaml должен быть перевод:

'%count% product found|%count% products found': 'Найден %count% товар|Найдено %count% товара|Найдено %count%  товаров'

Вывод ссылки на страницу с текущей локалью

При использовании Twig-функции {{ catalogPath(...) }} в URL автоматически подставляется текущая локаль. Для ссылки на роут контроллера можно использовать Twig-функцию {{ pathLocalized(...) }}. Данная функция - аналог стандартной функции {{ path(...) }}, но в URL автоматически подставляется текущая локаль.
Пример использования:

<a class="dropdown-item" href="{{ pathLocalized('profile_history_orders') }}" rel="nofollow">
    <i class="icon-list text-muted"></i>
    &nbsp;
    {{ 'History of orders' | trans }}
</a>

Перевод текста в контроллере

Пример перевода текста в PHP-коде контроллера:

use Symfony\Component\Translation\TranslatorInterface;

public function index(TranslatorInterface $translator)
{
    $translated = $translator->trans('Symfony is great');

    // ...
}

Перевод содержимого полей документов из базы данных

В настройках можно задать список всех доступных языков - параметр "Список языков (через запятую)". Пример значения: "ru,en". Эти локали будут выводиться в виде переключателя в нижней части окна создания/редактирования контента. Первая локаль в списке используется как локаль по умолчанию. При переключении можно задать значения текстовых полей для другой локали. Из базы данных автоматически будут выведены только те документы, для которых есть перевод для текущего языка, проверяется по заголовку документа (имя чанка для поля - header).

Список языков сайта в настройках

В настройках можно создать список языков сайта в соответствующем блоке. В этом блоке можно ввести название языка и его локаль. Для вывода переключателя языков можно использовать Twig-функцию {{ settingsList(...) }}. Пример:

{{ settingsList('SETTINGS_LANGUAGES', 'languages_list', false, true) }}

Выводится список языков с использованием шаблона catalog/languages_list.html.twig.

Дополнительные материалы

Clone this wiki locally