Известные ограничения

Чего модуль не делает. Список нужен, чтобы не искать часами то, чего нет.

Индексатор

Только PHP-файлы. Коды фраз в .html, .tpl, .js не учитываются.

Только явные вызовы. Код, собранный в программе из кусков, сканер не видит. Такие фразы всегда числятся неиспользуемыми.

Причина у обоих ограничений одна: сканер читает текст файлов, а не выполняет их. Выполнять код проекта, чтобы узнать, какие фразы он позовёт, нельзя ни при каких обстоятельствах. См. Индексатор.

Синхронизация

Значения не переносятся. Синхронизация создаёт структуру — свойства и поля. Тексты переводит автоперевод или вы сами.

Переустановка поверх существующего словаря не добавит новых служебных полей. Если структура словаря между версиями менялась, поля создаются обновлением, а не повторной установкой.

Синхронизация при добавлении языка ограничена по числу инфоблоков на одно событие. Для очень больших каталогов запускайте её с экрана вручную.

Режим правки

Текст оборачивается в разметку, поэтому Lang::get нельзя использовать без сырого режима в атрибутах тега, в заголовке страницы, в строках JavaScript и в JSON.

Это не обходится: обёртка нужна, чтобы по фразе можно было кликнуть. См. Lang::get и LANG_VAR.

Зеркало языка

Во вложенной сетке торговых предложений зеркала нет. Строки сетки порождает скрипт ядра, имена полей у них свои. Правьте перевод предложения на его отдельной форме. См. Торговые предложения.

Зеркало отказывается целиком, если не нашёлся хоть один нужный узел формы, обнаружился черновик автосохранения или незнакомый редактор. Половина подменённой формы хуже, чем неподменённая.

SEO

Переводятся только собственные шаблоны сущности. Унаследованные наследуются на языке так же, как в ядре, — переводить их надо там, где они заданы.

Макрос цепочки разделов остаётся базовым. Цепочка у ядра своя, и подменять её значит повторять её целиком.

Предпросмотр в админке показывает базовые значения.

Поиск

Индексная запись у элемента одна, на все языки. Элемент находится по словам любого из них — это удобно, но релевантность на проектах с большим числом языков размывается. Лечится настройкой поиска, а не модулем.

Магазин

Единицы измерения: международное обозначение не переводится. Оно приходит из классификатора и одинаково на всех языках.

За таблицами оплаты и доставки модуль не следит. Событий на их изменение у ядра нет, поэтому названия переносятся в словарь по кнопке. См. Платёжные системы и доставки.

Перевод

Точечного отката перезаписи нет. Включённая галочка «перезаписывать существующие переводы» необратима: восстанавливать из бэкапа.

Модель может отказаться переводить безобидный текст. Модуль обрабатывает это тремя попытками, но гарантировать перевод любого текста нельзя. См. Глоссарий и контекст.

Старый PHP

На версии ниже требуемой модуль не выключается целиком, и это не недоработка, а решение. Из автозагрузки снимаются только файлы, которые на такой версии не разобрать; всё остальное продолжает работать.

Значит словарь, подстановка переводов на витрине и админка живы, а машинный перевод — нет. Снаружи это выглядит как выборочная поломка, поэтому причина пишется в журнал событий и горит отдельной строкой на экране проверки стенда. Разбор — Что делать, если.

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

Языковые версии сайта

Модуль берёт текущий язык у Битрикса. Если языковые версии на сайте сделаны не языками платформы — папками, доменами без привязки языка, параметром в адресе — модуль будет отдавать один и тот же язык везде.

Это условие работы, а не поломка.