Shepherd.js — библиотека для создания интерактивных пошаговых руководств в веб-приложениях, и она предусматривает гибкую работу с языками, использующими направление письма справа налево (Right-to-Left, RTL), такими как арабский, иврит и персидский. Управление RTL важно для корректного отображения подсказок, их позиционирования и навигационных кнопок.
В Shepherd.js направление текста зависит от контейнера, в котором
отображается тур, а также от конфигурации body и целевых
элементов. Для RTL необходимо правильно задавать CSS-свойство
direction:
body {
direction: rtl;
}
Если тур создается внутри отдельного контейнера:
<div id="tour-container" style="direction: rtl;"></div>
При такой настройке Shepherd корректно отобразит все подсказки, учитывая зеркальное положение стрелок и кнопок навигации.
Каждый шаг Shepherd.js создается через объект конфигурации с
ключевыми параметрами: title, text,
attachTo, buttons, advanceOn и
classes. Для RTL важно корректно настроить позиционирование
с помощью свойства attachTo:
const tour = new Shepherd.Tour({
useModalOverlay: true,
defaultStepOptions: {
scrollTo: { beh * avior: 'smooth', block: 'center' },
classes: 'shepherd-theme-arrows'
}
});
tour.addStep({
id: 'step-1',
text: 'Пример шага с поддержкой RTL',
attachTo: {
element: '#example-element',
on: 'left' // для RTL 'left' становится справа визуально
},
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Вперед',
action: tour.next
}
]
});
tour.start();
Важно учитывать, что свойства on: 'left' или
'right' в RTL инвертируются визуально, поэтому стрелка и
подсказка будут корректно отображены по направлению текста.
Shepherd.js использует темы для визуализации стрелок и контейнеров. Для RTL необходимо применять CSS, который отражает направление подсказки:
.shepherd-theme-arrows .shepherd-arrow {
right: auto;
left: 0;
}
Можно создавать отдельные темы для LTR и RTL и переключать их в зависимости от языка страницы. Например:
const theme = document.documentElement.dir === 'rtl'
? 'shepherd-theme-rtl'
: 'shepherd-theme-arrows';
Кнопки “Назад” и “Вперед” нужно располагать с учётом RTL, чтобы пользовательский интерфейс был интуитивным:
buttons: [
{
text: 'Вперед',
action: tour.next,
classes: 'shepherd-button-primary'
},
{
text: 'Назад',
action: tour.back,
classes: 'shepherd-button-secondary'
}
]
Для RTL логично менять порядок кнопок визуально через CSS:
.shepherd-footer {
display: flex;
flex-direction: row-reverse;
justify-content: flex-end;
}
При динамической смене языка на странице с RTL необходимо
пересоздавать или обновлять тур. Shepherd.js предоставляет методы
tour.steps.forEach(step => step.updateStepOptions({...})),
что позволяет изменять направление, текст и кнопки без полной
перезагрузки страницы.
tour.steps.forEach(step => {
step.updateStepOptions({
attachTo: { on: document.documentElement.dir === 'rtl' ? 'left' : 'right' },
buttons: document.documentElement.dir === 'rtl'
? [{ text: 'Вперед', action: tour.next }, { text: 'Назад', action: tour.back }]
: [{ text: 'Назад', action: tour.back }, { text: 'Вперед', action: tour.next }]
});
});
Для многоязычных приложений полезно интегрировать Shepherd.js с библиотеками локализации, такими как i18next. Это позволяет динамически подставлять текст, менять направление страницы и адаптировать все шаги тура:
tour.addStep({
id: 'localized-step',
text: i18next.t('tour.step1'),
attachTo: { element: '#element', on: document.documentElement.dir === 'rtl' ? 'left' : 'right' },
buttons: [
{ text: i18next.t('tour.back'), action: tour.back },
{ text: i18next.t('tour.next'), action: tour.next }
]
});
useModalOverlay: true модальный слой корректно учитывает
направление текста, но для RTL может потребоваться дополнительная
настройка CSS, чтобы стрелки не пересекали элементы.scrollTo работает
одинаково для LTR и RTL, но ориентация относительно экрана изменяется,
особенно при использовании block: 'center'.attachTo отражает правильное
направление, иначе стрелки будут “смотреть” в неверную сторону.Поддержка RTL в Shepherd.js достигается комбинацией корректного CSS, динамического управления шагами и внимательного обращения с кнопками и позиционированием подсказок. Это позволяет создавать удобные интерактивные туры для пользователей, использующих языки с письмом справа налево.