Learning how to translate themes - Tiny-Foxes/OutFox-Translations GitHub Wiki
Hello! Are you translating a theme to another language? Reading this might help you. Here's a summary about what I'm going to talk about:
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 did a Portuguese translation, but since there's also Portuguese from Portugal I had to name the file pt-BR (BR = Brazil).
Fallback
You probably already noticed a _fallback
theme in the themes folder, but if not: it's 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 for your language because the theme you're translating might not have every string that it uses on it's own folder.
Starting a translation
To start our work, create a new file for 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, then copy all the content from en.ini to your language file. You can close en.ini now.
What you should translate
I'll use the SoundWaves theme as a base 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 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 creates a line break. For example, First Line\nSecondLine
would result in:
First Line
Second Line
Here's a example in action from _fallback/en.ini
:
Text Context
You might also want to translate the theme in a way that someone who has never played before will understand it, instead of expecting everyone to already know what everything is. A new player might not understand what "holds" mean if that word is translated to your language, but if it was kept as "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 because 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 with it. Thank you for reading and have a nice day.
Community Translations for SoundWaves (OutFox default until Alpha V)
Many folks are already helping translate the new SoundWaves theme for various languages. As requested by one of our translators, we'll mention those projects below in order to give them some visibility and encourage more people to join and help.
° Japanese - Done by はぬべき(hanubeki)
° Portuguese-Brazilian - Done by zerinho6, SHRMP0 and SheepyChris
° German - Done by DanielRotwind
° French - Done by Ksempac and Kaede573
° Español - Done by JoseVarelaP