【SKILL创作】Android strings.xml 多语言翻译工具


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-frvalues-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)
  • 数字和符号方向正确
  • 混合文本处理正确
  • 标点符号位置正确
  • 货币符号位置正确

注意事项

  1. 【关键】进度文件必须创建和更新:

    • 创建进度文件后必须立即更新
    • 每个语言处理完成后必须更新进度文件
    • 任务完成后必须更新状态为 “completed”
  2. 【关键】阿拉伯语 RTL 处理:

    • 必须添加 RTL 标记
    • 数字和符号需要特殊处理
    • 混合文本需要 LTR 标记
    • 标点符号位置需要调整
  3. 【关键】分段阈值:

    • 缺失词条数 ≤ 100: 不分段
    • 缺失词条数 > 100: 按 100 个词条分段
  4. 【关键】防止重复词条:

    • 使用 Read 工具读取完整文件内容
    • 使用 Set 集合存储词条名称(自动去重)
    • 双重验证: 集合差集 + Grep 搜索验证
    • 添加前最终检查: Grep 确认不存在
  5. 【关键】翻译准确性:

    • 确保翻译符合目标语言习惯
    • 专有名词保持原样
    • 术语翻译一致

示例用法

示例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 种