英雄联盟修改语音教程

2120 字
11 分钟
英雄联盟修改语音教程

之前写过一篇英雄联盟语音&文字修改教程,当时的方法离不开 locale,需要改启动参数或者配置文件。这个方法现在还是能用,只是如果你单纯想换个语音,再去动整套语言环境就有点绕了。

现在可以直接替换游戏加载的本地化文件,不改 locale,配置文件也不用动。操作本身其实很简单,麻烦的地方主要还是游戏更新之后需要重新处理。

原理#

英雄联盟的本地化资源放在游戏目录的 Game\DATA\FINAL 下面。一般当前服务器只会提供自己用到的语言文件,国服常见的是 en_USzh_CN,日语、韩语之类的文件需要自己从对应服务器准备。

以英雄文件为例:

Aatrox.ja_JP.wad.client
Aatrox.zh_CN.wad.client

游戏正常以国服区域启动时,会读取文件名带有 zh_CN 的资源。那么把日服的 Aatrox.ja_JP.wad.client 复制一份,改名为 Aatrox.zh_CN.wad.client 再覆盖进去,游戏加载到的就是日服文件。

说白了就是文件里面还是日语资源,只把游戏用来识别语言的文件名换成了 zh_CN

这个方法现在能用,还有一个前提是 WAD 文件内部的资源路径已经统一成了 en_US。不管外面是哪个区域的文件,内部路径都一样,所以改完文件名之后游戏还能正常读取。原来的路径会带区域代码,代码语义上看着更合理,现在为什么统一成这样就不展开了,反正正好留下了这条路。

文件准备#

完整替换不能只看 Champions,人物换成日语了,地图和播报还在说中文,听着也挺乱的。需要准备的本地化文件主要在下面几个位置:

英雄联盟\Game\DATA\FINAL
├─ Champions
├─ Localized
└─ Maps
└─ Shipping
  • Champions 下面是各个英雄的本地化资源,例如 Ahri.ja_JP.wad.client
  • Localized 下面有 Global.ja_JP.wad.client 这类全局资源。
  • Maps\Shipping 下面是 Common.ja_JP.wad.clientMap11.ja_JP.wad.client 这类地图资源。

其他区服的文件必须自己下载,并且目录结构最好原样保留。后面覆盖时直接把准备好的 ChampionsLocalizedMaps 合并进 FINAL,不容易漏文件。

IMPORTANT

版本必须一致

外服资源要和当前游戏版本对应。拿旧版本文件覆盖,轻一点就是新英雄、新皮肤、地图或者新语音没有声音;严重时游戏会直接异常或者崩溃。这个和旧方法没什么区别,文件缺了就是缺了,改个名字也变不出来。

修改教程#

先完全退出游戏和 WeGame,找到自己的游戏目录。这里用我的目录举例:

D:\Games\Tencent\WeGameApps\英雄联盟\Game\DATA\FINAL

实际操作就是下面几步:

  1. 把原本的 zh_CN 文件备份到游戏目录之外,并保留 ChampionsLocalizedMaps 这些目录结构。
  2. 复制一份准备好的外服资源,不要直接在唯一的一份源文件上改。
  3. 把副本文件名中的语言标记批量改掉,例如将 ja_JP 改为 zh_CN
  4. 把改名后的文件按原目录结构复制到游戏的 FINAL 目录,覆盖原本的 zh_CN 文件。
  5. 正常启动游戏,不需要再修改 locale 或任何配置文件。
WARNING

覆盖前先备份

覆盖的是游戏原本的 zh_CN 文件,不备份也不是不能恢复,WeGame 修复一下就回来了。但修复需要重新检查和下载文件,能提前复制一份就别给自己增加工作量。

单个文件的改名就是这样:

Ahri.ja_JP.wad.client
Ahri.zh_CN.wad.client

文件比较多时一个个改名没什么必要,可以用 PowerShell 批量准备。下面脚本会从外服资源目录复制到一个新的输出目录,并在复制时把 ja_JP 改成 zh_CN,不会修改源文件。

