本地化
WebViewer UI 使用 i18next 进行国际化。内置六种语言;可在运行时切换并添加自定义语言。
支持的语言
翻译文件位于 packages/webview/public/locales/(构建时复制到 dist/locales/),命名为 translation-<lng>.json,与 i18next-http-backend 加载路径 ./locales/-.json 匹配。
| 代码 | 语言 |
|---|---|
en | 英语(回退) |
zh-CN | 简体中文 |
zh-TW | 繁体中文 |
ja | 日语 |
fr | 法语 |
th | 泰语 |
默认/回退:en。所选语言持久化在 localStorage 的 language 键下。
UI API
UI.setLanguage(language)
运行时切换 UI 语言。异步。
/**
* @method UI.setLanguage
* @param {string} language 默认支持:en、zh-CN、zh-TW、fr、th、ja。
*/
await UI.setLanguage('zh-CN');内部:await i18next.changeLanguage(language),再 store.setLanguage(language),再持久化到 localStorage['language']。组件通过 i18next-vue 的 useTranslation() 消费翻译。
UI.addLanguage(language)
向可用集合添加语言资源。
UI.addLanguage({ /* 语言资源对象 */ });UI.removeLanguage(language)
从可用集合移除语言。
UI.removeLanguage('fr');UI.setLanguages(languages)
替换整个可用语言集合。
UI.setLanguages([ /* 数组或对象 */ ]);i18n 初始化原理
活动的初始化器是 packages/webview/src/i18n.js:
- 使用
i18next+i18next-http-backend+i18next-vue。 - 语言选择:
localStorage['language'] || localStorage['currentLanguage'] || 'en'。 - 初始化选项:
load: 'currentOnly'、returnObjects: true、fallbackLng: 'en'、命名空间translation。 - 后端: 通过自定义 XHR 请求器加载
./locales/-.json,可容忍 Android webview 在file://加载时的status 0。 - 全局暴露
window.i18next = i18next,并导出i18nextPromise(在App/index.vue中应用渲染前 await)。
packages/webview/src/i18nNext.js是一个极简的遗留变体(无 HTTP 后端、无 localStorage),不被main.js导入,已被i18n.js取代。
packages/webview/src/helpers/setupI18n.js声明了 25 个[code, displayName]对的Languages[]目录,以及将内部代码映射到 i18next/dayjs 语言代码的languageRules——可作为扩展 SDK 支持更广泛语言目录的参考。
示例
切换到日语
await UI.setLanguage('ja');添加自定义语言(示意)
UI.addLanguage({
code: 'ko',
translations: {
'header.tools.annotate': '주석',
/* …完整翻译映射… */
},
});
await UI.setLanguage('ko');资源对象的确切结构遵循 i18next 资源结构;完整键集见
translation-en.json。