翻译rAthena在游戏中回显的英文提示

根据之前的教程,大家应该都可以进入游戏了,但是在使用GM指令使用技能的时候会发现回来的内容是英文的,看起来比较难理解。

本文将教大家如何翻译这些内容,在这之前请先参考《神级对比工具Beyond Compare 4介绍和安装》安装一下这款对比工具,以及学习《Beyond Compare对比文本文件的用法介绍》来掌握基本的使用方法。

此外还需要把《翻译魔物数据库文件mob_db.txt的方法》里面提到的“简繁互转小工具”下载下来准备好,本文会用到这个工具。

如下图,当我们使用@autoloot自动拾取命令时,服务器返回的提示是英文的“Autolooting items with drop rates of 100.00f% and below.”看着实在是无法接受:

我们本文的目标就是把这些东西给翻译了。这些文本我们可以在rAthena目录下的conf\msg_conf\map_msg.conf里面找到,比如上文这一行:

这个文件的结构就是,每行一条文本,然后每个文本都有一个ID,格式为——消息ID: 文本

原理:rAthena的代码里面通过这个消息ID(1187)来获取具体的文本,然后再将文本经过适当的处理(比如把上面这个%0.02f%换成100.00)然后回送到客户端。

说到翻译,如果大家看过前面翻译mob_db和item_db的文章的话,应该知道如果不想一行一行手动翻译,那么我们必须要有“数据源”可以供我们处理。不过好在对于翻译这部分内容,数据源不是问题!

因为在conf\msg_conf文件夹里面,还有一个文件叫map_msg_chn.conf,里面是繁体版本的指令文本。那么我们是不是直接复制改名就OK呢?当然不是啦!!

因为map_msg_chn.conf这个文件的更新频度没有map_msg.conf的更新频度高,往往map_msg.conf都已经出现好几个新的ID(我们假设新ID是1496)了,但是map_msg_chn.conf都没把这个1496的文本给加进去翻译,那么如果你直接复制改名去替换的话,相当于消息ID为1496的文本就丢失了,代码中需要读取消息ID为1496的地方就读不到任何文本了。

我们用map_msg_chn.conf作为数据源来进行汉化翻译,虽然不够完美,但是也应该足够大家使用了!下面我教大家正确的操作方法!

—————————————————

1、先将map_msg_chn.conf复制出来,改名为map_msg_chs.txt(此举是为了避免接下来的操作破坏map_msg_chn.conf文件,后缀改成txt是因为第二步的工具只能识别txt文件…)

2、接下来我们要修改一下文件编码,否则待会儿用“简繁互转小工具”会遇到乱码的困扰~请用Notepad++打开map_msg_chs.txt文件,在菜单中选择“格式→转为 ANSI 编码格式”然后保存。

3、用《翻译魔物数据库文件mob_db.txt的方法》把里面提到的“简繁互转小工具”,展开“文件批量转化->”然后选择“打开文件”,然后在“浏览文件夹”中选择你map_msg_chs.txt文件所在的目录,然后确定打开:

将列表中的map_msg_chs.txt勾选起来,选择“GBK繁→简”,然后点击“转换”按钮,碰到确定提示的话,选择“是”,将此文件转换成简体中文:

转换后大家可以打开看一下效果,如下图所示:

4、现在我们已经有了一个比较靠谱的数据源了,那么接下来的话就是看如何把它应用上~ 像前面说的,直接复制改名是肯定不行的!

我们需要借助Beyond Compare工具,将正确的简体中文文本“一行一行”的挪到map_msg.conf里面(你没猜错,这是个体力活!不过不是很难,大家有点信心,至少自己操作一下~)

首先,右键点击我们的“数据源”文件map_msg_chs.txt,选择“选择左侧文件进行比较”,如下图所示(这个菜单只有安装了Beyond Compare才会有):

然后,右键点击我们要对比的map_msg.conf文件,选择“和“map_msg_chs.txt” 比较”:

5、成功的话,你会看到一个如下图所示的窗口,第一步请先确保2个文件的编码用的都是ANSI格式,如果不是的话要点击编码按钮,把编码改过来,否则的话可能有其中一个文件会将中文显示为乱码:

想更改编码的话,只需要点击上图红框中的编码按钮,即可看到编码菜单。

现在回到内容部分,红色表示他们之间有差异的地方,白色表示完全相同的地方,浅蓝色表示他们有差异,但是这个差异无关紧要(比如空格,空白换行等)

6、看着好像很吓人的样子对吧,不用怕,我们理性分析,一点一点来操作,首先我们可以看到顶部有一些//开头的注释说明,这些说明是无关紧要的,实际上我们更希望保持英文版的说明,因为英文版的说明是最新的!那么顶部加//这部分我们就可以不看了~ 直接看下面的内容部分:

在里面,我们可以看到很多由于内容相同而导致的白线,白线和白线之间红色的内容称之为一个“区段”,如下图所示:

—————————————————

接下来正式开始干活!数据这么多,我们判断起来肯定要有一些原则,否则的话一行一行看效率太低。

原则上,只要消息ID没改变,消息ID之间的上下顺序没改变,并且文本里面的 %s、%d、%f等变量的顺序不变的,我们就可以直接从左侧将内容复制到右侧里面。

我不指望大家能有耐心看完下面的教材,看完的话你会掌握自己制作汉化的map_msg.conf文件,这样以后rAthena怎么更新你都能应对。如果你实在没耐心,请直接下载我制作好的文件,替换掉conf\msg_conf\map_msg.conf即可,但我不保证此文件永远不出错,毕竟rAthena可能随时更新map_msg.conf文件:http://pan.baidu.com/s/1hqelsAo

我们先来看看内容部分的第一个区段,第一个区段是从“0: 已传送”开始:

