Portal translations (beta) - Ghost Changelog

By popular demand, we’ve introduced translatable components for the membership and email features in Ghost.

Previously: Your entire site is in Spanish, but the Portal signup UI and login emails are in English.

Now: Show those elements in your chosen language so your members have a consistent experience.

The following areas of Ghost can now be translated:

  • Portal — the member signup, signin, and account management experience.
  • System emails — the signup/login emails sent to members.
  • Injected theme components — for example, “You need to be a paid member to read this post”.

Thanks to our generous open-source community, we already support 33 languages and counting 🎉

Turn translations on for your publication

To take Portal translations for a spin, enable the feature from the Labs menu, and ensure you have set the correct publication language from the General settings page. If your language is supported, you'll see translated content across the membership features of your site.

Call for translators

Want to help expand the number of translations available in Ghost? We’ve put together a complete tutorial for anyone who wants to get involved by adding new translations, or improving existing ones:

You can see which languages have already been added on GitHub, listed by locale codes. Read more and get community support on our forum.

Ghost(Pro) users can log in and start enjoying all of this right away! If you're a developer, self-hosting Ghost, you'll need to update to the latest version to get access to everything that's new.


This is great! Thanks a lot for making it happen, I’m sure it was a bit of a pain.

This is fantastic! That was the only hurdle for me to recommend Ghost to everyone.

Fantastic! This will certainly benefit non-English speakers globally. Thank you for this significant addition!

However, I’ve noticed a minor issue related to the Sign Up modal: the words “Free” or “Free membership” can’t be translated.


Upon reviewing the code, it appears that the function getFreeTierTitle is responsible for displaying either word:

export function getFreeTierTitle({site}) {
    if (hasOnlyFreeProduct({site})) {
        return 'Free membership';
    } else {
        return 'Free';

However, when this function is invoked in the following code, the returned string does not undergo translation:

 <h4 className="gh-portal-product-name">{getFreeTierTitle({site})}</h4>

I’m curious to know if this issue can be addressed or if there’s a specific reason preventing its resolution.


This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.