mcpField
T
translate

translate

github.com/tuesd4y开发0150 次安装5 周前更新
代码仓库

关于 translate

用于查找 XLF 翻译文件中的新增条目、定位代码上下文并提出译文供审核的技能。它采用人工确认流程,保留占位符,并更新获批条目。

主要功能

  1. 01提取新增 XLF 条目
  2. 02查找代码中的源文上下文
  3. 03提出译文供审核
  4. 04保留 XML 占位符
  5. 05写入获批译文

适用场景

  1. 01审核新增界面译文
  2. 02结合代码上下文翻译条目
  3. 03更新已批准的 XLF 目标文本

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/tuesd4y/agent-skills --skill translate

安装后在 Claude Code 中输入/translate确认已加载。

附带文件scripts/find_new_translations.py

详细介绍

翻译技能

通过查找 state="new" 的 target、定位源文本上下文,并提出译文供审核,翻译 XLF 翻译文件中的新条目。

工作流

步骤 1:提取新的翻译条目

使用 Bash 工具运行提取脚本:

python3 skills/translate/scripts/find_new_translations.py

该脚本会输出 JSON,其中包含所有已更改的 XLF 文件及其 state="new" 条目,包括翻译 ID、源文本/目标文本、行号和占位符。如果 files 数组为空,请告知用户没有找到新的翻译。

步骤 2:查找源文本上下文

对于脚本输出中的每个翻译 ID,使用 Grep 工具在代码库中查找其用法:

  • 使用文件模式 **/*.ts 搜索 @@{ID},查找 $localize 字符串
  • 使用文件模式 **/*.html 搜索 @@{ID},查找 i18n 属性

对匹配的文件使用 Read 工具,获取前后 5-10 行的上下文。

步骤 3:生成并审核译文

对于每个 state="new" 条目,向用户展示:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Translation ID: {id}
File: {xlf_file_path}
Target Language: {language_name}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Source (English):
  {source_text}

Context:
  {file_path}:{line_number}
  {code_snippet}

Proposed Translation:
  {proposed_translation}

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

等待用户确认后再继续。可选操作:

  • 接受建议的译文
  • 提供其他译文
  • 跳过此条目
步骤 4:应用已批准的译文

对于已批准的译文,更新 XLF 文件:

  1. 将 <target> 元素内容替换为已批准的译文
  2. 将 state="new" 改为 state="ai"

之前:

<trans-unit id="myTranslationId" datatype="html">
  <source>English text</source>
  <target state="new">Old or empty translation</target>
</trans-unit>

之后:

<trans-unit id="myTranslationId" datatype="html">
  <source>English text</source>
  <target state="ai">Translated text</target>
</trans-unit>

语言检测

根据文件名模式识别目标语言:

文件名模式语言本地名称
messages.de.xlf德语Deutsch
messages.fr.xlf法语Francais
messages.es.xlf西班牙语Espanol
messages.hu.xlf匈牙利语Magyar

占位符处理

重要:保留源文本中的所有 XML 占位符元素,确保其完全一致。这些元素包括:

元素用途示例
<x id="INTERPOLATION" equiv-text="{{...}}"/>Angular 插值{{count}}
<x id="INTERPOLATION_n"/>多个插值第二个、第三个插值
<x id="PH" equiv-text="..."/>命名占位符ICU 表达式
<x id="PH_n"/>多个占位符其他占位符
<x id="LINE_BREAK" ctype="lb"/>换行<br>
<x id="START_TAG_SPAN"/>HTML 开始标签<span>
<x id="CLOSE_TAG_SPAN"/>HTML 结束标签</span>
<x id="START_BOLD_TEXT"/>粗体文本起始标记<b>
<x id="CLOSE_BOLD_TEXT"/>粗体文本结束标记</b>

带占位符的示例:

<source>Hello <x id="INTERPOLATION" equiv-text="{{name}}"/>, you have <x id="INTERPOLATION_1" equiv-text="{{count}}"/> messages.</source>
<target state="ai">Hallo <x id="INTERPOLATION" equiv-text="{{name}}"/>, Sie haben <x id="INTERPOLATION_1" equiv-text="{{count}}"/> Nachrichten.</target>

翻译指南

  1. 匹配现有语气:查看文件中的其他译文,以保持风格一致
  2. 保留占位符:原样复制占位符元素,只翻译其周围的文本
  3. 考虑上下文:结合代码上下文理解文本的用途
  4. 领域术语:使用以下领域的标准术语:
    • 出行/交通:通勤、排放、CO2、出行方式占比
    • UI 元素:按钮、标签、工具提示
    • 商业术语:审计、评分、分析
  5. 正式与非正式语气:商业软件中的德语通常使用正式的“Sie”形式

常见翻译模式

德语(de)
  • "Save" → "保存"
  • "Cancel" → "取消"
  • "Loading..." → "正在加载..."
  • "Error" → "错误"
  • "Success" → "成功"
法语(fr)
  • "Save" → "保存"
  • "Cancel" → "取消"
  • "Loading..." → "正在加载..."
  • "Error" → "错误"
  • "Success" → "成功"
西班牙语(es)
  • "Save" → "保存"
  • "Cancel" → "取消"
  • "Loading..." → "正在加载..."
  • "Error" → "错误"
  • "Success" → "成功"
匈牙利语(hu)
  • "Save" → "保存"
  • "Cancel" → "取消"
  • "Loading..." → "正在加载..."
  • "Error" → "错误"
  • "Success" → "成功"

批量处理

需要翻译多个条目时:

  1. 按文件分组以提高效率
  2. 显示每个文件中需要翻译的条目数量摘要
  3. 逐个处理条目,并等待批准
  4. 审阅完所有条目后,显示所做更改的摘要

错误处理

  • 如果没有找到已更改的翻译文件:告知用户,并建议运行 git status
  • 如果没有找到 state="new" 条目:告知用户所有翻译均为最新
  • 如果找不到上下文:仍根据源文本提出翻译,并注明缺少上下文
  • 如果文件解析出错:报告错误并跳过有问题的文件

评论

支持 Markdown