使游戏国际化
简介
如果全世界只讲一种语言,那将是很好的(这将是世界上唯一的一种语言).不幸的是,对于我们的开发人员来说,情况并非如此.虽然独立或利基游戏通常不需要本地化,但瞄准更大市场的游戏通常需要本地化.Godot提供了许多工具来使这个过程更加简单,因此本教程更像一个技巧和技巧的集合.
本地化通常是通过雇佣特定的工作室来完成的, 尽管有大量的软件和文件格式可供使用, 但迄今为止进行本地化最常见的方式仍然是使用电子表格.创建电子表格并导入电子表格的过程已经在 导入翻译 教程中介绍了,所以这个教程更像是对那个教程的后续.
注解
我们将使用官方演示作为一个示例, 您可以在 Asset Library 下载它们.
配置导入的译文
翻译可以在更改时得到更新和重新导入, 但仍必须添加到项目中.可通过 Project → Project Settings → Localization 来完成:
上述对话框用于添加或删除项目范围内的翻译.
资源文件的本地化处理
根据当前语言,还可以指示Godot使用资源(资源)的替代版本. 映射 选项卡可用于此:
选择需要重映射的资源,并指定它在其他语言地区的替代方案.
将键转换为文本
一些控件,例如 Button 和 Label,如果它们的文本与一个翻译键值相匹配,将自动获取翻译内容.例如,如果一个标签的文本是 “MAIN_SCREEN_GREETING1” 并且该键值存在于当前的翻译中,那么该文本将被自动翻译.
This automatic translation behavior may be undesirable in certain cases. For instance, when using a Label to display a player’s name, you most likely don’t want the player’s name to be translated if it matches a translation key. To disable automatic translation on a specific node, use Object.set_message_translation and send a Object.notification to update the translation:
func _ready():
# This assumes you have a node called "Label" as a child of the node
# that has the script attached.
var label = get_node("Label")
label.set_message_translation(false)
label.notification(NOTIFICATION_TRANSLATION_CHANGED)
For more complex UI nodes such as OptionButtons, you may have to use this instead:
func _ready():
var option_button = get_node("OptionButton")
option_button.set_message_translation(false)
option_button.notification(NOTIFICATION_TRANSLATION_CHANGED)
option_button.get_popup().set_message_translation(false)
option_button.get_popup().notification(NOTIFICATION_TRANSLATION_CHANGED)
在代码中,可以使用 Object.tr() 函数.这将只是在翻译中查找文本,如果找到的话就进行转换:
level.set_text(tr("LEVEL_5_NAME"))
status.set_text(tr("GAME_STATUS_" + str(status_index)))
使控件可调整大小
不同语言的相同文本的长度差异很大. 为此,请务必阅读以下教程 大小和锚定点 ,因为动态调整控件大小可能有所帮助. Container 可能很有用,以及 Label 的文本包选项.
TranslationServer类
Godot有一个处理低级翻译管理的服务器,名为 TranslationServer . 可以在运行时添加或删除翻译; 当前语言也可以在运行时更改.
命令行
从命令行运行Godot时可以测试语言. 例如,要使用法语测试游戏,可以提供以下参数:
godot --language fr
翻译项目名称
导出到不同的操作系统和平台时,项目名称将成为应用程序名称. 要以多种语言指定项目名称,请在 项目设置 中创建一个新设置 application / name
,并将语言环境标识符附加到其中. 例如,对于西班牙语,这将是 application / name_es
:
如果您不确定要使用的语言代码,请参阅 list of locale codes .