Flipper Zero 中文显示 3 步跑通:字体、字符串表与本地化全解析
2026/9/10 7:17:30 网站建设 项目流程

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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询