使游戏国际化

简介

如果全世界只讲一种语言, 那将是很好的(这将是世界上唯一的一种语言). 不幸的是, 对于我们的开发人员来说, 情况并非如此. 虽然独立或利基游戏通常不需要本地化, 但瞄准更大市场的游戏通常需要本地化.Godot提供了许多工具来使这个过程更加简单, 因此本教程更像一个技巧和技巧的集合.

本地化通常是通过雇佣特定的工作室来完成的, 尽管有大量的软件和文件格式可供使用, 但迄今为止进行本地化最常见的方式仍然是使用电子表格. 创建电子表格并导入电子表格的过程已经在 导入翻译 教程中介绍了, 所以这个教程更像是对那个教程的后续.

注解

我们将使用官方演示作为一个示例, 您可以在 Asset Library 下载它们.

配置导入的译文

翻译可以在更改时得到更新和重新导入, 但仍必须添加到项目中. 可通过 Project → Project Settings → Localization 来完成:

../../_images/localization_dialog.png

上述对话框用于添加或删除项目范围内的翻译.

资源文件的本地化处理

根据当前语言, 还可以指示Godot使用资源(资源)的替代版本. 映射 选项卡可用于此:

../../_images/localization_remaps.png

选择需要重映射的资源, 并指定它在其他语言地区的替代方案.

将键转换为文本

一些控件, 例如 ButtonLabel, 如果它们的文本与一个翻译键值相匹配, 将自动获取翻译内容. 例如, 如果一个标签的文本是 "MAIN_SCREEN_GREETING1" 并且该键值存在于当前的翻译中, 那么该文本将被自动翻译.

这种自动翻译行为在某些情况下可能是不可取的。例如,当使用Label来显示玩家的名字时,如果玩家的名字与翻译键相匹配,你很可能不希望它被翻译。要禁用特定节点的自动翻译,请使用 Object.set_message_translation 并发送 Object.notification 来更新翻译:

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)

对于更复杂的UI节点,如OptionButtons,你可能要用这个代替:

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 :

../../_images/localized_name.png

如果您不确定要使用的语言代码, 请参阅 list of locale codes .