Merge "Improve clarity of diff-multi message"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 31 Jan 2014 17:24:00 +0000 (17:24 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 31 Jan 2014 17:24:00 +0000 (17:24 +0000)
1  2 
includes/Title.php
includes/diff/DifferenceEngine.php
languages/messages/MessagesEn.php
languages/messages/MessagesQqq.php
maintenance/language/messages.inc

diff --combined includes/Title.php
@@@ -60,7 -60,7 +60,7 @@@ class Title 
        var $mUserCaseDBKey;              // /< DB key with the initial letter in the case specified by the user
        var $mNamespace = NS_MAIN;        // /< Namespace index, i.e. one of the NS_xxxx constants
        var $mInterwiki = '';             // /< Interwiki prefix
 -      var $mFragment;                   // /< Title fragment (i.e. the bit after the #)
 +      var $mFragment = '';              // /< Title fragment (i.e. the bit after the #)
        var $mArticleID = -1;             // /< Article ID, fetched from the link cache on demand
        var $mLatestID = false;           // /< ID of most recent revision
        var $mContentModel = false;       // /< ID of the page's content model, i.e. one of the CONTENT_MODEL_XXX constants
        /**
         * Get the interwiki prefix
         *
 +       * Use Title::isExternal to check if a interwiki is set
 +       *
         * @return String Interwiki prefix
         */
        public function getInterwiki() {
        /**
         * Get the Title fragment (i.e.\ the bit after the #) in text form
         *
 +       * Use Title::hasFragment to check for a fragment
 +       *
         * @return String Title fragment
         */
        public function getFragment() {
                return $this->mFragment;
        }
  
 +      /**
 +       * Check if a Title fragment is set
 +       *
 +       * @return bool
 +       * @since 1.23
 +       */
 +      public function hasFragment() {
 +              return $this->mFragment !== '';
 +      }
 +
        /**
         * Get the fragment in URL form, including the "#" character if there is one
         * @return String Fragment in URL form
         */
        public function getFragmentForURL() {
 -              if ( $this->mFragment == '' ) {
 +              if ( !$this->hasFragment() ) {
                        return '';
                } else {
 -                      return '#' . Title::escapeFragmentForURL( $this->mFragment );
 +                      return '#' . Title::escapeFragmentForURL( $this->getFragment() );
                }
        }
  
         */
        public function getFullText() {
                $text = $this->getPrefixedText();
 -              if ( $this->mFragment != '' ) {
 -                      $text .= '#' . $this->mFragment;
 +              if ( $this->hasFragment() ) {
 +                      $text .= '#' . $this->getFragment();
                }
                return $text;
        }
                wfProfileIn( __METHOD__ );
                if ( $this->isExternal() || $proto !== PROTO_RELATIVE ) {
                        $ret = $this->getFullURL( $query, $query2, $proto );
 -              } elseif ( $this->getPrefixedText() === '' && $this->getFragment() !== '' ) {
 +              } elseif ( $this->getPrefixedText() === '' && $this->hasFragment() ) {
                        $ret = $this->getFragmentForURL();
                } else {
                        $ret = $this->getLocalURL( $query, $query2 ) . $this->getFragmentForURL();
                return ( $sources > 0 );
        }
  
 +      /**
 +       * Determines whether cascading protection sources have already been loaded from
 +       * the database.
 +       *
 +       * @param bool $getPages True to check if the pages are loaded, or false to check
 +       * if the status is loaded.
 +       * @return bool Whether or not the specified information has been loaded
 +       * @since 1.23
 +       */
 +      public function areCascadeProtectionSourcesLoaded( $getPages = true ) {
 +              return $getPages ? isset( $this->mCascadeSources ) : isset( $this->mHasCascadingRestrictions );
 +      }
 +
        /**
         * Cascading protection: Get the source of any cascading restrictions on this page.
         *
                return array( $sources, $pagerestrictions );
        }
  
 +      /**
 +       * Accessor for mRestrictionsLoaded
 +       *
 +       * @return bool Whether or not the page's restrictions have already been
 +       * loaded from the database
 +       * @since 1.23
 +       */
 +      public function areRestrictionsLoaded() {
 +              return $this->mRestrictionsLoaded;
 +      }
 +
        /**
         * Accessor/initialisation for mRestrictions
         *
                                : array();
        }
  
 +      /**
 +       * Accessor/initialisation for mRestrictions
 +       *
 +       * @return Array of Arrays of Strings the first level indexed by
 +       * action, the second level containing the names of the groups
 +       * allowed to perform each action
 +       * @since 1.23
 +       */
 +      public function getAllRestrictions() {
 +              if ( !$this->mRestrictionsLoaded ) {
 +                      $this->loadRestrictions();
 +              }
 +              return $this->mRestrictions;
 +      }
 +
        /**
         * Get the expiry time for the restriction against a given action
         *
                global $wgContLang, $wgLocalInterwiki;
  
                # Initialisation
 -              $this->mInterwiki = $this->mFragment = '';
 +              $this->mInterwiki = '';
 +              $this->mFragment = '';
                $this->mNamespace = $this->mDefaultNamespace; # Usually NS_MAIN
  
                $dbkey = $this->mDbkeyform;
                        break;
                } while ( true );
  
 -              # We already know that some pages won't be in the database!
 -              if ( $this->isExternal() || NS_SPECIAL == $this->mNamespace ) {
 -                      $this->mArticleID = 0;
 -              }
                $fragment = strstr( $dbkey, '#' );
                if ( false !== $fragment ) {
                        $this->setFragment( $fragment );
                // there are numerous ways to present the same IP. Having sp:contribs scan
                // them all is silly and having some show the edits and others not is
                // inconsistent. Same for talk/userpages. Keep them normalized instead.
 -              $dbkey = ( $this->mNamespace == NS_USER || $this->mNamespace == NS_USER_TALK )
 -                      ? IP::sanitizeIP( $dbkey )
 -                      : $dbkey;
 +              if ( $this->mNamespace == NS_USER || $this->mNamespace == NS_USER_TALK ) {
 +                      $dbkey = IP::sanitizeIP( $dbkey );
 +              }
  
                // Any remaining initial :s are illegal.
                if ( $dbkey !== '' && ':' == $dbkey[0] ) {
  
                $this->mTextform = str_replace( '_', ' ', $dbkey );
  
 +              # We already know that some pages won't be in the database!
 +              if ( $this->isExternal() || $this->mNamespace == NS_SPECIAL ) {
 +                      $this->mArticleID = 0;
 +              }
 +
                return true;
        }
  
        }
  
        /**
-        * Get the number of authors between the given revisions or revision IDs.
+        * Get the authors between the given revisions or revision IDs.
         * Used for diffs and other things that really need it.
         *
+        * @since 1.23
+        *
         * @param int|Revision $old Old revision or rev ID (first before range by default)
         * @param int|Revision $new New revision or rev ID (first after range by default)
         * @param int $limit Maximum number of authors
         *     'include_new' Include $new in the range; $old is excluded.
         *     'include_both' Include both $old and $new in the range.
         *     Unknown option values are ignored.
-        * @return int Number of revision authors in the range; zero if not both revisions exist
+        * @return array|null Names of revision authors in the range; null if not both revisions exist
         */
-       public function countAuthorsBetween( $old, $new, $limit, $options = array() ) {
+       public function getAuthorsBetween( $old, $new, $limit, $options = array() ) {
                if ( !( $old instanceof Revision ) ) {
                        $old = Revision::newFromTitle( $this, (int)$old );
                }
                // Add $old->getPage() != $new->getPage() || $old->getPage() != $this->getArticleID()
                // in the sanity check below?
                if ( !$old || !$new ) {
-                       return 0; // nothing to compare
+                       return null; // nothing to compare
                }
+               $authors = array();
                $old_cmp = '>';
                $new_cmp = '<';
                $options = (array)$options;
                }
                // No DB query needed if $old and $new are the same or successive revisions:
                if ( $old->getId() === $new->getId() ) {
-                       return ( $old_cmp === '>' && $new_cmp === '<' ) ? 0 : 1;
+                       return ( $old_cmp === '>' && $new_cmp === '<' ) ? array() : array( $old->getRawUserText() );
                } elseif ( $old->getId() === $new->getParentId() ) {
-                       if ( $old_cmp === '>' || $new_cmp === '<' ) {
-                               return ( $old_cmp === '>' && $new_cmp === '<' ) ? 0 : 1;
+                       if ( $old_cmp === '>=' && $new_cmp === '<=' ) {
+                               $authors[] = $old->getRawUserText();
+                               if ( $old->getRawUserText() != $new->getRawUserText() ) {
+                                       $authors[] = $new->getRawUserText();
+                               }
+                       } elseif ( $old_cmp === '>=' ) {
+                               $authors[] = $old->getRawUserText();
+                       } elseif ( $new_cmp === '<=' ) {
+                               $authors[] = $new->getRawUserText();
                        }
-                       return ( $old->getRawUserText() === $new->getRawUserText() ) ? 1 : 2;
+                       return $authors;
                }
                $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'revision', 'DISTINCT rev_user_text',
                        ), __METHOD__,
                        array( 'LIMIT' => $limit + 1 ) // add one so caller knows it was truncated
                );
-               return (int)$dbr->numRows( $res );
+               foreach ( $res as $row ) {
+                       $authors[] = $row->rev_user_text;
+               }
+               return $authors;
+       }
+       /**
+        * Get the number of authors between the given revisions or revision IDs.
+        * Used for diffs and other things that really need it.
+        *
+        * @param int|Revision $old Old revision or rev ID (first before range by default)
+        * @param int|Revision $new New revision or rev ID (first after range by default)
+        * @param int $limit Maximum number of authors
+        * @param string|array $options (Optional): Single option, or an array of options:
+        *     'include_old' Include $old in the range; $new is excluded.
+        *     'include_new' Include $new in the range; $old is excluded.
+        *     'include_both' Include both $old and $new in the range.
+        *     Unknown option values are ignored.
+        * @return int Number of revision authors in the range; zero if not both revisions exist
+        */
+       public function countAuthorsBetween( $old, $new, $limit, $options = array() ) {
+               $authors = $this->getAuthorsBetween( $old, $new, $limit, $options );
+               return $authors ? count( $authors ) : 0;
        }
  
        /**
@@@ -381,7 -381,7 +381,7 @@@ class DifferenceEngine extends ContextS
                $rdel = $this->revisionDeleteLink( $this->mNewRev );
  
                # Allow extensions to define their own revision tools
 -              wfRunHooks( 'DiffRevisionTools', array( $this->mNewRev, &$revisionTools ) );
 +              wfRunHooks( 'DiffRevisionTools', array( $this->mNewRev, &$revisionTools, $this->mOldRev ) );
                $formattedRevisionTools = array();
                // Put each one in parentheses (poor man's button)
                foreach ( $revisionTools as $tool ) {
                $nEdits = $this->mNewPage->countRevisionsBetween( $oldRev, $newRev );
                if ( $nEdits > 0 ) {
                        $limit = 100; // use diff-multi-manyusers if too many users
-                       $numUsers = $this->mNewPage->countAuthorsBetween( $oldRev, $newRev, $limit );
+                       $users = $this->mNewPage->getAuthorsBetween( $oldRev, $newRev, $limit );
+                       $numUsers = count( $users );
+                       if( $numUsers == 1 && $users[0] == $newRev->getRawUserText() ) {
+                               $numUsers = 0; // special case to say "by the same user" instead of "by one other user"
+                       }
  
                        return self::intermediateEditsMsg( $nEdits, $numUsers, $limit );
                }
         * @return string
         */
        public static function intermediateEditsMsg( $numEdits, $numUsers, $limit ) {
-               if ( $numUsers > $limit ) {
+               if ( $numUsers === 0 ) {
+                       $msg = 'diff-multi-sameuser';
+               } elseif ( $numUsers > $limit ) {
                        $msg = 'diff-multi-manyusers';
                        $numUsers = $limit;
                } else {
-                       $msg = 'diff-multi';
+                       $msg = 'diff-multi-otherusers';
                }
  
                return wfMessage( $msg )->numParams( $numEdits, $numUsers )->parse();
@@@ -404,7 -404,6 +404,7 @@@ $specialPageAliases = array
        'CreateAccount'             => array( 'CreateAccount' ),
        'Deadendpages'              => array( 'DeadendPages' ),
        'DeletedContributions'      => array( 'DeletedContributions' ),
 +      'Diff'                      => array( 'Diff' ),
        'DoubleRedirects'           => array( 'DoubleRedirects' ),
        'EditWatchlist'             => array( 'EditWatchlist' ),
        'Emailuser'                 => array( 'EmailUser' ),
@@@ -659,6 -658,7 +659,6 @@@ future releases. Also note that since e
  
  # User preference toggles
  'tog-underline'               => 'Link underlining:',
 -'tog-justify'                 => 'Justify paragraphs',
  'tog-hideminor'               => 'Hide minor edits in recent changes',
  'tog-hidepatrolled'           => 'Hide patrolled edits in recent changes',
  'tog-newpageshidepatrolled'   => 'Hide patrolled pages from new page list',
  'tog-numberheadings'          => 'Auto-number headings',
  'tog-showtoolbar'             => 'Show edit toolbar',
  'tog-editondblclick'          => 'Edit pages on double click',
 -'tog-editsection'             => 'Enable section editing via [edit] links',
  'tog-editsectiononrightclick' => 'Enable section editing by right clicking on section titles',
 -'tog-showtoc'                 => 'Show table of contents (for pages with more than 3 headings)',
  'tog-rememberpassword'        => 'Remember my login on this browser (for a maximum of $1 {{PLURAL:$1|day|days}})',
  'tog-watchcreations'          => 'Add pages I create and files I upload to my watchlist',
  'tog-watchdefault'            => 'Add pages and files I edit to my watchlist',
  'category_header'                => 'Pages in category "$1"',
  'subcategories'                  => 'Subcategories',
  'category-media-header'          => 'Media in category "$1"',
 -'category-empty'                 => "''This category currently contains no pages or media.''",
 +'category-empty'                 => '<em>This category currently contains no pages or media.</em>',
  'hidden-categories'              => '{{PLURAL:$1|Hidden category|Hidden categories}}',
  'hidden-category-category'       => 'Hidden categories',
  'category-subcat-count'          => '{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}',
@@@ -1007,7 -1009,7 +1007,7 @@@ This may indicate a bug in the software
  'databaseerror-query'           => 'Query: $1',
  'databaseerror-function'        => 'Function: $1',
  'databaseerror-error'           => 'Error: $1',
 -'laggedslavemode'               => "'''Warning:''' Page may not contain recent updates.",
 +'laggedslavemode'               => '<strong>Warning:</strong> Page may not contain recent updates.',
  'readonly'                      => 'Database locked',
  'enterlockreason'               => 'Enter a reason for the lock, including an estimate of when the lock will be released',
  'readonlytext'                  => 'The database is currently locked to new entries and other modifications, probably for routine database maintenance, after which it will be back to normal.
@@@ -1055,15 -1057,15 +1055,15 @@@ Data here will not presently be refresh
  Please try again in a few minutes.',
  'protectedpagetext'             => 'This page has been protected to prevent editing or other actions.',
  '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:",
 +'viewyourtext'                  => 'You can view and copy the source of <strong>your edits</strong> to this page:',
  '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 that is used to provide interface text for the software.
 +'editinginterface'              => '<strong>Warning:</strong> You are editing a page that is used to provide interface text for the software.
  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.",
 +To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.',
  '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',
 -'namespaceprotected'            => "You do not have permission to edit pages in the '''$1''' namespace.",
 +'namespaceprotected'            => "You do not have permission to edit pages in the <strong>$1</strong> namespace.",
  'customcssprotected'            => "You do not have permission to edit this CSS page because it contains another user's personal settings.",
  'customjsprotected'             => "You do not have permission to edit this JavaScript page because it contains another user's personal settings.",
  'mycustomcssprotected'          => 'You do not have permission to edit this CSS page.',
  'mypreferencesprotected'        => 'You do not have permission to edit your preferences.',
  'ns-specialprotected'           => 'Special pages cannot be edited.',
  'titleprotected'                => 'This title has been protected from creation by [[User:$1|$1]].
 -The reason given is "\'\'$2\'\'".',
 +The reason given is "<em>$2</em>".',
  'filereadonlyerror'             => 'Unable to modify the file "$1" because the file repository "$2" is in read-only mode.
  
  The administrator who locked it offered this explanation: "$3".',
  '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''",
 +'virus-badscanner'     => "Bad configuration: Unknown virus scanner: <em>$1</em>",
  'virus-scanfailed'     => 'scan failed (code $1)',
  'virus-unknownscanner' => 'unknown antivirus:',
  
  # Login and logout pages
 -'logouttext'                      => "'''You are now logged out.'''
 +'logouttext'                      => "<strong>You are now logged out.</strong>
  
  Note that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
  'welcomeuser'                     => 'Welcome, $1!',
@@@ -1179,7 -1181,7 +1179,7 @@@ Ensure you have cookies enabled, reloa
  'nocookiesforlogin'               => '{{int:nocookieslogin}}', # only translate this message to other languages if you have to change it
  'noname'                          => 'You have not specified a valid username.',
  'loginsuccesstitle'               => 'Login successful',
 -'loginsuccess'                    => "'''You are now logged in to {{SITENAME}} as \"\$1\".'''",
 +'loginsuccess'                    => "<strong>You are now logged in to {{SITENAME}} as \"\$1\".</strong>",
  'nosuchuser'                      => 'There is no user by the name "$1".
  Usernames are case sensitive.
  Check your spelling, or [[Special:UserLogin/signup|create a new account]].',
@@@ -1266,8 -1268,6 +1266,8 @@@ If you choose to provide it, this will 
  # Change password dialog
  'changepassword'            => 'Change password',
  'changepassword-summary'    => '', # do not translate or duplicate this message to other languages
 +'changepassword-throttled'  => 'You have made too many recent login attempts.
 +Please wait $1 before trying again.',
  'resetpass_announce'        => 'You logged in with a temporary emailed code.
  To finish logging in, you must set a new password here:',
  'resetpass_text'            => '<!-- Add text here -->', # only translate this message to other languages if you have to change it
@@@ -1338,8 -1338,6 +1338,8 @@@ Temporary password: $2'
  'changeemail-password' => 'Your {{SITENAME}} password:',
  'changeemail-submit'   => 'Change email',
  'changeemail-cancel'   => 'Cancel',
 +'changeemail-throttled' => 'You have made too many login attempts.
 +Please wait $1 before trying again.',
  
  # Special:ResetTokens
  'resettokens'                 => 'Reset tokens',
@@@ -1385,21 -1383,21 +1385,21 @@@ You should do it if you accidentally sh
  'showpreview'                      => 'Show preview',
  'showlivepreview'                  => 'Live preview',
  'showdiff'                         => 'Show changes',
 -'anoneditwarning'                  => "'''Warning:''' You are not logged in.
 +'anoneditwarning'                  => "<strong>Warning:</strong> You are not logged in.
  Your IP address will be recorded in this page's edit history.",
 -'anonpreviewwarning'               => "''You are not logged in. Saving will record your IP address in this page's edit history.''",
 -'missingsummary'                   => "'''Reminder:''' You have not provided an edit summary.
 +'anonpreviewwarning'               => "<em>You are not logged in. Saving will record your IP address in this page's edit history.</em>",
 +'missingsummary'                   => "<strong>Reminder:</strong> You have not provided an edit summary.
  If you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
  'missingcommenttext'               => 'Please enter a comment below.',
 -'missingcommentheader'             => "'''Reminder:''' You have not provided a subject/headline for this comment.
 +'missingcommentheader'             => "<strong>Reminder:</strong> You have not provided a subject/headline for this comment.
  If you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
  'summary-preview'                  => 'Summary preview:',
  'subject-preview'                  => 'Subject/headline preview:',
  'blockedtitle'                     => 'User is blocked',
 -'blockedtext'                      => "'''Your username or IP address has been blocked.'''
 +'blockedtext'                      => "<strong>Your username or IP address has been blocked.</strong>
  
  The block was made by $1.
 -The reason given is ''$2''.
 +The reason given is <em>$2</em>.
  
  * Start of block: $8
  * Expiry of block: $6
@@@ -1412,7 -1410,7 +1412,7 @@@ Please include all above details in an
  'autoblockedtext'                  => "Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.
  The reason given is:
  
 -:''$2''
 +:<em>$2</em>
  
  * Start of block: $8
  * Expiry of block: $6
@@@ -1435,15 -1433,15 +1435,15 @@@ It may have been moved or deleted whil
  'loginreqlink'                     => 'log in',
  'loginreqpagetext'                 => 'Please $1 to view other pages.',
  'accmailtitle'                     => 'Password sent',
 -'accmailtext'                      => "A randomly generated password for [[User talk:$1|$1]] has been sent to $2. It can be changed on the ''[[Special:ChangePassword|change password]]'' page upon logging in.",
 +'accmailtext'                      => "A randomly generated password for [[User talk:$1|$1]] has been sent to $2. It can be changed on the <em>[[Special:ChangePassword|change password]]</em> page upon logging in.",
  'newarticle'                       => '(New)',
  'newarticletext'                   => "You have followed a link to a page that does not exist yet.
  To create the page, start typing in the box below (see the [[{{MediaWiki:Helppage}}|help page]] for more info).
 -If you are here by mistake, click your browser's '''back''' button.",
 +If you are here by mistake, click your browser's <strong>back</strong> button.",
  'newarticletextanon'               => '{{int:newarticletext}}', # do not translate or duplicate this message to other languages
  'talkpagetext'                     => '<!-- MediaWiki:talkpagetext -->', # do not translate or duplicate this message to other languages
  'anontalkpagetext'                 => "----
 -''This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.''
 +<em>This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.</em>
  We therefore have to use the numerical IP address to identify him/her.
  Such an IP address can be shared by several users.
  If you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:UserLogin/signup|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.",
@@@ -1463,42 -1461,42 +1463,42 @@@ Please check if you want to create/edi
  'userpage-userdoesnotexist-view'   => 'User account "$1" is not registered.',
  'blocked-notice-logextract'        => 'This user is currently blocked.
  The latest block log entry is provided below for reference:',
 -'clearyourcache'                   => "'''Note:''' After saving, you may have to bypass your browser's cache to see the changes.
 -* '''Firefox / Safari:''' Hold ''Shift'' while clicking ''Reload'', or press either ''Ctrl-F5'' or ''Ctrl-R'' (''⌘-R'' on a Mac)
 -* '''Google Chrome:''' Press ''Ctrl-Shift-R'' (''⌘-Shift-R'' on a Mac)
 -* '''Internet Explorer:''' Hold ''Ctrl'' while clicking ''Refresh'', or press ''Ctrl-F5''
 -* '''Opera:''' Clear the cache in ''Tools â†’ Preferences''",
 -'usercssyoucanpreview'             => "'''Tip:''' Use the \"{{int:showpreview}}\" button to test your new CSS before saving.",
 -'userjsyoucanpreview'              => "'''Tip:''' Use the \"{{int:showpreview}}\" button to test your new JavaScript before saving.",
 -'usercsspreview'                   => "'''Remember that you are only previewing your user CSS.'''
 -'''It has not yet been saved!'''",
 -'userjspreview'                    => "'''Remember that you are only testing/previewing your user JavaScript.'''
 -'''It has not yet been saved!'''",
 -'sitecsspreview'                   => "'''Remember that you are only previewing this CSS.'''
 -'''It has not yet been saved!'''",
 -'sitejspreview'                    => "'''Remember that you are only previewing this JavaScript code.'''
 -'''It has not yet been saved!'''",
 -'userinvalidcssjstitle'            => "'''Warning:''' There is no skin \"\$1\".
 +'clearyourcache'                   => "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.
 +* <strong>Firefox / Safari:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)
 +* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)
 +* <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>
 +* <strong>Opera:</strong> Clear the cache in <em>Tools â†’ Preferences</em>",
 +'usercssyoucanpreview'             => "<strong>Tip:</strong> Use the \"{{int:showpreview}}\" button to test your new CSS before saving.",
 +'userjsyoucanpreview'              => "<strong>Tip:</strong> Use the \"{{int:showpreview}}\" button to test your new JavaScript before saving.",
 +'usercsspreview'                   => "<strong>Remember that you are only previewing your user CSS.
 +It has not yet been saved!</strong>",
 +'userjspreview'                    => "<strong>Remember that you are only testing/previewing your user JavaScript.
 +It has not yet been saved!</strong>",
 +'sitecsspreview'                   => "<strong>Remember that you are only previewing this CSS.
 +It has not yet been saved!</strong>",
 +'sitejspreview'                    => "<strong>Remember that you are only previewing this JavaScript code.
 +It has not yet been saved!</strong>",
 +'userinvalidcssjstitle'            => "<strong>Warning:</strong> There is no skin \"\$1\".
  Custom .css and .js pages use a lowercase title, e.g. {{ns:user}}:Foo/vector.css as opposed to {{ns:user}}:Foo/Vector.css.",
  'updated'                          => '(Updated)',
 -'note'                             => "'''Note:'''",
 -'previewnote'                      => "'''Remember that this is only a preview.'''
 +'note'                             => "<strong>Note:</strong>",
 +'previewnote'                      => "<strong>Remember that this is only a preview.</strong>
  Your changes have not yet been saved!",
  'continue-editing'                 => 'Go to editing area',
  'previewconflict'                  => 'This preview reflects the text in the upper text editing area as it will appear if you choose to save.',
 -'session_fail_preview'             => "'''Sorry! We could not process your edit due to a loss of session data.'''
 +'session_fail_preview'             => "<strong>Sorry! We could not process your edit due to a loss of session data.</strong>
  Please try again.
  If it still does not work, try [[Special:UserLogout|logging out]] and logging back in.",
 -'session_fail_preview_html'        => "'''Sorry! We could not process your edit due to a loss of session data.'''
 +'session_fail_preview_html'        => "<strong>Sorry! We could not process your edit due to a loss of session data.</strong>
  
 -''Because {{SITENAME}} has raw HTML enabled, the preview is hidden as a precaution against JavaScript attacks.''
 +<em>Because {{SITENAME}} has raw HTML enabled, the preview is hidden as a precaution against JavaScript attacks.</em>
  
 -'''If this is a legitimate edit attempt, please try again.'''
 +<strong>If this is a legitimate edit attempt, please try again.</strong>
  If it still does not work, try [[Special:UserLogout|logging out]] and logging back in.",
 -'token_suffix_mismatch'            => "'''Your edit has been rejected because your client mangled the punctuation characters in the edit token.'''
 +'token_suffix_mismatch'            => "<strong>Your edit has been rejected because your client mangled the punctuation characters in the edit token.</strong>
  The edit has been rejected to prevent corruption of the page text.
  This sometimes happens when you are using a buggy web-based anonymous proxy service.",
 -'edit_form_incomplete'             => "'''Some parts of the edit form did not reach the server; double-check that your edits are intact and try again.'''",
 +'edit_form_incomplete'             => "<strong>Some parts of the edit form did not reach the server; double-check that your edits are intact and try again.</strong>",
  'editing'                          => 'Editing $1',
  'creating'                         => 'Creating $1',
  'editingsection'                   => 'Editing $1 (section)',
  The upper text area contains the page text as it currently exists.
  Your changes are shown in the lower text area.
  You will have to merge your changes into the existing text.
 -'''Only''' the text in the upper text area will be saved when you press \"{{int:savearticle}}\".",
 +<strong>Only</strong> the text in the upper text area will be saved when you press \"{{int:savearticle}}\".",
  'yourtext'                         => 'Your text',
  'storedversion'                    => 'Stored revision',
 -'nonunicodebrowser'                => "'''Warning: Your browser is not Unicode compliant.'''
 +'nonunicodebrowser'                => "<strong>Warning: Your browser is not Unicode compliant.</strong>
  A workaround is in place to allow you to safely edit pages: Non-ASCII characters will appear in the edit box as hexadecimal codes.",
 -'editingold'                       => "'''Warning: You are editing an out-of-date revision of this page.'''
 +'editingold'                       => "<strong>Warning: You are editing an out-of-date revision of this page.</strong>
  If you save it, any changes made since this revision will be lost.",
  'yourdiff'                         => 'Differences',
  'copyrightwarning'                 => "Please note that all contributions to {{SITENAME}} are considered to be released under the $2 (see $1 for details).
  If you do not want your writing to be edited mercilessly and redistributed at will, 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.
 -'''Do not submit copyrighted work without permission!'''",
 +<strong>Do not submit copyrighted work without permission!</strong>",
  'copyrightwarning2'                => "Please note that all contributions to {{SITENAME}} may be edited, altered, or removed by other contributors.
  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!'''",
 +<strong>Do not submit copyrighted work without permission!</strong>",
  '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}}.'''
 +'longpageerror'                    => "<strong>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}}.</strong>
  It cannot be saved.",
 -'readonlywarning'                  => "'''Warning: The database has been locked for maintenance, so you will not be able to save your edits right now.'''
 +'readonlywarning'                  => "<strong>Warning: The database has been locked for maintenance, so you will not be able to save your edits right now.</strong>
  You may wish to copy and paste your text into a text file and save it for later.
  
  The administrator who locked it offered this explanation: $1",
 -'protectedpagewarning'             => "'''Warning: This page has been protected so that only users with administrator privileges can edit it.'''
 +'protectedpagewarning'             => "<strong>Warning: This page has been protected so that only users with administrator privileges can edit it.</strong>
  The latest log entry is provided below for reference:",
 -'semiprotectedpagewarning'         => "'''Note:''' This page has been protected so that only registered users can edit it.
 +'semiprotectedpagewarning'         => "<strong>Note:</strong> This page has been protected so that only registered users can edit it.
  The latest log entry is provided below for reference:",
 -'cascadeprotectedwarning'          => "'''Warning:''' This page has been protected so that only users with administrator privileges can edit it because it is included in the following cascade-protected {{PLURAL:$1|page|pages}}:",
 -'titleprotectedwarning'            => "'''Warning: This page has been protected so that [[Special:ListGroupRights|specific rights]] are needed to create it.'''
 +'cascadeprotectedwarning'          => "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can edit it because it is included in the following cascade-protected {{PLURAL:$1|page|pages}}:",
 +'titleprotectedwarning'            => "<strong>Warning: This page has been protected so that [[Special:ListGroupRights|specific rights]] are needed to create it.</strong>
  The latest log entry is provided below for reference:",
  'templatesused'                    => '{{PLURAL:$1|Template|Templates}} used on this page:',
  'templatesusedpreview'             => '{{PLURAL:$1|Template|Templates}} used in this preview:',
@@@ -1556,7 -1554,7 +1556,7 @@@ You can go back and edit an existing pa
  'permissionserrors'                => 'Permission error',
  'permissionserrorstext'            => 'You do not have permission to do that, for the following {{PLURAL:$1|reason|reasons}}:',
  'permissionserrorstext-withaction' => 'You do not have permission to $2, for the following {{PLURAL:$1|reason|reasons}}:',
 -'recreate-moveddeleted-warn'       => "'''Warning: You are recreating a page that was previously deleted.'''
 +'recreate-moveddeleted-warn'       => "<strong>Warning: You are recreating a page that was previously deleted.</strong>
  
  You should consider whether it is appropriate to continue editing this page.
  The deletion and move log for this page are provided here for convenience:",
@@@ -1580,8 -1578,6 +1580,8 @@@ It already exists.'
  'content-not-allowed-here'         => '"$1" content is not allowed on page [[$2]]',
  'editwarning-warning'              => 'Leaving this page may cause you to lose any changes you have made.
  If you are logged in, you can disable this warning in the "Editing" section of your preferences.',
 +'editpage-notsupportedcontentformat-title'=> 'Content format not supported',
 +'editpage-notsupportedcontentformat-text' => 'The content format $1 is not supported by the content model $2.',
  
  # Content models
  'content-model-wikitext'   => 'wikitext',
  'content-model-css'        => 'CSS',
  
  # Parser/template warnings
 -'expensive-parserfunction-warning'        => "'''Warning:''' This page contains too many expensive parser function calls.
 +'expensive-parserfunction-warning'        => "<strong>Warning:</strong> This page contains too many expensive parser function calls.
  
  It should have less than $2 {{PLURAL:$2|call|calls}}, there {{PLURAL:$1|is now $1 call|are now $1 calls}}.",
  'expensive-parserfunction-category'       => 'Pages with too many expensive parser function calls',
 -'post-expand-template-inclusion-warning'  => "'''Warning:''' Template include size is too large.
 +'post-expand-template-inclusion-warning'  => "<strong>Warning:</strong> Template include size is too large.
  Some templates will not be included.",
  'post-expand-template-inclusion-category' => 'Pages where template include size is exceeded',
 -'post-expand-template-argument-warning'   => "'''Warning:''' This page contains at least one template argument that has a too large expansion size.
 +'post-expand-template-argument-warning'   => "<strong>Warning:</strong> This page contains at least one template argument that has a too large expansion size.
  These arguments have been omitted.",
  'post-expand-template-argument-category'  => 'Pages containing omitted template arguments',
  'parser-template-loop-warning'            => 'Template loop detected: [[$1]]',
@@@ -1624,10 -1620,9 +1624,10 @@@ Please check the comparison below to ve
  'cantcreateaccount-range-text' => "Account creation from IP addresses in the range '''$1''', which includes your IP address ('''$4'''), has been blocked by [[User:$3|$3]].
  
  The reason given by $3 is ''$2''",
 -'cantcreateaccount-text' => "Account creation from this IP address ('''$1''') has been blocked by [[User:$3|$3]].
 +'cantcreateaccount-text' => "Account creation from this IP address (<strong>$1</strong>) has been blocked by [[User:$3|$3]].
  
 -The reason given by $3 is ''$2''",
 +The reason given by $3 is <em>$2</em>",
 +'createaccount-hook-aborted' => '$1', # do not translate or duplicate this message to other languages
  
  # History pages
  'viewpagelogs'           => 'View logs for this page',
  'page_first'             => 'first',
  'page_last'              => 'last',
  'histlegend'             => "Diff selection: Mark the radio boxes of the revisions to compare and hit enter or the button at the bottom.<br />
 -Legend: '''({{int:cur}})''' = difference with latest revision, '''({{int:last}})''' = difference with preceding revision, '''{{int:minoreditletter}}''' = minor edit.",
 +Legend: <strong>({{int:cur}})</strong> = difference with latest revision, <strong>({{int:last}})</strong> = difference with preceding revision, <strong>{{int:minoreditletter}}</strong> = minor edit.",
  'history-fieldset-title' => 'Browse history',
  'history-show-deleted'   => 'Deleted only',
  'history_copyright'      => '-', # do not translate or duplicate this message to other languages
@@@ -1669,30 -1664,30 +1669,30 @@@ Try [[Special:Search|searching on the w
  'rev-deleted-user'            => '(username removed)',
  'rev-deleted-event'           => '(log action removed)',
  'rev-deleted-user-contribs'   => '[username or IP address removed - edit hidden from contributions]',
 -'rev-deleted-text-permission' => "This page revision has been '''deleted'''.
 +'rev-deleted-text-permission' => "This page revision has been <strong>deleted</strong>.
  Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
 -'rev-deleted-text-unhide'     => "This page revision has been '''deleted'''.
 +'rev-deleted-text-unhide'     => "This page revision has been <strong>deleted</strong>.
  Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].
  You can still [$1 view this revision] if you wish to proceed.",
 -'rev-suppressed-text-unhide'  => "This page revision has been '''suppressed'''.
 +'rev-suppressed-text-unhide'  => "This page revision has been <strong>suppressed</strong>.
  Details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].
  You can still [$1 view this revision] if you wish to proceed.",
 -'rev-deleted-text-view'       => "This page revision has been '''deleted'''.
 +'rev-deleted-text-view'       => "This page revision has been <strong>deleted</strong>.
  You can view it; details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
 -'rev-suppressed-text-view'    => "This page revision has been '''suppressed'''.
 +'rev-suppressed-text-view'    => "This page revision has been <strong>suppressed</strong>.
  You can view it; details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
 -'rev-deleted-no-diff'         => "You cannot view this diff because one of the revisions has been '''deleted'''.
 +'rev-deleted-no-diff'         => "You cannot view this diff because one of the revisions has been <strong>deleted</strong>.
  Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
 -'rev-suppressed-no-diff'      => "You cannot view this diff because one of the revisions has been '''deleted'''.",
 -'rev-deleted-unhide-diff'     => "One of the revisions of this diff has been '''deleted'''.
 +'rev-suppressed-no-diff'      => "You cannot view this diff because one of the revisions has been <strong>deleted</strong>.",
 +'rev-deleted-unhide-diff'     => "One of the revisions of this diff has been <strong>deleted</strong>.
  Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].
  You can still [$1 view this diff] if you wish to proceed.",
 -'rev-suppressed-unhide-diff'  => "One of the revisions of this diff has been '''suppressed'''.
 +'rev-suppressed-unhide-diff'  => "One of the revisions of this diff has been <strong>suppressed</strong>.
  Details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].
  You can still [$1 view this diff] if you wish to proceed.",
 -'rev-deleted-diff-view'       => "One of the revisions of this diff has been '''deleted'''.
 +'rev-deleted-diff-view'       => "One of the revisions of this diff has been <strong>deleted</strong>.
  You can view this diff; details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
 -'rev-suppressed-diff-view'    => "One of the revisions of this diff has been '''suppressed'''.
 +'rev-suppressed-diff-view'    => "One of the revisions of this diff has been <strong>suppressed</strong>.
  You can view this diff; details can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
  'rev-delundel'                => 'change visibility',
  'rev-showdeleted'             => 'show',
@@@ -1703,15 -1698,15 +1703,15 @@@ function, the specified revision does n
  'revdelete-no-file'           => 'The file specified does not exist.',
  'revdelete-show-file-confirm' => 'Are you sure you want to view a deleted revision of the file "<nowiki>$1</nowiki>" from $2 at $3?',
  'revdelete-show-file-submit'  => 'Yes',
 -'revdelete-selected'          => "'''{{PLURAL:$2|Selected revision|Selected revisions}} of [[:$1]]:'''",
 -'logdelete-selected'          => "'''{{PLURAL:$1|Selected log event|Selected log events}}:'''",
 -'revdelete-text'              => "'''Deleted revisions and events will still appear in the page history and logs, but parts of their content will be inaccessible to the public.'''
 +'revdelete-selected'          => "<strong>{{PLURAL:$2|Selected revision|Selected revisions}} of [[:$1]]:</strong>",
 +'logdelete-selected'          => "<strong>{{PLURAL:$1|Selected log event|Selected log events}}:</strong>",
 +'revdelete-text'              => "<strong>Deleted revisions and events will still appear in the page history and logs, but parts of their content will be inaccessible to the public.</strong>
  Other administrators on {{SITENAME}} will still be able to access the hidden content and can undelete it again through this same interface, unless additional restrictions are set.",
  'revdelete-confirm'           => 'Please confirm that you intend to do this, that you understand the consequences, and that you are doing this in accordance with [[{{MediaWiki:Policy-url}}|the policy]].',
 -'revdelete-suppress-text'     => "Suppression should '''only''' be used for the following cases:
 +'revdelete-suppress-text'     => "Suppression should <strong>only</strong> be used for the following cases:
  * potentially libelous information
  * inappropriate personal information
 -*: ''home addresses and telephone numbers, national identification numbers, etc.''",
 +*: <em>home addresses and telephone numbers, national identification numbers, etc.</em>",
  'revdelete-legend'            => 'Set visibility restrictions',
  'revdelete-hide-text'         => 'Revision text',
  'revdelete-hide-image'        => 'Hide file content',
  'revdelete-unsuppress'        => 'Remove restrictions on restored revisions',
  'revdelete-log'               => 'Reason:',
  'revdelete-submit'            => 'Apply to selected {{PLURAL:$1|revision|revisions}}',
 -'revdelete-success'           => "'''Revision visibility successfully updated.'''",
 -'revdelete-failure'           => "'''Revision visibility could not be updated:'''
 +'revdelete-success'           => "<strong>Revision visibility successfully updated.</strong>",
 +'revdelete-failure'           => "<strong>Revision visibility could not be updated:</strong>
  $1",
 -'logdelete-success'           => "'''Log visibility successfully set.'''",
 -'logdelete-failure'           => "'''Log visibility could not be set:'''
 +'logdelete-success'           => "<strong>Log visibility successfully set.</strong>",
 +'logdelete-failure'           => "<strong>Log visibility could not be set:</strong>
  $1",
  'revdel-restore'              => 'change visibility',
  'pagehist'                    => 'Page history',
@@@ -1742,7 -1737,7 +1742,7 @@@ You do not have access to it.'
  'revdelete-modify-no-access'  => 'Error modifying the item dated $2, $1: This item has been marked "restricted".
  You do not have access to it.',
  'revdelete-modify-missing'    => 'Error modifying item ID $1: It is missing from the database!',
 -'revdelete-no-change'         => "'''Warning:''' The item dated $2, $1 already had the requested visibility settings.",
 +'revdelete-no-change'         => "<strong>Warning:</strong> The item dated $2, $1 already had the requested visibility settings.",
  'revdelete-concurrent-change' => 'Error modifying the item dated $2, $1: Its status appears to have been changed by someone else while you attempted to modify it.
  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.',
@@@ -1803,7 -1798,8 +1803,8 @@@ Note that using the navigation links wi
  'showhideselectedversions'    => 'Change visibility of selected revisions',
  'editundo'                    => 'undo',
  'diff-empty'                  => '(No difference)',
- 'diff-multi'                  => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one user|$2 users}} not shown)',
+ 'diff-multi-sameuser'         => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by the same user not shown)',
+ 'diff-multi-otherusers'       => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one other user|$2 users}} not shown)',
  'diff-multi-manyusers'        => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by more than $2 {{PLURAL:$2|user|users}} not shown)',
  'difference-missing-revision' => '{{PLURAL:$2|One revision|$2 revisions}} of this difference ($1) {{PLURAL:$2|was|were}} not found.
  
