Translate Anno 117 and Anno 1800 mod localization files from English into all supported in-game languages using the DeepL API — directly inside Visual Studio Code. The file format (<LineId> for Anno 117, <GUID> for Anno 1800) is detected automatically — no configuration needed.
Features
- Translates all
<Text> leaf nodes and raw <ModOp> text content in texts_english.xml
- Generates one output file per language in the same folder (
texts_german.xml, texts_french.xml, …)
- Output file names and the language list match whichever game the source file belongs to (auto-detected — see File format):
- Anno 117 (11 languages):
texts_brazilian.xml (PT-BR), texts_french.xml (FR), texts_german.xml (DE), texts_italian.xml (IT), texts_japanese.xml (JA), texts_korean.xml (KO), texts_polish.xml (PL), texts_russian.xml (RU), texts_simplified_chinese.xml (ZH-HANS), texts_spanish.xml (ES), texts_traditional_chinese.xml (ZH-HANT)
- Anno 1800 (10 languages, no Brazilian Portuguese):
texts_chinese.xml (ZH-HANS), texts_french.xml (FR), texts_german.xml (DE), texts_italian.xml (IT), texts_japanese.xml (JA), texts_korean.xml (KO), texts_polish.xml (PL), texts_russian.xml (RU), texts_spanish.xml (ES), texts_taiwanese.xml (ZH-HANT)
- All unique strings are collected and sent to DeepL in a single batch per language — fast and quota-efficient
- In-session translation cache avoids redundant API calls on repeated runs
- XML structure, whitespace, and indentation are preserved 1:1
<LineId> numbers are never sent to DeepL
- Progress notifications while translating
- Hotkey support (default
Ctrl+Alt+T)
Requirements
Usage
- Open
texts_english.xml in the editor (it must be the active tab).
- Press
Ctrl+Alt+T or open the Command Palette (Ctrl+Shift+P) and run Translate texts_english.xml.
- If no API key is saved in settings you will be prompted to enter it once.
- Follow the prompts (see below) and watch the progress notification while the extension works.
- The translated language files are written to the same folder as
texts_english.xml.
Overwrite prompts
When language files already exist, the extension asks two questions in sequence:
Step 1 — Overwrite existing files?
| Choice |
Result |
| Yes |
Existing files will be updated (see Step 2) |
| No |
Existing files are left untouched; only missing language files are created |
Step 2 — How to handle existing translations? (only shown when Step 1 = Yes)
| Choice |
Result |
| Re-translate all entries |
Full retranslation of every entry in texts_english.xml; existing files are overwritten |
| Keep existing translations, only translate new entries |
Existing translations are preserved; only entries whose <LineId> is absent from the language file are translated and appended |
The incremental mode ("only translate new entries") is the recommended choice when you add new text entries to an existing mod — it is faster, uses less DeepL quota, and leaves your previously reviewed translations intact.
Tip: Pressing Escape on either prompt cancels the operation cleanly.
Configuration
Open Settings → Extensions → Anno Translation Tool Settings to configure:
| Setting |
Type |
Default |
Description |
anno117translator.deepLApiKey |
string |
"" |
Your personal DeepL API key |
anno117translator.batchDelay |
number |
250 |
Delay in ms after each DeepL request (increase if you hit rate limits) |
anno117translator.overwriteExisting |
boolean |
false |
Skip the overwrite prompt and always overwrite existing files (full retranslation) |
Tip: overwriteExisting: true bypasses both prompts and retranslates everything. Use this for a clean rebuild of all language files.
Both the Anno 117 and Anno 1800 mod localization formats are supported and auto-detected — no setting to switch:
<!-- Anno 117 -->
<ModOps>
<ModOp Add="//TextExport/Texts">
<Text>
<LineId>1000001</LineId>
<Text>English text to translate</Text>
</Text>
</ModOp>
</ModOps>
<!-- Anno 1800 -->
<ModOps>
<ModOp Type="add" Path="/TextExport/Texts">
<Text>
<GUID>1000001</GUID>
<Text>English text to translate</Text>
</Text>
</ModOp>
</ModOps>
Each <Text> entry is identified by its <LineId> (Anno 117) or <GUID> (Anno 1800) — both are recognized automatically, including within the same file. The incremental translation mode uses this ID to detect which entries are new. Entries without an ID (raw <ModOp> text content) are identified by the GUID and Path attributes of their parent <ModOp>.
License
MIT — free to use, modify, and distribute for personal or community projects.
Release Notes
1.2.0
- New: Anno 1800 localization files are now supported alongside Anno 117. The
<GUID>-based entry format used by Anno 1800 is auto-detected next to Anno 117's <LineId> format — no configuration required.
- New: Output file names and the language list now match the detected game — Anno 1800 uses
texts_chinese.xml/texts_taiwanese.xml instead of texts_simplified_chinese.xml/texts_traditional_chinese.xml and ships no texts_brazilian.xml, matching the real Anno 1800 loca folder.
- Changed: Notification and progress messages now say "Anno Translation Tool" instead of "Anno 117" to reflect dual-game support.
1.1.0
- New: Two-step overwrite prompt — first choose whether to overwrite existing files, then choose between a full retranslation and an incremental update (translate only new entries).
- New: Incremental translation mode — detects entries missing from an existing language file by
<LineId>, translates only those, and inserts them at the correct position inside the file with matching indentation.
- Fixed:
<LineId> numbers were incorrectly sent to DeepL for translation.
- Fixed: Whitespace and indentation in raw
<ModOp> text blocks are now preserved exactly as in the source file.
- Fixed: All text strings are now collected in a single DeepL batch per language instead of one API call per
<Text> block, significantly reducing translation time and API usage.
- Fixed: Pressing
Escape on any prompt now cancels the operation cleanly.
1.0.0
Initial release.