Intro.js — библиотека для создания интерактивных пошаговых руководств по интерфейсу веб-приложений. Одной из ключевых задач при международной локализации является корректная работа с RTL-языками (Right-to-Left), такими как арабский, иврит и персидский. Intro.js предоставляет встроенные механизмы для адаптации интерфейса и подсказок под направление текста справа налево.
Для включения RTL-режима необходимо установить свойство
rtl в объекте конфигурации при инициализации интро:
introJs().setOptions({
steps: [
{
element: '#step1',
intro: 'Это первый шаг',
},
{
element: '#step2',
intro: 'Это второй шаг',
}
],
rtl: true
}).start();
Особенности:
rtl: true изменяет направление текста в
подсказках и кнопках навигации.Если приложение поддерживает несколько языков, переключение между LTR и RTL может происходить динамически:
function initializeIntro(language) {
const isRTL = ['ar', 'he', 'fa'].includes(language);
introJs().setOptions({
steps: [
{ element: '#step1', intro: 'Пример шага' },
{ element: '#step2', intro: 'Еще один шаг' }
],
rtl: isRTL
}).start();
}
initializeIntro('ar'); // Инициализация для арабского языка
Важно: При динамическом переключении необходимо
пересоздавать экземпляр Intro.js, так как изменение свойства
rtl на уже запущенной сессии не применится корректно.
Intro.js использует стандартные CSS-классы для позиционирования элементов и стрелок. Для полной поддержки RTL необходимо убедиться, что:
direction: rtl; при необходимости..introjs-tooltip,
.introjs-arrow и .introjs-helperLayer
корректно учитывает направления.Пример минимальной CSS-правки:
/* Переворот стрелки для RTL */
.introjs-tooltip.rtl .introjs-arrow {
left: auto;
right: -10px;
transform: rotate(180deg);
}
/* Выравнивание текста */
.introjs-tooltip.rtl .introjs-tooltiptext {
text-align: right;
}
Совет: В последних версиях Intro.js RTL-поддержка встроена, но кастомные стили интерфейса всё равно могут требовать ручной адаптации.
Intro.js автоматически переставляет кнопки “Next”, “Prev” и “Done”
при включенном rtl. Однако при необходимости кастомизации
можно использовать классы .introjs-button и
.introjs-prevbutton:
.introjs-tooltip.rtl .introjs-prevbutton {
float: right;
}
.introjs-tooltip.rtl .introjs-nextbutton {
float: left;
}
Такой подход позволяет сохранять привычную для пользователей логику кнопок, учитывая визуальное расположение элементов.
В приложениях с переключением языков важно создавать текст подсказок
на соответствующем языке. Intro.js поддерживает динамическое обновление
текста через setOptions:
const steps = [
{ element: '#step1', intro: translations[language].step1 },
{ element: '#step2', intro: translations[language].step2 }
];
introJs().setOptions({ steps, rtl: isRTL }).start();
Особенности:
direction, подсказка наследует этот
стиль, что может приводить к неконсистентному отображению текста.html или основной контейнер
документа содержит корректное dir="rtl" при работе с
RTL-языками.rtl в зависимости от текущего языка..rtl для сохранения
чистоты кода.Intro.js корректно работает с большинством популярных фреймворков,
включая React, Vue и
Angular, при условии, что RTL-настройка передается
через setOptions и CSS наследуется правильно.
// Пример в React
import introJs from 'intro.js';
import 'intro.js/introjs.css';
useEffect(() => {
const intro = introJs();
intro.setOptions({
steps: [
{ element: '#step1', intro: 'Первый шаг' },
{ element: '#step2', intro: 'Второй шаг' }
],
rtl: isRTL
});
intro.start();
}, [isRTL]);
Такой подход позволяет создавать пошаговые руководства, полностью адаптированные под направление текста и язык интерфейса.