Multilingual Plugin 🌐

The Multilingual Plugin makes it possible for administrators of a multilingual forum to create a rich and comprehensible environment for all users and guests, even if they don’t speak the default or majority language of the forum.

:page_facing_up: Get the code

:raising_hand_woman: Request a feature

:bug: Report a bug

:point_right: This plugin is complex. Getting the backend right(ish) has been a journey, which is not yet complete. Please do not use it in production without testing it in a staging environment first.


Overview of features

The Multilingual Plugin extends the existing Discourse locale system to give you:

  1. an administrative interface for all languages used on your forum;

  2. a content language system which lets you and your users filter content on your forum by language;

  3. an integration with the Discourse Translator Plugin, which automates aspects of the content language system;

  4. the ability to translate category names, tags and other semi-static text on your forum;

  5. the ability to disable the use of existing interface languages on your forum;

  6. the ability to add custom interface languages (‘locales’) directly to your forum;

  7. enhanced guest language features including a guest interface language (‘locale’) switcher (as a footer bar or menu); and

  8. optional interface language and content language fields at signup (coming soon).

You can see an example of some of the plugin features by visiting thepavilion.io/categories in an incognito window and switching between locales using the footer interface language switcher.


:point_right: Please note

All of the above features work on top of the existing Discourse locale system, and work in conjunction with all features of that system (see the longer explaination of this here).

If you wish to add interface languages (‘locales’) to Discourse, the best way of doing this is following the steps outlined here: How to add a new language. You can also add a locale via a plugin, as described here.

The ability to do this via the admin interface in this plugin should only be considered after the existing Discourse-supported methods are exhausted. Any languages added to Discourse via the Discourse-supported methods will automatically be available for all features in this plugin.


Example screenshots

Admin interface

Semi-static text translations (and guest locale switcher)

Content language system

Content language Translator Plugin integration


Credits

This plugin was made possible by the support of the Wikimedia Foundation, with particular support from @Elena_Lappen nd @quimgil, who had significant input on the design of the feature-set.

For further discussion on the thinking behind this plugin see:

https://meta.discourse.org/t/how-to-structure-a-multilingual-community

39 Likes

Wow! You have been busy. :slight_smile: Nice work, @angus! Look forward to seeing examples of this in the wild. Let me know if you need somebody like me to look at it and give feedback.

One gap has been the lack of a feature to enable staff to improve translations of posts provided by the translate plugin - is that going to be part of this effort?

6 Likes

hm. I’m not rulling it out, but that is probably more in the scope of the Translate Plugin.

A somehwat related feature which I built at one point for something else is a little count icon that shows for users when the locale they’re using falls back to the default locale because a translation is missing. Click the icon and you see:

“x translations missing for this page. Help us translate them here: (link to discourse’s transifex).”

6 Likes

Fantastic work as usual Angus! I’ve been testing it on my site and have a couple of small issues and some questions.

Issues

  1. When you edit an existing topic the dropdown menu text does not follow the theme colors:

image

  1. The content language setting becomes very hard to use beyond a couple of languages due to the single line

Questions

  1. It seems as though many of our old topics are getting the language tag retroactively, which is desired, but only a handful at this point. Will a job run to apply the tag to all existing posts eventually? If not, is there a way to apply a language tag to all existing posts? Our site has been only English up to this point so I want all existing posts to have the en tag.
  2. When you have multiple languages set under content languages should you be able to filter by an individual language? Currently when I click one of the languages in the drop down nothing happens.
2 Likes

Thanks for the feedback David and giving this a shot. I’ve pushed a number of udpates that, among other things, fix the two problems you mention above.

Not yet. Currently only the posts translated by the Translator plugin will automatically get a content tag retroactively (if the translator plugin is enabled and the sync feature is enabled).

I can add such a job, but it’ll need to take a specific language as a parmeter and run on a defined scope. In addition to a ‘site wide’ scope, I could do it on a per-category, or per (non-content) tag basis (i.e. apply this content tag to all topics in this category or with this other tag). What would work for you?

No, the list is mean to just show you what your content languages are currently set at. Could you walk me through how you expect (or would like) this to behave?

1 Like

Thank you Angus, that fixed up my problems.

Ideally I would like to have the en tag applied to all existing posts that do not have a language tag, is that too broad? The problem is that if a user sets their content language to say English and Spanish, they will then only see the posts with the language tag, they will not see the thousands of posts that have no tag.

