Перейти к основному содержимому

Общие переводы

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

Он автоматически использует локаль, заданную в документе, либо локаль, получаемую через механизм fallback.

Для дополнительной информации можно ознакомиться с документацией компонента переводов Symfony.

Общие переводы

Доступные языки определяются в настройках системных языков, см. здесь.

Общие переводы сохраняются в таблице базы данных translations_messages и могут версионироваться с помощью миграций.

Чувствительность переводов к регистру

По умолчанию переводы регистрозависимы. Вы можете перенастроить Pimcore так, чтобы переводы для сайта и админки обрабатывались без учёта регистра, однако это приведёт к ухудшению производительности (иногда ключи будут искаться дважды) и будет отличаться от поведения стандартных трансляторов Symfony. Рекомендуется ссылаться на ключи переводов с тем же регистром, в котором они были сохранены.

Работа с общими переводами / переводчиком в коде

Пример в шаблонах / представлениях

В шаблонах можно использовать интерполяцию переменных в локализованных сообщениях. Например:

<div>  
<address>&copy; {{ '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-файл и затем повторно импортировать.

Экспорт перевода

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

Импорт перевода


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