Skip to content

编辑器国际化

编辑器文案通过 messages 合并,物料和表单通过 *Key 字段引用语言键。先声明业务物料的中英文文案:

ts
import { createDesigner } from '@dragcraft/designer'

const messages = {
  'zh-CN': {
    widget: { notice: { title: '公告', text: '公告文字' } },
  },
  en: {
    widget: { notice: { title: 'Notice', text: 'Notice text' } },
  },
}

const noticeMeta = {
  type: 'notice',
  title: '公告',
  titleKey: 'widget.notice.title',
  group: 'marketing',
  defaultProps: {},
  formSchema: {
    sections: [{
      title: '内容',
      fields: [{
        key: 'text',
        label: '公告文字',
        labelKey: 'widget.notice.text',
        component: 'Input',
      }],
    }],
  },
}

const designer = createDesigner({
  widgetMetas: [noticeMeta],
  componentMap,
  messages,
})

当当前语言中存在对应 key 时,titleKeylabelKey 会覆盖静态 fallback 文本。没有对应翻译时,设计器继续显示 titlelabel,因此新增业务物料不会让面板变成空白。

切换编辑器语言

createDesigner() 已合并 designer 和 renderer 的默认中英文文案。业务只传入需要增加或覆盖的部分:

ts
function toggleLocale() {
  const next = designer.i18n.locale.value === 'zh-CN' ? 'en' : 'zh-CN'
  designer.i18n.setLocale(next)
}

分组标题使用 WidgetGroupConfig.titleKey,物料卡片标题和说明使用 material.titleKeydescriptionKey,表单还支持 placeholderKeyoptionKeyPrefix。同一语言键可以由默认文案和业务文案逐步合并。

不要把页面内容与编辑器文案混在一起

messages 翻译的是“物料”“删除”“公告文字”这类编辑器 UI,不会自动翻译节点 props.text 或商品标题。多语言页面内容需要由你的业务 Schema 建模,并由生产运行时根据语言解析。

需要保存、导入或迁移这些页面数据时,继续阅读 Schema 生命周期