Internationalizing games


Sería excelente que el mundo hablara solo un idioma (It would be great if the world spoke only one language). Unfortunately for us developers, that is not the case. While indie or niche games usually do not need localization, games targeting a more massive market often require localization. Godot offers many tools to make this process more straightforward, so this tutorial is more like a collection of tips and tricks.

Localization is usually done by specific studios hired for the job and, despite the huge amount of software and file formats available for this, the most common way to do localization to this day is still with spreadsheets. The process of creating the spreadsheets and importing them is already covered in the 번역 가져오기 tutorial, so this one could be seen more like a follow-up to that one.


예제로써 공식 데모를 이용할 것 입니다.; 애셋라이브러리에서 다운 받을수 있습니다..

번역을 가져와서 구성하기

번역들은 바뀌었을때 업데이트 되고 다시 임포트 될수 있습니다. 하지만 여전히 프로젝트에 추가해야합니다. 이것은 다음 경로에서 완수됩니다 Project → Project Settings → Localization:


위의 대화 상자는 프로젝트 전체적으로 번역을 추가 혹은 제거에 사용합니다.

리소스 현지화

Godot를 현재 언어에 의존하는 애셋의 버전을 오가며 사용할 수 있도록 구성하는 것도 가능합니다. Remaps 탭이 이를 위해 사용됩니다:


Select the resource to be remapped, then add some alternatives for each locale.

key들을 text로 컨버팅하기

Button 그리고 :ref:`Label <class_Label>`과 같은 컨트롤들은 만약 그 안의 text가 번역key와 동일하다면 자동적으로 번역이 적용됩니다. 예로 들어, 만약 label의 text가 "MAIN_SCREEN_GREETING1" 이고 저 key가 현재 번역에 존재한다면, text는 자동적으로 번역이 될것입니다.

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")

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

func _ready():
    var option_button = get_node("OptionButton")

코드에서는 함수가 사용됩니다. 이것은 번역안에 있는 text를 찾고 발견되면 그것을 변환합니다:

status.set_text(tr("GAME_STATUS_" + str(status_index)))

Making controls resizable

The same text in different languages can vary greatly in length. For this, make sure to read the tutorial on Size and anchors, as dynamically adjusting control sizes may help. Container can be useful, as well as the text wrapping options available in Label.


Godot has a server handling low-level translation management called the TranslationServer. Translations can be added or removed during run-time; the current language can also be changed at run-time.

Testing translations

You may want to test a project's translation before releasing it. Godot provides two ways to do this.

First, in the Project Settings, under Input Devices > Locale, there is a Test property. Set this property to the locale code of the language you want to test. Godot will run the project with that locale when the project is run (either from the editor or when exported).


Keep in mind that since this is a project setting, it will show up in version control when it is set to a non-empty value. Therefore, it should be set back to an empty value before committing changes to version control.

Translations can also be tested when running Godot from the command line. For example, to test a game in French, the following argument can be supplied:

godot --language fr

Translating the project name

The project name becomes the app name when exporting to different operating systems and platforms. To specify the project name in more than one language, create a new setting application/name in the Project Settings and append the locale identifier to it. For instance, for Spanish, this would be application/name_es:


If you are unsure about the language code to use, refer to the list of locale codes.