Translate email templates (invitation, password reset) to match UI languages #3034
waffii
started this conversation in
Feature Requests
Replies: 1 comment
|
+1 — and please include the resource whitelist OTP email ( Two concrete asks:
On OSS today the only way to localize + brand these is to patch the compiled |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Summary
The Pangolin web UI supports 14 languages including German, French, Spanish, Italian, Polish, etc. However, all emails sent by Pangolin (invitations, password resets, notifications) are currently hardcoded in English only — even when the recipient or the organization has selected a different UI language.
Motivation
This creates an inconsistent user experience: A self-hoster sets the entire dashboard to German for their team, but invitation emails still arrive in English. For non-English speakers, this is confusing and feels unprofessional.
Example of the current invitation email a German user receives:
The translation infrastructure already exists in the project for the UI, so it would be natural to extend it to email content.
Proposed Solution
Extract email subjects and bodies into i18n message files alongside the existing UI translations.
Determine email language by (in priority order):
Optionally allow self-hosters to override templates via volume mount or config option for fully custom branding/wording.
Affected emails
Environment
Thanks for the great work on Pangolin — happy to help test translations once the framework is in place!
Alternatives Considered
Workarounds I considered as a self-hoster:
Patching
/app/dist/server.mjsdirectly — the email texts are bundled inside this single compiled file. Possible with sed, but fragile: gets overwritten on every Pangolin update, and editing a bundled file risks breaking something.Volume-mounting a patched
server.mjs— same issue: needs to be re-patched on every release.Custom Docker image extending the official one — more sustainable, but a lot of overhead just to translate a few strings, and still breaks on UI/template changes upstream.
None of these scale: the proper place for translations is in the project itself, alongside the existing UI i18n files.
Additional Context
Translations the community could likely contribute quickly once the framework exists: German, French, Spanish, Italian, Dutch, Polish, Portuguese — all already present in the UI dropdown.
For reference, the strings I found bundled in
/app/dist/server.mjs(v1.18.3) include phrases like "You've been invited", "Accept Invitation", "invited you to join", and "This invite expires in 3 days" — these are the prime candidates for the first translation pass.Example: German translation for the invitation email
To make adoption easy, here is a ready-to-use German (Deutsch) translation of the current invitation email:
Subject:
You've been invited to join {organization}Sie wurden zu {organization} eingeladenBody:
Example: German translation for the password reset email
Subject:
Reset your passwordPasswort zurücksetzenBody (suggested):
Happy to refine these wordings or contribute additional language examples (the formal "Sie" form was used here, since it's the convention for SaaS-style B2B tools in German).
All reactions