In this topic, we will walk you through the Content Localization features and how to enable them. The features are split into two parts: What is available by default in Discourse; and Discourse AI for automatic translations. For quick access to the relevant sections, use the wiki headings
Localizing Your Community’s Content
An updated version of Discourse (3.5.0.beta7-dev
) gives you access to several localization features available for configuration at:
<your-site-url>/admin/site_settings/category/content_localization
Getting information on your users
Firstly, it is good to get some information on your community. The following data explorer query can give you an idea of how many users may have set their locale in /my/preferences/interface
SELECT locale, count(*) as count
FROM users
WHERE (locale IS NOT null AND locale <> '')
GROUP BY locale
ORDER BY count DESC
Setting locales that your community supports
With the information above, we are now more informed about which locales your community should support.
In <your-site-url>/admin/site_settings/category/content_localization
, you can select locales to support.
Content localization enabled
- turns on the feature that replaces original written user content with localized content. Read on for auto and manual modes of localizing.Content localization supported locales
- the list of languages your site supportsContent localization anon language switcher
- covered just below
Enabling the subsequent setting Content localization anon language switcher
also allows you to make your community more accessible to non-logged-in users by showing the list of languages you’ve chosen in the list of supported locales:
Viewing localized content
For viewers of localized content (all site visitors), they may cursor over the indicator next to the post’s date to view the original language of the post. This indicator only shows up if the post is not in their language.
If a user wishes to only see original content, they may use the toggle above the topic timeline to disable localizations for the whole site.
Automatic translations with Discourse AI 
Discourse AI are the vitamins essential for the localization feature, and takes away the need to do manual translations.
As an admin, you’d want to head to our new AI features section for Translation.
To cover some important settings and recommendations:
AI translation model
-We highly recommend setting a quota to the LLM you choose for the translation model.
AI translation backfill hourly rate
- this setting is hidden in the UI and defaults to 0.Automatic translation will not begin if this value is 0. Assuming the rate is 50, your site will translate 50 posts, 50 topics, and 50 categories per hour, to the locales you have set in
Content localization supported locales
. Keep this to a low number when starting out.AI translation backfill max age days
- defaults to 5. This means topics and posts older than 5 days will not be translated. You may increase this to a large number to translate all topics and posts.AI translation backfill limit to public content
- defaults totrue
. This prevents PMs and content in private categories from being sent to the LLM. When set tofalse
, group PMs, and private categories will be included in translations. PMs between individuals will not be translated.AI translation max post length
- defaults to 10000. This is a safeguard and prevents posts above a certain length from being translated.AI translation post raw translator persona
(and other personas) - In more formal communities, admins may choose to create their own persona. This allows you to set a prompt that is more fine-tuned to the language or vocabulary you prefer.
You can refer to AI bot - Personas on how to configure suitable personas and fine-tune prompts for each function.
Manual localization
As localization is a core feature in Discourse, we provide the ability for you to fill in and edit localizations manually in the event automatic translations with Discourse AI is not available.
By default, admins and moderators are set up to edit localizations.
Currently, we have post content, topic title, and category name and category description localizations. Tags are not supported yet, but will be in the near future. Subsequent sections below will show you how they work.
Category localization
Localized categories are visible in the following areas, with both category name and description localized:
Places where categories are localized 📸
- Homepage, sidebar, and category dropdown
- Categories page
- A specific category with subcategories
As an admin, you should be able to access category settings as usual, and find the new “Localizations” nav item on the left.
Topic and Post localization
From the screenshots above in Category localization, you may have noticed topic titles and excerpts being localized.
There are some pre-requisite settings
- Ensure your user is in
content localization allowed groups
- Add
addTranslation
in site setting forpost menu
. This allows theto show up in the post menu for users in
content localization allowed groups
Once again, the list of localizable languages is in the Content localization supported locales
setting mentioned above.
Editing a localized post
In the event the user might be viewing a localized post, and wants to edit the post, a dialog will appear to ask which version they would prefer to edit:
The appropriate composer will appear after deciding.
FAQ
I’ve set things up, but automatic translation is still not working for me
Confirm if you’ve these set up
Content localization supported locales
has at least one languageContent localization enabled
isAi translation enabled
isAi translation model
is set to a model that is working (you can Run test on the LLM)Ai translation max age days
is not 0ai_translation_backfill_hourly_rate
is more than 12. This is a hidden site setting which requires console access.
If all else fails, you can enable SiteSetting.ai_translation_verbose_logs
.
Is every post getting translated?
If AI translation backfill limit to public content
is , all posts in public categories except for Bot (user id < 0) posts will be translated.