翻译MCP服务器
Crowdin项目的人工智能翻译工作流程自动化。使用 任何兼容MCP的AI客户端 (克劳德桌面,克莱恩,Zed等)。
  
______________________________________________________________________
🎯 它做什么
此MCP服务器将您的AI助手直接连接到Crowdin,从而实现:
- 🔍 智能字符串过滤 基于标签的组织
- 📊 基于表格的工作流程 便于翻译审查
- 🏷️ 标签管理 将字符串标记为不翻译
- 🔄 批量翻译 带有详细的上传反馈
- 🎯 精确字符串搜索 检查翻译状态
不需要单独的API密钥 -使用您现有的AI订阅进行翻译!
______________________________________________________________________
🚀 快速开始
先决条件
- Python 3.10或更高版本(或直接安装
uv) - API代币众筹账户
- MCP兼容的AI客户端(Claude Desktop、Cline、Zed等)
安装
选项1:使用uvx(推荐-无需设置)
只需添加到AI客户端的配置中- uvx 自动处理安装:
{
"mcpServers": {
"translation-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/Trofimov-Y/crowdin-translation-mcp",
"translation-mcp"
],
"env": {
"CROWDIN_API_TOKEN": "your_crowdin_token_here",
"CROWDIN_PROJECT_ID": "your_project_id_here"
}
}
}
}优点:
- ✅ 无需克隆存储库
- ✅ 无虚拟环境设置
- ✅ 重启时自动更新
- ✅ 开箱即用
方案2:地方发展
对于想要修改代码的开发人员:
# Clone repository
git clone https://github.com/Trofimov-Y/crowdin-translation-mcp
cd translation-mcp
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install dependencies
pip install -e .然后配置绝对路径:
{
"mcpServers": {
"translation-mcp": {
"command": "/absolute/path/to/translation-mcp/venv/bin/python",
"args": ["-m", "translation_mcp.server"],
"env": {
"CROWDIN_API_TOKEN": "your_token",
"CROWDIN_PROJECT_ID": "your_project_id"
}
}
}
}______________________________________________________________________
🔑 获取您的凭据
Crowdin API代币
- 首选https://crowdin.com/settings#api-钥匙
- 点击“新建令牌”
- 名称:“翻译MCP”
- 所需范围:
- project.read -阅读项目信息 - string.read -读取源字符串 - translation.write -上传翻译 - label.read -阅读标签 - label.write -管理标签
- 复制令牌
Crowdin项目ID
- 打开您的Crowdin项目
- 查看URL:
https://crowdin.com/project/your-project/12345 - 数字
12345是您的项目ID
______________________________________________________________________
📝 配置
克劳德桌面
地点: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)\ 地点: %APPDATA%\Claude\claude_desktop_config.json (Windows)
{
"mcpServers": {
"translation-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/Trofimov-Y/crowdin-translation-mcp",
"translation-mcp"
],
"env": {
"CROWDIN_API_TOKEN": "your_crowdin_token_here",
"CROWDIN_PROJECT_ID": "your_project_id_here"
}
}
}
}Cline(VSCode扩展)
添加到临床MCP设置:
{
"translation-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/Trofimov-Y/crowdin-translation-mcp",
"translation-mcp"
],
"env": {
"CROWDIN_API_TOKEN": "your_token",
"CROWDIN_PROJECT_ID": "your_project_id"
}
}
}Zed编辑
添加到Zed设置:
{
"context_servers": {
"translation-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/Trofimov-Y/crowdin-translation-mcp",
"translation-mcp"
],
"env": {
"CROWDIN_API_TOKEN": "your_token",
"CROWDIN_PROJECT_ID": "your_project_id"
}
}
}
}______________________________________________________________________
💡 用法示例
配置后,在AI助手中使用自然语言命令:
"Show me untranslated strings"
"Get project languages"
"Mark strings 274, 284, 300 as do not translate"
"Search for string 'Welcome'"
"Translate the untranslated strings to French and German"典型工作流程
- 查看需要翻译的内容:
"Show untranslated strings"- 标记不应翻译的名称/品牌:
"Mark strings 36, 38, 42 as do-not-translate"- 获取筛选列表:
"Show untranslated strings again"- 翻译和上传:
"Translate these strings to all missing languages and upload"______________________________________________________________________
🛠️ 可用的MCP工具
get_project_info
获取Crowdin项目信息和目标语言。
在以下情况下使用:
- 开始新的翻译会话
- 需要知道项目中有哪些语言
- 想要验证项目配置
退货:
{
"project_id": "12345",
"target_languages": ["fr", "de", "es-ES", "it", "pt-BR"],
"total_languages": 5,
"message": "✅ Project loaded successfully"
}______________________________________________________________________
get_untranslated_strings
获取需要翻译的字符串 表格格式.
在以下情况下使用:
- 用户问“需要翻译什么?”
- 想要查看翻译进度
- 需要查找特定语言中缺少的字符串
参数:
limit(可选):要返回的最大字符串数(默认值:35,最大值:500)exclude_labels(可选):要过滤的标签(默认值:["do-not-translate"])
退货:
一个包含所有未翻译字符串的markdown表:
| ID | Text | Identifier | Missing Languages |
|-----|-----------------------|------------------|-------------------|
| 36 | `Routine` | `routine` | fr, de, it |
| 38 | `{numMinutes} min` | `numMinutes` | fr, es-ES, it |
| 42 | `Welcome to app` | `app.welcome` | fr, de |重要提示: 此工具始终返回一个表,即使是空的。
标签筛选:
- 默认情况下,排除具有以下条件的字符串
do-not-translate标签 - 使用
exclude_labels=[]查看所有字符串,包括标记的字符串
示例:
"Show untranslated strings" → Returns filtered table
"Get all untranslated including marked ones" → Use exclude_labels=[]
"Show 100 untranslated strings" → Use limit=100______________________________________________________________________
manage_labels
管理Crowdin中字符串的标签(标记为不翻译,组织字符串)。
在以下情况下使用:
- 需要将字符串标记为“不翻译”
- 想要用自定义标签组织字符串
- 需要查看可用标签
- 想要从字符串中删除标签
行动:
1.列出所有标签
{
"action": "list"
}返回项目中的所有标签。
2.为字符串分配标签
{
"action": "assign",
"label_name": "do-not-translate",
"string_ids": [274, 284, 300]
}如果标签不存在,则创建标签并将其分配给指定的字符串。
3.从字符串中删除标签
{
"action": "unassign",
"label_name": "do-not-translate",
"string_ids": [284]
}常见工作流程:
- 查看未翻译的字符串
- 请注意,有些是品牌名称或专有名词
- 标记它们:
"Mark strings 274, 284, 300 as do not translate" - 下一步
get_untranslated_strings呼叫会自动过滤掉它们
______________________________________________________________________
upload_translations
将翻译后的字符串批量上传到Crowdin。
在以下情况下使用:
- 用户提供可上传的翻译
- 从以下位置翻译字符串后
get_untranslated_strings - 需要一次添加多个翻译
重要提示:
- 仅上传显示为“缺少”的语言的翻译
- 对于已翻译的语言,不要上传
- 每个翻译需要:string_id、language_code、翻译文本
输入格式:
{
"translations": [
{
"string_id": 36,
"language_code": "fr",
"translation": "Routine"
},
{
"string_id": 36,
"language_code": "de",
"translation": "Routine"
},
{
"string_id": 38,
"language_code": "fr",
"translation": "{numMinutes} min"
}
]
}退货:
# 📤 Translation Upload Results
**Total translations:** 3
**✅ Successful:** 3
**❌ Failed:** 0
## ✅ Successfully Uploaded
- **String ID 36:** fr, de
- **String ID 38:** fr
**Status:** ✅ All translations uploaded successfully!______________________________________________________________________
search_string
按文本搜索特定字符串并查看其所有翻译。
在以下情况下使用:
- 用户问“X被翻译了吗?”
- 需要检查特定字符串的状态
- 想查看现有的翻译以供参考
- 查找字符串的ID
输入:
{
"source_text": "Welcome"
}退货:
# 🔍 String Search Results
**String ID:** 123
**Identifier:** `app.welcome`
**Source Text:** `Welcome`
**Translation Progress:** 3/5 languages
## Translation Status
| Language | Status | Translation |
|----------|----------------|-------------|
| fr | ✅ Translated | Bienvenue |
| de | ✅ Translated | Willkommen |
| es-ES | ✅ Translated | Bienvenido |
| it | ❌ Missing | - |
| pt-BR | ❌ Missing | - |
**Missing languages:** it, pt-BR______________________________________________________________________
🏷️ 标签系统
标签系统有助于组织和过滤字符串:
默认行为
get_untranslated_strings自动排除 字符串与do-not-translate标签- 这会过滤掉您已经标记的名称、品牌和技术术语
工作流程
- 获取未翻译的字符串 (自动过滤)
- 查看表格
- 标记名称/品牌:
"Mark strings 36, 42 as do-not-translate"- 获取更新列表 (标记的字符串消失)
- 翻译剩余字符串
自定义标签
您可以创建任何您想要的标签:
do-not-translate-跳过这些字符串reviewed-标记为已审核context-needed-需要更多上下文technical-term-技术术语
______________________________________________________________________
📂 项目结构
translation-mcp/
├── src/translation_mcp/
│ ├── __init__.py # Package initialization
│ ├── server.py # MCP server implementation
│ ├── crowdin_client.py # Crowdin API client (using official SDK)
│ └── config.py # Configuration management
├── pyproject.toml # Project dependencies & metadata
├── README.md # This file
├── .gitignore # Git ignore rules
└── claude_desktop_config_uvx.json # Example configuration______________________________________________________________________
🔧 故障排除
MCP服务器未出现
- 检查配置文件路径:
- macOS克劳德: ~/Library/Application Support/Claude/claude_desktop_config.json - Windows克劳德: %APPDATA%\Claude\claude_desktop_config.json
- 验证JSON语法:
- 使用https://jsonlint.com/验证 - 确保没有尾随逗号 - 检查所有报价是否正确
- 完全重新启动AI客户端:
- 退出应用程序(不仅仅是关闭窗口) - 重新启动应用程序
“找不到模块:translation_mcp”
对于uvx用户:
uv应自动处理安装- 尝试:
uvx --from git+https://github.com/Trofimov-Y/crowdin-translation-mcp translation-mcp --help - 如果失败,请确保
uv已安装:curl -LsSf https://astral.sh/uv/install.sh | sh
对于本地安装:
# Verify virtual environment has packages
ls /path/to/translation-mcp/venv/lib/python*/site-packages/
# If missing, reinstall
pip install -e .“API错误:无效的令牌”
- 验证配置中的令牌(无额外空格)
- Crowdin设置中的检查令牌尚未过期
- 确认令牌具有所有必需的作用域:
- project.read - string.read - translation.write - label.read - label.write
表未显示
现在不应该发生这种事!该工具总是返回一个表格。
如果你看到的是文本:
- 检查您是否使用最新版本
- 用示例报告bug
“找不到未翻译的字符串”(但有)
- 验证正确的Crowdin项目ID
- 检查字符串是否标记为
do-not-translate - 尝试:
"Get all untranslated including marked ones"看到一切
______________________________________________________________________
🧪 发展
设置开发环境
git clone https://github.com/Trofimov-Y/crowdin-translation-mcp
cd translation-mcp
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install with dev dependencies
pip install -e ".[dev]"运行测试
pytest代码格式化
# Format code
black src/
# Check style
ruff check src/手动测试
# Test that MCP server starts
python -m translation_mcp.server
# Should show MCP initialization messages______________________________________________________________________
🔐 安全
- 通过环境变量传递的令牌 -从未硬编码
- 文件中未存储令牌 -仅在MCP配置中
- MCP在本地运行 -所有处理都在您的机器上进行
- 直接API调用 -仅限Crowdin,无中介
______________________________________________________________________
💰 成本
- Crowdin API: 免费(在您的Crowdin计划限制内)
- 人工智能翻译: 包含在您的AI客户端订阅中
- MCP服务器: 免费和开源
- 额外费用总额: $0
______________________________________________________________________
🤝 贡献
欢迎投稿!请随时提交拉取请求。
贡献领域
- 附加语言检测
- 批量操作优化
- UI便于配置
- 其他Crowdin功能
- 更好的错误消息
______________________________________________________________________
📄 许可证
MIT许可证-有关详细信息,请参阅许可证文件
______________________________________________________________________
🐛 支持
有问题吗?
- 请先查看此自述文件
- 查看GitHub上的已解决问题
- 通过以下方式打开新问题:
- 您的AI客户端(Claude Desktop、Cline等) - 错误消息(已删除令牌!) - 配置(已删除令牌!) - 重现步骤
______________________________________________________________________
🙏 致谢
- 内置于 Anthropic的MCP SDK
- 用途 Crowdin API官方客户端
- 受到对更好翻译工作流程需求的启发
______________________________________________________________________
📊 版本历史记录
- 2.0.0 -使用官方Crowdin SDK、标签系统、改进的提示进行重大重构
- 0.1.0 -首次发布
______________________________________________________________________
由以下材料制成❤️ 更好的翻译工作流程