Because there is a list and they highlight when hovered, it gives the impression that they are clickable. My expectation in that case is that when you click on one of them your posts would be filtered by that language. I think this could be a useful feature to filter by language, but it’s not something I’m dying to have either.

On another note; I would love to have the option to move the language button. I have a lot of items in my nav bar already and it’s starting to get cluttered. Also the highlighted button looks out of place above the new topic button and it’s forcing the new topic button below. I suppose it’s not possible to move it to the beginning of the navbar, say before Latest? Or it could be floating in a corner like I have on my wordpress homepage https://naturephotographers.network , or it could go in the header similar to the option in the translate plugin.

I understand your reasoning for putting it in the navbar, because you are filtering similar to the other buttons, but the thing is that you would only set this once and then forget it. It’s not like you would be regularly filtering by different languages.

Thanks again, this plugin along with translate is a game changer.

2 Likes

To me, this is the desired behavior. Users must not see posts in a foreign language. If there is no post is their language, they must see no post.

However, as an option, a “bulk tagging” feature would be nice.

2 Likes

Agreed, the solution I proposed on Pavilion is if the default locale matches one of the selected topic languages, then show all posts without tags. But bulk tagging would be the better option.

@angus, I am not 100% sure if this is related to your plugin or a change in core, but there may be a bug I’ve come across. When I edit an existing post, make some changes and try to save I get this error None of the tags you selected can be used, there are no tags set except the en tag, and minimun number of tags required in a topic is set to 0. Any ideas?

2 Likes

Ran into another issue today Angus, I previously had an ig tag (short for instagram) that was deleted by the plugin to make way for the Igbo language. I assume there’s no way to get this back? I tried turning off the plugin in hopes that it may still be there, but alas it appears to be long gone. I know this a risk you take when testing plugins. You might want to add a warning that it will delete any tags with the same name.

2 Likes

I’ll pm you about that (It’s unlikely to be lost)

The other useful suggestions and feedback, I’ll be reviewing tomorrow.

2 Likes

My Godness! You are fantastic!
I mean, I really admire you. While I also hope this post will not distract people’s attention on your fabulous work.

6 Likes

Just a note that David and I have resolved this issue and restored the existing ig tags.

If there is a conflict between a pre-existing tag and a content language tag, the language won’t be available as a content language until the conflict is resolved. You’ll see this in your languages admin.

I’ll be addressing any other issues and feature requests in the coming week.

6 Likes

Dear Angus, is it possible to use only language switcher for guests?
I don’t need to use all functions of this system - only need to give the guest an ability to change language of the interface.

2 Likes

Each feature of the plugin operates indepedently.

Install the plugin and just turn on the locale switcher: Interface languages - Multilingual - Pavilion.

We currently use this plugin for this purpose on thepavilion.io.

3 Likes

Fantastic work @angus!

We installed the plugin, but now none of the content is visible to users anymore, even to staff. But, when you edit a category and try to delete it, we then get the following warning:

image

The only way to access a topic is then to follow the link on the warning message or know the URL of the topic. If we access the topic (RIO Paris) and then add a content language tag, say “english”, then it becomes visible as expected. Our guess is Multilingual plugin is working just fine. Only content associated with a tag is displayed. However, we find it misleading and confusing when people cannot see all the related topics without associating a language tag. We have thousands of topics previously published which are invisible. Is there a solution to swiftly attribute language tag to them as we cannot see a list at the moment?

Kindly please advise.

Edit: I solved my visibility issue by tagging all topics of categories certain categories according to the language they were supposed to use, in Rails:

  1. cd /var/discourse then ./launcher enter app
  2. getting the ids of the categories with rake categories:list
  3. If a category that should only contain topics in German is 245, then rake tags:bulk_tag_category["de",245]
1 Like

I get a blank page after
./launcher rebuild app

Found that this plugin causes it. Can’t open site and admin part.
I only activated Multilingual content, but ddin’t fill it.

How can I reset settings of this plugin in DB?

Does your.website.com/safe-mode work?

I deactivated this plugin now. Problems started with dissapearing of plugins list in admin panel. After that I tried to rebuild the app. But after rebuilding site didn’t open. Now it opens, but with this plugin deactivated.

@angus, can you check your plugin with a fresh version of Discourse?

in a safe mode without unofficial i see this page without list of plugins:

safe mode without all plugins:

Is it possible to reset settings of this plugin in database?

At that time no mode could solve the problem (safe, without inofficial, without all) - in all modes I didn’t see a list of plugins, installed in the system.

1 Like