169 lines
6.4 KiB
Markdown
169 lines
6.4 KiB
Markdown
# 键盘多语言/多布局功能实现总结
|
||
|
||
## 已完成的工作
|
||
|
||
### 1. 配置中心外置 ✅
|
||
- ✅ 创建 `/Shared/Resource/kb_input_profiles.json` 配置文件
|
||
- ✅ 创建 `KBInputProfileManager` 管理器(Shared)
|
||
- ✅ 支持的语言和布局:
|
||
- 英语:QWERTY
|
||
- 西班牙语:QWERTY / AZERTY / QWERTZ
|
||
- 葡萄牙语:QWERTY
|
||
- 繁体中文:拼音(繁体)/ 注音全键盘 / 注音标准
|
||
- 印尼语:QWERTY
|
||
- 简体中文:QWERTY
|
||
|
||
### 2. 布局 JSON 配置补充 ✅
|
||
- ✅ 在 `kb_keyboard_layout_config.json` 中新增:
|
||
- `letters_azerty`:AZERTY 布局(西班牙语)
|
||
- `letters_qwertz`:QWERTZ 布局(西班牙语)
|
||
- `letters_bopomofo_full`:繁体注音全键盘布局
|
||
- `letters_bopomofo_standard`:繁体注音标准布局
|
||
|
||
### 3. 扩展侧布局切换 ✅
|
||
- ✅ 创建 `KBKeyboardLayoutResolver`(扩展侧)
|
||
- 从 App Group 读取 `profileId`
|
||
- 根据 `profileId` 解析对应的 `layoutJsonId`
|
||
- 根据 `profileId` 解析对应的联想引擎类型
|
||
- ✅ 修改 `KBKeyboardView`:
|
||
- 新增 `currentLayoutJsonId` 属性
|
||
- 新增 `reloadLayoutWithProfileId:` 方法
|
||
- 初始化时从 App Group 读取 profileId 并加载对应布局
|
||
- ✅ 修改 `KBKeyBoardMainView`:
|
||
- 新增 `reloadLayoutWithProfileId:` 方法
|
||
- ✅ 修改 `KeyboardViewController`:
|
||
- 新增 `kb_checkAndApplyLayoutIfNeeded` 方法
|
||
- 在 `viewDidLoad` 和 `viewDidLayoutSubviews` 中检查并应用布局
|
||
- 检测到 profileId 变化时自动切换布局
|
||
|
||
### 4. 主 App 配置管理器集成 ✅
|
||
- ✅ 修改 `KBPersonInfoVC.m`:
|
||
- 使用 `KBInputProfileManager` 替代硬编码配置
|
||
- 皮肤下发逻辑使用配置管理器
|
||
|
||
### 5. 繁体联想引擎分流 ✅
|
||
- ✅ 扩展 `KBSuggestionEngine`:
|
||
- 新增 `KBSuggestionEngineType` 枚举
|
||
- 支持 4 种引擎类型:Latin / PinyinSimplified / PinyinTraditional / Bopomofo
|
||
- 实现 `setEngineTypeFromString:` 方法
|
||
- 实现各引擎类型的联想逻辑(基础框架)
|
||
- ✅ 修改 `KeyboardViewController`:
|
||
- 实现 `kb_updateSuggestionEngineType:` 方法
|
||
- 切换布局时自动切换联想引擎
|
||
|
||
## 待完成的工作
|
||
|
||
### 1. 将新增文件添加到 Xcode 工程 ⚠️
|
||
**操作指南**: 参考 `docs/xcode-file-addition-guide.md`
|
||
|
||
需要添加的文件:
|
||
- [ ] `Shared/Resource/kb_input_profiles.json`(主 App + 扩展)
|
||
- [ ] `Shared/KBInputProfileManager.h`(主 App + 扩展)
|
||
- [ ] `Shared/KBInputProfileManager.m`(主 App + 扩展)
|
||
- [ ] `CustomKeyboard/Manager/KBKeyboardLayoutResolver.h`(扩展)
|
||
- [ ] `CustomKeyboard/Manager/KBKeyboardLayoutResolver.m`(扩展)
|
||
|
||
### 2. 完善联想引擎实现 ⚠️
|
||
**当前状态**: 已实现基础框架,但联想词库需要完善
|
||
|
||
**需要完善的部分**:
|
||
- [ ] 繁体拼音联想:实现拼音到繁体字的映射
|
||
- [ ] 注音联想:实现注音符号到繁体字的映射
|
||
- [ ] 简体拼音联想:实现拼音到简体字的映射
|
||
- [ ] 加载更完整的中文词库
|
||
|
||
**建议实现方式**:
|
||
1. 创建拼音/注音到汉字的映射表(可以使用 JSON 或 plist 文件)
|
||
2. 在 `kb_traditionalPinyinSuggestionsForPrefix:` 中实现拼音匹配逻辑
|
||
3. 在 `kb_bopomofoSuggestionsForPrefix:` 中实现注音匹配逻辑
|
||
4. 可以考虑集成第三方拼音/注音输入法库
|
||
|
||
### 3. 本地化资源补齐 ⚠️
|
||
需要新增并接入:
|
||
- [ ] `es.lproj/Localizable.strings`(西班牙语)
|
||
- [ ] `pt.lproj/Localizable.strings`(葡萄牙语)
|
||
- [ ] `zh-Hant.lproj/Localizable.strings`(繁体中文)
|
||
- [ ] `id.lproj/Localizable.strings`(印尼语)
|
||
|
||
并在 `project.pbxproj` 中更新 `knownRegions`。
|
||
|
||
### 4. 完整测试 ⚠️
|
||
**测试清单**: 参考 `docs/testing-checklist.md`
|
||
|
||
主要测试项:
|
||
- [ ] 主 App 语言选择流程
|
||
- [ ] 扩展侧布局切换
|
||
- [ ] 联想引擎切换
|
||
- [ ] 皮肤下发
|
||
- [ ] 异常情况处理
|
||
- [ ] 性能测试
|
||
- [ ] 回归测试
|
||
|
||
#### 主流程测试
|
||
1. 进入个人资料页,看到 `Input Language` 行
|
||
2. 选择单布局语言(如葡语):
|
||
- 底部 `Confirm` 显示
|
||
- 点击 `Confirm` 后触发切换
|
||
3. 选择多布局语言(如西语/繁体):
|
||
- 底部 `Confirm` 隐藏
|
||
- 进入 `Choose Layout`
|
||
- 在布局页点击 `Confirm` 后触发切换
|
||
|
||
#### 扩展侧测试
|
||
1. 切换到西班牙语 AZERTY:
|
||
- 键盘第一行应显示 `azertyuiop`
|
||
2. 切换到西班牙语 QWERTZ:
|
||
- 键盘第一行应显示 `qwertzuiop`
|
||
3. 切换到繁体注音全键盘:
|
||
- 键盘应显示注音符号
|
||
- 联想功能应使用注音引擎
|
||
4. 切换到繁体拼音:
|
||
- 键盘应显示 QWERTY 布局
|
||
- 联想应显示繁体字
|
||
|
||
#### 数据落盘测试
|
||
确认 App Group 键值写入:
|
||
- `AppGroup_SelectedKeyboardLanguageCode`
|
||
- `AppGroup_SelectedKeyboardLayoutVariant`
|
||
- `AppGroup_SelectedKeyboardProfileId`
|
||
|
||
#### 皮肤测试
|
||
切换语言后确认已发布对应的默认皮肤请求。
|
||
|
||
## 关键文件清单
|
||
|
||
### 新增文件
|
||
1. `/Shared/Resource/kb_input_profiles.json`
|
||
2. `/Shared/KBInputProfileManager.h`
|
||
3. `/Shared/KBInputProfileManager.m`
|
||
4. `/CustomKeyboard/Manager/KBKeyboardLayoutResolver.h`
|
||
5. `/CustomKeyboard/Manager/KBKeyboardLayoutResolver.m`
|
||
|
||
### 修改文件
|
||
1. `/CustomKeyboard/Resource/kb_keyboard_layout_config.json`
|
||
2. `/CustomKeyboard/View/KBKeyboardView.h`
|
||
3. `/CustomKeyboard/View/KBKeyboardView.m`
|
||
4. `/CustomKeyboard/View/KBKeyBoardMainView.h`
|
||
5. `/CustomKeyboard/View/KBKeyBoardMainView.m`
|
||
6. `/CustomKeyboard/KeyboardViewController.m`
|
||
7. `/keyBoard/Class/Me/VC/KBPersonInfoVC.m`
|
||
|
||
## 注意事项
|
||
|
||
1. **繁体注音布局**:注音符号的排列顺序需要根据实际台湾键盘标准调整
|
||
2. **联想引擎**:繁体注音联想是核心功能,需要重点实现
|
||
3. **回退机制**:如果 profileId 不合法,应回退到 `en_US_qwerty`
|
||
4. **布局 JSON 缺失**:如果布局 JSON 不存在,不要崩溃,回退到默认布局
|
||
5. **皮肤 zip 缺失**:皮肤 zip 缺失时不应阻断输入流程
|
||
|
||
## 下一步建议
|
||
|
||
1. **优先级 1**:实现繁体联想引擎分流(最关键)
|
||
2. **优先级 2**:将新增文件添加到 Xcode 工程并编译测试
|
||
3. **优先级 3**:补齐本地化资源
|
||
4. **优先级 4**:完整回归测试
|
||
|
||
## 给下一个 AI 的任务描述
|
||
|
||
"请完成繁体中文联想引擎分流功能:在 `KBSuggestionEngine.m` 中实现 `pinyin_traditional`(繁体拼音)和 `bopomofo`(注音)两种联想引擎,并在 `KeyboardViewController.m` 的 `kb_updateSuggestionEngineType:` 方法中调用。同时将新增的文件添加到 Xcode 工程中,确保编译通过并进行完整测试。"
|