到“125: 您没有伪装”结束,这就是第一个区段的内容,我们前面一行一行看,给大家找例子,教大家碰到各种情况应该怎么做:

1、第一种情况:文本没有%开头的变量,消息ID相同,比如下面这个:

这种情况我们直接可以点击左侧“0: 已传送”这一行直接同步到右侧:

2、第二种情况:文本有%开头的变量,且只有1个变量,消息ID相同,比如下面这个:

这种情况我们也可以直接复制到右侧,不会有任何不良影响(复制的操作方法我就不再敷述了,不清楚的看《Beyond Compare对比文本文件的用法介绍》)!

3、第三种情况:文本有多个%开头的变量,且出现顺序一样,比如下面这个:

上图2个变量都是%d,所以他们怎么颠倒来颠倒去顺序都是一样的,这种情况下直接复制到右侧即可,也不会造成不良影响。

再给大家看一个例子,这个例子是有多个变量的,且2个变量不一样:

这种也是没有影响的,为什么呢,因为左侧是先出现一个%d 再出现一个 %s,右侧也是先出现一个%d再出现一个%s,所以他们两个出现顺序是一样的,也可以直接复制到右侧。

只根据上面这三种情况,你把第一区段的所有行都看一遍,你会发现实际上都可以安全的复制到右侧,那么这时候你就可以点击左侧这个区段中的任意一行,然后点击工具栏的“复制”或者是按Ctrl+R键,把整个区段复制到右侧:

接下来带大家看几种比较别的情况,请睁大眼睛看仔细,如果可能的话也跟着教程一边操作吧,这样的话印象更深刻。

4、第四种情况,英文版中多了一个中文版没有的消息ID,如下图所示:

这说明349是一个新出现的ID,你可以复制”349:”,然后鼠标点击左侧窗口,按Ctrl+F搜索一下左侧是否还有这个ID:

实际上你能搜索到一个1349:的结果,但是这不是我们想要的,所以说明349这个新的消息ID只有右侧的英文版才有,我们必须保留(可以先不手动翻译)!

如果左侧有搜索到,但是在别的位置,那么说明英文版改动了这个消息ID的所在行数,如果真出现这种情况,你可以将349的中文文本,复制到右侧的英文版349的出现位置,并将左侧中文文本的349那一行删掉(要尽可能按照英文版的顺序为主)。

当我们确认349这个消息ID确实是英文版独有的之后,那么复制时你就要小心了,必须保留349这个消息ID对应的行,否则的话会有问题:

接下来你还会碰到一大段类似的情况,请按照上面的方法进行处理!处理的结果就是:不动他,因为右侧这一大段都是左侧中文版没有的……

5、第五种情况:左右的消息ID没能对齐,但是消息ID的上下顺序是对的,如下图所示:

这种情况下只需要按照顺序,将左侧内容用Ctrl+CCtrl+V复制粘贴到右侧对应的消息ID即可,被注释的内容以右侧为准(比如保留右侧的// Char ban而不是左侧的// Trade Spoof Messages),最终效果如下:

注意,上面左侧的//509由于加了注释符//所以当他不存在处理,右侧英文版已经去掉了//说明在新版中已经启用了509这个消息ID。

6、第六种情况:变量的类型不一样,如下图所示:

可以看到左侧的中文部分,变量按顺序分别是 %d %d %d,而右侧的英文版本变量按照顺序是%d %hu %d,这说明了在英文新版中,已经将%d换成了%hu,所以我们翻译过来时候也要跟着替换,最终如下:

7、第七种情况:连续2个%号表示显示时候输出1个%,如下图所示:

我们知道一个变量的组成肯定是“1个%加上对应的符号,比如%d、%s、%0.02f”这种这种格式,但是上图中可以看到左侧的机率部分,写的是“%%%0.02f”,两个“%%”在输出时候会被转化成百分号,如果根据左侧中文版的这种情况的话,那到时候比如偷窃的记录是0.21的话,那么显示出来就会变成“%0.21”这样。

但是我们看了一下右侧,右侧的英文用的是“%0.02f%%”,里面相连的两个“%%”也会在输出的时候被转换成百分号,那么根据右侧情况最终我们看到的会是“0.21%”这样,显然这才是正确的,没有谁把百分号写数字前面的!那么我们知道了这个情况之后,最终的修改如下:

8、第八种情况:变量的数量不一样,如下图所示:

左侧中文翻译是没有任何变量的:

右侧的英文原版是有一个%s的变量:

那么我们可以理解为,在英文的新版中,已经将原来的“@charban/@ban/@banish/@charbanish”变成了一个%s,那么我们需要保留这个%s,最终右侧处理结果如下:

9、第九种情况:最新版已经不需要某个消息ID了,如下图所示:

这种情况下,我们就保留右侧目前的现状就好,什么都不用做!因为最新的rA认为这个1024和1025的消息ID内容已经不重要了,也不需要了,那么翻译也是白翻,还会导致以后这个ID被rA重新启用的时候,你翻译的文本和rA的英文表义不同,导致你自己不知道哪个是对哪个是错。

10、第十种情况:两种不同的英文,以右侧英文原版为主,如下图所示:

上图中消息ID为1295的这一行,符合第8种情况,不用处理。消息ID为1296的这一行,可以看到内容和右侧一样都是英文,但是两者有所不同,那么也以右侧版为准,我们什么都不用动,包括下图这种也是一样:

差不多也就这几种情况了,根据这些情况来处理,就能知道该怎么做了,如果你遇到不明白得可以加我们的Q群提问。

—————————————————

请保存你在Beyond Compare里面修改到最后的右侧文件(即map_msg.conf文件),然后启动rAthena服务端,进入游戏后再次使用@autoloot指令看看,已经成功变成中文了呢: