逐个文件本地化太烦恼?一招教你集成式翻译!

XiLaiTL大约 4 分钟

逐个文件本地化太烦恼?一招教你集成式翻译!

前言

做模组开发或者模组搬运的时候,通常会遇到一个问题——模组版本更新了,本地化又要跟进了——可是可是,本地化内容一下子就有好多个文件,首先作为默认fallback的en_us英语文件,其次作为我们使用的zh_cn简体中文,再次还有其他zh甚至lzh的文件等着我们翻译呢。

如果一次更新的条目非常非常多,那复制粘贴一遍又很容易出现纰漏,经常出现某些条目在某个本地化漏译,而且我们经常先翻译zh_cn,再移植到en_us,这时候IDEA的Minecraft Development插件open in new window就不好用了。

这里简要介绍一下Minecraft Development插件,它的一些特性很好用,但不是本教程介绍的。

IDEA插件 Minecraft Development的使用

Minecraft Development插件在IDEA中可以通过【文件】->【设置】->【插件】->【Market Place】中搜索并安装。

Minecraft Development插件提供了在模组开发时,代码内使用new TranslatableComponent("翻译字串")Component.translatable("翻译字串")时,可以直接在en_us文件中,直接添加翻译字串,并且把翻译字串的翻译直接映射到代码文件中,如图:

1
1

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

2
2

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

3
3

不过由于这个插件时灵时不灵,我们还是只用它的映射提示作用吧。

VSCODE插件 i18n-Ally的使用

咦,我们Minecraft用的lang文件是不是和前端社区的本地化有共同之处呀,那我们可以直接去找前端社区的本地化工具拿来集成式翻译!因此我找到了VSCode中的i18n Ally插件。

VSCode下载安装:Download Visual Studio Code - Mac, Linux, Windowsopen in new window

i18n-Ally下载安装:

4
4

由于这个插件也有局限性,只支持前端社区的内容,因此我们得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,才能被插件完整识别。

5
5

因此我们做一个重命名,这里我用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.jsopen in new window的同学,可以直接在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标签:

6
6

这里把所有内容都标注出来了:

  • 已翻译
  • 空值
  • 缺失的文案

还可以清晰地看翻译树的内容等等。

工具的使用方法简要介绍一下:

image-20230802123307196
image-20230802123307196

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

8
8

除此之外,该工具还有其他例如使用翻译工具的功能,不再介绍。

值得一提的是,如果翻译文件中使用了\u00A7,会被自动转码为§,因此记得在使用工具之后记得用VSCode把章节码替换为Unicode。

翻译完成后,运行rename-back.bat转换回来Minecraft的语言格式。

附录

简体转繁体 https://jianfan.hwcha.com/open in new window

i18n-ally插件WIKI https://github.com/lokalise/i18n-ally/wikiopen in new window

上次编辑于:
贡献者: XiLaiTL