尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

EmuELC系统EmulationStation设置菜单中文语言包修改实战指南

EmuELC系统EmulationStation设置菜单中文语言包修改实战指南 1. 项目缘起一个被忽略的“小”问题如果你和我一样是个喜欢折腾复古游戏主机的玩家那么EmuELC这个名字你一定不陌生。它是一个基于Linux的轻量级游戏系统核心是EmulationStation简称ES前端为我们提供了一个极其美观、易用的游戏选择界面。但不知道你有没有遇到过这样一个情况辛辛苦苦刷好系统插上U盘准备大展拳脚时却发现EmulationStation的设置菜单里语言选项要么不全要么没有你习惯的中文。你可能会想这系统不是开源的吗改个语言包应该不难吧但当你真正动手去搜索“EmuELC 中文语言包”或者“ES 设置菜单 语言”时得到的往往是零散的、过时的信息或者干脆就是让你去下载一个别人编译好的、但可能不兼容你当前版本的整个主题包。这就是我这次折腾的起点。我的目标很明确不更换整个ES主题不重新编译系统仅仅通过修改系统自带的语言包文件让EmuELC的ES设置菜单显示为我需要的语言。听起来很简单对吧但实际上这里面涉及对ES前端资源文件结构、语言包加载逻辑的深入理解以及一些非常具体的文件操作技巧。网上的热词如“ES 设置菜单”、“系统语言包”指向了这个问题但缺乏一个从原理到实操的完整指南。今天我就把我从摸索到成功的整个过程包括踩过的坑和最终验证有效的方案毫无保留地分享出来。2. EmuELC与EmulationStation核心架构与语言加载机制要修改语言包我们首先得知道它在哪里以及系统是如何找到并使用它的。很多人会把EmuELC和ES混为一谈其实它们的关系非常清晰EmuELC是操作系统而EmulationStation是运行在这个系统之上的一个应用程序更具体地说是它的图形化前端界面。EmuELC通常基于轻量级的Linux发行版如Batocera.linux的衍生版本它负责底层的硬件驱动、文件系统管理、网络服务等。而EmulationStation则是一个用C编写的、专为游戏收藏和启动设计的开源前端。它的所有界面元素——包括我们这次要修改的设置菜单——其外观和文字都依赖于“主题Theme”和“语言包Locale”这两个核心资源。语言包的本质在EmulationStation的语境下语言包并不是一个独立的、可安装的软件包。它是一系列纯文本文件通常以.xml格式存在里面定义了界面中每一个可翻译字符串的键值对。例如一个键可能是“SETTINGS”而它在英语语言包中的值就是“SETTINGS”在中文语言包中的值可能就是“设置”。语言包的加载路径这是最关键的一步。ES在启动时会按照一个固定的顺序去查找语言包文件。对于EmuELC这类集成系统路径通常是固定的。经过对多个版本包括从网络热词中关联的版本的逆向分析其核心查找逻辑如下用户自定义路径最高优先级/userdata/system/configs/emulationstation/locales/。这个路径通常用于存放用户自己添加或修改的语言包。如果你的系统有这个目录并且里面有对应的语言文件ES会优先使用这里的。系统主题内置路径/usr/share/emulationstation/themes/[当前主题名]/locales/。每个ES主题都可以自带自己的语言包。如果你切换了主题并且新主题自带了语言包那么就会使用这里的。ES默认资源路径最低优先级但通常是默认所在/usr/share/emulationstation/locales/。这是EmuELC系统在构建时将ES及其默认资源安装到的标准位置。我们这次要修改的正是这个路径下的文件。很多教程让你去改主题包里的语言文件这其实只在你使用那个特定主题时才生效。一旦切换回系统默认主题修改就失效了。而直接修改系统默认路径下的语言包是影响所有使用系统默认语言资源的主题的最根本方法。语言包的文件命名规则语言包文件遵循[语言代码]_[国家/地区代码].xml的命名规范例如en.xml- 英语zh_CN.xml- 简体中文中国zh_TW.xml- 繁体中文台湾es_ES.xml- 西班牙语西班牙fr_FR.xml- 法语法国ES会根据你在系统设置里选择的语言自动去寻找对应名称的文件。如果你的语言选项里没有“中文”很可能是因为/usr/share/emulationstation/locales/目录下根本不存在zh_CN.xml或zh_TW.xml文件。3. 实战操作定位、修改与创建中文语言包理解了原理我们就可以开始动手了。整个过程需要在EmuELC系统的命令行终端SSH或直接接键盘下完成。请确保你已通过SSH或直接在设备上打开了终端。3.1 第一步确认当前环境与备份原始文件在修改任何系统文件前备份是铁律。这能让你在操作失误时一键恢复。首先我们连接到EmuELC的SSH。默认用户名通常是root密码可能是linux或空具体请查询你的EmuELC版本说明。连接成功后我们首先查看默认语言包目录的内容# 列出默认语言包目录下的所有文件 ls -la /usr/share/emulationstation/locales/你会看到类似以下的输出-rw-r--r-- 1 root root 12345 Jan 1 2020 en.xml -rw-r--r-- 1 root root 15020 Jan 1 2020 es_ES.xml -rw-r--r-- 1 root root 15200 Jan 1 2020 fr_FR.xml # ... 可能还有其他语言注意看有没有zh_CN.xml或zh_TW.xml。如果没有就说明系统本身不包含中文语言包我们需要创建它。如果有我们可以直接修改它。关键备份操作# 进入目标目录 cd /usr/share/emulationstation/locales/ # 备份整个locales目录最稳妥 cp -r /usr/share/emulationstation/locales/ /usr/share/emulationstation/locales.backup/ # 或者如果存在英文包将其备份为修改的蓝本 cp en.xml en.xml.backup注意/usr/share/目录通常是只读的文件系统尤其是在SD卡或只读分区上。EmuELC为了系统稳定性常常会在启动后将系统分区挂载为只读。你需要先将其重新挂载为可写状态。mount -o remount,rw /usr/share/执行这个命令后你才能对/usr/share/emulationstation/locales/下的文件进行修改。3.2 第二步获取或创建中文语言包源文件这里有两种情况情况A已有其他语言包以此为基础修改这是最安全、最推荐的方法。我们以英文包en.xml为模板来创建中文包。# 复制英文包作为中文包的基础 cp en.xml zh_CN.xml现在我们就有了一个和英文内容一模一样但名为zh_CN.xml的文件。接下来就是翻译工作。情况B从网络获取现成的语言包你可以尝试从EmulationStation的官方GitHub仓库或其他EmuELC衍生项目如Batocera的源码中寻找zh_CN.xml。但这里有一个巨大的坑版本兼容性。ES的界面字符串会随着版本更新而增减或变更键名。一个为ES 2.0版本制作的语言包很可能在ES 2.9版本上导致大量字符串缺失显示为键名本身如“SETTINGS”或错位。从热词“es 7.14.2”等可以看出版本意识非常重要。因此即使你找到了一个现成的zh_CN.xml也强烈建议你以当前系统自带的en.xml为基准进行核对和合并而不是直接覆盖。3.3 第三步详解语言包XML结构与翻译要点用文本编辑器如nano或vi打开zh_CN.xml文件。nano zh_CN.xml你会看到类似这样的结构?xml version1.0 encodingUTF-8? locale 字符串键名对应的翻译文本/字符串键名 字符串键名对应的翻译文本/字符串键名 ... /locale例如?xml version1.0 encodingUTF-8? locale SETTINGS设置/SETTINGS UI_SETTINGS界面设置/UI_SETTINGS SOUND_SETTINGS声音设置/SOUND_SETTINGS NETWORK_SETTINGS网络设置/NETWORK_SETTINGS SCRAPER游戏信息刮削器/SCRAPER OTHER_SETTINGS其他设置/OTHER_SETTINGS QUIT退出/QUIT RESTART_SYSTEM重启系统/RESTART_SYSTEM SHUTDOWN_SYSTEM关机/SHUTDOWN_SYSTEM ENABLED开启/ENABLED DISABLED关闭/DISABLED BACK返回/BACK ACCEPT确认/ACCEPT CANCEL取消/CANCEL !-- 更多条目 -- /locale翻译的核心原则与技巧保留键名只改值SETTINGS和/SETTINGS标签本身是键名绝对不能修改。我们只修改这两个标签之间的文本内容。把SETTINGS改成设置把UI_SETTINGS改成界面设置。上下文关联有些键名可能很简短如ON和OFF。你需要结合它在设置菜单中的实际用途来翻译。在开关选项中它们通常翻译为开和关在表示状态时可能是启用和停用。如果不确定可以先不翻译进入系统查看该键名出现在哪里再决定。保持简洁ES的界面空间有限翻译文本不宜过长应尽量使用简洁明了的词语。特殊字符XML文件中的特殊字符如,,需要用实体引用来表示amp;,lt;,gt;。不过在纯显示的文本中一般不会用到但如果你在翻译中需要输入这些字符必须注意。编码确保文件保存为UTF-8 without BOM编码。这是中文显示不出现乱码的关键。nano编辑器默认保存即为UTF-8通常没问题。一个高效的翻译流程在电脑上用专业的文本编辑器如VS Code、Notepad打开备份的en.xml和待编辑的zh_CN.xml。使用“比较文件”功能快速找出所有差异初期差异就是所有待翻译的英文文本。逐条翻译。对于不确定的条目可以先标记例如写成!-- 待确认NETPLAY_HOSTING --然后保存文件通过SFTP传回EmuELC测试观察该条目在界面中的位置和功能再回来修改。翻译完成后再次与en.xml比较确保没有误删或错改标签键名。3.4 第四步部署测试与系统刷新翻译并保存好zh_CN.xml后通过SFTP工具如FileZilla将其上传到EmuELC的/usr/share/emulationstation/locales/目录下覆盖你之前创建的那个文件。或者如果你直接在终端用nano编辑并保存文件已经在正确位置了。接下来你需要让ES重新加载语言资源。有两种方法方法一重启ES前端推荐在EmuELC的界面中通常可以按Start键调出主菜单找到QUIT退出选项然后选择RESTART EMULATIONSTATION重启EmulationStation。这是最干净的方式。方法二通过SSH发送重启命令在SSH终端中输入systemctl restart emulationstation或者如果上述命令无效可以尝试找到ES的进程并杀掉系统通常会自动重启它killall emulationstation重启后进入ES的SETTINGS设置菜单找到UI SETTINGS界面设置或OTHER SETTINGS其他设置下的LANGUAGE语言选项。如果一切顺利你现在应该能看到中文中国或类似的选项了。选择它界面应该会立即刷新为中文。4. 深度排错当修改不生效时该怎么办事情很少一帆风顺。如果你的中文选项没有出现或者出现了但选择后界面没变化别慌按照以下步骤系统性地排查。4.1 排查路径一文件位置与权限这是最常见的问题。再次确认你的zh_CN.xml文件是否在正确的路径并且ES有权限读取它。# 1. 确认文件是否存在 ls -l /usr/share/emulationstation/locales/zh_CN.xml # 2. 确认文件权限应为644即rw-r--r-- # 如果权限不对修正它 chmod 644 /usr/share/emulationstation/locales/zh_CN.xml # 3. 确认文件所有者通常应为root # 如果不是可以修改但一般不需要 chown root:root /usr/share/emulationstation/locales/zh_CN.xml # 4. 确认目录挂载状态是否为读写rw mount | grep /usr/share # 如果显示ro只读需要重新挂载 mount -o remount,rw /usr/share4.2 排查路径二语言包文件语法与编码一个格式错误的XML文件会导致ES完全忽略它。# 使用xmllint工具检查XML语法如果系统已安装 xmllint --noout /usr/share/emulationstation/locales/zh_CN.xml # 如果没有报错说明语法基本正确。 # 检查文件编码和特殊字符 # 使用file命令查看编码 file -i /usr/share/emulationstation/locales/zh_CN.xml # 期望输出... charsetutf-8 # 使用cat命令查看文件开头和结尾检查是否有奇怪的不可见字符 head -5 /usr/share/emulationstation/locales/zh_CN.xml tail -5 /usr/share/emulationstation/locales/zh_CN.xml常见语法错误标签不闭合每个KEY都必须有对应的/KEY。非法字符在文本中直接使用了而没有转义成amp;。编码问题文件不是UTF-8导致中文变成乱码ES无法识别。4.3 排查路径三ES的日志输出ES在运行时会将错误和信息输出到日志中。查看日志是定位问题的终极手段。# 方法1查看系统日志中与ES相关的部分 journalctl -u emulationstation -f # 按CtrlC退出跟踪模式 # 方法2直接重启ES并观察其输出如果以前台方式运行 # 首先停止服务 systemctl stop emulationstation # 然后在前台手动启动输出到终端 /usr/bin/emulationstation # 观察启动过程中是否有关于加载locales的错误提示例如“Failed to parse locale file...” # 测试完毕后按CtrlC结束并重新用systemctl启动服务。在日志中你可能会看到类似“Couldnt find locale region zh_CN”或“Error parsing locale file ...”的错误信息这能直接指引你问题所在。4.4 排查路径四版本兼容性与字符串覆盖度如果语言选项出现了但选择后很多地方还是英文这说明你的zh_CN.xml文件不完整缺少了当前ES版本新增的字符串键。解决方案合并语言包。获取当前系统en.xml中的所有键。与你翻译的zh_CN.xml中的键进行对比。将en.xml中有而zh_CN.xml中没有的键值对补充到zh_CN.xml中并翻译其值。你可以写一个简单的Shell脚本或用Python脚本来做这件事但手动核对对于设置菜单这部分核心内容来说也是可行的。重点是确保键的集合完全一致。5. 进阶技巧打造个性化语言与维护策略当你成功实现了基础的中文化后还可以玩出更多花样。5.1 自定义翻译与本地化也许你觉得“刮削器”这个翻译太生硬想改成“游戏资料下载器”或者想把“QUIT”翻译成“退出游戏”以更符合你的使用习惯。这完全可以在你的zh_CN.xml中实现。这就是开源和自定义的魅力——让系统说你想让它说的话。你甚至可以创建一个zh_MY.xml我的中文文件在里面进行极度个性化的翻译然后在语言选项里选择它。这完全不影响系统原有的任何文件。5.2 语言包的管理与更新策略系统升级是EmuELC玩家常做的事。每次升级/usr/share/目录下的系统文件很可能被覆盖这意味着你辛苦修改的zh_CN.xml可能会丢失。应对策略用户目录优先法将最终调试好的zh_CN.xml文件复制到用户自定义路径/userdata/system/configs/emulationstation/locales/。如果这个目录不存在就创建它。mkdir -p /userdata/system/configs/emulationstation/locales/ cp /usr/share/emulationstation/locales/zh_CN.xml /userdata/system/configs/emulationstation/locales/因为ES优先加载用户目录的文件所以即使系统升级覆盖了默认路径的文件你的自定义语言包依然有效。这是最推荐的长期维护方案。备份与恢复脚本写一个简单的Shell脚本在每次系统升级后自动将备份的语言包复制回系统目录。但这需要你每次升级后手动运行脚本且需要确保挂载状态可写。参与社区贡献如果你翻译的质量很高可以考虑将你的zh_CN.xml提交给EmuELC或上游的Batocera项目。如果被采纳那么未来的官方版本就会自带完善的中文支持惠及所有中文用户。5.3 影响范围不仅仅是设置菜单通过修改系统默认语言包你影响的不仅仅是“设置”菜单。所有调用系统默认locale资源的界面元素都会改变这包括主菜单的各项标题游戏列表、音乐播放器等。游戏详情页的按钮和标签。各种弹出对话框确认、错误提示等。屏幕保护程序或电池指示器上的文字如果它们支持本地化。这是一个全局性的修改。因此一个完整、准确的语言包非常重要它能全面提升你的母语使用体验。整个折腾过程从最初的迷茫到最后的成功其价值远不止于让菜单变成了中文。它更像是一次对EmuELC系统架构的微型探险让你明白了前端与后端、系统与应用、默认配置与用户自定义之间的关系。下次再遇到类似“如何自定义XX界面”的问题时你大概就能顺着“找资源文件路径 - 理解加载逻辑 - 安全修改测试”这个思路去解决了。这种解决问题的能力才是折腾开源项目带给我们的最大乐趣。
返回列表