翻译管理器 MCP 服务器
一个用于管理翻译的MCP(模型上下文协议)服务器,支持审核工作流、自动插入不间断空格以及实时文件监控。
特点/功能
- 📝 翻译管理从JSON文件中加载、编辑和保存翻译内容
- ✅ 审查工作流程跟踪哪些翻译已被检查/审核
- 🔄(这个符号在中文中通常被解释为“循环”或“重复”的意思,但直接翻译时可能无法找到完全对应的中文词汇,因此保留原符号或根据上下文解释其含义) 自动保存当翻译更新时,自动保存更改(无需手动保存)
- 👁️ 文件监视监控翻译文件的外部更改并自动重新加载
- 🌍 表示地球或全球。 不间断空格自动应用特定语言的不间断空格规则
- 🎯(瞄准目标) 缺失翻译检测识别任何语言环境中缺少翻译的键(支持分页)
- 🔍(放大镜图标,通常表示搜索、查看细节或调查) 基于前缀的操作按键前缀搜索、筛选和删除翻译(支持分页)
- 📊 表格 翻译状态获取翻译完成度的全面状态报告
- 💾 代表“软盘”或“存储设备”的符号。 高效回应最小化令牌使用,API响应简洁明了
- 🌐(地球或互联网的符号,常用于表示全球、网络等概念) 特定于区域的删除删除特定区域的语言键,而不影响其他区域
支持非断行空格的语言
服务器内置了规则,用于在以下情况下正确插入不间断空格:
- 🇵🇱 波兰语 (pl)
- 🇨🇿 捷克语 (cs)
- 🇸🇰 斯洛伐克语(sk)
- 🇫🇷 法语 (fr)
- 🇩🇪 德语(de)
- 🇭🇺 匈牙利语(hu)
- 🇪🇸 西班牙语 (es)
- 🇮🇹 意大利语(it)
- 🇳🇱 荷兰语 (nl)
安装
作为一个npm包
npm install @framky/translation-manager-mcp来自源头
git clone https://github.com/framky/translation-manager-mcp.git
cd translation-manager-mcp
npm install与Claude桌面版的使用
将此配置添加到您的Claude桌面配置文件中:
macOS(苹果电脑操作系统): ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json
基本配置
{
"mcpServers": {
"translation-manager": {
"command": "npx",
"args": ["@framky/translation-manager-mcp"]
}
}
}自定义消息目录
您可以使用(指定)来为您的翻译文件指定一个自定义目录 MESSAGES_DIR 环境变量:
{
"mcpServers": {
"translation-manager": {
"command": "npx",
"args": ["@framky/translation-manager-mcp"],
"env": {
"MESSAGES_DIR": "/absolute/path/to/your/messages"
}
}
}
}本地安装
如果你已将包安装在本地:
{
"mcpServers": {
"translation-manager": {
"command": "node",
"args": ["/path/to/translation-manager-mcp/index.js"],
"env": {
"MESSAGES_DIR": "/path/to/your/project/translations"
}
}
}
}注如果 MESSAGES_DIR 如果未指定,服务器将在(相应位置)寻找翻译 messages/ 相对于当前工作目录的目录。
文件结构
服务器期望您的翻译按照以下方式组织:
your-project/
├── messages/
│ ├── en-us.json (or en.json)
│ ├── pl-pl.json (or pl.json)
│ ├── fr-fr.json (or fr.json)
│ └── translation-check.json (auto-generated)
└── .translation-state.json (auto-generated, at server root)注服务器不再创建备份。请使用版本控制系统(例如 Git)来跟踪翻译文件的更改。
支持的文件命名约定
服务器支持翻译文件的两种命名约定:
- 完整的本地化格式:
pl-pl.json,en-us.json,fr-fr.json - 仅语言格式:
pl.json,en.json,fr.json
这两种格式的工作方式相同。语言代码会自动提取,以应用不间断空格规则。
翻译文件格式
翻译文件应使用嵌套的JSON结构:
{
"common": {
"button": {
"save": "Save",
"cancel": "Cancel"
}
},
"auth": {
"login": "Log in",
"logout": "Log out"
}
}键在内部会自动转换为点符号表示(例如。, common.button.save)。
可用工具
1. get_messages_to_check
获取接下来N条未审核的翻译以供审查。
参数:
n(数字,默认值:10):要返回的消息数量
示例:
{
"n": 5
}返回值:
{
"translation.key": {
"pl-pl": "Polish translation",
"en-us": "English translation"
}
}2. update_translations
更新一个或多个键和语言环境的翻译。更改会自动保存到JSON文件中。
参数:
updates(对象):带结构的翻译更新{ key: { locale: translation } }
示例:
{
"updates": {
"common.button.save": {
"en-us": "Save",
"pl-pl": "Zapisz"
},
"common.button.cancel": {
"en-us": "Cancel",
"pl-pl": "Anuluj"
}
}
}返回值:
{
"success": true,
"updatedKeys": 2
}3. mark_checked
标记一个或多个翻译键为已审阅。状态会自动保存。
参数:
keys(字符串 | 数组):单个键或键的数组,用于标记为已选中
示例:
{
"keys": ["common.button.save", "common.button.cancel"]
}返回值:
{
"success": true,
"markedCount": 2
}4. get_checked_keys
获取所有已标记为已检查的翻译键的列表。
返回:
{
"count": 42,
"keys": ["common.button.save", "common.button.cancel", ...]
}5. get_missing_translation_keys
获取一个分页列表,其中包含在一个或多个语言环境中缺少翻译的键。
参数:
page(数字,默认值: 1):页码pageSize(数字,默认:50):每页的项目数量
示例:
{
"page": 1,
"pageSize": 20
}返回值:
{
"count": 123,
"totalPages": 7,
"currentPage": 1,
"pageSize": 20,
"keys": [
{
"key": "common.button.submit",
"missingLocales": ["fr-fr", "de-de"],
"existingTranslations": {
"en-us": "Submit",
"pl-pl": "Wyślij"
}
}
]
}6. get_translation_by_key_prefix
获取以特定前缀开头的所有键的翻译,并支持分页。
参数:
keyPrefix(字符串,必填):要搜索的前缀page(数字,默认值:1):页码pageSize(数字,默认:50):每页显示的项目数
示例:
{
"keyPrefix": "common.button",
"page": 1,
"pageSize": 25
}返回值:
{
"count": 45,
"totalPages": 2,
"currentPage": 1,
"pageSize": 25,
"keys": {
"common.button.save": {
"en-us": "Save",
"pl-pl": "Zapisz"
},
"common.button.cancel": {
"en-us": "Cancel",
"pl-pl": "Anuluj"
}
}
}7. add_translations
添加新的翻译键及其对应的翻译。更改会自动保存到JSON文件中。
参数:
translations(对象):带有结构的新翻译{ key: { locale: translation } }
示例:
{
"translations": {
"common.button.submit": {
"en-us": "Submit",
"pl-pl": "Wyślij",
"fr-fr": "Soumettre"
}
}
}返回值:
{
"success": true,
"addedKeys": 1,
"addedLocales": ["en-us", "pl-pl", "fr-fr"]
}8. delete_keys_by_prefix
删除具有指定前缀的翻译键。可以选择从所有语言环境或仅特定语言环境中删除。更改会自动保存。
参数:
prefix(字符串,必填):要删除的键的前缀locales(数组,可选):要从中删除的区域设置代码数组(例如。,["pl-pl", "en-gb"])。 如果未提供,则从所有语言环境中删除整个键。
示例1 - 从所有语言环境中删除:
{
"prefix": "old.deprecated"
}示例2 - 仅从特定语言环境删除:
{
"prefix": "HomePage.hero",
"locales": ["pl-pl", "de-de"]
}返回:
{
"success": true,
"deletedCount": 12
}9. get_translation_status
获取所有语言环境的翻译状态概览。
返回值:
{
"total": 150,
"missingTranslations": 12,
"waitingForCheck": 35
}不换行空格
服务器在保存翻译时会自动应用针对特定语言的不间断空格规则。此过程是透明的,且会自动进行,您无需调用任何特殊函数。
波兰语、捷克语、斯洛伐克语
- 在单字母单词(a, i, o, u, w, z)之后
- 在短介词和连词之后
- 数字与单位之间
- 当它们作为单独的单词出现时,在个位数之前
法国的
- 在特殊标点符号(: ; ! ? »)之前
- 单字母词之后
- 在数字与单位之间
其他语言
- 针对德语、匈牙利语、西班牙语、意大利语和荷兰语的自定义规则
- 数字与其单位之间(所有支持的语言)
自动功能
自动保存
以下操作会自动将更改保存到JSON文件中:
update_translations- 仅保存修改过的语言环境add_translations- 保存所有受影响的语言环境delete_keys_by_prefix- 保存所有受影响的文件mark_checked- 保存选中状态
你无需手动调用保存功能——每次修改后它都会自动保存。
文件监视
服务器自动监控 messages/ 翻译文件更改的目录。当检测到更改时:
- 更改会进行防抖处理(500毫秒),以避免多次快速重新加载
- 加载之前的状态以检测哪些内容发生了变化
- 从磁盘重新加载翻译
- 新的/修改过的翻译被标记为未检查
这允许您在外部(例如,在您的集成开发环境(IDE)中)编辑翻译文件,并使这些更改自动反映在MCP服务器上。
发展
在本地运行
npm start测试
运行综合测试套件:
npm test测试套件包含41个自动化测试,涵盖:
- 所有API响应格式
- 分页功能
- 自动保存功能
- 特定于区域的删除
- 不间断空格的应用
- 未创建备份文件
看见 TESTING.md 翻译为中文是:“测试说明文件.md” 或者 “测试文档.md”(具体翻译可能根据上下文有所调整,但基本意思是“关于测试的说明/文档文件”)。这里,“.md”通常表示这是一个Markdown格式的文件 以获取详细的测试文档。
手动测试
服务器通过stdio使用MCP协议进行通信。您可以使用Claude Desktop或任何MCP兼容的客户端进行测试。
许可证
麻省理工学院(MIT)
做出贡献
欢迎贡献!请随时提交拉取请求。
支持
对于问题和功能请求,请使用 。
