Polymer предоставляет гибкие механизмы для работы с текстом и интерфейсами, ориентированными на правосторонние языки (Right-to-Left, RTL), такими как арабский или иврит. RTL-поддержка затрагивает как стили, так и структуру компонентов, обеспечивая корректное отображение текста и элементов пользовательского интерфейса.
Для корректного отображения контента используется атрибут
dir, который может принимать значения:
ltr — Left-to-Right, стандартное направление
текста.rtl — Right-to-Left, направление текста справа
налево.auto — автоматически определяется по языку
содержимого.Пример установки направления на уровне документа:
<html lang="ar" dir="rtl">
<body>
<my-element></my-element>
</body>
</html>
В Polymer компонентах атрибут dir можно наследовать от
родительского элемента или задавать локально внутри тега:
<dom-module id="my-element">
<template>
<div dir="rtl">هذا نص باللغة العربية</div>
</template>
<script>
class MyElement extends Polymer.Element {
static get is() { return 'my-element'; }
}
customElements.define(MyElement.is, MyElement);
</script>
</dom-module>
Polymer включает модули для автоматического управления стилями в зависимости от направления текста. Основные подходы:
:host([dir="rtl"]) {
--padding-start: 16px;
--padding-end: 0;
}
:host([dir="ltr"]) {
--padding-start: 0;
--padding-end: 16px;
}
.content {
padding-left: var(--padding-start);
padding-right: var(--padding-end);
}
@apply и миксины: для переопределения
стандартных стилей компонентов Polymer в RTL. Например, кнопки, карточки
и панели навигации могут изменять выравнивание текста и иконок без
изменения HTML-разметки.:host([dir="rtl"]) {
@apply --my-element-rtl-style;
}
polymer-rtl пакет: раньше существовал
модуль polymer-rtl, который автоматически зеркалировал
компоненты и применял соответствующие стили. В современных версиях
рекомендуется управлять RTL через CSS-переменные и атрибут
dir.Polymer активно использует Shadow DOM, что изолирует стили компонента от глобальных. Для корректной RTL-поддержки:
dir должен быть доступен внутри Shadow
DOM.:host([dir="rtl"]) для определения направления.Пример:
<dom-module id="rtl-card">
<template>
<style>
:host([dir="rtl"]) .title {
text-align: right;
margin-left: 0;
margin-right: 20px;
}
:host([dir="ltr"]) .title {
text-align: left;
margin-left: 20px;
margin-right: 0;
}
</style>
<div class="title">عنوان</div>
</template>
<script>
class RtlCard extends Polymer.Element {
static get is() { return 'rtl-card'; }
}
customElements.define(RtlCard.is, RtlCard);
</script>
</dom-module>
В Polymer можно менять направление интерфейса в реальном времени,
обновляя атрибут dir на корневом элементе или конкретном
компоненте:
document.documentElement.setAttribute('dir', 'rtl');
// или для компонента
document.querySelector('my-element').setAttribute('dir', 'rtl');
При изменении атрибута, все CSS-переменные и правила, зависящие от направления, автоматически применяются.
Если проект использует сторонние UI-библиотеки, важно учитывать:
:host([dir="rtl"]) для поддержания консистентного
интерфейса.dir на корневом уровне документа или
контейнера.:host([dir="rtl"]) вместо глобальных селекторов.Поддержка RTL в Polymer обеспечивает полноценную адаптацию интерфейсов для правосторонних языков, сохраняя гибкость и модульность компонентов, что критично для международных приложений.