Intro.js предоставляет возможность создавать интерактивные пошаговые инструкции и подсказки для веб-приложений. Один из важных аспектов для международных проектов — поддержка мультиязычности. Библиотека позволяет динамически изменять язык интерфейса, не перегружая страницу и не создавая новых экземпляров шагов.
Для работы с разными языками необходимо подключить соответствующие языковые файлы. Intro.js включает несколько встроенных переводов, которые можно загрузить через CDN или локально:
<script src="https://cdn.jsdelivr.net/npm/intro.js/minified/intro.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/intro.js/minified/introjs-ru.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/intro.js/minified/introjs-fr.min.js"></script>
Каждый файл содержит объект
introJs().setOptions({ ... }) с предопределёнными текстами
подсказок, кнопок и заголовков.
Intro.js использует объект labels для перевода элементов
управления:
var intro = introJs();
intro.setOptions({
steps: [
{
element: '#step1',
intro: 'Это первый шаг инструкции'
},
{
element: '#step2',
intro: 'Это второй шаг инструкции'
}
],
// Пользовательские надписи
nextLabel: 'Далее',
prevLabel: 'Назад',
skipLabel: 'Пропустить',
doneLabel: 'Готово'
});
Для изменения языка без пересоздания шагов используется метод
setOptions или обновление объекта labels:
function changeLanguage(lang) {
const translations = {
ru: { nextLabel: 'Далее', prevLabel: 'Назад', skipLabel: 'Пропустить', doneLabel: 'Готово' },
en: { nextLabel: 'Next', prevLabel: 'Back', skipLabel: 'Skip', doneLabel: 'Done' },
fr: { nextLabel: 'Suivant', prevLabel: 'Précédent', skipLabel: 'Passer', doneLabel: 'Terminé' }
};
intro.setOptions(translations[lang]);
}
Вызов changeLanguage('fr') немедленно обновляет кнопки
текущей инструкции, сохраняя текущий шаг и состояние подсказки.
Если необходимо переводить не только кнопки, но и тексты самих шагов, удобно хранить контент шагов в отдельной структуре:
const steps = {
ru: [
{ element: '#step1', intro: 'Первый шаг на русском' },
{ element: '#step2', intro: 'Второй шаг на русском' }
],
en: [
{ element: '#step1', intro: 'First step in English' },
{ element: '#step2', intro: 'Second step in English' }
]
};
function updateSteps(lang) {
intro.setOptions({ steps: steps[lang] });
}
Это позволяет комбинировать динамическую смену кнопок и содержимого без перезагрузки страницы или повторной инициализации Intro.js.
Иногда длина текста подсказки меняется в зависимости от языка. Для корректного отображения рекомендуется использовать следующие методы:
introJs().refresh() — пересчитывает позиции подсказок
после изменения текста..introjs-tooltip и
.introjs-tooltiptext для адаптивной ширины и переноса
текста.Пример обновления после смены языка:
updateSteps('en');
changeLanguage('en');
intro.refresh();
Для интерфейсов с языковыми переключателями удобно комбинировать
события click с функциями updateSteps и
changeLanguage:
document.querySelectorAll('.lang-btn').forEach(btn => {
btn.addEventListener('click', () => {
const lang = btn.dataset.lang;
updateSteps(lang);
changeLanguage(lang);
intro.refresh();
});
});
Это обеспечивает мгновенную локализацию подсказок и кнопок, даже если инструкция уже запущена.
introJs().start().intro.refresh() после изменения длины
текста или смены языка для корректного позиционирования подсказок.Intro.js поддерживает гибкую систему локализации, позволяя менять
язык кнопок и текста шагов на лету. Важным моментом является корректное
использование методов setOptions и refresh, а
также централизованное хранение переводов. Такая организация позволяет
легко масштабировать инструкцию для мультиязычных приложений и
поддерживать единый стиль интерфейса.