关于 translate
用于查找 XLF 翻译文件中的新增条目、定位代码上下文并提出译文供审核的技能。它采用人工确认流程,保留占位符,并更新获批条目。
主要功能
- 01提取新增 XLF 条目
- 02查找代码中的源文上下文
- 03提出译文供审核
- 04保留 XML 占位符
- 05写入获批译文
适用场景
- 01审核新增界面译文
- 02结合代码上下文翻译条目
- 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 文件:
- 将
<target>元素内容替换为已批准的译文 - 将
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>
翻译指南
- 匹配现有语气:查看文件中的其他译文,以保持风格一致
- 保留占位符:原样复制占位符元素,只翻译其周围的文本
- 考虑上下文:结合代码上下文理解文本的用途
- 领域术语:使用以下领域的标准术语:
- 出行/交通:通勤、排放、CO2、出行方式占比
- UI 元素:按钮、标签、工具提示
- 商业术语:审计、评分、分析
- 正式与非正式语气:商业软件中的德语通常使用正式的“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" → "成功"
批量处理
需要翻译多个条目时:
- 按文件分组以提高效率
- 显示每个文件中需要翻译的条目数量摘要
- 逐个处理条目,并等待批准
- 审阅完所有条目后,显示所做更改的摘要
错误处理
- 如果没有找到已更改的翻译文件:告知用户,并建议运行
git status - 如果没有找到
state="new"条目:告知用户所有翻译均为最新 - 如果找不到上下文:仍根据源文本提出翻译,并注明缺少上下文
- 如果文件解析出错:报告错误并跳过有问题的文件
评论
支持 Markdown