Skip to content
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,9 @@ tmp/

# Temporary as site-shared used to be a submodule.
site-shared/

# Auto-pilot related files (project management, not source code)
docs/operations/
docs/todo/
scripts/
test-flows/
206 changes: 206 additions & 0 deletions docs/glossary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
# Flutter 中文翻译术语表

> 翻译时必须参照本表,确保术语统一。
> 规则:类名/API 名保持英文不翻译,概念性术语翻译为中文。

---

## 不翻译(保持英文)

以下术语在中文语境中直接使用英文,不翻译:

### 框架与平台名
| 英文 | 说明 |
|------|------|
| Flutter | 框架名 |
| Dart | 语言名 |
| Material / Material Design / Material 3 | 设计语言 |
| Cupertino | iOS 风格设计语言 |
| Impeller | 渲染引擎名 |
| Skia | 渲染引擎名 |
| pub / pub.dev | 包管理器 |

### Widget 类名(所有类名不翻译)
| 英文 | 说明 |
|------|------|
| Widget | 核心概念,不译为"组件" |
| StatelessWidget | 无状态 widget 类 |
| StatefulWidget | 有状态 widget 类 |
| Container | widget 类名 |
| Scaffold | widget 类名 |
| AppBar | widget 类名 |
| Row / Column | widget 类名 |
| Text | widget 类名 |
| Icon | widget 类名 |
| ListView / GridView | widget 类名 |
| SizedBox | widget 类名 |
| Expanded / Flexible | widget 类名 |
| Center | widget 类名 |
| Stack / Positioned | widget 类名 |
| InheritedWidget | widget 类名 |
| AnimatedContainer | widget 类名(所有 Animated* 同理)|

### 方法与属性名
| 英文 | 说明 |
|------|------|
| build() | 构建方法 |
| setState() | 状态更新方法 |
| initState() | 生命周期方法 |
| dispose() | 生命周期方法 |
| didUpdateWidget() | 生命周期方法 |
| runApp() | 入口方法 |
| Navigator.push() / pop() | 导航方法 |

### 工具与包名
| 英文 | 说明 |
|------|------|
| DevTools | 开发者工具 |
| hot reload | 可译为"热重载" |
| hot restart | 可译为"热重启" |
| Provider | 状态管理包名 |
| Riverpod | 状态管理包名 |
| Bloc | 状态管理包名 |
| pubspec.yaml | 配置文件名 |

---

## 翻译对照表

以下术语有统一的中文翻译:

### 核心概念
| 英文 | 中文 | 备注 |
|------|------|------|
| widget | widget | **不译为"组件"**,直接用英文小写 |
| widget tree | widget 树 | |
| element tree | element 树 | |
| render tree | 渲染树 | |
| state | 状态 | |
| stateful widget | 有状态的 widget | 描述性用法 |
| stateless widget | 无状态的 widget | 描述性用法 |
| build method | build 方法 | |
| context / BuildContext | context / 上下文 | 视语境选用 |
| key | key / 键值 | 视语境选用 |
| constructor | 构造函数 | |
| callback | 回调 / 回调函数 | |
| mixin | mixin | 不翻译 |

### 布局相关
| 英文 | 中文 | 备注 |
|------|------|------|
| layout | 布局 | |
| constraints | 约束 | |
| padding | 内边距 | 或直接用 padding |
| margin | 外边距 | |
| alignment | 对齐 | |
| flex | 弹性 | |
| scrolling | 滚动 | |
| sliver | sliver | **不翻译** |
| viewport | 视口 | |
| overflow | 溢出 | |
| responsive | 响应式 | |
| adaptive | 自适应 | |

### 状态管理
| 英文 | 中文 | 备注 |
|------|------|------|
| state management | 状态管理 | |
| ephemeral state | 短时状态 / 临时状态 | |
| app state | 应用状态 | |
| declarative | 声明式 | |
| imperative | 命令式 | |
| immutable | 不可变的 | |
| reactive | 响应式的 | |

### 导航
| 英文 | 中文 | 备注 |
|------|------|------|
| navigation | 导航 | |
| route | 路由 | |
| push | push / 推入 | 视语境选用 |
| pop | pop / 弹出 | 视语境选用 |
| deep linking | 深层链接 | |
| named route | 命名路由 | |

### 动画
| 英文 | 中文 | 备注 |
|------|------|------|
| animation | 动画 | |
| implicit animation | 隐式动画 | |
| explicit animation | 显式动画 | |
| tween | 补间 | |
| curve | 曲线 | |
| animation controller | 动画控制器 | |
| staggered animation | 交织动画 | |
| hero animation | Hero 动画 | |
| transition | 过渡 / 转场 | 视语境选用 |

