Hi everyone,

Thank you all so much for the work you've done on the translations so far! We've got a fair number of translations done already, we hope that those of you with completed translations are enjoying playing with the app in your own language.

We're going to make a couple of changes going forward. We're aware of a few issues with our processes and permissions so far - those of you with the 'translator' role can't edit strings that have been approved, even if users have flagged the translations, whereas reviewers have too many permissions and can approve translations. So we're scrapping those roles and replacing them with language-based roles so you can make all changes to your own language. We still want to keep the same policy we had before - all translations should go through two people - so please don't approve your own work! These changes will be rolled out over the next few days.

The second change is more proactive. Even as languages are completed, there will always be more to do. The app is consistently being updated and we're within sight of a release of the new Script Tool, both of which will require further translations, so this is an ongoing project, and we anticipate a drop-off in interest from some of you after the initial translation is done. Also, I've been getting a lot of questions about translations that I can't answer because I don't speak the language, and I'm aware of cases where two camps have formed around competing translations that end up inconsistent in the final translation (Dutch spreukenboek vs grimoire debate, I'm looking at you!). We're going to try to solve both of these problems with the introduction of a "translation coordinator" role to several languages which have a large number of volunteers and are complete or nearing completion. Coordinators will work with me, will have the power to reject suggestions, and will be the deciding voice on any issues that come up. Ideally coordinators will be native or native level in the language and at least fluent in English. I'm also aware that a good number of you have some experience with professional translation; that'd be great, but is by no means necessary. We'll also consider others' recommendations, so if you think you know someone who'd be a good person to lead the translation, or you want to volunteer, reach out to me at alejo@thepandemoniuminstitute.com.

-Alejo

Contributing to this translation requires agreeing to its contributor license agreement.
Language Approved Translated Unfinished Unfinished words Unfinished characters Untranslated Checks Suggestions Comments
English 100% 100% 0 0 0 0 39 0 3
Afrikaans 0% 19% 735 3,318 19,484 735 0 28 0
Alemannic 0% 0% 911 4,033 23,791 911 0 0 0
Azerbaijani 0% 0% 911 4,033 23,791 911 0 25 0
Bengali 0% 0% 911 4,033 23,791 911 0 0 0
Bulgarian 0% 0% 911 4,033 23,791 911 0 0 0
Chinese (Simplified Han script) 98% 0 0 0 0 0 1 0
Czech 99% 0 0 0 0 0 21 0
Danish 97% 99% 4 11 58 0 24 59 11
Dutch 99% 100% 0 0 0 0 14 72 17
English (Pirate) 30% 78% 198 799 4,757 198 39 4 0
Filipino 0% 0% 911 4,033 23,791 911 0 0 0
Finnish 2% 10% 816 3,801 22,350 815 0 9 0
French 94% 0 0 0 0 0 48 44
French (Canada) 1% 1% 910 4,032 23,787 910 0 107 0
Georgian 0% 5% 862 3,907 23,016 862 0 0 0
German 0 0 0 0 0 164 0
German (Austria) 0% 0% 911 4,033 23,791 911 0 0 0
German (Switzerland) 0% 100% 0 0 0 0 14 0 0
Greek 0% 21% 714 3,248 19,094 714 0 0 1
Hebrew 9% 73% 242 1,324 7,546 241 0 40 2
Hindi 0% 12% 797 3,792 22,287 796 1 0 0
Hungarian 0% 0% 911 4,033 23,791 911 0 0 0
Icelandic 0% 2% 889 3,996 23,558 889 0 1 0
Indonesian 0% 5% 865 3,914 23,062 865 2 0 0
Italian 0 0 0 0 0 13 1
Japanese 1% 11% 804 3,761 22,077 803 2 2 0
Karelian 0% 0% 911 4,033 23,791 911 0 0 0
Klingon 0% 7% 845 3,889 22,881 845 0 0 0
Korean 0% 88% 102 385 2,301 102 0 0 0
Latin 0% 0% 911 4,033 23,791 911 0 0 0
Lithuanian 0% 8% 838 3,874 22,756 838 0 33 0
Norwegian Bokmål 38% 99% 4 6 33 3 1 27 4
Persian 0% 0% 911 4,033 23,791 911 0 0 0
Polish 12% 70% 271 1,189 6,997 252 13 153 14
Portuguese (Brazil) 0 0 0 0 0 11 16
Portuguese (Portugal) 19% 44% 504 2,209 12,948 504 0 0 0
Romanian 18% 42% 523 2,335 13,698 523 0 0 0
Russian 82% 99% 7 19 110 0 1 145 65
Sami 0% 0% 911 4,033 23,791 911 0 0 0
Sami (Northern) 0% 0% 911 4,033 23,791 911 0 0 0
Serbian 0% 10% 819 3,778 22,199 819 2 1 0
Slovak 0% 0 0 0 0 0 4 3
Slovenian 1% 69% 275 1,204 7,030 275 2 0 2
Spanish 0 0 0 0 0 11 21
Spanish (Latin America) 0 0 0 0 0 2 0
Spanish (Mexico) 0% 47% 474 2,137 12,528 474 0 0 0
Spanish (Peru) 0% 0% 911 4,033 23,791 911 0 0 0
Swedish 0 0 0 0 0 0 0
Thai 32% 32% 611 2,822 16,604 611 0 0 0
Toki Pona 0% 10% 817 3,767 22,132 813 1 0 1
Turkish 21% 21% 716 3,294 19,457 696 0 21 0
Ukrainian 0% 65% 312 1,380 8,041 309 2 32 1
Vietnamese 19% 0 0 0 0 0 0 1
Viossa 0% 0% 911 4,033 23,791 911 0 0 0
Yiddish 0% 0% 911 4,033 23,791 911 0 0 0
Please sign in to see the alerts.

