由于Notion客户端更新之后文件内结构发生了变化,使得旧版本Notion的汉化方法失效,在Notion安装目录下的resources文件夹中无法再找到包含preload.js文件的\app\renderer\目录,取而代之的是一个名为app.asar的压缩文件。
针对该问题,CSDN上能够找到新版本的汉化教程,地址1:
新版notion2.2.0汉化教程_github notion 汉化-CSDN博客
该汉化方法中需要先安装node.js的npm包管理工具,再安装asar将app.asar文件解压出app文件夹,此时就能应用旧版Notion的汉化方法,在\app\renderer\目录中加入notion-zh_CN.js,并且在preload.js文件中加入require("./notion-zh_CN")。最后将app文件夹重新打包为app.asar文件完成汉化。该方法需要调用控制台执行安装软件、解压以及再压缩的操作,较为复杂,对电脑小白十分不友好。
除此之外,这篇博客的作者提供了已经配置好的app.asar文件供大家下载,用来直接替换安装目录中的app.asar文件。但是在最新的3.2.1版本的Notion中,本人实测应用该替换文件之后,Notion桌面端会出现无法打开或者重新覆盖安装的状况,导致汉化失败。
考虑是版本不对应的问题,因此在新的博客中找到了3.2.1版本的app.asar汉化文件,地址2:
Notion 2024最新汉化教程!支持3.2.1(长期更新)_notion汉化3.2.1-CSDN博客
但是随着软件更新需要不断重新下载新版本对应的app.asar汉化文件,下载博客中贴的链接又要注册冷门网盘而且每次都要下载一个巨大的捆绑包,十分滴烦人。
因此考虑寻找新的汉化方法,注意到github中的一个项目中提供了一个不用修改app.asar中源码的方法,将缓存资源文件中默认英语 en-US 的 html 替换为 zh-CN 的 html,参考地址3:
GitHub - Reamd7/notion-zh_CN: notion 中文化
根据该大佬给出的步骤,首先打开Notion的资源缓存文件:C:\Users\[用户名]\AppData\Roaming\Notion\notionAssetCache-v2 ,根据 latestVersion.json 内部 version 字段提供的最新版本号,找到最新版本所在的文件夹,搜索到 localeHtml 字段, 将下级en-US 字段的值改为和 zh-CN 一致,然后保存并重启软件以完成汉化。
该方法可以避免版本更新造成的汉化包不适用问题,但是问题是 Notion 经常热更新会更新缓存,需要重新重复这步骤。作者提到了如果做一个自动化的脚本就能解决该问题,但是似乎作者比较忙并没有给出。上面的过程的逻辑还是比较简单的,于是我就尝试做这样一个自动化工具,由于不懂直接写bat文件的语法,想到以前学过的python,就动手尝试了一下。代码如下:
# 功能:用于Notion软件的汉化
# 读取latestVersion.json文件获取最新的版本号:
with open(r'C:\Users\12468\AppData\Roaming\Notion\notionAssetCache-v2\latestVersion.json', 'r') as v:
v_lines = v.readlines() # 读取文件内容
latestVersion = v_lines[0].split(',')[0].split(':')[1].strip('"') # 找出最新版本号码
# 指定配置文件地址:
filepath = r'C:\Users\12468\AppData\Roaming\Notion\notionAssetCache-v2\{a}\assets.json'.format(a=latestVersion)
print(filepath) # 打印出来最新版本的配置文件的地址
# 修改en-US的地址为zh-CN的地址
with open(filepath, 'r') as f: # 以只读的方式打开文件
lines = f.readlines() # 将文件按行转化为list类型的列表
address_new = [] # 用于存放读取到的zh-CN后面指定的地址
address_old = [] # 用于存放读取到的en-US后面指定的地址
with open(filepath, 'w') as ff:
for line in lines: # 按行进行索引处理
kx = line.strip().split('","') # 以","为分隔符进行把该行的参数条目进行分隔
for ky in kx: # 对于每一个条目
kz = ky.strip().split('":"') # 以":"为分隔符分别取出参数名和参数值做为kz[0]和kz[1]
if kz[0] == 'zh-CN': # 找出名为zh-CN的参数
# print(kz[1]) # 调试用
address_new.append(kz[1]) # 将该参数的值按照顺序加入到地址列表address_new中
# ['/_assets/index-zh-CN-a1f8f681e8c04104.html', 'index-zh-CN-a1f8f681e8c04104.html']
if kz[0] == 'en-US': # 找出名为en-US的参数
address_old.append(kz[1]) # 将该参数的值按照顺序加入到地址列表address_old中
line = line.replace(address_old[0], address_new[0]) # 替换line所在行的第一个地址字符串
line = line.replace(address_old[1], address_new[1]) # 替换line所在行的第二个地址字符串
ff.write(line) # 以write模式重新写入文件
print(address_old) # 打印出来修改前的地址
print(address_new) # 打印出来修改后的地址
运行结果:
打开软件,汉化成功:
结果表明能够实现一键运行的自动化操作,完成了Notion的汉化。电脑上有Python的可以直接拿来用,记得将修改安装目录,把12468替换为你自己的用户名。水平有限,期待有大佬能用.bat直接写出来,供大家更方便地使用。