Page MenuHomePhabricator

Wikidata: inappropriate language prompts
Closed, ResolvedPublic

Description

Author: andy

Description:
I have {{#babel:en}} on my user page, and speak no languages other than English, but am constantly being prompted to add labels in "Scots" & "Cymraeg".


Version: master
Severity: normal
Whiteboard: u=dev c=frontend p=3

Details

Reference
bz61446

Event Timeline

bzimport raised the priority of this task from to Medium.Nov 22 2014, 2:59 AM
bzimport set Reference to bz61446.

Please check if [[d:Special:MyLanguageFallbackChain]] displays "en" only (I'm pretty sure it does).

I started digging into this issue and found the reason. But I'm afraid we can not fix this easily without breaking the experience for some users.

First, it's important to understand that there are two very different algorithms, one on the server (PHP) and one in the client (JavaScript).

The server (you can try this if you disable JavaScript) uses two sources:

  1. The language you had set in your preferences (or by using ?setlanguage=xx in the URL).
  2. All languages in the #babel box (including xx-0 languages, which is a different bug that should be fixed).

The current interface language (this can be different from your preference if you are using ?uselang=xx) is excluded.

The client relies on a function from the UniversalLanguageSelector (ULS) which uses other sources:

  1. Current interface language.
  2. Wiki's content language.
  3. Accept-Languages from the browser.
  4. User's previous selected languages.
  5. Language from the user's geolocation.

The first language (which always is the current interface language) is truncated. Max. 3 languages are displayed.

Result for anonymous users:

  1. The server never displays "other languages" since anonymous users neither have preferences nor #babel. ULS magic always happens.

Results for registered users:

  1. If a user does not have a #babel and the interface language is identical to his preferences (which should be the default in most cases) it's the same as for anonymous users.
  2. If the user temporary changed the interface language (?uselang=xx) only the preference language will be used in "other languages". ULS magic does not happen in this case.
  3. If the user does have a #babel with two or more languages this will be used. ULS magic never happens in this case.
  4. If there is only 1 language in the #babel box and it happens to be identical to the interface language it's basically ignored. The server does not display "other languages". ULS kicks in.

No. 5 is the problem. It's possible to fix it without breaking no. 1 by checking if the user is logged in. But no. 2 will break (which I consider important). Currently there is no way to distinguish between no. 2 and 5. JavaScript simply does not know if the user has a #babel box set or not.

Workaround: Delete the "uls-previous-languages" cookie. Check the languages in your browser settings and remove languages you don't want.

andy wrote:

I have as requested checked [[d:Special:MyLanguageFallbackChain]], while logged in; it lists only "en - English".

I have only English listed under the languages in my browser settings (in each of the browsers in which this occurs); there are no "Scots" or "Cymraeg" options for me to delete.

Thiemo: Let's talk about this quickly tomorrow.

(In reply to Andy Mabbett from comment #2)

there are no "Scots" or "Cymraeg" options for me to delete.

These are probably determined from your geolocation (or from the cookie, if you haven't deleted it).

I would love to fix this but this needs a bit of refactoring of the underlying PHP code to not break case no. 2 as described above. Not sure if this is worth the trouble at the moment since we have more important things to fix first.

Other workaround: Add a second language to your Babel box. Instead of multiple other languages only this single additional language will be displayed.

andy wrote:

(In reply to Thiemo Mättig from comment #4)

(In reply to Andy Mabbett from comment #2)

there are no "Scots" or "Cymraeg" options for me to delete.

These are probably determined from your geolocation (or from the cookie, if
you haven't deleted it).

I was responding specifically to your "Check the languages in your browser settings and remove languages you don't want."

(In reply to Andy Mabbett from comment #5)

I was responding specifically to your [...]

I know. :-) I wasn't sure if you know about the "Accept-Language" settings in your browser.

http://www.w3.org/International/questions/qa-lang-priorities.en

I think I have a good idea how to fix the described issue and started working on it.

Change 114486 had a related patch set uploaded by Thiemo Mättig (WMDE):
Don't display languages based on ULS heuristics if I have a Babel box

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

Change 114486 merged by jenkins-bot:
Don't display languages based on ULS heuristics if I have a Babel box

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