User:SPQRobin/Page language

As part of Extension:Translate/Usability improvements 2014.


 * PCL = page content language

What
Backend basics:
 * Assumption 1: PCL should be defined in the database.
 * Assumption 2: PCL is a property of a page, not of a specific revision.
 * The value is obviously a language code.

Other backend:
 * How to handle the default value? Should we include a selector option "Use default language", which would be what getPageLanguage returns normally?
 * How does it interact with other PCL definitions, especially the hook (by which extensions, like Translate, can alter the PCL. Do they need to be able to disable setting the PCL through the selector?
 * A way to define the PCL as the user language ($wgLang)? E.g. value "user" in DB, instead of a language code.

Maybe a selector with options
 * Use default page content language
 * Use user interface language
 * (languages...)

Implementation
I have a basic idea currently:
 * Having a SQL entry for a page. I think it should be possible to change it in a particular revision.
 * The language if not set should be the default wiki language.
 * There should be an API method also for getting the page language.

Edge cases/doubts:
 * What to do if the page is a /fr subpage and user sets it as "de" language?
 * What to do if a PCL was already set e.g. by an extension like Translate?

GUI

 * Setting the value by using something similar to the Universal Language Selector. --User:Kunalgrover05

Progress

 * Discarded the idea of page_props- Aim is to build a system which is a fundamental property of the page similar to ID.
 * Understood the working of databases in core.
 * Set up a new field in the database in the pages table. Working only with MySQL currently.
 * Made a function to update the value of the page language for all the existing Wiki pages(which is currently set as the default wiki language) in the table.
 * Created a special page to change language for a page- initial idea for implementation.
 * Submitted the first patch for implementation of PageLanguageSelector
 * Added code for getting the page language using API
 * Added code for logging into DB and for Special:Log
 * Changing language redirects to the page it changes language for.
 * Added options on page if user wants to use default wiki language.
 * Added patch to make it compatible with MySQL|Postgres|SQLite|Mssql|Oracle

First patch

 * Finished the first patch- Waiting to be merged.
 * Adds DB part for new and existing wikis.
 * Minor changes in Title.php to read language from DB
 * Logged in users can change language.
 * Special:PageLanguage to set the language for a page.
 * Added logging
 * Links from ?action=info page to subpage of Special:PageLanguage with prefilled forms if the user has necessary permissions
 * Made the feature optional using a configuration variable. Made the SpecialPage's and also logging part's visibility dependent on it.

Shortcomings in first patch

 * Reading page language from API doesn't fetch from DB
 * Page language can be set for all pages, should be restricted to a few.
 * No API module to match the feature.

Current tasks

 * SPQRobin is working on backend for making the code for pageLanguage more structured by integrating PageLanguage and PageViewLanguage into a single class. Also adding a variable which checks whether the language is changeable.
 * One important thing to fix is when should the language load from DB, Currently only if a title is loaded by ID or by Database row, we get the page language from DB. So, we have 2 options:
 * Make the page language load from DB or Cache in getPageLanguage function
 * Use the existing code and if the getPageLanguage function is called without any DB calls(eg from API), then load from DB.

Gerrit Patches
https://gerrit.wikimedia.org/r/#/c/135312/

https://gerrit.wikimedia.org/r/#/c/135381/

https://gerrit.wikimedia.org/r/#/c/139669/

Further tasks

 * Make it compatible with the useDB variable in SPQRobin's patch.
 * Change interface from XML type selector to Universal Language selector.