语言分包与按需加载
默认情况下,ai-i18n 会把所有目标语言注册到同一个 Runtime。配置 loading 后,每个目标
locale 会生成独立的 Vite chunk;未提前加载的语言会在首次 setLang() 时按需加载。
配置分包策略
modulepreload 与 prefetch 都是浏览器调度提示,不保证资源在某个时刻已经完成下载。
如果 defaultLang 保持 source,并希望所有目标语言都在切换时再加载,只需传入空对象:
省略 loading 并不等于 loading: {}。前者保留默认的全语言注册模式,后者会启用分包,
并让未指定的目标语言完全按需加载。
显示切换中的加载状态
setLang() 返回 Promise。目标语言 chunk 尚未加载时,它会等待资源完成;成功后才切换语言
并通知订阅者更新。Runtime 同时维护共享状态。Vue adapter 统一维护响应式 revision;
Composition 组件通过 useI18n() 读取共享 Ref,纯 Options 组件通过 i18nComputed()
读取已解包状态。React 组件通过 useI18n() 订阅,Vanilla JS 通过 subscribe() 订阅。
加载失败时,Runtime 会保留当前语言并让 Promise reject。应用可以像上例一样捕获错误, 执行日志、重试计数等业务动作;只需要通用 UI 时可以直接使用内置状态。
普通 JavaScript / TypeScript 模块如果只需要当前值,可以读取一次快照:
需要持续响应变化时,应像 Vanilla 示例一样配合 subscribe() 重新读取。状态的完整类型与
并发语义见 getLangLoadState()。
配置规则
preload与prefetch只能填写locales中的目标 locale,不能填写sourceLang。- 同一 locale 不能同时出现在两个列表中;同一列表内的重复值会自动去重。
- 非 source 的
defaultLang会自动按 preload 处理。不要再把它填入prefetch,否则配置会在启动时 报错。资源就绪前先渲染 source fallback,加载完成后再通知订阅者更新。 - 相同 locale 的并发调用会复用同一次底层语言包加载请求,不保证各次
setLang()返回的 Promise 引用相等。不同 locale 的并发切换以最后一次调用为准。 - 缺失或值为
null的译文始终回退到 source 文案。
完整字段类型与边界见
AiI18nLocaleLoadingOptions。