d-render
Version:
基于 Element Plus 二次封装的数据驱动渲染组件库 - 表单、搜索表单、表格配置化渲染
37 lines (31 loc) • 1.25 kB
text/typescript
import type { Language, Translator, TranslatorOption, TranslatePair } from './types'
import zhCn from './lang/zh-cn'
export type { Language, Translator, TranslatorOption, TranslatePair }
export { default as zhCn } from './lang/zh-cn'
export { default as en } from './lang/en'
export const defaultLocale: Language = zhCn as Language
const getByPath = (obj: unknown, path: string): unknown => {
if (!obj || !path) return undefined
const keys = path.split('.')
let current: unknown = obj
for (const key of keys) {
if (current == null || typeof current !== 'object') return undefined
current = (current as Record<string, unknown>)[key]
}
return current
}
export const translate = (
path: string,
option: TranslatorOption | undefined,
locale: Language
): string => {
const value = getByPath(locale, path)
const text = typeof value === 'string' ? value : path
return text.replace(/\{(\w+)\}/g, (_, key: string) => `${option?.[key] ?? `{${key}}`}`)
}
export const buildTranslator = (locale: Language | (() => Language)): Translator => {
return (path, option) => {
const current = typeof locale === 'function' ? locale() : locale
return translate(path, option, current)
}
}