Summary

Project website botc.app
Instructions for translators

This is the translation repository for the official Blood on the Clocktower app and accompanying game materials. English is the base language for the app and any currently untranslated text (both from app and game) will fall back to the English version in the app. Outdated translations will be marked as such in the translation interface. Whenever the app is updated, the most recent translations will be pulled from here and used in the app. The translations are split into 3 parts:

  • Glossary: this contains the general game terms that are being used across the app and game materials. It is (currently) not shown anywhere in the app, but being used to help translators use the same terms for important elements of the game.
  • Game Content: the actual game content that is also being used in the the printed board game. It consists of Edition descriptions, Character text, Reminder text (reminders are shared between different characters) and Jinxes. This content should rarely change and be stable, once translated.
  • App Interface: all interface text that is being used in the app. These will be updated as the app is undergoing further development, so expect frequent changes here and check back frequently.

How to translate

Select the component you want to translate and the language, if it's already been added. Languages that are officially translated (meaning there is a printed version of the game available in this language) require the "official translator" role for updating the game translation. Fan translators can update all game translations for unofficial languages and all app interface translations for all languages, except English. The translations need to follow a few important rules in order to be usable on the app:

  • General: Some translations contain line breaks (\n) and / or tab spaces (\t). These are used for visual formatting and it's recommended to use them appropriately in the translated text as well. Otherwise, the translated version might look weird in the app.
  • Game Content: Night reminder text (roles.[role].first and roles.[role].other) sometimes contain :reminder:as a placeholder for a Reminder token icon. DO NOT TRANSLATE this placeholder! Example: The Butler chooses a player. :reminder: -> Der Butler wählt einen Spieler. :reminder:
  • Game Content: Night reminder text (roles.[role].first and roles.[role].other) sometimes contain *SOMETHING* to mark text as bold. Translate the text, but keep the asterisks in place! Example: Show the Townsfolk character token. Point to both the *TOWNSFOLK* and *WRONG* players. -> Zeige das Bürger-Plättchen. Zeige auf den *BÜRGER* und auf den *FALSCH*en Spieler.
  • App Interface: Curly braces placeholders are being used throughout the app text and are either numbered ({0}, {1}, ...) or named ({link}). DO NOT TRANSLATE these placeholders! They are being used to insert formatting, HTML elements or dynamic information in their place. Example: Seat {0} -> Sitz {0}, Download the latest {label} version here. -> Lade die neueste {label} Version hier runter.
  • App Interface: Pluralized strings are defined with a vertical bar between each form of the string. The first form is singular, the second form is plural. Keep the vertical bar in place, but translate each form accordingly. If your language has a different form for zero and multiple, the correct form is zero something|one something|many something. Example: Demon|Demons -> Dämon|Dämonen, First Day|Day {n} -> Erster Tag|Tag {n} (pluralized strings might also contain curly braced placeholders)
