## ADDED Requirements

### Requirement: 完整的 UI 文本国际化覆盖

应用 SHALL 通过 `AppLocalizations` 提供所有面向用户的 UI 文本，禁止在 widget 构建逻辑中使用字面量中文字符串。

#### Scenario: 所有可见文本通过翻译函数获取
- **WHEN** 开发者在任何 widget 的 `build()` 方法、`AppBar` 标题、`SnackBar` 内容、`Dialog` 文本或按钮文案中显示文本
- **THEN** 文本必须来自 `AppLocalizations.of(context)` 的 getter 或方法调用，不得直接写中文字面量

#### Scenario: 静态分析检测硬编码中文
- **WHEN** 运行 `flutter analyze` 或代码评审检查 `lib/` 目录下任意 `.dart` 文件中 widget 渲染部分
- **THEN** 不应出现包含中文字符（`[一-鿿]`）的字面量字符串

### Requirement: 中英双语翻译完整性

`AppLocalizations` SHALL 为所有翻译键同时提供中文（`zh`）和英文（`en`）两种语言的取值，避免运行时回退到键名或硬编码默认值。

#### Scenario: 翻译键同时存在于两种语言
- **WHEN** 新增任意翻译键到 `_localizedValues['zh']`
- **THEN** `_localizedValues['en']` 必须包含同名键，且值为对应的英文翻译

#### Scenario: 切换语言后所有界面文本即时更新
- **WHEN** 用户在系统设置中将语言从中文切换到英文
- **THEN** 应用所有页面（首页、程序管理、程序详情、运行控制、系统设置、完成页）的 UI 文本应立即变为英文，无需重启应用

### Requirement: 非 BuildContext 场景的本地化支持

`AppLocalizations` SHALL 提供在没有 `BuildContext` 的场景（如 Provider/Service 层抛出错误消息、日志）中获取当前语言文本的方式，或明确将这些场景排除在国际化范围之外。

#### Scenario: Service 层错误消息的本地化
- **WHEN** 设备运行 Service 需要向 UI 反馈错误（如串口连接失败）
- **THEN** Service 层应返回稳定的错误码或英文键名，由 UI 层通过 `AppLocalizations` 转换为本地化文本展示给用户

#### Scenario: 调试日志保留原始语言
- **WHEN** 代码通过 `dart:developer` 的 `log()` 或类似 API 输出调试日志
- **THEN** 允许保留中文日志内容，无需国际化（仅面向开发者）

### Requirement: 单复数与参数化文本

`AppLocalizations` SHALL 支持包含动态参数（如数量、程序名称）的翻译，禁止通过字符串拼接构造可见文本。

#### Scenario: 带参数的翻译方法
- **WHEN** 显示形如「成功导入 5 个程序」的消息
- **THEN** `AppLocalizations` 应提供方法形式（如 `programsImportedCount(int n)`）返回完整本地化字符串，而不是要求调用方拼接 `importSuccess + n + programsImported`

#### Scenario: 替换现有拼接式调用
- **WHEN** 重构现有代码中通过 `'${l.importSuccess} $count ${l.programsImported}'` 形式拼接的字符串
- **THEN** 应替换为单个参数化方法调用，确保英文语序自然（如 `'Successfully imported $count programs'`）
