# How do you translate this into French?

**URL:** <https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779>\
**Category:** Site Operators\
**Created:** [April 13, 2026, 3:07am UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779 "2026-04-13T03:07:17Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![Djey34](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/djey34/32/9545_2.png) [@Djey34](https://discuss.openedx.org/u/Djey34)\
**Post date:** [April 13, 2026, 3:07am UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/1 "2026-04-13T03:07:17Z")

</div>

Hello everyone,

I’m running Open edX on Tutor 21.0.2 (Ubuntu 24.04) and I’m looking to fully localize the learner interface into French, specifically the MFEs (Learning, Learner Dashboard, Authoring).

What I’ve already done:

LANGUAGE\_CODE: fr in config.yml ✅

tutor config save --set LOCALE=fr ✅

tutor config save --set MFE\_LEARNING\_MICROFRONTEND\_LANGUAGE=fr ✅

tutor images build mfe (full build) ✅

Result: The Learner Dashboard is in French, but the course content (Discussion, Progress, Dates tabs, buttons, etc.) remains in English.

Question: What is the correct method for integrating French translations into the MFEs on Tutor 21?

Thanks in advance!

By the way, how do you integrate openbadge.coop badges with Open edX? 🙂

---

<div class="post-metadata">

**Author:** ![sarina](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/sarina/32/2308_2.png) [@sarina](https://discuss.openedx.org/u/sarina)\
**Post date:** [April 13, 2026, 2:54pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/2 "2026-04-13T14:54:37Z")

</div>

Hi @Djey34 and welcome to the forums!

Tagging @omar @brian.smith for the translations question.

For your second question - would you kindly make a new thread for that question, and remove it from this post?

---

<div class="post-metadata">

**Author:** ![Djey34](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/djey34/32/9545_2.png) [@Djey34](https://discuss.openedx.org/u/Djey34)\
**Post date:** [April 13, 2026, 3:36pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/3 "2026-04-13T15:36:44Z")

</div>

(post deleted by author)

---

<div class="post-metadata">

**Author:** ![mboisson](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/mboisson/32/7551_2.png) [@mboisson](https://discuss.openedx.org/u/mboisson)\
**Post date:** [April 14, 2026, 3:57pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/4 "2026-04-14T15:57:34Z")

</div>

Just based on my experience, the translation of OpenEdX to French is mostly good, but sometimes a bit clunky. There are odd strings here and there in the interface that are not translated.

I have also found that the translation to “fr” is often poor, and seems not really reviewed after the automatic translation. While I have corrected most of the strings in “fr-ca”, I did not want to correct the “fr” variation mostly because I don’t know all of the idiomatic expressions used in France which don’t make sense in Québec.

For switching language, we have implemented a language picker link, which basically changes the `openedx-language-preference` cookie. We have done this by adding a link in the footer:

> <https://github.com/calculquebec/tutor-plugins/blob/cq/ulmo.prod/theming/footer/footer.jsx#L55>

> <https://github.com/calculquebec/tutor-plugins/blob/cq/ulmo.prod/theming/footer/footer.jsx#L488>

---

<div class="post-metadata">

**Author:** ![mboisson](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/mboisson/32/7551_2.png) [@mboisson](https://discuss.openedx.org/u/mboisson)\
**Post date:** [April 14, 2026, 3:59pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/5 "2026-04-14T15:59:35Z")

</div>

As far as config, I think the only thing we have is the `LANGUAGE_CODE`:

> <https://github.com/calculquebec/edx/blob/prod/hieradata-common/edx.yaml#L8>

and we use the `ATLAS_REVISION` ”main” to get the changes I make from transifex every time we rebuild.

> <https://github.com/calculquebec/edx/blob/prod/hieradata-common/edx.yaml#L28>

---

<div class="post-metadata">

**Author:** ![Djey34](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/djey34/32/9545_2.png) [@Djey34](https://discuss.openedx.org/u/Djey34)\
**Post date:** [April 14, 2026, 8:15pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/6 "2026-04-14T20:15:03Z")

</div>

I downloaded `fr.json` files from the `openedx-translations` repository and placed them in the Tutor MFE build folder. I also rebuilt the MFE image with `--build-arg ATLAS_OPTIONS="--filter=fr"` but French translations are still not appearing in the course interface.

Is there a correct way to include French translations in the MFE build on Tutor 21?

---

<div class="post-metadata">

**Author:** ![mboisson](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/mboisson/32/7551_2.png) [@mboisson](https://discuss.openedx.org/u/mboisson)\
**Post date:** [April 14, 2026, 8:41pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/7 "2026-04-14T20:41:20Z")

</div>

As far as I know, you don’t have to download any files manually. There are tons of translation files, and they are all managed automatically by tutor and ATLAS.

---

<div class="post-metadata">

**Author:** ![mboisson](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/mboisson/32/7551_2.png) [@mboisson](https://discuss.openedx.org/u/mboisson)\
**Post date:** [April 14, 2026, 8:43pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/8 "2026-04-14T20:43:27Z")

</div>

Perhaps it would help if you post screenshots of what is still in English.

---

<div class="post-metadata">

**Author:** ![Djey34](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/djey34/32/9545_2.png) [@Djey34](https://discuss.openedx.org/u/Djey34)\
**Post date:** [April 15, 2026, 9:54am UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/9 "2026-04-15T09:54:44Z")

</div>

Hi @mboisson, here are screenshots showing what remains in English:

[https://imgur.com/a/aHz6JUO](https://imgur.com/a/aHz6JUO)

The main course tabs (Course, Progress, Dates, Discussion, Instructor) are all in English, as well as buttons (Resume course, Expand all, Previous, Next, Bookmark this page), the Progress page, the Dates page, and the entire Instructor Dashboard.

The course content itself displays correctly in French.

This seems to confirm that the Learning, Discussion, and Progress MFEs are not picking up French translations despite `LANGUAGE_CODE: fr` being set.

---

<div class="post-metadata">

**Author:** ![mboisson](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/mboisson/32/7551_2.png) [@mboisson](https://discuss.openedx.org/u/mboisson)\
**Post date:** [April 15, 2026, 12:35pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/11 "2026-04-15T12:35:10Z")

</div>

What happens if you switch your user’s language in your account page ?

Or when you set the `openedx-language-preference`cookie for the site through your browser (and then reload the page).

I believe some of the language is automatically detected based on the browser’s language.

Can you also try to change your browser’s language and see if it changes the language of those ?

These are just to try to diagnose the issue, not suggesting it’s an actual solution.

Oh, another thing to try is to set your `ATLAS_REVISION` to `main`. This is a tutor config option. Once it is set, you need to rebuild the images (mainly `openedx` and `mfe`), and use the `--no-cache` option, i.e. `tutor images build openedx mfe --no-cache` and then restart your instance, because the translations are pulled at build time.

I can confirm that on our instance, they do get translated:

 ![Capture d’écran, le 2026-04-15 à 08.32.12](https://us1.discourse-cdn.com/flex020/uploads/openedx/original/2X/3/3f41bd4548bb07ba2775bef18f2121c6d2d73f71.jpeg)

---

<div class="post-metadata">

**Author:** ![sarina](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/sarina/32/2308_2.png) [@sarina](https://discuss.openedx.org/u/sarina)\
**Post date:** [April 15, 2026, 12:45pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/12 "2026-04-15T12:45:52Z")

</div>

Setting your ATLAS\_REVISION to `main` is risky, though, because if strings have been removed from the upstream set of strings, they won’t be translated on your named release instance anymore.

`ATLAS_REVISION` (default: `"main"` for Tutor Main, or `"{{ OPENEDX_COMMON_VERSION }}"` if a named release is used)

if you’re using a named release branch, `{{ OPENEDX_COMMON_VERSION }}` will default to the specific tag you’re using (eg `release/ulmo.1`) so to get the most up-to-date `ulmo` strings you’re better off setting this to `release/ulmo`, _not_ to `main`. This is discussed more here - [[Bug][Documentation] Translation: "main" is not default, but "release/ulmo.1" - #5 by brian.smith](https://discuss.openedx.org/t/bug-documentation-translation-main-is-not-default-but-release-ulmo-1/18770/5) - but I’d refrain from using `main` if you’re on a named release branch.

---

<div class="post-metadata">

**Author:** ![mboisson](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/mboisson/32/7551_2.png) [@mboisson](https://discuss.openedx.org/u/mboisson)\
**Post date:** [April 15, 2026, 1:36pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/13 "2026-04-15T13:36:32Z")

</div>

Understanding that, we use `main` for our site because (at least historically), the translations done in named branches did not get propagated automatically to the future versions, so work had to be done over again in the next version.

---

<div class="post-metadata">

**Author:** ![sarina](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/sarina/32/2308_2.png) [@sarina](https://discuss.openedx.org/u/sarina)\
**Post date:** [April 15, 2026, 2:06pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/14 "2026-04-15T14:06:23Z")

</div>

> [@mboisson](#):
>
> the translations done in named branches did not get propagated automatically to the future versions

Hmm, that seems like a bit of an issue I hadn’t considered. @omar or @brian.smith has this been something we’ve considered in the Atlas tooling?

---

<div class="post-metadata">

**Author:** ![mboisson](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/mboisson/32/7551_2.png) [@mboisson](https://discuss.openedx.org/u/mboisson)\
**Post date:** [April 15, 2026, 2:34pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/15 "2026-04-15T14:34:35Z")

</div>

> [@sarina](#):
>
> Hmm, that seems like a bit of an issue I hadn’t considered. @omar or @brian.smith has this been something we’ve considered in the Atlas tooling?

I remember @omar messaging transifex about transferring translations between the various branches. Sadly, that seems to remain an issue to this day.

---

<div class="post-metadata">

**Author:** ![Djey34](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/djey34/32/9545_2.png) [@Djey34](https://discuss.openedx.org/u/Djey34)\
**Post date:** [April 16, 2026, 2:50pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/16 "2026-04-16T14:50:28Z")

</div>

**Update — Solution found! ✅**

Thanks to @mboisson and @brian.smith for the guidance!

The key was to use `fr-ca` instead of `fr`, combined with `ATLAS_REVISION="release/ulmo"` and a full rebuild with `--no-cache`.

Commands used:

```auto
tutor config save --set ATLAS_REVISION="release/ulmo"
tutor config save --set LANGUAGE_CODE="fr-ca"
tutor images build openedx mfe --no-cache
tutor local restart

```

I also changed the site language to French (Canada) in the Django Admin settings.

**Results:**

- ✅ Top menu — translated

- ✅ Discussion forum — translated

- ✅ Instructor Dashboard — translated

- ✅ Homepage — translated

- ⏳ Progress page — still partially in English

- ⏳ Right column (Course Tools) — still partially in English

- Thanks again for the help! 🙏

---

<div class="post-metadata">

**Author:** ![brian.smith](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/brian.smith/32/4259_2.png) [@brian.smith](https://discuss.openedx.org/u/brian.smith)\
**Post date:** [April 16, 2026, 3:22pm UTC](https://discuss.openedx.org/t/how-do-you-translate-this-into-french/18779/17 "2026-04-16T15:22:00Z")

</div>

> [@sarina](#):
>
> > [@mboisson](#):
> >
> > the translations done in named branches did not get propagated automatically to the future versions
> 
> Hmm, that seems like a bit of an issue I hadn’t considered. @omar or @brian.smith has this been something we’ve considered in the Atlas tooling?

This isn’t something that can currently (or should ever) be done on the Atlas side of things. I know @omar has been working with Transifex to improve this in a couple ways:

- Shared translation memory between projects: We currently have a different transifex “project” for each release, so getting those to share “translation memory” and get identical translations for identical strings to make it into the other projects.
- Transifex branching: This one I understand less, but it seems like it would remove some of the complexities that stem from having separate projects (each release would be a transifex branch instead).

There have also been changes that have made it so the “transifex AI” can mark translations as reviewed (I think based on them being reviewed in other projects?) That I also don’t have a full understanding of. I do know it has resulted in me needing to go in and fix a bunch of strings across a bunch of transifex projects after seeing 100+ failing PRs on the `openedx-translations` repo because broken strings marked as reviewed in one project made their way into others.
