Merge "Show HTTP error (if any) when scary transclusion fails"
authorReedy <reedy@wikimedia.org>
Thu, 4 Oct 2012 15:11:25 +0000 (15:11 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 4 Oct 2012 15:11:25 +0000 (15:11 +0000)
1  2 
includes/parser/Parser.php
languages/messages/MessagesEn.php
languages/messages/MessagesQqq.php
maintenance/language/messages.inc

@@@ -163,8 -163,7 +163,8 @@@ class Parser 
        var $mLinkHolders;
  
        var $mLinkID;
 -      var $mIncludeSizes, $mPPNodeCount, $mHighestExpansionDepth, $mDefaultSort;
 +      var $mIncludeSizes, $mPPNodeCount, $mGeneratedPPNodeCount, $mHighestExpansionDepth;
 +      var $mDefaultSort;
        var $mTplExpandCache; # empty-frame expansion cache
        var $mTplRedirCache, $mTplDomCache, $mHeadings, $mDoubleUnderscores;
        var $mExpensiveFunctionCount; # number of expensive parser function calls
        public function __construct( $conf = array() ) {
                $this->mConf = $conf;
                $this->mUrlProtocols = wfUrlProtocols();
 -              $this->mExtLinkBracketedRegex = '/\[((' . $this->mUrlProtocols . ')'.
 +              $this->mExtLinkBracketedRegex = '/\[(((?i)' . $this->mUrlProtocols . ')'.
                        self::EXT_LINK_URL_CLASS.'+)\p{Zs}*([^\]\\x00-\\x08\\x0a-\\x1F]*?)\]/Su';
                if ( isset( $conf['preprocessorClass'] ) ) {
                        $this->mPreprocessorClass = $conf['preprocessorClass'];
                        'arg' => 0,
                );
                $this->mPPNodeCount = 0;
 +              $this->mGeneratedPPNodeCount = 0;
                $this->mHighestExpansionDepth = 0;
                $this->mDefaultSort = false;
                $this->mHeadings = array();
                 * to internalParse() which does all the real work.
                 */
  
 -              global $wgUseTidy, $wgAlwaysUseTidy, $wgDisableLangConversion, $wgDisableTitleConversion;
 +              global $wgUseTidy, $wgAlwaysUseTidy;
                $fname = __METHOD__.'-' . wfGetCaller();
                wfProfileIn( __METHOD__ );
                wfProfileIn( $fname );
                 * c) It's a conversion table
                 * d) it is an interface message (which is in the user language)
                 */
 -              if ( !( $wgDisableLangConversion
 -                              || isset( $this->mDoubleUnderscores['nocontentconvert'] )
 -                              || $this->mTitle->isConversionTable() ) )
 +              if ( !( $options->getDisableContentConversion()
 +                              || isset( $this->mDoubleUnderscores['nocontentconvert'] ) ) )
                {
                        # Run convert unconditionally in 1.18-compatible mode
                        global $wgBug34832TransitionalRollback;
                 * {{DISPLAYTITLE:...}} is present. DISPLAYTITLE takes precedence over
                 * automatic link conversion.
                 */
 -              if ( !( $wgDisableLangConversion
 -                              || $wgDisableTitleConversion
 +              if ( !( $options->getDisableTitleConversion()
                                || isset( $this->mDoubleUnderscores['nocontentconvert'] )
                                || isset( $this->mDoubleUnderscores['notitleconvert'] )
                                || $this->mOutput->getDisplayTitle() !== false ) )
                        $PFreport = "Expensive parser function count: {$this->mExpensiveFunctionCount}/{$this->mOptions->getExpensiveParserFunctionLimit()}\n";
                        $limitReport =
                                "NewPP limit report\n" .
 -                              "Preprocessor node count: {$this->mPPNodeCount}/{$this->mOptions->getMaxPPNodeCount()}\n" .
 +                              "Preprocessor visited node count: {$this->mPPNodeCount}/{$this->mOptions->getMaxPPNodeCount()}\n" .
 +                              "Preprocessor generated node count: " .
 +                                      "{$this->mGeneratedPPNodeCount}/{$this->mOptions->getMaxGeneratedPPNodeCount()}\n" .
                                "Post-expand include size: {$this->mIncludeSizes['post-expand']}/$max bytes\n" .
                                "Template argument size: {$this->mIncludeSizes['arg']}/$max bytes\n".
                                "Highest expansion depth: {$this->mHighestExpansionDepth}/{$this->mOptions->getMaxPPExpandDepth()}\n".
                                $PFreport;
                        wfRunHooks( 'ParserLimitReport', array( $this, &$limitReport ) );
                        $text .= "\n<!-- \n$limitReport-->\n";
 +
 +                      if ( $this->mGeneratedPPNodeCount > $this->mOptions->getMaxGeneratedPPNodeCount() / 10 ) {
 +                              wfDebugLog( 'generated-pp-node-count', $this->mGeneratedPPNodeCount . ' ' .
 +                                      $this->mTitle->getPrefixedDBkey() );
 +                      }
                }
                $this->mOutput->setText( $text );
  
                        '!(?:                           # Start cases
                                (<a[ \t\r\n>].*?</a>) |     # m[1]: Skip link text
                                (<.*?>) |                   # m[2]: Skip stuff inside HTML elements' . "
 -                              (\\b(?:$prots)$urlChar+) |  # m[3]: Free external links" . '
 +                              (\\b(?i:$prots)$urlChar+) |  # m[3]: Free external links" . '
                                (?:RFC|PMID)\s+([0-9]+) |   # m[4]: RFC or PMID, capture number
                                ISBN\s+(\b                  # m[5]: ISBN, capture number
                                        (?: 97[89] [\ \-]? )?   # optional 13-digit ISBN prefix
                        # Don't allow internal links to pages containing
                        # PROTO: where PROTO is a valid URL protocol; these
                        # should be external links.
 -                      if ( preg_match( '/^(?:' . $this->mUrlProtocols . ')/', $m[1] ) ) {
 +                      if ( preg_match( '/^(?i:' . $this->mUrlProtocols . ')/', $m[1] ) ) {
                                $s .= $prefix . '[[' . $line ;
                                wfProfileOut( __METHOD__."-misc" );
                                continue;
         * @return String: less-or-more HTML with NOPARSE bits
         */
        function armorLinks( $text ) {
 -              return preg_replace( '/\b(' . $this->mUrlProtocols . ')/',
 +              return preg_replace( '/\b((?i)' . $this->mUrlProtocols . ')/',
                        "{$this->mUniqPrefix}NOPARSE$1", $text );
        }
  
                        # Get the revision
                        $rev = $id
                                ? Revision::newFromId( $id )
 -                              : Revision::newFromTitle( $title, 0, Revision::READ_NORMAL );
 +                              : Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                        $rev_id = $rev ? $rev->getId() : 0;
                        # If there is no current revision, there is no page
                        if ( $id === false && !$rev ) {
                        return $obj->tc_contents;
                }
  
-               $text = Http::get( $url );
-               if ( !$text ) {
+               $req = MWHttpRequest::factory( $url );
+               $status = $req->execute(); // Status object
+               if ( $status->isOK() ) {
+                       $text = $req->getContent();
+               } elseif ( $req->getStatus() != 200 ) { // Though we failed to fetch the content, this status is useless.
+                       return wfMessage( 'scarytranscludefailed-httpstatus', $url, $req->getStatus() /* HTTP status */ )->inContentLanguage()->text();
+               } else {
                        return wfMessage( 'scarytranscludefailed', $url )->inContentLanguage()->text();
                }
  
                        $safeHeadline = $this->mStripState->unstripBoth( $safeHeadline );
  
                        # Strip out HTML (first regex removes any tag not allowed)
 -                      # Allowed tags are <sup> and <sub> (bug 8393), <i> (bug 26375) and <b> (r105284)
 -                      # We strip any parameter from accepted tags (second regex)
 +                      # Allowed tags are:
 +                      # * <sup> and <sub> (bug 8393)
 +                      # * <i> (bug 26375)
 +                      # * <b> (r105284)
 +                      # * <span dir="rtl"> and <span dir="ltr"> (bug 35167)
 +                      #
 +                      # We strip any parameter from accepted tags (second regex), except dir="rtl|ltr" from <span>,
 +                      # to allow setting directionality in toc items.
                        $tocline = preg_replace(
 -                              array( '#<(?!/?(sup|sub|i|b)(?: [^>]*)?>).*?'.'>#', '#<(/?(sup|sub|i|b))(?: .*?)?'.'>#' ),
 +                              array( '#<(?!/?(span|sup|sub|i|b)(?: [^>]*)?>).*?'.'>#', '#<(/?(?:span(?: dir="(?:rtl|ltr)")?|sup|sub|i|b))(?: .*?)?'.'>#' ),
                                array( '',                          '<$1>' ),
                                $safeHeadline
                        );
                                                                $paramName = 'no-link';
                                                                $value = true;
                                                                $validated = true;
 -                                                      } elseif ( preg_match( "/^$prots/", $value ) ) {
 -                                                              if ( preg_match( "/^($prots)$chars+$/u", $value, $m ) ) {
 +                                                      } elseif ( preg_match( "/^(?i)$prots/", $value ) ) {
 +                                                              if ( preg_match( "/^((?i)$prots)$chars+$/u", $value, $m ) ) {
                                                                        $paramName = 'link-url';
                                                                        $this->mOutput->addExternalLink( $value );
                                                                        if ( $this->mOptions->getExternalLinkTarget() ) {
                # @todo FIXME: Not tolerant to blank link text
                # I.E. [http://www.mediawiki.org] will render as [1] or something depending
                # on how many empty links there are on the page - need to figure that out.
 -              $text = preg_replace( '/\[(?:' . $this->mUrlProtocols . ')([^ ]+?) ([^[]+)\]/', '$2', $text );
 +              $text = preg_replace( '/\[(?i:' . $this->mUrlProtocols . ')([^ ]+?) ([^[]+)\]/', '$2', $text );
  
                # Parse wikitext quotes (italics & bold)
                $text = $this->doQuotes( $text );
@@@ -118,7 -118,7 +118,7 @@@ $namespaceGenderAliases = array()
   * A list of date format preference keys which can be selected in user
   * preferences. New preference keys can be added, provided they are supported
   * by the language class's timeanddate(). Only the 5 keys listed below are
 - * supported by the wikitext converter (DateFormatter.php).
 + * supported by the wikitext converter (parser/DateFormatter.php).
   *
   * The special key "default" is an alias for either dmy or mdy depending on
   * $wgAmericanDates
@@@ -207,6 -207,7 +207,6 @@@ $magicWords = array
        'forcetoc'                => array( 0,    '__FORCETOC__' ),
        'toc'                     => array( 0,    '__TOC__' ),
        'noeditsection'           => array( 0,    '__NOEDITSECTION__' ),
 -      'noheader'                => array( 0,    '__NOHEADER__' ),
        'currentmonth'            => array( 1,    'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'           => array( 1,    'CURRENTMONTH1' ),
        'currentmonthname'        => array( 1,    'CURRENTMONTHNAME' ),
@@@ -441,6 -442,7 +441,6 @@@ $specialPageAliases = array
        'Recentchanges'             => array( 'RecentChanges' ),
        'Recentchangeslinked'       => array( 'RecentChangesLinked', 'RelatedChanges' ),
        'Revisiondelete'            => array( 'RevisionDelete' ),
 -      'RevisionMove'              => array( 'RevisionMove' ),
        'Search'                    => array( 'Search' ),
        'Shortpages'                => array( 'ShortPages' ),
        'Specialpages'              => array( 'SpecialPages' ),
@@@ -798,7 -800,7 +798,7 @@@ XHTML id names
  'vector-action-protect'          => 'Protect',
  'vector-action-undelete'         => 'Undelete',
  'vector-action-unprotect'        => 'Change protection',
 -'vector-simplesearch-preference' => 'Enable enhanced search suggestions (Vector skin only)',
 +'vector-simplesearch-preference' => 'Enable simplified search bar (Vector skin only)',
  'vector-view-create'             => 'Create',
  'vector-view-edit'               => 'Edit',
  'vector-view-history'            => 'View history',
@@@ -912,8 -914,8 +912,8 @@@ See [[Special:Version|version page]].'
  'newmessagesdifflink'          => 'last change',
  'youhavenewmessagesfromusers'  => 'You have $1 from {{PLURAL:$3|another user|$3 users}} ($2).',
  'youhavenewmessagesmanyusers'  => 'You have $1 from many users ($2).',
 -'newmessageslinkplural'        => '{{PLURAL:$1|a new message|new messages}}', # don't rely on the value of $1, it's 1 for singular and 2 for "more than one"
 -'newmessagesdifflinkplural'    => 'last {{PLURAL:$1|change|changes}}', # don't rely on the value of $1, it's 1 for singular and 2 for "more than one"
 +'newmessageslinkplural'        => '{{PLURAL:$1|a new message|new messages}}',
 +'newmessagesdifflinkplural'    => 'last {{PLURAL:$1|change|changes}}',
  'youhavenewmessagesmulti'      => 'You have new messages on $1',
  'newtalkseparator'             => ',&#32;', # do not translate or duplicate this message to other languages
  'editsection'                  => 'edit',
@@@ -1035,11 -1037,10 +1035,11 @@@ Please try again in a few minutes.'
  'protectedpagetext'             => 'This page has been protected to prevent editing.',
  'viewsourcetext'                => 'You can view and copy the source of this page:',
  'viewyourtext'                  => "You can view and copy the source of '''your edits''' to this page:",
 -'protectedinterface'            => 'This page provides interface text for the software, and is protected to prevent abuse.',
 +'protectedinterface'            => 'This page provides interface text for the software on this wiki, and is protected to prevent abuse.
 +To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.',
  'editinginterface'              => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
 -Changes to this page will affect the appearance of the user interface for other users.
 -For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
 +Changes to this page will affect the appearance of the user interface for other users on this wiki.
 +To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
  'sqlhidden'                     => '(SQL query hidden)',
  'cascadeprotected'              => 'This page has been protected from editing, because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the "cascading" option turned on:
  $2',
@@@ -1361,7 -1362,8 +1361,7 @@@ You can [[Special:Search/{{PAGENAME}}|s
  <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],
  or [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.',
  'noarticletext-nopermission'       => 'There is currently no text in this page.
 -You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,
 -or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>.',
 +You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages, or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>, but you do not have permission to create this page.',
  'noarticletextanon'                => '{{int:noarticletext}}', # do not translate or duplicate this message to other languages
  'missing-revision'                 => 'The revision #$1 of the page named "{{PAGENAME}}" does not exist.
  
@@@ -1433,7 -1435,6 +1433,7 @@@ You are also promising us that you wrot
  If you do not want your writing to be edited mercilessly, then do not submit it here.<br />
  You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see $1 for details).
  '''Do not submit copyrighted work without permission!'''",
 +'editpage-head-copy-warn'          => '-', # do not translate or duplicate this message to other languages
  'editpage-tos-summary'             => '-', # do not translate or duplicate this message to other languages
  'longpage-hint'                    => '-', # do not translate or duplicate this message to other languages
  'longpageerror'                    => "'''Error: The text you have submitted is {{PLURAL:$1|one kilobyte|$1 kilobytes}} long, which is longer than the maximum of {{PLURAL:$2|one kilobyte|$2 kilobytes}}.'''
@@@ -1645,8 -1646,7 +1645,8 @@@ Please check the logs.'
  'revdelete-only-restricted'   => 'Error hiding the item dated $2, $1: You cannot suppress items from view by administrators without also selecting one of the other visibility options.',
  'revdelete-reason-dropdown'   => '*Common delete reasons
  ** Copyright violation
 -** Inappropriate personal information
 +** Inappropriate comment or personal information
 +** Inappropriate username
  ** Potentially libelous information',
  'revdelete-otherreason'       => 'Other/additional reason:',
  'revdelete-reasonotherlist'   => 'Other reason',
@@@ -1751,6 -1751,8 +1751,6 @@@ Details can be found in the [{{fullurl:
  'search-interwiki-default'         => '$1 results:',
  'search-interwiki-custom'          => '', # do not translate or duplicate this message to other languages
  'search-interwiki-more'            => '(more)',
 -'search-mwsuggest-enabled'         => 'with suggestions',
 -'search-mwsuggest-disabled'        => 'no suggestions',
  'search-relatedarticle'            => 'Related',
  'mwsuggest-disable'                => 'Disable AJAX suggestions',
  'searcheverything-enable'          => 'Search in all namespaces',
@@@ -1867,7 -1869,7 +1867,7 @@@ Here's a randomly-generated value you c
  'timezoneregion-indian'         => 'Indian Ocean',
  'timezoneregion-pacific'        => 'Pacific Ocean',
  'allowemail'                    => 'Enable e-mail from other users',
 -'prefs-searchoptions'           => 'Search options',
 +'prefs-searchoptions'           => 'Search',
  'prefs-namespaces'              => 'Namespaces',
  'defaultns'                     => 'Otherwise search in these namespaces:',
  'default'                       => 'default',
@@@ -2203,16 -2205,16 +2203,16 @@@ this file is $2.'
  This might be due to a typo in the filename.
  Please check whether you really want to upload this file.',
  'windows-nonascii-filename'   => 'This wiki does not support filenames with special characters.',
 -'fileexists'                  => "A file with this name exists already, please check <strong>[[:$1]]</strong> if you are not sure if you want to change it.
 -[[$1|thumb]]",
 -'filepageexists'              => "The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.
 +'fileexists'                  => 'A file with this name exists already, please check <strong>[[:$1]]</strong> if you are not sure if you want to change it.
 +[[$1|thumb]]',
 +'filepageexists'              => 'The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.
  The summary you enter will not appear on the description page.
  To make your summary appear there, you will need to manually edit it.
 -[[$1|thumb]]",
 -'fileexists-extension'        => "A file with a similar name exists: [[$2|thumb]]
 +[[$1|thumb]]',
 +'fileexists-extension'        => 'A file with a similar name exists: [[$2|thumb]]
  * Name of the uploading file: <strong>[[:$1]]</strong>
  * Name of the existing file: <strong>[[:$2]]</strong>
 -Please choose a different name.",
 +Please choose a different name.',
  'fileexists-thumbnail-yes'    => "The file seems to be an image of reduced size ''(thumbnail)''.
  [[$1|thumb]]
  Please check the file <strong>[[:$1]]</strong>.
@@@ -2318,7 -2320,7 +2318,7 @@@ If the problem persists, contact an [[S
  'backend-fail-internal'      => 'An unknown error occurred in storage backend "$1".',
  'backend-fail-contenttype'   => 'Could not determine the content type of the file to store at "$1".',
  'backend-fail-batchsize'     => 'The storage backend was given a batch of $1 file {{PLURAL:$1|operation|operations}}; the limit is $2 {{PLURAL:$2|operation|operations}}.',
 -'backend-fail-usable'        => 'Could not write file "$1" due to insufficient permissions or missing directories/containers.',
 +'backend-fail-usable'        => 'Could not read or write file "$1" due to insufficient permissions or missing directories/containers.',
  
  # File journal errors
  'filejournal-fail-dbconnect' => 'Could not connect to the journal database for storage backend "$1".',
@@@ -2791,38 -2793,38 +2791,38 @@@ There may be [[{{MediaWiki:Listgrouprig
  'listgrouprights-removegroup-self-all' => 'Remove all groups from own account',
  
  # E-mail user
 -'mailnologin'          => 'No send address',
 -'mailnologintext'      => 'You must be [[Special:UserLogin|logged in]] and have a valid e-mail address in your [[Special:Preferences|preferences]] to send e-mail to other users.',
 -'emailuser'            => 'E-mail this user',
 -'emailuser-title-target' => 'E-mail this {{GENDER:$1|user}}',
 +'mailnologin'              => 'No send address',
 +'mailnologintext'          => 'You must be [[Special:UserLogin|logged in]] and have a valid e-mail address in your [[Special:Preferences|preferences]] to send e-mail to other users.',
 +'emailuser'                => 'E-mail this user',
 +'emailuser-title-target'   => 'E-mail this {{GENDER:$1|user}}',
  'emailuser-title-notarget' => 'E-mail user',
 -'emailuser-summary'    => '', # do not translate or duplicate this message to other languages
 -'emailpage'            => 'E-mail user',
 -'emailpagetext'        => 'You can use the form below to send an e-mail message to this user.
 +'emailuser-summary'        => '', # do not translate or duplicate this message to other languages
 +'emailpage'                => 'E-mail user',
 +'emailpagetext'            => 'You can use the form below to send an e-mail message to this user.
  The e-mail address you entered in [[Special:Preferences|your user preferences]] will appear as the "From" address of the e-mail, so the recipient will be able to reply directly to you.',
 -'usermailererror'      => 'Mail object returned error:',
 -'defemailsubject'      => '{{SITENAME}} e-mail from user "$1"',
 -'usermaildisabled'     => 'User e-mail disabled',
 -'usermaildisabledtext' => 'You cannot send e-mail to other users on this wiki',
 -'noemailtitle'         => 'No e-mail address',
 -'noemailtext'          => 'This user has not specified a valid e-mail address.',
 -'nowikiemailtitle'     => 'No e-mail allowed',
 -'nowikiemailtext'      => 'This user has chosen not to receive e-mail from other users.',
 -'emailnotarget'        => 'Non-existent or invalid username for recipient.',
 -'emailtarget'          => 'Enter username of recipient',
 -'emailusername'        => 'Username:',
 -'emailusernamesubmit'  => 'Submit',
 -'email-legend'         => 'Send an e-mail to another {{SITENAME}} user',
 -'emailfrom'            => 'From:',
 -'emailto'              => 'To:',
 -'emailsubject'         => 'Subject:',
 -'emailmessage'         => 'Message:',
 -'emailsend'            => 'Send',
 -'emailccme'            => 'E-mail me a copy of my message.',
 -'emailccsubject'       => 'Copy of your message to $1: $2',
 -'emailsent'            => 'E-mail sent',
 -'emailsenttext'        => 'Your e-mail message has been sent.',
 -'emailuserfooter'      => 'This e-mail was sent by $1 to $2 by the "E-mail user" function at {{SITENAME}}.',
 +'usermailererror'          => 'Mail object returned error:',
 +'defemailsubject'          => '{{SITENAME}} e-mail from user "$1"',
 +'usermaildisabled'         => 'User e-mail disabled',
 +'usermaildisabledtext'     => 'You cannot send e-mail to other users on this wiki',
 +'noemailtitle'             => 'No e-mail address',
 +'noemailtext'              => 'This user has not specified a valid e-mail address.',
 +'nowikiemailtitle'         => 'No e-mail allowed',
 +'nowikiemailtext'          => 'This user has chosen not to receive e-mail from other users.',
 +'emailnotarget'            => 'Non-existent or invalid username for recipient.',
 +'emailtarget'              => 'Enter username of recipient',
 +'emailusername'            => 'Username:',
 +'emailusernamesubmit'      => 'Submit',
 +'email-legend'             => 'Send an e-mail to another {{SITENAME}} user',
 +'emailfrom'                => 'From:',
 +'emailto'                  => 'To:',
 +'emailsubject'             => 'Subject:',
 +'emailmessage'             => 'Message:',
 +'emailsend'                => 'Send',
 +'emailccme'                => 'E-mail me a copy of my message.',
 +'emailccsubject'           => 'Copy of your message to $1: $2',
 +'emailsent'                => 'E-mail sent',
 +'emailsenttext'            => 'Your e-mail message has been sent.',
 +'emailuserfooter'          => 'This e-mail was sent by $1 to $2 by the "E-mail user" function at {{SITENAME}}.',
  
  # User Messenger
  'usermessage-summary'  => 'Leaving system message.',
@@@ -3521,6 -3523,7 +3521,6 @@@ Please try again.'
  # JavaScriptTest
  'javascripttest'                           => 'JavaScript testing',
  'javascripttest-backlink'                  => '< $1', # do not translate or duplicate this message to other languages
 -'javascripttest-disabled'                  => 'This function has not been enabled on this wiki.',
  'javascripttest-title'                     => 'Running $1 tests',
  'javascripttest-pagetext-noframework'      => 'This page is reserved for running JavaScript tests.',
  'javascripttest-pagetext-unknownframework' => 'Unknown testing framework "$1".',
@@@ -3731,7 -3734,6 +3731,7 @@@ This is probably caused by a link to a 
  'spam_deleting'       => 'All revisions contained links to $1, deleting',
  
  # Info page
 +'pageinfo-header'              => '-', # do not translate or duplicate this message to other languages
  'pageinfo-title'               => 'Information for "$1"',
  'pageinfo-header-basic'        => 'Basic information',
  'pageinfo-header-edits'        => 'Edit history',
  'pageinfo-views'               => 'Number of views',
  'pageinfo-watchers'            => 'Number of page watchers',
  'pageinfo-redirects-name'      => 'Redirects to this page',
 -'pageinfo-redirects-value'     => '$1',
 +'pageinfo-redirects-value'     => '$1', # only translate this message to other languages if you have to change it
  'pageinfo-subpages-name'       => 'Subpages of this page',
  'pageinfo-subpages-value'      => '$1 ($2 {{PLURAL:$2|redirect|redirects}}; $3 {{PLURAL:$3|non-redirect|non-redirects}})',
  'pageinfo-firstuser'           => 'Page creator',
  'pageinfo-authors'             => 'Total number of distinct authors',
  'pageinfo-recent-edits'        => 'Recent number of edits (within past $1)',
  'pageinfo-recent-authors'      => 'Recent number of distinct authors',
 -'pageinfo-restriction'         => 'Page protection (<code>{{lcfirst:$1}}</code>)',
 +'pageinfo-restriction'         => 'Page protection ({{lcfirst:$1}})',
  'pageinfo-magic-words'         => 'Magic {{PLURAL:$1|word|words}} ($1)',
  'pageinfo-hidden-categories'   => 'Hidden {{PLURAL:$1|category|categories}} ($1)',
  'pageinfo-templates'           => 'Transcluded {{PLURAL:$1|template|templates}} ($1)',
 +'pageinfo-footer'              => '-', # do not translate or duplicate this message to other languages
 +'pageinfo-toolboxlink'         => 'Page information',
  
  # Skin names
  'skinname-standard'    => 'Classic', # only translate this message to other languages if you have to change it
  'nextdiff'     => 'Newer edit →',
  
  # Media information
 -'mediawarning'           => "'''Warning''': This file type may contain malicious code.
 +'mediawarning'                => "'''Warning''': This file type may contain malicious code.
  By executing it, your system may be compromised.",
 -'imagemaxsize'           => "Image size limit:<br />''(for file description pages)''",
 -'thumbsize'              => 'Thumbnail size:',
 -'widthheight'            => '$1 × $2', # only translate this message to other languages if you have to change it
 -'widthheightpage'        => '$1 × $2, $3 {{PLURAL:$3|page|pages}}',
 -'file-info'              => 'file size: $1, MIME type: $2',
 -'file-info-size'         => '$1 × $2 pixels, file size: $3, MIME type: $4',
 -'file-info-size-pages'   => '$1 × $2 pixels, file size: $3, MIME type: $4, $5 {{PLURAL:$5|page|pages}}',
 -'file-nohires'           => 'No higher resolution available.',
 -'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',
 -'show-big-image'         => 'Full resolution',
 -'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',
 -'file-info-gif-looped'   => 'looped',
 -'file-info-gif-frames'   => '$1 {{PLURAL:$1|frame|frames}}',
 -'file-info-png-looped'   => 'looped',
 -'file-info-png-repeat'   => 'played $1 {{PLURAL:$1|time|times}}',
 -'file-info-png-frames'   => '$1 {{PLURAL:$1|frame|frames}}',
 -'file-no-thumb-animation'=> '\'\'\'Note: Due to technical limitations, thumbnails of this file will not be animated.\'\'\'',
 -'file-no-thumb-animation-gif' => '\'\'\'Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated.\'\'\'',
 +'imagemaxsize'                => "Image size limit:<br />''(for file description pages)''",
 +'thumbsize'                   => 'Thumbnail size:',
 +'widthheight'                 => '$1 × $2', # only translate this message to other languages if you have to change it
 +'widthheightpage'             => '$1 × $2, $3 {{PLURAL:$3|page|pages}}',
 +'file-info'                   => 'file size: $1, MIME type: $2',
 +'file-info-size'              => '$1 × $2 pixels, file size: $3, MIME type: $4',
 +'file-info-size-pages'        => '$1 × $2 pixels, file size: $3, MIME type: $4, $5 {{PLURAL:$5|page|pages}}',
 +'file-nohires'                => 'No higher resolution available.',
 +'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',
 +'show-big-image'              => 'Full resolution',
 +'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',
 +'file-info-gif-looped'        => 'looped',
 +'file-info-gif-frames'        => '$1 {{PLURAL:$1|frame|frames}}',
 +'file-info-png-looped'        => 'looped',
 +'file-info-png-repeat'        => 'played $1 {{PLURAL:$1|time|times}}',
 +'file-info-png-frames'        => '$1 {{PLURAL:$1|frame|frames}}',
 +'file-no-thumb-animation'     => "'''Note: Due to technical limitations, thumbnails of this file will not be animated.'''",
 +'file-no-thumb-animation-gif' => "'''Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated.'''",
  
  # Special:NewFiles
  'newimages'             => 'Gallery of new files',
@@@ -4458,9 -4458,10 +4458,10 @@@ This confirmation code will expire at $
  'invalidateemail'           => 'Cancel e-mail confirmation',
  
  # Scary transclusion
- 'scarytranscludedisabled' => '[Interwiki transcluding is disabled]',
- 'scarytranscludefailed'   => '[Template fetch failed for $1]',
- 'scarytranscludetoolong'  => '[URL is too long]',
+ 'scarytranscludedisabled'          => '[Interwiki transcluding is disabled]',
+ 'scarytranscludefailed'            => '[Template fetch failed for $1]',
+ 'scarytranscludefailed-httpstatus' => '[Template fetch failed for $1: HTTP $2]',
+ 'scarytranscludetoolong'           => '[URL is too long]',
  
  # Delete conflict
  'deletedwhileediting'      => "'''Warning''': This page was deleted after you started editing!",
@@@ -4694,7 -4695,7 +4695,7 @@@ You can also [[Special:EditWatchlist|us
  '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-others'              => '[{{SERVER}}{{SCRIPTPATH}}/CREDITS others]',
 +'version-poweredby-others'              => 'others',
  'version-license-info'                  => 'MediaWiki is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
  
  MediaWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
@@@ -4873,7 -4874,7 +4874,7 @@@ This site is experiencing technical dif
  
  # Feedback
  'feedback-bugornote' => 'If you are ready to describe a technical problem in detail please [$1 report a bug].
 -Otherwise, you can use the easy form below. Your comment will be added to the page "[$3 $2]", along with your username and what browser you are using.',
 +Otherwise, you can use the easy form below. Your comment will be added to the page "[$3 $2]", along with your username.',
  'feedback-subject'   => 'Subject:',
  'feedback-message'   => 'Message:',
  'feedback-cancel'    => 'Cancel',
  'feedback-bugcheck'  => 'Great! Just check that it is not already one of the [$1 known bugs].',
  'feedback-bugnew'    => 'I checked. Report a new bug',
  
 +# Search suggestions
 +'searchsuggest-search'     => 'Search',
 +'searchsuggest-containing' => 'containing...',
 +
  # API errors
  'api-error-badaccess-groups'              => 'You are not permitted to upload files to this wiki.',
  'api-error-badtoken'                      => 'Internal error: Bad token.',
@@@ -26,7 -26,6 +26,7 @@@
   * @author Brest
   * @author BrokenArrow
   * @author Byrial
 + * @author BáthoryPéter
   * @author Claudia Hattitten
   * @author Codex Sinaiticus
   * @author Crt
@@@ -82,8 -81,6 +82,8 @@@
   * @author Nemo bis
   * @author Niels
   * @author Nike
 + * @author Njardarlogar
 + * @author Nnemo
   * @author Node ue
   * @author Octahedron80
   * @author Od1n
@@@ -465,8 -462,7 +465,8 @@@ Also used as title of [[Special:Search]
  'toolbox' => 'The title of the toolbox below the search menu.',
  'otherlanguages' => 'This message is shown under the toolbox. It is used if there are interwiki links added to the page, like <tt><nowiki>[[</nowiki>en:Interwiki article]]</tt>.
  {{Identical|Otherlanguages}}',
 -'redirectedfrom' => 'The text displayed when a certain page is redirected to another page. Variable <tt>$1</tt> contains the name of the page user came from.',
 +'redirectedfrom' => 'The text displayed when a certain page is redirected to another page.
 +*<tt>$1</tt> contains the name of the page user came from.',
  'redirectpagesub' => 'Displayed under the page title of a page which is a redirect to another page, see [{{fullurl:Project:Translators|redirect=no}} Project:Translators] for example.
  
  {{Identical|Redirect page}}',
@@@ -548,16 -544,16 +548,16 @@@ Do '''not''' replace SITENAME with a tr
  Appears in subtitle
  * $1 is a link to the page (HTML)',
  'retrievedfrom' => 'Message which appears in the source of every page, but it is hidden. It is shown when printing. $1 is a link back to the current page: {{FULLURL:{{FULLPAGENAME}}}}.',
 -'youhavenewmessages' => 'The blue message appearing when someone edited your user talk page.
 +'youhavenewmessages' => 'The yellow message appearing when someone edited your user talk page.
  The format is: "{{int:youhavenewmessages| [[MediaWiki:Newmessageslink/{{SUBPAGENAME}}|{{int:newmessageslink}}]] |[[MediaWiki:Newmessagesdifflink/{{SUBPAGENAME}}|{{int:newmessagesdifflink}}]]}}"',
  'newmessageslink' => 'This is the first link displayed in an orange rectangle when a user gets a message on his talk page. Used in message {{msg-mw|youhavenewmessages}} (as parameter $1).
  
  {{Identical|New messages}}',
  'newmessagesdifflink' => 'This is the second link displayed in an orange rectangle when a user gets a message on his talk page. Used in message {{msg-mw|youhavenewmessages}} (as parameter $2).',
  'youhavenewmessagesfromusers' => 'New talk indicator message: the message appearing when someone edited your user talk page.
- The message takes three parameters; 
- *$1 {{msg-mw|newmessageslinkplural}}, 
- *$2 {{msg-mw|newmessagesdifflinkplural}}, and 
+ The message takes three parameters;
+ *$1 {{msg-mw|newmessageslinkplural}},
+ *$2 {{msg-mw|newmessagesdifflinkplural}}, and
  *$3 the number of authors who have edited the talk page since the owning user last viewed it.',
  'youhavenewmessagesmanyusers' => 'New talk indicator message: the message appearing when someone edited your user talk page. Used when more than 10 users edited the user talk page since the owning user last viewed it, similar to{{msg-mw|youhavenewmessages}}. Parameters:
  * $1 is {{msg-mw|newmessageslinkplural}},
@@@ -707,12 -703,8 +707,12 @@@ $1 is a filename, I think.'
  * $1: the protection type, e.g. "protect" for fully protected pages',
  'viewsourcetext' => 'The text shown when displaying the source of a page that the user has no permission to edit',
  'viewyourtext' => 'Same as {{msg-mw|viewsourcetext}} but when showing the text submitted by the user, this happens e.g. when the user was blocked while he is editing the page',
 -'protectedinterface' => 'Message shown if a user without the "editinterface" right tries to edit a page in the MediaWiki namespace.',
 -'editinginterface' => "A message shown when editing pages in the namespace MediaWiki:. In the [http://translatewiki.net/wiki/Main_Page?setlang=en URL], '''change \"setlang=en\" to your own language code.'''",
 +'protectedinterface' => 'Message shown if a user without the "editinterface" right tries to edit a page in the MediaWiki namespace.
 +
 +See also {{msg-mw|editinginterface}}.',
 +'editinginterface' => 'A message shown when editing pages in the namespace MediaWiki:.
 +
 +See also {{msg-mw|protectedinterface}}.',
  'ns-specialprotected' => 'Error message displayed when trying to edit a page in the Special namespace',
  'titleprotected' => 'Use $1 for GENDER.',
  'invalidtitle-knownnamespace' => 'Displayed when an invalid title was encountered (generally in a list), but the namespace number is known to exist.
@@@ -799,7 -791,7 +799,7 @@@ $1 is the minimum number of characters 
  'mailmypassword' => 'Shown at [[Special:UserLogin]]',
  'passwordremindertitle' => 'Title of e-mail which contains temporary password',
  'passwordremindertext' => 'This text is used in an e-mail sent when a user requests a new temporary password (he has forgotten his password) or when an sysop creates a new user account choosing to have password and username sent to the new user by e-mail.
 -* $1 is an IP addres. Example: 123.123.123.123
 +* $1 is an IP address. Example: 123.123.123.123
  * $2 is a username. Example: Joe
  * $3 is a password. Example: er##@fdas!
  * $4 is a URL. Example: http://wiki.example.com
@@@ -1411,11 -1403,8 +1411,11 @@@ This is a search result (and I guess se
  
  This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is "More Like This" functionality. Microsoft glossary defines MLT as "A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry."[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]',
  'searchall' => '{{Identical|All}}',
 -'showingresults' => "This message is used on some special pages such as 'Wanted categories'. $1 is the total number of results in the batch shown and $2 is the number of the first item listed.",
 -'showingresultsnum' => '$3 is the number of results on the page and $2 is the first number in the batch of results.',
 +'showingresults' => "This message is used on some special pages such as 'Wanted categories'.
 +*$1 is the total number of results in the batch shown.
 +*$2 is the number of the first item listed.",
 +'showingresultsnum' => '*$3 is the number of results on the page.
 +*$2 is the first number in the batch of results.',
  'showingresultsheader' => 'Used in search results of [[Special:Search]].',
  'nonefound' => 'This message appears on the search results page if no results are found.
  {{doc-important|Do not translate "all:".}}',
@@@ -1936,7 -1925,7 +1936,7 @@@ Does not work under $wgMiserMode ([[mwr
  
  {{Identical|Upload file}}',
  'uploadnologin' => '{{Identical|Not logged in}}',
 -'uploadtext' => "{{doc-important|''thumb'' and ''left'' are magic words. Leave it untranslated!}}
 +'uploadtext' => "{{doc-important|''thumb'' and ''left'' are magic words. Leave them untranslated!}}
  Text displayed when uploading a file using [[Special:Upload]].",
  'upload-permitted' => 'Used in [[Special:Upload]].',
  'upload-preferred' => 'Used in [[Special:Upload]].',
@@@ -2104,7 -2093,7 +2104,7 @@@ Used on [[Special:UploadWizard]].'
  'img-auth-accessdenied' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Access Denied
  {{Identical|Access denied}}',
  'img-auth-nopathinfo' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Missing PATH_INFO - see english description
 -* This is plain text. Do not use any wiki syntax.',
 +{{Doc-important|This is plain text. Do not use any wiki syntax.}}',
  'img-auth-notindir' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: When the specified path is not in upload directory.',
  'img-auth-badtitle' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Bad title, $1 is the invalid title',
  'img-auth-nologinnWL' => '[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Logged in and file not whitelisted. $1 is the file not in whitelist.',
@@@ -2580,10 -2569,10 +2580,10 @@@ Part of the "Newuserlog" extension. It 
  'listgrouprights-helppage' => "The link used on [[Special:ListGroupRights]]. Just translate \"Group rights\", and '''leave the \"Help:\" namespace exactly as it is'''.",
  'listgrouprights-members' => 'Used on [[Special:ListGroupRights]] and [[Special:Statistics]] as a link to [[Special:ListUsers|Special:ListUsers/"group"]], a list of members in that group.',
  'listgrouprights-right-display' => "{{optional}}
 -* $1 is the text from the 'right-...' messages, i.e. [[MediaWiki:right-edit]] = {{int:right-edit}}
 +* $1 is the text from the 'right-...' messages, i.e. {{msg-mw|right-edit}}
  * $2 is the codename of this right",
  'listgrouprights-right-revoked' => "{{optional}}
 -* $1 is the text from the 'right-...' messages, i.e. [[MediaWiki:right-edit]] = {{int:right-edit}}
 +* $1 is the text from the 'right-...' messages, i.e. {{msg-mw|right-edit}}
  * $2 is the codename of this right",
  'listgrouprights-addgroup' => 'This is an individual right for groups, used on [[Special:ListGroupRights]].
  * $1 is an enumeration of group names.
@@@ -2756,9 -2745,7 +2756,9 @@@ The name of the deletion log. Used as h
  This link text appears on the recent changes page to users who have the "rollback" right.  It is also effectively a submit button; when clicked it performs the rollback without going to a dialog box first.
  This message has a tooltip {{msg-mw|tooltip-rollback}}',
  'rollbacklinkcount' => 'Text of the rollback link showing the number of edits to be rolled back. This link is also effectively a submit button; when clicked it performs the rollback without going to a dialog box first.  See also {{msg-mw|rollbacklink}}.
 -* $1: the number of edits that will be rollbacked. If $1 is over the value of $wgShowRollbackEditCount (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.',
 +* $1: the number of edits that will be rollbacked. If $1 is over the value of $wgShowRollbackEditCount (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.
 +
 +The rollback link is displayed with a tooltip {{msg-mw|Tooltip-rollback}}',
  'rollbacklinkcount-morethan' => 'Text of the rollback link when a greater number of edits is to be rolled back. See also {{msg-mw|rollbacklink}}.
  
  When the number of edits rolled back is smaller than [[mw:Manual:$wgShowRollbackEditCount|$wgShowRollbackEditCount]], {{msg-mw|rollbacklinkcount}} is used instead.',
@@@ -3287,6 -3274,7 +3287,6 @@@ See also
  
  # JavaScriptTest
  'javascripttest' => 'Title of [[Special:JavaScriptTest|the special page]]',
 -'javascripttest-disabled' => 'Message displayed on [[Special:JavaScriptTest]] if this feature is disabled (it is disabled by default).',
  'javascripttest-title' => 'Title of the special page when running a test suite. Parameters:
  * $1 is the name of the framework, for example QUnit.',
  'javascripttest-pagetext-unknownframework' => 'Error message when given framework id is not found. $1 is the id of the framework.',
@@@ -3364,7 -3352,7 +3364,7 @@@ If the length of the translated messag
  'tooltip-watch' => '{{Identical|Add this page to your watchlist}}',
  'tooltip-watchlistedit-normal-submit' => 'Tooltip for {{msg|watchlistedit-normal-submit}} (used as button on [[Special:EditWatchlist]]).',
  'tooltip-watchlistedit-raw-submit' => 'Tooltip for {{msg|watchlistedit-raw-submit}} (used as button on [[Special:EditWatchlist/raw]]).',
 -'tooltip-rollback' => 'Tooltip of the rollback link on the history page and the diff view {{msg-mw|rollbacklink}}
 +'tooltip-rollback' => 'Tooltip of the rollback link on the history page and the diff view {{msg-mw|rollbacklinkcount}}
  {{Identical|Rollback}}
  {{Identical|Revert}}',
  'tooltip-undo' => 'Tooltip of the undo link on the history page and the diff view {{msg-mw|editundo}}
@@@ -3499,14 -3487,13 +3499,14 @@@ See also {{msg-mw|Anonuser}} and {{msg-
  '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.',
  'pageinfo-restriction' => 'Parameters:
 -* $1 is the type of page protection (message restriction-$type, preferably in lowercase). If your language doesn\'t have small and capital letters, you can simply write <nowiki><code>$1</code></nowiki>.',
 +* $1 is the type of page protection (message restriction-$type, preferably in lowercase). If your language doesn\'t have small and capital letters, you can simply write <nowiki>$1</nowiki>.',
  'pageinfo-magic-words' => 'The list of magic words on the page. Parameters:
  * $1 is the number of magic words on the page.',
  'pageinfo-hidden-categories' => 'The list of hidden categories on the page. Parameters:
  * $1 is the number of hidden categories on the page.',
  'pageinfo-templates' => 'The list of templates transcluded within the page. Parameters:
  * $1 is the number of templates transcluded within the page.',
 +'pageinfo-toolboxlink' => 'Information link for the page (like \'What links here\', but to action=info for the current page instead)',
  
  # Skin names
  'skinname-standard' => '{{optional}}
@@@ -3562,10 -3549,7 +3562,10 @@@ Parameters
  'svg-long-desc' => 'Displayed under an SVG image at the image description page. Note that argument 3 is a string that includes the file size unit symbol. See for example [[:File:Yes check.svg]].
  
  Start with a lowercase letter, unless the first word is “SVG”.',
 -'svg-long-desc-animated' => 'Displayed under an SVG image at the image description page if the image is animated. Non-animated images use {{msg-mw|svg-long-desc}}. $1 is width, $2 is height, and $3 is file size, including unit (for example "10 KB").
 +'svg-long-desc-animated' => 'Displayed under an SVG image at the image description page if the image is animated. Non-animated images use {{msg-mw|svg-long-desc}}.
 +* $1 is the width in pixels
 +* $2 is the height in pixels, and 
 +* $3 is the file size including a unit (for example "10 KB").
  
  Start with a lowercase letter, unless the first word is “SVG”.',
  'show-big-image' => 'Displayed under an image at the image description page, when it is displayed smaller there than it was uploaded.',
@@@ -4349,6 -4333,12 +4349,12 @@@ See also [[MediaWiki:Confirmemail_body_
  'confirmemail_invalidated' => 'This is the text of the special page [[Special:InvalidateEmail|InvalidateEmail]] (with the title in {{msg-mw|Invalidateemail}}) where user goes if he chooses the cancel e-mail confirmation link from the confirmation e-mail.',
  'invalidateemail' => "This is the '''name of the special page''' where user goes if he chooses the cancel e-mail confirmation link from the confirmation e-mail.",
  
+ # Scary transclusion
+ 'scarytranscludedisabled' => 'Shown when scary transclusion is disabled.',
+ 'scarytranscludefailed' => 'Shown when the HTTP request for the template failed.',
+ 'scarytranscludefailed-httpstatus' => 'Identical to scarytranscludefailed, but shows the HTTP error which was received.',
+ 'scarytranscludetoolong' => 'The URL was too long.',
  'unit-pixel' => '{{optional}}',
  
  # action=purge
@@@ -4620,8 -4610,7 +4626,8 @@@ This is being used in [[Special:Version
  'version-software-product' => 'Shown in [[Special:Version]]',
  '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' => 'ପ୍ରବେଶ ବିନ୍ଦୁ',
 +'version-entrypoints-header-entrypoint' => 'Header for the first column in the entry points table on [[Special:Version]].
 +See also {{msg-mw|Version-entrypoints}}',
  'version-entrypoints-header-url' => 'Header for the second column in the entry points table on [[Special:Version]].',
  'version-entrypoints-articlepath' => 'A short description of the article path entry point. Links to the mediawiki.org documentation page for $wgArticlePath.',
  'version-entrypoints-scriptpath' => 'A short description of the script path entry point. Links to the mediawiki.org documentation page for $wgScriptPath.',
@@@ -4838,12 -4827,6 +4844,12 @@@ $4 is the gender of the target user.'
  'feedback-bugcheck' => 'Message that appears before the user submits a bug, reminding them to check for known bugs.',
  'feedback-bugnew' => 'Button label - asserts that the user has checked for existing bugs. When clicked will launch a bugzilla form to add a new bug in a new tab or window',
  
 +# Search suggestions
 +'searchsuggest-search' => 'Greyed out default text in the simple search box in the Vector skin. (It disappears and lets the user enter the requested search terms when the search box receives focus.)
 +
 +{{Identical|Search}}',
 +'searchsuggest-containing' => 'Label used in the special item of the search suggestions list which gives the user an option to perform a full text search for the term.',
 +
  # API errors
  'api-error-badaccess-groups' => 'API error message that can be used for client side localisation of API errors.',
  'api-error-badtoken' => 'API error message that can be used for client side localisation of API errors.',
@@@ -653,7 -653,6 +653,7 @@@ $wgMessageStructure = array
                'yourdiff',
                'copyrightwarning',
                'copyrightwarning2',
 +              'editpage-head-copy-warn',
                'editpage-tos-summary',
                'longpage-hint',
                'longpageerror',
                'search-interwiki-default',
                'search-interwiki-custom',
                'search-interwiki-more',
 -              'search-mwsuggest-enabled',
 -              'search-mwsuggest-disabled',
                'search-relatedarticle',
                'mwsuggest-disable',
                'searcheverything-enable',
        'javaccripttest' => array(
                'javascripttest',
                'javascripttest-backlink',
 -              'javascripttest-disabled',
                'javascripttest-title',
                'javascripttest-pagetext-noframework',
                'javascripttest-pagetext-unknownframework',
                'spam_deleting',
        ),
        'info' => array(
 +              'pageinfo-header',
                'pageinfo-title',
                'pageinfo-header-basic',
                'pageinfo-header-edits',
                'pageinfo-magic-words',
                'pageinfo-hidden-categories',
                'pageinfo-templates',
 +              'pageinfo-footer',
 +              'pageinfo-toolboxlink',
        ),
        'skin' => array(
                'skinname-standard',
        'scarytransclusion' => array(
                'scarytranscludedisabled',
                'scarytranscludefailed',
+               'scarytranscludefailed-httpstatus',
                'scarytranscludetoolong',
        ),
        'deleteconflict' => array(
                'feedback-bugcheck',
                'feedback-bugnew',
        ),
 +      'searchsuggestions' => array(
 +              'searchsuggest-search',
 +              'searchsuggest-containing',
 +      ),
        'apierrors' => array(
                'api-error-badaccess-groups',
                'api-error-badtoken',
@@@ -4029,7 -4025,6 +4030,7 @@@ Variants for Chinese language"
        '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',