Touhou Patch Center:Tutorial

From Touhou Patch Center
Jump to navigation Jump to search
Project overview
About Tutorial FAQ Download Patch servers github.png Bug tracker Wiki security

Since translators are by far the most important people in this fandom, we made the process as simple as possible.

Register/Logging in

  1. First, create an account by going towards the top right link (or clicking the hyperlink).
    If you already have an account, skip to step two.
  2. Log into your account with your username and password which will be located in the same place the registration was.
    (or click the hyperlink)

Changing the site language

The language of the site interface automatically defaults to the preferred content language set in your browser settings. This setting is also used to set the initial target language in the translation menu. Thus, we recommend changing it to the language you want to translate into - this way, you won't accidentally overwrite existing translations for another language.

To change this setting, click the Language Selector (the button at the top of the page) and enter the native name of your language, or its ISO 639-1 code.

This setting is stored as a cookie and saved to your user account if you're logged in.

Starting a translation into a language not yet on the site

Most of the time, this is no problem. Just select the language like you normally would, and the administration will create the necessary links and portal pages for integration into the Touhou Community Reliant Automatic Patcher shortly after.

In case your desired language is not present in the list, send a message on our Discord server in the #translation channel, and ping the @Webmaster role. Setting up a new language is a very quick process.

Editing text translations

