Weblate 翻译项目推广

介绍下起源、经过和目的


1. 事情的起源

在前年夏天开始逐步接触Minecraft模组的本地化后,开始逐渐涉及越来越多的模组本地化,也遇见了很多形形色色的问题。有的作者模组不开源,也不开仓库递交汉化。有的作者是一些小模组,写好以后就不需要更新,也不可能为了汉化专门发布一次更新。有的作者不怎么看GitHub仓库,有了汉化提交也不接收。诸如此类问题,着实让人头疼。而玩家这面,主要接触各种大型整合包,动辄缺少翻译的模组就有五六十个。

如何绕过版权来给玩家方便的提供汉化呢?我突然想到日站的翻译方式——外挂资源包。通过制作资源包,只加语言文件,我们能够绕过版权,同时又能够方便提供翻译。

说干就干,在众多朋友的帮助下,我在去年4月份开始着手汉化资源包的项目。起初只是着手非开源项目的汉化,而后演变成大型整合包的翻译。在二十多位贡献者的共同努力下,我们在三个月内完成了1.10版本有名的六个整合包,涉及300多个模组的翻译。

不过这又带来了一个小问题——仓库的更新。说起来就觉得可笑,在这几个月内,我都是用着近乎原始的方式来更新语言仓库:下载整合、查找缺失翻译、利用辅助工具单个校对更新、手动写出列表、提交到github。一段时间过后,连我自己都觉得难以为继。

在replay模组的翻译中,我偶然接触到了weblate,这是一个开源的翻译平台,国外很多大项目都用它做翻译,界面对于不懂git或者语言文件的人来说十分友好,还自带统计、词典、机翻提示等诸多功能。我开始有了蠢蠢欲动的想法,如下图所示。 pic

2. 着手行动

phi的出现帮了我大忙,在11月份还是幻想的项目,12月份就立马上线,搭建好了可用的weblate翻译平台。同时phi还自掏腰包实现了内置谷歌、微软的机器翻译接口(与我们平时使用不同,这些接口都是按照翻译字数收费的)。

而自动更新这面,卡米西村的小伙伴们也提供了一台国外服务器用于爬虫脚本,在一星期的努力下,我们一起解决了大部分问题,这个项目最终完工。

最后的流程和当初我的设想有些不同,但是大体上是一致的。 pic

3. weblate使用

weblate的使用并不复杂。

首先给出weblate翻译项目的地址: 中国大陆:https://weblate.sayori.pw/ 其他地区:https://weblate.exz.me/

目前因为一些原因,weblate翻译项目并不对外开放,如果想要参与翻译项目,首先需要向管理员申请账户。目前管理员有三位:

你需要向管理员提供的信息:

之后管理员会给你一个密码,你就可以用邮箱、密码登录weblate参与翻译项目了。

下面有一张关于weblate简单使用说明的图片,原文我弄丢了。 weblate

4. 最后我在哪里获取资源包呢?

在github仓库的release界面中能够获取最新版资源包,这个是通过Travis CI自动构建的资源包,可能下载会需要代理。 https://github.com/TartaricAcid/Minecraft-Mod-Language-Package/releases/latest

如果你想要稳定版的资源包,可以去curseforge下载。 https://minecraft.curseforge.com/projects/simplified-chinese-localization-resource-package

5. 鸣谢

感谢phi搭建出了weblate服务器,还实现了机翻功能; 感谢雪尼、FledgeXu、asdflj等在内的诸多人的意见和建议; 感谢卡米西村提供的技术支持和服务器,能够使爬虫运行。
最后感谢那些参与翻译,并致力于本地化推广的各位玩家,你们辛苦了。


All The Mods 3 实况中涉及的模组内容

目的就是把 All The Mods 3 中尽可能多的东西都用一遍


序号视频名称使用模组
1探险准备匠魂、Psi、暮色森林、超多生物群系
2数字采矿机实用拓展、暮色森林、通用机械
3星辉魔法大跃进星辉魔法、工业、滑翔翼
4OC机器人半自动农场潘马思、烹饪手册、开放式电脑
5农学研究员工业、应用能源
6植物魔法起步植物魔法、更多实用设备、RF工具
7开心套餐自动化精致存储、实用拓展、循环、潘马斯
8天国与地狱自然、循环
9余烬的科技与魔法余烬
10月光下的苔石阵根源魔法、深渊国度

植物魔法彼方兰的变动

变化不大,但是很淡疼。


作为植物魔法中性价比较高的产能花,彼方兰一直为我们津津乐道。产魔速度快,效果好,而且只需要投喂食物即可。配合上潘马思模组的一些可以大量种植的食物,或者其他模组的高效农场,阵列彼方兰来分分钟灌满魔力,是很轻松的事情。