### 构建与工具
| 英文 | 中文 | 备注 |
|------|------|------|
| build | 构建 | |
| compile | 编译 | |
| debug mode | 调试模式 | |
| release mode | 发布模式 | |
| profile mode | 性能分析模式 | |
| hot reload | 热重载 | |
| hot restart | 热重启 | |
| tree shaking | tree shaking / 摇树优化 | |

### 性能
| 英文 | 中文 | 备注 |
|------|------|------|
| jank | 卡顿 | |
| frame | 帧 | |
| rasterization | 光栅化 | |
| rendering | 渲染 | |
| performance | 性能 | |

### 测试
| 英文 | 中文 | 备注 |
|------|------|------|
| unit test | 单元测试 | |
| widget test | widget 测试 | |
| integration test | 集成测试 | |
| golden test | 黄金测试 / golden 测试 | |

### 国际化
| 英文 | 中文 | 备注 |
|------|------|------|
| internationalization (i18n) | 国际化 | |
| localization (l10n) | 本地化 | |
| locale | 语言区域 | |

### 平台集成
| 英文 | 中文 | 备注 |
|------|------|------|
| platform channel | 平台通道 | |
| method channel | 方法通道 | |
| event channel | 事件通道 | |
| plugin | 插件 | |
| package | package / 软件包 | 视语境选用 |
| embedding | 嵌入 | |
| add-to-app | 混合开发 / add-to-app | |

### 其他常用
| 英文 | 中文 | 备注 |
|------|------|------|
| null safety | 空安全 | |
| sound null safety | 健全的空安全 | |
| type system | 类型系统 | |
| future | Future | 类名不译 |
| stream | Stream / 流 | 视语境选用 |
| async / await | async / await | 不翻译 |
| framework | 框架 | |
| library | 库 | |
| dependency | 依赖 | |

---

## 混排格式规则

1. **中英文之间加空格**:`了解 Flutter 的基本构成要素`
2. **中文与数字之间加空格**:`第 3 步`
3. **中文标点使用中文全角**:`,。!?:;()`
4. **英文标点保持英文半角**:代码中的标点不变
5. **反引号内容不翻译**:`` `setState()` `` 保持原样
113 changes: 113 additions & 0 deletions docs/style-guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Flutter 中文文档排版指南

> 本指南规定了 Flutter 中文文档的排版规范,所有翻译和修改必须遵循这些规则。

---

## 核心排版规则

### 1. 链接格式

**规则**:链接前后必须加空格(中文与链接之间)

❌ **错误示例**:
```markdown
请先从[学习路径页面](/learn/pathway)开始。
```

✅ **正确示例**:
```markdown
请先从 [学习路径页面](/learn/pathway) 开始。
```

### 2. 强调格式

**规则**:使用加粗(`**text**`)代替斜体(`_text_`)来表示强调

❌ **错误示例**:
```markdown
_Model-View-ViewModel_,即 _MVVM_。
```

✅ **正确示例**:
```markdown
**Model-View-ViewModel**,即 **MVVM**。
```

**原因**:斜体在中文排版中不够明显,加粗更符合中文阅读习惯。

### 3. 加粗前后空格

**规则**:加粗文本前后需要加空格(中文与加粗之间)

❌ **错误示例**:
```markdown
这是一个**重要**的概念。
```

✅ **正确示例**:
```markdown
这是一个 **重要** 的概念。
```

**例外**:
- 如果加粗文本在句首或句尾,则不需要在边界处加空格
- 如果加粗文本与标点符号相邻,标点符号一侧不加空格

示例:
```markdown
**重要提示**:请注意以下内容。
这个概念非常 **重要**。
```

### 4. 中英文混排

**规则**:中文与英文/数字之间加空格

✅ **正确示例**:
```markdown
了解 Flutter 的基本构成要素
第 3 步
使用 Dart 语言
```

### 5. 代码与反引号

**规则**:反引号内的代码不翻译,反引号前后加空格(中文与代码之间)

✅ **正确示例**:
```markdown
使用 `setState()` 方法更新状态
创建一个 `StatefulWidget` 类
```

---

## 检查清单

在提交翻译前,请确认:

- [ ] 所有链接前后都有空格
- [ ] 没有使用斜体(`_text_`)表示强调
- [ ] 所有强调都使用加粗(`**text**`)
- [ ] 加粗文本前后有空格(除非在句首/句尾或与标点相邻)
- [ ] 中英文之间有空格
- [ ] 中文与数字之间有空格
- [ ] 代码反引号前后有空格

---

## 自动化检查

可以使用以下命令检查常见格式问题:

```bash
# 检查链接前后是否缺少空格(中文字符紧邻链接)
grep -rn '[一-龥]\[.*\]([^)]*)[一-龥]' src/content/

# 检查是否使用了斜体
grep -rn '_[^_]*_' src/content/ | grep -v '://' | grep -v 'ignore:'

# 检查加粗前后是否缺少空格
grep -rn '[一-龥]\*\*[^*]*\*\*[一-龥]' src/content/
```
Loading