mcp服务器sdlxliff
使用Claude与您的SDL Trados翻译文件聊天。
通过简单的自然对话查看翻译、查找错误并进行更正,无需手动编辑XML。
两种使用方法
| 选项 | 最适合 | Claude Access |
|---|---|---|
| Xliff聊天桌面应用程序 | 想要专用应用程序的专业用户 | API密钥(每次使用付费) |
| Claude桌面扩展 | Claude Pro/团队订阅者 | Claude订阅 |
这两个选项在引擎盖下使用相同的MCP服务器——根据您喜欢访问Claude的方式进行选择。
你能做什么
用简单的语言问克劳德:
- *“检查此文件中的俄语翻译是否存在语法错误”*
- *“查找翻译比源代码长得多的片段”*
- *“Fix Segment 42-更改应用程序”*
- *“显示仍处于草稿状态的所有分段”*
- *“用我的术语表运行QA检查”*
- *“保存我的更改”*
Claude读取您的SDLXLIFF文件,了解翻译上下文,并可以在自动保留所有格式标记的同时进行更正。
Xliff聊天桌面应用程序
一个带有本机文件选择器的独立macOS应用程序-不需要命令行。
安装
- 安装MCP服务器 全球范围内 (不在虚拟环境中):
pip3 install mcp-server-sdlxliff> 注: 桌面应用程序在以下位置查找Python /opt/homebrew/bin/python3 (苹果硅)或 /usr/local/bin/python3 (英特尔Mac)。确保使用相同的工具进行安装 pip3 这对应于你的Homebrew Python。
- 下载
XLIFF Chat_1.1.0_aarch64.dmg从 发布
- 打开
.dmg并将XLIFF聊天拖到您的应用程序文件夹中
- 启动XLIFF聊天并输入您的 无烟煤API键
用法
- 点击 文件 或 文件夹 选择SDLXLIFF文件的按钮
- MCP服务器自动连接
- 开始聊天-让Claude审阅、检查或编辑您的翻译
需求
- macOS 10.15或更高版本
- Python 3.10+
mcp-server-sdlxliff全局安装 - 无烟煤API键
Claude桌面扩展
通过Claude Cowork与您的Claude Pro或Team订阅一起使用。
安装
选项A:桌面扩展(推荐)
- 下载
mcp-server-sdlxliff-1.1.0.mcpb从 发布 - 打开克劳德桌面→ 设置→ 扩展
- 点击“安装扩展”并选择下载的
.mcpb文件 - 该扩展会自动安装(Python和依赖项会为您管理)
选项B:手动安装
pip install mcp-server-sdlxliff然后添加到您的 claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 窗户: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"sdlxliff": {
"command": "mcp-server-sdlxliff"
}
}
}与Claude Cowork一起使用
- 开放克劳德合作
- 点击“+添加文件夹”,选择一个包含SDLXLIFF文件的文件夹
- MCP工具将自动可用
- 请Claude审阅或编辑翻译
兼容性
| 产品 | 有效吗? | 备注 |
|---|---|---|
| 克劳德协作 | 是 | 添加一个包含SDLXLIFF文件的文件夹并开始聊天 |
| 克劳德桌面(聊天) | 没有 | 沙盒限制 阻止文件访问 |
| Claude.ai(网络) | 否 | 没有本地文件系统访问权限 |
特性
- 自然的对话 -用通俗易懂的语言提问并请求更改
- 错误检测 -查找语法、拼写、一致性和术语问题
- QA检查 -具有术语表支持的自动化质量保证
- 安全更正 -编辑翻译,同时保留所有格式标签
- 批量审核 -使用自动分页处理大文件
- 变更追踪 -修改后的段标记为
RejectedTranslation便于在Trados中查看
人在回路
克劳德的更正是 建议,而非最终更改。工作流使您能够控制:
- Claude将所有修改的片段标记为
RejectedTranslation - 在SDL Trados Studio中打开文件
- 按状态筛选→
RejectedTranslation只看到克劳德的变化 - 审查每一项建议 确认 或 编辑 根据需要
- 您批准的更改将变为
Translated或ApprovedTranslation
这确保了人为的监督——你总是对翻译的内容有最终决定权。
可用工具
read_sdlxliff
从SDLXLIFF文件中提取翻译段。
参数:
file_path(字符串,必填):SDLXLIFF文件的路径offset(整数,可选):分页的起始段索引(默认值:0)limit(整数,可选):要返回的最大段数(默认值:全部)。大文件使用50。include_tags(布尔值,可选):包含带格式标记的段的标记文本字段(默认值:false)
退货: 带有分页元数据和段的JSON对象:
{
"total_segments": 184,
"offset": 0,
"count": 50,
"has_more": true,
"segments": [...]
}每个部分包含:
segment_id:唯一段标识符(mrk-mid)trans_unit_id:父跨单位IDsource:源文本(干净,无标签)target:目标文本(干净,无标签)has_tags:段是否包含内联格式标记source_tagged:带有标记占位符的源(仅当has_tags=true和include_tags=true)target_tagged:带有标记占位符的目标(仅当has_tags=true和include_tags=true)statusSDL确认级别(例如。,Translated,RejectedTranslation)locked:段是否被锁定percent:TM匹配百分比。,100精确匹配(仅在可用时显示)origin:匹配来源,例如。,tm,document-match,auto-propagated(仅在可用时显示)text_match:上下文匹配指示符-值SourceAndTarget意味着这是一个CM(仅用于上下文匹配)repetitions:此源文本在文件中出现的次数(仅在>1时出现)
get_sdlxliff_segment
通过ID获取特定段。
参数:
file_path(字符串,必填):SDLXLIFF文件的路径segment_id(string,必填):要检索的段ID(mrk-mid)
update_sdlxliff_segment
更新分段的目标文本。自动将状态设置为 RejectedTranslation.
参数:
file_path(字符串,必填):SDLXLIFF文件的路径segment_id(string,必填):要更新的段ID(mrk-mid)target_text(字符串,必填):新的目标文本。对于带有标签的分段,请包含占位符。preserve_tags(布尔值,可选):验证并恢复占位符中的标签(默认值:true)
注: 更改将保存在内存中,直到 save_sdlxliff 被称为。对于带有格式标签的段(has_tags=true),必须在目标文本中包含标记占位符。看 标签处理 在......下面
validate_sdlxliff_segment
在更新之前,预先验证对分段的拟议更改。
参数:
file_path(字符串,必填):SDLXLIFF文件的路径segment_id(字符串,必填):要验证的段IDtarget_text(字符串,必填):带有标记占位符的建议目标文本
退货: 包含错误、警告和缺失/额外标签信息的验证结果。
save_sdlxliff
将更改保存到SDLXLIFF文件。
参数:
file_path(字符串,必填):SDLXLIFF文件的路径output_path(字符串,可选):备选输出路径(默认:覆盖原始路径)
get_sdlxliff_statistics
获取翻译文件的统计信息。
参数:
file_path(字符串,必填):SDLXLIFF文件的路径
退货: JSON对象:
total_segments:分段总数status_counts:按SDL确认级别统计分段数locked_count:锁定段的数量
qa_check_sdlxliff
对翻译文件进行质量保证检查。
参数:
file_path(字符串,必填):SDLXLIFF文件的路径segment_ids(字符串数组,可选):要检查的特定段ID。如果省略,则检查所有分段。checks(字符串数组,可选):要运行的特定检查。如果省略,则运行默认检查(除spelling).glossary_path(字符串,可选):用于术语检查的术语表文件的路径。如果省略,则自动发现glossary.tsv,glossary.txt,terminology.tsv,或terminology.txt与SDLXLIFF文件位于同一目录中。dictionary_path(字符串,可选):用于拼写检查的自定义词典的路径。如果省略,则自动发现dictionary.txt,custom_words.txt,或spelling.txt与SDLXLIFF文件位于同一目录中。
可用支票:
| 检查 | 描述 | 默认值 |
|---|---|---|
trailing_punctuation | 源以结尾 .!?:; 但目标没有(反之亦然) | 是 |
numbers | 源中的数字与目标中的数字不匹配 | 是 |
double_spaces | 目标包含连续空格 | 是 |
whitespace | 源和目标之间的前导/尾随空格不匹配 | 是 |
brackets | 不同计数 ()[]{} 源和目标之间 | 是 |
inconsistent_repetitions | 具有相同源文本的片段具有不同的翻译 | 是 |
terminology | 源中的术语必须出现在目标中(需要术语表文件) | 是 |
spelling | 使用文件元数据中的目标语言对目标文本进行拼写检查 | 不 (选择加入) |
拼写检查:
- 必须明确要求:
checks: ["spelling"]或checks: ["spelling", "numbers", ...] - 使用来自SDLXLIFF元数据的目标语言(例如。,
de-DE,ru-RU) - 支持的语言:
- 俄语、乌克兰语、英语: Yandex。拼写者 (适当的形态词典) - 德语、西班牙语、法语、意大利语、葡萄牙语、荷兰语:众包
- 不支持的语言会被自动跳过(罕见语言不会出现误报)
术语表文件格式:
# Comment lines start with #
# Format: source_termtarget_term
Galaxy Galaxy
Settings Настройки
Smart Switch Smart Switch单个术语(没有制表符)意味着该术语在目标中必须保持不变。
自定义词典文件格式(用于拼写):
# Comment lines start with #
# One word per line (case-insensitive)
SDLXLIFF
Trados
MCP
ProductName退货: JSON对象:
{
"total_segments": 184,
"segments_checked": 184,
"segments_with_issues": 12,
"glossary_used": "/path/to/glossary.tsv",
"glossary_terms_count": 5,
"target_language": "de-DE",
"dictionary_used": "/path/to/dictionary.txt",
"custom_words_count": 10,
"issues": [
{
"segment_id": "42",
"check": "spelling",
"severity": "warning",
"message": "Possible misspelling: 'korrektr' (suggestions: korrektor, korrekter, korrekt)",
"source_excerpt": "",
"target_excerpt": "Das ist ein korrektr Satz..."
}
],
"summary": {
"trailing_punctuation": 5,
"numbers": 3,
"spelling": 2
}
}如果要求拼写,但语言不受支持:
{
"spelling_skipped": "Language 'ja-JP' not supported for spelling check"
}SDLXLIFF格式
SDLXLLIFF是SDL对XLIFF 1.2标准的扩展,由SDL Trados Studio使用。主要特征:
- 每 `` 元素是一个单独的可翻译段
- 段ID是
mid属性值(全局唯一数字) - 状态存储在 `
(不是XLIFFstate` 属性) - 有效的SDL确认级别:
Draft,Translated,RejectedTranslation,ApprovedTranslation,RejectedSignOff,ApprovedSignOff
标签处理
SDLXLIFF文件通常包含内联格式标记(`, , , `等),控制最终文档中的粗体、斜体、颜色、换行符和其他格式。 在翻译更新期间必须保留这些标签 否则格式将丢失。
运作原理
MCP服务器将XML标签转换为可读占位符:
| XML标签 | 占位符 | 描述 |
|---|---|---|
text | {5}text{/5} | 配对格式化标签 |
| `` | {x:5} | 自闭标签(例如换行符) |
| `` | {5} | 开始配对标签 |
| `` | {/5} | 结束配对标签 |
示例
原始XML:
Acme& Events摘录如下:
{
"source": "Acme& Events",
"source_tagged": "{5}Acme{/5}{6}&{/6}{7} Events{/7}",
"has_tags": true
}更新此分段,您必须包含所有标签:
{5}Acme{/5}{6}&{/6}{7} Мероприятия{/7}验证规则
使用标签更新分段时:
- 所有原始标签必须存在 -缺少标签将导致更新被拒绝
- 不允许添加额外标签 -只能使用原始段中的标记
- 标签必须正确配对 -开幕式
{5}必须匹配{/5} - 标签顺序可以更改 -允许语言之间的语序差异(带警告)
标记分段的工作流程
- 阅读片段
read_sdlxliff-检查has_tags领域 - 对于具有以下特征的细分市场
has_tags=true,使用get_sdlxliff_segment为了得到source_tagged/target_tagged领域 - 调用时包含所有占位符
update_sdlxliff_segment - 如果验证失败,错误消息将显示哪些标签丢失
Claude桌面聊天限制
克劳德桌面聊天运行克劳德在一个 gVisor沙盒容器 为了安全。当您通过“+添加文件”附加文件时,它们会被上传到 /mnt/user-data/uploads/ 在这个容器里。
问题: MCP服务器在您的 宿主机,不在容器内。他们无法访问存储附加文件的沙盒文件系统。
┌─────────────────────────────────────────┐
│ gVisor Container │
│ ┌─────────────────────────────────┐ │
│ │ /mnt/user-data/uploads/ │ │
│ │ └── your_file.sdlxliff │ ←── File uploaded here
│ └─────────────────────────────────┘ │
│ Claude │
└─────────────────────────────────────────┘
╳ No access ╳
┌─────────────────────────────────────────┐
│ Host Machine │
│ ┌─────────────────────────────────┐ │
│ │ MCP Server (sdlxliff) │ ←── Cannot read container filesystem
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘解决方法: 使用 克劳德协作 或 XLIFF聊天 相反,它们可以直接访问您的本地文件。
发展
# Clone the repository
git clone https://github.com/EugeneAnt/mcp-server-sdlxliff.git
cd mcp-server-sdlxliff
# Install with dev dependencies
uv pip install -e ".[dev]"
# Run tests
pytest构建桌面扩展
要创建 .mcpb 用于分发的捆绑包:
# Install the MCPB CLI
npm install -g @anthropic-ai/mcpb
# Validate the manifest
mcpb validate manifest.json
# Create the bundle
mcpb pack .这创造了 mcp-server-sdlxliff-X.X.X.mcpb 已准备好在Claude Desktop中安装。
构建桌面应用程序
cd desktop
# Install dependencies
bun install
# Build for macOS
bun run tauri build这创造了 XLIFF Chat.dmg 在 desktop/src-tauri/target/release/bundle/dmg/.
致谢
- 俄语、乌克兰语和英语的拼写检查: Yandex。拼写者
许可证
MIT许可证-请参阅 许可证 了解详情。
贡献
欢迎投稿!请随时提交拉取请求。
