Naive UI изначально ориентирована на современные веб-приложения с гибкой системой кастомизации, включая полноценную поддержку RTL (Right-to-Left). Это особенно важно для языков с письмом справа налево, таких как арабский, иврит и персидский.
Для глобальной настройки направления текста используется провайдер
config-provider. Этот компонент позволяет
определить глобальные параметры интерфейса, включая
direction.
Пример конфигурации RTL:
import { createApp, h } from 'vue'
import { create naive } from 'naive-ui'
import App from './App.vue'
const naive = createNaive()
createApp({
render: () => h(App)
}).use(naive).mount('#app')
Чтобы активировать RTL, нужно использовать
NConfigProvider с атрибутом
direction:
import { NConfigProvider } from 'naive-ui'
export default {
setup() {
return () => (
<NConfigProvider direction="rtl">
<App />
</NConfigProvider>
)
}
}
После этого все компоненты Naive UI автоматически наследуют направление справа налево, включая выравнивание текста, иконок, кнопок и панелей.
Не всегда требуется включать RTL глобально. Для отдельных компонентов
можно задать параметр direction="rtl":
<NButton direction="rtl">Кнопка</NButton>
В этом случае только конкретная кнопка будет отображаться в RTL-режиме, а остальная часть интерфейса останется LTR (слева направо).
RTL в Naive UI автоматически корректирует:
text-align: right для элементов текста.NSelect,
NDropdown,
NCascader и
NSlider корректно меняют направление
стрелок и подсказок.Компоненты NDataTable и
NGrid автоматически учитывают направление
текста:
Пример использования NDataTable в RTL:
<NDataTable
columns={[
{ title: 'Имя', key: 'name' },
{ title: 'Возраст', key: 'age' }
]}
data={[
{ name: 'Али', age: 25 },
{ name: 'Сара', age: 30 }
]}
direction="rtl"
/>
Naive UI использует темизацию через
createTheme, которая полностью совместима с RTL.
При переключении направления все отступы, выравнивания и кастомные стили
темы автоматически инвертируются.
import { createTheme, NConfigProvider } from 'naive-ui'
const theme = createTheme({
common: {
primaryColor: '#409EFF'
}
})
<NConfigProvider theme={theme} direction="rtl">
<App />
</NConfigProvider>
Naive UI поддерживает динамическое изменение направления через
реактивный параметр. Например, используя ref из Vue:
import { ref } from 'vue'
const direction = ref('ltr')
// переключение направления
function toggleDirection() {
direction.value = direction.value === 'ltr' ? 'rtl' : 'ltr'
}
<NConfigProvider :direction="direction">
<App />
</NConfigProvider>
Все компоненты мгновенно реагируют на изменение и корректно адаптируют стиль без перезагрузки страницы.
transform: scaleX(-1).slide-in) — Naive UI корректирует их направление, но для
полностью кастомных анимаций нужно учитывать это отдельно.Naive UI обеспечивает полноценную RTL-поддержку
через глобальный и локальный direction, динамическое
переключение и интеграцию с темами. Это позволяет создавать интерфейсы
для любых языков с письмом справа налево без необходимости ручного
переопределения большинства стилей и логики расположения элементов.