Files
keyboard/docs/keyboard-language-layout-implementation-summary.md
2026-03-02 09:19:06 +08:00

169 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 键盘多语言/多布局功能实现总结
## 已完成的工作
### 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 工程中,确保编译通过并进行完整测试。"