然而这种简单投喂的局面稍微被某些人修改了。今年8月2号,植物魔法的美工作者williewillus对彼方兰做了些许修改,使得单一投喂一种食物的来产魔变得不可行,彼方兰会记住上次最后投喂的食物,使其产魔量越来越低。到了9月3号,vazkii又做了修改,使彼方兰产魔量由饱食度²×64​变为了饱食度²×70​,同时彼方兰本身储魔量由8000变成了9000

所以,我们来总结下彼方兰产魔的判定机制。此处参考Vazkii的植物魔法源码

  1. 彼方兰会判定其自身3×3×3立方体内是否有食物,如果有,就直接吃掉。
  2. 依据食物恢复的饱食度来判定食物消耗时间和产魔量,大致如下:
    • 食物饱食度最大只能为12点,超过此数强制限定回12点
    • 吃掉食物的冷却时间为饱食度×10 tick(游戏中一秒大约是20tick),冷却时间内不能再投食,否则食物会直接消失而不产生任何魔力。
    • 产魔量为饱食度²×70​
  3. 记住当前食物名称,进行下一次产魔。
  4. 如果还是相同食物,产魔量变成(饱食度²×70)/食物数量

两次改动使得彼方兰自动化稍微复杂了一些,总的来说有两种方法可以轻松解决:

第一条方案简单好用,只需要控制好时间间隔,基本上和原来旧版本投喂没有任何区别,只不过需要多增加一种食物来源。

第二条方案可能会更具挑战性,但同时也更具趣味性,如何做到植物魔法自动化是一个很有趣的游戏过程。

这里我设计了一个活塞+手掌花的系统来自动拆掉重放彼方兰:

1

2

3

设计思路也很简单:

有几个注意事项说明下:


什么是BTM?

对BTM的介绍宣传


什么是BTM展会?

BTM是一个Minecraft模组社区的线上聚会,可以说是Minecraft模组社区的Minecon。来自全球的许多知名mod作者和玩家会齐聚于此。在这里你能看到很多新老模组的特色展示,听到来自各个国家,地区人们各自的演讲。甚至可以和各位mod作者直接交流,可谓是一次不可多得机会。

本次BTM举办的时间是11月18日(星期六)凌晨4点——11月20日(星期一)凌晨5点。

官方网站:http://btm.mcft.net/moon/

展会的日程是怎样的呢?

根据原网站日程列表,我做了一份翻译版本的日程表,并换算成了北京时间

日程北京时间举办方
BTM线上服务器向公众开放周六凌晨4点 
开幕式主题演讲周六凌晨5点modmuss50 copygirl amadornes
观看 Minecon Earth Stream周日凌晨1点mojang
mod作者对Minecon的回应周日凌晨2点30分所有在线上服务器的mod作者
TheDragonTeam的问与答周日凌晨4点TheDragonTeam(国外模组社区的一个团队)
同步大尺寸实体的移动的另一种途径周日凌晨5点cam72cam(沉浸铁路的作者)
Terasology的更新与modding概念的讨论周一凌晨3点Cervator
闭幕式周一凌晨5点 

演讲都是英文而且在凌晨,还有别的可以参加么?

当然有!

别忘了除了演讲,我们还可以参观社区成员搭建的各式各样的展馆!这里面很有看头的!

这里有一份所有展馆的列表。大部分展馆都是模组展馆。也有极少数(诸如FTB wiki)的其他类型展馆。

参展模组/展馆作者/场馆修建者
AbyssalCraft(深渊国度)Shinoow
Architectgamax92, Sangar
ArmorPlus(更多护甲)TheDragonTeam
Bedrock Oresgamax92, Sangar
Better With Mods(比狼更好的复刻版)BeetoGuy, BordListian
Binnie’s Modsmezz
CarZ - Driving school and racingcanitzp, MisterErwin, Zombiefleischer
Classy Hatsyrsegal
Clay Soldiers(粘土士兵)SanAndreasP
Colossal Chests(巨型箱子)kroeser
ComputronicsVexatos
CrossroadsTechnomancer
Cyclic(循环?)Lothrazar
Dark Utilites(Darkhex的实用设备)DarkHax
DiscoBoothGamax92
DissolutionLadysnake
Draconic Evolution(龙之进化)brandon3055
Ender Utilities / Autoversemasa
EnginationFalkreon
EvilCraft(邪恶工艺)kroeser
Forestry(林业)mezz
FrogCraft: Rebirth(青蛙化工:重生)3TUSK
FuturePack(飞向未来)Mcenderdragon, wugand, Mantes
ImmersiveRailroading(沉浸铁路)cam72cam, Thelegend5550
Inductive LogistsicsCD4017BE
Industrial Foregoing(我的工厂的复刻版本)Buuz135
Industrial Wiresmalte0811
IndustrialCraft 2(工业2)Player
Integrated Dynamics(集成动力学)kroeser
Integrated Tunnelskroeser
Lingering Lootcapitalthree
Magic Bookskjmaster
McJty’s ModsMcJty
Mechanical SoldiersThe_Fireplace
Official FTB WikiXbony2
OpenComputers - GERTMajGenRelativity, ??
OpenComputers(开放式电脑)payonel, ??
OverlordThe_Fireplace
Ristelle’s Game EmporiumRistelle
Simple Block ModsDarkCow
SpectriteFlashfireEX
Steve’s Carts Reborn(史蒂夫的矿车)modmuss50
TechReborn(科技重生)modmuss50
Turret Mod Rebirth(炮台)SanAndreasP
Twilight Forest(暮色森林)TeamTwilight
Wearable Backpacks(可穿戴式背包)copygirl
Wizardrydemoniaque

