逐个文件本地化太烦恼?一招教你集成式翻译!
逐个文件本地化太烦恼?一招教你集成式翻译!
前言
做模组开发或者模组搬运的时候,通常会遇到一个问题——模组版本更新了,本地化又要跟进了——可是可是,本地化内容一下子就有好多个文件,首先作为默认fallback的en_us
英语文件,其次作为我们使用的zh_cn
简体中文,再次还有其他zh
甚至lzh
的文件等着我们翻译呢。
如果一次更新的条目非常非常多,那复制粘贴一遍又很容易出现纰漏,经常出现某些条目在某个本地化漏译,而且我们经常先翻译zh_cn
,再移植到en_us
,这时候IDEA的Minecraft Development插件就不好用了。
这里简要介绍一下Minecraft Development插件,它的一些特性很好用,但不是本教程介绍的。
IDEA插件 Minecraft Development的使用
Minecraft Development插件在IDEA中可以通过【文件】->【设置】->【插件】->【Market Place】中搜索并安装。
Minecraft Development插件提供了在模组开发时,代码内使用new TranslatableComponent("翻译字串")
或Component.translatable("翻译字串")
时,可以直接在en_us
文件中,直接添加翻译字串,并且把翻译字串的翻译直接映射到代码文件中,如图:

如图,我们在en_us.json
中添加好翻译之后,就可以直接在java代码文件中看到映射结果。

在zh_cn.json
文件中,由于我们缺少这个条目,因此会提示:添加缺失条目到本文件中。

不过由于这个插件时灵时不灵,我们还是只用它的映射提示作用吧。
VSCODE插件 i18n-Ally的使用
咦,我们Minecraft用的lang文件是不是和前端社区的本地化有共同之处呀,那我们可以直接去找前端社区的本地化工具拿来集成式翻译!因此我找到了VSCode中的i18n Ally插件。
VSCode下载安装:Download Visual Studio Code - Mac, Linux, Windows
i18n-Ally下载安装:

由于这个插件也有局限性,只支持前端社区的内容,因此我们得hack一个前段框架给他用——
在和lang文件夹同级的地方,我们添加一个package.json文件:
|-lang
|-en_us.json
|-zh_cn.json
|-package.json
内容如下:
package.json
{
"dependencies": {
"i18next":"*"
}
}
接下来用VSCode打开我们的父级文件夹,并解除VSCode的工作区安全限制,然后就可以看到侧边栏多了一个标签,而且生成了.vscode文件夹。如果没有多出来这个标签,请打开一个en_us.json文件激活一下插件。
但是先别着急,因为这个插件还有个水土不服的地方——不支持下划线格式的地区文件。我们得把文件en_us
重命名为en-us
,才能被插件完整识别。

因此我们做一个重命名,这里我用bat(Windows/Bat环境)写了两个脚本用于处理重命名操作:(Linux/Bash没有rename命令,改用move命令)
当然指令内容要翻译什么补什么,我这里以3个文件为示例。
rename.bat
cd lang && rename zh_cn.json zh-cn.json && rename zh_hk.json zh-hk.json && rename en_us.json en-us.json
rename-back.bat
cd lang && rename zh-cn.json zh_cn.json && rename zh-hk.json zh_hk.json&& rename en-us.json en_us.json
如果有安装Node.js的同学,可以直接在package.json添加脚本,就不用新建两个bat文件了,运行时直接点VSCode上的运行按键。
package.json
{
"dependencies": {
"i18next":"*"
},
"scripts": {
"rename":"cd lang && rename zh_cn.json zh-cn.json && rename zh_hk.json zh-hk.json && rename en_us.json en-us.json",
"rename-back":"cd lang && rename zh-cn.json zh_cn.json && rename zh-hk.json zh_hk.json&& rename en-us.json en_us.json"
}
}
然后我们运行rename.bat,再查看一下i18n-ally标签:

这里把所有内容都标注出来了:
- 已翻译
- 空值
- 缺失的文案
还可以清晰地看翻译树的内容等等。
工具的使用方法简要介绍一下:

在翻译栏中,点击栏上的按钮,可以打开【翻译编辑器】、进行多种语言的同时翻译;可以跳转到对应语言文件中的定义等等。通常我们可以直接跳转到对应位置进行定义。

除此之外,该工具还有其他例如使用翻译工具的功能,不再介绍。
值得一提的是,如果翻译文件中使用了\u00A7
,会被自动转码为§
,因此记得在使用工具之后记得用VSCode把章节码替换为Unicode。
翻译完成后,运行rename-back.bat
转换回来Minecraft的语言格式。
附录
简体转繁体 https://jianfan.hwcha.com/
i18n-ally插件WIKI https://github.com/lokalise/i18n-ally/wiki