Tippy.js предоставляет мощный инструмент для создания всплывающих подсказок и тултипов в веб-приложениях. Для проектов с международной аудиторией важно, чтобы содержимое подсказок было локализовано и динамически адаптировалось к языку пользователя. Tippy.js не имеет встроенной системы локализации, однако его гибкая архитектура позволяет интегрировать локализацию через шаблоны, функции и внешние библиотеки.
content для динамического текстаКлючевым методом для локализации является использование свойства
content при инициализации Tippy. Вместо передачи строки
напрямую, можно использовать функцию, которая возвращает текст в
зависимости от текущего языка:
import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
const translations = {
en: {
tooltip: "Click to submit"
},
ru: {
tooltip: "Нажмите для отправки"
},
fr: {
tooltip: "Cliquez pour soumettre"
}
};
const currentLang = 'ru'; // динамически определяется в приложении
tippy('#submitButton', {
content: () => translations[currentLang].tooltip,
placement: 'top',
theme: 'light'
});
Преимущества использования функции для
content:
В тултипах часто нужно отображать переменные данные, например, имя
пользователя или число элементов. Для локализации важно правильно
форматировать строки с параметрами. Tippy.js позволяет передавать HTML
или текст через функцию content:
const translations = {
ru: {
items: "У вас {count} новых сообщений"
}
};
function localize(template, params) {
return template.replace(/\{(\w+)\}/g, (_, key) => params[key] || '');
}
const messagesCount = 5;
const currentLang = 'ru';
tippy('#messagesButton', {
content: () => localize(translations[currentLang].items, { count: messagesCount }),
placement: 'bottom'
});
Особенности:
Tippy.js поддерживает использование HTML для создания сложных
подсказок с форматированием. Для локализации важно, чтобы HTML-шаблоны
не нарушали структуру документа. Можно использовать функцию
content с возвращаемым элементом DOM:
const translations = {
ru: {
tooltipHTML: `<strong>Важная информация:</strong> действие завершено`
}
};
tippy('#infoButton', {
allowHTML: true,
content: () => {
const container = document.createElement('div');
container.innerHTML = translations['ru'].tooltipHTML;
return container;
}
});
Рекомендации:
allowHTML: true только при проверенных
источниках HTML.Tippy.js позволяет обновлять содержимое после создания через метод
setContent. Это полезно, если пользователь меняет язык на
лету:
const tooltipInstance = tippy('#saveButton', {
content: translations['en'].tooltip
});
// смена языка на русский
tooltipInstance.setContent(translations['ru'].tooltip);
Преимущества такого подхода:
Для крупных приложений рекомендуется использовать специализированные
библиотеки локализации, такие как i18next или
Polyglot.js. Tippy.js прекрасно сочетается с ними:
import i18next from 'i18next';
tippy('#profileButton', {
content: () => i18next.t('tooltip.profile'),
placement: 'right'
});
// смена языка
i18next.changeLanguage('ru');
Преимущества интеграции:
Для языков с правосторонним письмом (например, арабский, иврит) важно
корректно отображать тултипы. В Tippy.js можно использовать комбинацию
placement и CSS-классов для адаптации:
tippy('#rtlButton', {
content: 'مثال',
placement: 'left-start', // корректное расположение для RTL
popperOptions: {
modifiers: [
{
name: 'flip',
options: { fallbackPlacements: ['right-start'] }
}
]
}
});
Особенности:
flip позволяет тултипу менять сторону при нехватке
места.direction: rtl для
внутреннего текста тултипа.content вместо статического
текста.setContent
вместо пересоздания тултипа.placement и
CSS-наследования.Локализация Tippy.js строится на гибкой настройке контента и динамическом управлении текстом, что позволяет создавать многоязычные и безопасные веб-приложения с удобными подсказками.