Skip to content

Localization

Translations for auto-mcs are maintained through Hosted Weblate. If you would like to improve an existing translation, please contribute through Weblate rather than editing locale files directly.

New to Weblate? See Weblate’s Make your first translation guide for a walkthrough of the translation interface, or the Translating using Weblate documentation for a more complete reference.

auto-mcs currently supports the following locales:

LanguageCodeSource
EnglishenGenerated source language
SpanishesWeblate / DeepL baseline
FrenchfrWeblate / DeepL baseline
ItalianitWeblate / DeepL baseline
LatvianlvWeblate / DeepL baseline
GermandeWeblate / DeepL baseline
DutchnlWeblate / DeepL baseline
PortugueseptWeblate / DeepL baseline
SwedishsvWeblate / DeepL baseline
FinnishfiWeblate / DeepL baseline
TurkishtrWeblate / DeepL baseline
English 2e2Automatically generated

en.json and e2.json are generated by auto-mcs and should not be manually translated through Weblate.

Support for additional languages is currently limited by the application’s font support. Languages requiring unsupported non-Latin character sets cannot be added until suitable fonts and rendering support are implemented.

Translation contributions should be made through the auto-mcs project on Hosted Weblate

Translations submitted through Weblate are reviewed before being included in auto-mcs. Please only translate languages you are familiar with and preserve the meaning, tone, and technical context of the original string.

Source strings are automatically discovered from the auto-mcs codebase and synchronized into the locale files by build-tools/locale_gen.py

Some auto-mcs strings contain $$ placeholders. These are not literal dollar signs.

$$ placeholders represent protected runtime values that are temporarily removed before translation lookup and restored afterward. These values can include proper nouns, server names, product names, versions, paths, sizes, and other dynamic content.

For example, a runtime string may contain:

Support for $Fabric$ version $26.1$

Before translation lookup, auto-mcs converts the protected values to:

Support for $$ version $$

After the translated string is found, the original protected values are restored in order as a final literal string:

Support for Fabric version 26.1

Because of this, $$ placeholders are structural and must be preserved exactly:

  • Do not add, remove, duplicate, or alter $$
  • Keep the same number of $$ placeholders as the source string
  • Preserve their intended order and grammatical role
  • Keep appropriate spacing between placeholders and surrounding content, for example text $$ text
  • When a placeholder is inside quotes, preserve the quotes where appropriate, for example '$$'
  • Never concatenate $$ into surrounding words

Correct:

Source:
$$ pair request expired
Translation:
Richiesta di associazione $$ scaduta

Correct when quoted:

'$$' failed to start

Incorrect:

Rich Pre$$ Pair Requestsence di $$ attivata

Translations should preserve technical values where appropriate.

In particular, do not translate or modify:

  • product and service names such as auto-mcs, Minecraft, Java, Modrinth, Telepath, and playit.gg
  • commands and command-line arguments
  • file and directory names
  • file paths
  • keyboard shortcuts
  • configuration keys
  • technical identifiers
  • formatting placeholders
  • markup or formatting tokens

Some strings may contain other formatting or placeholder syntax protected by the locale generator. If part of a source string appears to be machine-readable rather than normal prose, preserve it unless you are certain it is intended to be translated.

The locale catalog is synchronized by:

build-tools/locale_gen.py

This tool scans the source tree for translatable UI strings and builds the English source catalog automatically.

During synchronization, it:

  1. Scans supported UI objects and translation calls for source strings
  2. Normalizes protected dynamic values into $$ placeholders
  3. Regenerates the English source catalog
  4. Removes locale entries whose source strings no longer exist
  5. Preserves existing valid translations for strings that still exist
  6. Generates translations only for missing entries using DeepL
  7. Protects placeholders and technical formatting during machine translation
  8. Validates $$ placeholder counts before preserving generated or existing translations

Human-translated locales use DeepL to provide a baseline for newly discovered strings. Existing community corrections are preserved and are not overwritten simply because the locale generator is run again.

e2.json is generated separately by the English 2 translation logic.

A DEEPL_AUTH_KEY environment variable is required when new strings need machine translation for supported DeepL locales.

The English catalog is automatically generated from the source code. Do not manually add translation keys to en.json. Add or update the relevant string in the application source and rerun locale_gen.py.

The following locale files accept community corrections through Weblate:

e2.json
de.json
es.json
fi.json
fr.json
it.json
nl.json
pt.json
sv.json
lv.json
tr.json

Machine-generated translations provide a starting point, while accepted community corrections remain intact across future locale generation.

The Hosted Weblate component is configured to protect the locale format before changes are accepted. The current configuration includes:

  • source string management disabled
  • supported-language restrictions
  • $$ placeholder detection
  • enforced placeholder checks
  • enforced regular-expression checks
  • $$ placeholder validation through Bulk Edit rules
  • maintainer review before translation changes are included

When application UI strings change:

  1. Update the source code normally
  2. Run build-tools/locale_gen.py
  3. Review the generated locale changes
  4. Commit the source and locale updates to dev
  5. Allow Weblate to synchronize with the updated source catalog

Community translation changes are reviewed in Weblate. Accepted changes are committed by Weblate and proposed back to the dev branch through an automated pull request.

If a Weblate contribution must be rejected or reverted, remove or revert the change in Weblate itself before closing the corresponding GitHub pull request. Closing a Weblate-generated GitHub pull request does not remove Weblate’s internal translation state. If the translation remains in Weblate, it may be proposed again in a later pull request.

Adding another locale requires more than creating a JSON file.

Before enabling a new language, maintainers should verify:

  • the application’s fonts correctly render the required character set
  • the locale is added to available_locales in source/core/translator.py
  • the locale is added to locale_codes in build-tools/locale_gen.py
  • an appropriate machine-translation target is added to deepl_targets when applicable
  • the Weblate component language filter permits the locale
  • the locale renders correctly throughout the application UI

For an incorrect or awkward translation, submit a correction through Hosted Weblate

For problems with the English source text, placeholder behavior, rendering, or the localization system itself, please open an issue in the auto-mcs GitHub repository