Translation Guidelines

From Thrive Developer Wiki
Revision as of 19:07, 17 October 2021 by Takko (talk | contribs)
Jump to navigation Jump to search

This page has some guidelines for making translations for Thrive.

You can translate Thrive on the dedicated site. More technical instructions for translating are in the main repo.

No machine translations

If you do not speak a language, do not translate it or vote on suggestions. Don't use machine translations (Google Translate etc.) unless you are familiar with the target language and can rewrite the translation to be correct and idiomatic in the target language.


Some text in the game use BBCode markup, these bbcodes are used to format texts (strings) into a more richer form. You can typically identify them with this syntax: [tag]content[/tag] in the strings. The tag ordering must not be changed, changing the tag order from right-to-left will make the bbcode invalid, like so: [/tag]content[tag], this will not work as the bbcode parser always expects an opening tag preceding a closing tag (the one starting with slash) relative to the left-to-right writing system. So make sure to keep the tag order the same in any language.

Normal bbcode tags like bold [b] etc. can have their content translated normally. In addition to the default bbcodes already supported by Godot, Thrive uses custom bbcodes that acts as an extension of the default ones (parsed into the default bbcodes internally) and are mainly used as helpers for Thrive-specific purposes. These custom bbcodes slightly differ from their default counterparts functionally and is marked with thrive namespace in the tag e.g. [thrive:compound]. As such it is important to keep in mind the correct way of handling these custom bbcodes while translating.

List of custom BBcode tags

Note: Thrive BBCode tags use keys (not to be confused with input keys; marked as <key> in the descriptions below) to look up information from the game configuration json and keys must not be translated. The tags (text inside brackets [...]) in general should be left as-is in any translations, the content however may be translated whenever possible.


Compound tag is used to display formatted name of a compound along with its associated icon, can be defined with the default form:

[thrive:compound type="<key>"][/thrive:compound]

Where the value (key) for type attribute is the compound's internal name. Notice that the content is empty, this is intended by default and it will be automatically filled with the default compound name based on the given type according to the current in-game locale. Default compound name here refers to the default translation of a compound, for example "Hydrogen Sulfide" translates to "Rikkivety" in Finnish, this will be the output of the bbcode. If for a specific language grammatical reasons you need to change this to make a sentence more sensible, a special translation can be set by putting it as the content, for example: [thrive:compound type="atp"]ATP:ksi[/thrive:compound], this will override the default compound name to "ATP:ksi" as the output.

Note: Currently a fallback syntax is supported by having the tag as [thrive:compound]<key>[/thrive:compound] but this is obsolete and will be removed in the near future.


Input tag is used to display a key prompt image of the primary input event for an action (like "G" for engulfing), can be defined simply with:


The key to be inserted in the content is the internal name of an action assigned in the input map.

Typical usage form:



Constant tag is used to display values from the source code. It uses a compiled list of keys to retrieve the values.


The keys can also use attributes which can be different for every key.

[thrive:constant format=F5]OXYTOXY_DAMAGE[/thrive:constant]

For a complete list of constants and their attributes take a look at the source code

Reconstructing made-up words

Many words used in Thrive aren't real words. Instead they have been constructed specifically for use in Thrive. These should be attempted to be translated in the same way they are formed for English.

For example the word "Chemoplast" is made up of the parts "chemo" and "plast", which can be separately translated. For example a possible Finnish translation would be "kemo" and "plasti" to form "kemoplasti". This way translations can be done to reconstruct what the word could look like if Thrive was developed in the target language. Some terms can be left as-is if no good reconstruction can be done.

What should also be kept in mind is the pattern that organelles follow in the target language. The reconstructed organelle names should be made to conform to the patterns that real organelle names follow in the target language. This will also apply to words made up for later stages.

Some more examples were mentioned on the forums.

No broken translation

Please don't submit broken translations (other than as suggestions) on the translation site as if those end up in the game (someone doesn't remove it), then the game might be unplayable in the language you are translating. It is always better to let the default English text be used rather than an inadequate translation.

Dismissing checks

Some of the automated checks on the translation website can be false positives. As such they can be dismissed if the translation is correct and styling is good for the target language.

Key name translations

If you look to the right-hand side there is an info panel about each piece of text. If the source location contains "key_mapping/KeyNames.cs" then it means that, that translation is for a key name. Keys should be translated as a commonly accepted name for them in the translated language. If there isn't one used then whatever is usually printed in keyboards in that country should be used, this often seems to match what the English name for the key is.

Due to the way Godot passes us the name, some key names are pretty simple like "HOME", but might conflict with other translations. If such cases are found we'll handle this by differentiating the key and the other word translation.

Merging from Weblate

This is a note for developers: translation commits need to be merged normally otherwise weblate will not be happy and will keep complaining about conflicts.