useRtl — это реактивная функция в библиотеке
Vuetify, отвечающая за управление направлением
интерфейса: слева направо (LTR) или справа налево (RTL). Она особенно
важна при создании многоязычных приложений, где поддержка языков с
письмом справа налево (например, арабский или иврит) требуется наравне с
традиционным левосторонним расположением элементов.
Чтобы использовать useRtl, необходимо импортировать его
из Vuetify:
import { useRtl } from 'vuetify';
После импорта можно получить объект управления направлением интерфейса:
const rtl = useRtl();
Объект rtl содержит следующие ключевые свойства и
методы:
isRtl — реактивная переменная, принимающая значение
true при включенном режиме RTL и false при
LTR.rtl — более короткая алиасная форма, доступная для
работы внутри компонентов.setRtl(value: boolean) — функция для программного
переключения направления интерфейса.Пример программного переключения:
rtl.setRtl(true); // Включает RTL
rtl.setRtl(false); // Возвращает LTR
useRtl полностью интегрирован с реактивной системой Vue.
Изменения в rtl.isRtl автоматически обновляют визуальное
отображение компонентов, использующих направление текста, включая
VApp, VToolbar, VBtn,
VCard и многие другие.
Пример реактивного использования в шаблоне:
<template>
<v-app :class="{ 'rtl': rtl.isRtl }">
<v-toolbar>
<v-btn @click="toggleRtl">Переключить направление</v-btn>
</v-toolbar>
<v-card>
<v-card-text>
Текст внутри карты следует текущему направлению интерфейса
</v-card-text>
</v-card>
</v-app>
</template>
<script setup>
import { useRtl } from 'vuetify';
import { ref } from 'vue';
const rtl = useRtl();
function toggleRtl() {
rtl.setRtl(!rtl.isRtl);
}
</script>
<style>
.rtl {
direction: rtl;
}
</style>
В этом примере переключение rtl.isRtl приводит к
изменению класса rtl, что влияет на CSS-свойство
direction. Благодаря этому все текстовые и визуальные
компоненты корректно перестраиваются.
Для приложений с поддержкой нескольких языков useRtl
удобно интегрировать с библиотеками управления локализацией, например,
vue-i18n. После смены языка можно автоматически менять
направление интерфейса:
import { useI18n } from 'vue-i18n';
import { useRtl } from 'vuetify';
const { locale } = useI18n();
const rtl = useRtl();
watch(locale, (newLocale) => {
rtl.setRtl(['ar', 'he', 'fa'].includes(newLocale));
});
Такое решение позволяет динамически поддерживать нужное направление интерфейса в зависимости от выбранного языка без перезагрузки страницы.
Хотя Vuetify автоматически применяет RTL к большинству компонентов, иногда необходимо вручную корректировать CSS для кастомных элементов:
direction: rtl для контейнеров текста и
блоков с содержимым.text-align: right там, где требуется
выравнивание текста по правому краю.useRtl влияет на все компоненты
Vuetify, зарегистрированные в текущем приложении.rtl.isRtl.useRtl может использоваться совместно с глобальной
конфигурацией Vuetify:
import { createVuetify } from 'vuetify';
const vuetify = createVuetify({
rtl: true, // включение RTL по умолчанию
});
Глобальное включение rtl задает начальное состояние для
всех компонентов, но при этом useRtl сохраняет возможность
динамического переключения внутри отдельных компонентов или страниц.
useRtl обеспечивает удобный и реактивный способ
управления направлением интерфейса в Vuetify,
поддерживая как статическое, так и динамическое переключение между LTR и
RTL. Комбинируя его с реактивными свойствами Vue и системами
локализации, можно создать гибкое многоязычное приложение с корректной
визуальной адаптацией для всех языков.