# i18n 国际化实施计划

> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** 为 A1 Swap Mod Packer 添加中英文国际化支持，用户通过下拉框切换语言，切换即时生效并持久化。

**Architecture:** 新建 `i18n/` 模块，提供 `t(key, **kwargs)` 翻译函数。GUI 中所有硬编码中文替换为 `t("key")` 调用。在打包选项区添加语言下拉框，切换时重新加载翻译并刷新 UI。

**Tech Stack:** Python 标准库 json + PySide6 QComboBox

## Global Constraints

- 所有翻译键命名遵循 `模块.区域.属性` 层级
- `t()` 在键缺失时返回键名本身作为回退
- 语言选择持久化到 `settings.json` 的 `locale` 字段，默认 `zh_CN`
- 数值格式化（时间、耗材）保持不翻译，仅在 None 时返回翻译后的占位符

---

## 文件结构

| 文件 | 操作 | 职责 |
|------|------|------|
| `a1_swap_mod_packer/i18n/__init__.py` | 新建 | 翻译加载器 + `t()` 函数 |
| `a1_swap_mod_packer/i18n/zh_CN.json` | 新建 | 简体中文翻译表 |
| `a1_swap_mod_packer/i18n/en.json` | 新建 | 英文翻译表 |
| `a1_swap_mod_packer/gui.py` | 修改 | 字符串替换为 `t()` + 语言下拉框 |
| `a1_swap_mod_packer/gcode.py` | 修改 | `format_duration`/`format_filament` 的 None 返回翻译 |
| `a1_swap_mod_packer/core.py` | 修改 | 导出 `i18n` 模块的 `t` |

---
