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.
Supported Languages
Section titled “Supported Languages”auto-mcs currently supports the following locales:
| Language | Code | Source |
|---|---|---|
| English | en | Generated source language |
| Spanish | es | Weblate / DeepL baseline |
| French | fr | Weblate / DeepL baseline |
| Italian | it | Weblate / DeepL baseline |
| Latvian | lv | Weblate / DeepL baseline |
| German | de | Weblate / DeepL baseline |
| Dutch | nl | Weblate / DeepL baseline |
| Portuguese | pt | Weblate / DeepL baseline |
| Swedish | sv | Weblate / DeepL baseline |
| Finnish | fi | Weblate / DeepL baseline |
| Turkish | tr | Weblate / DeepL baseline |
| English 2 | e2 | Automatically 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.
Contributing Translations
Section titled “Contributing Translations”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
Runtime Placeholders
Section titled “Runtime Placeholders”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.1Because of this, $$ placeholders are structural and must be preserved exactly:
Placeholder Rules
Section titled “Placeholder Rules”- 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 $$ scadutaCorrect when quoted:
'$$' failed to startIncorrect:
Rich Pre$$ Pair Requestsence di $$ attivataProtected Technical Content
Section titled “Protected Technical Content”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, andplayit.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.
How Locale Generation Works
Section titled “How Locale Generation Works”The locale catalog is synchronized by:
build-tools/locale_gen.pyThis tool scans the source tree for translatable UI strings and builds the English source catalog automatically.
During synchronization, it:
- Scans supported UI objects and translation calls for source strings
- Normalizes protected dynamic values into
$$placeholders - Regenerates the English source catalog
- Removes locale entries whose source strings no longer exist
- Preserves existing valid translations for strings that still exist
- Generates translations only for missing entries using DeepL
- Protects placeholders and technical formatting during machine translation
- 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.
Locale Ownership
Section titled “Locale Ownership”en.json
Section titled “en.json”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.
Human-Translated Locales
Section titled “Human-Translated Locales”The following locale files accept community corrections through Weblate:
e2.jsonde.jsones.jsonfi.jsonfr.jsonit.jsonnl.jsonpt.jsonsv.jsonlv.jsontr.jsonMachine-generated translations provide a starting point, while accepted community corrections remain intact across future locale generation.
Weblate Validation
Section titled “Weblate Validation”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
Maintainer Workflow
Section titled “Maintainer Workflow”When application UI strings change:
- Update the source code normally
- Run
build-tools/locale_gen.py - Review the generated locale changes
- Commit the source and locale updates to
dev - 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 a New Language
Section titled “Adding a New Language”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_localesinsource/core/translator.py - the locale is added to
locale_codesinbuild-tools/locale_gen.py - an appropriate machine-translation target is added to
deepl_targetswhen applicable - the Weblate component language filter permits the locale
- the locale renders correctly throughout the application UI
Reporting Translation Problems
Section titled “Reporting Translation Problems”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