Ant Design (AntD) предоставляет встроенные механизмы для работы с интерфейсами, поддерживающими направление текста справа налево (Right-to-Left, RTL). Это особенно важно при создании приложений для языков, таких как арабский, иврит или персидский, где стандартное направление слева направо (LTR) не подходит. Правильная настройка RTL обеспечивает корректное отображение компонентов, верстки, иконок и взаимодействий.
Для глобального применения RTL необходимо использовать
ConfigProvider. Этот компонент оборачивает всё приложение и
передаёт настройки для всех дочерних компонентов.
Пример:
import React from 'react';
import ReactDOM from 'react-dom';
import { ConfigProvider, Button } from 'antd';
import 'antd/dist/antd.css';
const App = () => (
<ConfigProvider direction="rtl">
<Button type="primary">Кнопка RTL</Button>
</ConfigProvider>
);
ReactDOM.render(<App />, document.getElementById('root'));
Ключевые моменты:
direction может принимать значения
'ltr' и 'rtl'.Хотя глобальное управление через ConfigProvider является
стандартным, иногда требуется включить RTL только для отдельных
компонентов. Для этого можно обернуть нужный компонент отдельным
ConfigProvider.
Пример:
import { ConfigProvider, Menu } from 'antd';
const MyMenu = () => (
<ConfigProvider direction="rtl">
<Menu mode="horizontal">
<Menu.Item key="1">Главная</Menu.Item>
<Menu.Item key="2">О нас</Menu.Item>
<Menu.Item key="3">Контакты</Menu.Item>
</Menu>
</ConfigProvider>
);
Особенности локального RTL:
ConfigProvider переопределяет глобальные
настройки только для дочерних компонентов.AntD использует библиотеку @ant-design/icons для
отображения SVG-иконок. При переключении на RTL важно учитывать
направление стрелок и навигационных элементов.
Пример настройки стрелки:
import { LeftOutlined, RightOutlined } from '@ant-design/icons';
import { Button, ConfigProvider } from 'antd';
const NavigationButtons = () => (
<ConfigProvider direction="rtl">
<Button icon={<RightOutlined />}>Назад</Button>
<Button icon={<LeftOutlined />}>Вперёд</Button>
</ConfigProvider>
);
Замечания:
AntD Grid (Row и Col) корректно работает с
RTL без дополнительных изменений. Основные правила:
offset, pull, push
автоматически адаптируются под направление текста.justify="start" | "end" | "center") корректно отражает
направление.Пример:
import { Row, Col, ConfigProvider } from 'antd';
const GridExample = () => (
<ConfigProvider direction="rtl">
<Row justify="end" gutter={16}>
<Col span={8}>Левая колонка</Col>
<Col span={8}>Правая колонка</Col>
</Row>
</ConfigProvider>
);
AntD предоставляет возможность кастомизировать RTL через LESS-переменные или CSS. Основные подходы:
body[dir="rtl"] {
direction: rtl;
}
@import "~antd/dist/antd.less";
@direction: rtl;
ConfigProvider + локальные CSS-коррекции для нестандартных
компонентов.Некоторые компоненты требуют дополнительного внимания при переходе на RTL:
placement.AntD позволяет менять направление текста динамически через состояние React. Пример:
import React, { useState } from 'react';
import { ConfigProvider, Button } from 'antd';
const DynamicRTL = () => {
const [rtl, setRtl] = useState(false);
return (
<ConfigProvider direction={rtl ? "rtl" : "ltr"}>
<Button onCl ick={() => setRtl(!rtl)}>Переключить направление</Button>
<p>Текст будет адаптироваться под выбранное направление.</p>
</ConfigProvider>
);
};
Особенности:
ConfigProvider автоматически
пересчитывают отступы и выравнивание.Использование ConfigProvider с
direction="rtl" обеспечивает:
Правильная конфигурация RTL в Ant Design позволяет создавать полноценные интерфейсы для многоязычных приложений, обеспечивая удобство и естественность взаимодействия для пользователей RTL-языков.