# Article Translator

> 翻译文章为中文。当用户提供URL并要求翻译文章时触发。 支持指定读者画像（默认0基础小白，科普风格），自动处理文章中的图片， 输出为Markdown格式。 适用场景：用户说"翻译这篇文章"、"把这个链接翻译成中文"、"帮我翻译下这个URL"等。

- Skill: `shadowcz007/article-translator` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add shadowcz007/article-translator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/shadowcz007/article-translator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: shadowcz007 (https://skillmd.com/u/shadowcz007)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/shadowcz007/article-translator

---


# Article Translator Skill

将英文或其他语言的文章翻译成中文，并处理其中的图片，最终输出Markdown格式文档。

## 输入参数

用户提供以下信息（按需询问）：

| 参数 | 说明 | 默认值 |
|------|------|--------|
| `url` | 文章URL | 必填 |
| `reader_profile` | 读者画像说明 | 0基础小白，科普属性 |
| `save_path` | 保存路径 | 当前目录 |
| `fetch_method` | 获取正文方式 | playwright（若已安装MCP）|

## 执行流程

### 1. 获取文章正文

**优先使用 Playwright MCP**（已配置的情况下）：
```text
1) 使用 mcp__plugin_playwright_playwright__browser_navigate 导航到 URL
2) 等待页面首屏稳定后，停留并触发全文加载（处理动态渲染/分段加载）
3) 持续向下滚动，直到页面底部，确保懒加载内容和图片全部出现
4) 若图片或正文区域显示不完整，可缩小页面（zoom out）后继续滚动检查
5) 确认“全文 + 全部图片已渲染”后，再使用 browser_snapshot 获取页面内容
```

**备选方案**（无Playwright时）：
- WebFetch 获取页面
- 或提示用户提供HTML/文本内容

### 2. 提取内容

从页面内容中提取：
- 文章标题（title）
- 正文内容（main content）
- 图片列表（img src）
- 图片 base64（优先从已渲染图片提取；无法提取时保留 URL 兜底）

### 3. 翻译正文

**核心原则**：保持原意，但中文表达要流畅自然。

**读者画像适配**：
- **0基础小白（默认）**：科普风格，语言通俗易懂，避免专业术语，必要时加括号解释
- **专业人士**：保持专业术语，可用行业惯用语
- **自定义**：按用户提供的画像调整
- `reader_profile` 仅作为翻译时的内部风格约束，不在最终 Markdown 顶部显式输出。

**翻译技巧**：
- 被动句转主动句，更符合中文习惯
- 长句拆短句，每段控制在合理长度
- 保留原文的强调语气（加粗、斜体等Markdown格式）
- 专业术语首次出现时加括号注释英文原词

### 4. 处理图片

对于文章中的每张图片：
1. 下载原图到本地 `images/` 子目录
2. 重命名为有意义的名字（可用序号或基于alt text）
3. 在Markdown中替换为本地相对路径：`![](images/xxx.jpg)`

**图片下载方式（按优先级）**：
1. **Playwright MCP（首选）**
   - 优先通过 Playwright MCP 在浏览器上下文中获取图片资源并保存到本地 `images/`。
   - 优先下载/导出图片 base64（基于页面已渲染结果），再落盘为本地图片文件。
   - 适用于有防盗链、需要携带页面会话/Referer 的图片链接。
2. **Python 脚本（第一备选）**
   - 使用仓库脚本下载：
```bash
python "skills/article-translator/scripts/download-image.py" "图片URL" "images" "xxx.jpg"
```
3. **bash/curl（第二备选）**
```bash
curl -L -o "images/xxx.jpg" "图片URL"
```

**执行要求**：
- 每张图片都遵循同一顺序：先尝试 Playwright MCP，失败后再回退到脚本，再回退到 bash。
- 只有在“页面全文已加载 + 已滚动触发懒加载 + 图片完整显示”后，才开始提取正文与下载图片 base64。
- 若最终下载失败，在正文中保留原图链接并添加失败说明注释。

### 5. 组装输出

输出Markdown格式：
```markdown
# 文章标题

## 导语

（2-4句：概括这篇文章提供的方法、数据/案例、关键见解，以及对读者的实际价值）

---

正文内容...

---

![图片描述](images/xxx.jpg)

> 原文链接：URL  
> 翻译日期：YYYY-MM-DD
```

**元信息换行规范（必须）**：
- 元信息区（原文链接/翻译日期）放在文末最后，使用 blockquote，并强制硬换行。
- 推荐写法：每行末尾保留两个空格（`  `）。
- 可选写法：每行末尾使用 `<br>`。
- 禁止仅依赖自然换行，否则渲染后可能合并为同一段。

**导语规范（必须）**：
- 在正文前必须输出「导语」小节（2-4句），回答“这篇文章为什么值得读”。
- 导语至少覆盖以下四点中的三点：方法/框架、数据/案例、关键见解、实践意义。
- 导语避免复述标题，优先提炼可执行信息和可迁移思路。

## 保存文件

- 文件名：基于文章标题，保留中文，特殊字符替换
- 格式：`.md`
- 路径：由用户指定，或保存在当前工作目录

## 错误处理

| 情况 | 处理方式 |
|------|----------|
| URL无法访问 | 提示用户检查URL，或尝试备选获取方式 |
| 页面内容为空 | 询问用户是否手动提供内容 |
| 图片下载失败 | 在正文中保留原图链接，添加注释说明 |
| 内容提取失败 | 请求用户手动复制正文内容 |

## 示例

**用户输入**：
```
翻译 https://example.com/article 并保存到 ~/documents/
读者画像：我是一个对机器学习感兴趣的普通大学生
```

**输出**：
- 一篇完整的中文Markdown文档
- 包含下载到 `images/` 目录的文章图片

