马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 BuErShen 于 2019-4-25 19:39 编辑
Ren'Py引擎从入门到放弃(10)——8国语言同步开发
世上无难事,只要肯放弃。
这是入门介绍的第十篇,主要内容是 Translation——多语言支持。
在Ren'Py中,总共有2个部分涉及多语言支持:对话内容和 Ren'Py开发环境。前者主要是个体力活,后者多是一些配置项。
第一个问题:8国语言是什么梗?
答:emmmmm……怎么回答呢……算了,不作死。
第二个问题:多语言支持(traslation)是个什么概念?
答:一般某个应用程序需要支持多种语言,设计时会将不同语言的文本内容写入不同的配置文件中,根据用户选择的设置项(或者读取系统语言设置)加载对应语言的文件。比如说,开头主菜单包含4个选项:Start、Continue、Option和 Quit。就可能新建一个文本文件“main_menu_page_english.config”,写入如下内容:
[RenPy] 纯文本查看 复制代码 main_menu_line1 = "Start"
main_menu_line2 = "Continue"
main_menu_line3 = "Option"
main_menu_line4 = "Quit"
另外再新建一个文本文件“main_menu_page_chinese.config”,写入如下内容:
[RenPy] 纯文本查看 复制代码 main_menu_line1 = "开始"
main_menu_line2 = "继续"
main_menu_line3 = "选项"
main_menu_line4 = "退出"
如果用户选择“英文”就读取和显示英文版配置,如果用户选择“中文”就读取和现实中文版的配置。
在文本不多的游戏中,这种设计即可满足需求。但在RPG和AVG等以文字推动剧情发展的游戏中,这样设计可能会导致不同语言版本之间的文本维护和匹配工作异常复杂。某个语言中增加或者删除一句词,其他语言版本都要对齐和修改……
Ren'Py的解决方案是,内置了一套多语言支持系统。只需要在启动器页面点击“生成翻译文件”就能进行设置。
进入下一级菜单界面,输入语言名称,然后选择“生成翻译文件”,就可以在 game/tl/{输入的语言名称} 目录下看到对应的文件。
自动生成的 rpy文件有4个,分别是 common、options、screens和 script,分别对应原工程中的4个脚本。其中 common和 screens是通用文件,可以从其他工程(比如the question)中复制一份过来,或者干脆删除。option一般写工程版本号信息及对应语言使用的独立字体和样式(建议不同语言都设置不同字体)。script则是默认生成的游戏脚本名,也就是实现多语言支持的重头。当然,可能原工程的 rpy脚本文件名并非自动生成的4个,而是创作者自己新增的脚本名。只要 Ren'Py检查到可能需要切换为其他语言的地方,就会在 tl 目录下生成同名脚本文件。生成的脚本文件会以“被注释的原文+空行”形式自动生成,我们在空行里直接添加对应语言的文本即可。
有两个要点需要注意:
- Ren'Py自动生成选项的翻译文件时,遵循“整行匹配和保证唯一”原因。也就是说,如果同一文本的选项在脚本中多个地方都出现,自动生成的翻译文件脚本中仅只会有一条。这是很让人头大的问题……同一句话在不同的语境下往往具有不同的含义,如果生成其他语言版本时不能分开处理将会引起歧义。例如,日语中 “すみません” 在大多数场景下可以翻译成 “对不起”,在某些场景下需要翻译成“谢谢”。若 Ren'Py中整行匹配 “すみません” 只能有一条翻译,就非常不合适。再例如,中文万能语气词 “卧槽” 在不同场景下的意思就……目前Ren'Py自身没有改善该问题的计划。解决方案只有……处理选项菜单的时候尽量使用标点符号等进行区分。
- 翻译文件的更新也是通过“生成翻译文件”选项实现。如果在原语言的 script脚本结尾添加对应的内容。由于是添加到脚本结尾,所以翻译文件中的文本顺序并不与原语言的脚本保持一致。另外,原语言脚本中删除内容,重新“生成翻译文件”是不会同步删除其他语言脚本内容的。
图片也可以实现多语言支持。特别是某些带文字的图片,可以在tl对应语言的目录下放一个同名图片文件,Ren'Py将自动根据语言设置选择对应的图片。
第三个问题:我把脚本的翻译文件都写好了,但是游戏中没有修改语言的地方?
答:修改语言的入口需要自己定义。可以参考“The Question”的screens.rpy脚本。screen preferences() 处 language_picker部分提供了radio组件,并提供了多种语言选项。如果简单实现可以直接复用整个screen preferences的脚本。如果需要自定义则可以在任何能响应事件(event)的组件上应用Language()函数切换语言。
第四个问题:Ren'Py自身的多语言支持还有哪些?
答:script.rpym是脚本模板文件,每次新建工程生成的 script.rpy都是 script.rpym的副本。所以可以根据自己的需要修改。比如我会在 script.rpym中添加一句:
[RenPy] 纯文本查看 复制代码 label main_menu:
return
可以直接跳过默认主菜单进入start 标签。
另外,启动器(launcher)的style.rpy文件定义了字体,看腻了默认字体也可以替换为自己喜欢的……(其实没啥卵用)
本篇总结:翻译是个体力活……
预告部分:下一篇可能是个支线……
“Ren'Py引擎从入门到放弃”系列教程
|