Skip to content

国际化 ​

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'

内置语言 ​

语言主入口导出子路径
简体中文localeZhCnd-render/locale/lang/zh-cn
英语localeEnd-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.sqlSQL 简单校验失败—

外部扩展语言(如泰语) ​

不必修改 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搜索按钮文案

注意事项 ​

  1. 搜索 / 重置按钮:默认文案来自 @xdp/button,不在 d-render locale 内;需业务侧或 button 库自行国际化,也可通过 operation 插槽完全自定义。
  2. 字段 label / placeholder / options:属于业务数据,请在业务层做多语言,不由组件库 locale 翻译。
  3. Day.js:若使用 Element Plus 日期类组件,需按 Element Plus 文档 单独设置 Day.js locale。