How to translate DRE
Here are some points on how to translate DRE strings and keep a structure when building sentences 👇
In-app
This is the easiest way to edit single translations as you go is in the in-app editor.
It includes automatic translations from Google and DeepL to get you started and inspired.
DRE Localizations Google Sheet
To batch-edit translations, you can edit and comment the DRE Localization Google Sheet
Understand DRE grammar
Whether you use the in-app editor or batch-edit in the Google Sheet, you can learn more about the sentence structure and dynamic content below
Square Brackets
“he wore[ her;] [shoes;boots;hat]”
Square brackets [] contain optional/random content delimited by semicolons ;.
In the example above, “[ her;]” will either be ” her” or omitted (empty) at random.
“[shoes;boots;hat]” resolves to a random result between “shoes”, “boots” or “hat”.
To avoid duplicate adjacent spaces: Whenever a bracket is optional (ends with a ;) it’s advised to include a space before the content and remove any space before the bracket like shown in “he wore[ her;]” instead of “here wore [her;]”
Tags
“You need {INT:Laps} more”
Curly brackets {} define dynamic tags being resolved at runtime. Do not alter these and try to fit them in where grammatically correct.
“[Time’s up;Alarm triggered][ {{PlayerIdentifier}};]. It’s {0:HH mm}”
Double curly braces like {{PlayerIdentifier}} should be kept that way in case there are other single-curly braced tags like {0:HH mm}.
A parser takes care of resolved the single-curled {0….} style tags first and removes the double-curlys in that same go
“{DD:TireCompoundChanges:PLU:time}”
“{DD:TireCompoundChanges:PLU:gang:gange}”
Any curly bracketed tag that includes PLU means a word is pluralized based on a number, in this case the TireCompoundChanges. The tag may include just one word to be appended after the number like “time” having appended a “s” turning into “times” when != 1, or like in this instance for the Danish translation of “time” = “gang”, where it’s pluralized form is “gange”
“(Live:lɪv) to fight another day”
Parentheses define phonetic altered words with the structure (visual text:spoken text)
Use this when a localized spoken word is not the right one and you want to adapt it
“<{LEADER:Name}>”
Angle brackets <> are shown as “& lt ;” and “& gt ;” (without spaces) in text data – do not alter these
“{IFMC: in the class}”
IFMC denotes “if multiclass” and means when in a multiclass session, this tag will be included in the string. Therefore the tag content (“in the class”) should be translated, eg. to Italian: “{IFMC: della classe}”
Issue with tags and cloud translators
Pay extra attention to the number of brackets in the English variant and the suggestion by DeepL and Google. These two tend to add extra {{ which aren’t present in the original English string. You should remove any added brackets, so it matches what’s in the original English string.
Restructuring and Rewording
Feel free to move words, tags, etc. around in the sentences to match a natural speech in your language. Just make sure to keep the tags intact in their structure. This is one example of how it can be done:
- {DD:PD} last driver swap happened on lap {DD:LapLastSwap}, {DDH:LapsSinceLastSwap} -> {DD:PD} Der letzte Fahrerwechsel fand in Runde {DD:LapLastSwap}, {DDH:LapsSinceLastSwap} start
- {DD:SPBe} driving a {DD:CarScreenName} -> {DD:SPBe} fährt mit dem {DD:CarScreenName} (avoids the “a” which differs based on the CarScreenName)
Terminology
Use the Glossary in Google Sheet to learn more about the tags, modifiers, operators and conditionals.

Context
If you need to know the context of a translation string, just demand it through the translation comment, or ask on DRE Discord:

{LOC:…}
If you see something like this:
[[{LOC:YouHaveVariations}] ;;;;;;]
LOC: indicates a reference to another LOCalized string with the key of YouHaveVariations. You can search for this source in the translation editor to reveal what’s inside it.
The ;;;;;; simply add empty variations for DRE to choose between. In other words: The more semicolons present, the smaller chance it has at picking the content of YouHaveVariations.
The resolved string in this example would be:
[[You have;We have;You’ve;We’ve;We’ve got;We got;There’s] ;;;;;;]
