Flipper Zero 中文显示改造:中文字体、本地化、菜单三处动手指南
【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware
BadUSB 脚本里写中文注释,打开后变成一排“?”;NFC 标签贴在设备前,屏幕上的中文标签名是一片空白。Flipper Zero 中文显示默认只覆盖拉丁字符,中文属于非拉丁字符显示里未处理的部分。本文讲清问题卡在显示链哪一层,再按三处动手改造。
中文卡在显示链的哪一层
显示链路可以拆成三层,中文在每层都会卡住。
U8g2 字体层。屏幕文字最终由 u8g2(轻量级 2D 图形库)渲染。内置字体以拉丁和西里尔字符为主,中文字形码点没有位图。这一层卡住时,中文表现为空框或问号。
locale 服务层。locale 服务目前只管三件事:公制与英制单位、12/24 小时制、日期排列顺序。它没有“语言”概念,菜单文案无处挂载。
应用字符串资源层。每个应用自带一套英文文案。就算字体支持中文,字符串仍是英文,屏幕上就还是英文菜单。这一层决定 Flipper Zero 菜单汉化能覆盖哪些条目。
三条路线怎么选
| 路线 | 改动范围 | Flash/RAM 代价 | 上手难度 | 适合谁 |
|---|---|---|---|---|
| 固件内置中文字体 | u8g2 字体表随固件编译 | 高:常用字子集也在数百 KB 级,RAM 占用上升 | 高 | 想整体汉化系统菜单的固件开发者 |
| 应用级自定义字体 | 只改自己的应用和字体数组 | 低:按需嵌入字符子集 | 低 | 只想在单个应用里显示中文 |
| 汉化字符串资源包 | 只替换各应用文案 | 最低:不新增字体,依赖拉丁字库 | 中 | 想让菜单先变中文、字体暂缓 |
推荐:只在意单个应用显示中文,选应用级自定义字体路线;要汉化系统菜单,先做字符串资源包,再谈字体。
动手改造
U8g2 中文字体怎么挑
选开源许可、支持单色位图的字体。128×64 屏幕优先 12 到 16 像素字高。别追求整部 GB2312,常用字子集就够,字体表也小。
字体格式怎么转
U8g2 需要编译进固件的 C 数组。用 u8g2 的字体转换工具链,从 TTF 生成u8g2_font_xxx字体表,再把数组嵌入应用。用法可参考 example_custom_font 示例:调用canvas_set_custom_u8g2_font()后,canvas_draw_str()就能渲染中文。
⚠️ 字体表是纯位图数据,多一个字形就多占 Flash,务必控制子集规模。
字符串资源怎么挂中文
给目标应用新增一套中文字符串表,用宏或编译开关替换原英文文案。改动集中在字符串定义层,绘制逻辑不用动。这是 Flipper Zero 固件汉化的主体工作。汉化系统设置时,入口在时钟设置等 settings 应用。
设置菜单怎么加语言切换
locale 服务现在只有单位、时间、日期三个枚举。照 locale.c 里现有项的存法,走 furi_hal RTC 通道新增一个“语言”枚举并持久化,再在设置子菜单挂一个条目,上机就能看到切换项。
上机验证清单
先克隆仓库:
git clone https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware编译完成后走 USB 烧录:
./fbt ./fbt flash_usb上机逐项核对:
- 主菜单无空框、无问号
- 时钟设置里时间格式切换后显示正确
- 自有应用中文无缺字
- 语言切换过程无崩溃
- 重启后设置仍然保留
踩坑速查
中文显示为空框或问号。现象:字形变成方块;原因:字体表不含对应中文码点;处置:补齐字符子集重新转换,别动字号。
中文断行或重叠。现象:字距错乱、笔画互相压盖;原因:字高与基线设置不匹配,或字号过大;处置:调低字高重新转换,再微调绘制 y 坐标。
只有部分应用出中文,系统菜单没变。现象:自研应用正常,主菜单仍乱码;原因:自定义字体只作用于应用本身,系统菜单用内置字体绘制;处置:先上字符串资源包,再升级内置字体。
编译报字体符号错误。现象:链接阶段报符号未找到;原因:字体数组命名不一致或未加入编译列表;处置:对照示例文件检查数组定义与 SConscript 源文件列表。
继续深挖
- 本地化服务源码:applications/services/locale/
- 画布与字体 API:applications/services/gui/
- u8g2 移植层:lib/u8g2/
- 应用开发文档:documentation/app_dev/
下一步行动:给时钟设置应用挂一组中文字符串和一个语言切换项,验证通过后再把同一套做法推进到主菜单。
【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考