作者NDark (溺於黑暗)
看板GameDesign
标题[程式] 小林丸指挥官的多国语言管理
时间Sun Dec 1 17:22:43 2013
小林丸指挥官的多国语言管理
参考连结
http://wp.me/pBAPd-od
说明
# 为了支援多国语言,游戏中的各种显示必须使用文字系统,而并非图片,若要使用图
片来切换语系,必须在不同语系的切换时进行图片的切换,也就是必须将各语系的图
片包为资源,动态切换。或是在发布专案之时就将语系图片覆盖。
# 但图片的资源量一定高於文字。所以本专案大量使用文字做为显示,
而不是使用图片。
# 其缺点在於文字的字型并不好看。且在各平台上无法准确控制。
# 多国语言的建构分为几个部分
## 语言项,决定支援有哪几个语言。
## 文字管理器,负责读入该语言的文字档案,转为文字表格储存
## 初始化,在系统初始时依照目前的语系,呼叫文字管理器设定一次文字表格。
## 设定,游戏进行途中进行切换,此时除了要更新文字表格之外,还必须立即更换
目前使用中的显示文字。
# 由上所述,各显示文字项目所储存就不是文字,而是一个指向文字的指标,本游
戏使用整数。
# 使用这样架构的优点在於所有的文字都由一个文字档所控制,每行算是一个文字内容
,当需要多一个语系之时,就只需要将档案交给翻译人员全部翻译完成即可。对系统
只需小部分更动。
语言项
# 在小林丸指挥官中共有英语及繁体中文两项。
# 请参考脚本 Language.cs 。脚本中仅使用一个enum,看似简单。但此enum就决定了
语系的摆放路径命名。
# 命名习惯目前总共看过两种,一种是大写简写,使用这种的好处是路径长度较短。
## ENG 英语
## CHS 简体中文
## CHT 繁体中文
## JPN 日语
# 另一种是使用全文,阅读上比较清楚。
## English 英语
## SimplifiedChinese 简体中文
## TraditionalChinese 繁体中文
## Japanese 日语
# 储存目前的语言项目,系统中必须将目前的语言项目储存在,请见初始化相关说明。
## 系统中
## 装置中
文字管理器
# 读入目前使用语言的文字档案,转为文字表格储存。
# 文字表格以Dictionary容器所储存。
# 由游戏各处向文字管理器要求文字时,会传入一个索引,由文字管理器依照索引回传
一个字串。
# 本作中读入文字档案的路径为 Resources/[Language]/Data/Strs.txt 。其中
Resources为Unity指定路径不需要传入。
## 若是英文语系其文字档存放路径是 Resources/English/Data/Strs.txt
## 若是繁体中文其文字档存放路径是 Resources/TraditionalChinese/Data/Strs.txt
# 文字档案内容大致如下
## 英文
|1001|Kobayashi Maru Commander|
|1002|Press To Enter|
|1003|Kobayashi Maru Commander is a fan-based none-profit prototype|
|1004|game project. I developped it from Sep. 2012 to Feb. 2013.|
|1005|Enjoy and feel free to comment, and report bugs.|
## 繁体中文
|1001|小林丸指挥官|
|1002|按钮後进入|
|1003|小林丸指挥官是一个无营利的同人原型游戏。|
|1004|开发自2012九月至2013二月。|
|1005|欢迎回报任何臭虫及意见。|
# 文字档案中各行包含其索引及内含的文字。
初始化
# 在游戏开始之时进行初始化,请参照InitializeStrsManager.cs
# 该模组依序进行
## 自装置中取出先前储存的语系,如English/TraditionalChinese。将其设定存放
到文字管理器中。如果先前没有储存过此资料,则使用预设值。
## 呼叫文字管理器做出第一次的文字档案读取,让系统显示正常。
显示文字项目
# 各需要显示多国语言的文字项目(本作是使用GUIText),都会挂上脚本
GUI_RetrieveTextAtEnable ,如果是段落文字则挂上
GUI_RetrieveTextParagraphAtEnable。
# 在脚本中会指定该文字项目要显示文字的索引。
# 在该脚本初始化时,就会依照索引向文字管理器取得指定文字。
# 在该脚本初始化时,还会向文字管理器注册自己,其用途请见後述设定章节。
设定
# 游戏进行时,由使用者主动设定切换语系(本作中是在标题画面)。请参照
ClickOn_SetLanguage.cs。
# 在该脚本中会呼叫文字管理器重新依照设定的语系读取一次文字档案。
更新文字表格。
# 然而,文字表格更新後并不会改变已经存在(建立完毕)的显示文字项目。
# 因此才需要各文字项目在初始化取得所需文字之时,
向文字管理器进行一个注册的动作。
# 文字管理器重新设定文字表格完毕後,就会向注册的显示文字项目,一一发送重新取
得(新语系)文字的命令,方完成当玩家切换语系时,画面会立即更新的动作。在设
计模式中,这样的架构称之为观察者模式。
--
"May the Balance be with U"(愿平衡与你同在)
视窗介面游戏设计教学,讨论,分享。欢迎来信。
视窗程式设计(Windows CLR Form)游戏架构设计(Game Application Framework)
游戏工具设计(Game App. Tool Design )
电脑图学架构及研究(Computer Graphics)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.68.13.177
※ 编辑: NDark 来自: 219.68.13.177 (12/01 17:23)
※ 编辑: NDark 来自: 219.68.13.177 (12/01 17:23)
1F:推 Bencrie:也许可以参考 GNU gettext XD 12/01 18:32
※ 编辑: NDark 来自: 219.68.13.177 (12/01 19:27)
※ 编辑: NDark 来自: 219.68.13.177 (12/01 19:27)
2F:推 AmosYang:看起来这作品是用C#写的,我有一个问题: 12/02 00:59
3F:→ AmosYang:能否指点一下这种作法之於.NET内建的resource管理机制的 12/02 00:59
4F:→ AmosYang:优点? 12/02 01:00
5F:推 AmosYang:我能想到的一个优点为: 此设计允许在 runtime 重载资料 12/02 01:07
6F:→ AmosYang:而 resx 是在 compile time 就写死的; 就看这个弹性值不 12/02 01:08
7F:→ AmosYang:得这些自创的机制的开发、维护费用 12/02 01:09
8F:→ NDark:其实这与语言无关.这架构好处是简单.在任何平台建立都容易. 12/02 09:05