Интернационализация SVG-анимаций в контексте Vivus начинается с
понимания того, что сама библиотека работает исключительно с путями
(path) и не зависит напрямую от текстового содержимого. Это
создаёт важное разделение: анимация линий и контуров остаётся
стабильной, тогда как языковая локализация затрагивает в первую очередь
текстовые элементы, структуру SVG и его компоновку.
SVG-документ в мультиязычных интерфейсах обычно состоит из двух независимых слоёв:
<text>,
<tspan>, <foreignObject>)Такое разделение критично, поскольку Vivus модифицирует только
атрибуты путей (stroke-dasharray,
stroke-dashoffset), не затрагивая DOM текстовых узлов. Это
означает, что изменение языка не влияет на механику анимации, но может
радикально менять визуальную композицию.
SVG поддерживает несколько способов размещения текста:
<text> и
<tspan>Наиболее предсказуемый вариант для интернационализации. Текст остаётся векторным, легко стилизуется через CSS и поддерживает базовые трансформации.
Ключевые аспекты локализации:
<tspan>text-anchorПри переключении языка часто требуется пересчёт координат:
const translations = {
en: "Loading data",
ru: "Загрузка данных",
de: "Daten werden geladen"
};
textNode.textContent = translations[locale];
Даже такая простая замена может нарушить композицию, если текст встроен в сложный SVG-контур.
<foreignObject>Позволяет использовать HTML внутри SVG. Это радикально упрощает локализацию, поскольку текст становится обычным DOM-элементом.
Особенности:
Однако Vivus не управляет содержимым foreignObject,
поэтому синхронизация с анимацией должна выполняться отдельно через
JavaScript.
Поддержка арабского и ивритского языков требует учёта направления текста. В SVG это регулируется через атрибут:
<text direction="rtl" unicode-bidi="bidi-override">
или через CSS:
direction: rtl;
unicode-bidi: isolate;
Проблемы, возникающие при интеграции с анимацией:
<g transform="scale(-1,1)">)Vivus продолжает анимацию по исходным path, поэтому визуальное восприятие может конфликтовать с направлением чтения.
При использовании SVG-текста ключевую роль играет поддержка шрифтов:
Важно учитывать:
Пример настройки:
text {
font-family: "Noto Sans", "Arial", sans-serif;
}
При отсутствии корректного шрифта SVG может отображать пустые символы или заменители, что визуально разрушает композицию, особенно в анимированных сценах Vivus.
Языковая локализация напрямую влияет на геометрию интерфейса:
Если текст встроен в фиксированную SVG-композицию, возникают проблемы:
Решения:
viewBox с адаптивным
масштабированиемfont-sizeVivus инициализирует анимацию на основе структуры DOM в момент создания экземпляра:
new Vivus('svg-id', {
type: 'delayed',
duration: 200
});
При смене языка возможны два подхода:
Наиболее надёжный вариант:
Преимущества:
Недостатки:
Если SVG остаётся неизменным:
Риск:
SVG поддерживает базовую семантику через атрибуты:
<svg role="img" aria-label="График загрузки">
<title>Loading chart</title>
<desc>Animated progress indicator</desc>
</svg>
Для мультиязычных интерфейсов важно синхронизировать:
aria-label<title><desc>langПример:
<svg lang="ru">
или динамически:
svg.setAttribute('lang', locale);
Несогласованность этих значений приводит к проблемам:
Типовая архитектура мультиязычного SVG-интерфейса включает слой конфигурации:
const locales = {
en: {
title: "Download",
label: "Download button"
},
ru: {
title: "Скачать",
label: "Кнопка загрузки"
}
};
Функция обновления:
function setLocale(locale) {
document.querySelector('#title').textContent = locales[locale].title;
document.querySelector('svg').setAttribute('lang', locale);
}
При этом Vivus остаётся независимым компонентом, не требующим пересоздания, если меняется только текст.
В сложных анимациях SVG используется как контейнер сцен, где каждый язык может требовать отдельной композиции:
В таких случаях применяются отдельные SVG-файлы:
scene-en.svgscene-ru.svgscene-ar.svgИнициализация Vivus происходит отдельно для каждого ресурса, что обеспечивает максимальную предсказуемость поведения анимации.
Основная особенность Vivus заключается в том, что он не осознаёт семантику содержимого. Он работает исключительно с геометрией.
Это приводит к ряду архитектурных ограничений:
Поэтому любые языковые изменения должны рассматриваться как изменения сцены, а не как косметическая правка текста.
Используются следующие подходы:
viewBox вместо фиксированных
размеровТакая архитектура позволяет сохранять стабильность Vivus-анимации при любом количестве языковых вариаций, не нарушая визуальную целостность сцены.