编辑器国际化
编辑器文案通过 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 时,titleKey 和 labelKey 会覆盖静态 fallback 文本。没有对应翻译时,设计器继续显示 title 与 label,因此新增业务物料不会让面板变成空白。
切换编辑器语言
createDesigner() 已合并 designer 和 renderer 的默认中英文文案。业务只传入需要增加或覆盖的部分:
ts
function toggleLocale() {
const next = designer.i18n.locale.value === 'zh-CN' ? 'en' : 'zh-CN'
designer.i18n.setLocale(next)
}分组标题使用 WidgetGroupConfig.titleKey,物料卡片标题和说明使用 material.titleKey、descriptionKey,表单还支持 placeholderKey 与 optionKeyPrefix。同一语言键可以由默认文案和业务文案逐步合并。
不要把页面内容与编辑器文案混在一起
messages 翻译的是“物料”“删除”“公告文字”这类编辑器 UI,不会自动翻译节点 props.text 或商品标题。多语言页面内容需要由你的业务 Schema 建模,并由生产运行时根据语言解析。
需要保存、导入或迁移这些页面数据时,继续阅读 Schema 生命周期。