Files
keyboard/docs/keyboard-language-layout-implementation-summary.md

169 lines
6.4 KiB
Markdown
Raw Normal View History

2026-03-02 09:19:06 +08:00
# 键盘多语言/多布局功能实现总结
## 已完成的工作
### 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 工程中,确保编译通过并进行完整测试。"