An overview of the full translation process.
For existing content you only wish to translate, TLC, or edit, skip to Translating.
For details on how github and git work, there are good guides and docs to be found through any search engine. Please refer to those. They're too complex to explain here or for me to help out with.
I also suggest you look over all of the process before starting.
- If you haven't read the main readme, please check and follow that first.
- Open a shell in the project root (the 'base'
umamusu-translate
folder)- tip: type cmd in explorer's address bar on windows when in said folder
- Install additional dependencies:
py -m pip install -r src\devreq.txt
- (info) Check id-structure.md for help choosing your targets.
- All scripts take the following target arguments:
-g <group> -id <id> (-idx <idx>)
- To know other options use
-h
- All scripts take the following target arguments:
- (optional) Recommended for easy updates: Git and optionally one of its GUI clients.
- Run
py src/extract.py -g <group> etc…
with your targets. - Files will be created in the translations folder
Run py src/names.py <targets>
to translate many enName
fields automatically. (see text processing) You can also do this from the editor per file.
Run py src/story_editor.py <targets>
to start the GUI story editor. The textbox is sized close to the game's useful text display area (adjusting per file), so you can use it for reference.
If you find an issue with the box size on multiple/types of files, let me know. If it's only 1 file, you can edit the file as such:
...,
"lineLength": <number of '0' characters which fill a line>,
Text duration is automatically adjusted and doesn't usually need to be changed, but you can edit the base value if desired.
Some files with complex choices can have multiple paths and groups of text, make sure to check the block list.
Unity Rich Text is supported but don't use it for global markup like making all the text smaller, but sparingly where needed.
If you do need to apply size to an entire file, add it like so and use the -fsize
flag when text processing:
...,
"textSize": <number>,
You can also open the files in a text editor or edit existing ones on github and write the translations in the provided enText
or enName
fields.
If you don't want to care about line breaks, see below for a script which automatically line breaks text to fit a given length.
"jpText": "日本語",
"enText": "<tl goes here>",
Don't change anything else. It's there so text can be put back in the right place.
If you want to add line breaks yourself, leave a space before the \n
so it won't concatenate words together in the log view, which breaks differently and automatically.
Without the -nl
flag, text processing will not touch line breaks present as long as all lines fit the length constraints.
You can also add a skip
key to any block to have the text processing completely ignore it, for the very occasional special case:
"enText": "tl goes here",
"skip": true,
UmaTL no longer accepts pure MTL submissions!
You can use this for yourself or to edit/TLC, although it is much preferred for contributions to be translated properly.
- Install the deepl-translator.user.js script in your browser
- This requires a userscript manager with menu support, like Violentmonkey
- Run
py src\machinetl.py
with any options you want (refer to main readme)- This script automatically uses
textprocess.py
and accepts most of the same arguments.
- This script automatically uses
- Navigate your browser to deepl's site
- Open the userscript menu and click
Connect WebSocket
- If all is well translation will automatically start and the python script will exit when done
- This will take some time. Press ctrl+c in your terminal to force quit. Progress will be saved per file.
Check the Sugoi readme.
Remember to provide targets (likely those you used for extract) or you will process all the files!
py src\textprocess.py
to apply automatic formatting and edits.- This is run by the translation script (if you used that), but you can rerun it with custom settings if you like.
- This uses the replacer.json file. You can add your own entries here, useful for names in particular.
- If you're doing machine translation, add
-rep all
to make a bit more aggressive edits.
- If you're doing machine translation, add
py src\names.py
to translate many names automatically- You can add possibly reoccurring non-horsegirl names to the
names.json
file. - Translates the namecards above dialogue, not the names in dialogue text!
- You can add possibly reoccurring non-horsegirl names to the
Use the import.py
script to get your translations in the game. See the main readme or the scripts themselves for details.
The UI translations work by mapping hashes to text strings.
Some updates change the hashes, causing the translations to be jumbled.
Here's how to fix this yourself if you don't want to wait on an update.
- Open the
config.json
file in your game folder (DMMgames\Umamusume\config.json
) - Change the following
"enableLogger": false,
"dumpStaticEntries": false,
⇩⇩⇩
"enableLogger": true,
"dumpStaticEntries": true, - (re)Start the game
- Open a cmd prompt to run the following
py src/manage.py -new -add -src -tlg -O
- If autodetect fails, point it to the file from step 3
-src …/dump.txt
- Open the
translations/localify/ui.json
file, search for your text, translate it, and save the file:
"日本語": "tl goes here" py src/manage.py -upd
- The UI translation files in the
localify
folder should now be updated and can be copied over to your game folder- Basically follow the usual step or simply run
py src/manage.py -M
- Basically follow the usual step or simply run
- The UI translation files in the
- (Optional) Revert the changes from step 2 if you don't intend on translating more soon.
- Or leave it on to get a huge dump file with all text as you play...
- If you wish to contribute (especially through github), run
py src/manage.py -clean both
first
- (Optional, Preferred) Delete
dump.txt
if it exists in the same (game) folder - Follow the same steps as for static above but:
- dumpStaticEntries can remain false, it doesn't matter
"dumpStaticEntries": false,
- Move through the screens you wish to translate once the game is open
py src/manage.py -new -add -src
should do, but again it doesn't matter
- dumpStaticEntries can remain false, it doesn't matter
This should no longer be needed
- Follow translating steps 1-4 above
- Navigate through a few screens, especially those that cause loading or had jumbled text (the more the better)
Useful rotation is circle -> uma list -> race/practice -> training if one is open - Open a cmd prompt to run the following
py src/manage.py -I -O -src
- Same as steps 9-11 above
If you used git; commit your changes (in organized chunks) and make a Pull Request once all done.
Remember to update the tl-progress.md
file with your work.
If not; upload your new files somewhere and open an Issue. Or DM me on discord.