Merge "Consistently handle anonymous users on logged-in-only special pages"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 19 Nov 2013 21:10:16 +0000 (21:10 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 19 Nov 2013 21:10:16 +0000 (21:10 +0000)
1  2 
includes/SpecialPage.php
includes/specials/SpecialWatchlist.php
languages/messages/MessagesEn.php
languages/messages/MessagesQqq.php
maintenance/language/messages.inc

diff --combined includes/SpecialPage.php
@@@ -259,7 -259,11 +259,7 @@@ class SpecialPage 
         */
        public static function getTitleFor( $name, $subpage = false, $fragment = '' ) {
                $name = SpecialPageFactory::getLocalNameFor( $name, $subpage );
 -              if ( $name ) {
 -                      return Title::makeTitle( NS_SPECIAL, $name, $fragment );
 -              } else {
 -                      throw new MWException( "Invalid special page name \"$name\"" );
 -              }
 +              return Title::makeTitle( NS_SPECIAL, $name, $fragment );
        }
  
        /**
                }
        }
  
+       /**
+        * If the user is not logged in, throws UserNotLoggedIn error.
+        *
+        * Default error message includes a link to Special:Userlogin with properly set 'returnto' query
+        * parameter.
+        *
+        * @since 1.23
+        * @param string|Message $reasonMsg [optional] Passed on to UserNotLoggedIn constructor. Strings
+        *     will be used as message keys. If a string is given, the message will also receive a
+        *     formatted login link (generated using the 'loginreqlink' message) as first parameter. If a
+        *     Message is given, it will be passed on verbatim.
+        * @param string|Message $titleMsg [optional] Passed on to UserNotLoggedIn constructor. Strings
+        *     will be used as message keys.
+        * @throws UserNotLoggedIn
+        */
+       public function requireLogin( $reasonMsg = null, $titleMsg = null ) {
+               if ( $this->getUser()->isAnon() ) {
+                       // Use default messages if not given or explicit null passed
+                       if ( !$reasonMsg ) {
+                               $reasonMsg = 'exception-nologin-text-manual';
+                       }
+                       if ( !$titleMsg ) {
+                               $titleMsg = 'exception-nologin';
+                       }
+                       // Convert to Messages with current context
+                       if ( is_string( $reasonMsg ) ) {
+                               $loginreqlink = Linker::linkKnown(
+                                       SpecialPage::getTitleFor( 'Userlogin' ),
+                                       $this->msg( 'loginreqlink' )->escaped(),
+                                       array(),
+                                       array( 'returnto' => $this->getTitle()->getPrefixedText() )
+                               );
+                               $reasonMsg = $this->msg( $reasonMsg )->rawParams( $loginreqlink );
+                       }
+                       if ( is_string( $titleMsg ) ) {
+                               $titleMsg = $this->msg( $titleMsg );
+                       }
+                       throw new UserNotLoggedIn( $reasonMsg, $titleMsg );
+               }
+       }
        /**
         * Sets headers - this should be called from the execute() method of all derived classes!
         */
         * @see wfMessage
         */
        public function msg( /* $args */ ) {
 -              // Note: can't use func_get_args() directly as second or later item in
 -              // a parameter list until PHP 5.3 or you get a fatal error.
 -              // Works fine as the first parameter, which appears elsewhere in the
 -              // code base. Sighhhh.
 -              $args = func_get_args();
 -              $message = call_user_func_array( array( $this->getContext(), 'msg' ), $args );
 +              $message = call_user_func_array(
 +                      array( $this->getContext(), 'msg' ),
 +                      func_get_args()
 +              );
                // RequestContext passes context to wfMessage, and the language is set from
                // the context, but setting the language for Message class removes the
                // interface message status, which breaks for example usernameless gender
        public function getFinalGroupName() {
                global $wgSpecialPageGroups;
                $name = $this->getName();
 -              $group = '-';
  
                // Allow overbidding the group from the wiki side
                $msg = $this->msg( 'specialpages-specialpagegroup-' . strtolower( $name ) )->inContentLanguage();
@@@ -41,18 -41,7 +41,7 @@@ class SpecialWatchlist extends SpecialP
                $output = $this->getOutput();
  
                # Anons don't get a watchlist
-               if ( $user->isAnon() ) {
-                       $output->setPageTitle( $this->msg( 'watchnologin' ) );
-                       $output->setRobotPolicy( 'noindex,nofollow' );
-                       $llink = Linker::linkKnown(
-                               SpecialPage::getTitleFor( 'Userlogin' ),
-                               $this->msg( 'loginreqlink' )->escaped(),
-                               array(),
-                               array( 'returnto' => $this->getTitle()->getPrefixedText() )
-                       );
-                       $output->addHTML( $this->msg( 'watchlistanontext' )->rawParams( $llink )->parse() );
-                       return;
-               }
+               $this->requireLogin( 'watchlistanontext', 'watchnologin' );
  
                // Check permissions
                $this->checkPermissions();
                // Add feed links
                $wlToken = $user->getTokenFromOption( 'watchlisttoken' );
                if ( $wlToken ) {
 -                      $this->addFeedLinks( array( 'action' => 'feedwatchlist', 'allrev' => 'allrev',
 -                                                              'wlowner' => $user->getName(), 'wltoken' => $wlToken ) );
 +                      $this->addFeedLinks( array(
 +                              'action' => 'feedwatchlist',
 +                              'allrev' => 1,
 +                              'wlowner' => $user->getName(),
 +                              'wltoken' => $wlToken,
 +                      ) );
                }
  
                $this->setHeaders();
                $this->outputHeader();
  
 -              $output->addSubtitle( $this->msg( 'watchlistfor2', $user->getName()
 -                      )->rawParams( SpecialEditWatchlist::buildTools( null ) ) );
 +              $output->addSubtitle(
 +                      $this->msg( 'watchlistfor2', $user->getName() )
 +                              ->rawParams( SpecialEditWatchlist::buildTools( null ) )
 +              );
  
                $request = $this->getRequest();
  
                        $nonRevisionTypes = array( RC_LOG );
                        wfRunHooks( 'SpecialWatchlistGetNonRevisionTypes', array( &$nonRevisionTypes ) );
                        if ( $nonRevisionTypes ) {
 -                              if ( count( $nonRevisionTypes ) === 1 ) {
 -                                      // if only one use an equality instead of IN condition
 -                                      $nonRevisionTypes = reset( $nonRevisionTypes );
 -                              }
                                $conds[] = $dbr->makeList(
                                        array(
                                                'rc_this_oldid=page_latest',
@@@ -556,7 -556,7 +556,7 @@@ $preloadedMessages = array
        'editsectionhint',
        'help',
        'helppage',
 -      'tooltip-iwiki',
 +      'interlanguage-link-title',
        'jumpto',
        'jumptonavigation',
        'jumptosearch',
@@@ -915,7 -915,7 +915,7 @@@ $1'
  'disclaimers'          => 'Disclaimers',
  'disclaimerpage'       => 'Project:General disclaimer',
  'edithelp'             => 'Editing help',
 -'edithelppage'         => '//www.mediawiki.org/wiki/Special:MyLanguage/Help:Editing_pages', # do not translate or duplicate this message to other languages
 +'edithelppage'         => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Editing_pages', # do not translate or duplicate this message to other languages
  'helppage'             => 'Help:Contents',
  'mainpage'             => 'Main Page',
  'mainpage-description' => 'Main page',
@@@ -976,7 -976,7 +976,7 @@@ See [[Special:Version|version page]].'
  'red-link-title'               => '$1 (page does not exist)',
  'sort-descending'              => 'Sort descending',
  'sort-ascending'               => 'Sort ascending',
 -'tooltip-iwiki'                => '$1 – $2', # only translate this message to other languages if you have to change it
 +'interlanguage-link-title'     => '$1 – $2', # only translate this message to other languages if you have to change it
  
  # Short words for each namespace, by default used in the namespace tab in monobook
  'nstab-main'      => 'Page',
@@@ -1085,7 -1085,8 +1085,8 @@@ The administrator who locked it offere
  'invalidtitle-knownnamespace'   => 'Invalid title with namespace "$2" and text "$3"',
  'invalidtitle-unknownnamespace' => 'Invalid title with unknown namespace number $1 and text "$2"',
  'exception-nologin'             => 'Not logged in',
- 'exception-nologin-text'        => 'This page or action requires you to be logged in on this wiki.',
+ 'exception-nologin-text'        => 'Please [[Special:Userlogin|log in]] to be able to access this page or action.',
+ 'exception-nologin-text-manual' => 'Please $1 to be able to access this page or action.',
  
  # Virus scanner
  'virus-badscanner'     => "Bad configuration: Unknown virus scanner: ''$1''",
@@@ -1708,7 -1709,7 +1709,7 @@@ Other administrators on {{SITENAME}} wi
  'revdelete-suppress-text'     => "Suppression should '''only''' be used for the following cases:
  * Potentially libelous information
  * Inappropriate personal information
 -*: ''home addresses and telephone numbers, social security numbers, etc.''",
 +*: ''home addresses and telephone numbers, national identification numbers, etc.''",
  'revdelete-legend'            => 'Set visibility restrictions',
  'revdelete-hide-text'         => 'Revision text',
  'revdelete-hide-image'        => 'Hide file content',
  'revdelete-hide-user'         => "Editor's username/IP address",
  'revdelete-hide-restricted'   => 'Suppress data from administrators as well as others',
  'revdelete-radio-same'        => '(do not change)',
 -'revdelete-radio-set'         => 'Visible',
 -'revdelete-radio-unset'       => 'Hidden',
 +'revdelete-radio-set'         => 'Hidden',
 +'revdelete-radio-unset'       => 'Visible',
  'revdelete-suppress'          => 'Suppress data from administrators as well as others',
  'revdelete-unsuppress'        => 'Remove restrictions on restored revisions',
  'revdelete-log'               => 'Reason:',
@@@ -1899,7 -1900,7 +1900,7 @@@ Note that their indexes of {{SITENAME}
  'mypreferences'                 => 'Preferences',
  'prefs-edits'                   => 'Number of edits:',
  'prefsnologin'                  => 'Not logged in',
- 'prefsnologintext'              => 'You must be <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logged in]</span> to set user preferences.',
+ 'prefsnologintext2'             => 'Please $1 to set user preferences.',
  'changepassword'                => 'Change password',
  'changepassword-summary'        => '', # do not translate or duplicate this message to other languages
  'prefs-skin'                    => 'Skin',
@@@ -3566,7 -3567,7 +3567,7 @@@ In the latter case you can also use a l
  'allmessagesdefault'            => 'Default message text',
  'allmessagescurrent'            => 'Current message text',
  'allmessagestext'               => 'This is a list of system messages available in the MediaWiki namespace.
 -Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
 +Please visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
  'allmessagesnotsupportedDB'     => "This page cannot be used because '''\$wgUseDatabaseMessages''' has been disabled.",
  'allmessages-filter-legend'     => 'Filter',
  'allmessages-filter'            => 'Filter by customization state:',
@@@ -3871,7 -3872,6 +3872,7 @@@ Do '''NOT''' fill this in!"
  'pageinfo-length'                 => 'Page length (in bytes)',
  'pageinfo-article-id'             => 'Page ID',
  'pageinfo-language'               => 'Page content language',
 +'pageinfo-content-model'          => 'Page content model',
  'pageinfo-robot-policy'           => 'Indexing by robots',
  'pageinfo-robot-index'            => 'Allowed',
  'pageinfo-robot-noindex'          => 'Disallowed',
@@@ -3962,7 -3962,7 +3963,7 @@@ By executing it, your system may be com
  'svg-long-desc'               => 'SVG file, nominally $1 × $2 pixels, file size: $3',
  'svg-long-desc-animated'      => 'Animated SVG file, nominally $1 × $2 pixels, file size: $3',
  'svg-long-error'              => 'Invalid SVG file: $1',
 -'show-big-image'              => 'Full resolution',
 +'show-big-image'              => 'Original file',
  'show-big-image-preview'      => 'Size of this preview: $1.',
  'show-big-image-other'        => 'Other {{PLURAL:$2|resolution|resolutions}}: $1.',
  'show-big-image-size'         => '$1 × $2 pixels',
@@@ -4536,7 -4536,7 +4537,7 @@@ $8', # only translate this message to o
  
  # External editor support
  'edit-externally'      => 'Edit this file using an external application',
 -'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
 +'edit-externally-help' => '(See the [https://www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)',
  
  # 'all' in various places, this might be different for inflected languages
  'watchlistall2' => 'all',
@@@ -4652,7 -4652,6 +4653,7 @@@ Please confirm that you really want to 
  'percent'             => '$1%', # only translate this message to other languages if you have to change it
  'parentheses'         => '($1)', # only translate this message to other languages if you have to change it
  'brackets'            => '[$1]', # only translate this message to other languages if you have to change it
 +'quotation-marks'     => '"$1"',
  
  # Multipage image navigation
  'imgmultipageprev' => '← previous page',
@@@ -4851,7 -4850,7 +4852,7 @@@ You can also [[Special:EditWatchlist|us
  'version-version'                       => '(Version $1)',
  'version-svn-revision'                  => '(r$2)', # only translate this message to other languages if you have to change it
  'version-license'                       => 'License',
 -'version-poweredby-credits'             => "This wiki is powered by '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 +'version-poweredby-credits'             => "This wiki is powered by '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
  'version-poweredby-others'              => 'others',
  'version-poweredby-translators'         => 'translatewiki.net translators',
  'version-credits-summary'               => 'We would like to recognize the following persons for their contribution to [[Special:Version|MediaWiki]].',
@@@ -70,7 -70,6 +70,7 @@@
   * @author Lejonel
   * @author Li-sung
   * @author Liangent
 + * @author Liuxinyu970226
   * @author Lloffiwr
   * @author MF-Warburg
   * @author Malafaya
@@@ -1223,6 -1222,10 +1223,10 @@@ Parameters
  'exception-nologin' => 'Generic page title used on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.
  {{Identical|Not logged in}}',
  'exception-nologin-text' => 'Generic reason displayed on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.',
+ 'exception-nologin-text-manual' => 'Generic reason displayed on error page when a user is not logged in.
+ Parameters:
+ * $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
  
  # Virus scanner
  'virus-badscanner' => 'Used as error message. Parameters:
@@@ -2027,7 -2030,7 +2031,7 @@@ See also
  Parameters:
  * \$1 - number of categories",
  'edittools' => '{{optional}}
 -This text will be shown below edit and upload forms. It can be used to offer special characters not present on most keyboards for copying/pasting, and also often makes them clickable for insertion via a javascript. Since these are seen as specific to a wiki, however, this message should not contain anything but an html comment explaining how it should be used once the wiki has been installed.',
 +This text will be shown below edit and upload forms. It can be used to offer special characters not present on most keyboards for copying/pasting, and also often makes them clickable for insertion via a JavaScript. Since these are seen as specific to a wiki, however, this message should not contain anything but an html comment explaining how it should be used once the wiki has been installed.',
  'edittools-upload' => '{{optional}}
  This text will be shown below upload forms. It will default to the contents of edittools.',
  'nocreatetext' => 'Used as error message.
@@@ -2449,14 -2452,14 +2453,14 @@@ There are three radio buttons in each r
  * {{msg-mw|Revdelete-radio-same}}
  * {{msg-mw|Revdelete-radio-set}}
  * {{msg-mw|Revdelete-radio-unset}}
 -{{Identical|Visible}}',
 +{{Identical|Hidden}}',
  'revdelete-radio-unset' => 'This message is a part of the [[mw:RevisionDelete|RevisionDelete]] feature. The message is a caption for a column of radioboxes inside a box with {{msg-mw|Revdelete-legend}} as a title.
  [[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
  There are three radio buttons in each row, and the captions above each column read:
  * {{msg-mw|Revdelete-radio-same}}
  * {{msg-mw|Revdelete-radio-set}}
  * {{msg-mw|Revdelete-radio-unset}}
 -{{Identical|Hidden}}',
 +{{Identical|Visible}}',
  'revdelete-suppress' => 'Option for oversight; used in [[Special:RevisionDelete]].
  
  See also:
@@@ -2964,8 -2967,8 +2968,8 @@@ See also
  {{Identical|Preferences}}',
  'prefs-edits' => 'In user preferences.',
  'prefsnologin' => '{{Identical|Not logged in}}',
- 'prefsnologintext' => 'Parameters:
- * $1 - URI for "returnto" argument',
+ 'prefsnologintext2' => 'Parameters:
+ * $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
  'changepassword' => "Section heading on [[Special:Preferences]], tab 'User profile'.
  {{Identical|Change password}}",
  'prefs-skin' => 'Used in user preferences.
@@@ -3033,8 -3036,7 +3037,8 @@@ When changing this message, please als
  {{Identical|Editing}}',
  'rows' => 'Used on [[Special:Preferences]], "Editing" section in the "Size of editing window" fieldset.
  {{Identical|Row}}',
 -'columns' => 'Used on [[Special:Preferences]], "Editing" section in the "Size of editing window" fieldset',
 +'columns' => 'Used on [[Special:Preferences]], "Editing" section in the "Size of editing window" fieldset.
 +{{Identical|Column}}',
  'searchresultshead' => 'This is the label of the tab in [[Special:Preferences|my preferences]] which contains options for searching the wiki.
  
  {{Identical|Search}}',
@@@ -4481,8 -4483,7 +4485,8 @@@ See also
  'file-anchor-link' => '{{Identical|File}}',
  'filehist' => 'Text shown on a media description page. Heads the section where the different versions of the file are displayed.',
  'filehist-help' => 'In file description page',
 -'filehist-deleteall' => 'Link in image description page for admins.',
 +'filehist-deleteall' => 'Link in image description page for admins.
 +{{Identical|Delete all}}',
  'filehist-deleteone' => 'Link description on file description page to delete an earlier version of a file.
  
  {{Identical|Delete}}',
@@@ -5913,7 -5914,6 +5917,7 @@@ Example (in English)
  {{Identical|View}}
  {{Identical|Restore}}',
  'undeleteviewlink' => 'First part of {{msg-mw|undeletelink}}.
 +Display name of link to view a deleted page used on [[Special:Log/delete]].
  {{Identical|View}}',
  'undeletereset' => 'Shown on [[Special:Undelete]] as button caption.
  {{Identical|Reset}}',
@@@ -7845,8 -7845,7 +7849,8 @@@ See also
  * {{msg-mw|Summary}}
  * {{msg-mw|Accesskey-summary}}
  * {{msg-mw|Tooltip-summary}}',
 -'tooltip-iwiki' => 'Format of a sidebar interwiki link tooltip. Parameters:
 +'interlanguage-link-title' => '{{Optional}}
 +Format of a sidebar interwiki link tooltip. Parameters:
  * $1 - page name in the target wiki
  * $2 - target wiki language autonym',
  
@@@ -8014,13 -8013,6 +8018,13 @@@ The label and the input box are always 
  'pageinfo-length' => 'The length of the page, in bytes.',
  'pageinfo-article-id' => 'The numeric identifier of the page.',
  'pageinfo-language' => 'Language in which the page content is written.',
 +'pageinfo-content-model' => 'The model in which the page content is written.
 +
 +Used as label at [{{fullurl:Main Page|action=info}} action=info]. Followed by one of the following messages:
 +* {{msg-mw|Content-model-wikitext}}
 +* {{msg-mw|Content-model-javascript}}
 +* {{msg-mw|Content-model-css}}
 +* {{msg-mw|Content-model-text}}',
  'pageinfo-robot-policy' => 'The search engine status of the page.
  
  Used as label. Followed by any one of the following messages:
@@@ -8254,8 -8246,7 +8258,8 @@@ Non-animated images use {{msg-mw|svg-lo
  * $1 - the error message
  See also:
  * {{msg-mw|Thumbnail error}}',
 -'show-big-image' => 'Displayed under an image at the image description page, when it is displayed smaller there than it was uploaded.',
 +'show-big-image' => 'Displayed under the file on file description pages, when a reduced-size thumbnail of the original file is being displayed.
 +{{Identical|Original file}}',
  'show-big-image-preview' => 'Message shown under the image description page thumbnail.
  
  Can be followed by {{msg-mw|Show-big-image-other}}.
@@@ -8294,9 -8285,7 +8298,9 @@@ This message may be overridden by a mor
  
  # Special:NewFiles
  'newimages' => 'Page title of [[Special:NewImages]].',
 -'imagelisttext' => 'This is text on [[Special:NewImages]]. $1 is the number of files. $2 is the message {{msg-mw|Bydate}}.',
 +'imagelisttext' => 'This is text on [[Special:NewImages]]. Parameters:
 +* $1 - the number of files
 +* $2 - the message {{msg-mw|Bydate}}',
  'newimages-summary' => 'This message is displayed at the top of [[Special:NewImages]] to explain what is shown on that special page.',
  'newimages-legend' => 'Caption of the fieldset for the filter on [[Special:NewImages]]
  
@@@ -8928,8 -8917,7 +8932,8 @@@ See 2:30 of http://www.iptc.org/std/IIM
  '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-identifier' => 'A formal identifier for the image. Often this is a URL.
 +{{Identical|Identifier}}',
  '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',
  'exif-serialnumber' => 'Serial number of camera. See aux:SerialNumber in http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart2.pdf',
  'exif-cameraownername' => 'Who owns the camera.',
@@@ -9425,7 -9413,7 +9429,7 @@@ Parameters
  
  # External editor support
  'edit-externally' => 'Displayed on image description pages. See for example [[:Image:Yes.png#filehistory]].',
 -'edit-externally-help' => '{{doc-important|Please leave the link "<code>http://www.mediawiki.org/wiki/Manual:External_editors</code>" exactly as it is.}}
 +'edit-externally-help' => '{{doc-important|Please leave the link "<code>https://www.mediawiki.org/wiki/Manual:External_editors</code>" exactly as it is.}}
  Displayed on image description pages. See for example [[:Image:Yes.png#filehistory]].',
  
  # 'all' in various places, this might be different for inflected languages
@@@ -9565,12 -9553,6 +9569,12 @@@ Most languages use a space, but some As
  'percent' => '{{optional}}',
  'parentheses' => '{{optional}}',
  'brackets' => '{{Optional}}',
 +'quotation-marks' => 'Quotation marks, for quoting, sometimes titles etc., depending on the language.
 +
 +See: [[w:Non-English usage of quotation marks|Non-English usage of quotation marks on Wikipedia]].
 +
 +Parameters: 
 +* $1 - text to be wrapped in quotation marks',
  
  # Multipage image navigation
  'imgmultipageprev' => '{{Identical|Previous page}}',
@@@ -9947,8 -9929,7 +9951,8 @@@ Used at the end of {{msg-mw|version-pow
  'version-license-info' => '[[wikipedia:GNU GPL|GNU GPL]] notice shown at [[Special:Version]]. See //www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html for available translations.',
  'version-software' => 'Message shown on [[Special:Version]].
  This message is followed by the list of installed software (MediaWiki, PHP and MySQL).',
 -'version-software-product' => 'Shown in [[Special:Version]]',
 +'version-software-product' => 'Shown in [[Special:Version]].
 +{{Identical|Product}}',
  'version-software-version' => '{{Identical|Version}}',
  'version-entrypoints' => 'Header on [[Special:Version]] above a table that lists the URLs of various entry points in this MediaWiki installation. Entry points are the "places" where the wiki\'s content and information can be accessed in various ways, for instance the standard index.php which shows normal pages, histories etc.',
  'version-entrypoints-header-entrypoint' => 'Header for the first column in the entry points table on [[Special:Version]].
@@@ -10063,8 -10044,7 +10067,8 @@@ It appears that the word 'valid' descri
  Parameters:
  * $1 - number of distinct tags for given edit
  * $2 - comma-separated list of tags for given edit',
 -'tags-title' => 'The title of [[Special:Tags]]',
 +'tags-title' => 'The title of [[Special:Tags]].
 +{{Identical|Tag}}',
  'tags-intro' => 'Explanation on top of [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].',
  'tags-tag' => 'Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].',
  'tags-display-header' => 'Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].',
@@@ -287,6 -287,7 +287,6 @@@ $wgMessageStructure = array
                'disclaimerpage',
                'edithelp',
                'edithelppage',
 -              'help',
                'helppage',
                'mainpage',
                'mainpage-description',
                'invalidtitle-unknownnamespace',
                'exception-nologin',
                'exception-nologin-text',
+               'exception-nologin-text-manual',
        ),
        'virus' => array(
                'virus-badscanner',
                'mypreferences',
                'prefs-edits',
                'prefsnologin',
-               'prefsnologintext',
+               'prefsnologintext2',
                'changepassword',
                'changepassword-summary',
                'prefs-skin',
                'prefs-namespaces',
                'defaultns',
                'default',
 -              'defaultns',
                'prefs-files',
                'prefs-custom-css',
                'prefs-custom-js',
                'lockmanager-fail-deletelock',
                'lockmanager-fail-acquirelock',
                'lockmanager-fail-openlock',
 -              'lockmanager-fail-acquirelock',
                'lockmanager-fail-releaselock',
                'lockmanager-fail-db-bucket',
                'lockmanager-fail-db-release',
                'nmembers',
                'nrevisions',
                'nviews',
 -              'nchanges',
                'nimagelinks',
                'ntransclusions',
                'specialpage-empty',
                'tooltip-undo',
                'tooltip-preferences-save',
                'tooltip-summary',
 -              'tooltip-iwiki',
 +              'interlanguage-link-title',
        ),
        'stylesheets' => array(
                'common.css',
                'pageinfo-length',
                'pageinfo-article-id',
                'pageinfo-language',
 +              'pageinfo-content-model',
                'pageinfo-robot-policy',
                'pageinfo-robot-index',
                'pageinfo-robot-noindex',
                'percent',
                'parentheses',
                'brackets',
 +              'quotation-marks',
        ),
        'imgmulti' => array(
                'imgmultipageprev',
                'lag-warn-normal',
                'lag-warn-high',
        ),
 -      'watch' => array(
 -              'confirm-watch-button',
 -      ),
        'watchlisteditor' => array(
                'editwatchlist-summary',
                'watchlistedit-numitems',
                'sqlite-has-fts',
                'sqlite-no-fts',
        ),
 -      'unwatch' => array(
 -              'confirm-unwatch-button',
 -      ),
        'logging' => array(
                'logentry-delete-delete',
                'logentry-delete-restore',
                'newuserlog-create-entry',
                'newuserlog-create2-entry',
                'newuserlog-autocreate-entry',
 -              'suppressedarticle',
 -              'deletedarticle',
                // 'uploadedimage',
                // 'overwroteimage',
                'rightslogentry',
  
  /** Comments for each block */
  $wgBlockComments = array(
 -      'sidebar'             => "The sidebar for MonoBook is generated from this message, lines that do not
 +      'sidebar' => "The sidebar for MonoBook is generated from this message, lines that do not
  begin with * or ** are discarded, furthermore lines that do begin with ** and
  do not contain | are also discarded, but do not depend on this behavior for
  future releases. Also note that since each list value is wrapped in a unique
  (X)HTML id it should only appear once and include characters that are legal
  (X)HTML id names.",
 -      'toggles'             => 'User preference toggles',
 -      'underline'           => '',
 -      'editfont'            => 'Font style option in Special:Preferences',
 -      'dates'               => 'Dates',
 -      'categorypages'       => 'Categories related messages',
 -      'mainpage'            => '',
 -      'miscellaneous1'      => '',
 -      'cologneblue'         => 'Cologne Blue skin',
 -      'vector'              => 'Vector skin',
 -      'miscellaneous2'      => '',
 -      'links'               => 'All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).',
 -      'badaccess'           => '',
 -      'versionrequired'     => '',
 -      'miscellaneous3'      => '',
 -      'nstab'               => "Short words for each namespace, by default used in the namespace tab in monobook",
 -      'main'                => 'Main script and global functions',
 -      'errors'              => 'General errors',
 -      'virus'               => 'Virus scanner',
 -      'login'               => 'Login and logout pages',
 -      'mail'                => 'Email sending',
 -      'passwordstrength'    => 'JavaScript password checks',
 -      'resetpass'           => 'Change password dialog',
 -      'passwordreset'       => 'Special:PasswordReset',
 -      'changeemail'         => 'Special:ChangeEmail',
 -      'resettokens'         => 'Special:ResetTokens',
 -      'toolbar'             => 'Edit page toolbar',
 -      'edit'                => 'Edit pages',
 -      'parserwarnings'      => 'Parser/template warnings',
 -      'contentmodels'       => 'Content models',
 -      'undo'                => '"Undo" feature',
 -      'cantcreateaccount'   => 'Account creation failure',
 -      'history'             => 'History pages',
 -      'history-feed'        => 'Revision feed',
 -      'revdelete'           => 'Revision deletion',
 -      'suppression'         => 'Suppression log',
 -      'mergehistory'        => 'History merging',
 -      'mergelog'            => 'Merge log',
 -      'diffs'               => 'Diffs',
 -      'search'              => 'Search results',
 -      'opensearch'          => 'OpenSearch description',
 -      'preferences'         => 'Preferences page',
 -      'preferences-email'   => 'User preference: email validation using jQuery',
 -      'userrights'          => 'User rights',
 -      'group'               => 'Groups',
 -      'group-member'        => '',
 -      'grouppage'           => '',
 -      'right'               => 'Rights',
 -      'action'              => 'Associated actions - in the sentence "You do not have permission to X"',
 -      'rightslog'           => 'User rights log',
 -      'recentchanges'       => 'Recent changes',
 +      'toggles' => 'User preference toggles',
 +      'underline' => '',
 +      'editfont' => 'Font style option in Special:Preferences',
 +      'dates' => 'Dates',
 +      'categorypages' => 'Categories related messages',
 +      'mainpage' => '',
 +      'miscellaneous1' => '',
 +      'cologneblue' => 'Cologne Blue skin',
 +      'vector' => 'Vector skin',
 +      'miscellaneous2' => '',
 +      'links' => 'All link text and link target definitions of links into project namespace ' .
 +              'that get used by other message strings, with the exception of user group pages (see grouppage).',
 +      'badaccess' => '',
 +      'versionrequired' => '',
 +      'miscellaneous3' => '',
 +      'nstab' => "Short words for each namespace, by default used in the namespace tab in monobook",
 +      'main' => 'Main script and global functions',
 +      'errors' => 'General errors',
 +      'virus' => 'Virus scanner',
 +      'login' => 'Login and logout pages',
 +      'mail' => 'Email sending',
 +      'passwordstrength' => 'JavaScript password checks',
 +      'resetpass' => 'Change password dialog',
 +      'passwordreset' => 'Special:PasswordReset',
 +      'changeemail' => 'Special:ChangeEmail',
 +      'resettokens' => 'Special:ResetTokens',
 +      'toolbar' => 'Edit page toolbar',
 +      'edit' => 'Edit pages',
 +      'parserwarnings' => 'Parser/template warnings',
 +      'contentmodels' => 'Content models',
 +      'undo' => '"Undo" feature',
 +      'cantcreateaccount' => 'Account creation failure',
 +      'history' => 'History pages',
 +      'history-feed' => 'Revision feed',
 +      'revdelete' => 'Revision deletion',
 +      'suppression' => 'Suppression log',
 +      'mergehistory' => 'History merging',
 +      'mergelog' => 'Merge log',
 +      'diffs' => 'Diffs',
 +      'search' => 'Search results',
 +      'opensearch' => 'OpenSearch description',
 +      'preferences' => 'Preferences page',
 +      'preferences-email' => 'User preference: email validation using jQuery',
 +      'userrights' => 'User rights',
 +      'group' => 'Groups',
 +      'group-member' => '',
 +      'grouppage' => '',
 +      'right' => 'Rights',
 +      'action' => 'Associated actions - in the sentence "You do not have permission to X"',
 +      'rightslog' => 'User rights log',
 +      'recentchanges' => 'Recent changes',
        'recentchangeslinked' => 'Recent changes linked',
 -      'upload'              => 'Upload',
 -      'zip'                 => 'ZipDirectoryReader',
 -      'upload-errors'       => '',
 -      'filebackend-errors'  => 'File backend',
 -      'filejournal-errors'  => 'File journal errors',
 -      'lockmanager-errors'  => 'Lock manager',
 -      'uploadstash'         => 'Special:UploadStash',
 -      'img-auth'            => 'img_auth script messages',
 -      'http-errors'         => 'HTTP errors',
 -      'upload-curl-errors'  => 'Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>',
 -      'licenses'            => '',
 -      'filelist'            => 'Special:ListFiles',
 -      'filedescription'     => 'File description page',
 -      'filerevert'          => 'File reversion',
 -      'filedelete'          => 'File deletion',
 -      'mimesearch'          => 'MIME search',
 -      'unwatchedpages'      => 'Unwatched pages',
 -      'listredirects'       => 'List redirects',
 -      'unusedtemplates'     => 'Unused templates',
 -      'randompage'          => 'Random page',
 -      'randomincategory'    => 'Random page in category',
 -      'randomredirect'      => 'Random redirect',
 -      'statistics'          => 'Statistics',
 -      'pageswithprop'       => '',
 -      'doubleredirects'     => '',
 -      'brokenredirects'     => '',
 -      'withoutinterwiki'    => '',
 -      'fewestrevisions'     => '',
 -      'specialpages'        => 'Miscellaneous special pages',
 -      'booksources'         => 'Book sources',
 -      'magicwords'          => 'Magic words',
 -      'logpages'            => 'Special:Log',
 -      'allpages'            => 'Special:AllPages',
 -      'categories'          => 'Special:Categories',
 -      'deletedcontribs'     => 'Special:DeletedContributions',
 -      'linksearch'          => 'Special:LinkSearch',
 -      'listusers'           => 'Special:ListUsers',
 -      'activeusers'         => 'Special:ActiveUsers',
 -      'newuserlog'          => 'Special:Log/newusers',
 -      'listgrouprights'     => 'Special:ListGroupRights',
 -      'emailuser'           => 'Email user',
 -      'usermessage'         => 'User Messenger',
 -      'watchlist'           => 'Watchlist',
 -      'watching'            => 'Displayed when you click the "watch" button and it is in the process of watching',
 -      'enotif'              => '',
 -      'delete'              => 'Delete',
 -      'rollback'            => 'Rollback',
 -      'edittokens'          => 'Edit tokens',
 -      'protect'             => 'Protect',
 -      'restrictions'        => 'Restrictions (nouns)',
 -      'restriction-levels'  => 'Restriction levels',
 -      'undelete'            => 'Undelete',
 -      'nsform'              => 'Namespace form on various pages',
 -      'contributions'       => 'Contributions',
 -      'sp-contributions'    => '',
 -      'whatlinkshere'       => 'What links here',
 -      'block'               => 'Block/unblock',
 -      'developertools'      => 'Developer tools',
 -      'movepage'            => 'Move page',
 -      'export'              => 'Export',
 -      'allmessages'         => 'Namespace 8 related',
 -      'thumbnails'          => 'Thumbnails',
 -      'import'              => 'Special:Import',
 -      'importlog'           => 'Import log',
 -      'javaccripttest'      => 'JavaScriptTest',
 -      'accesskeys'          => 'Keyboard access keys for power users',
 -      'tooltips'            => 'Tooltip help for the actions',
 -      'stylesheets'         => 'Stylesheets',
 -      'scripts'             => 'Scripts',
 -      'metadata_cc'         => 'Metadata',
 -      'attribution'         => 'Attribution',
 -      'spamprotection'      => 'Spam protection',
 -      'info'                => 'Info page',
 -      'skin'                => 'Skin names',
 -      'patrolling'          => 'Patrolling',
 -      'patrol-log'          => 'Patrol log',
 -      'imagedeletion'       => 'Image deletion',
 -      'browsediffs'         => 'Browsing diffs',
 -      'newfiles'            => 'Special:NewFiles',
 -      'video-info'          => 'Video information, used by Language::formatTimePeriod() to format lengths in the above messages',
 -      'human-timestamps'    => 'Human-readable timestamps',
 -      'badimagelist'        => 'Bad image list',
 -      'variantname-zh'      => "Short names for language variants used for language conversion links.
 +      'upload' => 'Upload',
 +      'zip' => 'ZipDirectoryReader',
 +      'upload-errors' => '',
 +      'filebackend-errors' => 'File backend',
 +      'filejournal-errors' => 'File journal errors',
 +      'lockmanager-errors' => 'Lock manager',
 +      'uploadstash' => 'Special:UploadStash',
 +      'img-auth' => 'img_auth script messages',
 +      'http-errors' => 'HTTP errors',
 +      'upload-curl-errors' => 'Some likely curl errors. More could be added from ' .
 +              '<http://curl.haxx.se/libcurl/c/libcurl-errors.html>',
 +      'licenses' => '',
 +      'filelist' => 'Special:ListFiles',
 +      'filedescription' => 'File description page',
 +      'filerevert' => 'File reversion',
 +      'filedelete' => 'File deletion',
 +      'mimesearch' => 'MIME search',
 +      'unwatchedpages' => 'Unwatched pages',
 +      'listredirects' => 'List redirects',
 +      'unusedtemplates' => 'Unused templates',
 +      'randompage' => 'Random page',
 +      'randomincategory' => 'Random page in category',
 +      'randomredirect' => 'Random redirect',
 +      'statistics' => 'Statistics',
 +      'pageswithprop' => '',
 +      'doubleredirects' => '',
 +      'brokenredirects' => '',
 +      'withoutinterwiki' => '',
 +      'fewestrevisions' => '',
 +      'specialpages' => 'Miscellaneous special pages',
 +      'booksources' => 'Book sources',
 +      'magicwords' => 'Magic words',
 +      'logpages' => 'Special:Log',
 +      'allpages' => 'Special:AllPages',
 +      'categories' => 'Special:Categories',
 +      'deletedcontribs' => 'Special:DeletedContributions',
 +      'linksearch' => 'Special:LinkSearch',
 +      'listusers' => 'Special:ListUsers',
 +      'activeusers' => 'Special:ActiveUsers',
 +      'newuserlog' => 'Special:Log/newusers',
 +      'listgrouprights' => 'Special:ListGroupRights',
 +      'emailuser' => 'Email user',
 +      'usermessage' => 'User Messenger',
 +      'watchlist' => 'Watchlist',
 +      'watching' => 'Displayed when you click the "watch" button and it is in the process of watching',
 +      'enotif' => '',
 +      'delete' => 'Delete',
 +      'rollback' => 'Rollback',
 +      'edittokens' => 'Edit tokens',
 +      'protect' => 'Protect',
 +      'restrictions' => 'Restrictions (nouns)',
 +      'restriction-levels' => 'Restriction levels',
 +      'undelete' => 'Undelete',
 +      'nsform' => 'Namespace form on various pages',
 +      'contributions' => 'Contributions',
 +      'sp-contributions' => '',
 +      'whatlinkshere' => 'What links here',
 +      'block' => 'Block/unblock',
 +      'developertools' => 'Developer tools',
 +      'movepage' => 'Move page',
 +      'export' => 'Export',
 +      'allmessages' => 'Namespace 8 related',
 +      'thumbnails' => 'Thumbnails',
 +      'import' => 'Special:Import',
 +      'importlog' => 'Import log',
 +      'javaccripttest' => 'JavaScriptTest',
 +      'accesskeys' => 'Keyboard access keys for power users',
 +      'tooltips' => 'Tooltip help for the actions',
 +      'stylesheets' => 'Stylesheets',
 +      'scripts' => 'Scripts',
 +      'metadata_cc' => 'Metadata',
 +      'attribution' => 'Attribution',
 +      'spamprotection' => 'Spam protection',
 +      'info' => 'Info page',
 +      'skin' => 'Skin names',
 +      'patrolling' => 'Patrolling',
 +      'patrol-log' => 'Patrol log',
 +      'imagedeletion' => 'Image deletion',
 +      'browsediffs' => 'Browsing diffs',
 +      'newfiles' => 'Special:NewFiles',
 +      'video-info' => 'Video information, used by Language::formatTimePeriod() to ' .
 +              'format lengths in the above messages',
 +      'human-timestamps' => 'Human-readable timestamps',
 +      'badimagelist' => 'Bad image list',
 +      'variantname-zh' => "Short names for language variants used for language conversion links.
  Variants for Chinese language",
 -      'variantname-gan'      => 'Variants for Gan language',
 -      'variantname-sr'      => 'Variants for Serbian language',
 -      'variantname-kk'      => 'Variants for Kazakh language',
 -      'variantname-ku'      => 'Variants for Kurdish language',
 -      'variantname-tg'      => 'Variants for Tajiki language',
 -      'variantname-iu'      => 'Variants for Inuktitut language',
 -      'variantname-shi'     => 'Variants for Tachelhit language',
 -      'media-info'          => 'Media information',
 -      'metadata'            => 'Metadata',
 -      'exif'                           => 'Exif tags',
 -      'exif-values'                    => 'Make & model, can be wikified in order to link to the camera and model name',
 -      'exif-compression'               => 'Exif attributes',
 -      'exif-copyrighted'               => '',
 -      'exif-unknowndate'               => '',
 +      'variantname-gan' => 'Variants for Gan language',
 +      'variantname-sr' => 'Variants for Serbian language',
 +      'variantname-kk' => 'Variants for Kazakh language',
 +      'variantname-ku' => 'Variants for Kurdish language',
 +      'variantname-tg' => 'Variants for Tajiki language',
 +      'variantname-iu' => 'Variants for Inuktitut language',
 +      'variantname-shi' => 'Variants for Tachelhit language',
 +      'media-info' => 'Media information',
 +      'metadata' => 'Metadata',
 +      'exif' => 'Exif tags',
 +      'exif-values' => 'Make & model, can be wikified in order to link to the camera and model name',
 +      'exif-compression' => 'Exif attributes',
 +      'exif-copyrighted' => '',
 +      'exif-unknowndate' => '',
        'exif-photometricinterpretation' => '',
 -      'exif-orientation'               => '',
 -      'exif-planarconfiguration'       => '',
 -      'exif-xyresolution'              => '',
 -      'exif-colorspace'                => '',
 -      'exif-componentsconfiguration'   => '',
 -      'exif-exposureprogram'           => '',
 -      'exif-subjectdistance-value'     => '',
 -      'exif-meteringmode'              => '',
 -      'exif-lightsource'               => '',
 -      'exif-flash'                     => 'Flash modes',
 -      'exif-focalplaneresolutionunit'  => '',
 -      'exif-sensingmethod'             => '',
 -      'exif-filesource'                => '',
 -      'exif-scenetype'                 => '',
 -      'exif-customrendered'            => '',
 -      'exif-exposuremode'              => '',
 -      'exif-whitebalance'              => '',
 -      'exif-scenecapturetype'          => '',
 -      'exif-gaincontrol'               => '',
 -      'exif-contrast'                  => '',
 -      'exif-saturation'                => '',
 -      'exif-sharpness'                 => '',
 -      'exif-subjectdistancerange'      => '',
 -      'exif-gpslatitude'               => 'Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef',
 -      'exif-gpslongitude'              => 'Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef',
 -      'exif-altituderef'               => 'Pseudotags used for GPSAltitudeRef',
 -      'exif-gpsstatus'                 => '',
 -      'exif-gpsmeasuremode'            => '',
 -      'exif-gpsspeed'                  => 'Pseudotags used for GPSSpeedRef',
 -      'exif-gpsdestdistanceref'        => 'Pseudotags used for GPSDestDistanceRef',
 -      'exif-gdop'                      => '',
 -      'exif-objectcycle'               => '',
 -      'exif-gpsdirection'              => 'Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef',
 -      'exif-ycbcrpositioning'          => '',
 -      'exif-dc'                        => '',
 -      'exif-rating'                    => '',
 -      'exif-isospeedratings'           => '',
 -      'exif-maxaperturevalue'          => '',
 -      'exif-iimcategory'               => '',
 -      'exif-urgency'                   => '',
 -      'edit-externally'       => 'External editor support',
 -      'all'                   => "'all' in various places, this might be different for inflected languages",
 -      'confirmemail'          => 'Email address confirmation',
 -      'scarytransclusion'     => 'Scary transclusion',
 -      'deleteconflict'        => 'Delete conflict',
 -      'unit-pixel'            => '',
 -      'purge'                 => 'action=purge',
 -      'watch-unwatch'         => 'action=watch/unwatch',
 -      'separators'            => 'Separators for various lists, etc.',
 -      'imgmulti'              => 'Multipage image navigation',
 -      'tablepager'            => 'Table pager',
 -      'autosumm'              => 'Auto-summaries',
 -      'autoblock_whitelist'   => 'Autoblock whitelist',
 -      'sizeunits'             => 'Size units',
 -      'bitrateunits'          => 'Bitrate units',
 -      'livepreview'           => 'Live preview',
 -      'lagwarning'            => 'Friendlier slave lag warnings',
 -      'watchlisteditor'       => 'Watchlist editor',
 -      'watchlisttools'        => 'Watchlist editing tools',
 -      'iranian-dates'         => 'Iranian month names',
 -      'hijri-dates'           => 'Hijri month names',
 -      'hebrew-dates'          => 'Hebrew month names',
 -      'signatures'            => 'Signatures',
 -      'CoreParserFunctions'   => 'Core parser functions',
 -      'version'               => 'Special:Version',
 -      'redirect'              => 'Special:Redirect',
 -      'fileduplicatesearch'   => 'Special:FileDuplicateSearch',
 -      'special-specialpages'  => 'Special:SpecialPages',
 -      'special-blank'         => 'Special:BlankPage',
 -      'external_images'       => 'External image whitelist',
 -      'special-tags'          => 'Special:Tags',
 -      'comparepages'          => 'Special:ComparePages',
 -      'db-error-messages'     => 'Database error messages',
 -      'html-forms'            => 'HTML forms',
 -      'sqlite'                => 'SQLite database support',
 -      'logging'               => 'New logging system',
 -      'logging-irc'           => 'For IRC, see bug 34508. Do not change',
 -      'feedback'              => 'Feedback',
 -      'searchsuggestions'     => 'Search suggestions',
 -      'apierrors'             => 'API errors',
 -      'duration'              => 'Durations',
 -      'cachedspecial'         => 'SpecialCachedPage',
 -      'rotation'              => 'Image rotation',
 -      'limitreport'           => 'Limit report',
 +      'exif-orientation' => '',
 +      'exif-planarconfiguration' => '',
 +      'exif-xyresolution' => '',
 +      'exif-colorspace' => '',
 +      'exif-componentsconfiguration' => '',
 +      'exif-exposureprogram' => '',
 +      'exif-subjectdistance-value' => '',
 +      'exif-meteringmode' => '',
 +      'exif-lightsource' => '',
 +      'exif-flash' => 'Flash modes',
 +      'exif-focalplaneresolutionunit' => '',
 +      'exif-sensingmethod' => '',
 +      'exif-filesource' => '',
 +      'exif-scenetype' => '',
 +      'exif-customrendered' => '',
 +      'exif-exposuremode' => '',
 +      'exif-whitebalance' => '',
 +      'exif-scenecapturetype' => '',
 +      'exif-gaincontrol' => '',
 +      'exif-contrast' => '',
 +      'exif-saturation' => '',
 +      'exif-sharpness' => '',
 +      'exif-subjectdistancerange' => '',
 +      'exif-gpslatitude' => 'Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef',
 +      'exif-gpslongitude' => 'Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef',
 +      'exif-altituderef' => 'Pseudotags used for GPSAltitudeRef',
 +      'exif-gpsstatus' => '',
 +      'exif-gpsmeasuremode' => '',
 +      'exif-gpsspeed' => 'Pseudotags used for GPSSpeedRef',
 +      'exif-gpsdestdistanceref' => 'Pseudotags used for GPSDestDistanceRef',
 +      'exif-gdop' => '',
 +      'exif-objectcycle' => '',
 +      'exif-gpsdirection' => 'Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef',
 +      'exif-ycbcrpositioning' => '',
 +      'exif-dc' => '',
 +      'exif-rating' => '',
 +      'exif-isospeedratings' => '',
 +      'exif-maxaperturevalue' => '',
 +      'exif-iimcategory' => '',
 +      'exif-urgency' => '',
 +      'edit-externally' => 'External editor support',
 +      'all' => "'all' in various places, this might be different for inflected languages",
 +      'confirmemail' => 'Email address confirmation',
 +      'scarytransclusion' => 'Scary transclusion',
 +      'deleteconflict' => 'Delete conflict',
 +      'unit-pixel' => '',
 +      'purge' => 'action=purge',
 +      'watch-unwatch' => 'action=watch/unwatch',
 +      'separators' => 'Separators for various lists, etc.',
 +      'imgmulti' => 'Multipage image navigation',
 +      'tablepager' => 'Table pager',
 +      'autosumm' => 'Auto-summaries',
 +      'autoblock_whitelist' => 'Autoblock whitelist',
 +      'sizeunits' => 'Size units',
 +      'bitrateunits' => 'Bitrate units',
 +      'livepreview' => 'Live preview',
 +      'lagwarning' => 'Friendlier slave lag warnings',
 +      'watchlisteditor' => 'Watchlist editor',
 +      'watchlisttools' => 'Watchlist editing tools',
 +      'iranian-dates' => 'Iranian month names',
 +      'hijri-dates' => 'Hijri month names',
 +      'hebrew-dates' => 'Hebrew month names',
 +      'signatures' => 'Signatures',
 +      'CoreParserFunctions' => 'Core parser functions',
 +      'version' => 'Special:Version',
 +      'redirect' => 'Special:Redirect',
 +      'fileduplicatesearch' => 'Special:FileDuplicateSearch',
 +      'special-specialpages' => 'Special:SpecialPages',
 +      'special-blank' => 'Special:BlankPage',
 +      'external_images' => 'External image whitelist',
 +      'special-tags' => 'Special:Tags',
 +      'comparepages' => 'Special:ComparePages',
 +      'db-error-messages' => 'Database error messages',
 +      'html-forms' => 'HTML forms',
 +      'sqlite' => 'SQLite database support',
 +      'logging' => 'New logging system',
 +      'logging-irc' => 'For IRC, see bug 34508. Do not change',
 +      'feedback' => 'Feedback',
 +      'searchsuggestions' => 'Search suggestions',
 +      'apierrors' => 'API errors',
 +      'duration' => 'Durations',
 +      'cachedspecial' => 'SpecialCachedPage',
 +      'rotation' => 'Image rotation',
 +      'limitreport' => 'Limit report',
  );