A Discourse plugin that allows multiple localized versions of post content.

This plugin is a proof-of-concept : without the possibility to localize topic titles, it is not very useful.

How to use

In a post, use [lang=xx] blocks:

Hello World!
Bonjour monde !
Hallo Welt !


Hallo Welt !

Country codes must be 2-letter long (regions are not supported).

How it works

When rendering a post, the plugin seeks one [lang=xx] block to display. It will stop seeking once it has found:

  1. the block set for the language of the user (as selected by Discourse)
  2. the block set for the default language of the Discourse instance
  3. the first block




Discourse team, any idea how I could localize topic titles?

What I would like to do is this:

  • Define a language order, for example “en,fr,de”
  • Allow users to write topic titles like this: Hello World#Bonjour monde#Hallo Welt
  • When Discourse displays a topic title, modify it to only keep the right language

However, I found no client-side hook to modify the title. Any idea?


Did you consider handling titles in Rails? Default language is the existing one, while additional titles are custom topic fields. Then you change serializers to send the selected language title in the payload.


Great work!

I would second this. I think server-side is the way to go for titles.

I’m actually in the process of building a multilingual plugin (almost finished) that allows for translations of:

  1. Tags
  2. Category names
  3. Caegory descriptions

As well as an admin panel to administer languages and locales and a bunch of other things like user specific language content filters.


There could be scope to combine forces here.


Hello! I love this plugin and how simple it is and I feel that it’d be more useful if it supported decorating discourse pages (FAQ/Guidelines, TOS, Privacy Policy) since the headings get translated anyways. I’ve tried forking and expanding on it myself, but to tell you the truth I’m an absolute novice. Although I have a feeling that it needs to be rewritten around decorateWidget() instead of decorateCooked().

1 Like

Decorating a Discourse static page (FAQ/Guidelines, TOS, Privacy Policy) would be a nice feature. However, I’m not sure decorateWidget has a hook into static pages. Someone, any hint on this?