Библиотека Intro.js поддерживает локализацию интерфейса, позволяя адаптировать подсказки, кнопки и сообщения под язык пользователя. Автоопределение языка повышает удобство взаимодействия, особенно для веб-приложений с международной аудиторией.
Intro.js использует объект конфигурации
introJs().setOptions({...}) для задания локализованных
текстов кнопок и подсказок. Чтобы автоматически определить язык
пользователя, применяется стандартный API браузера:
const userLang = navigator.language || navigator.userLanguage;
navigator.language возвращает строку вида
"en-US", "ru-RU", "fr-FR".navigator.userLanguage служит
запасным вариантом (например, для старых версий Internet Explorer).Intro.js поставляется с предустановленными локализациями
(i18n). Для корректной работы необходимо сопоставить язык
браузера с поддерживаемой локалью Intro.js:
const availableLanguages = ["en", "ru", "fr", "de", "es"];
let langCode = userLang.split('-')[0]; // Извлекаем "en" из "en-US"
if (!availableLanguages.includes(langCode)) {
langCode = "en"; // Язык по умолчанию
}
После определения языка можно задать текст кнопок через метод
setOptions. Пример для нескольких языков:
const i18nTexts = {
en: { nextLabel: "Next", prevLabel: "Back", skipLabel: "Skip", doneLabel: "Done" },
ru: { nextLabel: "Далее", prevLabel: "Назад", skipLabel: "Пропустить", doneLabel: "Готово" },
fr: { nextLabel: "Suivant", prevLabel: "Précédent", skipLabel: "Passer", doneLabel: "Terminé" }
};
introJs().setOptions({
nextLabel: i18nTexts[langCode].nextLabel,
prevLabel: i18nTexts[langCode].prevLabel,
skipLabel: i18nTexts[langCode].skipLabel,
doneLabel: i18nTexts[langCode].doneLabel
}).start();
i18nTexts может быть расширен до любых языков и
любых элементов интерфейса.setOptions применяется перед вызовом
.start(), чтобы все элементы подсказок корректно
отображались на нужном языке.Для повторного использования логики автоопределения удобно создать отдельную функцию:
function getIntroJsLocalization() {
const userLang = navigator.language || navigator.userLanguage;
const langCode = (userLang.split('-')[0] || 'en');
const i18nTexts = {
en: { nextLabel: "Next", prevLabel: "Back", skipLabel: "Skip", doneLabel: "Done" },
ru: { nextLabel: "Далее", prevLabel: "Назад", skipLabel: "Пропустить", doneLabel: "Готово" },
fr: { nextLabel: "Suivant", prevLabel: "Précédent", skipLabel: "Passer", doneLabel: "Terminé" }
};
return i18nTexts[langCode] || i18nTexts.en;
}
const localization = getIntroJsLocalization();
introJs().setOptions(localization).start();
Intro.js позволяет задавать не только кнопки, но и текст подсказок
для шагов (intro). При автоопределении языка можно
динамически подставлять локализованные тексты:
const steps = {
en: [
{ element: '#step1', intro: 'Welcome to the tutorial!' },
{ element: '#step2', intro: 'Click here to proceed.' }
],
ru: [
{ element: '#step1', intro: 'Добро пожаловать в учебник!' },
{ element: '#step2', intro: 'Нажмите здесь, чтобы продолжить.' }
]
};
introJs().setOptions({
steps: steps[langCode] || steps.en,
...getIntroJsLocalization()
}).start();
Важно предусмотреть сценарий, когда язык пользователя не поддерживается:
const fallbackLang = 'en';
const selectedLang = availableLanguages.includes(langCode) ? langCode : fallbackLang;
ru-RU,
en-GB) обеспечивается через разбор строки
navigator.language и сопоставление с основным кодом
языка.Автоопределение языка в Intro.js обеспечивает максимально удобный и персонализированный пользовательский опыт, делая подсказки интуитивно понятными для любой аудитории.