Разделы Написать в Telegram

Добавить язык: сквозной сценарий

Самое частое место, где всё останавливается, — стык между шагами. Язык заведён, а свойств нет. Свойства есть, а очередь пустая. Перевод записан, а на сайте по-прежнему русский.

Поэтому здесь все шаги подряд, от настроек Битрикса до выведенной на странице фразы. Каждый со ссылкой на подробности.

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. Проверить

Откройте страницу на новом языке. Если видите русский текст там, где ждали перевод, порядок проверки такой:

  1. перевод вообще записан? Найдите фразу или элемент в словаре;
  2. если записан — читает ли шаблон языковое поле, или берёт русское напрямую;
  3. если и это в порядке — сбросьте кеш сайта.

Разбор остальных случаев — Что делать, если.