How to translate your game into multiple languages ?

This feature will be available in the next version of GDevelop (not available in the current GDevelop version, 4.0.94). It may become available soon in the nightlies.
Only available for native games!

The process of translating a game into multiple languages is composed of 4 steps:

  1. Adapt the game's strings to allow translations
  2. Export a translation file template (.pot) with GDevelop
  3. Create a translation file (.po) for each language you want to support or update the translation files from the translation file template (.pot)
  4. For each translation, generate the binary translation file (.mo) that the game will use
The last two steps are made using external tools and thus don't need to the translator to have the GDevelop project (just need to have the translation file template (.pot) generated by GDevelop and the external tools).

Step 1: adapt the game to allow translations

GDevelop provides a string expression to allow strings to be translated. This returns the current string's translation in the current loaded translation file (.po). To use it, just surround your string with _(). For example:

_("This sentence can be translated!")
The _() string expression only accepts simple quoted string as argument, not string expressions!

For the text objects, you will need to use the action to change the text of them to update their texts according to the loaded translation file (.po) at the beginning of the scene.

Now that strings are translatable, you can load a binary translation file (.mo) using the “Load translations” action in the “Translations” category. Make sure that the _() expressions are called after a translation is loaded to update the strings in the game.

If no translations are loaded, _() just returns the string it got as argument. So, use it as a default language of your game (for example, english).

Step 2: export the translation file template (.pot)

Now that the translatable strings are marked or have been updated, we can generate a translation file template (.pot). This file contains all the translatable strings and can be used by number of softwares supporting the gettext format. A .pot file only contains the strings to be translated, not the translations (they will be in the .po files, one per language).

To do so, check that the project is really the current project (its name should be in bold in the projects manager) and click on the “Generate .pot template file” button in the “Projects” tab of the main ribbon. Then, set its destination path and validate the window. The .pot file has now been generated.

You can repeat this step each time you want (as your translatable strings have been updated or some new have been added). The .pot file will be overriden but don't worry, it doesn't contain the translations itself.

Step 3: create or update a translation file (.po) from the template file (.pot)

Before continuing, you will have to install the external tool required to edit the translations. The tool we will use is called PoEdit and is available on all OSes. Here is the tool's website: https://poedit.net/. This is a open source tool. However a premium version is available but it's totally useless to buy it for what we are doing. On Linux, you may prefer to install PoEdit from the packages repositories.

This section can be repeated each time you updated the .pot file.

Now that the updated or newly .pot file is created, it will act as a template, a model for the future translations files.

There are now 2 possibilities. Either you want to create a completely new translation file (.po) from the .pot file or you want to update an existing translation file (.po) without losing the previously made translations. These two possibilities are described in the two next sub-sections.

Creating a new translations file (.po)

Double-click on the translation file template (.pot) to open it with PoEdit. The software will start and display all the translatable strings. However, it will ask to create a translation file (.po) as template “is only a template”:

So, click on “Create new translation”. A window will appear to ask for the language, select the language you want to translate the strings into. If you select a real language from the list, PoEdit will automatically name the file with corresponding ISO code so as you only have to click on “save” to save the translation file (.po).

Now, a new column appeared in the translatable strings list, it is named “Translation - THETRANSLATIONLANGUAGE”.

You can now use the list to select a string to translate and type the translation in the textbox at the bottom (the one with “Translation:” written on top).

Don't forget to save the file as you progress into the translation.

Even incomplete translations can be used. For example, you can have a translation where some strings are not translated. GDevelop will use the original one for those.

Updating a translation file (.po)

If you added new strings or changed some in your project and exported the translation file template (.pot). You can update a translation file (.po) so that it keeps the unchanged strings, deletes the unused ones and adds the new entries.

First, open the translation file (.po) you want to update. Then, click on “Update from POT file…” menu item in the “Catalogue” menu. Finally, select the updated translation file template (.pot) file and validate the window.

The translation file is now ready to receive new translations.

Step 4: generate the binary translation files (.mo)

GDevelop uses the binary translation files to read the translations. These are independent for each language and are automatically generated by PoEdit when you save a translation file (.po) with the same filename as the .po file.

The binary translation file is the file that you want to provide in your game and the one that you should load in the game to acquire the translations.


Your game is now translatable in any languages you want. You can send the .pot files to external translators and they will be able to create the translations for your game. Translations (the .mo files) can be embedded into the game file by adding them as picture in the image bank or can be provided alongside the game executable.