本帖最后由 墨染衣 于 2024-7-9 09:15 编辑
写在最前
使用传统的接口汉化方式永远是最优先也是最好的解。 但不是每个作者都会给MOD文本加接口,有的作者甚至不懂怎么加接口。 以往的方法是暴力翻译,直接修改MOD原文件。
然而,暴力翻译通常使用寿命只有一个版本,如果MOD更新,又要重新导出文本再匹配新的文件,查缺补漏导入到新文件里,也会遇到顺序错乱等问题,查重也是个繁杂的工作。 外挂式汉化的意义就是解决这些问题,通过绑定项目的ID,这ID类似于身份证,每个项目独一份,将身份证与汉化文本绑定在一起。 只要作者不将MOD的某项身份证改掉,那么外挂汉化永远生效,使它维护起来如同传统接口汉化一般。
下面我将通过实际案例来讲解外挂式汉化MOD的制作教程。 请出本次主人公 《古文明军械库》。 首先打开装备的xml瞧一瞧。 好家伙,一个接口都莫得。 那么,再翻一翻其他文件是否还存在需汉化的文本。 最终我们找到需要汉化的文件5个。 那么开始外挂式汉化的第一步吧。
一、外挂式汉化文件夹的建立 这是所有的基础,需要最最基础的MOD制作知识,如果这一步无法理解或学会,其他所有的努力都是无用功。 1.因为原MOD的文件夹名为Ancient Civilization v.1.1,所以我新建了一个文件夹叫做Ancient Civilization CNs,这是方便我区分,你也可以按照自己的习惯来。 2.在新建汉化文件夹中,再次新建个文件夹,命名为ModuleData。 3.将刚刚翻到需要汉化的5个文件复制粘贴到这个Ancient Civilization CNs\ModuleData里。 4.从原MOD文件夹中复制SubModule.xml文件,将其粘贴到Ancient Civilization CNs文件夹。 现在Ancient Civilization CNs文件夹里的内容就像这样:
二、Submodule.xml文件的编写 从现在开始可以不用管原MOD文件夹了,所有的操作只和你新建的汉化文件夹有关。 打开汉化文件夹中的Submodule.xml文件。 1.首先这部分,name value决定了在启动器显示的名字,我们将其改为Ancient Civilization CNs。 2.Id value,刚刚也说了相当于身份证不能重复,所以我们也将其改为Ancient Civilization CNs。 这里改成什么都可以,只要不和原MOD一样就行。 3.接着在DependedModules里加一行,<DependedModule Id="Ancient Civilization" Optional="false"/>,这一行的意思是,古文明军械库MOD作为汉化MOD的前置,只有勾选了前置MOD,才可勾选汉化MOD。 改完后变成: 这部分除了以上三处其他都无需更改。 4.开始向下翻,会看到很多涉及的xml。 5.我们只保留那5个需要汉化的文件相关的部分,其他全部删除。 删完后变成: 至此,第二部分submodule.xml的编写就结束了,很简单吧。 6.这里的id指向类别,path是你文件的名字。不同的MOD涉及的类别不同。 例如, 武器装备对应的类别id是Items, 文化对应的类别id是SPCultures, 兵种、人物对应的类别id是NPCCharacters, 王国对应的类别id是Kingdoms, 家族对应的类别id是Factions。 再多我就不一一列举了,毕竟这里不是MOD制作教程。细心一些,根据原MOD的submodule.xml改,通常这部分就不会出错了。
三、外挂式汉化MOD里的内容 1.将5个需汉化的文件导入到TL汉化工具中 使用2生成无接口用xml文件。 (不得不说TL工具真的神,和外挂式简直绝配) 2.将这些文件进行汉化。 3.将开头和结尾的格式改为。 4.使用替换功能将中间内容的格式转换。 5.保存,并将文件的格式从xml改为xslt。 6.将其他几个文件同样按照此操作。 7.将5个文件移动到Ancient Civilization CNs\ModuleData中。 8.这样就大功告成了,可以进游戏看看效果了。
四、格式讲解 1.首先,开头和结尾的格式是这样的,不可以更改。 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> 2.中间的内容通用的格式为: <xsl:template match="XXXX[@id='YYYY']/@PPPP"> <xsl:attribute name="PPPP">ZZZZ</xsl:attribute> </xsl:template> 如果你和我一样,使用的是notepad++,那么简单的理解为,红色的部分不要动,蓝色的部分可以动。 XXXX的部分填写的是翻译的项目类别,通常显示在原文件项目id的前面。 如果是非锻造装备,对应的类别是Item, 如果是锻造装备,对应的列别是CraftedItem, 如果是兵种,对应的类别是NPCCharacter, 如果是定居点,对应的类别是Settlement,我只列举了部分,更多的自己注意就行,这部分一定要写对,不然汉化不生效。 YYYY的部分是你打算替换的项目id,你通常无需改动。 PPPP是项目的条目,大部分情况下都是name,少部分情况是text。 ZZZZ的部分就是汉化文本。 3.根据需求不同也有不同的格式,例如: 如果同一个ID下有多个内容需要修改,拿权游的守夜人国家举例: 看图可知,我们需要修改name、short_name、title、ruler_title以及text。 那么我们需要使用的格式就是: 4.格式批量替换 查找目标填入:<string id="([^"]+)" text="([^"]+)" \/> 替换为填入:<xsl:template match="Item[@id='\1']/@name"><xsl:attribute name="name">\2</xsl:attribute></xsl:template> 查找模式改为:正则表达式 如果是其他类别,就自己酌情把Item改为对应的类别。
更多参照示例可以参照权游国度这个MOD,这应该是我第一次在大型MOD中大规模使用外挂式汉化,例子应该蛮全的,也实在是原MOD接口给的太差了。
至此,外挂式汉化的教程就告一段落了。未来我想到更多的可以再行补充,或有其他疑问可以跟帖提问,我看到了会解答并挑选典型的问题加入到教程中。
|