-
Notifications
You must be signed in to change notification settings - Fork 78
I18n
woctordho edited this page Oct 30, 2022
·
14 revisions
- 演出脚本、图片等文件的翻译版放在
Resources/LocalizedResources/<语言名>/ + 原版相对于Resources/的路径
。比如原版是Resources/Scenarios/ch1.txt
,英文版就是Resources/LocalizedResources/English/Scenarios/ch1.txt
-
Resources/LocalizedResourcePaths.txt
记录所有其他语言的资源文件,由Tools/Resources/generate_localized_paths.py
生成
-
- 不在
LocalizedResources
文件夹里的资源文件视为默认语言的版本。AssetLoader
首先查找当前语言的翻译版,如果找不到就使用默认语言的版本- 绝大多数时候(演出代码、
AssetLoader
的cache等)用到的文件名都是不带语言的文件名
- 绝大多数时候(演出代码、
- 语言名用
UnityEngine.SystemLanguage
表示,目前不考虑ISO 639定义的更多语言 - UI文本的翻译版为
Resources/LocalizedStrings/<语言名>.json
- UI图片的翻译版放在原版的旁边,文件名加一个后缀。UI图片不是由
AssetLoader
加载的,而是在Unity Editor里设置引用
- 不同语言中对话的条数相同(否则存档太难搞了)
- 一条对话的行数和字数可以随意改变,我们目前的UI已经可以比较好地处理很大范围内的行数和字数
- 不同语言中的演出代码相同
- 可以把当前语言传入演出代码,然后做一些判断
- 章节标题的内部名称和显示名称要分开,
FlowChartNode
只记录内部名称,I18nHelper.NodeNames
记录每种语言的显示名称 - 翻译版的脚本的文件格式与原版脚本类似,但是没有lazy execution block。Eager execution block用来给标题和选项增加这种语言的显示名称,不需要
jump_to
之类的命令 - 开始点和结局目前只有内部名称,没有显示名称,所以不用考虑翻译
- 每条对话中,角色名字与台词用两个中文冒号或两个英文冒号分隔
- 这是NovaScript语法的一部分,跟
<| ... |>
一样 - 一个中文冒号 + 一个英文冒号就不要支持了,太丑了(
- 台词两边的引号不是语法的一部分,游戏制作者也可以选择直角引号等其他排版
- 这是NovaScript语法的一部分,跟
- 游戏启动时parse所有语言的脚本
- 每个
DialogueEntry
记录角色名字和台词的每种语言版本,LogEntryController
可以直接用DialogueEntry
里的信息 - 切换语言时,
DialogueEntryController
和LogEntryController
会刷新 - Lazy execution block的前后可以插入hook,hook可以传入角色名字。(比如当角色名字是“黑匣子”时,就让黑匣子闪一下。)这时使用的角色名字是默认语言的版本,在parse默认语言的脚本时处理
- 只有hook需要把角色名字当变量处理。Lazy execution block本身不需要把角色名字当变量处理,因为下面的对话已经确定了角色名字
-
FontSizeController
支持根据语言把字体大小乘一个系数。TextSpeedConfigReader
就不管了,让玩家自己调吧 -
I18nFont
支持根据语言改变字体(比如把Noto Sans SC变成Noto Sans TC)
- 演出代码用到的文件名与语言无关
- 切换语言时,
SpriteController
会刷新(GameCharacterController
先不管了) - TODO:图像鉴赏界面要根据语言显示图片和缩略图
- UI文本要加上
I18nText
,记录翻译时使用的key。切换语言时,I18nText
会刷新 -
I18nText
支持根据语言把字体大小乘一个系数 - UI图片要加上
I18nImage
,记录图片的所有语言版本的引用,对按钮也适用。切换语言时,I18nImage
会刷新
-
ImageEntry
和MusicEntry
记录每种语言的显示名称
- 第一次启动游戏,或者重置默认设置之后,根据玩家的操作系统选择语言
- 这时,
I18n.FallbackLocale
把Chinese
和ChineseTraditional
fallback到ChineseSimplified
,其他语言fallback到English
- 如果你支持更多语言,需要修改这个函数
- 这时,
- 玩家在游戏中可以随时切换语言
-
AssetLoader
的cache记录的是不带语言的文件名。切换语言时,cache里的asset如果需要就会重新加载
- 先不管从右到左的UI
- 日期/时间格式在存档里会用到,目前先不管不同语言的日期/时间格式
- 存档的description不用动,以存档时的语言为准