Project maintainers3 User avatar AlejoFBlackUser avatar oddGarrettUser avatar bra1n
Project reviewers94 User avatar ChiromyiformeUser avatar coolseelUser avatar oddGarrettUser avatar Augurey2012User avatar bra1nUser avatar just_anaUser avatar EardstapaArcticaUser avatar MalleUser avatar lostmorningUser avatar testerUser avatar TakiUser avatar Some_Random_PersonUser avatar crysarcherUser avatar tuanhuyngUser avatar TalloreteUser avatar tberbenUser avatar OVOOLIFEUser avatar HobbeUser avatar AsdepiqueUser avatar serega6531User avatar rynnethiaUser avatar HerdisUser avatar hidewariUser avatar cupnoodleUser avatar Gavilan
Translation license proprietary
Contributor license agreement

Thank you for your interest in contributing to Blood on the Clocktower (“BotC”), provided by The Pandemonium Institute Pty Ltd (“TPI”). You must agree to all terms of this Contributor License Agreement before you contribute any translations or other BotC content to TPI (collectively, “Contributions”) through this site. If you do not agree, you are prohibited from participating in this project.

This license is not only for the protection of the contributors themselves, but also for the protection of the project and its users; it does not change your rights to use your own Contributions for any other purpose.

Version 1.0 – September 25, 2025

You and TPI agree:

You grant TPI the ability to use the Contributions in any way, in TPI’s sole discretion. You hereby grant to TPI a perpetual, non-exclusive, worldwide, fully paid-up, royalty free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute your Contribution and any derivative works thereof in any and all media and forms now known or hereafter invented.

You represent and warrant that you are legally entitled to grant the above license. If your employer has rights to intellectual property that you create, you represent that you have received permission to make the Contributions on behalf of that employer, or that your employer has waived such rights for the Contributions.

You represent and warrant that the Contributions are your original work and, to your knowledge, no other person claims or has the right to claim any rights in or to any copyrights, trademarks, inventions, or patents, or any moral rights, related to the Contributions. You also represent that you are not under any legal obligations that in any way conflict with the terms of this license. For example, if you have signed an agreement requiring you to assign the intellectual property rights in the Contributions to an employer or customer, that would conflict with the terms of this license.

TPI has the sole right to determine which translations and other content are used in the BotC project or any other TPI uses. You understand that the decision to include the Contributions in any project is entirely that of TPI, and this agreement does not guarantee that the Contributions will be included in any product.

No Implied Warranties. TPI acknowledges that, except as explicitly described in this Agreement, the Contributions are provided on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.

This license agreement shall be construed and enforced in accordance with the laws of Australia without regard to principles of conflict of laws that would cause the laws of any other jurisdiction to apply.

Translation process
  • Translations can be made directly.
  • Translation suggestions can be made.
  • Translations are reviewed by dedicated reviewers.
  • Only chosen users can contribute.
  • The translation uses monolingual files.
  • The translation base language can not be edited.
File mask app/*.json
Monolingual base language file app/en.json
9 seconds ago

String statistics

Strings percent Hosted strings Words percent Hosted words Characters percent Hosted characters
Total 51,016 225,848 1,332,296
Source 911 4,033 23,791
Approved 24% 12,547 24% 54,836 24% 323,856
Waiting for review 17% 8,939 17% 38,293 17% 226,993
Translated 43% 22,397 43% 97,162 43% 574,640
Needs editing 1% 62 1% 365 1% 2,187
Read-only 1% 911 1% 4,033 1% 23,791
Failing checks 1% 157 1% 499 1% 3,029
Strings with suggestions 2% 1,034 2% 5,451 2% 32,241
Untranslated strings 55% 28,557 56% 128,321 56% 755,469

Quick numbers

225 k
Hosted words
51,016
Hosted strings
42%
Translated
0
Components
56
Languages
56
Translations
5
Screenshots
and previous 30 days

Trends of last 30 days

+100%
Hosted words
+100%
Hosted strings
+42%
Translated
+100%
Contributors
User avatar Fabulist

Translation added

9 seconds ago
User avatar Fabulist

Translation added

16 seconds ago
User avatar Fabulist

Translation added

a minute ago
User avatar Fabulist

Translation added

a minute ago
User avatar Fabulist

Translation added

a minute ago
User avatar Fabulist

Translation added

2 minutes ago
User avatar Fabulist

Translation added

2 minutes ago
User avatar Fabulist

Translation added

2 minutes ago
User avatar Fabulist

Translation added

2 minutes ago
User avatar Fabulist

Translation added

2 minutes ago
Browse all component changes