Flipper Zero 中文显示 3 步跑通:字体、字符串表与本地化全解析
【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware
你打开 Flipper Zero,想让自写应用打出中文,屏幕却只剩方块。问题不在显示驱动,在字库和字符串表。下面这套流程基于 flipperzero-firmware 源码,帮你把中文显示链路逐段打通。
30 秒跑通(Quick Start)
git clone https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware cd flipperzero-firmware && ./fbt ./fbt flash_usb跑完你应该看到设备重启、主菜单出现,"设置 → 时钟"里的时间日期已按本地化设置格式化——这是中文链路中已经生效的一段。
底层机制:本地化服务只管格式,显示中文靠字库
把applications/services/locale/locale.h里的服务理解成一张"偏好表":应用调locale_format_time,它按你选的 12/24 小时制、DMY 等格式吐字符串。偏好值走furi_hal_rtc_set_*存进 RTC,断电不丢。
界面侧,lib/u8g2内置字库只有拉丁字形;applications/services/gui/canvas.h提供canvas_set_custom_u8g2_font,允许任意切换字库。显示不了中文,本质是字库里没有那个字。
分步实操
准备汉字字库文件
目标:拿到一块设备可用的汉字点阵。
操作:选一款开源中文字体,用 u8g2 官方转换工具裁剪出常用字集,生成 C 数组文件。点阵建议 12px 起。
验证:文件是合法 C 源码、字符表覆盖你计划用的字,即成功。
注册字库资源到应用画布
目标:让应用画布用上你的汉字字库。
操作:参照applications/examples/example_custom_font/example_custom_font.c的写法,在你本地的工作副本里把字库数组加进应用源码,绘制前调canvas_set_custom_u8g2_font切换。
验证:屏幕上能打出"中文显示测试"六个字,即成功。
挂载中文字符串表
目标:把菜单、提示文案换成中文且不乱码。
操作:应用内文案集中放到一张字符串表,键名用英文标识符、值填中文;确认表文件用 UTF-8 编码保存。
验证:打开应用,菜单项显示中文、无丢字,即成功。
注入本地化设置项
目标:让用户可切换显示偏好并持久保存。
操作:在设置场景加一个选项,选中后调locale_set_time_format等接口写入。
验证:重启设备,所选格式仍在,即成功。
排坑速查
| 现象 | 原因 | 处理 |
|---|---|---|
| 汉字显示方块 | 字库字符集覆盖不全 | 扩充裁剪集,补入缺失的字 |
| 中文变问号 | 字符串表编码与字库字符映射对不上 | 检查编码和码点映射 |
| 设置重启后丢失 | 只改了内存变量,没走 RTC 接口 | 改用locale_set_*系列接口 |
| 编译报 Flash 超限 | 中文字库体积大 | 裁字符集或降点阵尺寸 |
社区回声
社区里比较常见的用法,是给自写应用和 BadUSB 脚本加中文界面。有开发者反馈,12px 点阵配常用字裁剪集是清晰度和固件体积的平衡点;也有人把字库按场景拆分,按需链接进应用。
进阶方向
- 按场景拆分字库,控制固件体积
- 支持多字库热切
- 对齐屏幕像素网格,优化点阵排布
显示链路里,字库决定"能显示什么",字符串表决定"显示什么",locale 服务负责格式偏好。三段各自独立,按需改。
下一步:读applications/services/locale/locale.c看偏好如何落盘,或直接跑applications/examples/example_custom_font/这个样例。🧩
【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考