Skip to content
Toby edited this page Sep 18, 2026 · 32 revisions

This article describes how to translate CorsixTH into different languages, so that it can be played by people who don't speak English.

Localization in CorsixTH

There are two types of languages in CorsixTH.

The first type are languages which were included in the original release of Theme Hospital. These languages are English, French, German, Italian, Spanish, and Swedish. Most of the translation work for these languages has already been done, but over the course of development, we will add new text or change existing text (due to technical reasons or new features). For example, the French language is in the original game, but we have added more than 750 new lines on top of the original.

The second type are languages that weren't available in the original game - Russian and Dutch, for example. These are 100% new to CorsixTH and feature more than 2,500 lines of text.

Original font character set

The original game included its own bitmap font for all originally-included languages. This font is based on the Latin Alphabet and includes some (but not all) accented letters. The table below summarises all included letters (case-sensitive):

A B C D E F G H I J
K L M N O P Q R S T
U V W X Y Z a b c d
e f g h i j k l m n
o p q r s t u v w x
y z Ç ü é â ä à å ç
ê ë è ï î ì Ä Å É æ
ô ö ò û ù ÿ Ö Ü á í
ó ú ñ Ñ ß

Numbers 0 - 9 work as intended.
The table below also includes supported symbols:

! $ % & ' ( ) * + ,
- . : ; = ? ¿ ¡

Configuration for larger character sets

To use the support for additional TrueType fonts through FreeType2, there are two steps to take:

  1. Download a suitable font file, such as uming.ttc bundled in the following package from freedesktop.org, or choose a local font file.

  2. Specify the location of the desired font file in the configuration file, using the variable unicode_font. This can also be done in-game through the Font option of the Options menu. For information on finding the configuration file, please read here.

List of languages

Original languages (from original game)

English
French (Français)
Spanish (Castellano)
German (Deutsch)
Swedish (Svenska)
Italian (Italiano)

New languages

Brazilian Portuguese (Português do Brasil)
Chinese (simplified)
Chinese (traditional)
Czech (Čeština)
Danish (Dansk)
Dutch (Nederlands)
Finnish (Suomi)
Greek (Ελληνικά)
Hungarian (Magyar)
Japanese (日本語)
Korean (한국어)
Norwegian (Norsk)
Polish (Polski)
Portuguese (Português)
Russian (Русский)
Ukrainian (Українська)

Note: This list will be updated over time as new languages are added.

Working on an existing language

Depending on how technical you are, there are then two ways to get started:

A) The first way is to simply get stuck in and start editing files. (More information can be found below or by asking for help in our Discord.)

B) The second way is where we provide you with a little assistance. We can provide text in a generic format via e-mail, which you can easily work on. Once you've finished, send the edited file back to us and we'll add it to the game ourselves.

Finding Missing Translations

There are two ways of finding text which needs translating:

  1. Consult the existing language files in Github.
  2. Perform a string dump while playing Theme Hospital in your preferred language. First, enable debug mode by editing your Configuration file, and changing debug = false to debug = true. Then launch CorsixTH and select the language you want to work on from the Options menu. Finally, start or load any game, and then either select Dump Strings from the Debug menu or press CTRL + T.
Screenshot from 2026-02-01 12-32-34

This should create several text files in the same directory as your configuration file and save games.

  • debug-strings-orig.txt - This contains strings from the legacy string system.
  • debug-strings-new-lines.txt - This contains strings from the new string system in your currently selected language, presented line-by-line.
  • debug-strings-new-grouped.txt - This contains strings from the new string system in your currently selected language, presented in an easy-to-read grouped manner. This file can be used as a template for adding new languages.
  • debug-strings-diff-[language].txt - This contains strings that are missing and strings that are superfluous in your currently selected language. These are the strings which need to be translated.
image

Implementing a new language

If you'd like to see CorsixTH presented in a language which is currently not available, then you can help us implement it! The only restriction is that if your language uses characters / symbols / glyphs which were not present in the original Theme Hospital languages (English, French, German, Italian, Spanish, and Swedish), you will also need a font file when playing the game.

Header

To prepare your language, create a file called language_name.lua in the CorsixTH\Lua\languages directory, replacing "language_name" with the English name of your language. Open this file in a text editor, and add the following standard header:

--[[ Copyright (c) <current year> <your name>

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. --]]

Font("unicode")
Language("ownname", "name", "code1", "code2")
Inherit("existing_language")
Encoding(utf8)

Replace ownname with the native name of your language (making sure to capitalize the first letter of every word), name with the English name of your language, and code1 etc. with the ISO 639 codes for your language.

The Font and Encoding directives are used to tell the game that this language needs additional glyphs. If your language fits within the original font character set, then you do not need to declare the Font("unicode"). Make sure that the file itself is UTF-8 encoded.

To make the process of adding a new language easier, you should include an Inherit line so that any strings which you haven't translated yet are still displayed (albeit in the inherited language). Note that until custom translatable sounds are implemented, the inherited language will also provide the receptionist announcements.

For example, the Japanese language file is called japanese.lua and the last four lines of the header are as follows:

Font("unicode")
Language("日本語", "Japanese", "ja", "jp")
Inherit("English")
Encoding(utf8)

Translations

The remainder of the file lists all of the translations for the language in the format a.b.c.d = "translation";. To avoid repetition, translations can be grouped together inside curly braces, making the following two code blocks equivalent:

menu.file     = "Ye Olde File Menu";
menu.options  = "Ye Olde Configuration";
menu.display  = "Tweak ye olde eyes";
menu.charts   = "Avast - Charts!";
menu.debug    = "Arr! Debugging!";

menu = {
  file     = "Ye Olde File Menu";
  options  = "Ye Olde Configuration";
  display  = "Tweak ye olde eyes";
  charts   = "Avast - Charts!";
  debug    = "Arr! Debugging!";
}

Technical note: The normal rules of Lua assignment do not apply here - these two blocks really are equivalent, and the second block does not erase any other keys present in menu.

Adding new strings

As new features are added or implemented slightly differently to CorsixTH, it can become necessary to display text to the player which was not present in the original game. In this case, new translatable strings will need to be added. Rather than just writing "New text" in the Lua code, _S.section.whatever.new_text should be written, and then section.whatever.new_text = "New text" should be added to the English language file, along with any other language files which the author is familiar with.

New strings must always be provided in English at the very least, since all other languages (directly or indirectly) will inherit the English translation for strings which have not yet been translated.

VIP names

Translators are encouraged to add Very Important Person names that are relevant to the language. They should be male, humourous and inoffensive. As the original English includes roles like "A premiership footballer", similar descriptions may be included.

Update other areas of the game

The files CorsixTH/Lua/config_finder.lua and WindowsInstaller/config_template.txt generate a config.txt file if it does not exist. New languages should be added to these files, ideally when the language is first completed.

FAQ

I want to help but I'm quite new to CorsixTH.

No problem, head over to our Discord and let us know that you're interested in translating CorsixTH!

Do I need any special tools to help translate?

You can use any text editor that supports UTF-8. Our recommendation is Notepad++.

I saw some English text while playing in a different language.

It's very likely that you've discovered a new line of text which was recently added to CorsixTH, but has yet to receive a translation for your selected language. By default, we use the English translation as a fallback for missing translations. Please let us know (either by creating an issue or contacting us on Discord) what language you were playing in, what the untranslated text said, and what the missing translation should be - we'll add it during the next update!

I found a mistake while playing in a different language.

Please let us know (either by creating an issue or contacting us on Discord) what language you were playing in, what the incorrect text said, and what the correct translation should be - we'll fix it in a future update.

I want to add a language that you don’t already support.

Wonderful! There's thousands of lines of text that need translating, and ideally we would have a few people collaborating on a new language. If you want to help, contact us and let's talk!

Couldn't you just use machine translation for everything?

In theory, yes, we could use automated translation tools to translate all the text into every known language. The problem is that machine translation can make mistakes, doesn't take context into account, and may fail to replicate the original game's comedic tone. Worse, if nobody involved in the translation process actually speaks the language in question, we likely release a poor-quality translation, which would be disrespectful towards our players and require an additional update to correct it. For this reason, we would like our contributors to be fluent in the language which they want to translate CorsixTH into.

Clone this wiki locally