SEP 04, 2024
Gamedev, Game design
<aside> 📒 Localizing is hard. Here are some potential pitfalls.
</aside>
Using explicit names for variables cut down on explaining. Examples are welcomed
Obfuscated: {0}{1} of {2}
Explicit: {Quality}{WeaponType} of {Element} -> Large Sword of Fire
Word order
[Eng]
"{Modifier}{WeaponType} of {Element}": "Large Sword of Fire"
[Spanish]
"{WeaponType}{Modifier} de {Element}": "Espada Grande de Fuego"
Gender-, plurality-, and grammatical cases-aware conditionals help the localization team
Gender
{GenderSwitch:
{Male:He is a swordsman.}
{Female:She is a swordstress.}
{Nonbinary:They are a sword master.}
}
Pulling correct forms of the word depending on passed argument
[Eng]
"{CharName} received {RewardType:nom}": "Bartholomew received a Spear"
"{CharName} hit you with a {Weapon:nom}": "Goblin struck you with a Spear"
[Ukr]
"{CharName} отримав {RewardType:acc}": "Остап отримав Списа"
"{CharName} вдарив вас {RewardType:inst}": "Гоблін вдарив вас Списом"
Plurality: English has two forms of plurality, some languages have more
[Eng]
"You see {num} {weapon(num)}": "You see 1 sword"
"You see 2 swords"
"You see 5 swords"
[Ukr]
"Ви бачите {num} {weapon(num)}": "Ви бачите 1 меч"
"Ви бачите 2 мечі"
"Ви бачите 5 мечів"
For right-to-left languages you can flip the text canvas – but if you use names in Latin, they need not be flipped
Localize units, dates, time
Account for lengthier lines (in english, always add 30% extra stuff)
Fonts: UTF, covers all the diacritics and umlauts
Avoid backing text into visuals (graffiti, name plaques)
Blog post with a bunch of links: https://medium.com/indie-localizers-meet-web-app-bot-game-developers/game-dev-loc-starter-4fa54e8be054
Translation expandability: leave translation files in plain text, so if anyone wants to do the translation, they just copy and edit new file. Of course, the system needs to pull up automatically the new localization files (and parse for errors)
Have Glossary, character dossiers, UI screenshots, cutscenes videos
Validation is great: it's like unit testing for your localization.
Separation of logic and content. In this example, nothing needs to be translated even though it occupies the text fields (because it pulls descriptions from those IDs). Translators do not need to work with such structures and make (although, it might be useful as a reference)