Page MenuHomePhabricator

Build a language selector component into MediaWiki core
Closed, ResolvedPublic8 Estimated Story Points

Description

We're planning to create a headless UI component to have the logic and functionality for the actual language selector element. The UI component will then be built on top of this headless component. This approach allow us to build different interfaces easily.

Here’s some exploration by @santhosh:
Demo: https://csb-2hd7s.netlify.app/
Code: https://codesandbox.io/s/renderless-language-selector-2hd7s

While we are still validating this approach, we will build a component into MediaWiki core and start using it in a couple of places where a language selector is needed inside MediaWiki.

We will review the possibility of moving the library out to a separate independent component.

Solution

Documentation for added components: https://www.mediawiki.org/wiki/Manual:LanguageSelector

Event Timeline

abi_ triaged this task as High priority.

Should we build it inside Codex?

Note the ULS language selector is also used in WDQS, which calls Wikidata's language search API.

Should we build it inside Codex?

Note the ULS language selector is also used in WDQS, which calls Wikidata's language search API.

This was something we had long discussions over and are still contemplating. In general our view was that a design system like Codex should only contain generic components like buttons, dropdown, dialogs etc that we then used to build the language selector. A language selector will be much more specific in nature with business logic built in.

Note the ULS language selector is also used in WDQS, which calls Wikidata's language search API.

It is using jquery.uls which is different from the ULS extension. Language search API will continue to work, we are just moving it from ULS extension to MediaWiki Core.

abi_ changed the task status from Open to In Progress.Nov 20 2025, 7:52 AM
abi_ moved this task from Ready for dev to In Progress on the LPL Essential (FY2025-26 Q2) board.

Change #1207929 had a related patch set uploaded (by Abijeet Patro; author: Abijeet Patro):

[mediawiki/core@master] Build and use LanguageSelector component in SpecialPageLanguage

https://gerrit.wikimedia.org/r/1207929

Change #1210647 had a related patch set uploaded (by Abijeet Patro; author: Abijeet Patro):

[mediawiki/extensions/Translate@master] AggregateGroupsSpecialPage: Use LookupLanguageSelector

https://gerrit.wikimedia.org/r/1210647

Change #1211624 had a related patch set uploaded (by Abijeet Patro; author: Abijeet Patro):

[mediawiki/core@master] Add a MultiselectLookupLanguageSelector component

https://gerrit.wikimedia.org/r/1211624

Change #1211663 had a related patch set uploaded (by Abijeet Patro; author: Abijeet Patro):

[mediawiki/extensions/Translate@master] WIP: Use MultiselectLookupLanguageSelector

https://gerrit.wikimedia.org/r/1211663

Change #1211707 had a related patch set uploaded (by Abijeet Patro; author: Abijeet Patro):

[mediawiki/core@master] Use LookupLanguageSelector component in SpecialPageLanguage

https://gerrit.wikimedia.org/r/1211707

Change #1207929 merged by jenkins-bot:

[mediawiki/core@master] Add LookupLanguageSelector component

https://gerrit.wikimedia.org/r/1207929

Change #1217624 had a related patch set uploaded (by Abijeet Patro; author: Abijeet Patro):

[mediawiki/core@master] Replace headless LangaugeSelector component with composable

https://gerrit.wikimedia.org/r/1217624

Change #1211707 merged by jenkins-bot:

[mediawiki/core@master] Use LookupLanguageSelector component in SpecialPageLanguage

https://gerrit.wikimedia.org/r/1211707

Change #1210647 merged by jenkins-bot:

[mediawiki/extensions/Translate@master] AggregateGroupsSpecialPage: Use LookupLanguageSelector

https://gerrit.wikimedia.org/r/1210647

We now have the LookupLanguageSelector on translatewiki.net enabled on Special:PageLanguage (needs permissions) and on Special:AggregateGroups.

We now have the LookupLanguageSelector on translatewiki.net enabled on Special:PageLanguage (needs permissions) and on Special:AggregateGroups.

When searching for a language, we temporarily see "No results" before the actual language list is shown.

Change #1211624 merged by jenkins-bot:

[mediawiki/core@master] Add MultiselectLookupLanguageSelector component

https://gerrit.wikimedia.org/r/1211624

Change #1211663 merged by jenkins-bot:

[mediawiki/extensions/Translate@master] PageTranslationSpecialPage: Use MultiselectLookupLanguageSelector

https://gerrit.wikimedia.org/r/1211663

Change #1219058 had a related patch set uploaded (by Abijeet Patro; author: Abijeet Patro):

[mediawiki/core@master] LanguageSelector: Change the way menu items are computed

https://gerrit.wikimedia.org/r/1219058

Change #1217624 merged by jenkins-bot:

[mediawiki/core@master] Replace headless LanguageSelector component with composable

https://gerrit.wikimedia.org/r/1217624

Change #1219058 merged by jenkins-bot:

[mediawiki/core@master] LanguageSelector: Change the way menu items are computed

https://gerrit.wikimedia.org/r/1219058

Change #1224532 had a related patch set uploaded (by Huei Tan; author: Huei Tan):

[mediawiki/core@master] Add placeholder property to language selector components

https://gerrit.wikimedia.org/r/1224532

Change #1224532 merged by jenkins-bot:

[mediawiki/core@master] Add placeholder property to language selector components

https://gerrit.wikimedia.org/r/1224532

I've documented the MultiselectLookupLanguageSelector and LookupLanguageSelector components we built on this MediaWiki page: https://www.mediawiki.org/wiki/Manual:LanguageSelector

abi_ moved this task from Need QA to Done on the LPL Essential (FY2025-26 Q2) board.
abi_ added a subscriber: hueitan.

I've documented the MultiselectLookupLanguageSelector and LookupLanguageSelector components we built on this MediaWiki page: https://www.mediawiki.org/wiki/Manual:LanguageSelector

Updated the documentation after discussion with @hueitan.

This task can be considered as done for now as the new selectors are operational in MediaWiki core: Special:PageLanguage and the Translate extension.

abi_ reopened this task as In Progress.Tue, Jan 13, 10:15 AM
abi_ closed this task as Resolved.
abi_ updated the task description. (Show Details)