RetroArch 中文显示为 ??? 的排查与修复教程

适用现象

RetroArch 已经切换为中文,但菜单、提示或部分界面文字显示为 ???、方框,或完全无法正常显示中文。

RetroArch 中文显示异常:修复前

这类问题通常不是翻译文件损坏,而是字体没有正确加载,或者当前菜单驱动没有使用包含中文字形的字体。

1. 确认 RetroArch 配置文件存在

先确认当前用户的 RetroArch 配置文件位置:

1
test -f ~/.config/retroarch/retroarch.cfg && echo "配置文件存在"

如果没有输出,说明当前用户可能还没有生成配置文件,或者 RetroArch 使用了其他配置路径。

也可以查看 RetroArch 版本:

1
retroarch --version

本机版本为:

1
RetroArch 1.20.0

2. 查看语言、菜单驱动和字体配置

用下面的命令一次性查看和中文显示相关的关键配置:

1
grep -En "^(user_language|menu_driver|menu_font_path|xmb_font|video_font_path|assets_directory)" ~/.config/retroarch/retroarch.cfg

本机修复前的关键输出是:

1
2
3
4
5
6
assets_directory = "/usr/share/libretro/assets/"
menu_driver = "xmb"
menu_font_path = "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"
user_language = "12"
video_font_path = ""
xmb_font = ""

判断方式:

  • user_language = "12":RetroArch 已设置为简体中文。
  • menu_driver = "xmb":当前使用的是 XMB 菜单。
  • menu_font_path 已指向中文字体,但这不一定会覆盖 XMB 的专用字体设置。
  • xmb_font = "":XMB 菜单没有显式指定字体,这是本次异常的关键可疑点。
  • video_font_path = "":游戏内提示/OSD 没有显式指定字体,也可能导致中文提示显示异常。

如果你看到 menu_driver = "xmb"xmb_font = "",同时中文显示为 ???,应优先按 XMB 字体未正确绑定来处理。

3. 排除系统缺少中文字体的问题

先检查系统能否匹配到中文字体:

1
fc-match sans:lang=zh-cn

本机输出:

1
NotoSansCJK-Regular.ttc: "Noto Sans CJK SC" "Regular"

这说明系统字体层面可以提供中文字体。

再确认目标字体文件可读:

1
test -r /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc && echo "字体文件可读"

如果没有输出,需要先安装中文字体,或换成系统里实际存在的中文字体路径。

可以搜索系统已有的常见中文字体:

1
2
3
find /usr/share/fonts ~/.local/share/fonts ~/.fonts -type f \
\( -iname '*NotoSansCJK*' -o -iname '*SourceHanSans*' -o -iname '*WenQuanYi*' -o -iname '*DroidSansFallback*' -o -iname '*.ttc' \) \
-print 2>/dev/null

本机可用字体包括:

1
2
3
/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc
/usr/share/fonts/truetype/wqy/wqy-microhei.ttc
/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf

4. 判断是不是 RetroArch 菜单字体绑定问题

如果满足以下条件,基本可以判断问题在 RetroArch 菜单字体绑定,而不是系统编码:

1
2
3
4
5
RetroArch 语言已是中文
系统可以匹配中文字体
menu_driver 是 xmb
xmb_font 为空
界面中文显示为 ???

也可以继续检查 RetroArch 资源目录下有哪些字体:

1
2
3
find /usr/share/libretro/assets -maxdepth 4 -type f \
\( -iname '*.ttf' -o -iname '*.otf' -o -iname '*.ttc' \) \
-print 2>/dev/null

如果资源目录内没有合适的中文字体,或者配置没有明确让 XMB 使用中文字体,就容易出现 ???

可以用下面的命令粗略查看某个字体是否包含中文字符区间:

1
fc-query --format='%{family}\n%{charset}\n' /path/to/font.ttf | head -2

如果 charset 中看不到类似 4e00-9fff4e00-9fc3 这样的 CJK 汉字区间,该字体大概率不能完整显示中文。

5. 修复前先备份配置

1
cp -p ~/.config/retroarch/retroarch.cfg ~/.config/retroarch/retroarch.cfg.pre-cjk-font-fix

本机备份文件为:

1
/home/kris/.config/retroarch/retroarch.cfg.pre-cjk-font-fix

6. 修复 XMB 菜单中文字体

将 XMB 菜单字体明确指定为系统已有的 Noto CJK 字体:

1
sed -i 's|^xmb_font = .*|xmb_font = "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"|' ~/.config/retroarch/retroarch.cfg

同时修复游戏内提示/OSD 字体:

1
sed -i 's|^video_font_path = .*|video_font_path = "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"|' ~/.config/retroarch/retroarch.cfg

如果你的系统没有这个字体,请把路径替换成第 3 步中找到的中文字体路径。

7. 验证配置是否写入

再次检查关键配置:

1
grep -En "^(menu_driver|menu_font_path|xmb_font|video_font_path|user_language|assets_directory)" ~/.config/retroarch/retroarch.cfg

修复后的关键配置应类似:

1
2
3
4
5
6
assets_directory = "/usr/share/libretro/assets/"
menu_driver = "xmb"
menu_font_path = "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"
user_language = "12"
video_font_path = "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"
xmb_font = "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"

确认字体仍然可读:

1
test -r /usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc && echo "字体文件可读"

然后完全退出 RetroArch,再重新启动。只在菜单中来回切换页面,可能不会重新加载字体配置。

8. 本次实际修改

本次实际只改了两个配置项:

1
2
3
4
5
-video_font_path = ""
+video_font_path = "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"

-xmb_font = ""
+xmb_font = "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"

核心原因是:当前菜单驱动为 XMB,但 xmb_font 没有显式绑定中文字体。虽然 menu_font_path 已经指向 Noto CJK,但 XMB 菜单仍可能不使用这个通用字体项。显式设置 xmb_font 后,XMB 菜单可以直接加载包含中文字形的字体。

9. 回滚方法

如需恢复修复前的配置:

1
cp -p ~/.config/retroarch/retroarch.cfg.pre-cjk-font-fix ~/.config/retroarch/retroarch.cfg

然后重新启动 RetroArch。

RetroArch 中文显示正常:修复后

10. 如果仍然显示异常

继续按下面顺序检查:

  1. 确认 RetroArch 已完全退出并重新启动。
  2. 确认 xmb_font 指向的字体路径真实存在且可读。
  3. 尝试换用另一个中文字体,例如 /usr/share/fonts/truetype/wqy/wqy-microhei.ttc
  4. 尝试改用其他菜单驱动,例如 ozone,再重启 RetroArch。
  5. 检查是否存在多个 RetroArch 配置文件,当前启动的 RetroArch 可能没有读取 ~/.config/retroarch/retroarch.cfg