Games Supported Languages with >95% coverage Languages started & in progress
Icon th06.png TH06 Embodiment of Scarlet Devil English Literal English British English Chechen Google Translate English German French Spanish Italian Brazilian Portuguese Brazilian Portuguese troll translations Portuguese Indonesian Thai Tagalog Korean Polish Russian Vietnamese Bulgarian Romanian Simplified Chinese Hungarian Ukrainian Croatian Arabic Esperanto Sakha Greek Traditional Chinese Bukvalni Srpski Azerbaijani 4Kids English Troll translations Yorkshire English Finnish Luxembourgish Malay Dutch Tiếng Việt (THVNFB translation) Norwegian Bokmål Czech Français québécois (familier oral) French troll translations Swedish Turkish Scots Serbian
Icon th07.png TH07 Perfect Cherry Blossom English British English Google Translate English German Spanish Arabic Italian Russian Hindi Indonesian Greek Ukrainian Vietnamese Thai Korean Polish Brazilian Portuguese Brazilian Portuguese troll translations Bulgarian Simplified Chinese Hungarian Esperanto Croatian Traditional Chinese Literal English 4Kids English Yorkshire English Finnish French Luxembourgish Troll translations Tiếng Việt (THVNFB translation) Czech Persian Norwegian Bokmål Romanian Swedish Portuguese Turkish Scots Toki Pona Macedonian Serbian Bukvalni Srpski Azerbaijani
Icon th075.png TH07.5 Immaterial and Missing Power Traditional Chinese Simplified Chinese
Icon th08.png TH08 Imperishable Night English British English Google Translate English German Spanish Arabic Italian Hindi Korean Thai Bulgarian Vietnamese Polish Brazilian Portuguese Simplified Chinese Hungarian 4Kids English Greek Finnish French Indonesian Luxembourgish Dutch Portuguese Russian Tagalog Swedish Ukrainian Serbian Bukvalni Srpski Traditional Chinese Azerbaijani
Icon th09.png TH09 Phantasmagoria of Flower View English British English German French Hindi Polish Thai Korean Simplified Chinese Hungarian Traditional Chinese 4Kids English Literal English Spanish Italian Luxembourgish Indonesian Tiếng Việt (THVNFB translation) Russian Ukrainian Swedish Brazilian Portuguese Turkish Bukvalni Srpski
Icon th095.png TH09.5 Shoot the Bullet English British English German Russian Indonesian Hindi Polish Thai Korean French Simplified Chinese Arabic Traditional Chinese 4Kids English Spanish Italian Lojban Dutch Brazilian Portuguese Chechen
Icon th10.png TH10 Mountain of Faith English British English Google Translate English German Spanish Italian Brazilian Portuguese Russian Hindi Bulgarian Indonesian Polish Vietnamese Thai Korean Simplified Chinese Czech Hungarian Esperanto Portuguese Traditional Chinese 4Kids English Greek Finnish French Luxembourgish Dutch Swedish Romanian Ukrainian
Icon alcostg.png UB Uwabami Breakers English British English German Spanish Italian Indonesian Yorkshire English Finnish Simplified Chinese Korean Malay Luxembourgish Traditional Chinese
Icon th105.png TH10.5 Scarlet Weather Rhapsody Simplified Chinese English German Vietnamese Russian French Français québécois (familier oral) Korean Thai Swedish
Icon th11.png TH11 Subterranean Animism English British English Google Translate English German Spanish Russian Bulgarian Hindi Vietnamese Ukrainian Thai Korean Simplified Chinese Hungarian Indonesian Traditional Chinese Brazilian Portuguese 4Kids English Greek Swiss German Finnish French Italian Luxembourgish Dutch Polish Tiếng Việt (THVNFB translation) Swedish Czech
Icon th12.png TH12 Undefined Fantastic Object English British English Google Translate English German Spanish Russian Hindi Thai Vietnamese Korean Simplified Chinese Hungarian Serbian Traditional Chinese 4Kids English Finnish French Luxembourgish Brazilian Portuguese Indonesian Swedish Czech Bukvalni Srpski Italian
Icon th123.png TH12.3 Touhou Hisoutensoku Simplified Chinese English German Vietnamese Russian Korean French Thai Spanish Swedish
Icon th125.png TH12.5 Double Spoiler English British English German Spanish Italian Hindi Korean Thai Simplified Chinese 4Kids English Yorkshire English French Hungarian Indonesian Luxembourgish Malay Dutch Brazilian Portuguese Russian Chechen
Icon th128.png TH12.8 Fairy Wars English British English Chechen Google Translate English German Spanish Italian Russian Ukrainian Hungarian Hindi Vietnamese Korean Thai Simplified Chinese Esperanto 4Kids English Pirate English Luxembourgish Polish Dutch Brazilian Portuguese Hungarian French Indonesian Swedish
Icon th13.png TH13 Ten Desires English British English German Spanish Italian Russian Vietnamese Hindi Korean Thai Simplified Chinese Hungarian 4Kids English Greek Yorkshire English Finnish French Italian Luxembourgish Malay Dutch Polish Brazilian Portuguese Indonesian Hindi Swedish Portuguese
Icon th135.png TH13.5 Hopeless Masquerade Simplified Chinese English German Vietnamese Korean Thai Russian
Icon th14.png TH14 Double Dealing Character English British English German Spanish Italian Polish Russian Ukrainian Bulgarian Indonesian Thai Vietnamese Korean Simplified Chinese Czech Hungarian Brazilian Portuguese 4Kids English Swiss German Pirate English Troll translations Yorkshire English Finnish French Luxembourgish Mongolian Malay Norwegian Bokmål Dutch Portuguese Klingon Tiếng Việt (THVNFB translation) Traditional Chinese Hindi Swedish Toki Pona Chechen Esperanto
Icon th143.png TH14.3 Impossible Spell Card English British English German Bulgarian Russian Korean Vietnamese Thai Simplified Chinese 4Kids English Spanish Finnish French Indonesian Italian Norwegian Bokmål Polish Portuguese Brazilian Portuguese Ukrainian Czech Swedish
Icon th145.png TH14.5 Urban Legend in Limbo English German Indonesian Vietnamese Korean Thai Simplified Chinese Hindi Brazilian Portuguese Swedish
Icon th15.png TH15 Legacy of Lunatic Kingdom English British English German Ukrainian French European Spanish (Suzunaan Blog translation) Russian Thai Vietnamese Korean Simplified Chinese Czech Arabic Traditional Chinese Hungarian Brazilian Portuguese 4Kids English Esperanto Spanish Latin American Spanish Canadian French Indonesian Swedish Portuguese Chechen Italian
Icon th155.png TH15.5 Antinomy of Common Flowers English German Korean Vietnamese Thai Simplified Chinese Russian Romanian Indonesian Spanish French French troll translations Brazilian Portuguese Swedish Chechen
Icon th16.png TH16 Hidden Star in Four Seasons English British English German European Spanish (Suzunaan Blog translation) Russian Ukrainian French Czech Indonesian Vietnamese Thai Korean Thai Simplified Chinese Spanish Italian Brazilian Portuguese Swedish Troll translations Portuguese Hungarian Serbian troll translations
Icon th165.png TH16.5 Violet Detector English German European Spanish (Suzunaan Blog translation) Vietnamese Thai Korean Simplified Chinese French Russian Spanish Indonesian Brazilian Portuguese Swedish
Icon th17.png TH17 Wily Beast and Weakest Creature English German European Spanish (Suzunaan Blog translation) Brazilian Portuguese Russian Czech Vietnamese Korean Indonesian Simplified Chinese French Italian Ukrainian Tagalog Swedish Thai Bukvalni Srpski
Icon th175.png TH17.5 Touhou Gouyoku Ibun English German Spanish Korean Vietnamese Simplified Chinese Brazilian Portuguese Russian French
Icon th18.png TH18 Unconnected Marketeers English German European Spanish (Suzunaan Blog translation) Russian Korean Vietnamese Simplified Chinese Italian Czech Hungarian Brazilian Portuguese Bulgarian Swedish Thai French Literal English Bukvalni Srpski Indonesian
Icon th185.png TH18.5 100th Black Market English Simplified Chinese European Spanish (Suzunaan Blog translation) Korean Vietnamese Russian Brazilian Portuguese Thai French Traditional Chinese
Icon th19.png TH19 Unfinished Dream of All Living Ghost English European Spanish (Suzunaan Blog translation) Simplified Chinese Esperanto Spanish Literal English French Bukvalni Srpski Korean Indonesian Russian Vietnamese Traditional Chinese
Icon nsml.png NSML New Super Marisa Land English German Spanish Russian French Korean
Icon megamari.png MegaMari MegaMari English German Spanish Russian Brazilian Portuguese Korean
Icon marilega.png MariLega MarisaLand Legacy
  1. Go to the main page which can accessed from any page by clicking the logo.
  2. Choose a game you wish to translate.
    On the right, you can see the list of translatable games, their progress in the respective languages, and whether they are finished.
  3. Choose a piece of translatable content you want to work on.
  4. Click on the small Translate this page label at the top of that page.

    If you already are on a translated page, it will instead say

    This page is a translated version of the page X and the translation is X% complete.

    In that case, the first link will bring you to the translation interface and pre-select the page's language.

  5. Verify that the language selector indicates the correct language you want to translate into. The selected language is further reflected with its corresponding flag between the source and translated text,
  6. Click the table rows and enter your translation.
  7. Hit Publish translation.
  8. Then, just follow steps 6 + 7 for the remainder of the boxes.

