使游戏国际化

简介

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

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

注解

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

配置导入的译文

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

../../_images/localization_dialog.png

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

资源文件的本地化处理

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

../../_images/localization_remaps.png

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

将键转换为文本

一些控件,例如 ButtonLabel,如果它们的文本与一个翻译键值相匹配,将自动获取翻译内容.例如,如果一个标签的文本是 “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:

  1. func _ready():
  2. # This assumes you have a node called "Label" as a child of the node
  3. # that has the script attached.
  4. var label = get_node("Label")
  5. label.set_message_translation(false)
  6. label.notification(NOTIFICATION_TRANSLATION_CHANGED)

For more complex UI nodes such as OptionButtons, you may have to use this instead:

  1. func _ready():
  2. var option_button = get_node("OptionButton")
  3. option_button.set_message_translation(false)
  4. option_button.notification(NOTIFICATION_TRANSLATION_CHANGED)
  5. option_button.get_popup().set_message_translation(false)
  6. option_button.get_popup().notification(NOTIFICATION_TRANSLATION_CHANGED)

在代码中,可以使用 Object.tr() 函数.这将只是在翻译中查找文本,如果找到的话就进行转换:

  1. level.set_text(tr("LEVEL_5_NAME"))
  2. status.set_text(tr("GAME_STATUS_" + str(status_index)))

使控件可调整大小

不同语言的相同文本的长度差异很大. 为此,请务必阅读以下教程 大小和锚定点 ,因为动态调整控件大小可能有所帮助. Container 可能很有用,以及 Label 的文本包选项.

TranslationServer类

Godot有一个处理低级翻译管理的服务器,名为 TranslationServer . 可以在运行时添加或删除翻译; 当前语言也可以在运行时更改.

命令行

从命令行运行Godot时可以测试语言. 例如,要使用法语测试游戏,可以提供以下参数:

  1. godot --language fr

翻译项目名称

导出到不同的操作系统和平台时,项目名称将成为应用程序名称. 要以多种语言指定项目名称,请在 项目设置 中创建一个新设置 application / name ,并将语言环境标识符附加到其中. 例如,对于西班牙语,这将是 application / name_es :

../../_images/localized_name.png

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