Extension to translate system emails (i18n)

You can do a lot with Directus, but it is somehow not possible to translate system emails (user invitation, user registration, password reset).
You can create a custom template and include it into the email templates directory, but for proper internationalization, you will need to use different templates depending on the user’s language.

I create a custom extension that integrates a simple way to add this functionality.


:gear: How it works

  • The extension is a hook, which filters all emails sent by Directus.
  • When we are dealing with a system email, it would check for the user’s language.
  • If this language is not the default language, it would look for an email template with a language suffix.
  • Additionally (in all cases), it looks for a subject in a respective environment variable I18N_EMAIL_SUBJECTS.

Warning:
When you are using this extension, you need to make sure that for every system email type and used language, you have a liquid template set up.
If a template is missing, emails might not get sent.




:page_with_curl: Example

Let’s assume…

  • you are offering :united_states: English (default) and :germany: German as potential languages.
  • you are not offering user invites and have no user registration DOI.
  • so, we only need to translate the password-reset emails.
  1. You would create a template password-reset (for English) and a template password-reset-de (for German).
  2. You would add an environment variable I18N_EMAIL_SUBJECTS with content {"de":{"password-reset": "Passwort zurücksetzen"}}.

If you would now add :spain: Spanish:

  1. add a template password-reset-es
  2. adjust the env var to something like {"de":{"password-reset": "Passwort zurücksetzen"}, "es":{"password-reset": "Restablecer contraseña"}}

Simple as that.




:hammer_and_wrench: How to install it

As you might know, there are multiple way to install an extension.
But just to point them out again:

:rabbit_face: Directus Marketplace

Simply install it via the marketplace with 1 click.

Mind that in order to see this in the (self-hosted and Enterprise Cloud) Directus Marketplace, you would need to allow non-sandboxed extensions (see docs).

:package: npm Registry

Use the code from npm via…

npm install directus-extension-system-email-i18n

or

pnpm install directus-extension-system-email-i18n

… and include this into your Docker build flow.

:hand_with_fingers_splayed: Manually via the Extensions Directory

  1. Download the code.
  2. Build it via npm ci && npm run build.
  3. Upload the files to your extensions directory.

:partying_face: That’s it

Tell me what you think.
It’s nothing special, but solves a big problem (people in the US often ignore :wink:).

Have a nice day!

4 Likes

Thanks @jekuer for sharing and for including a detailed run down of the options to install :saluting_face: this is a great example of something added that makes a big difference to those who need it, love to see it!

1 Like