Things to know

  • If you're translating from another translation (most likely English), be sure to add the wiki page of this translation to your watchlist by clicking the star next to the search bar on the top. This will send you a notification whenever something has been changed and needs to be reflected in your language.
  • If any text of an existing translation (again, most likely English) would not change in your translation, leave the respective box empty and don't copy-paste the text. This way, everyone can take full advantage of patch stacking.
  • If you're translating in a group, you can make use of the proofreading feature offered by the translation interface:
    • A white proofread icon (✔) will appear for any translation unit that was last edited by another translator.
    • By clicking it, you indicate that you have proofread this translation and agree with it.
    • Proof-read translation units will be highlighted in green, and removed from the Unreviewed view.
    • If a translation changes, any previous proofread markers will be automatically removed.
  • Refer to your language's portal page for stylistic guidelines.


  • Line breaks are never done automatically. It's up to you to make sure that the text fits into the dialog box.
  • You can always use a maximum of two lines for every message box, even if there is only one line in the original. The opposite is also true. We went to great lengths to make this possible, so please do make use of this. ☺


Since these do not show up in replays, the patcher can provide an unlimited amount of text lines here.

  • There can always be a maximum of 5 lines at the screen at any time.

Character name translations are automatically taken from the respective translation group.

Editing graphics

Compared to the simple translation of plain text, multilingual image translation requires a rather involved workflow:

  • (Optimally, the original text should be transcribed first.)
  • A basic image editing project needs to be created, erasing the original text, recreating possible backgrounds and selecting appropriate fonts.
  • The required fonts should be noted down so that the editors for other languages can obtain them.
  • The original text needs to be translated.
  • Finally, the translated text needs to be edited into the base image, taking possible sprite boundary limits imposed by the game into account. (As of now, we couldn't change those limits without including the whole ANM file with all its original uncompressed image data, which would unnecessarily bloat the size of the patches.)


Fonts should ideally have a sufficiently large Unicode coverage so that the same template can be used across multiple languages.

Unfortunately, the most appropriate fonts often happen to have a rather limited coverage - and finding one that looks similar and has a wider coverage can be an arduous, if not impossible task.

Hence, you don't need to care about this for any other language than your own (but other translators would certainly appreciate it if you did).

A consistent appearance across the languages would surely be nice thing to have, but this is not a requirement or official policy - each language is still free to choose whatever fonts the editors prefer.

If you do care, here's a test string with characters from some of our active languages which might be problematic, for your convenience:

« » “ ” ‘ ’ “ „ … ¿ ? ¡ !

Efficiently testing translations in-game

Select the skipgame patch in addition to your translation to remove all gameplay sections and reduce spell cards to a few seconds. This leaves only the dialogue and spell card names and allows you to quickly proofread everything without spending time on dodging bullets.

The separate instant_ending allows you to access all endings by making one single gameplay choice in one stage.

Editing Music

Follow the tutorial here.

In-game TL notes

In Team Shanghai Alice games, these can be inserted basically anywhere text is rendered, using the {{Tlnote}} template; check that page for details. Currently not supported for Tasofro games, so don't use the template on their pages!

Italics and bold formatting is not supported, but you could try a Unicode boldness generator for A-Z.

Advanced configuration either in global.js (for all games), <game ID> (for a specific game), or in your runconfig:

    "tlnotes": {
        "reference_resolution": [1280, 960], // Valid for all games, even the 640×480 ones. Font and region size are relative to this one. You typically don't need to change this.
        "region_topleft": [x, y],
        "region_size": [width, height],
        "read_speed": 35, // In UTF-8 bytes per second; determines the scrolling speed of longer TL notes that exceed the size of the region. Higher is faster.
        "fade_ms": 500, // Fade-in speed.
        "valign": "top" | "center" | "bottom", // Vertical alignment for notes that are shorter than the height of the TL note region. Default is "bottom".
        "font": "'MS Gothic' 32 0 400 DEFAULT_QUALITY", // Using the same font syntax used for fontrules, explained in Also subject to those same replacement rules.
        "outline_radius": 2, // Capped at 15, because it's drawn on the CPU and actually not that fast, and everything larger just *really* looks bad.

To disable TL notes completely, simply add , "tlnotes": "" before the last } of your configuration file, created by thcrap.