Naive UI предоставляет гибкую систему локализации, которая позволяет
динамически менять язык интерфейса компонентов. Основной инструмент для
этого — объект globalConfigProvider и поддержка
locale через предоставляемые локали.
Библиотека поставляется с готовыми локалями для большинства основных языков. Локали подключаются следующим образом:
import { createApp } from 'vue'
import { createNaiveUI, NButton } from 'naive-ui'
import zhCN from 'naive-ui/es/locales/zh_CN'
import enUS from 'naive-ui/es/locales/en_US'
const naive = createNaiveUI({
components: [NButton],
locale: zhCN
})
const app = createApp(App)
app.use(naive)
app.mount('#app')
В примере выше начальная локаль установлена на китайский. Для смены
на английский достаточно передать enUS в
locale.
Naive UI позволяет менять локаль на лету без перезагрузки страницы.
Для этого используется провайдер globalConfigProvider:
import { createApp, ref } from 'vue'
import { NConfigProvider, NButton } from 'naive-ui'
import zhCN from 'naive-ui/es/locales/zh_CN'
import enUS from 'naive-ui/es/locales/en_US'
const app = createApp({
setup() {
const currentLocale = ref(zhCN)
const switchLanguage = (lang) => {
currentLocale.value = lang === 'en' ? enUS : zhCN
}
return { currentLocale, switchLanguage }
},
template: `
<n-config-provider :locale="currentLocale">
<n-button @click="switchLanguage('en')">English</n-button>
<n-button @click="switchLanguage('zh')">中文</n-button>
<n-button>Тест кнопки</n-button>
</n-config-provider>
`
})
app.use(NConfigProvider)
app.mount('#app')
Ключевые моменты:
NConfigProvider оборачивает компоненты, на которые
нужно применить локаль.locale принимает объект локали, который автоматически
обновляет тексты компонентов.ref автоматически ререндерит все дочерние
компоненты.Для специфических приложений можно создать собственную локаль:
const ruRU = {
locale: 'ru-RU',
global: {
undo: 'Отменить',
redo: 'Повторить',
confirm: 'Подтвердить',
cancel: 'Отмена'
},
Button: {
loading: 'Загрузка...'
}
}
После чего можно использовать её так же, как стандартные локали:
<n-config-provider :locale="ruRU">
<n-button>Проверка</n-button>
</n-config-provider>
Naive UI полностью поддерживает реактивные данные. При использовании динамической смены языка внутри сложных форм, таблиц или диалогов необходимо:
NConfigProvider.NConfigProvider.Некоторые компоненты, например NDataTable или
NInput, используют встроенные сообщения:
const ruRU = {
DataTable: {
filter: 'Фильтр',
clearFilter: 'Очистить фильтр',
selectAll: 'Выбрать всё'
},
Input: {
placeholder: 'Введите текст'
}
}
При смене locale все эти строки автоматически
обновляются без дополнительного вмешательства.
import() для
снижения размера основного бандла.Система смены языка в Naive UI построена вокруг реактивности Vue и
NConfigProvider, что делает её удобной для динамических
приложений с мультиязычным интерфейсом.