@@@ -1824,8 -1820,8 +1825,8 @@@ Details can be found in the [{{fullurl:
  'nextn-title'                      => 'Next $1 {{PLURAL:$1|result|results}}',
  'shown-title'                      => 'Show $1 {{PLURAL:$1|result|results}} per page',
  'viewprevnext'                     => 'View ($1 {{int:pipe-separator}} $2) ($3)',
 -'searchmenu-exists'                => "'''There is a page named \"[[:\$1]]\" on this wiki.''' {{PLURAL:$2|0=|See also the other search results found.}}",
 -'searchmenu-new'                   => "'''Create the page \"[[:\$1]]\" on this wiki!''' {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
 +'searchmenu-exists'                => "<strong>There is a page named \"[[:\$1]]\" on this wiki.</strong> {{PLURAL:$2|0=|See also the other search results found.}}",
 +'searchmenu-new'                   => "<strong>Create the page \"[[:\$1]]\" on this wiki!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
  'searchmenu-new-nocreate'          => '', # do not translate or duplicate this message to other languages
  'searchprofile-articles'           => 'Content pages',
  'searchprofile-project'            => 'Help and Project pages',
  'search-result-score'              => 'Relevance: $1%',
  'search-redirect'                  => '(redirect $1)',
  'search-section'                   => '(section $1)',
 +'search-file-match'                => '(matches file content)',
  'search-suggest'                   => 'Did you mean: $1',
  'search-interwiki-caption'         => 'Sister projects',
  'search-interwiki-default'         => '$1 results:',
  'searcheverything-enable'          => 'Search in all namespaces',
  'searchrelated'                    => 'related',
  'searchall'                        => 'all',
 -'showingresults'                   => "Showing below up to {{PLURAL:$1|'''1''' result|'''$1''' results}} starting with #'''$2'''.",
 -'showingresultsnum'                => "Showing below {{PLURAL:$3|'''1''' result|'''$3''' results}} starting with #'''$2'''.",
 -'showingresultsheader'             => "{{PLURAL:$5|Result '''$1''' of '''$3'''|Results '''$1 - $2''' of '''$3'''}} for '''$4'''",
 +'showingresults'                   => "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} starting with #<strong>$2</strong>.",
 +'showingresultsnum'                => "Showing below {{PLURAL:$3|<strong>1</strong> result|<strong>$3</strong> results}} starting with #<strong>$2</strong>.",
 +'showingresultsheader'             => "{{PLURAL:$5|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}} for <strong>$4</strong>",
  'search-nonefound'                 => 'There were no results matching the query.',
  'powersearch-legend'               => 'Advanced search',
  'powersearch-ns'                   => 'Search in namespaces:',
@@@ -2016,7 -2011,7 +2017,7 @@@ Your email address is not revealed whe
  'userrights-lookup-user'         => 'Manage user groups',
  'userrights-user-editname'       => 'Enter a username:',
  'editusergroup'                  => 'Edit user groups',
 -'editinguser'                    => "Changing user rights of user '''[[User:$1|$1]]''' $2",
 +'editinguser'                    => "Changing user rights of user <strong>[[User:$1|$1]]</strong> $2",
  'userrights-editusergroup'       => 'Edit user groups',
  'saveusergroups'                 => 'Save user groups',
  'userrights-groupsmember'        => 'Member of:',
  'recentchanges-label-plusminus'     => 'The page size changed by this number of bytes',
  'recentchanges-legend-heading'      => "'''Legend:'''",
  'recentchanges-legend-newpage'      => '(also see [[Special:NewPages|list of new pages]])',
 -'recentchanges-legend-plusminus'    => "(''±123'')",
 -'rcnotefrom'                        => "Below are the changes since '''$2''' (up to '''$1''' shown).",
 +'recentchanges-legend-plusminus'    => "(<em>±123</em>)",
 +'rcnotefrom'                        => "Below are the changes since <strong>$2</strong> (up to <strong>$1</strong> shown).",
  'rclistfrom'                        => 'Show new changes starting from $1',
  'rcshowhideminor'                   => '$1 minor edits',
  'rcshowhidebots'                    => '$1 bots',
  'recentchangeslinked-toolbox' => 'Related changes',
  'recentchangeslinked-title'   => 'Changes related to "$1"',
  'recentchangeslinked-summary' => "This is a list of changes made recently to pages linked from a specified page (or to members of a specified category).
 -Pages on [[Special:Watchlist|your watchlist]] are '''bold'''.",
 +Pages on [[Special:Watchlist|your watchlist]] are <strong>bold</strong>.",
  'recentchangeslinked-page'    => 'Page name:',
  'recentchangeslinked-to'      => 'Show changes to pages linked to the given page instead',
  
  'upload_directory_read_only'  => 'The upload directory ($1) is not writable by the webserver.',
  'uploaderror'                 => 'Upload error',
  'upload-summary'              => '', # do not translate or duplicate this message to other languages
 -'upload-recreate-warning'     => "'''Warning: A file by that name has been deleted or moved.'''
 +'upload-recreate-warning'     => "<strong>Warning: A file by that name has been deleted or moved.</strong>
  
  The deletion and move log for this page are provided here for convenience:",
  'uploadtext'                  => "Use the form below to upload files.
  To view or search previously uploaded files go to the [[Special:FileList|list of uploaded files]], (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]].
  
  To include a file in a page, use a link in one of the following forms:
 -* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' to use the full version of the file
 -* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' to use a 200 pixel wide rendition in a box in the left margin with \"alt text\" as description
 -* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' for directly linking to the file without displaying the file",
 +* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> to use the full version of the file
 +* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> to use a 200 pixel wide rendition in a box in the left margin with \"alt text\" as description
 +* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> for directly linking to the file without displaying the file",
  'upload-permitted'            => 'Permitted file types: $1.',
  'upload-preferred'            => 'Preferred file types: $1.',
  'upload-prohibited'           => 'Prohibited file types: $1.',
@@@ -2284,9 -2279,9 +2285,9 @@@ Please rename the file and try uploadin
  'filetype-mime-mismatch'      => 'File extension ".$1" does not match the detected MIME type of the file ($2).',
  'filetype-badmime'            => 'Files of the MIME type "$1" are not allowed to be uploaded.',
  'filetype-bad-ie-mime'        => 'Cannot upload this file because Internet Explorer would detect it as "$1", which is a disallowed and potentially dangerous file type.',
 -'filetype-unwanted-type'      => "'''\".\$1\"''' is an unwanted file type.
 +'filetype-unwanted-type'      => "<strong>\".\$1\"</strong> is an unwanted file type.
  Preferred {{PLURAL:\$3|file type is|file types are}} \$2.",
 -'filetype-banned-type'        => '\'\'\'".$1"\'\'\' {{PLURAL:$4|is not a permitted file type|are not permitted file types}}.
 +'filetype-banned-type'        => '<strong>".$1"</strong> {{PLURAL:$4|is not a permitted file type|are not permitted file types}}.
  Permitted {{PLURAL:$3|file type is|file types are}} $2.',
  'filetype-missing'            => 'The file has no extension (like ".jpg").',
  'empty-file'                  => 'The file you submitted was empty.',
@@@ -2317,12 -2312,12 +2318,12 @@@ To make your summary appear there, you 
  * Name of the uploading file: <strong>[[:$1]]</strong>
  * Name of the existing file: <strong>[[:$2]]</strong>
  Please choose a different name.',
 -'fileexists-thumbnail-yes'    => "The file seems to be an image of reduced size ''(thumbnail)''.
 +'fileexists-thumbnail-yes'    => "The file seems to be an image of reduced size <em>(thumbnail)</em>.
  [[$1|thumb]]
  Please check the file <strong>[[:$1]]</strong>.
  If the checked file is the same image of original size it is not necessary to upload an extra thumbnail.",
  'file-thumbnail-no'           => "The filename begins with <strong>$1</strong>.
 -It seems to be an image of reduced size ''(thumbnail)''.
 +It seems to be an image of reduced size <em>(thumbnail)</em>.
  If you have this image in full resolution upload this one, otherwise change the filename please.",
  'fileexists-forbidden'        => 'A file with this name already exists, and cannot be overwritten.
  If you still want to upload your file, please go back and use a new name.
@@@ -2347,7 -2342,6 +2348,7 @@@ You should ask someone with the abilit
  'php-uploaddisabledtext'      => 'File uploads are disabled in PHP.
  Please check the file_uploads setting.',
  'uploadscripted'              => 'This file contains HTML or script code that may be erroneously interpreted by a web browser.',
 +'uploadinvalidxml'            => 'The XML in the uploaded file could not be parsed.',
  'uploadvirus'                 => 'The file contains a virus!
  Details: $1',
  'uploadjava'                  => 'The file is a ZIP file that contains a Java .class file.
@@@ -2362,7 -2356,7 +2363,7 @@@ Uploading Java files is not allowed bec
  'watchthisupload'             => 'Watch this file',
  'filewasdeleted'              => 'A file of this name has been previously uploaded and subsequently deleted.
  You should check the $1 before proceeding to upload it again.',
 -'filename-bad-prefix'         => "The name of the file you are uploading begins with '''\"\$1\"''', which is a non-descriptive name typically assigned automatically by digital cameras.
 +'filename-bad-prefix'         => "The name of the file you are uploading begins with <strong>\"\$1\"</strong>, which is a non-descriptive name typically assigned automatically by digital cameras.
  Please choose a more descriptive name for your file.",
  'filename-prefix-blacklist'   => ' #<!-- leave this line exactly as it is --> <pre>
  # Syntax is as follows:
@@@ -2420,7 -2414,7 +2421,7 @@@ If the problem persists, contact an [[S
  'backend-fail-read'          => 'Could not read file "$1".',
  'backend-fail-create'        => 'Could not write file "$1".',
  'backend-fail-maxsize'       => 'Could not write file "$1" because it is larger than {{PLURAL:$2|one byte|$2 bytes}}.',
 -'backend-fail-readonly'      => 'The storage backend "$1" is currently read-only. The reason given is: "\'\'$2\'\'"',
 +'backend-fail-readonly'      => 'The storage backend "$1" is currently read-only. The reason given is: "<em>$2</em>"',
  'backend-fail-synced'        => 'The file "$1" is in an inconsistent state within the internal storage backends',
  'backend-fail-connect'       => 'Could not connect to storage backend "$1".',
  'backend-fail-internal'      => 'An unknown error occurred in storage backend "$1".',
@@@ -2572,24 -2566,24 +2573,24 @@@ Maybe you want to edit the description 
  # File reversion
  'filerevert'                => 'Revert $1',
  'filerevert-legend'         => 'Revert file',
 -'filerevert-intro'          => "You are about to revert the file '''[[Media:$1|$1]]''' to the [$4 version as of $3, $2].",
 +'filerevert-intro'          => "You are about to revert the file <strong>[[Media:$1|$1]]</strong> to the [$4 version as of $3, $2].",
  'filerevert-comment'        => 'Reason:',
  'filerevert-defaultcomment' => 'Reverted to version as of $2, $1',
  'filerevert-submit'         => 'Revert',
 -'filerevert-success'        => "'''[[Media:$1|$1]]''' has been reverted to the [$4 version as of $3, $2].",
 +'filerevert-success'        => "<strong>[[Media:$1|$1]]</strong> has been reverted to the [$4 version as of $3, $2].",
  'filerevert-badversion'     => 'There is no previous local version of this file with the provided timestamp.',
  
  # File deletion
  'filedelete'                   => 'Delete $1',
  'filedelete-legend'            => 'Delete file',
 -'filedelete-intro'             => "You are about to delete the file '''[[Media:$1|$1]]''' along with all of its history.",
 -'filedelete-intro-old'         => "You are deleting the version of '''[[Media:$1|$1]]''' as of [$4 $3, $2].",
 +'filedelete-intro'             => "You are about to delete the file <strong>[[Media:$1|$1]]</strong> along with all of its history.",
 +'filedelete-intro-old'         => "You are deleting the version of <strong>[[Media:$1|$1]]</strong> as of [$4 $3, $2].",
  'filedelete-comment'           => 'Reason:',
  'filedelete-submit'            => 'Delete',
 -'filedelete-success'           => "'''$1''' has been deleted.",
 -'filedelete-success-old'       => "The version of '''[[Media:$1|$1]]''' as of $3, $2 has been deleted.",
 -'filedelete-nofile'            => "'''$1''' does not exist.",
 -'filedelete-nofile-old'        => "There is no archived version of '''$1''' with the specified attributes.",
 +'filedelete-success'           => "<strong>$1</strong> has been deleted.",
 +'filedelete-success-old'       => "The version of <strong>[[Media:$1|$1]]</strong> as of $3, $2 has been deleted.",
 +'filedelete-nofile'            => "<strong>$1</strong> does not exist.",
 +'filedelete-nofile-old'        => "There is no archived version of <strong>$1</strong> with the specified attributes.",
  'filedelete-otherreason'       => 'Other/additional reason:',
  'filedelete-reason-otherlist'  => 'Other reason',
  'filedelete-reason-dropdown'   => '*Common delete reasons
@@@ -2966,12 -2960,12 +2967,12 @@@ Future changes to this page and its ass
  'notvisiblerev'        => 'The last revision by a different user has been deleted',
  'watchlist-details'    => '{{PLURAL:$1|$1 page|$1 pages}} on your watchlist, not counting talk pages.',
  'wlheader-enotif'      => 'Email notification is enabled.',
 -'wlheader-showupdated' => "Pages that have been changed since you last visited them are shown in '''bold'''.",
 +'wlheader-showupdated' => "Pages that have been changed since you last visited them are shown in <strong>bold</strong>.",
  'watchmethod-recent'   => 'checking recent edits for watched pages',
  'watchmethod-list'     => 'checking watched pages for recent edits',
  'watchlistcontains'    => 'Your watchlist contains $1 {{PLURAL:$1|page|pages}}.',
  'iteminvalidname'      => 'Problem with item "$1", invalid name...',
 -'wlnote'               => "Below {{PLURAL:$1|is the last change|are the last '''$1''' changes}} in the last {{PLURAL:$2|hour|'''$2''' hours}}, as of $3, $4.",
 +'wlnote2'              => "Below are the changes in the last {{PLURAL:$1|hour|<strong>$1</strong> hours}}, as of $2, $3.",
  'wlshowlast'           => 'Show last $1 hours $2 days $3',
  'watchlist-options'    => 'Watchlist options',
  
@@@ -3034,10 -3028,10 +3035,10 @@@ Feedback and further assistance
  'exblank'                => 'page was empty',
  'delete-confirm'         => 'Delete "$1"',
  'delete-legend'          => 'Delete',
 -'historywarning'         => "'''Warning:''' The page you are about to delete has a history with approximately $1 {{PLURAL:$1|revision|revisions}}:",
 +'historywarning'         => "<strong>Warning:</strong> The page you are about to delete has a history with approximately $1 {{PLURAL:$1|revision|revisions}}:",
  'confirmdeletetext'      => 'You are about to delete a page along with all of its history.
  Please confirm that you intend to do this, that you understand the consequences, and that you are doing this in accordance with [[{{MediaWiki:Policy-url}}|the policy]].',
 -'deleting-backlinks-warning' => "'''Warning:''' Other pages link to the page you are about to delete.",
 +'deleting-backlinks-warning' => "'''Warning:''' Other pages link to or transclude from the page you are about to delete.",
  'actioncomplete'         => 'Action complete',
  'actionfailed'           => 'Action failed',
  'deletedtext'            => '"$1" has been deleted.
@@@ -3108,13 -3102,13 +3109,13 @@@ See the [[Special:ProtectedPages|protec
  'protect_expiry_invalid'           => 'Expiry time is invalid.',
  'protect_expiry_old'               => 'Expiry time is in the past.',
  'protect-unchain-permissions'      => 'Unlock further protect options',
 -'protect-text'                     => "Here you may view and change the protection level for the page '''$1'''.",
 +'protect-text'                     => "Here you may view and change the protection level for the page <strong>$1</strong>.",
  'protect-locked-blocked'           => "You cannot change protection levels while blocked.
 -Here are the current settings for the page '''$1''':",
 +Here are the current settings for the page <strong>$1</strong>:",
  'protect-locked-dblock'            => "Protection levels cannot be changed due to an active database lock.
 -Here are the current settings for the page '''$1''':",
 +Here are the current settings for the page <strong>$1</strong>:",
  'protect-locked-access'            => "Your account does not have permission to change page protection levels.
 -Here are the current settings for the page '''$1''':",
 +Here are the current settings for the page <strong>$1</strong>:",
  'protect-cascadeon'                => "This page is currently protected because it is included in the following {{PLURAL:$1|page, which has|pages, which have}} cascading protection turned on.
  You can change this page's protection level, but it will not affect the cascading protection.",
  'protect-default'                  => 'Allow all users',
  'undelete'                     => 'View deleted pages',
  'undelete-summary'             => '', # do not translate or duplicate this message to other languages
  'undeletepage'                 => 'View and restore deleted pages',
 -'undeletepagetitle'            => "'''The following consists of deleted revisions of [[:$1|$1]]'''.",
 +'undeletepagetitle'            => "<strong>The following consists of deleted revisions of [[:$1|$1]]</strong>.",
  'viewdeletedpage'              => 'View deleted pages',
  'undeletepagetext'             => 'The following {{PLURAL:$1|page has been deleted but is|$1 pages have been deleted but are}} still in the archive and can be restored.
  The archive may be periodically cleaned out.',
  'undelete-fieldset-title'      => 'Restore revisions',
 -'undeleteextrahelp'            => "To restore the page's entire history, leave all checkboxes deselected and click '''''{{int:undeletebtn}}'''''.
 -To perform a selective restoration, check the boxes corresponding to the revisions to be restored, and click '''''{{int:undeletebtn}}'''''.",
 +'undeleteextrahelp'            => "To restore the page's entire history, leave all checkboxes deselected and click <strong><em>{{int:undeletebtn}}</em></strong>.
 +To perform a selective restoration, check the boxes corresponding to the revisions to be restored, and click <strong><em>{{int:undeletebtn}}</em></strong>.",
  'undeleterevisions'            => '$1 {{PLURAL:$1|revision|revisions}} archived',
  'undeletehistory'              => 'If you restore the page, all revisions will be restored to the history.
  If a new page with the same name has been created since the deletion, the restored revisions will appear in the prior history.',
@@@ -3190,7 -3184,7 +3191,7 @@@ You may have a bad link, or the revisio
  'undeletedfiles'               => '{{PLURAL:$1|1 file|$1 files}} restored',
  'cannotundelete'               => 'Undelete failed:
  $1',
 -'undeletedpage'                => "'''$1 has been restored'''
 +'undeletedpage'                => "<strong>$1 has been restored</strong>
  
  Consult the [[Special:Log/delete|deletion log]] for a record of recent deletions and restorations.",
  'undelete-header'              => 'See [[Special:Log/delete|the deletion log]] for recently deleted pages.',
@@@ -3259,9 -3253,9 +3260,9 @@@ The latest block log entry is provided 
  'whatlinkshere-title'      => 'Pages that link to "$1"',
  'whatlinkshere-summary'    => '', # do not translate or duplicate this message to other languages
  'whatlinkshere-page'       => 'Page:',
 -'linkshere'                => "The following pages link to '''[[:$1]]''':",
 -'nolinkshere'              => "No pages link to '''[[:$1]]'''.",
 -'nolinkshere-ns'           => "No pages link to '''[[:$1]]''' in the chosen namespace.",
 +'linkshere'                => "The following pages link to <strong>[[:$1]]</strong>:",
 +'nolinkshere'              => "No pages link to <strong>[[:$1]]</strong>.",
 +'nolinkshere-ns'           => "No pages link to <strong>[[:$1]]</strong> in the chosen namespace.",
  'isredirect'               => 'redirect page',
  'istemplate'               => 'transclusion',
  'isimage'                  => 'file link',
@@@ -3357,7 -3351,7 +3358,7 @@@ See the [[Special:BlockList|block list]
  'contribslink'                    => 'contribs',
  'emaillink'                       => 'send email',
  'autoblocker'                     => 'Autoblocked because your IP address has been recently used by "[[User:$1|$1]]".
 -The reason given for $1\'s block is "\'\'$2\'\'"',
 +The reason given for $1\'s block is "<em>$2</em>"',
  'blocklogpage'                    => 'Block log',
  'blocklog-showlog'                => 'This user has been blocked previously.
  The block log is provided below for reference:',
@@@ -3379,7 -3373,7 +3380,7 @@@ See the [[Special:BlockList|block list]
  'range_block_disabled'            => 'The administrator ability to create range blocks is disabled.',
  'ipb_expiry_invalid'              => 'Expiry time invalid.',
  'ipb_expiry_temp'                 => 'Hidden username blocks must be permanent.',
 -'ipb_hide_invalid'                => 'Unable to suppress this account; it may have too many edits.',
 +'ipb_hide_invalid'                => 'Unable to suppress this account; it has more than {{PLURAL:$1|one edit|$1 edits}}.',
  'ipb_already_blocked'             => '"$1" is already blocked.',
  'ipb-needreblock'                 => '$1 is already blocked. Do you want to change the settings?',
  'ipb-otherblocks-header'          => 'Other {{PLURAL:$1|block|blocks}}',
@@@ -3435,10 -3429,10 +3436,10 @@@ You can update redirects that point to 
  If you choose not to, be sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]].
  You are responsible for making sure that links continue to point where they are supposed to go.
  
 -Note that the page will '''not''' be moved if there is already a page at the new title, unless the latter is a redirect and has no past edit history.
 +Note that the page will <strong>not</strong> be moved if there is already a page at the new title, unless the latter is a redirect and has no past edit history.
  This means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page.
  
 -'''Warning!'''
 +<strong>Warning!</strong>
  This can be a drastic and unexpected change for a popular page;
  please be sure you understand the consequences of this before proceeding.",
  'movepagetext-noredirectfixer' => "Using the form below will rename a page, moving all of its history to the new name.
@@@ -3446,19 -3440,19 +3447,19 @@@ The old title will become a redirect pa
  Be sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]].
  You are responsible for making sure that links continue to point where they are supposed to go.
  
 -Note that the page will '''not''' be moved if there is already a page at the new title, unless it is a redirect and has no past edit history.
 +Note that the page will <strong>not</strong> be moved if there is already a page at the new title, unless it is a redirect and has no past edit history.
  This means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page.
  
 -'''Warning!'''
 +<strong>Warning!</strong>
  This can be a drastic and unexpected change for a popular page;
  please be sure you understand the consequences of this before proceeding.",
 -'movepagetalktext'             => "The associated talk page will be automatically moved along with it '''unless:'''
 +'movepagetalktext'             => "The associated talk page will be automatically moved along with it <strong>unless:</strong>
  *A non-empty talk page already exists under the new name, or
  *You uncheck the box below.
  
  In those cases, you will have to move or merge the page manually if desired.",
  'movearticle'                  => 'Move page:',
 -'moveuserpage-warning'         => "'''Warning:''' You are about to move a user page. Please note that only the page will be moved and the user will ''not'' be renamed.",
 +'moveuserpage-warning'         => "<strong>Warning:</strong> You are about to move a user page. Please note that only the page will be moved and the user will <em>not</em> be renamed.",
  'movenologintext'              => 'You must be a registered user and [[Special:UserLogin|logged in]] to move a page.',
  'movenotallowed'               => 'You do not have permission to move pages.',
  'movenotallowedfile'           => 'You do not have permission to move files.',
  'move-watch'                   => 'Watch source page and target page',
  'movepagebtn'                  => 'Move page',
  'pagemovedsub'                 => 'Move succeeded',
 -'movepage-moved'               => '\'\'\'"$1" has been moved to "$2"\'\'\'',
 +'movepage-moved'               => '<strong>"$1" has been moved to "$2"</strong>',
  'movepage-moved-redirect'      => 'A redirect has been created.',
  'movepage-moved-noredirect'    => 'The creation of a redirect has been suppressed.',
  'articleexists'                => 'A page of that name already exists, or the name you have chosen is not valid.
@@@ -3509,9 -3503,9 +3510,9 @@@ cannot move a page over itself.'
  'imageinvalidfilename'         => 'The target filename is invalid',
  'fix-double-redirects'         => 'Update any redirects that point to the original title',
  'move-leave-redirect'          => 'Leave a redirect behind',
 -'protectedpagemovewarning'     => "'''Warning:''' This page has been protected so that only users with administrator privileges can move it.
 +'protectedpagemovewarning'     => "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can move it.
  The latest log entry is provided below for reference:",
 -'semiprotectedpagemovewarning' => "'''Note:''' This page has been protected so that only registered users can move it.
 +'semiprotectedpagemovewarning' => "<strong>Note:</strong> This page has been protected so that only registered users can move it.
  The latest log entry is provided below for reference:",
  'move-over-sharedrepo'         => '== File exists ==
  [[:$1]] exists on a shared repository. Moving a file to this title will override the shared file.',
@@@ -3530,7 -3524,7 +3531,7 @@@ In the latter case you can also use a l
  'exportall'         => 'Export all pages',
  'exportcuronly'     => 'Include only the current revision, not the full history',
  'exportnohistory'   => "----
 -'''Note:''' Exporting the full history of pages through this form has been disabled due to performance reasons.",
 +<strong>Note:</strong> Exporting the full history of pages through this form has been disabled due to performance reasons.",
  'exportlistauthors' => 'Include a full list of contributors for each page',
  'export-submit'     => 'Export',
  'export-addcattext' => 'Add pages from category:',
  'allmessagescurrent'            => 'Current message text',
  'allmessagestext'               => 'This is a list of system messages available in the MediaWiki namespace.
  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.",
 +'allmessagesnotsupportedDB'     => "This page cannot be used because <strong>\$wgUseDatabaseMessages</strong> has been disabled.",
  'allmessages-filter-legend'     => 'Filter',
  'allmessages-filter'            => 'Filter by customization state:',
  'allmessages-filter-unmodified' => 'Unmodified',
  'allmessages-prefix'            => 'Filter by prefix:',
  'allmessages-language'          => 'Language:',
  'allmessages-filter-submit'     => 'Go',
 +'allmessages-filter-translate'  => 'Translate',
  
  # Thumbnails
  'thumbnail-more'           => 'Enlarge',
@@@ -3613,7 -3606,7 +3614,7 @@@ The file was only partially uploaded.'
  A temporary folder is missing.',
  'import-parse-failure'       => 'XML import parse failure',
  'import-noarticle'           => 'No page to import!',
 -'import-nonewrevisions'      => 'All revisions were previously imported.',
 +'import-nonewrevisions'      => 'No revisions imported (all were either already present, or skipped due to errors).',
  'xml-error-string'           => '$1 at line $2, col $3 (byte $4): $5',
  'import-upload'              => 'Upload XML data',
  'import-token-mismatch'      => 'Loss of session data.
@@@ -3625,7 -3618,6 +3626,7 @@@ Please try again.'
  'import-error-special'       => 'Page "$1" is not imported because it belongs to a special namespace that does not allow pages.',
  'import-error-invalid'       => 'Page "$1" is not imported because its name is invalid.',
  'import-error-unserialize'   => 'Revision $2 of page "$1" could not be unserialized. The revision was reported to use content model $3 serialized as $4.',
 +'import-error-bad-location'  => 'Revision $2 using content model $3 can not be stored on "$1" on this wiki, since that model is not supported on that page.',
  'import-options-wrong'       => 'Wrong {{PLURAL:$2|option|options}}: <nowiki>$1</nowiki>',
  'import-rootpage-invalid'    => 'Given root page is an invalid title.',
  'import-rootpage-nosubpage'  => 'Namespace "$1" of the root page does not allow subpages.',
  'accesskey-pt-watchlist'                => 'l', # do not translate or duplicate this message to other languages
  'accesskey-pt-mycontris'                => 'y', # do not translate or duplicate this message to other languages
  'accesskey-pt-login'                    => 'o', # do not translate or duplicate this message to other languages
 -'accesskey-pt-anonlogin'                => 'o', # do not translate or duplicate this message to other languages
  'accesskey-pt-logout'                   => '', # do not translate or duplicate this message to other languages
  'accesskey-ca-talk'                     => 't', # do not translate or duplicate this message to other languages
  'accesskey-ca-edit'                     => 'e', # do not translate or duplicate this message to other languages
  'tooltip-pt-watchlist'                => 'A list of pages you are monitoring for changes',
  'tooltip-pt-mycontris'                => 'A list of your contributions',
  'tooltip-pt-login'                    => 'You are encouraged to log in; however, it is not mandatory',
 -'tooltip-pt-anonlogin'                => 'You are encouraged to log in; however, it is not mandatory',
  'tooltip-pt-logout'                   => 'Log out',
  'tooltip-ca-talk'                     => 'Discussion about the content page',
  'tooltip-ca-edit'                     => 'You can edit this page. Please use the preview button before saving',
@@@ -3839,7 -3833,7 +3840,7 @@@ This is probably caused by a link to a 
  'spam_blanking'       => 'All revisions contained links to $1, blanking',
  'spam_deleting'       => 'All revisions contained links to $1, deleting',
  'simpleantispam-label' => "Anti-spam check.
 -Do '''NOT''' fill this in!",
 +Do <strong>NOT</strong> fill this in!",
  
  # Info page
  'pageinfo-header'                 => '-', # do not translate or duplicate this message to other languages
@@@ -3932,9 -3926,9 +3933,9 @@@ $1'
  'nextdiff'     => 'Newer edit â†’',
  
  # Media information
 -'mediawarning'                => "'''Warning:''' This file type may contain malicious code.
 +'mediawarning'                => "<strong>Warning:</strong> This file type may contain malicious code.
  By executing it, your system may be compromised.",
 -'imagemaxsize'                => "Image size limit:<br />''(for file description pages)''",
 +'imagemaxsize'                => "Image size limit:<br /><em>(for file description pages)</em>",
  '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-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.'''",
 +'file-no-thumb-animation'     => "<strong>Note: Due to technical limitations, thumbnails of this file will not be animated.</strong>",
 +'file-no-thumb-animation-gif' => "<strong>Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated.</strong>",
  
  # Special:NewFiles
  'newimages'             => 'Gallery of new files',
 -'imagelisttext'         => "Below is a list of '''$1''' {{PLURAL:$1|file|files}} sorted $2.",
 +'imagelisttext'         => "Below is a list of <strong>$1</strong> {{PLURAL:$1|file|files}} sorted $2.",
  'newimages-summary'     => 'This special page shows the last uploaded files.',
  'newimages-legend'      => 'Filter',
  'newimages-label'       => 'Filename (or a part of it):',
@@@ -4080,7 -4074,7 +4081,7 @@@ Others will be hidden by default
  * gpslatitude
  * gpslongitude
  * gpsaltitude',
 -'metadata-langitem'         => "'''$2:''' $1", # only translate this message to other languages if you have to change it
 +'metadata-langitem'         => "<strong>$2:</strong> $1", # only translate this message to other languages if you have to change it
  'metadata-langitem-default' => '$1', # only translate this message to other languages if you have to change it
  
  # Exif tags
@@@ -4598,9 -4592,9 +4599,9 @@@ This confirmation code will expire at $
  'scarytranscludetoolong'           => '[URL is too long]',
  
  # Delete conflict
 -'deletedwhileediting'      => "'''Warning:''' This page was deleted after you started editing!",
 +'deletedwhileediting'      => "<strong>Warning:</strong> This page was deleted after you started editing!",
  'confirmrecreate'          => "User [[User:$1|$1]] ([[User talk:$1|talk]]) deleted this page after you started editing with reason:
 -: ''$2''
 +: <em>$2</em>
  Please confirm that you really want to recreate this page.",
  'confirmrecreate-noreason' => 'User [[User:$1|$1]] ([[User talk:$1|talk]]) deleted this page after you started editing. Please confirm that you really want to recreate this page.',
  'recreate'                 => 'Recreate',
@@@ -4811,7 -4805,7 +4812,7 @@@ You can also [[Special:EditWatchlist|us
  
  # Core parser functions
  'unknown_extension_tag' => 'Unknown extension tag "$1"',
 -'duplicate-defaultsort' => '\'\'\'Warning:\'\'\' Default sort key "$2" overrides earlier default sort key "$1".',
 +'duplicate-defaultsort' => '<strong>Warning:</strong> Default sort key "$2" overrides earlier default sort key "$1".',
  
  # Special:Version
  'version'                               => 'Version',
  'version-ext-colheader-license'         => 'License',
  'version-ext-colheader-description'     => 'Description',
  'version-ext-colheader-credits'         => 'Authors',
 -'version-poweredby-credits'             => "This wiki is powered by '''[//www.mediawiki.org/ MediaWiki]''', copyright Â© 2001-$1 $2.",
 +'version-poweredby-credits'             => "This wiki is powered by <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, 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]].',
@@@ -4855,13 -4849,6 +4856,13 @@@ You should have received [{{SERVER}}{{S
  'version-software'                      => 'Installed software',
  'version-software-product'              => 'Product',
  'version-software-version'              => 'Version',
 +'version-db-mysql-url'                  => 'http://www.mysql.com/', # do not translate or duplicate this message to other languages
 +'version-db-mariadb-url'                => 'http://mariadb.org/', # do not translate or duplicate this message to other languages
 +'version-db-percona-url'                => 'http://www.percona.com/software/percona-server', # do not translate or duplicate this message to other languages
 +'version-db-postgres-url'               => 'http://www.postgresql.org/', # do not translate or duplicate this message to other languages
 +'version-db-oracle-url'                 => 'http://www.oracle.com/database/', # do not translate or duplicate this message to other languages
 +'version-db-sqlite-url'                 => 'http://www.sqlite.org/', # do not translate or duplicate this message to other languages
 +'version-db-mssql-url'                  => 'http://www.microsoft.com/sql/', # do not translate or duplicate this message to other languages
  'version-entrypoints'                   => 'Entry point URLs',
  'version-entrypoints-header-entrypoint' => 'Entry point',
  'version-entrypoints-header-url'        => 'URL',
@@@ -58,7 -58,6 +58,7 @@@
   * @author Iniquity
   * @author Iwan Novirion
   * @author Jon Harald Søby
 + * @author Joseph
   * @author Karduelis
   * @author Kazu89
   * @author Kghbln
   * @author Sp5uhe
   * @author Srhat
   * @author Subhashkataria21.90
 + * @author TMg
   * @author Tedjuh10
   * @author Tgr
   * @author The Evil IP address
@@@ -181,8 -179,11 +181,8 @@@ Offers user to use alternative represen
  This is the toolbar: [[Image:Toolbar.png]]",
  'tog-editondblclick' => "{{Gender}}
  [[Special:Preferences]], tab 'Edit'. Offers user to open edit page on double click.",
 -'tog-editsection' => "[[Special:Preferences]], tab 'Edit'. Offers user to add links in sub headings for editing sections. {{Gender}}",
  'tog-editsectiononrightclick' => "{{Gender}}
  [[Special:Preferences]], tab 'Edit'. Offers user to edit a section by clicking on a section title.",
 -'tog-showtoc' => "[[Special:Preferences]], tab 'Misc'.
 -Offers user to show a table of contents automatically if a page has more than 3 headings (= 4 or more headings).",
  'tog-rememberpassword' => "{{Gender}}
  [[Special:Preferences]], tab 'User profile', section 'Change password'. Offers user remember login details.
  Parameters:
@@@ -853,10 -854,8 +853,10 @@@ See also
  * {{msg-mw|Youhavenewmessages}}',
  'newmessageslinkplural' => "This is the first link displayed in an orange rectangle when a user gets a message on their talk page.
  
 -Used as <code>$1</code> in messages {{msg-mw|youhavenewmessagesfromusers}}, {{msg-mw|youhavenewmessagesmanyusers}}, {{msg-mw|youhavenewmessages}}.
 -
 +Used as <code>$1</code> in the following messages:
 +* {{msg-mw|youhavenewmessagesfromusers}}
 +* {{msg-mw|youhavenewmessagesmanyusers}}
 +* {{msg-mw|youhavenewmessages}}.
  Parameters:
  * $1 - 1 or 999:
  ** 1 - if there was '''one''' new edit since the last time the user has seen their talk page
@@@ -1557,7 -1556,7 +1557,7 @@@ Parameters
  * $3 - a password (randomly generated)
  * $4 - a URL to the wiki ('<' + server name + script name + '>')
  * $5 - (Unused) number of days to password expiry date",
 -'login-throttled' => 'Error message shown at [[Special:UserLogin]] after the user has tried to login with incorrect password too many times; also used by [[Special:ChangeEmail]] and [[Special:ChangePassword]].
 +'login-throttled' => 'Error message shown at [[Special:UserLogin]] after the user has tried to login with incorrect password too many times.
  
  The user has to wait a certain time before trying to log in again.
  
@@@ -1575,8 -1574,7 +1575,8 @@@ Parameters
  
  This is a protection against robots trying to find the password by trying lots of them.
  The number of attempts and waiting time are configured via [[mw:Manual:$wgPasswordAttemptThrottle|$wgPasswordAttemptThrottle]].
 -This message is used in html.',
 +This message is used in html.
 +{{identical|Login throttled}}',
  'login-abort-generic' => 'The generic unsuccessful login message is used unless otherwise specified by hook writers',
  'loginlanguagelabel' => 'Used on [[Special:UserLogin]] if $wgLoginLanguageSelector is true. Parameters:
  * $1 - a pipe-separated list built from the names that appear in the message {{msg-mw|Loginlanguagelinks}}.
@@@ -1599,34 -1597,11 +1599,34 @@@ Used on the account creation form when 
  'resetpass_header' => 'Header on box on special page [[Special:ChangePassword]].
  
  {{Identical|Reset password}}',
 -'oldpassword' => "Used on the 'User profile' tab of 'my preferences'. This is the text next to an entry box for the old password in the 'change password' section.",
 +'oldpassword' => "Used on the 'User profile' tab of 'my preferences'. This is the text next to an entry box for the old password in the 'change password' section.
 +{{Identical|Old password}}",
  'newpassword' => '{{Identical|New password}}',
  'retypenew' => "Appears on the 'User profile' tab of the 'Preferences' special page in the 'Change password' section. It appears next to the text box for entering the new password a second time.",
  'resetpass_submit' => 'Submit button on [[Special:ChangePassword]]',
  'changepassword-success' => 'Used in [[Special:ChangePassword]].',
 +'changepassword-throttled' => 'Error message shown at [[Special:ChangePassword]] after the user has tried to login with incorrect password too many times.
 +
 +The user has to wait a certain time before trying to log in again.
 +
 +Parameters:
 +* $1 - the time to wait before the next login attempt. Automatically formatted using the following duration messages:
 +** {{msg-mw|Duration-millennia}}
 +** {{msg-mw|Duration-centuries}}
 +** {{msg-mw|Duration-decades}}
 +** {{msg-mw|Duration-years}}
 +** {{msg-mw|Duration-weeks}}
 +** {{msg-mw|Duration-days}}
 +** {{msg-mw|Duration-hours}}
 +** {{msg-mw|Duration-minutes}}
 +** {{msg-mw|Duration-seconds}}
 +
 +This is a protection against robots trying to find the password by trying lots of them.
 +The number of attempts and waiting time are configured via [[mw:Manual:$wgPasswordAttemptThrottle|$wgPasswordAttemptThrottle]].
 +This message is used in html.
 +
 +See also:
 +* {{msg-mw|Changeemail-throttled}}',
  'resetpass_forbidden' => "Used as error message in changing password. Maybe the external auth plugin won't allow local password changes.",
  'resetpass-no-info' => 'Error message for [[Special:ChangePassword]].
  
@@@ -1716,28 -1691,6 +1716,28 @@@ Parameters
  'changeemail-cancel' => 'Cancel button on [[Special:ChangeEmail]]
  
  {{Identical|Cancel}}',
 +'changeemail-throttled' => 'Error message shown at [[Special:ChangeEmail]] after the user has tried to login with incorrect password too many times.
 +
 +The user has to wait a certain time before trying to log in again.
 +
 +Parameters:
 +* $1 - the time to wait before the next login attempt. Automatically formatted using the following duration messages:
 +** {{msg-mw|Duration-millennia}}
 +** {{msg-mw|Duration-centuries}}
 +** {{msg-mw|Duration-decades}}
 +** {{msg-mw|Duration-years}}
 +** {{msg-mw|Duration-weeks}}
 +** {{msg-mw|Duration-days}}
 +** {{msg-mw|Duration-hours}}
 +** {{msg-mw|Duration-minutes}}
 +** {{msg-mw|Duration-seconds}}
 +
 +This is a protection against robots trying to find the password by trying lots of them.
 +The number of attempts and waiting time are configured via [[mw:Manual:$wgPasswordAttemptThrottle|$wgPasswordAttemptThrottle]].
 +This message is used in html.
 +
 +See also:
 +* {{msg-mw|Changepassword-throttled}}',
  
  # Special:ResetTokens
  'resettokens' => '{{doc-special|ResetTokens}}
@@@ -2184,10 -2137,6 +2184,10 @@@ Parameters
  'editwarning-warning' => "{{doc-important|Do ''not'' use <nowiki>{{int:prefs-editing}}</nowiki> for \"Editing\". It is forbidden in this message, see [[mwr:68405]].}}
  
  but you can see the text of that button here: {{msg-mw|Prefs-editing}}",
 +'editpage-notsupportedcontentformat-title' => 'Title of error page shown when using an incompatible format on EditPage',
 +'editpage-notsupportedcontentformat-text' => 'Error message shown when using an incompatible format on EditPage. Parameters:
 +* $1 - the format id
 +* $2 - the content model name',
  
  # Content models
  'content-model-wikitext' => 'Name for the wikitext content model, used when decribing what type of content a page contains.
@@@ -2809,12 -2758,20 +2809,20 @@@ See also
  This message has sometimes a tooltip {{msg-mw|tooltip-undo}}
  {{Identical|Undo}}',
  'diff-empty' => 'This message appears instead of a "diff" when comparing two revisions that are identical.',
- 'diff-multi' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive.
+ 'diff-multi-sameuser' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and the intermediate revisions were all created by the same user as the new revision.
  
  Parameters:
  * $1 - the number of revisions
- * $2 - the number of distinct users who made those revisions
  See also:
+ * {{msg-mw|Diff-multi-otherusers}}
+ * {{msg-mw|Diff-multi-manyusers}}",
+ 'diff-multi-otherusers' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and at least one of the intermediate revisions was created by a user other than the user who created the new revision.
+ Parameters:
+ * $1 - the number of revisions
+ * $2 - the number of distinct other users who made those revisions
+ See also:
+ * {{msg-mw|Diff-multi-sameuser}}
  * {{msg-mw|Diff-multi-manyusers}}",
  'diff-multi-manyusers' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and the intermediate revisions have been edited by more than 100 users.
  
@@@ -2822,7 -2779,8 +2830,8 @@@ Parameters
  * $1 - the number of revisions, will always be 101 or more
  * $2 - the number of users that were found, which was limited at 100
  See also:
- * {{msg-mw|Diff-multi}}",
+ * {{msg-mw|Diff-multi-sameuser}}
+ * {{msg-mw|Diff-multi-otherusers}}",
  'difference-missing-revision' => 'Text displayed when the requested revision does not exist using a diff link.
  
  Example: [{{canonicalurl:Project:News|diff=426850&oldid=99999999}} Diff with invalid revision#]
@@@ -2960,7 -2918,6 +2969,7 @@@ Parameters
  * \$1 - a link to the redirect to the page (so, \$1 is the page that the search result is redirected '''from''')",
  'search-section' => 'This text will be shown on the search result listing after the page title of a result if the search algorithm thinks that section is more relevant than the rest of the page. $1 is a section title.
  {{Identical|Section}}',
 +'search-file-match' => 'This text will be shown on the search result listing after the page title of a result if the search engine got search results from the contents of files, rather than the pages.',
  'search-suggest' => 'Used for "Did you mean" suggestions:
  * $1 - suggested link',
  'search-interwiki-caption' => 'Used in [[Special:Search]], when showing search results from other wikis.',
@@@ -3092,6 -3049,7 +3101,6 @@@ When changing this message, please als
  'searchresultshead' => 'Replaced by {{msg-mw|prefs-searchoptions}}, though may still be used in some extensions. DEPRECATED.
  
  {{Identical|Search}}',
 -'resultsperpage' => "Option on the 'Search options' tab of [[Special:Preferences]]",
  'stub-threshold' => 'Used in [[Special:Preferences]], tab "Misc".',
  'stub-threshold-disabled' => 'Used in [[Special:Preferences]].
  {{Identical|Disabled}}',
@@@ -3657,8 -3615,7 +3666,8 @@@ Preceded by legend example {{msg-mw|Rec
  'recentchanges-legend-heading' => 'Used as a heading for legend box on [[Special:RecentChanges]] and [[Special:Watchlist]].
  {{Identical|Legend}}',
  'recentchanges-legend-newpage' => 'Used as legend in [[Special:RecentChanges]]. Preceded by {{msg-mw|Recentchanges-label-newpage}}.',
 -'recentchanges-legend-plusminus' => 'A plus/minus sign with a number for the legend.',
 +'recentchanges-legend-plusminus' => '{{optional}}
 +A plus/minus sign with a number for the legend.',
  'rcnotefrom' => 'This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time.
  
  The corresponding message is {{msg-mw|Rclistfrom}} (without split of date and time, [[bugzilla:19104|Bug 19104]]).
@@@ -5041,7 -4998,7 +5050,7 @@@ See also
  See also:
  * {{msg-mw|Notargettitle|title}}
  * {{msg-mw|Notargettext|text}}',
 -'nopagetitle' => 'Used as title of [[Special:MovePage]], when the oldtitle does not exist.
 +'nopagetitle' => 'Used as title on special pages like [[Special:MovePage]] (when the oldtitle does not exist) or [[Special:PermaLink]].
  
  The text is {{msg-mw|nopagetext}}.
  
@@@ -5466,14 -5423,13 +5475,14 @@@ See also
  * {{msg-mw|Watchlist-details}}',
  'iteminvalidname' => 'Parameters:
  * $1 - item name',
 -'wlnote' => 'Used on [[Special:Watchlist]] when a maximum number of hours or days is specified.
 +'wlnote2' => 'Used on [[Special:Watchlist]] when a maximum number of hours or days is specified.
  
  Parameters:
 -* $1 - the number of changes shown
 -* $2 - the number of hours for which the changes are shown
 -* $3 - a date alone
 -* $4 - a time alone',
 +* $1 - the number of hours for which the changes are shown
 +* $2 - a date alone
 +* $3 - a time alone
 +See also:
 +* {{msg-mw|Wlnote}}',
  'wlshowlast' => 'Appears on [[Special:Watchlist]]. Parameters:
  * $1 - a choice of different numbers of hours ("1 | 2 | 6 | 12")
  * $2 - a choice of different numbers of days ("1 | 3 | 7")
@@@ -5662,7 -5618,7 +5671,7 @@@ See also
  * $1 - the upper limit of number of revisions
  See also:
  * {{msg-mw|Delete-toobig}}',
 -'deleting-backlinks-warning' => 'A warning shown when a page that is being deleted has links to it.',
 +'deleting-backlinks-warning' => 'A warning shown when a page that is being deleted has at least one link to it or is transcluded in at least one page.',
  
  # Rollback
  'rollback' => '{{Identical|Rollback}}',
@@@ -6644,8 -6600,7 +6653,8 @@@ See also
  * {{msg-mw|Ip range toolarge}}',
  'ipb_expiry_invalid' => 'Used as error message in [[Special:Block]].',
  'ipb_expiry_temp' => 'Warning message displayed on [[Special:BlockIP]] if the option "hide username" is selected but the expiry time is not infinite.',
 -'ipb_hide_invalid' => 'Used as error message in [[Special:Block]].',
 +'ipb_hide_invalid' => 'Used as error message in [[Special:Block]].
 +* $1 - Number of edits (Value of [[mw:Manual:$wgHideUserContribLimit]])',
  'ipb_already_blocked' => '{{Identical|$1 is already blocked}}',
  'ipb-needreblock' => 'Used in [[Special:Block]].
  * $1 - target username',
@@@ -7195,8 -7150,6 +7204,8 @@@ See also
  'allmessages-filter-submit' => 'Used on [[Special:Allmessages]].
  
  {{Identical|Go}}',
 +'allmessages-filter-translate' => 'Used on [[Special:Allmessages]]. Label for a link to translatewiki.net for a message to translate.
 +{{Identical|Translate}}',
  
  # Thumbnails
  'thumbnail-more' => '[[Image:Yes.png|thumb|This:]]
@@@ -7533,6 -7486,12 +7542,6 @@@ See also
  * {{msg-mw|Accesskey-pt-mycontris}}
  * {{msg-mw|Tooltip-pt-mycontris}}',
  'tooltip-pt-login' => "Tooltip shown when hovering over the link 'Log in / create account' in the upper right corner show on all pages while not logged in.",
 -'tooltip-pt-anonlogin' => 'Used as tooltip for link {{msg-mw|Login}} in your personal toolbox (upper right side).
 -
 -See also:
 -* {{msg-mw|Login}}
 -* {{msg-mw|Accesskey-pt-anonlogin}}
 -* {{msg-mw|Tooltip-pt-anonlogin}}',
  'tooltip-pt-logout' => 'Tooltip shown when hovering over the {{msg-mw|Logout}} link in your personal toolbox (upper right side).
  
  See also:
@@@ -8156,8 -8115,7 +8165,8 @@@ See also
  # Skin names
  'skinname-cologneblue' => '{{optional}}',
  'skinname-monobook' => '{{optional}}',
 -'skinname-modern' => '{{optional}}',
 +'skinname-modern' => '{{optional}}
 +{{Identical|Modern}}',
  'skinname-vector' => '{{optional}}',
  
  # Patrolling
@@@ -9610,9 -9568,7 +9619,9 @@@ 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.
 +'quotation-marks' => '{{optional}}
 +
 +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]].
  
  'expand_templates_generate_rawhtml' => 'Used as checkbox label.',
  'expand_templates_preview' => '{{Identical|Preview}}',
  
 +# Unknown messages
 +'createaccount-hook-aborted' => 'Placeholder message to return with API errors on account create; passes through the message from a hook {{notranslate}}',
 +'uploadinvalidxml' => 'Error message displayed when the uploaded file contains XML that cannot be properly parsed and checked.',
  );
@@@ -28,6 -28,7 +28,6 @@@ $wgMessageStructure = array
        ),
        'toggles' => array(
                'tog-underline',
 -              'tog-justify',
                'tog-hideminor',
                'tog-hidepatrolled',
                'tog-newpageshidepatrolled',
@@@ -36,7 -37,9 +36,7 @@@
                'tog-numberheadings',
                'tog-showtoolbar',
                'tog-editondblclick',
 -              'tog-editsection',
                'tog-editsectiononrightclick',
 -              'tog-showtoc',
                'tog-rememberpassword',
                'tog-watchcreations',
                'tog-watchdefault',
                'retypenew',
                'resetpass_submit',
                'changepassword-success',
 +              'changepassword-throttled',
                'resetpass_forbidden',
                'resetpass-no-info',
                'resetpass-submit-loggedin',
                'changeemail-password',
                'changeemail-submit',
                'changeemail-cancel',
 +              'changeemail-throttled'
        ),
        'resettokens' => array(
                'resettokens',
                'invalid-content-data',
                'content-not-allowed-here',
                'editwarning-warning',
 +              'editpage-notsupportedcontentformat-title',
 +              'editpage-notsupportedcontentformat-text',
        ),
        'contentmodels' => array(
                'content-model-wikitext',
                'showhideselectedversions',
                'editundo',
                'diff-empty',
-               'diff-multi',
+               'diff-multi-sameuser',
+               'diff-multi-otherusers',
                'diff-multi-manyusers',
                'difference-missing-revision',
        ),
                'search-result-score',
                'search-redirect',
                'search-section',
 +              'search-file-match',
                'search-suggest',
                'search-interwiki-caption',
                'search-interwiki-default',
                'watchmethod-list',
                'watchlistcontains',
                'iteminvalidname',
 -              'wlnote',
 +              'wlnote2',
                'wlshowlast',
                'watchlist-options',
        ),
                'allmessages-prefix',
                'allmessages-language',
                'allmessages-filter-submit',
 +              'allmessages-filter-translate',
        ),
        'thumbnails' => array(
                'thumbnail-more',
                'import-error-special',
                'import-error-invalid',
                'import-error-unserialize',
 +              'import-error-bad-location',
                'import-options-wrong',
                'import-rootpage-invalid',
                'import-rootpage-nosubpage',
                'accesskey-pt-watchlist',
                'accesskey-pt-mycontris',
                'accesskey-pt-login',
 -              'accesskey-pt-anonlogin',
                'accesskey-pt-logout',
                'accesskey-ca-talk',
                'accesskey-ca-edit',
                'tooltip-pt-watchlist',
                'tooltip-pt-mycontris',
                'tooltip-pt-login',
 -              'tooltip-pt-anonlogin',
                'tooltip-pt-logout',
                'tooltip-ca-talk',
                'tooltip-ca-edit',
                'version-software',
                'version-software-product',
                'version-software-version',
 +              'version-db-mysql-url',
 +              'version-db-mariadb-url',
 +              'version-db-percona-url',
 +              'version-db-postgres-url',
 +              'version-db-oracle-url',
 +              'version-db-sqlite-url',
 +              'version-db-mssql-url',
                'version-entrypoints',
                'version-entrypoints-header-entrypoint',
                'version-entrypoints-header-url',