Локализация
В lh-ui-plus встроена поддержка локализации: языковые пакеты для китайского (zh-CN) и английского (en-US). Поддерживаются переключение во время выполнения, пользовательские языковые пакеты и загрузка по требованию.
Глобальная настройка
Язык настраивается через проп locale компонента LhConfigProvider.
Composition API
vue
<script setup lang="ts">
import { ref, computed } from 'vue'
import { LhConfigProvider, LhInput, LhButton, zhCN, enUS } from '@lh-ui/vue3'
const locale = ref('zh-CN')
const messages = computed(() => locale.value === 'zh-CN' ? zhCN : enUS)
</script>
<template>
<LhConfigProvider :locale="messages">
<LhInput placeholder="Введите содержимое" />
<LhButton @click="locale = locale === 'zh-CN' ? 'en-US' : 'zh-CN'">
Переключить язык
</LhButton>
</LhConfigProvider>
</template>Options API
vue
<script>
import { LhConfigProvider, LhInput, LhButton, zhCN, enUS } from '@lh-ui/vue3'
export default {
data() {
return { locale: 'zh-CN' }
},
methods: {
toggleLocale() {
this.locale = this.locale === 'zh-CN' ? 'en-US' : 'zh-CN'
},
},
}
</script>
<template>
<LhConfigProvider :locale="locale === 'zh-CN' ? zhCN : enUS">
<LhInput placeholder="Введите содержимое" />
<LhButton @click="toggleLocale">Переключить язык</LhButton>
</LhConfigProvider>
</template>Использование API lhlocale
lhlocale — глобальный экземпляр локали с API-одиночкой, подходит для переключения языка между компонентами.
Composition API
vue
<script setup lang="ts">
import { ref, computed } from 'vue'
import { lhlocale, zhCN, enUS } from '@lh-ui/vue3'
const locale = ref('zh-CN')
function toggle() {
const next = locale.value === 'zh-CN' ? 'en-US' : 'zh-CN'
lhlocale.use({ locale: next, messages: next === 'zh-CN' ? zhCN : enUS })
locale.value = next
}
const placeholder = computed(() => lhlocale.t('input.placeholder'))
</script>
<template>
<LhInput :placeholder="placeholder" />
<LhButton @click="toggle">Переключить язык</LhButton>
</template>Options API
vue
<script>
import { lhlocale, zhCN, enUS } from '@lh-ui/vue3'
export default {
data() {
return { locale: 'zh-CN' }
},
computed: {
placeholder() {
return lhlocale.t('input.placeholder')
},
},
methods: {
toggle() {
const next = this.locale === 'zh-CN' ? 'en-US' : 'zh-CN'
lhlocale.use({ locale: next, messages: next === 'zh-CN' ? zhCN : enUS })
this.locale = next
},
},
}
</script>
<template>
<LhInput :placeholder="placeholder" />
<LhButton @click="toggle">Переключить язык</LhButton>
</template>Структура языкового пакета
Ключи языкового пакета используют точечную нотацию, уровни соответствуют модулям компонентов:
ts
// zh-CN.ts
export default {
common: { loading: '加载中' },
input: { placeholder: '请输入', password: '密码' },
select: { placeholder: '请选择', noMatch: '无匹配数据', noData: '暂无数据' },
form: { validateFailed: '校验失败', required: '此项为必填' },
datepicker: { now: '此刻', today: '今天', cancel: '取消', confirm: '确定' },
timepicker: { now: '此刻', confirm: '确定', cancel: '取消' },
cascader: { placeholder: '请选择', noMatch: '无匹配数据' },
dialog: { close: '关闭对话框' },
// ... 更多组件语言
}Пользовательские языковые пакеты
Добавление нового языка
ts
import { lhlocale } from '@lh-ui/vue3'
const jaJP = {
input: { placeholder: '入力してください', password: 'パスワード' },
select: { placeholder: '選択してください', noMatch: '該当なし', noData: 'データなし' },
form: { validateFailed: '検証失敗', required: '必須アイテムです' },
}
// Регистрируем как 'ru-RU'
lhlocale.add('ru-RU', ruRU)
lhlocale.setLocale('ru-RU')Переопределение переводов по умолчанию
ts
import { lhlocale, zhCN } from '@lh-ui/vue3'
const customZh = {
...zhCN,
input: {
placeholder: '自定义占位符',
password: '密码',
},
}
lhlocale.use({ locale: 'zh-CN', messages: customZh })Реактивное состояние
Компоненты используют lhlocale.version для реактивного обновления. При переключении языка version автоматически увеличивается, заставляя зависимые computed пересчитаться.
Composition API
vue
<script setup lang="ts">
import { computed } from 'vue'
import { lhlocale } from '@lh-ui/vue3'
const t = (path: string) => lhlocale.t(path)
const currentLocale = computed(() => lhlocale.getLocale())
</script>Options API
vue
<script>
import { lhlocale } from '@lh-ui/vue3'
export default {
computed: {
currentLocale() {
return lhlocale.getLocale()
},
},
methods: {
t(path) {
return lhlocale.t(path)
},
},
}
</script>Рекомендации
- Предпочитайте
LhConfigProvider— это рекомендуемый способ: достаточно передать пропlocale, и все дочерние компоненты подхватят его автоматически - Синхронизируйте языковой пакет целиком — при добавлении нового пакета убедитесь, что покрыты ключевые тексты всех компонентов
- Избегайте хардкода — видимые пользователю тексты помещайте в языковой пакет и получайте динамически через
lhlocale.t() - Язык по умолчанию — язык проекта по умолчанию
zh-CN(определён константойLH_LANGUAGE_DEFAULT)