国际化系统
国际化系统
相关源文件
本章引用的主要源码文件:
web/package-lock.jsonweb/package.jsonweb/src/app.tsxweb/src/components/ui/badge.tsxweb/src/components/ui/button.tsxweb/src/components/ui/radio-group.tsxweb/src/components/ui/radio.tsxweb/src/components/ui/segmented.tsxweb/src/constants/common.tsweb/src/locales/ar.tsweb/src/locales/bg.tsweb/src/locales/config.tsweb/src/locales/de.tsweb/src/locales/en.tsweb/src/locales/es.tsweb/src/locales/fr.tsweb/src/locales/id.tsweb/src/locales/ja.tsweb/src/locales/pt-br.tsweb/src/locales/ru.tsweb/src/locales/tr.tsweb/src/locales/vi.tsweb/src/locales/zh-traditional.tsweb/src/locales/zh.tsweb/src/pages/datasets/dataset-card.tsxweb/src/pages/home/applications.tsxweb/src/pages/home/banner.tsxweb/src/pages/home/datasets.tsxweb/src/pages/home/index.tsxweb/tailwind.config.jsweb/tailwind.css
本文档描述了 RAGFlow Web 前端使用的国际化(i18n)系统。该系统通过 i18next 进行翻译管理,支持 13 种以上语言,采用分层命名空间结构和动态加载机制,为整个用户界面提供多语言支持。
概述
RAGFlow 国际化系统基于 i18next 和 react-i18next 构建 web/package.json:88-112。该系统管理多种语言的翻译,包括英语、简体中文、繁体中文、印度尼西亚语、日语、西班牙语、越南语、俄语、葡萄牙语(巴西)、德语、法语、意大利语、保加利亚语、阿拉伯语和土耳其语。系统采用动态加载策略,其中英文参考包作为键值的主要来源。
来源: web/src/locales/en.ts:25-41、web/package.json:88-112
支持的语言
系统支持以下语言,这些语言在翻译文件中定义,并在语言选择界面中进行了本地化:
| 语言 | 键值 | 参考文件 |
|---|---|---|
| 英语 | english | en.ts |
| 简体中文 | chinese | zh.ts |
| 繁体中文 | traditionalChinese | zh-traditional.ts |
| 俄语 | russian | ru.ts |
| 印度尼西亚语 | indonesia | id.ts |
| 日语 | japanese | ja.ts |
| 越南语 | vietnamese | vi.ts |
| 葡萄牙语(巴西) | portugueseBr | pt-br.ts |
| 德语 | german | de.ts |
来源: web/src/locales/en.ts:26-41、web/src/locales/zh.ts:26-31、web/src/locales/vi.ts:17-41、web/src/locales/de.ts:26-33
系统架构与数据流
国际化系统通过集中式配置和动态加载机制,将原始翻译数据与 React UI 组件连接起来。
标题: 国际化数据流与实体映射
关键组件
- i18next:提供翻译引擎的核心库
web/package.json:88。 - react-i18next:提供
useTranslation钩子和Trans组件用于 UI 集成的 React 绑定web/package.json:112。 - i18next-browser-languagedetector:根据浏览器设置或 Cookie 自动检测用户语言
web/package.json:89。 - 翻译包:静态 TypeScript 文件(例如
en.ts、zh.ts),导出包含所有 UI 字符串的嵌套对象web/src/locales/en.ts:1-2。
来源: web/package.json:88-112、web/src/locales/en.ts:1-2
翻译键值层次结构
翻译内容按功能命名空间组织,以维护可管理的层次结构。
标题: 键值层次结构与功能组织
按功能组织
- 通用命名空间:包含通用 UI 标签,如
confirm、cancel、delete,以及语言切换器中所有支持语言的名称web/src/locales/en.ts:3-82。 - 技能系统:管理技能空间的翻译,包括空间创建、技能上传和元数据校验消息
web/src/locales/en.ts:124-203。 - 记忆系统:分为
memories(列表视图/创建)和memory(单个记忆配置和消息管理)。包含特定键值用于记忆类型,如raw、semantic、episodic和proceduralweb/src/locales/de.ts:112-183、web/src/locales/ru.ts:119-203。 - 知识库:通过
knowledgeList管理仪表盘,通过knowledgeDetails管理特定数据集配置,包括metadata设置的复杂嵌套对象web/src/locales/zh.ts:92-243。 - 登录/认证:处理登录、注册和品牌描述的所有字符串
web/src/locales/en.ts:83-107。
来源: web/src/locales/en.ts:3-203、web/src/locales/zh.ts:92-243、web/src/locales/de.ts:112-183、web/src/locales/ru.ts:119-203
技术实现细节
插值与变量
系统使用双花括号支持动态内容。例如:
skills.filesCount:'{{count}} files'(例如中文:'{{count}} 个文件')web/src/locales/en.ts:154、web/src/locales/zh.ts:136。knowledgeDetails.redo:'Do you want to clear the existing {{chunkNum}} chunks?'(例如繁体中文:'是否清空已有 {{chunkNum}}個 chunk?')web/src/locales/zh-traditional.ts:178。
复杂键值结构
对于记忆系统等功能,键值会深度嵌套以反映 UI 结构:
memory.config.memorySizeTooltip:提供记忆计算的详细技术说明,包括维度字节大小web/src/locales/de.ts:161-162、web/src/locales/ru.ts:177-178。memory.messages.delMessageWarn:消息列表中破坏性操作的警告文本web/src/locales/de.ts:148-149。
元数据管理
skills.metadata 部分展示了系统如何处理复杂配置 UI,包含信息类别(basic、emoji、skillKey)和需求(requiredBins、requiredEnv)的键值 web/src/locales/en.ts:184-195。校验消息也已本地化,以便在技能解析过程中提供清晰的反馈,例如 invalid_frontmatter 或 total_size_exceeded web/src/locales/zh.ts:181-204。
来源: web/src/locales/en.ts:154-195、web/src/locales/zh.ts:136-204、web/src/locales/de.ts:148-162、web/src/locales/ru.ts:177-178、web/src/locales/zh-traditional.ts:178