国际化
内置语言:zh-CN、en-US。
基本用法
<YanivEditor locale="zh-CN" />
<YanivEditor locale="en-US" />
<YanivInlineEditor locale="en-US" v-model:content="html" />normalizeLocaleCode 映射:
zh-TW/zh-HK→zh-CNen→en-US- 其它
zh*→zh-CN,en*→en-US
多实例隔离
同页多个编辑器可设不同 locale,互不影响。Demo:/multi-instance。
文案来源
编辑器内的文案有两条读取路径,都只读内置语言包:
- Tiptap 扩展:
buildExtensions的ctx.locale,是 session 创建时冻结的静态快照; - Chrome 组件:
useEditorT()→inject(editorLocaleKey),读实例 locale。
禁止在组件或扩展内直接调用全局 t()(会破坏多实例隔离)。
createI18n({ messages }) 不会覆盖编辑器文案
createI18n 把自定义文案写进 locales/manager.ts 的模块级 customMessages,只有全局 t() 会去查它。而编辑器的两条路径(ctx.locale / provideEditorLocale)都直接来自 loadLocale() 返回的内置消息对象,不经过 customMessages。因此目前无法通过 createI18n 定制编辑器 UI 文案。
需要改文案,只能 fork 后修改 src/locales/zh-CN.ts / en-US.ts。
normalizeLocaleCode 之外的语言码会回落到 zh-CN;内置语言包只有 zh-CN 与 en-US(BUILTIN_LOCALE_CODES),缺失 key 时 t() 会先回退 en-US,再回退 key 本身。
已知未本地化的位置
编辑器 chrome、媒体上下文条、拖拽手柄 aria-label、session 骨架与错误态、以及 AI 子包的全部 UI 文案(设置弹窗、提供商名称与说明、连接测试结果、未配置提示、演示模式流式文案)都已接入 locale。
剩下这些是硬编码中文,且刻意不进 i18n——它们是写进文档的内容或示例数据,不是界面文案:
| 位置 | 说明 |
|---|---|
YanivEditor 默认 initialContent | <p>开始编辑你的文档...</p> —— 宿主传自己的初始内容即可 |
MentionExtension 的内置候选项 | 「首页 / 文档 / 路线图 / 我」—— 既是 @ 菜单文案也是插入后的节点 label;用 mention-items prop 传真实数据 |
features/ai/prompts.ts 系统提示词 | 中文 prompt 模板,但都要求「使用与原文相同的语言」,英文输入仍得英文输出 |
新增 AI 文案的约束
useAiConfig 这类没有 locale 上下文的模块只返回语言包 key(如 aiSettings.testTimeout), 由持有 useEditorT() 的组件翻译;client.ts 走 createConfiguredAiClient 注入的实例解析器。 localeParity.test.ts 会校验每个 AI_PROVIDERS 条目都有 providerName / providerDesc 文案。
locale 与 session
locale 变化会改变 sessionKey,触发 session 重建。