Skip to content

国际化

内置语言:zh-CNen-US

基本用法

vue
<YanivEditor locale="zh-CN" />
<YanivEditor locale="en-US" />
<YanivInlineEditor locale="en-US" v-model:content="html" />

normalizeLocaleCode 映射:

  • zh-TW / zh-HKzh-CN
  • enen-US
  • 其它 zh*zh-CNen*en-US

多实例隔离

同页多个编辑器可设不同 locale,互不影响。Demo:/multi-instance

文案来源

编辑器内的文案有两条读取路径,都只读内置语言包

  • Tiptap 扩展:buildExtensionsctx.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-CNen-USBUILTIN_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.tscreateConfiguredAiClient 注入的实例解析器。 localeParity.test.ts 会校验每个 AI_PROVIDERS 条目都有 providerName / providerDesc 文案。

locale 与 session

locale 变化会改变 sessionKey,触发 session 重建。

相关