当前语言支持
MetaMCP 目前支持:- 英语 (en) - 默认语言
- 简体中文 (zh) - 完整翻译可用
项目结构
国际化系统按以下方式组织:工作原理
URL 结构
MetaMCP 使用基于区域的路由:- 英语 (默认):
/mcp-servers
,/settings
,/namespaces
- 中文:
/zh/mcp-servers
,/zh/settings
,/zh/namespaces
中间件
middleware.ts
文件处理:
- 区域检测 从 URL、cookie 和 Accept-Language 头部
- 自动重定向 到适当的区域
- 身份验证检查
使用翻译
客户端组件
对于客户端组件,使用useTranslations
Hook:
翻译键格式
使用冒号分隔的命名空间进行组织:t('mcp-servers:server.create')
, t('mcp-servers:server.status.online')
翻译文件组织
命名空间结构
每个翻译命名空间都有特定用途:common.json
common.json
共享 UI 元素和通用术语
auth.json
auth.json
身份验证相关文本
navigation.json
navigation.json
mcp-servers.json
mcp-servers.json
MCP 服务器特定翻译
翻译键最佳实践
翻译键指南
- 使用描述性、层次化的键:
server.validation.nameRequired
- 使用 camelCase 保持一致性:
signIn
,mcpServers
- 分组相关翻译: 所有服务器相关术语放在
server
下 - 保持上下文清晰: 如果不同,使用
auth:signIn
vsform:signIn
- 使用插值处理动态内容:
"welcome": "欢迎,{{name}}!"
添加新语言
步骤 1: 创建翻译文件
-
在
public/locales/
中创建语言目录: -
复制英语文件作为模板:
-
翻译每个 JSON 文件中的内容:
步骤 2: 更新配置
将新区域添加到 i18n 配置中:步骤 3: 更新语言切换器
语言切换器将自动包含新语言:步骤 4: 测试实现
- 在新语言中添加测试内容
- 导航到
/{locale}/
URL(例如,/es/mcp-servers
) - 验证翻译 正确显示
- 测试语言切换 功能
- 检查回退 对缺失翻译的处理
翻译工作流程
新功能
在向 MetaMCP 添加新功能时:- 首先添加英语翻译 到适当的命名空间
- 使用描述性键 在上下文中有意义
- 用英语测试 确保键工作正确
- 添加其他语言(或标记为待翻译)
- 在部署前测试所有语言
贡献者
翻译贡献者
翻译贡献者
贡献翻译:
- Fork 仓库
- 创建新的语言文件或更新现有文件
- 遵循现有的键结构
- 在本地测试你的翻译
- 提交包含你更改的 Pull Request
- 保持翻译简洁但清晰
- 保持术语一致性
- 考虑文化背景,不仅仅是字面翻译
- 测试较长文本以确保 UI 仍然工作
AI 辅助翻译
AI 辅助翻译
使用 Cursor/Claude 等 AI 工具:
故障排除
常见问题
缺失翻译
缺失翻译
当翻译不显示时:
- 检查翻译键是否存在于 JSON 文件中
- 验证命名空间是否正确(
common:save
vsauth:save
) - 确保区域文件存在且是有效的 JSON
- 检查浏览器控制台是否有缺失键警告
- 验证组件是否正确使用
useTranslations
水合错误
水合错误
服务器/客户端翻译不匹配:
- 确保服务器和客户端之间的区域检测一致
- 使用
useTranslations
的isLoading
状态 - 如果区域可能改变,避免在 SSR 期间渲染翻译
- 禁用 JavaScript 测试以检查 SSR 行为
区域路由问题
区域路由问题
URL 路由问题:
- 检查新区域的中间件配置
- 验证
getLocalizedPath
函数处理新语言 - 测试直接导航到本地化 URL
- 确保回退行为正确工作
调试工具
未来增强
计划功能
- RTL 语言支持 用于阿拉伯语、希伯来语
- 日期/时间本地化 具有适当的格式
- 基于区域的数字格式
- 货币格式 用于定价功能
- 复数规则 用于复杂的语言要求
贡献指南
i18n 贡献指南
- 📝 首先添加英语: 始终从英语翻译开始
- 🔍 彻底测试: 验证所有区域工作正确
- 📊 使用一致术语: 维护技术术语词汇表
- 🌍 考虑上下文: 适应文化差异,不仅仅是语言
- 📱 测试 UI 影响: 确保较长翻译不会破坏布局
- 🤝 协作: 尽可能与母语者合作