Общие переводы
Pimcore предоставляет удобный интерфейс для редакторов, позволяющий править часто используемые переводимые строки во всём приложении. Доступ к этому разделу находится в меню: Extras > Translation > Shared Translations.
В основе функционала общих переводов используется стандартный компонент Symfony Translator. Основное преимущество — единый механизм перевода для всех ваших переводов.
Он автоматически использует локаль, заданную в документе, либо локаль, получаемую через механизм fallback.
Для дополнительной информации можно ознакомиться с документацией компонента переводов Symfony.

Доступные языки определяются в настройках системных языков, см. здесь.
Общие переводы сохраняются в таблице базы данных translations_messages и могут версионироваться с помощью миграций.
Чувствительность переводов к регистру
По умолчанию переводы регистрозависимы. Вы можете перенастроить Pimcore так, чтобы переводы для сайта и админки обрабатывались без учёта регистра, однако это приведёт к ухудшению производительности (иногда ключи будут искаться дважды) и будет отличаться от поведения стандартных трансляторов Symfony. Рекомендуется ссылаться на ключи переводов с тем же регистром, в котором они были сохранены.
Работа с общими переводами / переводчиком в коде
Пример в шаблонах / представлениях
В шаблонах можно использовать интерполяцию переменных в локализованных сообщениях. Например:
<div>
<address>© {{ 'Copyright'|trans }}</address>
<a href="/imprint">{{ 'Imprint'|trans }}</a>
{# интерполяция переменных, 'about' переводится как 'About {{siteName}}' #}
<a href="/about">{{ 'about'|trans({'{{siteName}}': siteName}) }}</a>
</div>
Параметры в переводах могут быть обёрнуты в двойные фигурные скобки ({{ и }}), но вы также можете использовать другие обёртки для плейсхолдеров, например %parameter%, как указано в документации Symfony — это также работает.
Пример в контроллере
<?php
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
class ContentController extends FrontendController
{
public function defaultAction(TranslatorInterface $translator): Response
{
$translatedLegalNotice = $translator->trans("legal_notice");
$siteName = "Demo"; // или получить динамически
// интерполяция переменных, 'about' переводится как 'About {{siteName}}'
$translatedAbout = $translator->trans("about", ['siteName' => $siteName]);
// ...
}
}
Множественные формы и селекторы переводов (Pluralization/Selection)
Поскольку Pimcore использует компонент Symfony Translator, вы можете хранить и использовать переводы в формате ICU Message Format (поддерживается Symfony Translator) для множественности (pluralization), выбора (selection) и других случаев. Подробнее читайте здесь. В Pimcore это достигается выбором типа "ICU Format" в интерфейсе перевода и передачей необходимых параметров в представлении или контроллере. Пример
Добавьте ключ перевода и выберите тип "ICU Format".

Нажмите на ячейку языка (plain text) для редактирования
и добавьте перевод в ICU-формате
{variable_name, function_name, function_statement}
Используйте в представлении
{{ 'cars_sold'|trans({'sold_count': 0}) }}
{# вывод: No car sold yet. #}
{{ 'cars_sold'|trans({'sold_count': 1}) }}
{# вывод: Only one car sold. #}
{{ 'cars_sold'|trans({'sold_count': 100}) }}
{# вывод: Total of 100 cars sold! #}
Функциональность бэкенда Pimcore
Сортировка и фильтрация на уровне языка

Экспорт и импорт переводов
Переводы можно экспортировать в CSV-файл и затем повторно импортировать.

Переводы при импорте автоматически добавляются, если ключ перевода отсутствует в целевой системе или если сама переводимая строка в целевой системе ещё пуста. Конфликты (например, если перевод в целевой системе не совпадает с версией источника) отображаются в отдельной обзорной вкладке, где их можно объединить вручную.

Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.