d-render
Version:
基于 Element Plus 二次封装的数据驱动渲染组件库 - 表单、搜索表单、表格配置化渲染
34 lines (28 loc) • 1 kB
text/typescript
import { computed, inject, isRef, ref, unref } from 'vue'
import type { InjectionKey, MaybeRef, Ref } from 'vue'
import {
buildTranslator,
defaultLocale,
type Language,
type Translator
} from '../locale'
export type { Language, Translator }
export type LocaleContext = {
locale: Ref<Language>
lang: Ref<string>
t: Translator
}
export const localeContextKey: InjectionKey<Ref<Language | undefined>> = Symbol('drLocaleContextKey')
export const buildLocaleContext = (locale: MaybeRef<Language>): LocaleContext => {
const lang = computed(() => unref(locale).name)
const localeRef = isRef(locale) ? locale : ref(locale)
return {
lang,
locale: localeRef as Ref<Language>,
t: buildTranslator(() => unref(locale))
}
}
export const useLocale = (localeOverrides?: Ref<Language | undefined>) => {
const locale = localeOverrides || inject(localeContextKey, ref())!
return buildLocaleContext(computed(() => locale.value || defaultLocale))
}