name: “multi-language-translator”
description: “Android strings.xml 多语言翻译工具。支持29种语言自动翻译,包含阿拉伯语RTL布局规则。当用户需要翻译词条到多种语言、批量翻译、多语言同步时触发。准则是:翻译准确、不重复、不缺失、格式无误。”
Multi-Language Translator
用于 Android strings.xml 的多语言翻译工具,支持29种语言自动翻译,包含阿拉伯语RTL布局规则。
支持的语言列表
【强制】必须支持以下29种语言:
| 序号 | 语言名称 | 语言代码 | values 目录 | 备注 |
|---|---|---|---|---|
| 1 | 阿拉伯语 | ar | values-ar | RTL布局,需要特殊处理 |
| 2 | 哈萨克语 | kk | values-kk | |
| 3 | 韩语 | ko | values-ko | |
| 4 | 瑞典语 | sv | values-sv | |
| 5 | 泰语 | th | values-th | |
| 6 | 西班牙语 | es | values-es | |
| 7 | 丹麦语 | da | values-da | |
| 8 | 简体中文 | zh-rCN | values-zh-rCN | |
| 9 | 希腊语 | el | values-el | |
| 10 | 乌克兰语 | uk | values-uk | |
| 11 | 拉脱维亚语 | lv | values-lv | |
| 12 | 德语 | de | values-de | |
| 13 | 葡萄牙语 | pt | values-pt | |
| 14 | 立陶宛语 | lt | values-lt | |
| 15 | 意大利语 | it | values-it | |
| 16 | 繁体中文 | zh-rTW | values-zh-rTW | |
| 17 | 捷克语 | cs | values-cs | |
| 18 | 日语 | ja | values-ja | |
| 19 | 俄语 | ru | values-ru | |
| 20 | 土耳其语 | tr | values-tr | |
| 21 | 罗马尼亚语 | ro | values-ro | |
| 22 | 挪威语 | nb | values-nb | |
| 23 | 越南语 | vi | values-vi | |
| 24 | 波兰语 | pl | values-pl | |
| 25 | 印尼语 | in | values-in | |
| 26 | 印度语 | hi | values-hi | हिन्दी |
| 27 | 法语 | fr | values-fr | |
| 28 | 荷兰语 | nl | values-nl | |
| 29 | 英语 | en | values-en | 源语言 |
核心原则
1. 翻译准确性
- 专业翻译: 使用专业术语,符合目标语言习惯
- 上下文理解: 根据词条名称推断使用场景
- 术语一致性: 同一术语在不同词条中保持一致翻译
- 专有名词: WiFi、HDMI、USB、PIN 等专有名词保持原样
2. 防止重复
- 精确匹配: 使用
<string name="xxx">格式匹配 - Set 集合: 使用 Set 集合存储词条名称,自动去重
- 双重验证: 集合差集 + Grep 搜索验证
- 添加前检查: 在目标文件中确认词条不存在
3. 防止缺失
- 完整提取: 提取源文件所有词条
- 逐个验证: 验证每个词条在目标文件中是否存在
- 进度追踪: 记录已处理和未处理的词条
- 最终验证: 检查源文件和目标文件词条数量是否一致
4. 格式正确性
- XML 格式: 确保标签正确闭合
- 特殊字符: 正确转义 XML 特殊字符
- 全语言单引号转义: 任意
values-*语言文件中出现'时必须写成\'(values-fr、values-ca为高频易错示例) - CDATA 支持: 支持 CDATA 格式
阿拉伯语 RTL 布局规则
【重要】阿拉伯语是从右到左(RTL)的语言,需要特殊处理:
1. 文本方向
<!-- 错误示例 -->
<string name="welcome">مرحبا بك في التطبيق</string>
<!-- 正确示例: 添加 RTL 标记 -->
<string name="welcome">\u202Bمرحبا بك في التطبيق\u202C</string>
2. 数字和符号
<!-- 阿拉伯语中的数字应该从左到右显示 -->
<string name="price">%1$d دولار</string>
<!-- 使用 LTR 标记确保数字正确显示 -->
<string name="price">\u202A%1$d\u202C دولار</string>
3. 混合文本
<!-- 阿拉伯语文本中包含英文单词 -->
<string name="settings_wifi">إعدادات WiFi</string>
<!-- 正确处理: WiFi 保持 LTR -->
<string name="settings_wifi">إعدادات \u202AWiFi\u202C</string>
4. 标点符号
<!-- 标点符号位置 -->
<string name="message">مرحبا!</string>
<!-- RTL 环境下标点符号应该在左侧 -->
<string name="message">!مرحبا</string>
5. UI 布局适配
<!-- 需要镜像的 UI 元素 -->
<!-- 返回箭头: LTR 中指向左, RTL 中指向右 -->
<!-- 进度条: LTR 中从左到右, RTL 中从右到左 -->
<!-- 图标位置: LTR 中在左侧, RTL 中在右侧 -->
6. 阿拉伯语翻译规则
- 数字: 阿拉伯语使用阿拉伯-印度数字 (٠١٢٣٤٥٦٧٨٩)
- 日期: 日期格式应该适配 RTL
- 货币: 货币符号位置需要调整
- 列表: 列表项符号位置需要镜像
工作流程
Step 0: 检查进度文件
【强制】首先检查是否存在进度文件:
.trae/temp/multi-language-translator-progress.json
断点续传逻辑:
if 进度文件存在:
读取进度文件
if status == "completed":
输出完成报告,结束任务
else:
从上次中断的位置继续处理
else:
创建新进度文件
从头开始处理
Step 1: 分析源文件
【强制】读取源文件并提取所有词条:
1. 读取 values/strings.xml
2. 使用正则表达式提取所有词条名称: <string name="([^"]+)"
3. 创建 Set 集合存储词条名称
4. 统计词条数量
5. 更新进度文件
Step 2: 确定目标语言
【强制】根据用户需求确定目标语言:
情况1: 用户指定目标语言
用户: "翻译到阿拉伯语、俄语、西班牙语"
目标语言: [ar, ru, es]
情况2: 用户未指定,翻译到所有支持的语言
用户: "翻译到所有语言"
目标语言: [ar, kk, ko, sv, th, es, da, zh-rCN, el, uk, lv, de, pt, lt, it, zh-rTW, cs, ja, ru, tr, ro, nb, vi, pl, in, hi, fr, nl]
情况3: 用户指定项目,自动检测需要翻译的语言
用户: "翻译这个项目的 strings.xml"
检测项目中的 values-xx 目录
目标语言: 检测到的所有语言
Step 3: 【关键】按语言顺序处理
【强制】【关键】必须按语言顺序处理,一个语言翻译完成后再进行下一个语言:
for 每个目标语言 in 目标语言列表:
【必须】完整处理该语言的所有步骤(Step 4-6)
【必须】该语言翻译完成后,再处理下一个语言
【禁止】同时处理多个语言
【禁止】跳过某个语言
处理顺序示例:
目标语言: [ar, ru, es]
处理顺序:
1. 阿拉伯语 (ar):
- Step 4: 分段处理
- Step 5: 翻译词条
- Step 6: 验证结果
- 更新进度文件,标记阿拉伯语为 "completed"
2. 俄语 (ru):
- Step 4: 分段处理
- Step 5: 翻译词条
- Step 6: 验证结果
- 更新进度文件,标记俄语为 "completed"
3. 西班牙语 (es):
- Step 4: 分段处理
- Step 5: 翻译词条
- Step 6: 验证结果
- 更新进度文件,标记西班牙语为 "completed"
Step 4: 分段处理
【强制】【关键】分段规则:
if 缺失词条数 <= 100:
不分段,一次性处理
else:
【必须】按 100 个缺失词条分段处理
【必须】创建 TodoWrite 任务列表
【禁止】跳过分段直接一次性处理
Step 5: 翻译词条
【关键】翻译流程:
阶段0: 检查目标文件夹
在处理每个语言之前,必须检查目标文件夹是否存在:
1. 检查 values-xx 目录是否存在
2. 如果不存在,【必须】创建该目录
3. 如果不存在,【必须】创建空的 strings.xml 文件,格式如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- 多语言翻译 - 创建新的语言文件夹 -->
<resources>
</resources>
阶段1: 读取缺失词条
从进度文件中读取当前语言的 status == "pending" 的词条
阶段2: 批量翻译
一次性翻译该段落的所有待处理词条(最多100个):
- 确保翻译准确性
- 符合目标语言习惯
- 保持术语一致性
- 专有名词保持原样
- 【重要】阿拉伯语需要添加 RTL 标记
- 【强制】目标为任意 values-* 语言文件时,所有单引号 `'` 必须转义为 `\'`
阶段3: 添加到目标文件
对于每个要添加的词条:
1. 【必须】在目标文件中搜索 name="词条名称"
2. 【必须】确认搜索结果为空(不存在)
3. 【必须】才允许添加到目标文件
4. 【必须】使用 SearchReplace 工具批量添加
5. 【必须】在 </resources> 之前插入
Step 6: 验证结果
【强制】完成当前语言的所有翻译后进行验证:
1. 重新统计当前语言的目标文件词条数量
2. 确认与源文件数量一致
3. 检查是否有重复词条
4. 验证所有新增词条
5. 【重要】如果是阿拉伯语,检查 RTL 标记
6. 【强制】检查当前语言词条中的 `'` 是否全部转义为 `\'`
7. 更新进度文件,标记当前语言为 "completed"
8. 【关键】继续处理下一个语言(如果有)
Step 7: 输出完成报告
报告内容:
## ✅ 多语言翻译完成报告
### 统计信息
- 源文件词条数: XXX
- 翻译语言数: XX
- 总翻译词条数: XXX
### 各语言翻译详情
| 语言 | 词条数 | 状态 | 备注 |
|-----|-------|------|------|
| 阿拉伯语 | XXX | ✅ | RTL布局已处理 |
| 俄语 | XXX | ✅ | |
| ... | ... | ... | |
### 验证结果
- ✅ 词条数量一致
- ✅ 无重复词条
- ✅ 格式正确
- ✅ 阿拉伯语 RTL 标记正确
### 进度文件
进度追踪文件已保存在: `.trae/temp/multi-language-translator-progress.json`
进度文件格式
进度文件路径:
.trae/temp/multi-language-translator-progress.json
进度文件格式:
{
"task_info": {
"source_file": "values/strings.xml",
"target_languages": ["ar", "ru", "es"],
"current_language_index": 0,
"created_at": "2025-01-27 10:00:00",
"updated_at": "2025-01-27 10:30:00"
},
"statistics": {
"source_count": 1375,
"total_languages": 3,
"completed_languages": 0,
"total_translations": 4125,
"completed_translations": 0
},
"languages": [
{
"language_code": "ar",
"language_name": "阿拉伯语",
"target_file": "values-ar/strings.xml",
"status": "in_progress",
"missing_count": 93,
"processed_count": 50,
"segments": [
{
"segment_id": 1,
"range": "1-93",
"status": "in_progress",
"processed_at": "2025-01-27 10:15:00"
}
],
"missing_strings": [
{
"name": "admin_pwd_wrong_over_five_times_tip",
"english_value": "Please try again in 5 minutes",
"translated_value": "يرجى المحاولة مرة أخرى بعد 5 دقائق",
"status": "completed",
"rtl_processed": true
}
]
},
{
"language_code": "ru",
"language_name": "俄语",
"target_file": "values-ru/strings.xml",
"status": "pending",
"missing_count": 0,
"processed_count": 0,
"segments": [],
"missing_strings": []
},
{
"language_code": "es",
"language_name": "西班牙语",
"target_file": "values-es/strings.xml",
"status": "pending",
"missing_count": 0,
"processed_count": 0,
"segments": [],
"missing_strings": []
}
],
"status": "in_progress"
}
【关键】进度文件状态说明:
语言状态 (languages[].status):
pending: 待处理(还未开始)in_progress: 处理中(当前正在处理)completed: 已完成(该语言所有词条已翻译)
整体状态 (status):
pending: 任务未开始in_progress: 任务进行中completed: 所有语言都已完成
【关键】current_language_index 说明:
- 表示当前正在处理的语言索引
- 从 0 开始
- 每完成一个语言,索引 +1
- 当 current_language_index == target_languages.length 时,任务完成
添加格式规范
批量添加格式
<!-- 多语言翻译 - 阿拉伯语 - 第N段 (共X个) -->
<string name="词条名称1">翻译内容1</string>
<string name="词条名称2">翻译内容2</string>
...
阿拉伯语特殊格式
<!-- 多语言翻译 - 阿拉伯语 - 第N段 (共X个) -->
<!-- 注意: 阿拉伯语使用 RTL 布局 -->
<string name="welcome">\u202Bمرحبا بك\u202C</string>
<string name="settings_wifi">إعدادات \u202AWiFi\u202C</string>
...
翻译质量检查清单
通用检查项
- 翻译准确,符合目标语言习惯
- 专有名词保持原样(WiFi、HDMI、USB、PIN 等)
- 术语翻译一致
- 无重复词条
- 无缺失词条
- XML 格式正确
阿拉伯语特殊检查项
- RTL 标记正确(\u202B 和 \u202C)
- 数字和符号方向正确
- 混合文本处理正确
- 标点符号位置正确
- 货币符号位置正确
注意事项
-
【关键】进度文件必须创建和更新:
- 创建进度文件后必须立即更新
- 每个语言处理完成后必须更新进度文件
- 任务完成后必须更新状态为 “completed”
-
【关键】阿拉伯语 RTL 处理:
- 必须添加 RTL 标记
- 数字和符号需要特殊处理
- 混合文本需要 LTR 标记
- 标点符号位置需要调整
-
【关键】分段阈值:
- 缺失词条数 ≤ 100: 不分段
- 缺失词条数 > 100: 按 100 个词条分段
-
【关键】防止重复词条:
- 使用 Read 工具读取完整文件内容
- 使用 Set 集合存储词条名称(自动去重)
- 双重验证: 集合差集 + Grep 搜索验证
- 添加前最终检查: Grep 确认不存在
-
【关键】翻译准确性:
- 确保翻译符合目标语言习惯
- 专有名词保持原样
- 术语翻译一致
示例用法
示例1: 翻译到指定语言
用户: 帮我翻译 strings.xml 到阿拉伯语、俄语、西班牙语
执行步骤:
1. Step 0: 检查进度文件 → 不存在
2. 创建进度文件
3. Step 1: 读取源文件,提取所有词条
4. Step 2: 确定目标语言: [ar, ru, es]
5. Step 3: 按语言顺序处理:
【第1个语言: 阿拉伯语 (ar)】
- Step 4: 分段处理(如果缺失词条 > 100)
- Step 5: 翻译词条(添加 RTL 标记)
- Step 6: 验证结果
- 更新进度文件,标记阿拉伯语为 "completed"
- current_language_index = 1
【第2个语言: 俄语 (ru)】
- Step 4: 分段处理(如果缺失词条 > 100)
- Step 5: 翻译词条
- Step 6: 验证结果
- 更新进度文件,标记俄语为 "completed"
- current_language_index = 2
【第3个语言: 西班牙语 (es)】
- Step 4: 分段处理(如果缺失词条 > 100)
- Step 5: 翻译词条
- Step 6: 验证结果
- 更新进度文件,标记西班牙语为 "completed"
- current_language_index = 3
6. Step 7: 输出完成报告
示例2: 翻译到所有支持的语言
用户: 帮我翻译 strings.xml 到所有支持的语言
执行步骤:
1. Step 0: 检查进度文件 → 不存在
2. 创建进度文件
3. Step 1: 读取源文件,提取所有词条
4. Step 2: 确定目标语言: 所有28种语言
5. Step 3: 按语言顺序处理(共28个语言):
【第1个语言: 阿拉伯语 (ar)】
- Step 4-6: 完整处理
- 更新进度文件,标记为 "completed"
【第2个语言: 哈萨克语 (kk)】
- Step 4-6: 完整处理
- 更新进度文件,标记为 "completed"
... (继续处理其他语言)
【第28个语言: 荷兰语 (nl)】
- Step 4-6: 完整处理
- 更新进度文件,标记为 "completed"
6. Step 7: 输出完成报告
示例3: 断点续传
用户: 继续翻译 strings.xml
执行步骤:
1. Step 0: 检查进度文件 → 存在
2. 读取进度文件:
- status: "in_progress"
- current_language_index: 1
- languages[0].status: "completed" (阿拉伯语已完成)
- languages[1].status: "in_progress" (俄语处理中)
- languages[2].status: "pending" (西班牙语待处理)
3. 从俄语继续处理:
- 检查俄语的 segments 和 missing_strings
- 跳过已完成的段落和词条
- 继续处理俄语的剩余部分
- 完成俄语后,更新进度文件
- current_language_index = 2
4. 继续处理西班牙语:
- Step 4-6: 完整处理
- 更新进度文件,标记为 "completed"
- current_language_index = 3
5. Step 7: 输出完成报告
常见错误
| 错误 | 原因 | 解决方法 |
|---|---|---|
| 未创建进度文件 | 忽略进度追踪 | 强制创建进度文件 |
| 未更新进度文件 | 处理后忘记更新 | 每步操作后立即更新 |
| 重复处理已完成词条 | 未检查进度文件 | 首先检查进度文件,跳过已完成词条 |
| 重复添加词条 | 未验证词条是否已存在 | 使用 Set 集合 + Grep 双重验证 |
| 遗漏词条 | 一次性处理太多 | 按100个词条分段处理 |
| 阿拉伯语 RTL 错误 | 未添加 RTL 标记 | 强制添加 \u202B 和 \u202C 标记 |
| 多语言单引号未转义 | 在任意 values- 文件中直接使用 '* |
统一替换为 \',再执行 XML 校验(fr/ca 为高发语言) |
| 翻译不准确 | 未理解上下文 | 根据词条名称推断使用场景 |
| 同时处理多个语言 | 未按顺序处理 | 【关键】必须一个语言完成后再处理下一个 |
| 跳过某个语言 | 未检查进度文件 | 检查 current_language_index,确保不跳过 |
| 语言状态不一致 | 未更新进度文件 | 每个语言完成后立即更新状态 |
执行检查清单
【强制】在开始处理前,必须完成以下检查:
检查点0: 断点续传检查
- 【必须】 已检查进度文件是否存在
- 【必须】 如果存在,已读取进度文件
- 【必须】 如果已完成,已输出报告并结束任务
- 【必须】 如果未完成,已确定 current_language_index
检查点1: 进度文件创建/更新
- 【必须】 已创建进度文件(如果不存在)
- 【必须】 已初始化所有目标语言的状态
- 【必须】 已设置 current_language_index = 0
检查点2: 【关键】语言顺序处理
- 【必须】 已确定目标语言列表
- 【必须】 已按顺序处理语言
- 【必须】 当前语言处理完成后才处理下一个语言
- 【禁止】 同时处理多个语言
检查点3: 当前语言的缺失词条列表
- 【必须】 已使用 Read 工具读取完整文件内容
- 【必须】 已使用 Set 集合存储词条名称
- 【必须】 已使用 Set 差集计算缺失词条
- 【必须】 已使用 Grep 逐个验证缺失词条
- 【必须】 已写入进度文件的当前语言 missing_strings
检查点4: 当前语言的分段处理
- 已计算段落数
- 已写入进度文件的当前语言 segments
检查点5: 当前语言的每段处理完成后
- 【必须】 已使用 Grep 验证每个词条在目标文件中不存在
- 【必须】 已将该段落的词条添加到目标文件
- 【必须】 已更新进度文件中的 missing_strings 状态
- 【必须】 已更新进度文件中的 segments 状态
- 【重要】 如果是阿拉伯语,已添加 RTL 标记
检查点6: 当前语言完成后
- 【必须】 已使用 Grep 检查重复词条
- 【必须】 已验证所有新增词条无重复
- 【重要】 如果是阿拉伯语,已验证 RTL 标记正确
- 【强制】 已验证当前语言词条中的
'全部转义为\' - 【必须】 已更新进度文件,标记当前语言为 “completed”
- 【必须】 已更新 current_language_index + 1
- 【关键】 如果还有下一个语言,继续处理下一个语言
检查点7: 所有语言完成后
- 【必须】 已验证所有语言都标记为 “completed”
- 【必须】 current_language_index == target_languages.length
- 已更新进度文件整体状态为 completed
- 已输出完成报告
【重要】如果任何检查点未通过,必须立即停止并报告错误!
快速参考
进度文件路径
.trae/temp/multi-language-translator-progress.json
状态值
pending: 待处理in_progress: 处理中completed: 已完成skipped: 已跳过
分段处理规则
- 词条数 ≤ 100: 不分段
- 词条数 > 100: 按 100 个词条分段
阿拉伯语 RTL 标记
\u202B: RTL 开始标记\u202C: 方向标记结束\u202A: LTR 开始标记
支持的语言数量
- 总计: 29 种语言
- 包含源语言(英语): 1 种
- 目标语言: 28 种