本文档描述了 OpenHands 前端应用程序中使用的国际化 (i18n) 系统。它解释了翻译系统的结构、语言管理方式以及如何在应用程序中使用翻译。
OpenHands 前端通过一个基于 react-i18next 构建的全面国际化系统支持多种语言。这使用户能够以他们偏好的语言与应用程序进行交互,从而增强了可访问性和用户体验。
该系统目前支持以下语言
来源: frontend/src/i18n/translation.json1-1023
来源: frontend/src/i18n/translation.json1-1023 frontend/src/i18n/declaration.ts1-420 frontend/src/routes/root-layout.tsx1-151
来源: frontend/src/routes/root-layout.tsx25-56
所有翻译都存储在位于 frontend/src/i18n/translation.json 的结构化 JSON 文件中。该文件按翻译键组织,每个键包含所有支持语言的翻译。
翻译键遵循 SECTION$ELEMENT 格式的约定,以便按用法上下文组织字符串。
来源: frontend/src/i18n/translation.json77-91
为了确保类型安全并在引用翻译键时防止错误,系统使用 frontend/src/i18n/declaration.ts 中自动生成的枚举。
此枚举在应用程序中引用翻译键时被使用。
来源: frontend/src/i18n/declaration.ts1-10
用户语言偏好存储在应用程序设置中。当用户更改其语言偏好时,应用程序会立即应用。
根布局组件中的此代码会监控语言设置的变化,并相应地更新 i18n 实例。
来源: frontend/src/routes/root-layout.tsx81-85 frontend/src/components/features/waitlist/auth-modal.tsx1-81
该应用程序在设置界面中提供语言选择器。这允许用户从支持的语言列表中选择他们偏好的语言。然后,所选语言将被存储在用户设置中并应用于应用程序。
来源: frontend/src/i18n/translation.json77-91
组件使用 react-i18next 的 useTranslation Hook 来访问翻译。
此模式可确保对翻译字符串进行类型安全的访问,并在语言更改时自动更新渲染的内容。
来源: frontend/src/routes/root-layout.tsx25-56 frontend/src/components/features/waitlist/auth-modal.tsx1-81
身份验证组件也使用国际化来在不同语言之间提供一致的用户体验。
来源: frontend/src/components/features/waitlist/auth-modal.tsx56-65
要添加新的可翻译内容,请执行以下操作:
frontend/src/i18n/translation.json 中添加一个新条目,其中包含所有支持语言的翻译。declaration.ts 中的 I18nKey 枚举是根据翻译文件自动生成的。useTranslation 的 t 函数来使用新键。添加新语言支持
translation.json 中的每个条目,为新语言代码添加翻译。国际化系统主要是前端的关注点,但语言偏好作为用户设置的一部分进行存储,这些设置可能会在后端持久化。
前端构建系统 (Vite) 已配置为正确处理翻译文件。
来源: frontend/vite.config.ts9-75
I18nKey 枚举进行类型安全的翻译访问。SECTION$ELEMENT 命名约定将翻译键按上下文进行组织。OpenHands 中的国际化系统为多语言支持提供了坚实的基础。通过使用 react-i18next 等成熟的模式和库,应用程序可以根据用户偏好无缝地以多种语言呈现内容。
该系统设计得易于维护和扩展,允许在应用程序发展过程中轻松添加新的语言和可翻译内容。