Merge "Revert "ApiSandbox: Display params as JSON on request page""
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sun, 22 Jan 2017 18:38:45 +0000 (18:38 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 22 Jan 2017 18:38:46 +0000 (18:38 +0000)
1  2 
languages/i18n/en.json
languages/i18n/qqq.json
resources/Resources.php
resources/src/mediawiki.special/mediawiki.special.apisandbox.js

diff --combined languages/i18n/en.json
        "searcharticle": "Go",
        "history": "Page history",
        "history_short": "History",
 +      "history_small": "history",
        "updatedmarker": "updated since my last visit",
        "printableversion": "Printable version",
        "permalink": "Permanent link",
        "saveprefs": "Save",
        "restoreprefs": "Restore all default settings (in all sections)",
        "prefs-editing": "Editing",
 -      "rows": "Rows:",
 -      "columns": "Columns:",
        "searchresultshead": "Search",
        "stub-threshold": "Threshold for stub link formatting ($1):",
        "stub-threshold-sample-link": "sample",
        "recentchanges-legend-unpatrolled": "{{int:recentchanges-label-unpatrolled}}",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Show",
 +      "rcfilters-activefilters": "Active filters",
 +      "rcfilters-search-placeholder": "Filter recent changes (browse or start typing)",
 +      "rcfilters-invalid-filter": "Invalid filter",
 +      "rcfilters-filterlist-title": "Filters",
 +      "rcfilters-filterlist-noresults": "No filters found",
 +      "rcfilters-filtergroup-registration": "User registration",
 +      "rcfilters-filter-registered-label": "Registered",
 +      "rcfilters-filter-registered-description": "Logged-in editors.",
 +      "rcfilters-filter-unregistered-label": "Unregistered",
 +      "rcfilters-filter-unregistered-description": " Editors who aren’t logged in.",
 +      "rcfilters-filtergroup-authorship": "Edit authorship",
 +      "rcfilters-filter-editsbyself-label": "Your own edits",
 +      "rcfilters-filter-editsbyself-description": "Edits by you.",
 +      "rcfilters-filter-editsbyother-label": "Edits by others",
 +      "rcfilters-filter-editsbyother-description": "Edits created by other users (not you).",
 +      "rcfilters-filtergroup-userExpLevel": "Experience level (for registered users only)",
 +      "rcfilters-filter-userExpLevel-newcomer-label": "Newcomers",
 +      "rcfilters-filter-userExpLevel-newcomer-description": "Fewer than 10 edits and 4 days of activity.",
 +      "rcfilters-filter-userExpLevel-learner-label": "Learners",
 +      "rcfilters-filter-userExpLevel-learner-description": "More days of activity and edits than \"Newcomers\" but fewer than \"Experienced users\".",
 +      "rcfilters-filter-userExpLevel-experienced-label": "Experienced users",
 +      "rcfilters-filter-userExpLevel-experienced-description": "More than 30 days of activity and 500 edits.",
 +      "rcfilters-filtergroup-automated": "Automated contributions",
 +      "rcfilters-filter-bots-label": "Bot",
 +      "rcfilters-filter-bots-description": "Edits made by automated tools.",
 +      "rcfilters-filter-humans-label": "Human (not bot)",
 +      "rcfilters-filter-humans-description": "Edits made by human editors.",
 +      "rcfilters-filtergroup-significance": "Significance",
 +      "rcfilters-filter-minor-label": "Minor edits",
 +      "rcfilters-filter-minor-description": "Edits the author labeled as minor.",
 +      "rcfilters-filter-major-label": "Non-minor edits",
 +      "rcfilters-filter-major-description": "Edits not labeled as minor.",
 +      "rcfilters-filtergroup-changetype": "Type of change",
 +      "rcfilters-filter-pageedits-label": "Page edits",
 +      "rcfilters-filter-pageedits-description": "Edits to wiki content, discussions, category descriptions....",
 +      "rcfilters-filter-newpages-label": "Page creations",
 +      "rcfilters-filter-newpages-description": "Edits that make new pages.",
 +      "rcfilters-filter-categorization-label": "Category changes",
 +      "rcfilters-filter-categorization-description": "Records of pages being added or removed from categories.",
 +      "rcfilters-filter-logactions-label": "Logged actions",
 +      "rcfilters-filter-logactions-description": "Administrative actions, account creations, page deletions, uploads....",
        "rcnotefrom": "Below {{PLURAL:$5|is the change|are the changes}} since <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
        "rclistfrom": "Show new changes starting from $2, $3",
        "rcshowhideminor": "$1 minor edits",
        "uncategorizedimages-summary": "",
        "uncategorizedtemplates": "Uncategorized templates",
        "uncategorizedtemplates-summary": "",
 +      "uncategorized-categories-exceptionlist": " # Contains a list of categories, which shouldn't be mentioned on Special:UncategorizedCategories. One per line, starting with \"*\". Lines starting with another character (including whitespaces) are ignored. Use \"#\" for comments.",
        "unusedcategories": "Unused categories",
        "unusedcategories-summary": "",
        "unusedimages": "Unused files",
        "apisandbox-sending-request": "Sending API request...",
        "apisandbox-loading-results": "Receiving API results...",
        "apisandbox-results-error": "An error occurred while loading the API query response: $1.",
-       "apisandbox-request-params-json": "JSON parameters:",
        "apisandbox-request-url-label": "Request URL:",
        "apisandbox-request-time": "Request time: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Correct token and resubmit",
        "changecontentmodel-emptymodels-title": "No content models available",
        "changecontentmodel-emptymodels-text": "The content on [[:$1]] cannot be converted to any type.",
        "log-name-contentmodel": "Content model change log",
 -      "log-description-contentmodel": "Events related to the content models of a page",
 +      "log-description-contentmodel": "This page lists changes to the content model of pages, and pages that were created with a content model other than the default.",
        "logentry-contentmodel-new": "$1 {{GENDER:$2|created}} the page $3 using a non-default content model \"$5\"",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|changed}} the content model of the page $3 from \"$4\" to \"$5\"",
        "logentry-contentmodel-change-revertlink": "revert",
        "sorbs": "DNSBL",
        "sorbsreason": "Your IP address is listed as an open proxy in the DNSBL used by {{SITENAME}}.",
        "sorbs_create_account_reason": "Your IP address is listed as an open proxy in the DNSBL used by {{SITENAME}}.\nYou cannot create an account.",
 +      "softblockrangesreason": "Anonymous contributions are not allowed from your IP address ($1). Please log in.",
        "xffblockreason": "An IP address present in the X-Forwarded-For header, either yours or that of a proxy server you are using, has been blocked. The original block reason was: $1",
        "cant-see-hidden-user": "The user you are trying to block has already been blocked and hidden.\nSince you do not have the hideuser right, you cannot see or edit the user's block.",
        "ipbblocked": "You cannot block or unblock other users because you are yourself blocked.",
        "feedback-useragent": "User agent:",
        "searchsuggest-search": "Search {{SITENAME}}",
        "searchsuggest-containing": "containing...",
 -      "api-error-autoblocked": "Your IP address has been blocked automatically, because it was used by a blocked user.",
 -      "api-error-badaccess-groups": "You are not permitted to upload files to this wiki.",
        "api-error-badtoken": "Internal error: Bad token.",
 -      "api-error-blocked": "You have been blocked from editing.",
 -      "api-error-copyuploaddisabled": "Uploading by URL is disabled on this server.",
 -      "api-error-duplicate": "There {{PLURAL:$1|is another file|are some other files}} already on the site with the same content.",
 -      "api-error-duplicate-archive": "There {{PLURAL:$1|was another file|were some other files}} already on the site with the same content, but {{PLURAL:$1|it was|they were}} deleted.",
 -      "api-error-empty-file": "The file you submitted was empty.",
        "api-error-emptypage": "Creating new, empty pages is not allowed.",
 -      "api-error-fetchfileerror": "Internal error: Something went wrong while fetching the file.",
 -      "api-error-fileexists-forbidden": "A file with name \"$1\" already exists, and cannot be overwritten.",
 -      "api-error-fileexists-shared-forbidden": "A file with name \"$1\" already exists in the shared file repository, and cannot be overwritten.",
 -      "api-error-file-too-large": "The file you submitted was too large.",
 -      "api-error-filename-tooshort": "The filename is too short.",
 -      "api-error-filetype-banned": "This type of file is banned.",
 -      "api-error-filetype-banned-type": "$1 {{PLURAL:$4|is not a permitted file type|are not permitted file types}}. Permitted {{PLURAL:$3|file type is|file types are}} $2.",
 -      "api-error-filetype-missing": "The filename is missing an extension.",
 -      "api-error-hookaborted": "The modification you tried to make was aborted by an extension.",
 -      "api-error-http": "Internal error: Unable to connect to server.",
 -      "api-error-illegal-filename": "The filename is not allowed.",
 -      "api-error-internal-error": "Internal error: Something went wrong with processing your upload on the wiki.",
 -      "api-error-invalid-file-key": "Internal error: File was not found in temporary storage.",
 -      "api-error-missingparam": "Internal error: Missing parameters on request.",
 -      "api-error-missingresult": "Internal error: Could not determine if the copy succeeded.",
 -      "api-error-mustbeloggedin": "You must be logged in to upload files.",
 -      "api-error-mustbeposted": "Internal error: Request requires HTTP POST.",
 -      "api-error-noimageinfo": "The upload succeeded, but the server did not give us any information about the file.",
 -      "api-error-nomodule": "Internal error: No upload module set.",
 -      "api-error-ok-but-empty": "Internal error: No response from server.",
 -      "api-error-overwrite": "Overwriting an existing file is not allowed.",
 -      "api-error-ratelimited": "You're trying to upload more files in a short space of time than this wiki allows.\nPlease try again in a few minutes.",
 -      "api-error-stashfailed": "Internal error: Server failed to store temporary file.",
        "api-error-publishfailed": "Internal error: Server failed to publish temporary file.",
 -      "api-error-stasherror": "There was an error while uploading the file to stash.",
 -      "api-error-stashedfilenotfound": "The stashed file was not found when attempting to upload it from the stash.",
 -      "api-error-stashpathinvalid": "The path at which the stashed file should have been found was invalid.",
 -      "api-error-stashfilestorage": "There was an error while storing the file in the stash.",
 -      "api-error-stashzerolength": "The server could not stash the file, because it had zero length.",
 -      "api-error-stashnotloggedin": "You must be logged in to save files in the upload stash.",
 -      "api-error-stashwrongowner": "The file you were attempting to access in the stash does not belong to you.",
 -      "api-error-stashnosuchfilekey": "The file key you were attempting to access in the stash does not exist.",
 -      "api-error-timeout": "The server did not respond within the expected time.",
 -      "api-error-unclassified": "An unknown error occurred.",
 -      "api-error-unknown-code": "Unknown error: \"$1\".",
 -      "api-error-unknown-error": "Internal error: Something went wrong when trying to upload your file.",
 +      "api-error-stashfailed": "Internal error: Server failed to store temporary file.",
        "api-error-unknown-warning": "Unknown warning: \"$1\".",
        "api-error-unknownerror": "Unknown error: \"$1\".",
 -      "api-error-uploaddisabled": "Uploading is disabled on this wiki.",
 -      "api-error-verification-error": "This file might be corrupt, or have the wrong extension.",
 -      "api-error-was-deleted": "A file of this name has been previously uploaded and subsequently deleted.",
        "duration-seconds": "$1 {{PLURAL:$1|second|seconds}}",
        "duration-minutes": "$1 {{PLURAL:$1|minute|minutes}}",
        "duration-hours": "$1 {{PLURAL:$1|hour|hours}}",
        "pagelang-language": "Language",
        "pagelang-use-default": "Use default language",
        "pagelang-select-lang": "Select language",
 +      "pagelang-reason": "Reason",
        "pagelang-submit": "Submit",
 +      "pagelang-nonexistent-page": "The page $1 does not exist.",
 +      "pagelang-unchanged-language": "The page $1 is already set to language $2.",
 +      "pagelang-unchanged-language-default": "The page $1 is already set to the wiki's default content language.",
 +      "pagelang-db-failed": "The database failed to change the page language.",
        "right-pagelang": "Change page language",
        "action-pagelang": "change the page language",
        "log-name-pagelang": "Language change log",
        "sessionprovider-nocookies": "Cookies may be disabled. Ensure you have cookies enabled and start again.",
        "randomrootpage": "Random root page",
        "log-action-filter-block": "Type of block:",
 -      "log-action-filter-contentmodel": "Type of contentmodel modification:",
 +      "log-action-filter-contentmodel": "Type of content model change:",
        "log-action-filter-delete": "Type of deletion:",
        "log-action-filter-import": "Type of import:",
        "log-action-filter-managetags": "Type of tag management action:",
        "log-action-filter-block-block": "Block",
        "log-action-filter-block-reblock": "Block modification",
        "log-action-filter-block-unblock": "Unblock",
 -      "log-action-filter-contentmodel-change": "Change of Contentmodel",
 -      "log-action-filter-contentmodel-new": "Creation of page with non-standard Contentmodel",
 +      "log-action-filter-contentmodel-change": "Change of content model",
 +      "log-action-filter-contentmodel-new": "Creation of page with non-default content model",
        "log-action-filter-delete-delete": "Page deletion",
        "log-action-filter-delete-delete_redir": "Redirect overwrite",
        "log-action-filter-delete-restore": "Page undeletion",
        "usercssispublic": "Please note: CSS subpages should not contain confidential data as they are viewable by other users.",
        "restrictionsfield-badip": "Invalid IP address or range: $1",
        "restrictionsfield-label": "Allowed IP ranges:",
 -      "restrictionsfield-help": "One IP address or CIDR range per line. To enable everything, use<br><code>0.0.0.0/0</code><br><code>::/0</code>",
 +      "restrictionsfield-help": "One IP address or CIDR range per line. To enable everything, use:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revision $1",
        "pageid": "page ID $1"
  }
diff --combined languages/i18n/qqq.json
                        "Ата",
                        "Matěj Suchánek",
                        "Chaduvari",
 -                      "MarcoAurelio"
 +                      "MarcoAurelio",
 +                      "Joao Xavier",
 +                      "Winstonyin"
                ]
        },
        "sidebar": "{{notranslate}}",
        "searcharticle": "Button description in the search menu displayed on every page. The \"Search\" button is {{msg-mw|Searchbutton}}.\n{{Identical|Go}}",
        "history": "{{Identical|Page history}}",
        "history_short": "Text used on the history tab.\n\n{{Identical|History}}",
 +      "history_small": "Uncapitalized version of {{msg-mw|History short}}.\n\n{{Identical|History}}",
        "updatedmarker": "Displayed in the page history (of a page you are [[Special:Watchlist|watching]]), when the page has been edited since the last time you visited it. This feature is used if [[mw:Manual:$wgShowUpdatedMarker|$wgShowUpdatedMarker]] is enabled.",
        "printableversion": "Display name for link in wiki menu that leads to a printable version of a content page. Example: see one but last menu item on [[Main Page]].\n\nSee also:\n* {{msg-mw|Printableversion}}\n* {{msg-mw|Accesskey-t-print}}\n* {{msg-mw|Tooltip-t-print}}\n{{Identical|Printable version}}",
        "permalink": "Display name for a permanent link to the current revision of a page. When the page is edited, permalink will still link to this revision. Example: Last menu link on [[{{MediaWiki:Mainpage}}]]\n\nSee also:\n* {{msg-mw|Permalink}}\n* {{msg-mw|Accesskey-t-permalink}}\n* {{msg-mw|Tooltip-t-permalink}}\n{{Identical|Permalink}}",
        "sig_tip": "This is the text that appears when you hover the mouse over the second key from the right on the edit toolbar.\n{{Identical|Signature with timestamp}}",
        "hr_tip": "This is the text that appears when you hover the mouse over the first button on the right on the edit toolbar.",
        "summary": "The Summary text beside the edit summary field\n\nSee also:\n* {{msg-mw|Subject}}\nSee also:\n* {{msg-mw|Accesskey-summary}}\n* {{msg-mw|Tooltip-summary}}\n{{Identical|Summary}}",
 -      "subject": "Used as label for input box in the EditPage page.\n\nSee also:\n* {{msg-mw|Summary}}\n{{Identical|Subject}}",
 +      "subject": "Used as label for the section title input box when adding a new section on a talk page.\n\nSee also:\n* {{msg-mw|Summary}}\n{{Identical|Subject}}",
        "minoredit": "Text above Save page button in editor\n\nSee also:\n* {{msg-mw|Minoredit}}\n* {{msg-mw|Accesskey-minoredit}}\n* {{msg-mw|Tooltip-minoredit}}",
        "watchthis": "Text of checkbox above {{msg-mw|Showpreview}} button in editor.\n\nSee also:\n* {{msg-mw|Watchthis}}\n* {{msg-mw|Accesskey-watch}}\n* {{msg-mw|Tooltip-watch}}\n{{Identical|Watch this page}}",
        "savearticle": "Text on the button to create a new page. It should be an action which is short and makes clear that the effect is immediate and public.\n\nSee also {{msg-mw|showpreview}} and {{msg-mw|showdiff}} for the other buttons, and {{msg-mw|savechanges}} for the label for the button when the page is being modified.\n\nSee also:\n* {{msg-mw|Accesskey-publish}}\n* {{msg-mw|Tooltip-publish}}\n{{Identical|Save page}}",
        "missingcommenttext": "This message is shown, when the textbox by a new-section is empty.",
        "missingcommentheader": "Edit summary that is shown if you enable \"Prompt me when entering a blank summary\" and add a new section without headline to a talk page.\n\n\"Subject\" is {{msg-mw|subject}}.\n\nSee also:\n* {{msg-mw|Missingsummary}}\n* {{msg-mw|Savearticle}}",
        "summary-preview": "Preview of the edit summary, shown under the edit summary itself.\nShould match: {{msg-mw|summary}}.",
 -      "subject-preview": "Should match {{msg-mw|subject}}",
 +      "subject-preview": "Used as label for preview of the section title when adding a new section on a talk page.\n\nShould match {{msg-mw|subject}}.\n\nSee also:\n* {{msg-mw|Summary-preview}}\n\n{{Identical|Subject}}",
        "previewerrortext": "When a user has the editing preference LivePreview enabled, clicked the Preview or Show Changes button in the edit page and the action did not succeed.",
        "blockedtitle": "Used as title displayed for blocked users. The corresponding message body is one of the following messages:\n* {{msg-mw|Blockedtext|notext=1}}\n* {{msg-mw|Autoblockedtext|notext=1}}\n* {{msg-mw|Systemblockedtext}}",
        "blockedtext": "Text displayed to blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link)\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Autoblockedtext}}\n* {{msg-mw|Systemblockedtext}}",
        "saveprefs": "Button for saving changes in the preferences page.\n\nSee also:\n* {{msg-mw|Saveprefs}}\n* {{msg-mw|Accesskey-preferences-save}}\n* {{msg-mw|Tooltip-preferences-save}}\n{{Identical|Save}}",
        "restoreprefs": "Used as link text in [[Special:Preferences]]. The link points to [[Special:Preferences/reset]] which shows the \"Restore all default settings\" form.\n\nAlso used as label for the Submit button in [[Special:Preferences/reset]].",
        "prefs-editing": "Title of a tab in [[Special:Preferences]].\nWhen changing this message, please also update {{msg-mw|vector-editwarning-warning}} which references to this message.\n{{Identical|Editing}}",
 -      "rows": "Used on [[Special:Preferences]], \"Editing\" section in the \"Size of editing window\" fieldset.\n{{Identical|Row}}",
 -      "columns": "Used on [[Special:Preferences]], \"Editing\" section in the \"Size of editing window\" fieldset.\n{{Identical|Column}}",
        "searchresultshead": "Replaced by {{msg-mw|prefs-searchoptions}}, though may still be used in some extensions. DEPRECATED.\n\n{{Identical|Search}}",
        "stub-threshold": "Used in [[Special:Preferences]], \"Advanced options\" section. The setting allows the user to select a threshold value, in bytes, from a predefined list of options. Any links that lead to pages smaller than the threshold (\"stub links\") will be styled differently.\n\nParameters:\n* $1: the text of {{msg-mw|stub-threshold-sample-link}}, styled as a stub link",
        "stub-threshold-sample-link": "Passed as a parameter to the {{msg-mw|stub-threshold}} message.\n{{Identical|Sample}}",
        "right-reupload": "{{doc-right|reupload}}\nThe right to upload a file under a file name that already exists.\n\nRelated messages:\n* {{msg-mw|right-upload}}\n* {{msg-mw|right-reupload-own}}\n* {{msg-mw|right-reupload-shared}}",
        "right-reupload-own": "{{doc-right|reupload-own}}\nRight to upload a file under a file name that already exists, and that the same user has uploaded.\n\nRelated messages:\n* {{msg-mw|right-upload}}\n* {{msg-mw|right-reupload}}",
        "right-reupload-shared": "{{doc-right|reupload-shared}}\nThe right to upload a file locally under a file name that already exists in a shared database (for example Commons).\n\nRelated messages:\n* {{msg-mw|right-upload}}\n* {{msg-mw|right-reupload}}",
 -      "right-upload_by_url": "{{doc-right|upload by url}}",
 +      "right-upload_by_url": "{{doc-right|upload_by_url}}",
        "right-purge": "{{doc-right|purge}}\nThe right to use <code>&action=purge</code> in the URL, without needing to confirm it (by default, anonymous users need to confirm it).",
        "right-autoconfirmed": "{{doc-right|autoconfirmed}}\nIf your account is older than [[mw:Manual:$wgAutoConfirmAge|wgAutoConfirmAge]] and if you have at least [[mw:Manual:$wgAutoConfirmCount|$wgAutoConfirmCount]] edits, you are in the '''group \"autoconfirmed\"''' (note that you can't see this group at [[Special:ListUsers]]).\nIf you are in that group, you have (by default) the '''right \"autoconfirmed\"''', which exempts you from certain rate limits (those based on your IP address or otherwise intended solely for new users). Other rate limits may still apply; see {{msg-mw|right-noratelimit}}.",
        "right-bot": "{{doc-right|bot}}",
        "grant-group-private-information": "{{Related|Grant-group}}",
        "grant-group-other": "{{Related|Grant-group}}",
        "grant-blockusers": "Name for grant \"blockusers\".\n{{Related|Grant}}",
 -      "grant-createaccount": "Name for grant \"createaccount\".\n{{Related|Grant}}",
 +      "grant-createaccount": "Name for grant \"createaccount\".\n{{Related|Grant}}\n{{Identical|Create account}}",
        "grant-createeditmovepage": "Name for grant \"createeditmovepage\".\n{{Related|Grant}}",
        "grant-delete": "Name for grant \"delete\".\n{{Related|Grant}}",
        "grant-editinterface": "Name for grant \"editinterface\".\n\n\"JS\" stands for \"JavaScript\".\n{{Related|Grant}}",
        "action-upload": "{{Doc-action|upload}}",
        "action-reupload": "{{Doc-action|reupload}}",
        "action-reupload-shared": "{{Doc-action|reupload-shared}}",
 -      "action-upload_by_url": "{{Doc-action|upload by url}}",
 +      "action-upload_by_url": "{{Doc-action|upload_by_url}}",
        "action-writeapi": "{{Doc-action|writeapi}}\n\nAPI is an abbreviation for [[w:API|application programming interface]].",
        "action-delete": "{{Doc-action|delete}}",
        "action-deleterevision": "{{Doc-action|deleterevision}}",
        "recentchanges-legend-unpatrolled": "Used as legend on [[Special:RecentChanges]] and [[Special:Watchlist]].\n\nRefers to {{msg-mw|Recentchanges-label-unpatrolled}}.",
        "recentchanges-legend-plusminus": "{{optional}}\nA plus/minus sign with a number for the legend.",
        "recentchanges-submit": "Label for submit button in [[Special:RecentChanges]]\n{{Identical|Show}}",
 +      "rcfilters-activefilters": "Title for the filters selection showing the active filters.",
 +      "rcfilters-search-placeholder": "Placeholder for the filter search input.",
 +      "rcfilters-invalid-filter": "A label for an invalid filter.",
 +      "rcfilters-filterlist-title": "Title for the filters list.\n{{Identical|Filter}}",
 +      "rcfilters-filterlist-noresults": "Message showing no results found for searching a filter.",
 +      "rcfilters-filtergroup-registration": "Title for the filter group for editor registration type.",
 +      "rcfilters-filter-registered-label": "Label for the filter for showing edits made by logged-in users.\n{{Identical|Registered}}",
 +      "rcfilters-filter-registered-description": "Description for the filter for showing edits made by logged-in users.",
 +      "rcfilters-filter-unregistered-label": "Label for the filter for showing edits made by logged-out users.",
 +      "rcfilters-filter-unregistered-description": " Description for the filter for showing edits made by logged-out users.",
 +      "rcfilters-filtergroup-authorship": "Title for the filter group for edit authorship. This filter group allows the user to choose between \"Your own edits\" and \"Edits by others\". More info: https://phabricator.wikimedia.org/T149859\n\n{{doc-important|This is another typical example of ambiguity in the English language. Only the documentation will reveal that this message means \"(filter by) authorship of these edits\", not \"edit the authorship\". That is, \"edit\" is a modifying noun, not a verb.}}",
 +      "rcfilters-filter-editsbyself-label": "Label for the filter for showing edits made by the current user.",
 +      "rcfilters-filter-editsbyself-description": "Description for the filter for showing edits made by the current user.",
 +      "rcfilters-filter-editsbyother-label": "Label for the filter for showing edits made by anyone other than the current user.",
 +      "rcfilters-filter-editsbyother-description": "Description for the filter for showing edits made by anyone other than the current user.",
 +      "rcfilters-filtergroup-userExpLevel": "Title for the filter group for user experience levels.",
 +      "rcfilters-filter-userExpLevel-newcomer-label": "Label for the filter for showing edits made by new editors.",
 +      "rcfilters-filter-userExpLevel-newcomer-description": "Description for the filter for showing edits made by new editors.",
 +      "rcfilters-filter-userExpLevel-learner-label": "Label for the filter for showing edits made by learning editors.",
 +      "rcfilters-filter-userExpLevel-learner-description": "Description for the filter for showing edits made by learning editors.",
 +      "rcfilters-filter-userExpLevel-experienced-label": "Label for the filter for showing edits made by experienced editors.",
 +      "rcfilters-filter-userExpLevel-experienced-description": "Description for the filter for showing edits made by experienced editors.",
 +      "rcfilters-filtergroup-automated": "Title for the filter group for editor automation type.",
 +      "rcfilters-filter-bots-label": "Label for the filter for showing edits made by automated tools.\n{{Identical|Bot}}",
 +      "rcfilters-filter-bots-description": "Description for the filter for showing edits made by automated tools.",
 +      "rcfilters-filter-humans-label": "Label for the filter for showing edits made by human editors.",
 +      "rcfilters-filter-humans-description": " Description for the filter for showing edits made by human editors.",
 +      "rcfilters-filtergroup-significance": "Title for the filter group for edit significance.\n{{Identical|Significance}}",
 +      "rcfilters-filter-minor-label": "Label for the filter for showing edits marked as minor.",
 +      "rcfilters-filter-minor-description": "Description for the filter for showing edits marked as minor.",
 +      "rcfilters-filter-major-label": "Label for the filter for showing edits not marked as minor.",
 +      "rcfilters-filter-major-description": " Description for the filter for showing edits not marked as minor.",
 +      "rcfilters-filtergroup-changetype": "Title for the filter group for edit type.",
 +      "rcfilters-filter-pageedits-label": "Label for the filter for showing edits to existing pages.",
 +      "rcfilters-filter-pageedits-description": "Description for the filter for showing edits to existing pages.",
 +      "rcfilters-filter-newpages-label": "Label for the filter for showing edits that create a page.",
 +      "rcfilters-filter-newpages-description": "Description for the filter for showing edits that create a page.",
 +      "rcfilters-filter-categorization-label": "Label for the filter for showing edits adding or removing pages to categories.",
 +      "rcfilters-filter-categorization-description": "Description for the filter for showing edits adding or removing pages to categories.",
 +      "rcfilters-filter-logactions-label": "Label for the filter for showing logged actions.",
 +      "rcfilters-filter-logactions-description": "Description for the filter for showing logged actions.",
        "rcnotefrom": "This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time.\n\nThe corresponding message is {{msg-mw|Rclistfrom}}.\n\nParameters:\n* $1 - the maximum number of changes that are displayed\n* $2 - (Optional) a date and time\n* $3 - a date\n* $4 - a time\n* $5 - Number of changes are displayed, for use with PLURAL",
        "rclistfrom": "Used on [[Special:RecentChanges]]. Parameters:\n* $1 - (Currently not use) date and time. The date and the time adds to the rclistfrom description.\n* $2 - time. The time adds to the rclistfrom link description (with split of date and time).\n* $3 - date. The date adds to the rclistfrom link description (with split of date and time).\n\nThe corresponding message is {{msg-mw|Rcnotefrom}}.",
        "rcshowhideminor": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|rcshowhideminor-show}} or {{msg-mw|rcshowhideminor-hide}}\n{{Identical|Minor edit}}",
        "uncategorizedimages-summary": "{{notranslate}}\nused in [[Special:Uncategorizedimages]]. [[mw:Manual:Interface/Special pages summary|mw manual]].",
        "uncategorizedtemplates": "{{doc-special|UncategorizedTemplates}}",
        "uncategorizedtemplates-summary": "{{doc-specialpagesummary|uncategorizedtemplates}}",
 +      "uncategorized-categories-exceptionlist": "{{optional}}\nSystem message used as a list of exceptions for Special:UncategorizedCategories.",
        "unusedcategories": "{{doc-special|UnusedCategories}}",
        "unusedcategories-summary": "{{doc-specialpagesummary|unusedcategories}}",
        "unusedimages": "{{doc-special|UnusedImages}}",
        "apisandbox-sending-request": "JavaScript message displayed while the request is being sent.",
        "apisandbox-loading-results": "JavaScript message displayed while the response is being read.",
        "apisandbox-results-error": "Displayed as an error message from JavaScript when the request failed.\n\nParameters:\n* $1 - Error message",
-       "apisandbox-request-params-json": "Label for text field display the request parameters as JSON.",
        "apisandbox-request-url-label": "Label for the text field displaying the URL used to make this request.",
        "apisandbox-request-time": "Label and value for displaying the time taken by the request.\n\nParameters:\n* $1 - Time taken in milliseconds",
        "apisandbox-results-fixtoken": "JavaScript button label",
        "listgrouprights": "The name of the special page [[Special:ListGroupRights]].",
        "listgrouprights-summary": "The description used on [[Special:ListGroupRights]].\n\nRefers to {{msg-mw|Listgrouprights-helppage}}.",
        "listgrouprights-key": "Footer note for the [[Special:ListGroupRights]] page",
 -      "listgrouprights-group": "The title of the column in the table, about user groups (like you are in the ''translator'' group).\n\n{{Identical|Group}}",
 +      "listgrouprights-group": "The title of the column in the table, about user groups (like you are in the ''translator'' group).\n\n{{Identical|Group}}\n{{Related|Listgrouprights}}",
        "listgrouprights-rights": "The title of the column in the table, about user rights (like you can ''edit'' this page).\n{{Identical|Right}}",
        "listgrouprights-helppage": "The link used on [[Special:ListGroupRights]]. Just translate \"Group rights\", and '''leave the \"Help:\" namespace exactly as it is'''.",
        "listgrouprights-members": "Used on [[Special:ListGroupRights]] and [[Special:Statistics]] as a link to [[Special:ListUsers|Special:ListUsers/\"group\"]], a list of members in that group.",
        "listgrouprights-right-display": "{{optional}}\nParameters:\n* $1 - the text from the \"right-...\" messages, i.e. {{msg-mw|Right-edit}}\n* $2 - the codename of this right",
        "listgrouprights-right-revoked": "{{optional}}\nParameters:\n* $1 - the text from the \"right-...\" messages, i.e. {{msg-mw|Right-edit}}\n* $2 - the codename of this right",
 -      "listgrouprights-addgroup": "This is an individual right for groups, used on [[Special:ListGroupRights]].\n* $1 - an enumeration of group names\n* $2 - the number of group names in $1\nSee also:\n* {{msg-mw|listgrouprights-removegroup}}",
 +      "listgrouprights-addgroup": "This is an individual right for groups, used on [[Special:ListGroupRights]].\n* $1 - an enumeration of group names\n* $2 - the number of group names in $1\nSee also:\n* {{msg-mw|listgrouprights-removegroup}}\n{{Related|Listgrouprights}}",
        "listgrouprights-removegroup": "This is an individual right for groups, used on [[Special:ListGroupRights]].\n* $1 - an enumeration of group names\n* $2 - the number of group names in $1\nSee also:\n* {{msg-mw|listgrouprights-addgroup}}",
        "listgrouprights-addgroup-all": "Used on [[Special:ListGroupRights]].\n{{Related|Listgrouprights}}",
        "listgrouprights-removegroup-all": "Used on [[Special:ListGroupRights]].\n{{Related|Listgrouprights}}",
 -      "listgrouprights-addgroup-self": "This is an individual right for groups, used on [[Special:ListGroupRights]].\n* $1 - the group names\n* $2 - the number of group names in $1",
 -      "listgrouprights-removegroup-self": "This is an individual right for groups, used on [[Special:ListGroupRights]].\n* $1 - the group names\n* $2 - the number of group names in $1",
 +      "listgrouprights-addgroup-self": "This is an individual right for groups, used on [[Special:ListGroupRights]].\n* $1 - the group names\n* $2 - the number of group names in $1\n{{Related|Listgrouprights}}",
 +      "listgrouprights-removegroup-self": "This is an individual right for groups, used on [[Special:ListGroupRights]].\n* $1 - the group names\n* $2 - the number of group names in $1\n{{Related|Listgrouprights}}",
        "listgrouprights-addgroup-self-all": "Used on [[Special:ListGroupRights]].\n{{Related|Listgrouprights}}",
        "listgrouprights-removegroup-self-all": "Used on [[Special:ListGroupRights]].\n{{Related|Listgrouprights}}",
        "listgrouprights-namespaceprotection-header": "Shown on [[Special:ListGroupRights]] as the header for the namespace restrictions table.",
        "sorbs": "{{optional}}",
        "sorbsreason": "See also:\n* {{msg-mw|Sorbsreason}}\n* {{msg-mw|Sorbs create account_reason}}",
        "sorbs_create_account_reason": "Used in [[Special:UserLogin]] when creating an account.\n\nSee also:\n* {{msg-mw|Sorbsreason}}\n* {{msg-mw|Sorbs create account_reason}}",
 +      "softblockrangesreason": "This text is shown to the user as a block reason and describes that the user is being blocked because the user is not logged in and their IP is in [[mw:Special:MyLanguage/Manual:$wgSoftBlockRanges|$wgSoftBlockRanges]].\n\nParameters:\n* $1 - The IP address that is blocked.",
        "xffblockreason": "This text is shown to the user as a block reason and describes that the user is being blocked because an IP in the X-Forwarded-For header (which lists the user's IP as well as all IPs of the transparent proxy servers they went through) sent when they loaded the page has been blocked:\n* $1 is the original block reason for the IP address matched in the X-Forwarded-For header",
        "cant-see-hidden-user": "Used as (red) error message on [[Special:Block]] when you try to change (as sysop without the hideuser right) the block of a hidden user.",
        "ipbblocked": "Error message shown when a user tries to alter block settings when they are themselves blocked.",
        "cant-move-to-category-page": "Used as error message.\n\nSee also:\n* {{msg-mw|cant-move-user-page}}\n* {{msg-mw|cant-move-to-user-page}}\n* {{msg-mw|cant-move-category-page}}\n* {{msg-mw|movenotallowedfile}}\n* {{msg-mw|movenotallowed}}\n* {{msg-mw|movenologintext}}",
        "cant-move-subpages": "Used as an error message.",
        "namespace-nosubpages": "Used as an error message. Parameters:\n* $1 - Namespace name.",
 -      "movepage-max-pages": "PROBABLY (A GUESS): when moving a page, you can select an option of moving its subpages, but there is a maximum that can be moved automatically.\n\nParameters:\n* $1 - maximum moved pages, defined in the variable [[mw:Special:MyLanguage/Manual:$wgMaximumMovedPages|$wgMaximumMovedPages]]",
        "newtitle": "Used in the special page \"[[Special:MovePage]]\". The text for the inputbox to give the new page title.\n\nSee also:\n* {{msg-mw|Move-page-legend|legend for the form}}\n* {{msg-mw|Movereason|label for textarea}}\n* {{msg-mw|Movetalk|label for checkbox}}\n* {{msg-mw|Move-leave-redirect|label for checkbox}}\n* {{msg-mw|Fix-double-redirects|label for checkbox}}\n* {{msg-mw|Move-subpages|label for checkbox}}\n* {{msg-mw|Move-talk-subpages|label for checkbox}}\n* {{msg-mw|Move-watch|label for checkbox}}",
        "move-watch": "The text of the checkbox to watch the pages you are moving from and to. If checked, both the destination page and the original page will be added to the watchlist, even if you decide not to leave a redirect behind.\n\nSee also:\n* {{msg-mw|Move-page-legend|legend for the form}}\n* {{msg-mw|newtitle|label for new title}}\n* {{msg-mw|Movereason|label for textarea}}\n* {{msg-mw|Movetalk|label for checkbox}}\n* {{msg-mw|Move-leave-redirect|label for checkbox}}\n* {{msg-mw|Fix-double-redirects|label for checkbox}}\n* {{msg-mw|Move-subpages|label for checkbox}}\n* {{msg-mw|Move-talk-subpages|label for checkbox}}",
        "movepagebtn": "Button label on the special 'Move page'.\n\n{{Identical|Move page}}",
        "movepage-page-exists": "Used as error message when moving page.\n* $1 - page title",
        "movepage-page-moved": "Used as success message when moving page.\n\nCan be followed by {{msg-mw|Movepage-max-pages}}.\n\nParameters:\n* $1 - old page title (with link)\n* $2 - new page title (with link)\nSee also:\n* {{msg-mw|Movepage-page-unmoved}}",
        "movepage-page-unmoved": "Used as error message when moving page. Parameters:\n* $1 - old page title (with link)\n* $2 - new page title (with link)\nSee also:\n* {{msg-mw|Movepage-page-moved}}",
 +      "movepage-max-pages": "PROBABLY (A GUESS): when moving a page, you can select an option of moving its subpages, but there is a maximum that can be moved automatically.\n\nParameters:\n* $1 - maximum moved pages, defined in the variable [[mw:Special:MyLanguage/Manual:$wgMaximumMovedPages|$wgMaximumMovedPages]]",
        "movelogpage": "{{doc-logpage}}\n\nTitle of [[Special:Log/move]]. Used as heading on that page, and in the dropdown menu on log pages.",
        "movelogpagetext": "Text on the special page 'Move log'.",
        "movesubpage": "This is a section header on [[Special:MovePage]], below is a list of subpages.\n\nParameters:\n* $1 - number of subpages\nSee also:\n* {{msg-mw|movenosubpage|without subpage}}\n* {{msg-mw|movesubpagetext|with subpages}}\n* {{msg-mw|movesubpagetalktext|with talk subpages}}",
        "feedback-useragent": "A label denoting the user agent in the feedback that is posted to the feedback page.\n{{Identical|User agent}}",
        "searchsuggest-search": "Greyed out default text in the simple search box in the Vector skin. (It disappears and lets the user enter the requested search terms when the search box receives focus.)\n{{Identical|Search}}",
        "searchsuggest-containing": "Label used in the special item of the search suggestions list which gives the user an option to perform a full text search for the term.",
 -      "api-error-autoblocked": "API error message that can be used for client side localisation of API errors.\n\nCf. {{msg-mw|Autoblockedtext}}.",
 -      "api-error-badaccess-groups": "API error message that can be used for client side localisation of API errors.",
        "api-error-badtoken": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-blocked": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-copyuploaddisabled": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-duplicate": "API error message that can be used for client side localisation of API errors. Parameters:\n* $1 - a number of files",
 -      "api-error-duplicate-archive": "API error message that can be used for client side localisation of API errors. Parameters:\n* $1 - a number of files",
 -      "api-error-empty-file": "API error message that can be used for client side localisation of API errors.",
        "api-error-emptypage": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-fetchfileerror": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-fileexists-forbidden": "API error message that can be used for client side localisation of API errors.\n\nParameters:\n* $1 - filename\nSee also:\n* {{msg-mw|Api-error-fileexists-shared-forbidden}}",
 -      "api-error-fileexists-shared-forbidden": "API error message that can be used for client side localisation of API errors.\n\nParameters:\n* $1 - filename\nSee also:\n* {{msg-mw|Api-error-fileexists-forbidden}}",
 -      "api-error-file-too-large": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-filename-tooshort": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-filetype-banned": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-filetype-banned-type": "API error message that can be used for client side localisation of API errors.\n\n* $1 is the extension(s) of the file which cannot be uploaded\n* $2 is the list of file extensions that can be uploaded (Example: ''png, gif, jpg, jpeg, ogg, pdf, svg.'')\n* $3 is the number of allowed file formats (to be used for the PLURAL function)\n* $4 is the number of extensions that could not be uploaded (to be used for the PLURAL function)",
 -      "api-error-filetype-missing": "The word \"extension\" refers to the part behind the last dot in a file name, that by convention gives a hint about the kind of data format which a files contents are in.",
 -      "api-error-hookaborted": "The word \"extension\" here refers to a [[:mw:Manual:Extensions|MediaWiki Extension]] which extends the functionality of the basic wiki by adding something to its capabilities. \"… aborted by an extension\" implies that an operation could not be performed successfully or was not allowed to continue to its intended end.",
 -      "api-error-http": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-illegal-filename": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-internal-error": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-invalid-file-key": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-missingparam": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-missingresult": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-mustbeloggedin": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-mustbeposted": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-noimageinfo": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-nomodule": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-ok-but-empty": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-overwrite": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-ratelimited": "API error message that can be used for client side localisation of API errors.\n\nCf. {{msg-mw|Actionthrottledtext}}",
 -      "api-error-stashfailed": "API error message that can be used for client side localisation of API errors.",
        "api-error-publishfailed": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-stasherror": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-stashedfilenotfound": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-stashpathinvalid": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-stashfilestorage": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-stashzerolength": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-stashnotloggedin": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-stashwrongowner": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-stashnosuchfilekey": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-timeout": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-unclassified": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-unknown-code": "API error message that can be used for client side localisation of API errors.\n\nParameters:\n* $1 - may contain more error details\n{{Identical|Unknown error}}",
 -      "api-error-unknown-error": "API error message that can be used for client side localisation of API errors.",
 +      "api-error-stashfailed": "API error message that can be used for client side localisation of API errors.",
        "api-error-unknown-warning": "API error message that can be used for client side localisation of API errors. Parameters:\n* $1 is an unknown warning.",
        "api-error-unknownerror": "API error message that can be used for client side localisation of API errors.\n\nParameters:\n* $1 - an unknown error message\n{{Identical|Unknown error}}",
 -      "api-error-uploaddisabled": "API error message that can be used for client side localisation of API errors.",
 -      "api-error-verification-error": "The word \"extension\" refers to the part behind the last dot in a file name, that by convention gives a hint about the kind of data format which a files contents are in.",
 -      "api-error-was-deleted": "API error message that can be used for client side localisation of API errors.",
        "duration-seconds": "Used as duration. Parameters:\n* $1 - number of seconds\n{{Related|Duration}}\n{{Identical|Second}}",
        "duration-minutes": "Used as duration. Parameters:\n* $1 - number of minutes\n{{Related|Duration}}\n{{Identical|Minute}}",
        "duration-hours": "Used as duration. Parameters:\n* $1 - number of hours\n{{Related|Duration}}\n{{Identical|Hour}}",
        "pagelang-language": "Language selector label for Special:PageLanguage\n{{Identical|Language}}",
        "pagelang-use-default": "Radio label for selector on Special:PageLanguage for default language",
        "pagelang-select-lang": "Radio label for selector on Special:PageLanguage for language selection\n{{Identical|Select language}}",
 +      "pagelang-reason": "Input label for reason on Special:PageLanguage\n\n{{Identical|Reason}}",
        "pagelang-submit": "Submit button label for Special:PageLanguage form\n{{Identical|Submit}}",
 +      "pagelang-nonexistent-page": "Error message shown when the page the user is trying to change the language on does not exist.\n\nParameters:\n* $1 - the title of the nonexistent page",
 +      "pagelang-unchanged-language": "Error message shown when the language the user is trying to change the page to and the current language the page is in are the same.\n\nParameters:\n* $1 - the title of the target page\n* $2 - the current language of the page",
 +      "pagelang-unchanged-language-default": "Error message shown when the language the user is trying to set a page to fall back to the wiki's default content language, but the page is already set to do so.\n\nParameters:\n* $1 - the title of the target page",
 +      "pagelang-db-failed": "Error message shown when the database fails to update the language of the page",
        "right-pagelang": "{{Doc-right|pagelang}}\nRight to change page language on Special:PageLanguage",
        "action-pagelang": "{{Doc-action|pagelang}}",
        "log-name-pagelang": "Display entry for log name for changes in page language in Special:Log.",
diff --combined resources/Resources.php
@@@ -1060,6 -1060,7 +1060,6 @@@ return 
                        'resources/src/mediawiki/htmlform/autocomplete.js',
                        'resources/src/mediawiki/htmlform/autoinfuse.js',
                        'resources/src/mediawiki/htmlform/checkmatrix.js',
 -                      'resources/src/mediawiki/htmlform/datetime.js',
                        'resources/src/mediawiki/htmlform/cloner.js',
                        'resources/src/mediawiki/htmlform/hide-if.js',
                        'resources/src/mediawiki/htmlform/multiselect.js',
                        'upload-form-label-infoform-description-tooltip',
                        'upload-form-label-usage-title',
                        'upload-form-label-usage-filename',
 -                      'api-error-unknownerror',
 +                      'action-upload',
 +                      'apierror-mustbeloggedin',
 +                      'badaccess-groups',
 +                      'apierror-unknownerror',
                        'api-error-unknown-warning',
 -                      'api-error-autoblocked',
 -                      'api-error-blocked',
 -                      'api-error-badaccess-groups',
 -                      'api-error-badtoken',
 -                      'api-error-copyuploaddisabled',
 -                      'api-error-duplicate',
 -                      'api-error-duplicate-archive',
 -                      'api-error-empty-file',
 -                      'api-error-emptypage',
 -                      'api-error-fetchfileerror',
 -                      'api-error-fileexists-forbidden',
 -                      'api-error-fileexists-shared-forbidden',
 -                      'api-error-file-too-large',
 -                      'api-error-filename-tooshort',
 -                      'api-error-filetype-banned',
 -                      'api-error-filetype-banned-type',
 -                      'api-error-filetype-missing',
 -                      'api-error-hookaborted',
 -                      'api-error-http',
 -                      'api-error-illegal-filename',
 -                      'api-error-internal-error',
 -                      'api-error-invalid-file-key',
 -                      'api-error-missingparam',
 -                      'api-error-missingresult',
 -                      'api-error-mustbeloggedin',
 -                      'api-error-mustbeposted',
 -                      'api-error-noimageinfo',
 -                      'api-error-nomodule',
 -                      'api-error-ok-but-empty',
 -                      'api-error-overwrite',
 -                      'api-error-stashfailed',
 -                      'api-error-publishfailed',
 -                      'api-error-stasherror',
 -                      'api-error-stashedfilenotfound',
 -                      'api-error-stashpathinvalid',
 -                      'api-error-stashfilestorage',
 -                      'api-error-stashzerolength',
 -                      'api-error-stashnotloggedin',
 -                      'api-error-stashwrongowner',
 -                      'api-error-stashnosuchfilekey',
 -                      'api-error-timeout',
 -                      'api-error-unclassified',
 -                      'api-error-unknown-code',
 -                      'api-error-unknown-error',
 -                      'api-error-uploaddisabled',
 -                      'api-error-verification-error',
 -                      'api-error-was-deleted',
                        'fileexists',
                        'filepageexists',
 +                      'file-exists-duplicate',
 +                      'file-deleted-duplicate',
                        'filename-bad-prefix',
                        'filename-thumb-name',
 +                      'filewasdeleted',
                        'badfilename',
                        'protectedpagetext',
                ],
  
        /* MediaWiki Special pages */
  
 +      'mediawiki.rcfilters.filters' => [
 +              'scripts' => [
 +                      'resources/src/mediawiki.rcfilters/mw.rcfilters.js',
 +                      'resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterItem.js',
 +                      'resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js',
 +                      'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FiltersListWidget.js',
 +                      'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterGroupWidget.js',
 +                      'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterItemWidget.js',
 +                      'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.js',
 +                      'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js',
 +                      'resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js',
 +                      'resources/src/mediawiki.rcfilters/mw.rcfilters.init.js',
 +              ],
 +              'styles' => [
 +                      'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less',
 +                      'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterItemWidget.less',
 +                      'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterGroupWidget.less',
 +                      'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FiltersListWidget.less',
 +                      'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less',
 +                      'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.less',
 +              ],
 +              'messages' => [
 +                      'rcfilters-activefilters',
 +                      'rcfilters-search-placeholder',
 +                      'rcfilters-invalid-filter',
 +                      'rcfilters-filterlist-title',
 +                      'rcfilters-filterlist-noresults',
 +                      'rcfilters-filtergroup-registration',
 +                      'rcfilters-filter-registered-label',
 +                      'rcfilters-filter-registered-description',
 +                      'rcfilters-filter-unregistered-label',
 +                      'rcfilters-filter-unregistered-description',
 +                      'rcfilters-filtergroup-authorship',
 +                      'rcfilters-filter-editsbyself-label',
 +                      'rcfilters-filter-editsbyself-description',
 +                      'rcfilters-filter-editsbyother-label',
 +                      'rcfilters-filter-editsbyother-description',
 +                      'rcfilters-filtergroup-userExpLevel',
 +                      'rcfilters-filter-userExpLevel-newcomer-label',
 +                      'rcfilters-filter-userExpLevel-newcomer-description',
 +                      'rcfilters-filter-userExpLevel-learner-label',
 +                      'rcfilters-filter-userExpLevel-learner-description',
 +                      'rcfilters-filter-userExpLevel-experienced-label',
 +                      'rcfilters-filter-userExpLevel-experienced-description',
 +                      'rcfilters-filtergroup-automated',
 +                      'rcfilters-filter-bots-label',
 +                      'rcfilters-filter-bots-description',
 +                      'rcfilters-filter-humans-label',
 +                      'rcfilters-filter-humans-description',
 +                      'rcfilters-filtergroup-significance',
 +                      'rcfilters-filter-minor-label',
 +                      'rcfilters-filter-minor-description',
 +                      'rcfilters-filter-major-label',
 +                      'rcfilters-filter-major-description',
 +                      'rcfilters-filtergroup-changetype',
 +                      'rcfilters-filter-pageedits-label',
 +                      'rcfilters-filter-pageedits-description',
 +                      'rcfilters-filter-newpages-label',
 +                      'rcfilters-filter-newpages-description',
 +                      'rcfilters-filter-categorization-label',
 +                      'rcfilters-filter-categorization-description',
 +                      'rcfilters-filter-logactions-label',
 +                      'rcfilters-filter-logactions-description',
 +              ],
 +              'dependencies' => [
 +                      'oojs-ui',
 +                      'mediawiki.Uri',
 +              ],
 +      ],
        'mediawiki.special' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.css',
                'targets' => [ 'desktop', 'mobile' ],
                        'apisandbox-sending-request',
                        'apisandbox-loading-results',
                        'apisandbox-results-error',
