Добавить язык: сквозной сценарий
Самое частое место, где всё останавливается, — стык между шагами. Язык заведён, а свойств нет. Свойства есть, а очередь пустая. Перевод записан, а на сайте по-прежнему русский.
Поэтому здесь все шаги подряд, от настроек Битрикса до выведенной на странице фразы. Каждый со ссылкой на подробности.
1. Завести язык в Битриксе
Настройки → Настройки продукта → Сайт → Языки → Добавить.
Это язык самой платформы, модуль тут ни при чём. Но именно от этого списка он дальше отталкивается.
Сразу после сохранения происходят две вещи: в словаре появляется поле UF_LANG_<ID> под новый язык, а сам язык попадает в список ожидающих — модуль запоминает, что о нём ещё не спрашивали.
2. Отметить язык для перевода
Модули mrLexndr → Переводы → Настройки, вкладка «Языки».
Отметьте новый язык и сохраните список. Без сохранения модуль работает по автоопределению и показывает предупреждение: он догадывается, а не знает.
Здесь же имеет смысл снять языки, которых на сайте нет. Лишний язык в списке — это лишние свойства в каждом инфоблоке и лишние строки в очереди.
Подробнее про экран — Настройки.
3. Создать языковые свойства инфоблоков
Экран «Обслуживание», вкладка «Языковые свойства». После сохранения языков настройки сами дают ссылку сюда.
Модуль не создаёт свойства сам. До версии 6.0.0 это делал агент автоматически, и от такого поведения отказались намеренно: размножение свойств по всему каталогу — операция, которую администратор должен запускать осознанно, а не обнаруживать постфактум.
Что именно создаётся и что синхронизатор сознательно не трогает — Синхронизация структуры.
4. Перевести
Дальше два пути.
Весь каталог разом — очередь наполнится сама, а перевод пойдёт пачками: Запустить разовый перевод.
Точечно, один элемент или раздел — кнопкой на карточке: Перевести элемент или раздел.
Если у проекта есть свои термины, сначала загляните в Глоссарий: объяснить их переводчику дешевле до перевода, чем править после.
5. Вывести на сайте
Переводы записаны, но шаблон о них не знает — он по-прежнему берёт русские поля.
Для фраз интерфейса — Lang::get и LANG_VAR.
Для инфоблоков — Выборка с учётом языка: подстановка происходит при выборке, менять шаблон обычно не требуется.
Для штатных компонентов есть готовые рецепты: news.list, catalog.element и остальные — Штатные компоненты.
Для SEO-свойств — SEO-шаблоны на языке. Это отдельный шаг: переведённые title и description посетитель увидит не раньше, чем шаблоны на новом языке будут заполнены.
Для фраз из языковых файлов — повторный поиск фраз. Если на сайте включён перехват GetMessage(), смена списка языков на шаге 2 его сбрасывает: прогон стирается, перехват выключается до нового поиска. Это сделано нарочно — покрытие было посчитано по прежнему составу языков. Запустите поиск заново на экране Файловые фразы, иначе GetMessage() на всех языках вернётся к текстам из файлов.
6. Проверить
Откройте страницу на новом языке. Если видите русский текст там, где ждали перевод, порядок проверки такой:
- перевод вообще записан? Найдите фразу или элемент в словаре;
- если записан — читает ли шаблон языковое поле, или берёт русское напрямую;
- если и это в порядке — сбросьте кеш сайта.
Разбор остальных случаев — Что делать, если.