Files
keyboard/docs/quick-reference.md
2026-03-02 09:19:06 +08:00

4.4 KiB
Raw Blame History

键盘多语言/多布局功能 - 快速参考

🎯 核心功能

支持的语言和布局

语言 布局选项 ProfileId 示例
英语 QWERTY en_US_qwerty
西班牙语 QWERTY / AZERTY / QWERTZ es_ES_azerty
葡萄牙语 QWERTY pt_PT_qwerty
繁体中文 拼音 / 注音全键盘 / 注音标准 zh_Hant_TW_bopomofo_full
印尼语 QWERTY id_ID_qwerty

📁 关键文件

新增文件(需要添加到 Xcode

Shared/
├── Resource/
│   └── kb_input_profiles.json          # 配置文件
├── KBInputProfileManager.h             # 管理器头文件
└── KBInputProfileManager.m             # 管理器实现

CustomKeyboard/
└── Manager/
    ├── KBKeyboardLayoutResolver.h      # 解析器头文件
    └── KBKeyboardLayoutResolver.m      # 解析器实现

修改文件

CustomKeyboard/
├── Resource/
│   └── kb_keyboard_layout_config.json  # 新增布局配置
├── View/
│   ├── KBKeyboardView.h/m              # 布局切换逻辑
│   └── KBKeyBoardMainView.h/m          # 布局重载方法
├── Manager/
│   └── KBSuggestionEngine.h/m          # 联想引擎分流
└── KeyboardViewController.m            # 布局检查逻辑

keyBoard/
└── Class/Me/VC/
    └── KBPersonInfoVC.m                # 配置管理器集成

🔑 关键 API

主 App 侧

// 获取所有语言配置
[[KBInputProfileManager sharedManager] allProfiles];

// 根据语言代码获取配置
[[KBInputProfileManager sharedManager] profileForLanguageCode:@"es"];

// 根据 profileId 获取布局 JSON ID
[[KBInputProfileManager sharedManager] layoutJsonIdForProfileId:@"es_ES_azerty"];

扩展侧

// 获取当前 profileId
[[KBKeyboardLayoutResolver sharedResolver] currentProfileId];

// 获取布局 JSON ID
[[KBKeyboardLayoutResolver sharedResolver] layoutJsonIdForProfileId:profileId];

// 获取联想引擎类型
[[KBKeyboardLayoutResolver sharedResolver] suggestionEngineForProfileId:profileId];

// 重新加载布局
[keyboardView reloadLayoutWithProfileId:profileId];

// 切换联想引擎
[[KBSuggestionEngine shared] setEngineTypeFromString:@"pinyin_traditional"];

🔄 数据流

主 App → 扩展

用户选择语言/布局
    ↓
KBPersonInfoVC 写入 App Group
    ↓
AppGroup_SelectedKeyboardProfileId = "es_ES_azerty"
AppGroup_SelectedKeyboardLanguageCode = "es"
AppGroup_SelectedKeyboardLayoutVariant = "azerty"
    ↓
扩展读取 App Group
    ↓
KBKeyboardLayoutResolver 解析 profileId
    ↓
layoutJsonId = "letters_azerty"
suggestionEngine = "latin"
    ↓
KBKeyboardView 加载布局
KBSuggestionEngine 切换引擎

🧪 快速测试

1. 验证文件完整性

cd "/Users/mac/Desktop/项目/公司/KeyBoard"
./check_files.sh

2. 验证 App Group 数据

NSUserDefaults *appGroup = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.loveKey.nyx"];
NSLog(@"ProfileId: %@", [appGroup stringForKey:@"AppGroup_SelectedKeyboardProfileId"]);
NSLog(@"LanguageCode: %@", [appGroup stringForKey:@"AppGroup_SelectedKeyboardLanguageCode"]);
NSLog(@"LayoutVariant: %@", [appGroup stringForKey:@"AppGroup_SelectedKeyboardLayoutVariant"]);

3. 验证布局切换

  1. 主 App 切换到"Español · AZERTY"
  2. 打开备忘录,调出键盘
  3. 检查第一行是否为: a z e r t y u i o p

🐛 快速排查

问题 检查项 解决方案
编译错误 文件是否添加到 target 重新添加文件
布局不切换 App Group 数据是否写入 检查日志
联想不工作 引擎类型是否切换 检查日志
注音显示异常 JSON 配置是否正确 检查配置文件

📊 实施进度

  • 代码实现
  • 添加文件到 Xcode
  • 编译验证
  • 基础测试
  • 完善联想引擎
  • 完整测试

📚 文档索引

文档 用途
final-implementation-guide.md 完整实施指南
xcode-file-addition-guide.md Xcode 文件添加
testing-checklist.md 完整测试清单
keyboard-language-layout-implementation-summary.md 实现总结

💡 提示

  • 优先完成 P0 任务(添加文件、编译、基础测试)
  • 联想引擎可以后续完善
  • 遇到问题先查看日志输出
  • 使用 check_files.sh 验证文件完整性