Localization Tutorial

Hello, are you translating a theme to another language? Reading this might help you. Here’s a resume about what I’m going to talk about:

  • Where are language files stored

  • Fallback

  • Starting a translation

    • What you should translate
  • Text Context

  • Community Translations for SoundWaves (5.3 main theme)

Where are language files stored.

Inside every theme there’ll be a Languages folder, inside that folder is where language files are stored. Example:

Here we can see 2 language files, en for English and ja for Japanese. It’s a standard to name language files in that format, language-COUNTRY.ini, in my case I had to to a portuguese translation, but since there’s also portuguese from portugal I had to name the file pt-BR (BR = Brazil)


You probably already noticed a fallback theme in the themes folder, but if not, a fallback theme is where things that are necessary for every theme gets stored, so when someone is making a theme the game doesn’t blow up. The same goes for Languages, it’s important to also translate the fallback to your language because the theme you’re translating might not have every strings that it uses on it’s theme languages folder.

Starting a translation

So to start our work, create a new file what name is your language(-COUNTRY if needed) and don’t forget to use the .ini extension. You can do this on notepad with no problem but I would recommended using an actual editor like Notepad++.

Now open en.ini and your new language file and copy all the content from en.ini to your language file, you can close en.ini now.

What you should translate

I’ll take base from soundwaves theme so it’s more clear what I’m talking about.

You can see on this image and on your file that every line has a Title=Value, and that’s how translation works on stepmania, you need to translate the value of the titles and you’re done. The theme does all the work of what string it should use.

Now, you can’t just translate literally everything that you see, on the ModelLoadError for example there’s a “%s” that means the theme or the game will put a string replacing that %s.

An example of that can be seen on the string %d Song Played that you’ll see on the next image.

You’ll also see lines like &START;, &SELECT;…etc
They’re buttons that will be replaced once the game draws that string. Let’s see one of those strings in action?

Here we can see that &START; gets replaced by a green square that represents the start button, and %d gets replace by a number that’s how many songs that profile played.

Another special string is \n, it means new line, for example:

First Line\nSecondLine would result in:

First Line
Second Line

Here’s a example in action from fallback/en.ini

On that line you can see that we can use more than one new line at the same time, if you want to find that string, it’s on fallback/en.ini on line 1518

Text Context

You might also translate the theme in the view from someone that has never played the game and someone that played the game for ages, someone that just starts playing the game might not understand what are “holds” when translated to your language, but if it was named “holds” the user would know that it’s the literal name of the thing and not something that should make sense in your language.

Another hard example are steps, in stepmania, there are 2 kinds of steps, the ones that you press in gameplay and the steps of the chart made by the author(easy steps, hard steps…) in english it’s easy to only say steps and it makes sense for both, but that isn’t the case with every language. That’s why I decided to keep it named “steps” for the pt-BR translation of soundwaves.

I hope that this helps you to translate your favorite theme to your language so more people can come and play the game or with the theme. Thank you for reading and I wish you a nice day.

Community Translations for SoundWaves (5.3 main theme)

People are already helping with translations for the new SoundWaves theme for 5.3, and one of those requested for the mention of those projects so more people can see and maybe help.

Polish - Done by MoNeko
Japanese - Done by はぬべき(hanubeki)
Portuguese-Brazilian - Done by zerinho6, SHRMP0 and SheepyChris

1 Like