ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Yandex软件汉化实操指南:语言包格式与手动替换全解析

Yandex软件汉化实操指南:语言包格式与手动替换全解析 1. 内容整体设计与思路拆解先说个场景你是不是也遇到过这种情况从官网或者某个软件站下载了一个 Yandex 的客户端比如 Yandex Browser、Yandex Disk甚至可能是 Yandex Music装完之后打开一看界面是俄文或者英文。中文用户的第一反应肯定是去设置里找语言选项结果翻了一圈发现设置里根本没有中文这一项心态当场就崩了。我做软件本地化也有年头了说句实在话Yandex 这家的产品在国内算是个“小众刚需”——用户量不算特别大但粘性很强。可能是看上了它的翻译引擎、搜索质量或者是早晚要同步文件到网盘总之你手里既然有 Yandex 的软件大概率是离不开它。但问题是这家的软件本地化做得很“挑”部分产品连欧洲主流语言都没覆盖全更别说中文了。你想要一个官方的中文语言包等它自己发布基本不现实所以“自己动手汉化”就成了绕不开的一条路。在动手之前必须先把思路理清楚。汉化这活儿不是说拿个文本编辑器打开某个文件把里面的英文单词改成中文就完事了。它牵涉到几个层面的决策第一你的软件是哪种架构是 Chromium 内核的浏览器还是 Qt 写的桌面客户端还是 .NET 写的小工具不同架构语言包的格式完全不一样搞错了方向后面做再多都是白搭。第二你是只打算把菜单、右键、设置项这些界面文字“翻译”过来还是连提示信息、错误弹窗、帮助文档都要覆盖这两者的工作量差着一个数量级。第三你打算怎么应对软件更新——很多软件一升级就会把汉化文件覆盖掉这个坑不提前想好闹心的事在后头。所以我在写这篇文章的时候会按照“先摸清版本和架构再走官方通道最后才上手动汉化”的顺序来拆。这个顺序不是随便排的是踩过坑之后总结出来的经验能官方解决的就别硬改改之前一定要备份翻译的时候要先少后多、先核心后边缘。下面每一部分我都会给出完整的实操步骤和参数细节你照着做就能复现。2. 优先走官方通道语言设置与内置语言包2.1 浏览器类产品切换语言的正确姿势很多人对 Yandex 的汉化有个误解以为这东西跟 Chrome 一样设置里随便就能切换语言。实际上Yandex Browser 作为一个基于 Chromium 内核的浏览器它的语言切换逻辑跟 Chrome 是类似的但入口藏得比较深而且部分地区的构建版本确实砍掉了多语言支持。你先别急着下结论打开浏览器按AltF或者点右上角的三道杠菜单找到 Settings设置。在设置页面的地址栏里直接输入browser://settings/languages回车进入语言设置页。如果这个页面能正常打开说明你这个版本的 Yandex Browser 是保留了多语言模块的。在这里点击“添加语言”从列表里找到“中文简体”添加之后把中文拖到第一位然后点击“重新启动”按钮重启浏览器就能看到中文界面了。这个操作本质上就是让 Chromium 内核去加载对应的zh-CN.pak语言资源文件。但问题来了如果你按browser://settings/languages发现页面直接提示“无法访问此页面”或者语言列表里翻遍了都没有中文那就说明这个构建版本是精简过的语言包文件根本就没放进安装目录。这时候你再从设置里折腾就没意义了得换思路。我给你一个临时验证的技巧右键点击桌面上的 Yandex Browser 快捷方式在“目标”栏的最末尾敲一个空格然后加上--langzh-CN点确定再启动浏览器。如果浏览器能变成中文界面证明内核里是有中文资源的只是没有对外暴露选项如果加了这个参数还是英文那就说明zh-CN资源缺失直接跳到下一章手动汉化的流程。2.2 系统级多语言包与第三方语言包的区别这里还得提醒一个很多人搞混的概念语言包分两种一种是“系统级”的一种是“应用级”的。以 Windows 为例你在“设置 - 时间和语言 - 语言和区域”里添加了“中文简体”那是给操作系统界面用的它解决的是右键菜单、系统弹窗、文件资源管理器这些系统 UI 的显示问题。Yandex 这个软件本身的语言切换跟操作系统的语言包是两码事。除非 Yandex 的某个组件是调用了 Windows 的标准库来显示文字否则你装了 Windows 的语言包Yandex 该是英文还是英文。应用级的语言包才是我们这篇文章需要关注的。它可能是一个.pak文件可能是一个.qm文件也可能是一个.mo文件具体是哪种取决于 Yandex 是用什么框架开发的。千万记住先搞清楚架构再去找对应的语言包格式不然你把.mo文件塞进一个 Qt 程序里它根本不会认。3. 没有官方中文包时手动汉化的完整流程3.1 识别资源文件格式.pak .qm .mo .lng 各是什么如果官方通道走不通就该了解手动汉化的核心了。这里我先花点篇幅讲清楚几种常见的语言资源文件格式因为遇到 Yandex 的问题你至少会跟其中一两种打交道。第一种是.pak格式。这是 Chromium 系列浏览器使用的资源包Chrome、Edge、Yandex Browser 都离不开它。它的特点是二进制定制格式不能用普通的文本编辑器直接打开修改需要专门的工具来解包和打包。这类文件一般存放在安装目录下的Application文件夹里的Locales子目录中一套语言对应一个文件比如zh-CN.pak代表简体中文ja.pak代表日语。第二种是.qm格式。这是 Qt 框架编译出来的翻译文件。Qt 是很多跨平台桌面应用使用的 C 框架Yandex 的很多桌面组件、尤其是老版本的产品线都是基于 Qt 开发的。.qm文件是通过 Qt Linguist 软件从.ts源文件编译生成的。你想改它就得先下载一个 Qt Linguist 工具把编译好的.qm文件里面的翻译条目全部导出来改完之后再编译回去。第三种是.mo和.po格式。这是 GNU gettext 翻译体系的标准格式很多 Linux 上流行的软件都在用。.po是纯文本格式可以用文本编辑器打开.mo是编译后的二进制格式可以通过 Poedit 工具来编辑。Yandex 的部分跨平台工具会用到这一套。第四种是.lng或者文本配置文件。这类就相对简单了本质是keyvalue的映射对一行代码一个词条比如menu.open打开文件。用 Notepad 或者 VS Code 改完保存重启软件生效。你拿到一个 Yandex 软件第一件事就是到它的安装目录里转一圈看看有没有上述这些文件。有的话你就找到正确的下手方向了。3.2 提取、翻译、回写以 Chromium 内核为例的实操步骤下面用一个真实项目来演示。假设我手头有一个 Yandex Browser版本号是老版的 23.x它的Locales目录只有en-US.pak和ru.pak没有zh-CN.pak。我的目标是把界面汉化过来。第一步备份。把整个Locales目录复制出来备份放到 D 盘一个专门的文件夹里这个习惯一定要养成。我之前有一次图省事没备份就动手结果改坏了文件导致浏览器怎么都启动不了最后只能重装那滋味不好受。第二步寻找同版本的中文资源包。这一步是核心。Chromium 架构的优点是同一个小版本的官方 Chrome 与 Yandex Browser 在资源文件结构上高度相似但不完全一致。我试过的相对稳妥的方案是找到你当前 Yandex Browser 的完整版本号比如23.5.4.732然后去下载一个版本号尽可能接近的 Chromium 发行版或者同内核的其他浏览器把它的zh-CN.pak提取出来。为什么要版本尽可能接近因为如果大版本号差距太远pak文件内部的资源索引编号会发生变化你把另一个大版本的文件塞进来轻则部分菜单还是英文重则直接报资源加载错误。第三步拷贝替换。将下载下来的zh-CN.pak复制到 Yandex Browser 的Locales目录下。注意文件名必须严格命名为zh-CN.pak大小写要跟配置文件里面写的 locale 名称完全一致这个细节很多人会漏掉。第四步修改启动参数或配置文件。如果直接替换后打开浏览器发现还是英文需要让软件“认领”这个语言资源。最省事的办法就是前面提到的快捷方式加参数--langzh-CN。但这样有个缺点快捷方式参数只对通过该快捷方式启动的实例生效。更全局的办法是修改 Preferences 配置文件。找到用户数据目录下的Default\Preferences文件用文本编辑器打开搜索intl或者locale关键字把对应的值从en-US改成zh-CN。这个文件是 JSON 格式修改时一定要注意引号和逗号的完整性。改完之后保存重启浏览器。3.3 桌面客户端常见汉化路径如果你要汉化的不是浏览器而是 Yandex Disk 这类桌面同步软件那操作路径又不一样了。Yandex Disk 在 4.x 版本之前是 Qt 写的界面语言文件主要集中在软件安装目录下的translations文件夹里是.qm格式。汉化的正确做法是用 Qt Linguist 打开yandex_disk_zh_CN.qm如果没有这个文件可以新建一个对照原文逐条翻译编译生成新的.qm文件然后放进translations目录。启动软件后在设置里把界面语言切换成中文。注意一个点Qt 程序的语言识别优先级是先读系统区域设置再读配置文件。如果你的 Windows 系统区域设置是英文但你想让 Yandex Disk 显示中文就得在软件配置文件一般在%APPDATA%\Yandex\YandexDisk.ini里面显式加一行languagezh_CN不然编译好的语言包不会生效。4. 工具配置与编码处理的关键细节4.1 字符串资源处理编码、占位符与变量长度手动汉化的很多坑不在“翻译文字”本身而在“处理字符串的技术细节”。首先说编码。老一代软件很多字符串资源用的是 ANSI 编码简体中文环境对应 GBK新一代跨平台软件基本统一用 UTF-8 编码。你在改.lng或.po文件时保存前一定要确认编码格式。用 Notepad 打开文件看右下角显示的是UTF-8还是ANSI。如果原始文件是ANSI你保存成UTF-8运行时就可能出现两种情况一种是文字全部变成问号另一种是软件直接读取失败回到默认语言。正确做法是“原文件用什么编码改完保存还是什么编码除非你能确认软件支持 UTF-8”。其次是占位符。很多翻译词条不是固定的一句话而是有变量的比如File %1 has been deleted、Are you sure to delete %s?。翻译的时候中文语序跟英文不一样但占位符必须原样保留位置可以挪到符合中文表达顺序的地方但数量不能少、格式不能变。我见过一个真实的例子有人把%s删了翻译成“您确定要删除吗”结果文件删除功能一确认就直接崩溃。原因就是程序调用fprintf(%s deleted, file)这类函数时格式化参数对不上导致缓冲区溢出。再者是长度。中文字符的宽度和英文字符不一样同一句话英文 30 个字符翻译成中文可能只需要 15 个字。界面设计时是按 30 个字符宽度预留的空间翻译成中文只要不超过设计长度就没事但如果碰见长文本翻译成中文字数更多的情况按钮上的文字可能被截断这时候要么精简翻译要么通过语言包配置把窗口适当拉大。Yandex 自家软件在这一点上做得还行很多对话框支持自动调整尺寸但你也别指望它全都能自适应。4.2 专业工具选型Qt Linguist、Poedit、Resource Hacker 怎么选工具选型这个环节很多人容易犯一个毛病——手里是锤子看什么都像钉子。拿到一个软件就开始四处找通用的“汉化工具”这是错误的想法。工具跟着文件格式走。碰到.qm文件就用 Qt Linguist。这是一个免费的 GUI 工具新版和旧版都能在 Qt 官方下载渠道找到对应版本。打开之后在翻译编辑器里源文本和目标文本是分组显示的你只需要在目标文本列填入中文译文然后按CtrlS保存。最后一步要记清楚了在菜单栏选择“文件 - 发布”软件会生成一个新的.qm文件。你不能直接把.ts源文件扔给程序用程序只认编译好的.qm。碰到.po或.mo文件就用 Poedit。Poedit 会在打开文件时提示是否创建默认的中文语言目录你按向导走就行。翻译完成后保存Poedit 会自动生成对应的.mo文件不需要你手动编译。碰到需要修改 exe 或 dll 内嵌字符串的情况就用 Resource Hacker。这类情况主要出现在一些老旧软件上字符串直接以资源的形式嵌入在可执行文件里。打开软件左侧资源树展开“字符串表”里面一组一组地列着字符串。改字符串时要非常小心英文文本和中文字节的长度不同直接改超长内容可能导致程序崩溃。稳妥的做法是中文译文尽量精简不要超过原始英文的字节长度。改完之后另存为一个新的 exe 文件先用它测试没问题再决定是否替换原文件。5. 常见问题与排查技巧实录5.1 切换语言后仍是英文大概率卡在哪一步这个现象我遇到太多次了。每次用户跑来问我“为什么我明明加了--langzh-CN参数启动还是英文”我首先会反问三个问题第一你真的是在同一个快捷方式上加的参数吗第二你确认这个版本的软件资源里内置了中文资源吗第三你改的是不是用户级配置和系统级配置同时生效了实际排查流程是这样的先打开任务管理器看启动时命令行参数是否已经带上了--langzh-CN。如果参数已生效但仍是英文八成是资源缺失这时候直接用前面说的提取zh-CN.pak的方法来解决。另一种情况是配置文件里已经有了intl: {locale: en-US}这样的强指定而命令行参数的优先级反而低于配置文件这时候就得用文本编辑器打开 Preferences 文件把 locale 值强制改成zh-CN。还有一个经常被忽略的点Yandex 这类软件有时会读取系统“主语言”作为默认即使你在软件里设置了语言下次重启又回到了英文。这是因为它更新了用户配置。解决方法是修改配置文件的权限为“只读”或者直接在配置文件中把语言相关的键值全部改成中文并把文件标记为只读防止程序回写。5.2 汉化后乱码、漏翻、更新被覆盖的处理乱码的原因通常是编码不匹配这个在上文已经详细说了。还有一个是字体缺失尤其是一些非标准字体渲染的界面。如果翻译后出现一个个方框别急着删文件先检查系统里是否有中文字体微软雅黑基本都会有再检查配置文件里是否有 font 相关的强指定字体。你可以尝试在配置里补充font: Microsoft YaHei之类的项。漏翻是最常见的很多菜单项和右键项藏在多个资源文件里。你汉化完主界面发现右键菜单还是英文很正常。解决思路是通过软件自带的“开发者模式”或者资源查看工具把每个界面上的英文单词抄下来逐个去各资源文件里搜索。几个有代表性的英文单词比如File、Open、Settings、Help在文本编辑器里用“在文件中查找”功能跨目录搜索找到包含这些单词的资源文件逐个翻译补齐。更新被覆盖这个基本无解但可以提前干预。关闭自动更新的办法不同的软件位置不一样。Yandex 系的产品一般都在设置里有“自动更新”开关把它关掉。或者你到安装目录里把更新器的文件名改掉比如把updater.exe改成updater.exe.bak这样更新程序就启动不了。代价是软件的安全补丁也不会自动打了所以建议定期手动检查更新更新完再重新覆盖一次汉化文件。5.3 不同软件汉化思路横向对比速查表总有人喜欢把某一种汉化方法套用到所有软件上这里我强烈建议先看下表明确自己的目标属于哪一类软件类型典型代表常见语言包格式推荐路径易踩的坑Chromium 系浏览器Yandex Browser、Chrome.pak下载同版本 zh-CN.pak 改 Preferences版本不匹配索引崩坏Qt 桌面客户端旧版 Yandex Disk、部分网盘类客户端.qm/.tsQt Linguist 编辑并发布 .qm逻辑上漏掉发布步骤GNU gettext 类部分开源小工具.po/.moPoedit 编辑并保存编码混乱乱码文本配置类各种轻量小软件.lng/.ini/.json文本编辑器直接改保存格式与原始编码不一致内嵌资源类部分老旧的绿化/汉化软件exe/dll 内字符串Resource Hacker 改字符串表中文字节超过原长度导致崩溃这张表是我整理了很多次之后留下的精简版。你在实际处理时先套这个表再根据具体软件的反馈调整能省下很多瞎折腾的时间。6. 实操过程与核心环节实现一盘完整的 Yandex 汉化项目实录6.1 从安装目录探路到确认版本架构我拿自己最近处理过的一个 Yandex Browser 汉化需求当例子完整走一遍流程你可以照着这个流程来复现。当时我处理的是一个便携版的 Yandex Browser版本号显示24.1.1.812。这个版本比较新但装好之后界面是英文设置里没有中文选项。我的处理步骤是打开安装目录我的是D:\PortableApps\YandexBrowser\然后一路进入Application\24.1.1.812\Locales。在这个目录里只看到了en-US.pak、ru.pak、tr.pak等几个文件果然没有zh-CN.pak。到用户目录下找到Preferences文件。便携版的位置一般是在应用目录里我的是D:\PortableApps\YandexBrowser\App\Default\Data\Profiles\Default\Preferences。打开这个 JSON 文件搜索locale看到locale: en-US。确定了版本内核的大版本号去找对应版本的 Chromium 中文语言包。当时的情况是找不到完全同号的 Chrome 版本我就取了一个近似版本号的 Chromium 编译版提取它的zh-CN.pak。把这个文件放到 Locales 目录里然后把 Preferences 里的 locale 值改成zh-CN。重启浏览器界面变成完整的中文。这一步走完整个浏览器的主要界面文字、设置项、菜单栏都已经是中文了。但还没完全结束因为浏览器内部还有一部分扩展页面、新标签页底部的文字提示它们不是走 pak 文件而是走网页资源。如果你追求完美还要处理新标签页里的部分英文文案那工作量就更大一些。但作为日常使用到这个程度已经完全够了。6.2 汉化文件的后台存在方式与权限陷阱接下来要叹一个常见的坑文件拷贝进去了配置也改了重启之后发现它居然变回英文了。这时候你需要检查两件事——文件权限和用户目录覆盖。很多软件在启动时会“修复”其安装目录下的文件将 Locales 目录恢复成默认状态。如果你把zh-CN.pak放在安装目录的 Locales 下软件一启动就把它给删了或者重置了。解决方法是将该文件属性设为“只读”或者在 Windows 安全设置里将这个文件的权限改为“拒绝写入”。在文件上右键 - 属性 - 安全 - 编辑 - 选择用户 - 勾选“拒绝写入”这样软件就无法覆盖它了。但这里还有个反向陷阱如果你对 Locales 目录整体设置了拒绝写入软件更新时可能因为无法写入目录而直接报错退出。我的建议是只对单独的zh-CN.pak文件做只读处理目录权限不动。这样既保住了汉化又不至于把整个软件锁死。6.3 一套能保存到下次更新的快捷汉化脚本为了应对更新后汉化失效的问题我建议写一个简单的批处理脚本放在桌面或者任意固定位置。逻辑很简单检测 Yandex 浏览器安装目录里的 Locales 目录如果zh-CN.pak不存在或者被覆盖了就自动从你备份好的中文语言包目录复制过去。批处理脚本的内容大致是echo off set SRCD:\MyLangPacks\zh-CN.pak set DEST1C:\Users\%USERNAME%\AppData\Local\Yandex\YandexBrowser\Application\*\Locales\zh-CN.pak for /d %%i in (C:\Users\%USERNAME%\AppData\Local\Yandex\YandexBrowser\Application\*) do ( copy /Y %SRC% %%i\Locales\zh-CN.pak ) taskkill /f /im browser.exe nul 21 start C:\Users\%USERNAME%\AppData\Local\Yandex\YandexBrowser\Application\browser.exe这个脚本的执行原理是通配符匹配目录下的所有版本号文件夹不管软件更新到什么版本号只要用户目录里的主目录结构没变就能找到对应的 Application 子目录然后把语言包复制进去。复制完后强制关闭浏览器并重新启动实现“更新后一键恢复汉化”。6.4 没有中文资源包时从零翻译一个 Yandex 小工具的完整过程如果上面说的 Chromium 方式不适用于你的场景你碰到的 Yandex 软件是一个没有现成中文资源的自定义小工具那从零翻译也不是没有办法。以我处理过一个 Yandex 命令行小工具的经验为例它的语言文件是.ini格式里面每行一个字符串类似string.quitQuit。我处理过程是用 VS Code 打开原始.ini文件确认编码是 UTF-8。新建一个空文本文件把每一行右边的英文翻译成对应的中文。翻译的原则很关键不要直译要结合软件的实际语境。比如Quit在小工具里充当的是界面按钮翻译成“退出”就比“离开”更贴合按钮语义Device在网盘工具里翻译成“设备”在搜索工具里又可能该翻译成“装置”这个必须结合上下文判断。翻译完成后把文件另存为zh_CN.ini文件名取决于软件读取逻辑有的是强制读取language.ini有的可以识别zh_CN后缀以软件代码为准。启动软件看它是否自动识别。如果没识别说明需要在配置里指定语言路径或者把新的 ini 保存为与原文件相同的文件名先把原文件改名备份再替换。这一套流程试下来只要软件本身没那么死板基本都能成功。7. 本地化汉化过程中的几个“为什么”很多人会出现一个疑惑汉化这东西为什么我按照教程做了还是各种不顺手很多细节背后的逻辑没搞清楚走一步卡一步。我在这里把几个高频的“为什么”说透。为什么不能直接把官方英文语言包里面的英文词条全部替换成中文就完事因为语言包除了显示文本之外还包含语言区域代码、字体回退表、排序规则等元数据。英文语言包里的区域代码是en-US你把它里面的文字全部改成中文程序依然认为当前语言是英文可能触发英文专属的排版逻辑轻则按钮大小异常重则部分功能逻辑跟着走错分支。所以正确做法是添加一个全新的zh-CN语言包而不是覆盖原有的en-US包。为什么要保持语言文件的版本一致因为资源文件内部有索引表索引对应了软件代码里每个字符串的 ID。假如一个语言包是 20.x 版本的软件生成的而你把它塞进了 24.x 版本的软件里字符串 ID 可能已经重新排列了结果就是界面上出现错位——原来的“文件”菜单显示变成了“设置”甚至某些按钮点击后触发完全无关的功能。这就解释了为什么很多人下载了“通用语言包”却按上去直接崩溃。为什么要尽量使用官方的工具去修改.qm、.mo这类二进制的语言包因为二进制格式经过压缩和索引优化直接用文本编辑器修改会导致 CRC 校验失败软件加载时直接丢包。正确的做法是拿到源码形式的.ts或.po文件去做翻译再编译回目标格式。很多人嫌麻烦找 Hex 编辑器直接改二进制结果改了 20 个字节整个文件就废了。8. 遇到汉化资源死活不生效时不妨换个思路如果以上所有方法都试过了Yandex 的界面还是以英文显示那还有一种可能软件的某些界面组件并不是走语言包而是“画死”在代码里的。这种情况常见于一些绘图控件、自定义样式的标题栏、启动画面等。它们不读取外部语言包语言包对它们不起作用。这时你只剩两条路一条是接受不完全汉化只把主要功能区域汉化心里有数“这里就是原始语言不影响使用”。另一条是用 OCR 翻译辅助工具处理比如截图翻译、划词翻译把看到的英文实时转换成中文。严格来说这不算“汉化语言包”而是外部翻译层但能解决部分场景下的阅读障碍尤其是新标签页里的推荐内容、搜索结果摘要这类动态文字。我自己在实际使用中比较推荐“主界面汉化 动态内容翻译”双轨并行的方案语言包负责把菜单、设置这些固定的界面元素变成中文遇到网页内容或动态提示用截图翻译或者浏览器自带的网页翻译功能兜底。这样既不用过度投入精力去追每个角落的字符串又能保证日常使用的流畅度。说到底我们汉化是为了用软件不是为了证明自己能 100% 翻译每一个字节把精力放在高频功能上性价比更高。
返回列表