Skip to content

Allow users to change the site language from anywhere in the UI #558

Open
2 of 3 issues completed
Open

Description

@arbrandes

Description

Open edX ships in a large number of display languages, but a user's ability to switch between them depends on where they happen to be. The control exists in some parts of the platform and not others, in different places and different forms, and code that wants to offer a language change has no single supported way to ask for one. The result is that switching language is harder to find than it should be for a setting that changes every word on the screen.

This epic covers making language switching a consistent capability of the platform rather than a feature of particular pages.

What this looks like when it is done

A user can change the language they see from wherever they are. The control is in a predictable, prominent place, it is the same control everywhere, and reaching it never requires abandoning what they were in the middle of. It offers the languages the site actually has available and makes the current one obvious.

Changing language takes effect immediately and completely. The page they are looking at is in the new language, so is the next one, and so is the platform when they come back tomorrow. Right-to-left languages lay the interface out correctly. If the change cannot be completed, the user is told, rather than clicking a language and watching nothing happen.

For a signed-in user the choice belongs to their account, so it follows them to other devices and sessions and agrees with what their account settings report. Anyone can switch, signed in or not, and a choice made before signing in behaves predictably afterwards rather than being silently overwritten.

For anyone building on the platform, changing the current user's language is one supported call that does the whole job, so no application has to reassemble the steps for itself or risk leaving a user half-switched.

For operators, the control is theirs to place or remove, how it labels itself is theirs to choose, and the set of languages it offers reflects what they have actually made available on their site.

Out of scope

This is about changing the language a user sees, not about which languages exist or how good they are. Adding, releasing, and improving translations is handled elsewhere and is unchanged by this work.

Related work

Two pull requests proposed this capability and are useful as prior art, though neither was merged and the platform has since covered some of the same ground.

openedx/frontend-platform#786

openedx/frontend-component-header#586

openedx/frontend-component-footer#493

Activity

  1. added
    epicLarge unit of work, consisting of multiple tasks
    on Aug 7, 2026
  2. added theissue type on Aug 7, 2026
  3. removed
    epicLarge unit of work, consisting of multiple tasks
    on Aug 7, 2026
  4. added this to the Willow Cutoff milestone on Aug 7, 2026
  5. changed the title [-]Allow users to change the site language from anywhere in the UI[/-] [+]Make site language switching a shared, reachable capability[/+] on Aug 7, 2026
  6. changed the title [-]Make site language switching a shared, reachable capability[/-] [+]Allow users to change the site language from anywhere in the UI[/+] on Aug 7, 2026
  7. edschema commented on Aug 13, 2026

    @edschema

    Adding a couple quick sketches. Note: I think we should consider a couple things: 1. using the full language name where possible (ie dropdowns, etc). the i18n codes aren't really common knowledge for most people so I'd prefer either the full language or no label. and 2. removing the border from AvatarButton.

    We can consider how the top bar should appear in narrow viewports as well.

    Option A: Full language text
    Image

    Option B: Icons only
    Image

  8. moved this from Todo to In Progress in frontend-baseon Aug 20, 2026
  9. self-assigned this
    on Aug 20, 2026
  10. maguilarUXUI commented on Aug 26, 2026

    @maguilarUXUI

    I'd lean towards Option A's approach, showing language context (not just the icon) since it gives users immediate confirmation of the selected language without needing to click. For narrow viewports, we could abbreviate progressively instead of switching to icon-only: e.g. "English ⌄" on wider screens, "EN ⌄" as the viewport narrows, keeping the globe/context but adapting the label length to available space.

    This way we don't lose the "which language am I in" context Option B lacks, while still solving the space constraint you flagged for narrow viewports.

    What do you think @edschema ?

  11. edschema commented on Aug 26, 2026

    @edschema

    I agree, full language is best. I don't know if there is a clean abbreviation to use for a narrow viewport... We should consider collapsing to just the icon for small viewports (plus down chevron), since I think the other information on the top bar is much more important in common use cases, but whatever the team thinks I support!

  12. moved this from Todo to In Progress in Frontend Working Groupon Aug 28, 2026
  13. dcoa commented on Sep 7, 2026

    @dcoa

    Thank you @maguilarUXUI @edschema I am working on this and already apply the Option A for desktop. However, for mobile I feel on small screens (<576px) it is cramped even adding only the icon, and I would like to have your expert opinion here. I am using frontend-base test site that has the basic header.

    Image Image

    I has thinking what could be a possible solution. I have 2 ideas but I am not sure what gives better user experience or if there is a better solution.

    So the ideas are:

    1. Relocate the Sign up button inside the hamburger menu and only display Log in and the lang selector globe. For the authenticated user in this case I don't have any idea.
    Image
    1. Move the lang selector in the hamburger menu but instead of dropdown as a collapsible?
    Image
  14. maguilarUXUI commented on Sep 14, 2026

    @maguilarUXUI

    I think the language option could also live inside the menu once the screen size becomes too small to support that many options in the header. I also think it would be a good idea to place it near the top of the menu rather than at the end, so we don't sacrifice too much discoverability. What do you think? @dcoa @edschema

  15. edschema commented on Sep 18, 2026

    @edschema

    adding to the menu makes sense. I'd put it at the bottom of the menu because of frequency of daily use, but thats just my opinion!

  16. moved this from In Progress to In Review in Frontend Working Groupon Sep 22, 2026
  17. moved this from In Progress to In Review in frontend-baseon Sep 22, 2026
  18. arbrandes commented on Sep 22, 2026

    @arbrandes
    Author

    This is live in the master sandbox (https://master.openedx.io). Thanks @edschema and @maguilarUXUI for the design, and for the implementation, @dcoa!

    Please review!

    Image
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions