Merge "Apply IP blocks to X-Forwarded-For header"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 29 Mar 2013 18:42:50 +0000 (18:42 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 29 Mar 2013 18:42:50 +0000 (18:42 +0000)
1  2 
RELEASE-NOTES-1.21
includes/DefaultSettings.php
includes/User.php
languages/messages/MessagesEn.php
languages/messages/MessagesQqq.php
maintenance/language/messages.inc

diff --combined RELEASE-NOTES-1.21
@@@ -18,7 -18,6 +18,7 @@@ production
  * $wgBug34832TransitionalRollback has been removed.
  * (bug 29472) $wgUseDynamicDates has been removed and its functionality
    disabled.
 +* $wgVectorUseIconWatch is now enabled by default.
  
  === New features in 1.21 ===
  * (bug 38110) Schema changes (adding or dropping tables, indices and
    correctly.
  * (bug 45803) Whitespace within == Headline == syntax and within <hN> headings
    is now non-significant and not preserved in the HTML output.
+ * (bug 23343) Implemented ability to apply IP blocks to the contents of X-Forwarded-For headers
+   by adding a new configuration variable $wgApplyIpBlocksToXff (disabled by default).
  
  === Bug fixes in 1.21 ===
  * (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
    to action=feedwatchlist
  * WDDX formatted output will actually be formatted (and normal output will no
    longer be), and will no longer choke on booleans.
 +* The JSON output formatter now leaves forward slashes unescaped to improve human
 +  readability of URLs and similar strings. Also, a "utf8" option is now provided
 +  to use UTF-8 encoding instead of hex escape codes for most non-ASCII characters.
 +* action=opensearch no longer silently ignores the format parameter.
 +* action=opensearch now supports format=jsonfm.
  
  === API internal changes in 1.21 ===
  * For debugging only, a new global $wgDebugAPI removes many API restrictions when true.
@@@ -341,19 -337,6 +343,19 @@@ changes to languages because of Bugzill
    - ShowStats -> ShowSiteStats.
  * BREAKING CHANGE: (bug 38244) Removed the mediawiki.api.titleblacklist module
    and moved it to the TitleBlacklist extension.
 +* The Special:ActiveUsers special page was removed
 +* BREAKING CHANGE: Implementation of MediaWiki's JS and JSON value encoding
 +  has changed:
 +** MediaWiki no longer supports PHP installations in which the native JSON
 +   extension is missing or disabled.
 +** XmlJsCode objects can no longer be nested inside objects or arrays.
 +   (For Xml::encodeJsCall(), this individually applies to each argument.)
 +** The sets of characters escaped by default, along with the precise escape
 +   sequences used, have changed (except for the Xml::escapeJsString()
 +   function, which is now deprecated).
 +* BREAKING CHANGE: The Services_JSON class has been removed; if necessary,
 +  be sure to upgrade affected extensions at the same time (e.g. Collection).
 +* Calling Linker methods using a skin will now output deprecation warnings.
  
  == Compatibility ==
  
@@@ -63,7 -63,7 +63,7 @@@ $wgConf = new SiteConfiguration
   * MediaWiki version number
   * @since 1.2
   */
 -$wgVersion = '1.21alpha';
 +$wgVersion = '1.22alpha';
  
  /**
   * Name of the site. It must be changed in LocalSettings.php
@@@ -2841,7 -2841,7 +2841,7 @@@ $wgVectorUseSimpleSearch = true
   *  - true = use an icon watch/unwatch button
   *  - false = use watch/unwatch text link
   */
 -$wgVectorUseIconWatch = false;
 +$wgVectorUseIconWatch = true;
  
  /**
   * Display user edit counts in various prominent places.
@@@ -4324,6 -4324,13 +4324,13 @@@ $wgSorbsUrl = array()
   */
  $wgProxyWhitelist = array();
  
+ /**
+  * Whether to look at the X-Forwarded-For header's list of (potentially spoofed)
+  * IPs and apply IP blocks to them. This allows for IP blocks to work with correctly-configured
+  * (transparent) proxies without needing to block the proxies themselves.
+  */
+ $wgApplyIpBlocksToXff = false;
  /**
   * Simple rate limiter options to brake edit floods.
   *
diff --combined includes/User.php
@@@ -710,7 -710,7 +710,7 @@@ class User 
                                return 'passwordtooshort';
                        } elseif ( $wgContLang->lc( $password ) == $wgContLang->lc( $this->mName ) ) {
                                return 'password-name-match';
 -                      } elseif ( isset( $blockedLogins[ $this->getName() ] ) && $password == $blockedLogins[ $this->getName() ] ) {
 +                      } elseif ( isset( $blockedLogins[$this->getName()] ) && $password == $blockedLogins[$this->getName()] ) {
                                return 'password-login-forbidden';
                        } else {
                                //it seems weird returning true here, but this is because of the
         *                    done against master.
         */
        private function getBlockedStatus( $bFromSlave = true ) {
-               global $wgProxyWhitelist, $wgUser;
+               global $wgProxyWhitelist, $wgUser, $wgApplyIpBlocksToXff;
  
                if ( -1 != $this->mBlockedby ) {
                        return;
                        }
                }
  
+               # (bug 23343) Apply IP blocks to the contents of XFF headers, if enabled
+               if ( !$block instanceof Block
+                       && $wgApplyIpBlocksToXff
+                       && $ip !== null
+                       && !$this->isAllowed( 'proxyunbannable' )
+                       && !in_array( $ip, $wgProxyWhitelist )
+               ) {
+                       $xff = $this->getRequest()->getHeader( 'X-Forwarded-For' );
+                       $xff = array_map( 'trim', explode( ',', $xff ) );
+                       $xff = array_diff( $xff, array( $ip ) );
+                       $xffblocks = Block::getBlocksForIPList( $xff, $this->isAnon(), !$bFromSlave );
+                       $block = Block::chooseBlock( $xffblocks, $xff );
+                       if ( $block instanceof Block ) {
+                               # Mangle the reason to alert the user that the block
+                               # originated from matching the X-Forwarded-For header.
+                               $block->mReason = wfMessage( 'xffblockreason', $block->mReason )->text();
+                       }
+               }
                if ( $block instanceof Block ) {
                        wfDebug( __METHOD__ . ": Found block.\n" );
                        $this->mBlock = $block;
                        $this->mAllowUsertalk = false;
                }
  
-               # Extensions
+               // Extensions
                wfRunHooks( 'GetBlockedStatus', array( &$this ) );
  
                wfProfileOut( __METHOD__ );
                // Set the user limit key
                if ( $userLimit !== false ) {
                        wfDebug( __METHOD__ . ": effective user limit: $userLimit\n" );
 -                      $keys[ wfMemcKey( 'limiter', $action, 'user', $id ) ] = $userLimit;
 +                      $keys[wfMemcKey( 'limiter', $action, 'user', $id )] = $userLimit;
                }
  
                $triggered = false;
        protected function getTokenUrl( $page, $token ) {
                // Hack to bypass localization of 'Special:'
                $title = Title::makeTitle( NS_MAIN, "Special:$page/$token" );
 -              return $title->getCanonicalUrl();
 +              return $title->getCanonicalURL();
        }
  
        /**
         * @return bool
         */
        public function confirmEmail() {
 -              $this->setEmailAuthenticationTimestamp( wfTimestampNow() );
 -              wfRunHooks( 'ConfirmEmailComplete', array( $this ) );
 +              // Check if it's already confirmed, so we don't touch the database
 +              // and fire the ConfirmEmailComplete hook on redundant confirmations.
 +              if ( !$this->isEmailConfirmed() ) {
 +                      $this->setEmailAuthenticationTimestamp( wfTimestampNow() );
 +                      wfRunHooks( 'ConfirmEmailComplete', array( $this ) );
 +              }
                return true;
        }
  
                }
  
                // Re-map numeric keys of AddToSelf/RemoveFromSelf to the 'user' key for backwards compatibility
 -              if( empty( $wgGroupsAddToSelf['user']) || $wgGroupsAddToSelf['user'] !== true ) {
 +              if( empty( $wgGroupsAddToSelf['user'] ) || $wgGroupsAddToSelf['user'] !== true ) {
                        foreach( $wgGroupsAddToSelf as $key => $value ) {
                                if( is_int( $key ) ) {
                                        $wgGroupsAddToSelf['user'][] = $value;
                        }
                }
  
 -              if( empty( $wgGroupsRemoveFromSelf['user']) || $wgGroupsRemoveFromSelf['user'] !== true ) {
 +              if( empty( $wgGroupsRemoveFromSelf['user'] ) || $wgGroupsRemoveFromSelf['user'] !== true ) {
                        foreach( $wgGroupsRemoveFromSelf as $key => $value ) {
                                if( is_int( $key ) ) {
                                        $wgGroupsRemoveFromSelf['user'][] = $value;
@@@ -372,6 -372,7 +372,6 @@@ $magicWords = array
   * hook.
   */
  $specialPageAliases = array(
 -      'Activeusers'               => array( 'ActiveUsers' ),
        'Allmessages'               => array( 'AllMessages' ),
        'Allpages'                  => array( 'AllPages' ),
        'Ancientpages'              => array( 'AncientPages' ),
@@@ -2779,6 -2780,16 +2779,6 @@@ Supported {{PLURAL:$2|protocol|protocol
  'listusers-noresult' => 'No user found.',
  'listusers-blocked'  => '(blocked)',
  
 -# Special:ActiveUsers
 -'activeusers'            => 'Active users list',
 -'activeusers-summary'    => '', # do not translate or duplicate this message to other languages
 -'activeusers-intro'      => 'This is a list of users who had some kind of activity within the last $1 {{PLURAL:$1|day|days}}.',
 -'activeusers-count'      => '$1 {{PLURAL:$1|action|actions}} in the last {{PLURAL:$3|day|$3 days}}',
 -'activeusers-from'       => 'Display users starting at:',
 -'activeusers-hidebots'   => 'Hide bots',
 -'activeusers-hidesysops' => 'Hide administrators',
 -'activeusers-noresult'   => 'No users found.',
 -
  # Special:ListGroupRights
  'listgrouprights'                      => 'User group rights',
  'listgrouprights-summary'              => 'The following is a list of user groups defined on this wiki, with their associated access rights.
@@@ -3296,6 -3307,7 +3296,7 @@@ Please contact your Internet service pr
  '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}}.
  You cannot create an account',
+ '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-block-while-blocked'        => 'You cannot block other users while you are blocked.',
  'cant-see-hidden-user'            => "The user you are trying to block has already been blocked and hidden.
  Since you do not have the hideuser right, you cannot see or edit the user's block.",
@@@ -458,8 -458,9 +458,8 @@@ See also
  * {{msg-mw|Accesskey-n-help}}
  * {{msg-mw|Tooltip-n-help}}
  {{Identical|Help}}',
 -'search' => 'Noun. Text of menu section shown on every page of the wiki above the search form.
 -
 -Also used as title of [[Special:Search]] page in [[Special:SpecialPages]].
 +'search' => '{{doc-special|Search}}
 +Noun. Text of menu section shown on every page of the wiki above the search form.
  
  See also:
  * {{msg-mw|Search}}
@@@ -549,9 -550,6 +549,9 @@@ See also
  {{Identical|Talk}}',
  'specialpage' => '{{Identical|Special page}}',
  'personaltools' => 'Heading for a group of links to your user page, talk page, preferences, watchlist, and contributions. This heading is visible in the sidebar in some skins. For an example, see [{{canonicalurl:Main_Page|useskin=simple}} Main Page using simple skin].',
 +'postcomment' => 'Used as link text.
 +
 +The link points to the talk page and has the parameters "action=edit&section=new".',
  'articlepage' => "'Content page' is used for NS_MAIN and any other non-standard namespace and this message is only used in skins Nostalgia, Cologneblue and Standard in the bottomLinks part.
  
  {{Identical|Content page}}",
@@@ -1074,7 -1072,6 +1074,7 @@@ See also
  * {{msg-mw|Tooltip-pt-logout}}
  {{Identical|Log out}}',
  'userlogout' => '{{Doc-actionlink}}
 +{{doc-special|UserLogout|unlisted=1}}
  {{Identical|Log out}}',
  'notloggedin' => 'This message is displayed in the standard skin when not logged in. The message is placed above the login link in the top right corner of pages.
  
  * $1 - a link to the account creation form, and the text of it is {{msg-mw|Nologinlink}}',
  'nologinlink' => 'Text of the link to the account creation form. Before that link, the message {{msg-mw|Nologin}} appears.
  {{Identical|Create an account}}',
 -'createaccount' => 'The title of [[Special:CreateAccount]], where users can register a new account. Used on [[Special:SpecialPages]] and on the submit button in the form where you register a new account.
 +'createaccount' => '{{doc-special|CreateAccount}}
 +The special page enables users to register a new account.
 +
 +Used on the submit button in the form where you register a new account.
  
  It is also used on the top of the page for logged out users, where it appears next to {{msg-mw|login}}, so consider making them similar.
  {{Identical|Create account}}',
@@@ -1122,10 -1116,8 +1122,10 @@@ Parameters
  'nosuchusershort' => "Displayed when trying to log in with a non-existant username. This message is only shown when you can't create an account, otherwise the message {{msg-mw|nosuchusershort}} is displayed.",
  'nouserspecified' => 'Used as error message when username to fetch is not specified.',
  'login-userblocked' => 'This message supports GENDER, username is available in $1.',
 -'wrongpassword' => 'Used as error message when the provided password is wrong.',
 -'wrongpasswordempty' => 'Error message displayed when entering a blank password',
 +'wrongpassword' => 'Used as error message when the provided password is wrong.
 +{{Identical|Please try again}}',
 +'wrongpasswordempty' => 'Error message displayed when entering a blank password.
 +{{Identical|Please try again}}',
  'passwordtooshort' => 'This message is shown at
  
  * [[Special:Preferences]]
@@@ -1146,7 -1138,7 +1146,7 @@@ $1 is the minimum number of characters 
  
  Parameters:
  * $1 is a user name. This parameter can be used with GENDER.',
 -'noemailcreate' => 'Error message.',
 +'noemailcreate' => 'Used as error message in [[Special:UserLogin]].',
  'passwordsent' => '* $1 - username',
  'blocked-mailpassword' => 'Used as error message in password recovery.',
  'eauthentsent' => "This message appears after entering an e-mail address in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}, then clicking on '{{int:saveprefs}}'.",
@@@ -1350,8 -1342,7 +1350,8 @@@ See also
  See also:
  * {{msg-mw|Savearticle}}
  * {{msg-mw|Accesskey-save}}
 -* {{msg-mw|Tooltip-save}}',
 +* {{msg-mw|Tooltip-save}}
 +{{Identical|Save page}}',
  'preview' => 'The title of the Preview page shown after clicking the "Show preview" button in the edit page. Since this is a heading, it should probably be translated as a noun and not as a verb.
  
  {{Identical|Preview}}',
@@@ -1764,8 -1755,7 +1764,8 @@@ Used in History and [[Special:Contribut
  It is followed by the message {{msg-mw|Viewprevnext}}.',
  'histlast' => 'This is part of the navigation message on the top and bottom of Page History pages which are lists of things in date order, e.g. [{{canonicalurl:Support|action=history}} Page History of Support].
  
 -It is followed by the message {{msg-mw|Viewprevnext}}.',
 +It is followed by the message {{msg-mw|Viewprevnext}}.
 +{{Identical|Latest}}',
  'historysize' => '* $1 - byte count',
  'historyempty' => 'Text in page history for empty page revisions
  
@@@ -1815,8 -1805,7 +1815,8 @@@ See [{{canonicalurl:x|feed=atom&action=
  'rev-showdeleted' => 'Link in page history for oversight (see also {{msg-mw|rev-delundel}})
  {{Identical|Show}}',
  'revisiondelete' => '{{RevisionDelete}}
 -It is the page title of [[Special:RevisionDelete]].',
 +
 +{{doc-special|RevisionDelete|unlisted=1}}',
  'revdelete-nooldid-title' => '{{RevisionDelete}}',
  'revdelete-nooldid-text' => '{{RevisionDelete}}',
  'revdelete-nologtype-title' => 'See also:
@@@ -2010,7 -1999,6 +2010,7 @@@ Title of the suppression log. Shown in 
  'suppressionlogtext' => 'Description text of the suppression log. Shown at top of [[Special:log/suppress]].',
  
  # History merging
 +'mergehistory' => '{{doc-special|MergeHistory}}',
  'mergehistory-header' => 'Used as header for Merge form in [[Special:MergeHistory]].
  
  See also:
@@@ -2113,7 -2101,6 +2113,7 @@@ A revision row in the merge history pag
  
  # Merge log
  'mergelog' => '{{doc-logpage}}
 +
  This is the name of a log of merge actions done on [[Special:MergeHistory]]. This special page and this log is not enabled by default.',
  'pagemerge-logentry' => "This log message is used in a merge log entry.
  
@@@ -2700,8 -2687,7 +2700,8 @@@ If you are in that group, you have (by 
  If someone with this right (bots by default) edits a user talk page and marks it as minor (requires {{msg-mw|right-minoredit}}), the user will not get a notification "You have new messages".',
  'right-apihighlimits' => '{{doc-right|apihighlimits}}',
  'right-writeapi' => '{{doc-right|writeapi}}',
 -'right-delete' => '{{doc-right|delete}}',
 +'right-delete' => '{{doc-right|delete}}
 +{{Identical|Delete page}}',
  'right-bigdelete' => '{{doc-right|bigdelete}}',
  'right-deletelogentry' => '{{doc-right|deletelogentry}}
  This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
@@@ -2793,7 -2779,6 +2793,7 @@@ Part of the "Newuserlog" extension. It 
  
  # User rights log
  'rightslog' => '{{doc-logpage}}
 +
  In [[Special:Log]]',
  'rightslogtext' => 'Text in [[Special:Log/rights]].',
  
@@@ -2928,25 -2913,15 +2928,25 @@@ Does not work under $wgMiserMode ([[mwr
  'rc-old-title' => 'Text that shows the original title of a page, $1 is the original title text',
  
  # Recent changes linked
 -'recentchangeslinked' => 'Title of [[Special:RecentChangesLinked]] and display name of page on [[Special:SpecialPages]].
 -
 +'recentchangeslinked' => '{{doc-special|RecentChangesLinked}}
  See also:
  * {{msg-mw|Recentchangeslinked}}
  * {{msg-mw|Accesskey-t-recentchangeslinked}}
  * {{msg-mw|Tooltip-t-recentchangeslinked}}',
 -'recentchangeslinked-feed' => 'Title of [[Special:RecentChangesLinked]] and display name of page on [[Special:SpecialPages]].',
 -'recentchangeslinked-toolbox' => 'Title of [[Special:RecentChangesLinked]] and display name of page on [[Special:SpecialPages]].',
 -'recentchangeslinked-title' => 'Message used as title and page header on [[Special:RecentChangesLinked]] (needs an argument like "/Main Page"). Related changes are all recent change to pages that are linked from \'\'this page\'\'. "$1" is the name of the page for which related changes are shown.',
 +'recentchangeslinked-feed' => 'Used in the feed object.
 +
 +This message follows the message {{msg-mw|Recentchangeslinked-title}}.',
 +'recentchangeslinked-toolbox' => 'Used as link text, and also used as link text in the common toolbox.
 +
 +These links point to [[Special:RecentChangesLinked]].',
 +'recentchangeslinked-title' => "Message used as title and page header on [[Special:RecentChangesLinked]] (needs an argument like \"/Main Page\").
 +
 +Related changes are all recent change to pages that are linked from ''this page''.
 +
 +This message is followed by {{msg-mw|Recentchangeslinked-feed}}.
 +
 +Parameters:
 +* \$1 - the name of the page for which related changes are shown",
  'recentchangeslinked-noresult' => 'Used in [[Special:RecentChangesLinked]], when there are no changes.',
  'recentchangeslinked-summary' => 'Summary of [[Special:RecentChangesLinked]].',
  'recentchangeslinked-page' => '{{Identical|Page name}}',
@@@ -2999,7 -2974,6 +2999,7 @@@ Text displayed when uploading a file us
  'upload-preferred' => 'Used in [[Special:Upload]].',
  'upload-prohibited' => 'Used in [[Special:Upload]].',
  'uploadlogpage' => '{{doc-logpage}}
 +
  Page title of [[Special:Log/upload]].',
  'uploadlogpagetext' => 'Appears on top of [[Special:Log/upload]].',
  'filename' => '{{Identical|Filename}}',
@@@ -3031,7 -3005,6 +3031,7 @@@ See also
  * {{msg-mw|upload-tryagain|Submit button text}}
  * {{msg-mw|reuploaddesc|button text}}',
  'ignorewarnings' => 'In [[Special:Upload]]',
 +'minlength1' => 'Used as error message in [[Special:Upload]].',
  'illegalfilename' => '* $1 - filename',
  'filename-toolong' => 'Error message when uploading a file with a filename longer than the hard-coded limit of 240 bytes. This limit will never change and is hard-coded in the message.
  
@@@ -3783,7 -3756,6 +3783,7 @@@ $1 is the name of the shared repository
  * $3 is a hour
  * $4 is an URL and must follow square bracket: [$4
  {{Identical|Revert}}',
 +'filerevert-badversion' => 'Used as error message.',
  
  # File deletion
  'filedelete' => 'Used as page title. Parameters:
@@@ -3839,20 -3811,18 +3839,20 @@@ See also
  {{Identical|Download}}',
  
  # Unwatched pages
 -'unwatchedpages' => 'Name of special page displayed in [[Special:SpecialPages]] for admins',
 +'unwatchedpages' => '{{doc-special|UnwatchedPages}}',
  
  # List redirects
 -'listredirects' => 'Name of special page displayed in [[Special:SpecialPages]].',
 +'listredirects' => '{{doc-special|ListRedirects}}',
  
  # Unused templates
 -'unusedtemplates' => 'Name of special page displayed in [[Special:SpecialPages]].',
 +'unusedtemplates' => '{{doc-special|UnusedTemplates}}',
  'unusedtemplatestext' => 'Shown on top of [[Special:Unusedtemplates]]',
 +'unusedtemplateswlh' => 'Used as link text in [[Special:UnusedTemplates]].
  
 -# Random page
 -'randompage' => 'Name of special page displayed in [[Special:SpecialPages]].
 +The link points to the "What links here" page.',
  
 +# Random page
 +'randompage' => '{{doc-special|RandomPage}}
  See also:
  * {{msg-mw|Randompage}}
  * {{msg-mw|Accesskey-n-randompage}}
  * $2 - number of namespaces',
  
  # Random redirect
 -'randomredirect' => 'Name of special page displayed in [[Special:SpecialPages]].',
 +'randomredirect' => '{{doc-special|RandomRedirect}}',
  'randomredirect-nopages' => '* $1 - namespace name',
  
  # Statistics
 -'statistics' => 'Name of special page displayed in [[Special:SpecialPages]].
 -
 +'statistics' => '{{doc-special|Statistics}}
  {{Identical|Statistics}}',
  'statistics-header-pages' => 'Used in [[Special:Statistics]]',
  'statistics-header-edits' => 'Used in [[Special:Statistics]]',
@@@ -3888,7 -3859,6 +3888,7 @@@ Possible alternatives to the word 'cont
  'statistics-edits' => 'Used in [[Special:Statistics]]',
  'statistics-edits-average' => 'Used in [[Special:Statistics]]',
  'statistics-views-total' => 'Used in [[Special:Statistics]]',
 +'statistics-views-total-desc' => 'This message follows the message {{msg-mw|statistics-views-total}}, in [[Special:Statistics]].',
  'statistics-views-peredit' => 'Used in [[Special:Statistics]]',
  'statistics-users' => '{{doc-important|Do not translate "Special:ListUsers"}}
  Used in [[Special:Statistics]].',
  * \$1 - Value of <code>\$wgRCMaxAge</code> in days",
  'statistics-mostpopular' => 'Used in [[Special:Statistics]]',
  
 -'disambiguations' => 'Name of a special page displayed in [[Special:SpecialPages]].',
 +'disambiguations' => '{{doc-special|Disambiguations}}',
  'disambiguationspage' => 'This message is the name of the template used for marking disambiguation pages. It is used by [[Special:Disambiguations]] to find all pages which link to disambiguation pages.
  
  {{doc-important|Don\'t translate the "Template:" part!}}',
@@@ -3906,7 -3876,7 +3906,7 @@@ This block of text is shown on [[:Speci
  
  \'\'\'Background information:\'\'\' Beyond telling about links going to disambiguation pages, that they are generally bad, it should explain which pages in the article namespace are seen as disambiguations: [[MediaWiki:Disambiguationspage]] usually holds a list of disambiguation templates of the local wiki. Pages linking to one of them (by transclusion) will count as disambiguation pages. Pages linking to these disambiguation pages, instead to the disambiguated article itself, are listed on [[:Special:Disambiguations]].',
  
 -'pageswithprop' => 'Title for [[Special:PagesWithProp]].
 +'pageswithprop' => '{{doc-special|PagesWithProp}}
  {{Identical|Page with page property}}',
  'pageswithprop-legend' => 'Legend for the input form on [[Special:PagesWithProp]].
  {{Identical|Page with page property}}',
  'pageswithprop-submit' => 'Label for the submit button on [[Special:PagesWithProp]].
  {{Identical|Go}}',
  
 -'doubleredirects' => 'Name of [[Special:DoubleRedirects]] displayed in [[Special:SpecialPages]]',
 +'doubleredirects' => '{{doc-special|DoubleRedirects}}',
  'doubleredirectstext' => 'Shown on top of [[Special:Doubleredirects]]',
  'double-redirect-fixed-move' => 'This is the message in the log when the software (under the username {{msg|double-redirect-fixer}}) updates the redirects after a page move. See also {{msg|fix-double-redirects}}.',
  'double-redirect-fixed-maintenance' => 'This is the message in the log when the software (under the username {{msg-mw|double-redirect-fixer}}) updates the redirects after running maintenance/fixDoubleRedirects.php. Compare with {{msg-mw|double-redirect-fixed-move}}.',
  'double-redirect-fixer' => "This is the '''username''' of the user who updates the double redirects after a page move. A user is created with this username, so it is perhaps better to not change this message too often. See also {{msg|double-redirect-fixed-move}} and {{msg|fix-double-redirects}}.",
  
 -'brokenredirects' => 'Name of [[Special:BrokenRedirects]] displayed in [[Special:SpecialPages]]',
 +'brokenredirects' => '{{doc-special|BrokenRedirects}}',
  'brokenredirectstext' => 'Shown on top of [[Special:BrokenRedirects]].',
  'brokenredirects-edit' => 'Link in [[Special:BrokenRedirects]]
  
  
  {{Identical|Delete}}',
  
 -'withoutinterwiki' => 'The title of the special page [[Special:WithoutInterwiki]].',
 +'withoutinterwiki' => '{{doc-special|WithoutInterwiki}}',
  'withoutinterwiki-summary' => 'Summary of [[Special:WithoutInterwiki]].',
  'withoutinterwiki-legend' => 'Used on [[Special:WithoutInterwiki]] as title of fieldset.',
  'withoutinterwiki-submit' => '{{Identical|Show}}',
  
 -'fewestrevisions' => 'Name of a special page displayed in [[Special:SpecialPages]].',
 +'fewestrevisions' => '{{doc-special|FewestRevisions}}',
  
  # Miscellaneous special pages
  'nbytes' => 'Message used on the history page of a wiki page. Each version of a page consist of a number of bytes. $1 is the number of bytes that the page uses. Uses plural as configured for a language based on $1.',
  'nimagelinks' => 'Used on [[Special:MostLinkedFiles]] to indicate how often a specific file is used.',
  'ntransclusions' => 'Used on [[Special:MostLinkedTemplates]] to indicate how often a template is in use.',
  'specialpage-empty' => 'Used on a special page when there is no data. For example on [[Special:Unusedimages]] when all images are used.',
 -'lonelypages' => 'Name of [[Special:LonelyPages]] displayed in [[Special:SpecialPages]]',
 +'lonelypages' => '{{doc-special|LonelyPages}}',
  'lonelypagestext' => 'Text displayed in [[Special:LonelyPages]]',
 -'uncategorizedpages' => 'Name of a special page displayed in [[Special:SpecialPages]].',
 -'uncategorizedcategories' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'uncategorizedimages' => 'The title of the special page [[Special:UncategorizedImages]].',
 -'uncategorizedtemplates' => 'The title of the special page [[Special:UncategorizedTemplates]].',
 -'unusedcategories' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'unusedimages' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'popularpages' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'wantedcategories' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'wantedpages' => 'Name of special page displayed in [[Special:SpecialPages]]',
 +'uncategorizedpages' => '{{doc-special|UncategorizedPages}}',
 +'uncategorizedcategories' => '{{doc-special|UncategorizedCategories}}',
 +'uncategorizedimages' => '{{doc-special|UncategorizedImages}}',
 +'uncategorizedtemplates' => '{{doc-special|UncategorizedTemplates}}',
 +'unusedcategories' => '{{doc-special|UnusedCategories}}',
 +'unusedimages' => '{{doc-special|UnusedImages}}',
 +'popularpages' => '{{doc-special|PopularPages}}',
 +'wantedcategories' => '{{doc-special|WantedCategories}}',
 +'wantedpages' => '{{doc-special|WantedPages}}',
  'wantedpages-badtitle' => "Error message shown when [[Special:WantedPages]] is listing a page with a title that shouldn't exist.
  
  $1 is a page title",
 -'wantedfiles' => 'Name of special page displayed in [[Special:SpecialPages]] and title of [[Special:WantedFiles]].',
 +'wantedfiles' => '{{doc-special|WantedFiles}}',
  'wantedfiletext-cat' => 'Message displayed at top of [[special:WantedFiles]]. $1 contains the name of the tracking category for broken files (Including Category prefix). {{msg-mw|wantedfiletext-nocat}} is used if the tracking category is disabled.',
  'wantedfiletext-nocat' => 'Message displayed at top of [[special:WantedFiles]] when broken file tracking category is disabled. See {{msg-mw|wantedfiletext-cat}}.',
 -'wantedtemplates' => 'The page name of [[Special:WantedTemplates]].',
 -'mostlinked' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'mostlinkedcategories' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'mostlinkedtemplates' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'mostcategories' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'mostimages' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'mostinterwikis' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'mostrevisions' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'prefixindex' => 'The page title of [[Special:PrefixIndex]]. When the user limits the list to a certain namespace, {{msg-mw|allinnamespace}} is used instead.',
 +'wantedtemplates' => '{{doc-special|WantedTemplates}}',
 +'mostlinked' => '{{doc-special|MostLinked}}',
 +'mostlinkedcategories' => '{{doc-special|MostLinkedCategories}}',
 +'mostlinkedtemplates' => '{{doc-special|MostLinkedTemplates}}',
 +'mostcategories' => '{{doc-special|MostCategories}}',
 +'mostimages' => '{{doc-special|MostImages}}',
 +'mostinterwikis' => '{{doc-special|MostInterwikis}}',
 +'mostrevisions' => '{{doc-special|MostRevisions}}',
 +'prefixindex' => '{{doc-special|PrefixIndex}}
 +When the user limits the list to a certain namespace, {{msg-mw|allinnamespace}} is used instead.',
  'prefixindex-namespace' => 'The page title of [[Special:PrefixIndex]] limited to a specific namespace. Similar to {{msg-mw|allinnamespace}}. $1 is the name of the namespace',
 -'shortpages' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'longpages' => 'Name of special page displayed in [[Special:SpecialPages]]',
 -'deadendpages' => 'Name of special page displayed in [[Special:SpecialPages]]',
 +'shortpages' => '{{doc-special|ShortPages}}',
 +'longpages' => '{{doc-special|LongPages}}',
 +'deadendpages' => '{{doc-special|DeadendPages}}',
  'deadendpagestext' => 'Introductory text for [[Special:DeadendPages]]',
 -'protectedpages' => 'Name of special page displayed in [[Special:SpecialPages]]',
 +'protectedpages' => '{{doc-special|ProtectedPages}}',
  'protectedpages-indef' => 'Option in [[Special:ProtectedPages]]',
  'protectedpages-cascade' => 'Option in [[Special:ProtectedPages]]',
  'protectedpagestext' => 'Shown on top of [[Special:ProtectedPages]]',
 -'protectedtitles' => 'Name of special page displayed in [[Special:SpecialPages]]',
 +'protectedpagesempty' => 'Used in [[Special:ProtectedPages]], when there are no protected pages with the specified parameters.',
 +'protectedtitles' => '{{doc-special|ProtectedTitles}}',
  'protectedtitlestext' => 'Shown on top of list of titles on [[Special:ProtectedTitles]]. If the list is empty the message [[MediaWiki:Protectedtitlesempty]] appears instead of this. See the [[mw:Project:Protected_titles|help page on MediaWiki]] for more information.',
  'protectedtitlesempty' => 'Used on [[Special:ProtectedTitles]]. This text appears if the list of protected titles is empty. See the [[mw:Project:Protected_titles|help page on MediaWiki]] for more information.',
 -'listusers' => 'Name of special page displayed in [[Special:SpecialPages]]',
 +'listusers' => '{{doc-special|ListUsers}}',
  'listusers-editsonly' => 'Option in [[Special:ListUsers]].',
  'listusers-creationsort' => 'Option in [[Special:ListUsers]].',
  'usereditcount' => 'Shown behind every username on [[Special:ListUsers]].',
  * $1 - a date
  * $2 - a time
  * $3 - the name of the user, for use in GENDER',
 -'newpages' => 'Name of special page displayed in [[Special:SpecialPages]]
 +'newpages' => '{{doc-special|NewPages}}
  {{Identical|New page}}',
  'newpages-username' => '{{Identical|Username}}',
 -'ancientpages' => 'The page title of [[Special:Ancientpages]]. [[mw:Manual:Interface/Special pages title|mw manual]]',
 +'ancientpages' => '{{doc-special|AncientPages}}
 +See [[mw:Manual:Interface/Special pages title|manual]].',
  'move' => 'Name of Move tab. Should be in the imperative mood.
  
  See also:
  {{Identical|Move}}',
  'movethispage' => '{{Identical|Move this page}}',
  'unusedimagestext' => 'Header message of [[Special:UnusedFiles]]',
 +'unusedcategoriestext' => 'Used as page header in [[Special:UnusedCategories]].',
  'notargettitle' => 'Used as title of error message.
  
  See also:
@@@ -4044,7 -4010,8 +4044,7 @@@ See also
  'querypage-disabled' => "On special pages that use expensive database queries but are not cacheable, this message is displayed when 'miser mode' is on (i.e. no expensive queries allowed).",
  
  # Book sources
 -'booksources' => 'Name of special page displayed in [[Special:SpecialPages]]
 -
 +'booksources' => '{{doc-special|BookSources}}
  See also:
  * {{msg-mw|Booksources|title}}
  * {{msg-mw|Booksources-text|text}}',
@@@ -4065,19 -4032,17 +4065,19 @@@ See also
  # Special:Log
  'specialloguserlabel' => 'Used in [[Special:Log]] as a label for an input field with which the log can be filtered for entries describing actions \'\'performed\'\' by the specified user.  "Carried out" and "done" are possible alternatives for "performed".',
  'speciallogtitlelabel' => 'Used in [[Special:Log]] as a label for an input field with which the log can be filtered.  This filter selects for pages or users on which a log action was performed.',
 -'log' => 'Name of special page displayed in [[Special:SpecialPages]]',
 +'log' => '{{doc-special|Log}}',
  'all-logs-page' => '{{doc-logpage}}
  Title of [[Special:Log]].',
  'alllogstext' => 'Header of [[Special:Log]]',
 +'logempty' => 'Used as warning when there are no items to show.',
  'log-title-wildcard' => '* Appears in: [[Special:Log]]
  * Description: A check box to enable prefix search option',
  'showhideselectedlogentries' => 'Text of the button which brings up the [[mw:RevisionDelete|RevisionDelete]] menu on [[Special:Log]].',
  
  # Special:AllPages
 -'allpages' => 'First part of the navigation bar for the special page [[Special:AllPages]] and [[Special:PrefixIndex]]. The other parts are {{msg-mw|Prevpage}} and {{msg-mw|Nextpage}}.
 -
 +'allpages' => '{{doc-special|AllPages}}
 +First part of the navigation bar for the special page [[Special:AllPages]] and [[Special:PrefixIndex]].
 +The other parts are {{msg-mw|Prevpage}} and {{msg-mw|Nextpage}}.
  {{Identical|All pages}}',
  'alphaindexline' => 'Used on [[Special:AllPages]] if the main namespace contains more than 960 pages. Indicates the page range displayed behind the link. "from page $1 to page $2". $1 is the source page name. $1 is the target page name.',
  'nextpage' => 'Third part of the navigation bar for the special page [[Special:AllPages]] and [[Special:PrefixIndex]]. $1 is a page title. The other parts are {{msg-mw|Allpages}} and {{msg-mw|Prevpage}}.
  
  {{Identical|Go}}',
  'allpagesprefix' => "Used for the label of the input box of [[Special:PrefixIndex]]. On this page you can either write 'Name of namespace:string from which to begin display in alphabetical order' in the top box, or you can choose a namespace in the bottom box and put 'string from which to begin display in alphabetical order' in the top box. The result will be the same.",
 +'allpagesbadtitle' => 'Used in [[Special:AllPages]], [[Special:PrefixIndex]] and [[Special:RecentChangesLinked]].',
  'allpages-bad-ns' => '* $1 - namespace name',
  'allpages-hide-redirects' => 'Label for a checkbox. If the checkbox is checked redirects will not be shown in the list. Used in [[Special:PrefixIndex]] and [[Special:Allpages]].',
  
  Text displayed in [[Special:Categories]].
  
  In order to translate ''Unused categories'' and ''wanted categories'' see {{msg|unusedcategories}} and {{msg|wantedcategories}}.",
 -'special-categories-sort-count' => 'This message is used on [[Special:Categories]] to sort the list by the number of members in the categories.',
 +'categoriesfrom' => 'Used as label for the input box in [[Special:Categories]].
 +
 +This message follows the fieldset label {{msg-mw|categories}}, and is followed by the input box.',
 +'special-categories-sort-count' => 'Commented out at this time.
 +
 +This message is used on [[Special:Categories]] to sort the list by the number of members in the categories.
 +
 +See also:
 +* {{msg-mw|Special-categories-sort-abc}}',
 +'special-categories-sort-abc' => 'Commented out at this time.
 +
 +This message is used on [[Special:Categories]] to sort the list by the category name.
 +
 +See also:
 +* {{msg-mw|Special-categories-sort-count}}',
  
  # Special:DeletedContributions
  'deletedcontributions' => 'The message is shown as a link on user contributions page (like [[Special:Contributions/User]]) to the corresponding [[Special:DeletedContributions]] page.
@@@ -4181,6 -4131,36 +4181,6 @@@ You can apparently use 'URL' instead o
  'listusers-blocked' => 'Used on [[Special:ActiveUsers]] when a user has been blocked.
  * $1 is a user name for use with GENDER (optional)',
  
 -# Special:ActiveUsers
 -'activeusers' => 'Title of [[Special:ActiveUsers]]',
 -'activeusers-intro' => 'Used as introduction in [[Special:ActiveUsers]]. Parameters:
 -* $1 - number of days (<code>$wgActiveUserDays</code>)',
 -'activeusers-count' => "Used in [[Special:ActiveUsers]] to show the active user's recent action count in brackets ([]).
 -* $1 is the number of recent actions
 -* $2 is the user's name for use with GENDER (optional)
 -* $3 is the maximum number of days of the RecentChangesList",
 -'activeusers-from' => 'Used as label for checkbox in the form on [[Special:ActiveUsers]].
 -
 -identical with {{msg-mw|listusersfrom}}
 -
 -See also:
 -* {{msg-mw|activeusers|legend for the form}}
 -* {{msg-mw|activeusers-hidebots|label for checkbox}}
 -* {{msg-mw|activeusers-hidesysops|label for checkbox}}',
 -'activeusers-hidebots' => 'Used as label for checkbox in the form on [[Special:ActiveUsers]].
 -
 -See also:
 -* {{msg-mw|activeusers|legend for the form}}
 -* {{msg-mw|activeusers-from|label for input box}}
 -* {{msg-mw|activeusers-hidesysops|label for checkbox}}',
 -'activeusers-hidesysops' => 'Used as label for checkbox in the form on [[Special:ActiveUsers]].
 -
 -See also:
 -* {{msg-mw|activeusers|legend for the form}}
 -* {{msg-mw|activeusers-from|label for input box}}
 -* {{msg-mw|activeusers-hidebots|label for checkbox}}',
 -'activeusers-noresult' => 'identical with {{msg-mw|listusers-noresult}}',
 -
  # Special:ListGroupRights
  'listgrouprights' => 'The name of the special page [[Special:ListGroupRights]].',
  'listgrouprights-summary' => 'The description used on [[Special:ListGroupRights]].',
@@@ -4236,11 -4216,9 +4236,11 @@@ See also
  * {{msg-mw|Emailuser}}
  * {{msg-mw|Accesskey-t-emailuser}}
  * {{msg-mw|Tooltip-t-emailuser}}',
 -'emailuser-title-target' => 'Title of [[Special:EmailUser|special page]] when a user was given to e-mail. Parameters:
 -* $1 is a plain text username, used for GENDER.',
 -'emailuser-title-notarget' => 'Title of [[Special:EmailUser|special page]] when no user given to e-mail yet',
 +'emailuser-title-target' => '{{doc-special|EmailUser|unlisted=1}}
 +Used when a user was given to e-mail. Parameters:
 +* $1 - a plain text username, used for GENDER.',
 +'emailuser-title-notarget' => '{{doc-special|EmailUser|unlisted=1}}
 +Used when no user given to e-mail yet.',
  'emailpage' => "Title of special page [[Special:EmailUser]], when it is the destination of the sidebar link {{msg-mw|Emailuser}} on a user's page.",
  'emailpagetext' => 'This is the text that is displayed above the e-mail form on [[Special:EmailUser]].
  
@@@ -4304,25 -4282,11 +4304,25 @@@ Parameters
  {{Identical|For $1}}',
  'nowatchlist' => 'Displayed when there is no pages in the watchlist.',
  'watchlistanontext' => '* $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
 -'watchnologin' => '{{Identical|Not logged in}}',
 -'addwatch' => 'Link to a dialog box, displayed at the end of the list of categories at the foot of each page.',
 +'watchnologin' => 'Used as error page title.
 +
 +The error message for this title is:
 +* {{msg-mw|Watchnologintext}}
 +{{Identical|Not logged in}}',
 +'watchnologintext' => 'Used as error message.
 +
 +The title for this error is {{msg-mw|Watchnologin}}.',
 +'addwatch' => 'Link to a dialog box, displayed at the end of the list of categories at the foot of each page.
 +
 +See also:
 +* {{msg-mw|Removewatch}}',
  'addedwatchtext' => 'Explanation shown when clicking on the {{msg-mw|watch}} tab.
  
  See also {{msg-mw|addedwatch}}.',
 +'removewatch' => 'Link to a dialog box, displayed at the end of the list of categories at the foot of each page.
 +
 +See also:
 +* {{msg-mw|Addwatch}}',
  'removedwatchtext' => "After a page has been removed from a user's watchlist by clicking the {{msg|unwatch}} tab at the top of an article, this message appears just below the title of the article. $1 is the title of the article. See also {{msg|removedwatch}} and {{msg|addedwatchtext}}.",
  'watch' => '{{doc-actionlink}}
  Name of the Watch tab. Should be in the imperative mood.
@@@ -4491,8 -4455,6 +4491,8 @@@ Possible value for $CHANGEDORCREATED i
  * {{msg|enotif_body}}',
  
  # Delete
 +'deletepage' => 'Used as Submit button text.
 +{{Identical|Delete page}}',
  'confirm' => 'Submit button text for protection confirmation
  
  {{Identical|Confirm}}',
@@@ -4518,8 -4480,8 +4518,8 @@@ See also
  * $1 is a page that was deleted
  * $2 is {{msg-mw|deletionlog}}',
  'dellogpage' => '{{doc-logpage}}
 -The name of the deletion log. Used as heading on [[Special:Log/delete]] and in the drop down menu for selecting logs on [[Special:Log]].
  
 +The name of the deletion log. Used as heading on [[Special:Log/delete]] and in the drop down menu for selecting logs on [[Special:Log]].
  {{Identical|Deletion log}}',
  'dellogpagetext' => 'Text in [[Special:Log/delete]].',
  'deletionlog' => 'This message is used to link to the deletion log:
@@@ -4605,7 -4567,6 +4605,7 @@@ The title for this error message is {{m
  
  # Protect
  'protectlogpage' => '{{doc-logpage}}
 +
  Title of [[Special:Log/protect]].',
  'protectlogtext' => 'Text in [[Special:Log/protect]].',
  'protectedarticle' => 'Text describing an action on [[Special:Log]]. $1 is a page title.',
@@@ -4660,18 -4621,14 +4660,18 @@@ Also used in [[Special:ProtectedPages]
  See also:
  *{{msg-mw|Restriction-level-sysop}}
  *{{msg-mw|Restriction-level-autoconfirmed}}',
 -'protect-expiring' => 'Used in page history, and in [[Special:Protectedtitles]], [[Special:Protectedpages]], and extension FlaggedRevs.
 -* $1 is a date and time
 -* $2 is a date (optional)
 -* $3 is a time (optional)
 -
 +'protect-expiring' => 'Used as expiry text in page history, and in [[Special:Protectedtitles]], [[Special:Protectedpages]], and extension FlaggedRevs.
 +* $1 - a date and time
 +* $2 - a date (optional)
 +* $3 - a time (optional)
 +If the expiry is indefinite, {{msg-mw|protect-expiry-indefinite}} is used.
  {{Identical|Expires $1 (UTC)}}',
  'protect-expiring-local' => '$1 is a timestamp like "22:51, 23 July 2011 (UTC)" depending on the wiki content language.',
 +'protect-expiry-indefinite' => 'Used as expiry text in page history, and in [[Special:Protectedtitles]], [[Special:Protectedpages]], and extension FlaggedRevs.
 +
 +If the expiry is definite, {{msg-mw|protect-expiring}} is used.',
  'protect-cascade' => 'See [[meta:Protect]] for more information.',
 +'protect-cantedit' => 'Used as error message when changing the protection levels of the page.',
  'protect-othertime' => 'Used on the page protection form as label for the following input field (text)
  {{Identical|Other time}}',
  'protect-othertime-op' => 'Used on the page protection form in the drop down menu
@@@ -4734,7 -4691,8 +4734,7 @@@ See also
  *{{msg-mw|Restriction-level-autoconfirmed}}",
  
  # Undelete
 -'undelete' => 'Name of special page for admins as displayed in [[Special:SpecialPages]].
 -
 +'undelete' => '{{doc-special|Undelete}}
  See also:
  * {{msg-mw|Undelete}}
  * {{msg-mw|Accesskey-ca-undelete}}
@@@ -4776,7 -4734,6 +4776,7 @@@ Parameters
  * $5 - time of the revision
  Example:
  * Deleted revision of [[Main Page]] (as of {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, at {{CURRENTTIME}}) by [[User:Username|Username]]:',
 +'undeleterevision-missing' => 'Used as warning when undeleting the revision.',
  'undelete-nodiff' => 'Used in [[Special:Undelete]].',
  'undeletebtn' => 'Shown on [[Special:Undelete]] as button caption and on [[Special:Log/delete|deletion log]] after each entry (for sysops).
  
@@@ -5053,8 -5010,8 +5053,8 @@@ See also
  # Block/unblock
  'autoblockid' => 'Used as name of autoblock, instead of autoblocked IPs. Parameters:
  * $1 - autoblock ID',
 -'block' => 'Name of the special page on [[Special:SpecialPages]]',
 -'unblock' => 'Name of the special page on [[Special:SpecialPages]]',
 +'block' => '{{doc-special|Block}}',
 +'unblock' => '{{doc-special|Unblock}}',
  'blockip' => 'The title of the special page [[Special:BlockIP]].
  
  {{Identical|Block user}}',
  'blockip-legend' => 'Legend/Header for the fieldset around the input form of [[Special:Block]].
  
  {{Identical|Block user}}',
 +'blockiptext' => 'Used in the {{msg-mw|Blockip}} form in [[Special:Block]].
 +
 +This message may follow the message {{msg-mw|Ipb-otherblocks-header}} and other block messages.
 +
 +See also:
 +* {{msg-mw|Unblockiptext}}',
  'ipadressorusername' => '{{Identical|IP address or username}}',
  'ipbexpiry' => '{{Identical|Expiry}}',
  'ipbreason' => 'Label of the block reason dropdown in [[Special:BlockIP]] and the unblock reason textfield in [{{fullurl:Special:IPBlockList|action=unblock}} Special:IPBlockList?action=unblock].
@@@ -5149,33 -5100,13 +5149,33 @@@ The title (subject) for this message i
  
  Parameters:
  * $1 - username, can be used for GENDER',
 +'ipb-blockingself' => 'Used as confirmation message in [[Special:Block]].
 +
 +See also:
 +* {{msg-mw|Ipb-confirmhideuser}}',
 +'ipb-confirmhideuser' => 'Used as confirmation message in [[Special:Block]].
 +
 +See also:
 +* {{msg-mw|Ipb-blockingself}}',
  'ipb-edit-dropdown' => 'Shown beneath the user block form on the right side. It is a link to {{msg-mw|Ipbreason-dropdown|notext=1}}.
  
  See also:
  * {{msg-mw|Delete-edit-reasonlist}}
  * {{msg-mw|Protect-edit-reasonlist}}',
 -'ipb-unblock-addr' => 'Used in [[Special:Block]].
 -* $1 - target username',
 +'ipb-unblock-addr' => 'Used as page title in [[Special:Block]], if the target user is specified.
 +
 +Parameters:
 +* $1 - target username
 +
 +See also:
 +* {{msg-mw|Ipb-unblock}}',
 +'ipb-unblock' => 'Used as page title in [[Special:Block]], if the target user is not specified.
 +
 +See also:
 +* {{msg-mw|Ipb-unblock-addr}}',
 +'ipb-blocklist' => 'Used as link text in [[Special:Block]].
 +
 +The link points to Specil:BlockList.',
  'ipb-blocklist-contribs' => 'Used in [[Special:Block]].
  * $1 - target username',
  'unblockip' => 'Used as legend for the form in [[Special:Unblock]].',
@@@ -5200,7 -5131,6 +5200,7 @@@ See also
  See also:
  * {{msg-mw|Unblocked}}
  * {{msg-mw|Unblocked-range}}',
 +'blocklist' => '{{doc-special|BlockList}}',
  'ipblocklist' => 'Title of [[Special:Ipblocklist]].',
  'ipblocklist-legend' => 'Used as legend of the form in [[Special:BlockList]].
  
@@@ -5286,14 -5216,7 +5286,14 @@@ See also {{msg-mw|Block-log-flags-nouse
  Part of the log entry of user block in [[Special:BlockList]].
  
  {{Related|Blocklist}}',
 -'ipblocklist-empty' => 'Shown on page [[Special:Blocklist]], if no blocks are to be shown.',
 +'ipblocklist-empty' => 'Used in [[Special:BlockList]], if the target is not specified.
 +
 +See also:
 +* {{msg-mw|Ipblocklist-no-results}}',
 +'ipblocklist-no-results' => 'Used in [[Special:BlockList]], if the target is specified.
 +
 +See also:
 +* {{msg-mw|Ipblocklist-empty}}',
  'blocklink' => "Display name for a link that, when selected, leads to a form where a user can be blocked. Used in page history and recent changes pages. Example: \"''UserName (Talk | contribs | '''block''')''\".
  
  Used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
@@@ -5318,8 -5241,7 +5318,8 @@@ See also
  * {{msg-mw|sp-contributions-uploads}}
  * {{msg-mw|sp-contributions-logs}}
  * {{msg-mw|sp-contributions-deleted}}
 -* {{msg-mw|sp-contributions-userrights}}',
 +* {{msg-mw|sp-contributions-userrights}}
 +{{Identical|Unblock}}',
  'change-blocklink' => 'Used to name the link on [[Special:Log]].
  
  Also used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
@@@ -5393,9 -5315,7 +5393,9 @@@ See also
  * {{msg-mw|Range block disabled}}
  * {{msg-mw|Ip range invalid}}
  * {{msg-mw|Ip range toolarge}}',
 +'ipb_expiry_invalid' => 'Used as error message in [[Special:Block]].',
  'ipb_expiry_temp' => 'Warning message displayed on [[Special:BlockIP]] if the option "hide username" is selected but the expiry time is not infinite.',
 +'ipb_hide_invalid' => 'Used as error message in [[Special:Block]].',
  'ipb_already_blocked' => '{{Identical|$1 is already blocked}}',
  'ipb-needreblock' => 'Used in [[Special:Block]].
  * $1 - target username',
@@@ -5418,8 -5338,7 +5418,8 @@@ See also
  * {{msg-mw|Range block disabled}}
  * {{msg-mw|Ip range invalid}}
  * {{msg-mw|Ip range toolarge}}',
 -'blockme' => 'The page title of [[Special:Blockme]], a feature which is disabled by default.',
 +'blockme' => '{{doc-special|BlockMe|unlisted=1}}
 +This feature is disabled by default.',
  'proxyblocker' => 'Used in [[Special:BlockMe]].
  
  See also:
@@@ -5455,6 -5374,9 +5455,9 @@@ See also
  * {{msg-mw|Sorbsreason}}
  * {{msg-mw|Sorbs create account_reason}}',
  '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.',
+ '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:
+ * $1 is the original block reason for the IP address matched in the X-Forwarded-For header",
  'ipbblocked' => 'Error message shown when a user tries to alter block settings when they are themselves blocked.',
  'ipbnounblockself' => 'Error message shown when a user without the <tt>unblockself</tt> right tries to unblock themselves.',
  
@@@ -5725,7 -5647,6 +5728,7 @@@ See also
  * $2 - new page title',
  '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.',
  'movelogpage' => '{{doc-logpage}}
 +
  Title 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.
@@@ -5924,7 -5845,6 +5927,7 @@@ The reason $1 is one of the following m
  * {{msg-mw|Thumbnail-dest-create}}
  * {{msg-mw|Thumbnail dest directory}}
  * {{msg-mw|Thumbnail invalid params}}
 +* {{msg-mw|Thumbnail image-missing}}
  * {{msg-mw|Djvu no xml}}
  * {{msg-mw|Djvu page error}}
  * {{msg-mw|Svg-long-error}}
@@@ -6747,9 -6667,7 +6750,9 @@@ Used as link text, linked to '{{int:Pre
  'pageinfo-firsttime' => 'The date and time the page was created.',
  'pageinfo-lastuser' => 'The last user who edited the page.',
  'pageinfo-lasttime' => 'The date and time the page was last edited.',
 -'pageinfo-edits' => 'The total number of times the page has been edited.',
 +'pageinfo-edits' => 'Used as label in info page. See [{{canonicalurl:Support|action=info}} example].
 +
 +This message is followed by the total number of times the page has been edited.',
  'pageinfo-authors' => 'The total number of users who have edited the page.',
  'pageinfo-recent-edits' => 'The number of times the page has been edited recently. $1 is a localised duration (e.g. 9 days).',
  'pageinfo-recent-authors' => 'The number of users who have edited the page recently.',
@@@ -7116,7 -7034,6 +7119,7 @@@ Varient Option for wikis with variants 
  # Metadata
  'metadata' => 'The title of a section on an image description page, with information and data about the image. For example of message in use see [[commons:File:Titan-crystal_bar.JPG|Commons]].
  {{Identical|Metadata}}',
 +'metadata-help' => 'This message is followed by a table with metadata.',
  'metadata-expand' => 'On an image description page, there is mostly a table containing data (metadata) about the image. The most important data are shown, but if you click on this link, you can see more data and information. For the link to hide back the less important data, see {{msg-mw|Metadata-collapse}}.',
  'metadata-collapse' => 'On an image description page, there is mostly a table containing data (metadata) about the image. The most important data are shown, but if you click on the link {{msg-mw|Metadata-expand}}, you can see more data and information. This message is for the link to hide back the less important data.',
  'metadata-fields' => '{{doc-important|Do not translate list items, only translate the text! So leave "<code>* make</code>" and the other items exactly as they are.}}
@@@ -7301,7 -7218,11 +7304,7 @@@ See [[w:Metering_mode|Wikipedia article
  'exif-flash' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
  
  See this [[w:en:Flash_(photography)|Wikipedia article]] for an explanation of the term.
 -
 -See also:
 -* {{msg-mw|Exif-flash}}
 -* {{msg-mw|Exif-flash-fired-0}}
 -* {{msg-mw|Exif-flash-fired-1}}
 +{{Related|Exif-flash}}
  {{Identical|Flash}}',
  'exif-focallength' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
  
@@@ -7504,9 -7425,7 +7507,9 @@@ This is taken from IPTC-iim 2:135 and X
  {{Identical|Category}}',
  'exif-iimsupplementalcategory' => 'Supplemental categories. Like {{msg-mw|exif-iimcategory}} but for categories beyond the main one.',
  'exif-datetimeexpires' => 'Date after which not to use the image (media). This is often used in news situations were certain things (like forecasts) should not be used after a specified date.',
 -'exif-datetimereleased' => 'Earliest date the image (media) can be used. See 2:30 of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf',
 +'exif-datetimereleased' => 'Earliest date the image (media) can be used.
 +
 +See 2:30 of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf',
  'exif-originaltransmissionref' => 'This is basically a job id. This could help an individual keep track of for what reason the image was created. See Job Id on page 19 of http://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata-201007_1.pdf',
  'exif-identifier' => 'A formal identifier for the image. Often this is a URL.',
  'exif-lens' => 'Description of lens used. This is taken from aux:Lens XMP property. See http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart2.pdf',
@@@ -7584,18 -7503,6 +7587,18 @@@ Lempel-Ziv & Welch algorithm'
  'exif-photometricinterpretation-2' => '{{optional}}',
  'exif-photometricinterpretation-6' => '{{optional}}',
  
 +'exif-unknowndate' => 'Used if the Exif date and time is "<code>0000:00:00 00:00:00</code>".
 +
 +Related Exif attributes:
 +* {{msg-mw|Exif-datetime}}
 +* {{msg-mw|Exif-datetimeoriginal}}
 +* {{msg-mw|Exif-datetimedigitized}}
 +* {{msg-mw|Exif-datetimereleased}}
 +* {{msg-mw|Exif-datetimeexpires}}
 +* {{msg-mw|Exif-gpsdatestamp}}
 +* {{msg-mw|Exif-dc-date}}
 +* {{msg-mw|Exif-datetimemetadata}}',
 +
  'exif-orientation-1' => '0th row: top; 0th column: left
  {{Related|Exif-orientation}}
  {{Identical|Normal}}',
@@@ -7722,28 -7629,55 +7725,28 @@@ See also
  'exif-lightsource-255' => '{{Related|Exif-lightsource}}',
  
  # Flash modes
 -'exif-flash-fired-0' => 'See also:
 -* {{msg-mw|Exif-flash}}
 -* {{msg-mw|Exif-flash-fired-0}}
 -* {{msg-mw|Exif-flash-fired-1}}',
 -'exif-flash-fired-1' => 'See also:
 -* {{msg-mw|Exif-flash}}
 -* {{msg-mw|Exif-flash-fired-0}}
 -* {{msg-mw|Exif-flash-fired-1}}',
 +'exif-flash-fired-0' => '{{Related|Exif-flash}}',
 +'exif-flash-fired-1' => '{{Related|Exif-flash}}',
  'exif-flash-return-0' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
  
  "Strobe" and "flash" mean the same here.
 -
 -See also:
 -* {{msg-mw|Exif-flash-return-0}}
 -* {{msg-mw|Exif-flash-return-2}}
 -* {{msg-mw|Exif-flash-return-3}}',
 +{{Related|Exif-flash}}',
  'exif-flash-return-2' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
  
  "Strobe" and "flash" mean the same here.
 -
 -See also:
 -* {{msg-mw|Exif-flash-return-0}}
 -* {{msg-mw|Exif-flash-return-2}}
 -* {{msg-mw|Exif-flash-return-3}}',
 +{{Related|Exif-flash}}',
  'exif-flash-return-3' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
  
  "Strobe" and "flash" mean the same here.
 -
 -See also:
 -* {{msg-mw|Exif-flash-return-0}}
 -* {{msg-mw|Exif-flash-return-2}}
 -* {{msg-mw|Exif-flash-return-3}}',
 +{{Related|Exif-flash}}',
  'exif-flash-mode-1' => 'This is when you have chosen that your camera must use a flash for this picture.
 -
 -See also:
 -* {{msg-mw|Exif-flash-mode-1}}
 -* {{msg-mw|Exif-flash-mode-2}}
 -* {{msg-mw|Exif-flash-mode-3}}',
 +{{Related|Exif-flash}}',
  'exif-flash-mode-2' => "This is when you have chosen that your camera must ''not'' use a flash for this picture.
 -
 -See also:
 -* {{msg-mw|Exif-flash-mode-1}}
 -* {{msg-mw|Exif-flash-mode-2}}
 -* {{msg-mw|Exif-flash-mode-3}}",
 -'exif-flash-mode-3' => 'See also:
 -* {{msg-mw|Exif-flash-mode-1}}
 -* {{msg-mw|Exif-flash-mode-2}}
 -* {{msg-mw|Exif-flash-mode-3}}',
 -'exif-flash-function-1' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
 +{{Related|Exif-flash}}",
 +'exif-flash-mode-3' => '{{Related|Exif-flash}}',
 +'exif-flash-function-1' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 +{{Related|Exif-flash}}',
 +'exif-flash-redeye-1' => '{{Related|Exif-flash}}',
  
  'exif-focalplaneresolutionunit-2' => 'See also:
  * {{msg-mw|Exif-focalplaneresolutionunit}}',
@@@ -8402,7 -8336,8 +8405,7 @@@ Parameters
  'duplicate-defaultsort' => 'See definition of [[w:Sorting|sort key]] on Wikipedia.',
  
  # Special:Version
 -'version' => 'Name of special page displayed in [[Special:SpecialPages]]
 -
 +'version' => '{{doc-special|Version}}
  {{Identical|Version}}',
  'version-extensions' => 'Header on [[Special:Version]].',
  'version-specialpages' => 'Part of [[Special:Version]].
@@@ -8486,8 -8421,7 +8489,8 @@@ $1 is the name of the requested file.'
  * $1 - file name',
  
  # Special:SpecialPages
 -'specialpages' => 'Display name of link to [[Special:SpecialPages]] shown on all pages in the toolbox, as well as the page title and header of [[Special:SpecialPages]].
 +'specialpages' => '{{doc-special|SpecialPages|unlisted=1}}
 +Display name of link to [[Special:SpecialPages]] shown on all pages in the toolbox.
  
  See also:
  * {{msg-mw|Specialpages}}
  * {{msg-mw|Tooltip-t-specialpages}}
  {{Identical|Special page}}',
  'specialpages-note' => 'Footer note for the [[Special:SpecialPages]] page',
 -'specialpages-group-maintenance' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
 -'specialpages-group-other' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
 -'specialpages-group-login' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
 -'specialpages-group-changes' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
 -'specialpages-group-media' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
 -'specialpages-group-users' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
 -'specialpages-group-highuse' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
 -'specialpages-group-pages' => 'Used on [[Special:SpecialPages]]. Title of the special pages group, containing pages like [[Special:AllPages]], [[Special:PrefixIndex]], [[Special:Categories]], [[Special:Disambiguations]], etc.',
 -'specialpages-group-pagetools' => 'Title of the special pages group containing special pages like [[Special:MovePage]], [[Special:Undelete]], [[Special:WhatLinksHere]], [[Special:Export]] etc.',
 -'specialpages-group-wiki' => 'Title of the special pages group, containing special pages like [[Special:Version]], [[Special:Statistics]], [[Special:LockDB]], etc.',
 -'specialpages-group-redirects' => 'Title of the special pages group, containing special pages that redirect to another location, like [[Special:Randompage]], [[Special:Mypage]], [[Special:Mytalk]], etc.',
 -'specialpages-group-spam' => 'Title of the special pages group, containing special pages like (...), etc.',
 +'specialpages-group-maintenance' => '{{doc-special-group|like=[[Special:DoubleRedirects]], [[Special:LonelyPages]] and [[Special:WantedPages]]}}',
 +'specialpages-group-other' => '{{doc-special-group|like=[[Special:AdminLinks]] and [[Special:BookSources]]}}',
 +'specialpages-group-login' => '{{doc-special-group|like=[[Special:UserLogin]]}}',
 +'specialpages-group-changes' => '{{doc-special-group|like=[[Special:Log]], [[Special:NewPages]] and [[Special:RecentChanges]]}}',
 +'specialpages-group-media' => '{{doc-special-group|like=[[Special:FilePath]], [[Special:MIMESearch]] and [[Special:Upload]]}}',
 +'specialpages-group-users' => '{{doc-special-group|like=[[Special:ActiveUsers]], [[Special:Contributions]] and [[Special:ListGroupRights]]}}',
 +'specialpages-group-highuse' => '{{doc-special-group|like=[[Special:MostCategories]], [[Special:MostLinked]] and [[Special:MostRevisions]]}}',
 +'specialpages-group-pages' => '{{doc-special-group|like=[[Special:AllPages]], [[Special:PrefixIndex]], [[Special:Categories]], 
 +[[Special:Disambiguations]], etc}}',
 +'specialpages-group-pagetools' => '{{doc-special-group|like=[[Special:MovePage]], [[Special:Undelete]], [[Special:WhatLinksHere]], [[Special:Export]] etc}}',
 +'specialpages-group-wiki' => '{{doc-special-group|like=[[Special:Version]], [[Special:Statistics]], [[Special:LockDB]], etc}}',
 +'specialpages-group-redirects' => '{{doc-special-group|that=redirect to another location|like=[[Special:Randompage]], [[Special:Mypage]], [[Special:Mytalk]], etc}}',
 +'specialpages-group-spam' => '{{doc-special-group}}',
  
  # Special:BlankPage
 -'blankpage' => 'Used as page title in [[Special:BlankPage]].
 -
 +'blankpage' => '{{doc-special|BlankPage|unlisted=1}}
  See also:
  * {{msg-mw|Intentionallyblankpage|text}}',
  'intentionallyblankpage' => 'Text displayed in [[Special:BlankPage]].
@@@ -8649,17 -8583,17 +8652,17 @@@ Parameters
  * $1 - version',
  
  # New logging system
 -'logentry-delete-delete' => '{{Logentry}}',
 -'logentry-delete-restore' => '{{Logentry}}',
 -'logentry-delete-event' => '{{Logentry}}
 +'logentry-delete-delete' => '{{Logentry|[[Special:Log/delete]]}}',
 +'logentry-delete-restore' => '{{Logentry|[[Special:Log/delete]]}}',
 +'logentry-delete-event' => '{{Logentry|[[Special:Log/delete]]}}
  {{Logentryparam}}
 -* $3 is the name of the log page inside parenthesis',
 -'logentry-delete-revision' => '{{Logentry}}
 +* $3 - the name of the log page inside parenthesis',
 +'logentry-delete-revision' => '{{Logentry|[[Special:Log/delete]]}}
  {{Logentryparam}}
 -* $5 is the number of affected revisions of the page $3.',
 -'logentry-delete-event-legacy' => '{{Logentry}}
 -$3 is the name of the log page inside parenthesis',
 -'logentry-delete-revision-legacy' => '{{Logentry}}',
 +* $5 - the number of affected revisions of the page $3.',
 +'logentry-delete-event-legacy' => '{{Logentry|[[Special:Log/delete]]}}
 +* $3 - the name of the log page inside parenthesis',
 +'logentry-delete-revision-legacy' => '{{Logentry|[[Special:Log/delete]]}}',
  'logentry-suppress-delete' => "{{Logentry}}
  
  'Hid' is a possible alternative to 'suppressed' in this message.",
  $3 is the name of the log page inside parenthesis',
  'logentry-suppress-revision' => '{{Logentry}}
  {{Logentryparam}}
 -* $5 is the number of affected revisions of the page $3.',
 +* $5 - the number of affected revisions of the page $3.',
  'logentry-suppress-event-legacy' => '{{Logentry}}
  $3 is the name of the log page inside parenthesis',
  'logentry-suppress-revision-legacy' => '{{Logentry}}',
  * {{msg-mw|logentry-delete-revision}}
  * {{msg-mw|logentry-suppress-event}}
  * {{msg-mw|logentry-suppress-event}}',
 -'logentry-move-move' => '{{Logentry}}
 +'logentry-move-move' => '{{Logentry|[[Special:Log/move]]}}
  Parameter $4, the target page, is also not visible to parser functions.',
 -'logentry-move-move-noredirect' => '{{Logentry}}
 +'logentry-move-move-noredirect' => '{{Logentry|[[Special:Log/move]]}}
  Parameter $4, the target page, is also not visible to parser functions.',
 -'logentry-move-move_redir' => '{{Logentry}}
 +'logentry-move-move_redir' => '{{Logentry|[[Special:Log/move]]}}
  Parameter $4, the target page, is also not visible to parser functions.',
 -'logentry-move-move_redir-noredirect' => '{{Logentry}}
 +'logentry-move-move_redir-noredirect' => '{{Logentry|[[Special:Log/move]]}}
  Parameter $4, the target page, is also not visible to parser functions.',
 -'logentry-patrol-patrol' => '{{Logentry}}
 -* $4 is a formatted revision number, maybe linked to the diff.',
 -'logentry-patrol-patrol-auto' => '{{Logentry}}
 -* $4 is a formatted revision number, maybe linked to the diff.
 +'logentry-patrol-patrol' => '{{Logentry|[[Special:Log/patrol]]}}
 +* $4 - a formatted revision number, maybe linked to the diff.',
 +'logentry-patrol-patrol-auto' => '{{Logentry|[[Special:Log/patrol]]}}
 +* $4 - a formatted revision number, maybe linked to the diff.
  "Automatically" refers to users with autopatrol right who mark revisions automatically patrolled when editing.',
 -'logentry-newusers-newusers' => 'Parameters:
 -* $1 - user name',
 -'logentry-newusers-create' => '{{Logentry}}
 +'logentry-newusers-newusers' => '{{Logentry|[[Special:Log/newusers]]}}',
 +'logentry-newusers-create' => '{{Logentry|[[Special:Log/newusers]]}}
  
  $4 is the gender of the target user.',
 -'logentry-newusers-create2' => '{{Logentry}}
 +'logentry-newusers-create2' => '{{Logentry|[[Special:Log/newusers]]}}
  
  $4 is the name of the user that was created.',
 -'logentry-newusers-byemail' => '{{Logentry}}
 +'logentry-newusers-byemail' => '{{Logentry|[[Special:Log/newusers]]}}
  
  $4 is the name of the user that was created.',
 -'logentry-newusers-autocreate' => '{{Logentry}}
 +'logentry-newusers-autocreate' => '{{Logentry|[[Special:Log/newusers]]}}
  
  $4 is the gender of the target user.',
 -'logentry-rights-rights' => '*$1 - username
 -*$2 - (see below)
 -*$3 - username
 -*$4 - list of user groups or {{msg-mw|Rightsnone}}
 -*$5 - list of user groups or {{msg-mw|Rightsnone}}
 +'logentry-rights-rights' => '* $1 - username
 +* $2 - (see below)
 +* $3 - username
 +* $4 - list of user groups or {{msg-mw|Rightsnone}}
 +* $5 - list of user groups or {{msg-mw|Rightsnone}}
  ----
 -{{Logentry}}',
 -'logentry-rights-rights-legacy' => '*$1 - username
 -*$2 - (see below)
 -*$3 - username
 +{{Logentry|[[Special:Log/rights]]}}',
 +'logentry-rights-rights-legacy' => '* $1 - username
 +* $2 - (see below)
 +* $3 - username
  ----
 -{{Logentry}}',
 -'logentry-rights-autopromote' => '*$1 - username
 -*$2 - (see below)
 -*$3 - (see below)
 -*$4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}
 -*$5 - comma separated list of new user groups
 +{{Logentry|[[Special:Log/rights]]}}',
 +'logentry-rights-autopromote' => '* $1 - username
 +* $2 - (see below)
 +* $3 - (see below)
 +* $4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}
 +* $5 - comma separated list of new user groups
  ----
 -{{Logentry}}',
 +{{Logentry|[[Special:Log/rights]]}}',
  'rightsnone' => 'Default rights for registered users.
  
  {{Identical|None}}',
@@@ -1845,6 -1845,17 +1845,6 @@@ $wgMessageStructure = array
                'listusers-noresult',
                'listusers-blocked',
        ),
 -      'activeusers' => array(
 -              'activeusers',
 -              'activeusers-summary',
 -              'activeusers-intro',
 -              'activeusers-count',
 -              'activeusers-from',
 -              'activeusers-hidebots',
 -              'activeusers-hidesysops',
 -              'activeusers-submit',
 -              'activeusers-noresult',
 -      ),
        'listgrouprights' => array(
                'listgrouprights',
                'listgrouprights-summary',
                'sorbs',
                'sorbsreason',
                'sorbs_create_account_reason',
+               'xffblockreason',
                'cant-block-while-blocked',
                'cant-see-hidden-user',
                'ipbblocked',
@@@ -3942,6 -3954,7 +3943,6 @@@ XHTML id names."
        'deletedcontribs'     => 'Special:DeletedContributions',
        'linksearch'          => 'Special:LinkSearch',
        'listusers'           => 'Special:ListUsers',
 -      'activeusers'         => 'Special:ActiveUsers',
        'newuserlog'          => 'Special:Log/newusers',
        'listgrouprights'     => 'Special:ListGroupRights',
        'emailuser'           => 'Email user',