prepare-lol-voice.ps1
$sourceRoot = (Resolve-Path 'D:\LOL-Voice\ja_JP').Path.TrimEnd('\')
$outputRoot = 'D:\LOL-Voice\ready'
Get-ChildItem -LiteralPath $sourceRoot -Recurse -File -Filter '*.ja_JP.wad.client' |
ForEach-Object {
$relativePath = $_.FullName.Substring($sourceRoot.Length).TrimStart(
[IO.Path]::DirectorySeparatorChar
)
$targetPath = Join-Path $outputRoot (
$relativePath -replace '\.ja_JP\.wad\.client$', '.zh_CN.wad.client'
)
New-Item -ItemType Directory -Force -Path (Split-Path $targetPath -Parent) |
Out-Null
Copy-Item -LiteralPath $_.FullName -Destination $targetPath -Force
}

$sourceRoot 改成外服资源副本的实际位置,$outputRoot 改成准备存放改名结果的位置。这两个路径都不要填写正在使用的游戏目录,脚本跑完确认目录结构和文件名没问题,再手动复制到游戏里覆盖。

只替换一部分#

不一定每次都要把全部语音换掉。如果只喜欢某一个英雄的外服语音,那么只备份并替换这个英雄对应的文件就行。例如只换阿狸,就只处理:

Champions\Ahri.ja_JP.wad.client
Champions\Ahri.zh_CN.wad.client

只想换地图或者播报语音也是同理,处理对应的全局或地图本地化文件,不需要把两百多个英雄文件一起塞进去。

TIP

局部替换更好维护

只替换一个英雄,游戏更新之后也只需要盯住这一个文件;只替换播报,就只看对应的全局或地图文件。全量替换省得挑,局部替换则省得每次更新都重新处理一整套,按自己的需求来。

更新和恢复#

这个方法不用改配置,启动体验更省事,但更新上没有原来的 locale 方法方便。游戏更新时会把修改过的文件更新回去,通过 WeGame 启动或者执行修复时,也会把文件恢复成国服原版。

更新之后不要直接把很久以前的外服文件再覆盖回来。先准备与当前游戏版本一致的新资源,重新改名再替换。全量修改就重新处理整套文件,局部修改就只处理自己用到的那几个。

想恢复原版时,把之前备份的 zh_CN 文件按原目录复制回去即可。没有备份就用 WeGame 修复,反正它本来就会干这个。

其实这个办法去年就能用了,只是一直没单独写,原因也就是更新麻烦。这个版本刚改完,可能半个月之后游戏一更新,又得重新准备一遍。只换一个英雄还好,全量替换每次都这样弄,确实有点折腾。

新旧方法#

新方法的优点很明显:

  • 不用改 locale,也不用碰配置文件,把 WAD 文件准备好再改名覆盖即可。
  • 支持只替换一个英雄。平时就玩这一个英雄,不需要下载和维护一整套文件,只换它自己的就行。

旧的 locale 方法则更适合完整替换。它需要准备目标区域的一整套文件,少文件时可能会在载入对应资源时出问题,严重时游戏都进不去。当然,游戏不一定每次都会读取所有 WAD,但你很难提前确定哪个永远不会用,所以实际准备时还是按完整文件来。

旧方法还有一个很实际的优点:它是在游戏目录里添加另一套区域文件,不是覆盖国服原本的文件,客户端正常更新时一般不会影响这些新增文件,也不需要备份原来的 zh_CN。新方法看着只是改了一个文件名,但在游戏眼里,官方文件确实被改动了,更新和 WeGame 自然会把它恢复回去。

两种方法也可以组合使用。比如把 locale 恢复成中文,再用现在的覆盖方法处理语音,看上去像是“中文环境只换语音”,但原理并不是游戏提供了单独的语音开关,而是用外服资源实际替换了游戏要读取的 zh_CN 文件。

所以如果只是换一个英雄,或者只换地图播报,新方法很方便;想长期完整替换,还是更推荐原来的 locale 方法。方法本身都不难,主要看你愿不愿意跟着版本一直维护。

英雄联盟修改语音教程
https://x-item.com/lol-voice-change.html
作者
惟一 / Virace
发布于
2026-07-26
许可协议
MIT