Appearance
国际化
d-render 的国际化方案与 Element Plus 对齐:通过 locale 语言包 + DrConfigProvider 注入 + useLocale / t() 切换文案。
未配置时默认使用 简体中文(zh-cn),与历史行为兼容。
基本用法
与 ElConfigProvider 并列使用,分别控制 Element Plus 与 d-render 的文案:
vue
<template>
<el-config-provider :locale="elLocale">
<dr-config-provider :locale="drLocale">
<App />
</dr-config-provider>
</el-config-provider>
</template>
<script setup>
import { computed, ref } from 'vue'
import { ElConfigProvider } from 'element-plus'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
import en from 'element-plus/es/locale/lang/en'
import {
DrConfigProvider,
localeZhCn,
localeEn
} from 'd-render'
const lang = ref('zh-cn')
const elLocale = computed(() => (lang.value === 'zh-cn' ? zhCn : en))
const drLocale = computed(() => (lang.value === 'zh-cn' ? localeZhCn : localeEn))
</script>也可按需从子路径引入语言包:
js
import zhCn from 'd-render/locale/lang/zh-cn'
import en from 'd-render/locale/lang/en'内置语言
| 语言 | 主入口导出 | 子路径 |
|---|---|---|
| 简体中文 | localeZhCn | d-render/locale/lang/zh-cn |
| 英语 | localeEn | d-render/locale/lang/en |
文案 Key
语言包结构为 { name, dr },组件内通过 t('dr.xxx.yyy') 读取。当前内置 key:
| Key | 说明 | 插值 |
|---|---|---|
dr.table.emptyText | 表格空数据文案 | — |
dr.table.index | 序号列标题 | — |
dr.table.handler | 操作列标题 | — |
dr.form.directory | 表单目录抽屉标题 | — |
dr.form.waitingUpload | 等待文件上传提示 | — |
dr.form.tip | 提示标题 | — |
dr.form.requiredInput | 必填(输入类) | {label} |
dr.form.requiredSelect | 必填(选择类) | {label} |
dr.form.requiredEndTime | 日期范围结束时间必填 | {message} |
dr.form.regexpFail | 正则校验失败 | {pattern} |
dr.form.alreadyExists | 远程存在性校验失败 | — |
dr.form.email | 邮箱格式错误 | — |
dr.form.identityCard | 身份证格式错误 | — |
dr.form.mobilePhone | 手机号格式错误 | — |
dr.form.sql | SQL 简单校验失败 | — |
外部扩展语言(如泰语)
不必修改 d-render 源码。在业务侧定义符合 Language 类型的对象,传入 DrConfigProvider 即可:
ts
import type { Language } from 'd-render'
const th: Language = {
name: 'th',
dr: {
table: {
emptyText: 'ไม่มีข้อมูล',
index: 'ลำดับ',
handler: 'การดำเนินการ'
},
form: {
directory: 'สารบัญแบบฟอร์ม',
waitingUpload: 'กรุณารอการอัปโหลดไฟล์ให้เสร็จสิ้น',
tip: 'คำแนะนำ',
requiredInput: 'กรุณากรอก {label}',
requiredSelect: 'กรุณาเลือก {label}',
requiredEndTime: '{message}-เวลาสิ้นสุด',
regexpFail: 'ไม่ผ่านการตรวจสอบ {pattern}',
alreadyExists: 'มีอยู่แล้ว',
email: 'กรุณากรอกอีเมลให้ถูกต้อง',
identityCard: 'กรุณากรอกเลขบัตรประชาชนให้ถูกต้อง',
mobilePhone: 'กรุณากรอกเบอร์โทรศัพท์ให้ถูกต้อง',
sql: 'คำสั่ง SQL ต้องขึ้นต้นด้วย select'
}
}
}vue
<dr-config-provider :locale="th">
<App />
</dr-config-provider>Element Plus 侧请同步使用对应语言包(如 element-plus/es/locale/lang/th)。
建议
- 以
localeEn/localeZhCn为模板拷贝后改写,避免漏 key。 - 当前库内没有自动 deep merge:缺 key 时
t()会回退为 path 字符串(如dr.table.emptyText),不会自动用中/英文补全。 - 若只需覆盖部分文案,可在业务侧自行 deep merge 后再传入。
在组件内使用 useLocale
自定义组件或业务代码可读取当前语言与翻译函数:
vue
<script setup>
import { useLocale } from 'd-render'
const { t, lang, locale } = useLocale()
// t('dr.table.emptyText')
// lang.value === 'zh-cn'
</script>嵌套 DrConfigProvider 时,子级未传 locale 会继承父级;均未设置时回退默认 zh-cn。
与业务配置的优先级
以下 prop / 字段配置优先于 locale 默认文案:
| 配置 | 覆盖内容 |
|---|---|
DrTable 的 seqLabel | 序号列标题 |
requiredErrorMessage | 必填错误信息 |
regexpValidateErrorMessage | 正则校验错误信息 |
validateExistRemoteErrorMessage | 远程存在性校验错误信息 |
validateValueErrorMessage | 内置类型校验错误信息 |
searchButtonText | 搜索按钮文案 |
注意事项
- 搜索 / 重置按钮:默认文案来自
@xdp/button,不在d-renderlocale 内;需业务侧或 button 库自行国际化,也可通过operation插槽完全自定义。 - 字段
label/placeholder/options:属于业务数据,请在业务层做多语言,不由组件库 locale 翻译。 - Day.js:若使用 Element Plus 日期类组件,需按 Element Plus 文档 单独设置 Day.js locale。