Переводчики
Машинный перевод контента. Переводчик — это строка в PageBlocks → Переводчики; компонент дёргает API провайдера и сохраняет результат как перевод оригинала.
Речь про контент, а не про строки интерфейса — те живут в лексиконах, ими занимается Локализация.
Драйверы
| Драйвер | Провайдер |
|---|---|
chatgpt | OpenAI |
claude | Anthropic |
gemini | |
grok | xAI |
deepl | DeepL |
Четыре из них — языковые модели, один — специализированный переводчик; интерфейс у них общий, поэтому смена драйвера это правка строки.
Настройка
| Поле | Что это |
|---|---|
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. Страница показывает оригинал, когда перевода нет, поэтому недоделанный перевод никогда не опустошает сайт.
Платите вы
Все эти провайдеры берут деньги за запрос. Компонент не группирует запросы, не кэширует их и не сверяется с прошлыми прогонами — перевести одно и то же поле дважды стоит вдвое. Начните с нескольких строк и посмотрите на результат, прежде чем натравливать его на целую таблицу.