-                       'apisandbox-request-params-json',
                        'apisandbox-request-url-label',
                        'apisandbox-request-time',
                        'apisandbox-results-fixtoken',
        ],
        'mediawiki.special.changeslist' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.css',
 +              'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.special.changeslist.legend' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css',
 +              'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.special.changeslist.legend.js' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.legend.js',
                        'jquery.makeCollapsible',
                        'mediawiki.cookie',
                ],
 +              'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.special.changeslist.enhanced' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css',
        ],
        'mediawiki.special.recentchanges' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.recentchanges.js',
 +              'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.special.search' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.search.js',
                                                } );
                                        } else if ( Util.apiBool( pi.multi ) ) {
                                                widget = new OO.ui.CapsuleMultiselectWidget( {
 -                                                      allowArbitrary: true
 +                                                      allowArbitrary: true,
 +                                                      allowDuplicates: Util.apiBool( pi.allowsduplicates )
                                                } );
                                                widget.paramInfo = pi;
                                                $.extend( widget, WidgetMethods.capsuleWidget );
  
                                widget = new OO.ui.CapsuleMultiselectWidget( {
                                        allowArbitrary: true,
 +                                      allowDuplicates: Util.apiBool( pi.allowsduplicates ),
                                        popup: {
                                                classes: [ 'mw-apisandbox-popup' ],
                                                $content: $content
                        }
  
                        $.when.apply( $, deferreds ).done( function () {
-                               var jsonInput;
                                if ( $.inArray( false, arguments ) !== -1 ) {
                                        windowManager.openWindow( 'errorAlert', {
                                                title: Util.parseMsg( 'apisandbox-submit-invalid-fields-title' ),
                                                                label: Util.parseMsg( 'apisandbox-request-url-label' )
                                                        }
                                                ).$element,
-                                               new OO.ui.FieldLayout(
-                                                       jsonInput = new OO.ui.TextInputWidget( {
-                                                               classes: [ 'mw-apisandbox-textInputCode' ],
-                                                               readOnly: true,
-                                                               multiline: true,
-                                                               autosize: true,
-                                                               maxRows: 6,
-                                                               value: JSON.stringify( displayParams, null, '\t' )
-                                                       } ), {
-                                                               label: Util.parseMsg( 'apisandbox-request-params-json' )
-                                                       }
-                                               ).$element,
                                                $result
                                        );
                                ApiSandbox.updateUI();
                                booklet.setPage( '|results|' );
  
-                               // Resize the multiline input once visible
-                               jsonInput.adjustSize();
                                location.href = oldhash = '#' + query;
  
                                api.post( params, {