Skip to content

Переводчики

Машинный перевод контента. Переводчик — это строка в PageBlocks → Переводчики; компонент дёргает API провайдера и сохраняет результат как перевод оригинала.

Речь про контент, а не про строки интерфейса — те живут в лексиконах, ими занимается Локализация.

Драйверы

ДрайверПровайдер
chatgptOpenAI
claudeAnthropic
geminiGoogle
grokxAI
deeplDeepL

Четыре из них — языковые модели, один — специализированный переводчик; интерфейс у них общий, поэтому смена драйвера это правка строки.

Настройка

ПолеЧто это
nameЧеловеческое название
driverОдин из ключей выше
api_keyКлюч провайдера
modelИмя модели, для LLM-драйверов
base_urlПереопределить адрес — для прокси или своего шлюза
promptШаблон инструкции, только для LLM-драйверов
published_atНеопубликованный переводчик не используется

Неизвестный драйвер не ошибка: он пишется в лог MODX, а фабрика возвращает пустоту.

Промпт

По умолчанию просит вернуть только перевод, сохранив HTML и плейсхолдеры. В своём шаблоне доступны два плейсхолдера:

Translate the following text from [[+from]] to [[+to]].
Reply with the translation only, preserving any HTML markup and placeholders:

[[+from]] и [[+to]] подставляются кодами языков в верхнем регистре. Это та ручка, за которую надо браться, когда провайдер упорно дописывает вокруг перевода пояснения или корёжит ваши {$плейсхолдеры}.

Он никогда не бросает исключение

translate() всегда возвращает строку. Любой сбой возвращает исходный текст и пишет причину в лог MODX:

СитуацияРезультат
Пустой или числовой текстВозвращается как есть, запрос не уходит
Нет ключа APIИсходный текст, причина в логе
Сбой транспорта или ошибка провайдераИсходный текст, причина в логе
Ответ не разобралсяИсходный текст, ответ в логе

Так задумано: прогон перевода по сотням строк не должен обрываться на середине из-за одного таймаута. Но из этого же следует, что тихий сбой выглядит как «ничего не перевелось». Если так вышло — сперва читайте лог, а уже потом меняйте настройки.

Числа пропускаются намеренно: отправить 2024 в языковую модель и получить обратно пересказ — вполне реальный риск, а переводить там всё равно нечего.

Бюджет токенов

У LLM-драйверов лимит на ответ считается от входа — примерно двадцать токенов на слово плюс минимум для коротких строк, потолок 8192. Перевод по длине сопоставим с оригиналом, а потолок стоит, чтобы не оплатить сорвавшийся ответ.

Что переводится

Переводы хранятся по языкам в pb_translations, языки настраиваются в pb_languages. Страница показывает оригинал, когда перевода нет, поэтому недоделанный перевод никогда не опустошает сайт.

Платите вы

Все эти провайдеры берут деньги за запрос. Компонент не группирует запросы, не кэширует их и не сверяется с прошлыми прогонами — перевести одно и то же поле дважды стоит вдвое. Начните с нескольких строк и посмотрите на результат, прежде чем натравливать его на целую таблицу.

© PageBlocks 2019-present