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

6.4 KiB
Raw Blame History

键盘多语言/多布局功能实现总结

已完成的工作

1. 配置中心外置

  • 创建 /Shared/Resource/kb_input_profiles.json 配置文件
  • 创建 KBInputProfileManager 管理器Shared
  • 支持的语言和布局:
    • 英语QWERTY
    • 西班牙语QWERTY / AZERTY / QWERTZ
    • 葡萄牙语QWERTY
    • 繁体中文:拼音(繁体)/ 注音全键盘 / 注音标准
    • 印尼语QWERTY
    • 简体中文QWERTY

2. 布局 JSON 配置补充

  • kb_keyboard_layout_config.json 中新增:
    • letters_azertyAZERTY 布局(西班牙语)
    • letters_qwertzQWERTZ 布局(西班牙语)
    • 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 方法
    • viewDidLoadviewDidLayoutSubviews 中检查并应用布局
    • 检测到 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.mkb_updateSuggestionEngineType: 方法中调用。同时将新增的文件添加到 Xcode 工程中,确保编译通过并进行完整测试。"