Languages
Out of the box PDNS Manager speaks six languages: German, English, Serbian, Croatian, Bosnian and Hungarian. Each currently has 770 translation keys – as of v2.3.7 the set is fully synced across all languages.
Switching languages
The header has a language dropdown with flag emojis. Selection is persisted in localStorage, so it works without a login.
Set the default language
In .env:
DEFAULT_LANGUAGE=en Effective for any visitor who hasn't picked one yet (e.g. incognito or a fresh browser).
Fallback
If a key is missing in the chosen language, the UI falls back to English. Automatic and transparent – you never get an empty string.
In practice that almost never happens because the sync script (below) keeps all languages on the same key set. But it's a safety net for PRs.
Contribute a new language
- Copy
frontend/src/locales/en.json, e.g. toit.json. - Translate values, leave keys alone.
- In
frontend/src/i18n.jsadd an entry toLANGUAGES(code, label, flag emoji) and theresourcesblock. - Open a pull request.
Maintaining translations
frontend/src/locales/en.json is the source of truth. When you add new keys in a PR, before commit:
node scripts/sync-locales.mjs The script:
- Adds missing keys to all other languages with the English value (fallback).
- Removes keys no longer in
en.json. - Reports per file what was added/removed.
- Leaves existing translations alone.
What's translated, what isn't
- Translated: all UI strings (buttons, labels, hints, errors, mail templates).
- Not translated: technical identifiers like record types (
A,AAAA, …) – RFC terms stay language-neutral.