那么参加这个线上展会需要什么条件么?

一个Minecraft国际版正版账号

一颗坚毅的,能够抗住任何bug,任何延迟,任何下载失败的心

那么如何参加呢?

在服务器对外开放后,官方网站会放出一个启动器,能够自动下载所有的mod,并启动它(目前测试不使用科学上网也可下载整合包,但是速度稍慢)。

你可以通过在这个IRC频道上与这次展会的举办方进行交流:#BTM on esper.net

到时候语言交流,全部通过一个叫做Mumble的语音软件完成,目前还未公布Mumble的频道。

我想知道更多!

BTM全名原叫做Better Than Minecon,本意为:“比Minecon还要好!”本意也来自于几个mod作者对Mojang官方举办的Minecon会议的调侃。不过在Mojang将Minecon注册为商标以后,这个名称随即被解释为了Bug Testing Marathon,即“如同马拉松般的Bug测试”。

实际上每次展会的过程都伴随着服务器崩溃与模组作者修bug。比如在2016年的BTM16展会上,如果有玩家穿上林业的养蜂员帽子,或者养蜂员眼镜。会导致附近所有玩家被强制每tick刷新一次5x5大小的区块,最终导致内存溢出,使得玩家游戏崩溃。

即使是服务器本身也是极为不稳定的。在2015年举办的BTM中,有一个mod是服务器启动前几分钟刚刚编译好的。在服务器运转过程中也经常存在重启,模组更新等诸多情况。所以!做好心理准备!

BTM的最初由Buildcraft的前作者asie创办的,起因是一句推特上的玩笑话。最终众多参与者在26小时之内构建好了服务器,囊括了主会场,各种模组的展览馆,甚至一个线上交流的语音频道与文字频道。最终这次行动使得BTM成为一个半年举办一次的展会。

下面是已经举办过的BTM展会记录:

  1. BetterThanMinecon 2015:举办时间为2015年7月4日至7月5日。最早的一届。
  2. BetterThanMinecon 2016:举办时间为2016年1月2日至1月3日。
  3. BTM16 2.0:举办时间为2016年7月29日至7月31日。这次展会主办方并不是asie举办,而是由unascribed举办的。
  4. PicoBTM 16.3:举办时间为2016年9月24日至9月25日。没有任何演讲或者展览。整个展会只是在服务器中用OpenComputers观看Minecon 2016的Twitch直播。
  5. RetroBTM:举办时间在2017年2月下旬。这次展会使用的是1.4.7版本的Minecraft,但参与者很少。

一个本地化小工具的制作心得

我还在努力学编程中,没想到只花了两天居然就做出来了。


最初的想法

上一篇博客文章中提到了我在处理本地化文件中遇到的种种问题。很显然,在处理诸如FTB这样的大型整合包语言文件时候,就会遇到形形色色的各种问题。哪些模组需要更新了,更新了几条?都无从得知。自己一个个校对能花上几小时时间。

尝试制作

本来是打算依靠着3TUSK能帮忙制作一个工具出来,不过随后因为搭建etherpad时,被服务器管理者w君强制索求一份脚本。不敢怠慢,拿起键盘就是干,一边啃shell文档,一边试验着写脚本。不出十分钟就测试出了一份可用的脚本。

#!/bin/bash
echo "building environment"
sudo apt-get install gzip git curl python libssl-dev pkg-config build-essential
echo "install nodejs"
sudo apt-get install nodejs-legacy nodejs
echo "change npm source"
npm config set registry https://registry.npm.taobao.org/
echo "clone etherpad"
git clone git://github.com/ether/etherpad-lite.git etherpad-lite
cd etherpad-lite
echo "build & run etherpad"
bin/run.sh

实验过后就异常觉得这东西简单好用,如果用它来批量化更新语言文件岂不妙哉?

拿起键盘就是干,我于是在头脑里面构思了这么一幅思维导图。

pic

进展

进展的难点其实在中英文的对比更新,单纯使用shell比较麻烦,不过好在有成熟的工具可供使用。我选择了3TUSK所写的lua更新工具,这个工具可供shell作为外部脚本使用。

大体分为这几部

最后感想

居然没想到这个问题让我在两天之内解决了,试验之前还认为这是一个不可逾越的难题。看起来有时候我们真是被问题表象吓住了。

这里写好的脚本文件仓库,说明请按照README.md食用。注意备份,保证安全!


Pagination