Merge "RecentChanges, RecentChangesLinked, Watchlist: message when no items"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 1 Jul 2013 14:31:50 +0000 (14:31 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 1 Jul 2013 14:31:50 +0000 (14:31 +0000)
1  2 
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialWatchlist.php
languages/messages/MessagesEn.php
languages/messages/MessagesQqq.php
maintenance/language/messages.inc

@@@ -393,7 -393,7 +393,7 @@@ class SpecialRecentChanges extends Incl
  
                $fields = RecentChange::selectFields();
                // JOIN on watchlist for users
 -              if ( $uid ) {
 +              if ( $uid && $this->getUser()->isAllowed( 'viewmywatchlist' ) ) {
                        $tables[] = 'watchlist';
                        $fields[] = 'wl_user';
                        $fields[] = 'wl_notificationtimestamp';
                $counter = 1;
                $list = ChangesList::newFromContext( $this->getContext() );
  
+               if ( $rows->numRows() === 0 ) {
+                       $this->getOutput()->wrapWikiMsg(
+                               "<div class='mw-changeslist-empty'>\n$1\n</div>", 'recentchanges-noresult'
+                       );
+                       return;
+               }
                $s = $list->beginRecentChangesList();
                foreach ( $rows as $obj ) {
                        if ( $limit == 0 ) {
        }
  
        /**
-        * Send the text to be displayed after the options, for use in
-        * Recentchangeslinked
+        * Send the text to be displayed after the options, for use in subclasses.
         *
         * @param FormOptions $opts
         */
                }
  
                # Sort data for display and make sure it's unique after we've added user data.
 -              $wgRCLinkLimits[] = $options['limit'];
 -              $wgRCLinkDays[] = $options['days'];
 -              sort( $wgRCLinkLimits );
 -              sort( $wgRCLinkDays );
 -              $wgRCLinkLimits = array_unique( $wgRCLinkLimits );
 -              $wgRCLinkDays = array_unique( $wgRCLinkDays );
 +              $linkLimits = $wgRCLinkLimits;
 +              $linkLimits[] = $options['limit'];
 +              sort( $linkLimits );
 +              $linkLimits = array_unique( $linkLimits );
 +
 +              $linkDays = $wgRCLinkDays;
 +              $linkDays[] = $options['days'];
 +              sort( $linkDays );
 +              $linkDays = array_unique( $linkDays );
  
                // limit links
                $cl = array();
 -              foreach ( $wgRCLinkLimits as $value ) {
 +              foreach ( $linkLimits as $value ) {
                        $cl[] = $this->makeOptionsLink( $lang->formatNum( $value ),
                                array( 'limit' => $value ), $nondefaults, $value == $options['limit'] );
                }
  
                // day links, reset 'from' to none
                $dl = array();
 -              foreach ( $wgRCLinkDays as $value ) {
 +              foreach ( $linkDays as $value ) {
                        $dl[] = $this->makeOptionsLink( $lang->formatNum( $value ),
                                array( 'days' => $value, 'from' => '' ), $nondefaults, $value == $options['days'] );
                }
@@@ -72,7 -72,7 +72,7 @@@ class SpecialRecentchangeslinked extend
                $outputPage = $this->getOutput();
                $title = Title::newFromURL( $target );
                if ( !$title || $title->getInterwiki() != '' ) {
 -                      $outputPage->wrapWikiMsg( "<div class=\"errorbox\">\n$1\n</div><br style=\"clear: both\" />", 'allpagesbadtitle' );
 +                      $outputPage->wrapWikiMsg( "<div class=\"errorbox\">\n$1\n</div>", 'allpagesbadtitle' );
                        return false;
                }
  
@@@ -99,7 -99,7 +99,7 @@@
  
                // left join with watchlist table to highlight watched rows
                $uid = $this->getUser()->getId();
 -              if ( $uid ) {
 +              if ( $uid && $this->getUser()->isAllowed( 'viewmywatchlist' ) ) {
                        $tables[] = 'watchlist';
                        $select[] = 'wl_user';
                        $join_conds['watchlist'] = array( 'LEFT JOIN', array(
                        $this->getOutput()->addBacklinkSubtitle( $target );
                }
        }
-       function setBottomText( FormOptions $opts ) {
-               if ( isset( $this->mResultEmpty ) && $this->mResultEmpty ) {
-                       $this->getOutput()->addWikiMsg( 'recentchangeslinked-noresult' );
-               }
-       }
  }
@@@ -26,8 -26,8 +26,8 @@@ class SpecialWatchlist extends SpecialP
        /**
         * Constructor
         */
 -      public function __construct( $page = 'Watchlist' ) {
 -              parent::__construct( $page );
 +      public function __construct( $page = 'Watchlist', $restriction = 'viewmywatchlist' ) {
 +              parent::__construct( $page, $restriction );
        }
  
        /**
@@@ -54,9 -54,6 +54,9 @@@
                        return;
                }
  
 +              // Check permissions
 +              $this->checkPermissions();
 +
                // Add feed links
                $wlToken = $user->getOption( 'watchlisttoken' );
                if ( !$wlToken ) {
  
                # If there's nothing to show, stop here
                if ( $numRows == 0 ) {
-                       $output->addWikiMsg( 'watchnochange' );
+                       $output->wrapWikiMsg(
+                               "<div class='mw-changeslist-empty'>\n$1\n</div>", 'recentchanges-noresult'
+                       );
                        return;
                }
  
@@@ -274,7 -274,6 +274,7 @@@ $magicWords = array
        'img_center'              => array( 1,    'center', 'centre' ),
        'img_framed'              => array( 1,    'framed', 'enframed', 'frame' ),
        'img_frameless'           => array( 1,    'frameless' ),
 +      'img_lang'                => array( 1,    'lang=$1' ),
        'img_page'                => array( 1,    'page=$1', 'page $1' ),
        'img_upright'             => array( 1,    'upright', 'upright=$1', 'upright $1' ),
        'img_border'              => array( 1,    'border' ),
@@@ -703,56 -702,56 +703,56 @@@ future releases. Also note that since e
  'editfont-serif'     => 'Serif font',
  
  # Dates
 -'sunday'        => 'Sunday',
 -'monday'        => 'Monday',
 -'tuesday'       => 'Tuesday',
 -'wednesday'     => 'Wednesday',
 -'thursday'      => 'Thursday',
 -'friday'        => 'Friday',
 -'saturday'      => 'Saturday',
 -'sun'           => 'Sun',
 -'mon'           => 'Mon',
 -'tue'           => 'Tue',
 -'wed'           => 'Wed',
 -'thu'           => 'Thu',
 -'fri'           => 'Fri',
 -'sat'           => 'Sat',
 -'january'       => 'January',
 -'february'      => 'February',
 -'march'         => 'March',
 -'april'         => 'April',
 -'may_long'      => 'May',
 -'june'          => 'June',
 -'july'          => 'July',
 -'august'        => 'August',
 -'september'     => 'September',
 -'october'       => 'October',
 -'november'      => 'November',
 -'december'      => 'December',
 -'january-gen'   => 'January',
 -'february-gen'  => 'February',
 -'march-gen'     => 'March',
 -'april-gen'     => 'April',
 -'may-gen'       => 'May',
 -'june-gen'      => 'June',
 -'july-gen'      => 'July',
 -'august-gen'    => 'August',
 -'september-gen' => 'September',
 -'october-gen'   => 'October',
 -'november-gen'  => 'November',
 -'december-gen'  => 'December',
 -'jan'           => 'Jan',
 -'feb'           => 'Feb',
 -'mar'           => 'Mar',
 -'apr'           => 'Apr',
 -'may'           => 'May',
 -'jun'           => 'Jun',
 -'jul'           => 'Jul',
 -'aug'           => 'Aug',
 -'sep'           => 'Sep',
 -'oct'           => 'Oct',
 -'nov'           => 'Nov',
 -'dec'           => 'Dec',
 +'sunday'         => 'Sunday',
 +'monday'         => 'Monday',
 +'tuesday'        => 'Tuesday',
 +'wednesday'      => 'Wednesday',
 +'thursday'       => 'Thursday',
 +'friday'         => 'Friday',
 +'saturday'       => 'Saturday',
 +'sun'            => 'Sun',
 +'mon'            => 'Mon',
 +'tue'            => 'Tue',
 +'wed'            => 'Wed',
 +'thu'            => 'Thu',
 +'fri'            => 'Fri',
 +'sat'            => 'Sat',
 +'january'        => 'January',
 +'february'       => 'February',
 +'march'          => 'March',
 +'april'          => 'April',
 +'may_long'       => 'May',
 +'june'           => 'June',
 +'july'           => 'July',
 +'august'         => 'August',
 +'september'      => 'September',
 +'october'        => 'October',
 +'november'       => 'November',
 +'december'       => 'December',
 +'january-gen'    => 'January',
 +'february-gen'   => 'February',
 +'march-gen'      => 'March',
 +'april-gen'      => 'April',
 +'may-gen'        => 'May',
 +'june-gen'       => 'June',
 +'july-gen'       => 'July',
 +'august-gen'     => 'August',
 +'september-gen'  => 'September',
 +'october-gen'    => 'October',
 +'november-gen'   => 'November',
 +'december-gen'   => 'December',
 +'jan'            => 'Jan',
 +'feb'            => 'Feb',
 +'mar'            => 'Mar',
 +'apr'            => 'Apr',
 +'may'            => 'May',
 +'jun'            => 'Jun',
 +'jul'            => 'Jul',
 +'aug'            => 'Aug',
 +'sep'            => 'Sep',
 +'oct'            => 'Oct',
 +'nov'            => 'Nov',
 +'dec'            => 'Dec',
  'january-date'   => 'January $1',
  'february-date'  => 'February $1',
  'march-date'     => 'March $1',
  'create-this-page'   => 'Create this page',
  'delete'             => 'Delete',
  'deletethispage'     => 'Delete this page',
 +'undeletethispage'   => 'Undelete this page',
  'undelete_short'     => 'Undelete {{PLURAL:$1|one edit|$1 edits}}',
  'viewdeleted_short'  => 'View {{PLURAL:$1|one deleted edit|$1 deleted edits}}',
  'protect'            => 'Protect',
@@@ -908,7 -906,7 +908,7 @@@ $1'
  'disclaimers'          => 'Disclaimers',
  'disclaimerpage'       => 'Project:General disclaimer',
  'edithelp'             => 'Editing help',
 -'edithelppage'         => 'Help:Editing',
 +'edithelppage'         => '//www.mediawiki.org/wiki/Special:MyLanguage/Help:Editing_pages', # do not translate or duplicate this message to other languages
  'helppage'             => 'Help:Contents',
  'mainpage'             => 'Main Page',
  'mainpage-description' => 'Main page',
@@@ -1070,8 -1068,6 +1070,8 @@@ $2'
  'namespaceprotected'            => "You do not have permission to edit pages in the '''$1''' 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.',
 +'mycustomjsprotected'           => 'You do not have permission to edit this JavaScript page.',
  'ns-specialprotected'           => 'Special pages cannot be edited.',
  'titleprotected'                => 'This title has been protected from creation by [[User:$1|$1]].
  The reason given is "\'\'$2\'\'".',
@@@ -1099,7 -1095,7 +1099,7 @@@ Do not forget to change your [[Special:
  'yourname'                        => 'Username:',
  'userlogin-yourname'              => 'Username',
  'userlogin-yourname-ph'           => 'Enter your username',
 -'createacct-helpusername'      => '', # do not translate or duplicate this message to other languages
 +'createacct-helpusername'         => '', # do not translate or duplicate this message to other languages
  'yourpassword'                    => 'Password:',
  'userlogin-yourpassword'          => 'Password',
  'userlogin-yourpassword-ph'       => 'Enter your password',
@@@ -1229,7 -1225,7 +1229,7 @@@ Please enter a well-formatted address o
  'cannotchangeemail'               => 'Account email addresses cannot be changed on this wiki.',
  'emaildisabled'                   => 'This site cannot send emails.',
  'accountcreated'                  => 'Account created',
 -'accountcreatedtext'              => 'The user account for $1 has been created.',
 +'accountcreatedtext'              => 'The user account for [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) has been created.',
  'createaccount-title'             => 'Account creation for {{SITENAME}}',
  'createaccount-text'              => 'Someone created an account for your email address on {{SITENAME}} ($4) named "$2", with password "$3".
  You should log in and change your password now.
@@@ -1279,11 -1275,11 +1279,11 @@@ You may have already successfully chang
  
  # Special:PasswordReset
  'passwordreset'                    => 'Reset password',
 -'passwordreset-text'               => 'Complete this form to reset your password.',
 +'passwordreset-text-one'           => 'Complete this form to reset your password.',
 +'passwordreset-text-many'          => '{{PLURAL:$1|Enter one of the pieces of data to reset your password.}}',
  'passwordreset-legend'             => 'Reset password',
  'passwordreset-disabled'           => 'Password resets have been disabled on this wiki.',
  'passwordreset-emaildisabled'      => 'Email features have been disabled on this wiki.',
 -'passwordreset-pretext'            => '{{PLURAL:$1||Enter one of the pieces of data below}}',
  'passwordreset-username'           => 'Username:',
  'passwordreset-domain'             => 'Domain:',
  'passwordreset-capture'            => 'View the resulting email?',
@@@ -1546,7 -1542,6 +1546,7 @@@ It gave no explanation.'
  It appears to have been deleted.',
  'edit-conflict'                    => 'Edit conflict.',
  'edit-no-change'                   => 'Your edit was ignored because no change was made to the text.',
 +'postedit-confirmation'            => 'Your edit was saved.',
  'edit-already-exists'              => 'Could not create a new page.
  It already exists.',
  'addsection-preload'               => '', # do not translate or duplicate this message to other languages
@@@ -1592,7 -1587,6 +1592,7 @@@ Please check the comparison below to ve
  'undo-failure' => 'The edit could not be undone due to conflicting intermediate edits.',
  'undo-norev'   => 'The edit could not be undone because it does not exist or was deleted.',
  'undo-summary' => 'Undo revision $1 by [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]])',
 +'undo-summary-username-hidden' => 'Undo revision $1 by a hidden user',
  
  # Account creation failure
  'cantcreateaccounttitle' => 'Cannot create account',
@@@ -1808,7 -1802,9 +1808,7 @@@ Details can be found in the [{{fullurl:
  'searchmenu-exists'                => "'''There is a page named \"[[:\$1]]\" on this wiki.'''",
  'searchmenu-new'                   => "'''Create the page \"[[:\$1]]\" on this wiki!'''",
  'searchmenu-new-nocreate'          => '', # do not translate or duplicate this message to other languages
 -'searchhelp-url'                   => 'Help:Contents',
  'searchmenu-prefix'                => '[[Special:PrefixIndex/$1|Browse pages with this prefix]]',
 -'searchmenu-help'                  => '[[{{MediaWiki:Searchhelp-url}}|{{int:help}}]]?', # do not translate or duplicate this message to other languages
  'searchprofile-articles'           => 'Content pages',
  'searchprofile-project'            => 'Help and Project pages',
  'searchprofile-images'             => 'Multimedia',
@@@ -1904,6 -1900,7 +1904,6 @@@ Note that their indexes of {{SITENAME}
  'resetprefs'                    => 'Clear unsaved changes',
  'restoreprefs'                  => 'Restore all default settings',
  'prefs-editing'                 => 'Editing',
 -'prefs-edit-boxsize'            => 'Size of the edit window.',
  'rows'                          => 'Rows:',
  'columns'                       => 'Columns:',
  'searchresultshead'             => 'Search',
@@@ -1947,6 -1944,7 +1947,6 @@@ Here's a randomly-generated value you c
  'prefs-reset-intro'             => 'You can use this page to reset your preferences to the site defaults.
  This cannot be undone.',
  'prefs-emailconfirm-label'      => 'Email confirmation:',
 -'prefs-textboxsize'             => 'Size of editing window',
  'youremail'                     => 'Email:',
  'username'                      => '{{GENDER:$1|Username}}:',
  'uid'                           => '{{GENDER:$1|User}} ID:',
@@@ -1982,9 -1980,7 +1982,9 @@@ Your email address is not revealed whe
  'prefs-signature'               => 'Signature',
  'prefs-dateformat'              => 'Date format',
  'prefs-timeoffset'              => 'Time offset',
 -'prefs-advancedediting'         => 'Advanced options',
 +'prefs-advancedediting'         => 'General',
 +'prefs-editor'                  => 'Editor',
 +'prefs-preview'                 => 'Preview',
  'prefs-advancedrc'              => 'Advanced options',
  'prefs-advancedrendering'       => 'Advanced options',
  'prefs-advancedsearchoptions'   => 'Advanced options',
  'userrights-unchangeable-col'    => 'Groups you cannot change',
  'userrights-irreversible-marker' => '$1*', # only translate this message to other languages if you have to change it
  'userrights-conflict'            => 'User rights conflict! Please apply your changes again.',
 +'userrights-removed-self'        => 'You successfully removed your own rights. As such, you are no longer able to access this page.',
  
  # Groups
  'group'               => 'Group:',
  'right-editusercssjs'         => "Edit other users' CSS and JavaScript files",
  'right-editusercss'           => "Edit other users' CSS files",
  'right-edituserjs'            => "Edit other users' JavaScript files",
 +'right-editmyusercss'         => 'Edit your own user CSS files',
 +'right-editmyuserjs'          => 'Edit your own user JavaScript files',
 +'right-viewmywatchlist'       => 'View your own watchlist',
 +'right-editmywatchlist'       => 'Edit your own watchlist. Note some actions will still add pages even without this right.',
  'right-rollback'              => 'Quickly rollback the edits of the last user who edited a particular page',
  'right-markbotedits'          => 'Mark rolled-back edits as bot edits',
  'right-noratelimit'           => 'Not be affected by rate limits',
  'action-userrights-interwiki' => 'edit user rights of users on other wikis',
  'action-siteadmin'            => 'lock or unlock the database',
  'action-sendemail'            => 'send emails',
 +'action-viewmywatchlist'      => 'view your watchlist',
 +'action-editmywatchlist'      => 'edit your watchlist',
  
  # Recent changes
  'nchanges'                          => '$1 {{PLURAL:$1|change|changes}}',
  'recentchanges-legend'              => 'Recent changes options',
  'recentchanges-summary'             => 'Track the most recent changes to the wiki on this page.',
  'recentchangestext'                 => '-', # do not translate or duplicate this message to other languages
+ 'recentchanges-noresult'            => 'No changes during the given period matching these criteria.',
  'recentchanges-feed-description'    => 'Track the most recent changes to the wiki in this feed.',
  'recentchanges-label-newpage'       => 'This edit created a new page',
  'recentchanges-label-minor'         => 'This is a minor edit',
  'recentchangeslinked-feed'     => 'Related changes',
  'recentchangeslinked-toolbox'  => 'Related changes',
  'recentchangeslinked-title'    => 'Changes related to "$1"',
- 'recentchangeslinked-noresult' => 'No changes on linked pages during the given period.',
  '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'''.",
  'recentchangeslinked-page'     => 'Page name:',
  'reuploaddesc'                => 'Cancel upload and return to the upload form',
  'upload-tryagain'             => 'Submit modified file description',
  'uploadnologin'               => 'Not logged in',
 -'uploadnologintext'           => 'You must be [[Special:UserLogin|logged in]] to upload files.',
 +'uploadnologintext'           => 'You must $1 to upload files.',
  'upload_directory_missing'    => 'The upload directory ($1) is missing and could not be created by the webserver.',
  'upload_directory_read_only'  => 'The upload directory ($1) is not writable by the webserver.',
  'uploaderror'                 => 'Upload error',
@@@ -2932,7 -2921,6 +2932,6 @@@ Future changes to this page and its ass
  'unwatchthispage'      => 'Stop watching',
  'notanarticle'         => 'Not a content page',
  'notvisiblerev'        => 'The last revision by a different user has been deleted',
- 'watchnochange'        => 'None of your watched items were edited in the time period displayed.',
  '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'''.",
@@@ -3195,7 -3183,7 +3194,7 @@@ $1'
  'mycontris'             => 'Contributions',
  'contribsub2'           => 'For $1 ($2)',
  'nocontribs'            => 'No changes were found matching these criteria.',
 -'uctop'                 => '(top)',
 +'uctop'                 => '(current)',
  'month'                 => 'From month (and earlier):',
  'year'                  => 'From year (and earlier):',
  
@@@ -4600,7 -4588,7 +4599,7 @@@ Please confirm that you really want to 
  'semicolon-separator' => ';&#32;', # only translate this message to other languages if you have to change it
  'comma-separator'     => ',&#32;', # only translate this message to other languages if you have to change it
  'colon-separator'     => ':&#32;', # only translate this message to other languages if you have to change it
 -'autocomment-prefix'  => '-&#32;', # only translate this message to other languages if you have to change it
 +'autocomment-prefix'  => '', # only translate this message to other languages if you have to change it
  'pipe-separator'      => '&#32;|&#32;', # only translate this message to other languages if you have to change it
  'word-separator'      => '&#32;', # only translate this message to other languages if you have to change it
  'ellipsis'            => '...', # only translate this message to other languages if you have to change it
@@@ -8,7 -8,6 +8,7 @@@
   * @file
   *
   * @author *Surak*
 + * @author 127.0.0.1
   * @author Abanima
   * @author Ahonc
   * @author Aleator
@@@ -67,7 -66,6 +67,7 @@@
   * @author Leinad
   * @author Lejonel
   * @author Li-sung
 + * @author Liangent
   * @author Lloffiwr
   * @author MF-Warburg
   * @author Malafaya
@@@ -420,12 -418,11 +420,12 @@@ This can also appear in the credits pag
  {{Identical|Find}}',
  'qbbrowse' => '{{Identical|Browse}}',
  'qbedit' => '{{Identical|Edit}}',
 +'qbpageoptions' => '{{Identical|This page}}',
  'qbmyoptions' => 'Heading in the Cologne Blue skin user menu containing links to user (talk) page, preferences, watchlist, etc.
  {{Identical|My pages}}',
  'qbspecialpages' => '{{Identical|Special page}}',
  'faq' => "FAQ is short for ''frequently asked questions''.",
 -'faqpage' => "FAQ is short for ''frequently asked questions''. This page is only linked on some of the old skins, not in Monobook or Modern.
 +'faqpage' => "FAQ is short for ''frequently asked questions''. This page is only linked in CologneBlue (an old skin), not in Monobook or Vector.
  
  {{doc-important|Do not translate <tt>Project:</tt> part.}}",
  
  'vector-action-undelete' => 'Tab at top of page, in vector skin.
  {{Identical|Undelete}}',
  'vector-action-unprotect' => 'Tab at top of page, in vector skin.
 -
 -{{Identical|Unprotect}}',
 +{{Identical|Change protection}}',
  'vector-simplesearch-preference' => 'Preference for enhanced search suggestion in the Vector skin.',
  'vector-view-create' => 'Tab label in the Vector skin. See for example {{canonicalurl:Foo|useskin=vector}}
  {{Identical|Create}}',
  {{Identical|Edit}}',
  'vector-view-history' => 'Tab label in the Vector skin. See for example {{canonicalurl:Main_Page|useskin=vector}}
  {{Identical|View history}}',
 -'vector-view-view' => 'Tab label in the Vector skin (verb). See for example {{canonicalurl:Main_Page|useskin=vector}}',
 +'vector-view-view' => 'Tab label in the Vector skin (verb). See for example {{canonicalurl:Main_Page|useskin=vector}}.
 +{{Identical|Read}}',
  'vector-view-viewsource' => 'Tab label in the Vector skin.
  {{Identical|View source}}',
  'actions' => '{{Identical|Action}}',
@@@ -537,7 -534,6 +537,7 @@@ See also
  {{Identical|Delete}}',
  'deletethispage' => 'In the Cologne Blue skin this is the text for link to delete the page in admin view, at the bottom of the page.
  {{Identical|Delete this page}}',
 +'undeletethispage' => 'In the Cologne Blue skin this is the text for link to undelete the page in admin view, at the bottom of the page.',
  'undelete_short' => "It is tab label. It's really can be named ''nstab-undelete''.",
  'viewdeleted_short' => 'Tab label for the undelete button when the user has permission to view the deleted history but not undelete.',
  'protect' => 'Name of protect tab displayed for admins. Should be in the infinitive mood.
@@@ -557,7 -553,7 +557,7 @@@ See also
  * {{msg-mw|Unprotect}}
  * {{msg-mw|Accesskey-ca-unprotect}}
  * {{msg-mw|Tooltip-ca-unprotect}}
 -{{Identical|Unprotect}}',
 +{{Identical|Change protection}}',
  'unprotectthispage' => 'In this Cologne Blue skin this is the anchor text for the link to unprotect the page in admin view, at the bottom of the page.
  {{Identical|Unprotect this page}}',
  'newpage' => '{{Identical|New page}}',
@@@ -654,11 -650,12 +654,11 @@@ See also
  * {{msg-mw|Tooltip-n-currentevents}}',
  'currentevents-url' => "Target page of ''CurrentEvents'' in the sidebar. See also {{msg-mw|currentevents}}.
  {{doc-important|Do not translate the \"<tt>Project:</tt>\" part.}}",
 -'disclaimers' => 'Used as display name for the link to [[{{MediaWiki:Disclaimerpage}}]] shown at the bottom of every page on the wiki. Example [[{{MediaWiki:Disclaimerpage}}|{{MediaWiki:Disclaimers}}]].',
 +'disclaimers' => 'Used as display name for the link to [[{{MediaWiki:Disclaimerpage}}]] shown at the bottom of every page on the wiki. Example [[{{MediaWiki:Disclaimerpage}}|{{MediaWiki:Disclaimers}}]].
 +{{Identical|Disclaimer}}',
  'disclaimerpage' => 'Used as page for that contains the site disclaimer. Used at the bottom of every page on the wiki. Example: [[{{MediaWiki:Disclaimerpage}}|{{MediaWiki:Disclaimers}}]].
  {{doc-important|Do not change the "<tt>Project:</tt>" part.}}',
  'edithelp' => 'This is the text that appears on the editing help link that is near the bottom of the editing page',
 -'edithelppage' => 'The help page displayed when a user clicks on editing help link which is present on the right of Show changes button.
 -{{doc-important|Do not change the "<tt>Help:</tt>" part.}}',
  'helppage' => 'The link destination used by default in the sidebar, and in {{msg-mw|noarticletext}}.
  {{doc-important|Do not change the "<tt>Help:</tt>" part.}}
  {{Identical|HelpContent}}',
@@@ -797,7 -794,6 +797,7 @@@ See also
  'restorelink' => "This text is always displayed in conjunction with the {{msg-mw|thisisdeleted}} message (View or restore $1?). The user will see
  View or restore <nowiki>{{PLURAL:$1|one deleted edit|$1 deleted edits}}</nowiki>?    i.e ''View or restore one deleted edit?''     or
  ''View or restore n deleted edits?''",
 +'feedlinks' => '{{Identical|Feed}}',
  'feed-invalid' => 'Result of check whether feed type is valid or not.',
  'feed-unavailable' => 'This message is displayed when a user tries to use an RSS or Atom feed on a wiki where such feeds have been disabled.',
  'site-rss-feed' => "Used in the HTML header of a wiki's RSS feed.
@@@ -836,7 -832,7 +836,7 @@@ See also
  * {{msg-mw|Accesskey-ca-nstab-main}}
  * {{msg-mw|Tooltip-ca-nstab-main}}
  {{Identical|Page}}',
 -'nstab-user' => 'The name for the tab of the user namespace. Example: [[User:Example]]. It is possible to use <nowiki>{{GENDER:{{BASEPAGENAME}}|male form|female form}}</nowiki> if needed.
 +'nstab-user' => 'The name for the tab of the user namespace. Example: [[User:Example]]. It is possible to use <nowiki>{{GENDER:{{ROOTPAGENAME}}|male form|female form}}</nowiki> if needed.
  
  See also:
  * {{msg-mw|Nstab-user}}
@@@ -1026,8 -1022,6 +1026,8 @@@ See also {{msg-mw|protectedinterface}}.
  'namespaceprotected' => '* $1 - namespace name',
  'customcssprotected' => 'Used as error message.',
  'customjsprotected' => 'Used as error message.',
 +'mycustomcssprotected' => 'Used as error message.',
 +'mycustomjsprotected' => 'Used as error message.',
  'ns-specialprotected' => 'Error message displayed when trying to edit a page in the Special namespace',
  'titleprotected' => 'Use $1 for GENDER.',
  'filereadonlyerror' => 'Parameters:
@@@ -1058,48 -1052,48 +1058,48 @@@ Parameters
  * $1 - an URL to [[Special:Userlogin]] containing <code>returnto</code> and <code>returntoquery</code> parameters',
  'welcomeuser' => 'Text for a welcome heading that users see after registering a user account. $1 is the username of the new user. See [[bugzilla:42215]]',
  'welcomecreation-msg' => 'A welcome message users see after registering a user account, following a welcomeuser heading. $1 is the username of the new user. Replaces welcomecreation in 1.21wmf5,see [[bugzilla:42215]]',
 -'yourname' => "{{doc-important|<nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is '''NOT''' supported.}}
 -In user preferences.
 -{{Identical|Username}}",
 -'userlogin-yourname' => 'In new vertical user login & create account forms, label for username field.
 -
 -See examples: [{{canonicalurl:Special:UserLogin|useNew=1}} Special:UserLogin?useNew=1] and [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]
 +'yourname' => 'Since 1.22 no longer used in core, but used by some extensions.
  {{Identical|Username}}',
 -'userlogin-yourname-ph' => 'Placeholder text in new userlogin/create account form field.
 +'userlogin-yourname' => "In user login & create account forms, label for username field.
 +{{doc-important|<nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is '''NOT''' supported.}}
  
 -See example: [{{canonicalurl:Special:UserLogin|useNew=1}} Special:UserLogin?useNew=1] and [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]',
 +See examples: [{{canonicalurl:Special:UserLogin}} Special:UserLogin] and [{{canonicalurl:Special:UserLogin}} Special:UserLogin]
 +{{Identical|Username}}",
 +'userlogin-yourname-ph' => 'Placeholder text in login & create account form field.
 +
 +See example: [{{canonicalurl:Special:UserLogin}} Special:UserLogin] and [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]',
  'yourpassword' => 'In user preferences
  
  {{Identical|Password}}',
 -'userlogin-yourpassword' => 'In new vertical user login & create account forms, label for password field.
 +'userlogin-yourpassword' => 'In login & create account forms, label for password field.
  
 -See examples: [{{canonicalurl:Special:UserLogin|useNew=1}} Special:UserLogin?useNew=1] and [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]
 +See examples: [{{canonicalurl:Special:UserLogin}} Special:UserLogin] and [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]
  {{Identical|Password}}',
 -'userlogin-yourpassword-ph' => 'Placeholder text in new userlogin form for password field.
 +'userlogin-yourpassword-ph' => 'Placeholder text in login form for password field.
  
 -See examples: [{{canonicalurl:Special:UserLogin|useNew=1}} Special:UserLogin?useNew=1] and [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]
 +See examples: [{{canonicalurl:Special:UserLogin}} Special:UserLogin] and [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]
  {{Identical|Enter password}}',
 -'createacct-yourpassword-ph' => 'Placeholder text in new create account form for password field.
 +'createacct-yourpassword-ph' => 'Placeholder text in create account form for password field.
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]
  {{Identical|Enter password}}',
 -'yourpasswordagain' => 'In user preferences',
 -'createacct-yourpasswordagain' => 'In new create account form, label for field to re-enter password
 +'yourpasswordagain' => 'Since 1.22 no longer used in core, but may be used by some extensions. DEPRECATED',
 +'createacct-yourpasswordagain' => 'In create account form, label for field to re-enter password
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]
  {{Identical|Confirm password}}',
 -'createacct-yourpasswordagain-ph' => 'Placeholder text in new create account form for re-enter password field.
 +'createacct-yourpasswordagain-ph' => 'Placeholder text in create account form for re-enter password field.
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]',
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]',
  'remembermypassword' => 'A check box in [[Special:UserLogin]]
  
  {{Identical|Remember my login on this computer}}',
  'userlogin-remembermypassword' => 'The text for a check box in the new-style [[Special:UserLogin]].
  
 -See example: [{{canonicalurl:Special:UserLogin|useNew=1}} Special:UserLogin?useNew=1]',
 +See example: [{{canonicalurl:Special:UserLogin}} Special:UserLogin]',
  'userlogin-signwithsecure' => 'Text of link to HTTPS login form.
  
 -See example: [{{canonicalurl:Special:UserLogin|useNew=1}} Special:UserLogin?useNew=1]',
 +See example: [{{canonicalurl:Special:UserLogin}} Special:UserLogin]',
  'securelogin-stick-https' => 'Used as label for checkbox.',
  'yourdomainname' => 'Used as label for listbox.',
  'password-change-forbidden' => 'Error message shown when an external authentication source does not allow the password to be changed.',
@@@ -1114,10 -1108,9 +1114,10 @@@ See also
  'nav-login-createaccount' => "Shown to anonymous users in the upper right corner of the page. When you can't create an account, the message {{msg-mw|login}} is shown.
  {{Identical|Log in / create account}}",
  'loginprompt' => 'A small notice in the log in form.',
 -'userlogin' => 'Name of special page [[Special:UserLogin]] where a user can log in or click to create a user account.
 +'userlogin' => 'Since 1.22 no longer used in core, but may still be used by extensions. DEPRECATED
 +
  {{Identical|Log in / create account}}',
 -'userloginnocreate' => 'A variant of {{msg-mw|Userlogin}} when the user is not allowed to create a new account.
 +'userloginnocreate' => 'Since 1.22 no longer used in core, but may still be used by some extensions. A variant of {{msg-mw|Userlogin}} when the user is not allowed to create a new account. DEPRECATED
  
  {{Identical|Log in}}',
  'logout' => 'Used as link text in your personal toolbox (upper right side).
@@@ -1133,33 -1126,33 +1133,33 @@@ See also
  'notloggedin' => 'This message is displayed in the standard skin when not logged in. The message is placed above the login link in the top right corner of pages.
  
  {{Identical|Not logged in}}',
 -'userlogin-noaccount' => 'In the new-style [[Special:Userlogin]] form, this is the text prior to button inviting user to join project.
 +'userlogin-noaccount' => 'In the [[Special:Userlogin]] form, this is the text prior to button inviting user to join project.
  
 -See example: [{{canonicalurl:Special:UserLogin|useNew=1}} Special:UserLogin?useNew=1]
 +See example: [{{canonicalurl:Special:UserLogin}} Special:UserLogin]
  {{Identical|Do not have an account}}',
  'userlogin-joinproject' => 'Text of button inviting user to create an account.
  
 -See example: [{{canonicalurl:Special:UserLogin|useNew=1}} Special:UserLogin?useNew=1]',
 -'nologin' => 'A message shown in the log in form. Parameters:
 +See example: [{{canonicalurl:Special:UserLogin}} Special:UserLogin]',
 +'nologin' => 'Since 1.22 no longer used in core, but may be used by some extensions. DEPRECATED. Parameters:
  * $1 - a link to the account creation form, and the text of it is {{msg-mw|Nologinlink}}
  {{Identical|Do not have an account}}',
 -'nologinlink' => 'Text of the link to the account creation form. Before that link, the message {{msg-mw|Nologin}} appears.
 +'nologinlink' => 'Since 1.22 no longer used in core, but may be used by some extensions. DEPRECATED.
  {{Identical|Create an account}}',
 -'createaccount' => '{{doc-special|CreateAccount}}
 -The special page enables users to register a new account.
 -
 -Used on the submit button in the form where you register a new account.
 +'createaccount' => 'Used on the top of the page for logged out users, where it appears next to {{msg-mw|login}}, so consider making them similar.
  
 -It is also used on the top of the page for logged out users, where it appears next to {{msg-mw|login}}, so consider making them similar.
 +It is also used on the submit button in the form/special page where you register a new account.
 +{{doc-special|CreateAccount}}
  {{Identical|Create account}}',
 -'gotaccount' => 'A message shown in the account creation form.
 +'gotaccount' => 'Since 1.22 no longer used in core, but may be used by some extensions. DEPRECATED. Parameter:
  * $1 - a link to the log in form, and the text of it is {{msg-mw|Gotaccountlink}}',
 -'gotaccountlink' => 'Text of the link to the log in form. Before that link, the message {{msg-mw|Gotaccount}} appears.
 +'gotaccountlink' => 'Since 1.22 no longer used in core, but may be used by some extensions. DEPRECATED.
  {{Identical|Log in}}',
 -'userlogin-resetlink' => 'Used on the login page.',
 -'userlogin-resetpassword-link' => 'Text of link to [[Special:PasswordReset]] on new vertical-layout create account form.
 +'userlogin-resetlink' => 'Since 1.22 no longer used in core, but may be used by some extensions. DEPRECATED.',
 +'userlogin-resetpassword-link' => 'Used as link text on login form.
  
 -See example: [{{canonicalurl:Special:UserLogin|useNew=1}} Special:UserLogin?useNew=1]
 +The link points to the local [[Special:PasswordReset]].
 +
 +See example: [{{canonicalurl:Special:UserLogin}} Special:UserLogin]
  
  userlogin-resetpassword-link may have to be shorter than the old {{msg-mw|userlogin-resetlink}}',
  'helplogin-url' => '{{doc-important|Do not translate the namespace name <code>Help</code>.}}
@@@ -1169,13 -1162,13 +1169,13 @@@ Used as a link target in the message {{
  'userlogin-helplink' => '{{doc-important|Do not change <code><nowiki>{{MediaWiki:helplogin-url}}</nowiki></code>.}}
  Wikitext linking to login help.
  
 -See example: [{{canonicalurl:Special:UserLogin|useNew=1}} Special:UserLogin?useNew=1]
 +See example: [{{canonicalurl:Special:UserLogin}} Special:UserLogin]
  
  See also:
  * {{msg-mw|Helplogin-url}}',
  'createacct-join' => 'Subheading of vertical-layout create account form encouraging user to join the wiki.
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]',
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]',
  'createacct-emailrequired' => 'Label in vertical-layout create account form for email field when it is required.
  
  See also:
  {{Identical|E-mail address}}',
  'createacct-emailoptional' => 'Label in vertical-layout create account form for email field when it is optional.
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]
  
  See also:
  * {{msg-mw|Createacct-emailrequired}}',
  'createacct-email-ph' => 'Placeholder in vertical-layout create account form for email field.
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]',
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]',
  'createaccountmail' => 'Used as label for the checkbox for creating a new account and sending the new password to the specified e-mail address directly, as used on [[Special:UserLogin/signup]] if creating accounts by e-mail is allowed.
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]',
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]',
  'createacct-realname' => 'In vertical-layout create account form, label for field to enter optional real name.',
 -'createaccountreason' => '{{Identical|Reason}}',
 -'createacct-reason' => 'In vertical-layout create account form, label for field to enter reason to create an account when already logged-in.
 +'createaccountreason' => 'Since 1.22 no longer used in core, but may be used by some extensions. DEPRECATED
 +
 +{{Identical|Reason}}',
 +'createacct-reason' => 'In create account form, label for field to enter reason to create an account when already logged-in.
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]
  {{Identical|Reason}}',
  'createacct-reason-ph' => 'Placeholder in vertical-layout create account form for reason field.
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]',
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]',
  'createacct-captcha' => 'Label in vertical-layout create account form for CAPTCHA input field when repositioned by JavaScript.',
  'createacct-imgcaptcha-ph' => 'Placehodler text in vertical-layout create account form for image CAPTCHA input field when repositioned by JavaScript.',
  'createacct-submit' => 'Submit button on vertical-layout create account form.
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]',
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]',
  'createacct-benefit-heading' => 'In vertical-layout create account form, the heading for the section describing the benefits of creating an account.
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]',
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]',
  'createacct-benefit-body1' => 'In vertical-layout create account form, the text for the first benefit.
  
  Preceded by the message {{msg-mw|Createacct-benefit-head1}} (number of edits).
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]
  {{Identical|Edit}}',
  'createacct-benefit-body2' => 'In vertical-layout create account form, the text for the second benefit.
  
  Preceded by the message {{msg-mw|Createacct-benefit-head2}} (number of pages).
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]
  {{Identical|Page}}',
  'createacct-benefit-body3' => 'In vertical-layout create account form, the text for the third benefit.
  
  Preceded by the message {{msg-mw|Createacct-benefit-head3}} (number of contributors).
  
 -See example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]',
 +See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]',
  'badretype' => 'Used as error message when the new password and its retype do not match.',
  'userexists' => 'Used as error message in creating a user account.',
  'loginerror' => 'Used as title of error message.
@@@ -1267,7 -1258,7 +1267,7 @@@ Parameters
  $1 is the minimum number of characters in the password.',
  'password-name-match' => 'Used as error message when password validity check failed.',
  'password-login-forbidden' => 'Error message shown when the user has tried to log in using one of the special username/password combinations used for MediaWiki testing. (See [[mwr:75589]], [[mwr:75605]].)',
 -'mailmypassword' => 'Shown at [[Special:UserLogin]]',
 +'mailmypassword' => 'Heading in [[Special:PasswordReset]]',
  'passwordremindertitle' => 'Title of e-mail which contains temporary password',
  'passwordremindertext' => 'This text is used in an e-mail sent when a user requests a new temporary password (he has forgotten his password) or when an sysop creates a new user account choosing to have password and username sent to the new user by e-mail.
  * $1 is an IP address. Example: 123.123.123.123
@@@ -1357,17 -1348,13 +1357,17 @@@ See also
  # Special:PasswordReset
  'passwordreset' => 'Title of [[Special:PasswordReset]].
  {{Identical|Reset password}}',
 -'passwordreset-text' => 'Text on [[Special:PasswordReset]]',
 +'passwordreset-text-one' => 'Text on [[Special:PasswordReset]] that appears when there is only one way of resetting the password.
 +
 +{{msg-mw|Passwordreset-text-many}}, when there are multiple ways of resetting the password..',
 +'passwordreset-text-many' => 'Text on [[Special:PasswordReset]] that appears when there are multiple ways of resetting the password.
 +
 +* $1 is the number of password reset routes.
 +
 +{{msg-mw|Passwordreset-text-one}}, when there is only one way of resetting the password.',
  'passwordreset-legend' => '{{Identical|Reset password}}',
  'passwordreset-disabled' => 'Used as error message in changing password.',
  'passwordreset-emaildisabled' => "Used as error message in changing password when site's email feature is disabled.",
 -'passwordreset-pretext' => 'These instructions are shown on the password reset dialogue, which can, in principle, take the user\'s email address as well as, or instead of, their username. This text displays above one or more fields, at least one of which needs to be completed, and the message does not know which routes are available, so it needs to refer to some vague noun rather than specifically "username".
 -"One of the pieces of data" means "an info"/"a datum" (probably to be translatea with a singular noun in your language if available). Parameters:
 -* $1 is the number of password reset routes. This is never 1, but always two or more. Thus, the first plural option is empty in English.',
  'passwordreset-username' => '{{Identical|Username}}',
  'passwordreset-domain' => 'A domain like used in Domain Name System (DNS) or more specifically like a domain component in the Lightweight Directory Access Protocol (LDAP)',
  'passwordreset-capture' => 'Label for checkbox asking the user whether they want to see the contents of the password reset email (only shown if they have the <tt>passwordreset</tt> permission',
@@@ -1449,8 -1436,7 +1449,8 @@@ See also
  'nowiki_sample' => 'Text inserted between nowiki tags',
  'nowiki_tip' => 'This is the text that appears when you hover the mouse over the third button from the right on the edit toolbar.',
  'image_sample' => '{{optional}}
 -Used in text generated by Picture button in toolbar.',
 +Used in text generated by Picture button in toolbar.
 +{{Identical|Example}}',
  'image_tip' => 'This is the text that appears when you hover the mouse over the sixth (middle) button on the edit toolbar.
  
  {{Identical|Embedded file}}',
@@@ -1563,7 -1549,7 +1563,7 @@@ See also
  See also:
  * {{msg-mw|permissionserrors}}
  {{Identical|Login required}}',
 -'loginreqlink' => 'Take a look on inflection. Used as parameter in {{msg-mw|loginreqpagetext}}, {{msg-mw|whitelistedittext}}, {{msg-mw|watchlistanontext‎}} and {{msg-mw|Confirmemail needlogin}}.
 +'loginreqlink' => 'Take a look on inflection. Used as parameter in {{msg-mw|loginreqpagetext}}, {{msg-mw|whitelistedittext}}, {{msg-mw|Uploadnologintext}}, {{msg-mw|watchlistanontext‎}} and {{msg-mw|Confirmemail needlogin}}.
  
  {{Identical|Log in}}',
  'loginreqpagetext' => 'This message is displayed if an anonymous reader attempts to access a page which is only available to logged-in users.
@@@ -1603,7 -1589,6 +1603,7 @@@ Example: [{{canonicalurl:Project:News|o
  'sitejspreview' => 'Text displayed on preview of .js pages in MediaWiki namespace',
  'userinvalidcssjstitle' => '* $1 - skin name',
  'updated' => '{{Identical|Updated}}',
 +'note' => '{{Identical|Note}}',
  'previewnote' => 'Note displayed when clicking on Show preview',
  'continue-editing' => '{{doc-actionlink}}
  A link to the beginning of the editing textarea on the same page.
@@@ -1727,7 -1712,6 +1727,7 @@@ See also
  * {{msg-mw|edit-gone-missing}}
  * {{msg-mw|edit-conflict}}
  * {{msg-mw|edit-already-exists}}',
 +'postedit-confirmation' => 'Confirmation message that is displayed upon successful edit. Parameter $1 is the current user, for GENDER support.',
  'edit-already-exists' => 'Used as error message.
  
  See also:
@@@ -1848,8 -1832,6 +1848,8 @@@ See also
  
  {{Identical|Undo}}',
  'undo-summary' => 'Edit summary for an undo action.{{Identical|Undo}}',
 +'undo-summary-username-hidden' => 'Edit summary for an undo action where the username of the old revision is hidden.
 +$1 is the revision ID being undone',
  
  # Account creation failure
  'cantcreateaccounttitle' => 'Used as title of the error message {{msg-mw|Cantcreateaccount-text}}.',
@@@ -2356,6 -2338,9 +2356,6 @@@ Viewprevnext is sometimes preceded by t
  'searchmenu-legend' => '{{Identical|Search options}}',
  'searchmenu-exists' => 'An option shown in a menu beside search form offering a link to the existing page having the specified title (when using the default MediaWiki search engine).',
  'searchmenu-new' => 'An option shown in a menu beside search form offering a red link to the not yet existing page having the specified title (when using the default MediaWiki search engine).',
 -'searchhelp-url' => 'Description: The URL of the search help page.
 -{{doc-important|Do not change the "<tt>Help:</tt>" part.}}
 -{{Identical|HelpContent}}',
  'searchmenu-prefix' => '{{doc-important|Do not translate "Special:PrefixIndex"}}
  Parameters:
  * $1 - prefix string',
@@@ -2462,8 -2447,7 +2462,8 @@@ See also
  'powersearch-ns' => 'Used in the extended search form at [[Special:Search]]',
  'powersearch-redir' => 'Used in the extended search form at [[Special:Search]]',
  'powersearch-field' => 'Used in the extended search form at [[Special:Search]]',
 -'powersearch-togglelabel' => 'Used in [{{canonicalurl:Special:Search|advanced=1}} Advanced search]. Synonym: "Select" as verb.',
 +'powersearch-togglelabel' => 'Used in [{{canonicalurl:Special:Search|advanced=1}} Advanced search]. Synonym: "Select" as verb.
 +{{Identical|Check}}',
  'powersearch-toggleall' => '"All" refers to namespaces. It is used in Advanced search: {{canonicalurl:Special:Search|advanced=1}}
  {{Identical|All}}',
  'powersearch-togglenone' => '"None" refers to namespaces. It is used in Advanced search: {{canonicalurl:Special:Search|advanced=1}}
@@@ -2679,9 -2663,7 +2679,9 @@@ See also
  {{Identical|Date format}}',
  'prefs-timeoffset' => 'Used in [[Special:Preferences]], tab "Date and time".',
  'prefs-advancedediting' => 'Used in [[Special:Preferences]], tab "Editing".
 -{{Identical|Advanced options}}',
 +This used to say "Advanced options", the key name is a left over from that.',
 +'prefs-editor' => 'Used in [[Special:Preferences]], tab "Editing".',
 +'prefs-preview' => 'Used in [[Special:Preferences]], tab "Editing".',
  'prefs-advancedrc' => 'Used in [[Special:Preferences]], tab "Recent changes".
  {{Identical|Advanced options}}',
  'prefs-advancedrendering' => 'Used in [[Special:Preferences]], tab "Appearence".
@@@ -2759,7 -2741,6 +2759,7 @@@ Parameters
  * $1 - optional, for PLURAL use, the number of items in the column following the message. Avoid PLURAL, if your language allows that.',
  'userrights-irreversible-marker' => '{{optional}}',
  'userrights-conflict' => "Shown on [[Special:UserRights]] if the target's rights have been changed since the form was loaded.",
 +'userrights-removed-self' => 'Shown on [[Special:UserRights]] in a green box after the user removed its own rights to access that page.',
  
  # Groups
  'group' => '{{Identical|Group}}',
@@@ -2912,20 -2893,8 +2912,20 @@@ This user automatically bypasses IP blo
  'right-editprotected' => '{{doc-right|editprotected}}',
  'right-editinterface' => '{{doc-right|editinterface}}',
  'right-editusercssjs' => '{{doc-right|editusercssjs}}',
 -'right-editusercss' => '{{doc-right|editusercss}}',
 -'right-edituserjs' => '{{doc-right|edituserjs}}',
 +'right-editusercss' => '{{doc-right|editusercss}}
 +
 +See also {{msg-mw|Right-editmyusercss}}',
 +'right-edituserjs' => '{{doc-right|edituserjs}}
 +
 +See also {{msg-mw|Right-editmyuserjs}}',
 +'right-editmyusercss' => '{{doc-right|editmyusercss}}
 +
 +See also {{msg-mw|Right-editusercss}}',
 +'right-editmyuserjs' => '{{doc-right|editmyuserjs}}
 +
 +See also {{msg-mw|Right-edituserjs}}',
 +'right-viewmywatchlist' => '{{doc-right|viewmywatchlist}}',
 +'right-editmywatchlist' => '{{doc-right|editmywatchlist}}',
  'right-rollback' => '{{doc-right|rollback}}
  {{Identical|Rollback}}',
  'right-markbotedits' => '{{doc-right|markbotedits}}
@@@ -2998,8 -2967,6 +2998,8 @@@ This action allows editing of all of th
  'action-userrights-interwiki' => '{{Doc-action|userrights-interwiki}}',
  'action-siteadmin' => '{{Doc-action|siteadmin}}',
  'action-sendemail' => '{{doc-action|sendemail}}',
 +'action-editmywatchlist' => '{{doc-action|editmywatchlist}}',
 +'action-viewmywatchlist' => '{{doc-action|viewmywatchlist}}',
  
  # Recent changes
  'nchanges' => 'Appears on the [[Special:RecentChanges]] special page in brackets after pages having more than one change on that date. $1 is the number of changes on that day.',
@@@ -3012,6 -2979,7 +3012,7 @@@ See also
  {{Identical|Recent changes}}',
  'recentchanges-legend' => 'Legend of the fieldset of [[Special:RecentChanges]]',
  'recentchanges-summary' => 'Summary of [[Special:RecentChanges]].',
+ 'recentchanges-noresult' => 'Used in [[Special:RecentChanges]], [[Special:RecentChangesLinked]], and [[Special:Watchlist]] when there are no changes to be shown.',
  'recentchanges-feed-description' => 'Used in feed of RecentChanges. See example [{{canonicalurl:Special:RecentChanges|feed=atom}} feed].',
  'recentchanges-label-newpage' => 'Tooltip for {{msg-mw|newpageletter}}',
  'recentchanges-label-minor' => 'Tooltip for {{msg-mw|minoreditletter}}',
@@@ -3110,7 -3078,6 +3111,6 @@@ This message is followed by {{msg-mw|Re
  
  Parameters:
  * \$1 - the name of the page for which related changes are shown",
- 'recentchangeslinked-noresult' => 'Used in [[Special:RecentChangesLinked]], when there are no changes.',
  'recentchangeslinked-summary' => 'Summary of [[Special:RecentChangesLinked]].',
  'recentchangeslinked-page' => '{{Identical|Page name}}',
  'recentchangeslinked-to' => 'Checkbox in [[Special:RecentChangesLinked]].',
@@@ -3143,8 -3110,7 +3143,8 @@@ See also
  * {{msg-mw|reuploaddesc|button text}}',
  'uploadnologin' => 'Used as title of the error message {{msg-mw|Uploadnologintext}}.
  {{Identical|Not logged in}}',
 -'uploadnologintext' => 'Used as error message. The title for this message is {{msg-mw|Uploadnologin}}.
 +'uploadnologintext' => 'Used as error message. The title for this message is {{msg-mw|Uploadnologin}}. Parameters:
 +* $1 - Login link – {{msg-mw|Loginreqlink}}
  
  See also:
  * {{msg-mw|Whitelistedittext}}
@@@ -4204,15 -4170,10 +4204,15 @@@ See also
  'querypage-disabled' => "On special pages that use expensive database queries but are not cacheable, this message is displayed when 'miser mode' is on (i.e. no expensive queries allowed).",
  
  # Book sources
 -'booksources' => '{{doc-special|BookSources}}
 +'booksources' => "{{doc-special|BookSources}}
 +
 +'''This message shouldn't be changed unless it has serious mistakes.'''
 +
 +It's used as the page name of the configuration page of [[Special:BookSources]]. Changing it breaks existing sites using the default version of this message.
 +
  See also:
  * {{msg-mw|Booksources|title}}
 -* {{msg-mw|Booksources-text|text}}',
 +* {{msg-mw|Booksources-text|text}}",
  'booksources-search-legend' => 'Box heading on [[Special:BookSources|book sources]] special page. The box is for searching for places where a particular book can be bought or viewed.',
  'booksources-isbn' => '{{optional}}',
  'booksources-go' => 'Name of button in [[Special:BookSources]]
@@@ -4283,7 -4244,8 +4283,7 @@@ The other parts are {{msg-mw|Prevpage}
  
  # Special:Categories
  'categories' => 'The page name of [[Special:Categories]].
 -
 -{{Identical|Categories}}',
 +{{Identical|Category}}',
  'categoriespagetext' => "{{doc-important|Do not translate or change links.}}
  Text displayed in [[Special:Categories]].
  
@@@ -4343,8 -4305,7 +4343,8 @@@ You can apparently use 'URL' instead o
  {{Identical|Show}}',
  'listusers-noresult' => 'identical with {{msg-mw|activeusers-noresult}}',
  'listusers-blocked' => 'Used on [[Special:ActiveUsers]] when a user has been blocked.
 -* $1 is a user name for use with GENDER (optional)',
 +* $1 - a user name for use with GENDER (optional)
 +{{Identical|Blocked}}',
  
  # Special:ActiveUsers
  'activeusers' => 'Title of [[Special:ActiveUsers]]',
@@@ -4553,7 -4514,6 +4553,6 @@@ Possible alternatives to the word 'cont
  
  See also:
  * {{msg-mw|Cantrollback}}',
- 'watchnochange' => 'Used in [[Special:Watchlist]] if there is nothing to show.',
  'watchlist-details' => 'Message on [[Special:Watchlist]]. Parameters:
  * $1 - number of pages in your watchlist
  This is paired with the message {{msg-mw|Nowatchlist}} which appears instead of Watchlist-details when $1 is 0.
@@@ -4678,8 -4638,7 +4677,8 @@@ The subject of the e-mail is one of th
  'created' => '{{Optional}}
  Possible value for $CHANGEDORCREATED in the following messages:
  * {{msg-mw|enotif_subject}}
 -* {{msg-mw|enotif_body}}',
 +* {{msg-mw|enotif_body}}
 +{{Identical|Created}}',
  'changed' => '{{Optional}}
  Possible value for $CHANGEDORCREATED in the following messages:
  * {{msg|enotif_subject}}
@@@ -4819,7 -4778,7 +4818,7 @@@ Example
  'protect-norestrictiontypes-title' => "Page title in case there aren't any restriction types (like edit or create) available ($1 represents the page title).",
  'protect-legend' => 'Legend of the fieldset around the input form of the protection form.',
  'protectcomment' => '{{Identical|Reason}}',
 -'protectexpiry' => '{{Identical|Expires}}',
 +'protectexpiry' => '{{Identical|Expire}}',
  'protect_expiry_invalid' => 'Used as error message about the Protection Form.
  
  See also:
@@@ -4861,9 -4820,7 +4860,9 @@@ See also
  * $3 - a time (optional)
  If the expiry is indefinite, {{msg-mw|protect-expiry-indefinite}} is used.
  {{Identical|Expires $1 (UTC)}}',
 -'protect-expiring-local' => '$1 is a timestamp like "22:51, 23 July 2011 (UTC)" depending on the wiki content language.',
 +'protect-expiring-local' => 'Parameter:
 +* $1 - a timestamp like "22:51, 23 July 2011 (UTC)" depending on the wiki content language.
 +{{Identical|Expire}}',
  'protect-expiry-indefinite' => 'Used as expiry text in page history, and in [[Special:Protectedtitles]], [[Special:Protectedpages]], and extension FlaggedRevs.
  
  If the expiry is definite, {{msg-mw|protect-expiring}} is used.',
@@@ -5076,8 -5033,7 +5075,8 @@@ This message has a tooltip {{msg-mw|too
  
  This message has a tooltip {{msg-mw|tooltip-namespace association}}',
  'tooltip-namespace_association' => 'Used in [[Special:Recentchanges]] as a tooltip for the associated namespace checkbox. See also the message {{msg-mw|namespace_association}}',
 -'blanknamespace' => 'Name for main namespace (blank namespace) in drop-down menus at [[Special:RecentChanges]] and other special pages.',
 +'blanknamespace' => 'Name for main namespace (blank namespace) in drop-down menus at [[Special:RecentChanges]] and other special pages.
 +{{Identical|Main}}',
  
  # Contributions
  'contributions' => "Display name for the 'User contributions', shown in the sidebar menu of all user pages and user talk pages. Also the page name of the target page. The target page shows an overview of the most recent contributions by a user.
@@@ -5099,7 -5055,7 +5098,7 @@@ See also
  'contribsub2' => 'Contributions for "user" (links)
  {{Identical|For $1}}',
  'nocontribs' => 'Optional parameter: $1 is the user name',
 -'uctop' => 'This message is used in [[Special:Contributions]]. It is used to show that a particular edit was the last made to a page. Example: 09:57, 11 February 2008 (hist) (diff) Pagename‎ (edit summary) (top)
 +'uctop' => 'This message is used in [[Special:Contributions]]. It is used to show that a particular edit was the last made to a page. Example: 09:57, 11 February 2008 (hist) (diff) Pagename‎ (edit summary) (current)
  {{Identical|Top}}',
  'month' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a dropdown box to select a specific month to view the edits made in that month, and the earlier months. See also {{msg-mw|year}}.',
  'year' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for an input box to select a specific year to view the edits made in that year, and the earlier years.
@@@ -5221,8 -5177,7 +5220,8 @@@ Parameter $1 is a page title.'
  
  {{Identical|Redirect page}}',
  'istemplate' => 'Means that a page (a template, specifically) is used as <code><nowiki>{{Page name}}</nowiki></code>.
 -Displayed in [[Special:WhatLinksHere]] (see [[Special:WhatLinksHere/Template:New portal]] for example).',
 +Displayed in [[Special:WhatLinksHere]] (see [[Special:WhatLinksHere/Template:New portal]] for example).
 +{{Identical|Transclusion}}',
  'isimage' => 'This message is displayed on [[Special:WhatLinksHere]] for images. It means that the image is used on the page (as opposed to just being linked to like an non-image page).',
  'whatlinkshere-prev' => 'This is part of the navigation message on the top and bottom of Whatlinkshere pages, where it is used as the first argument of {{msg-mw|Viewprevnext}}.
  $1 is the number of items shown per page. It is not used when $1 is zero; not sure what happens when $1 is one.
@@@ -5423,8 -5378,7 +5422,8 @@@ For an explanation of "range blocks", s
  'blocklist-timestamp' => 'This is a column header for dates and times in the table on the page [[Special:BlockList]].
  {{Identical|Timestamp}}',
  'blocklist-target' => 'The table header for the column containing the block targets, that is user names or IP-addresses linked to their respective user pages, in the table on the page [[Special:BlockList]].',
 -'blocklist-expiry' => 'This is a column header in the table on the page [[Special:BlockList]].',
 +'blocklist-expiry' => 'This is a column header in the table on the page [[Special:BlockList]].
 +{{Identical|Expire}}',
  'blocklist-by' => 'This is a column header in the table on the page [[Special:BlockList]].',
  'blocklist-params' => 'This is a column header in the table on the page [[Special:BlockList]].',
  'blocklist-reason' => 'This is a column header in the table on the page [[Special:BlockList]].
@@@ -5862,10 -5816,8 +5861,10 @@@ See also
  'movepagebtn' => "Button label on the special 'Move page'.
  
  {{Identical|Move page}}",
 -'pagemovedsub' => 'Message displayed as aheader of the body, after succesfully moving a page from source to target name.',
 -'movepage-moved' => 'Message displayed after succesfully moving a page from source to target name. Parameters:
 +'pagemovedsub' => 'Message displayed as aheader of the body, after successfully moving a page from source to target name.',
 +'movepage-moved' => 'Message displayed after successfully moving a page from source to target name.
 +
 +Parameters:
  * $1 - the source page as a link with display name
  * $2 - the target page as a link with display name
  * $3 - (optional) the source page name without a link
@@@ -7210,7 -7162,13 +7209,7 @@@ Parameters
  
  Parameters:
  * $1 - the number of years',
 -'ago' => 'Phrase for indicating how long ago something happened. $1 is something like "3 days 10 hours", taken from these messages:
 -*{{msg-mw|Seconds}}
 -*{{msg-mw|Minutes}}
 -*{{msg-mw|Hours}}
 -*{{msg-mw|Days}}
 -*{{msg-mw|Months}}
 -*{{msg-mw|Years}}',
 +'ago' => 'Phrase for indicating how long ago something happened. $1 is some kind of timestamp.',
  'just-now' => 'Phrase for indicating something happened just now.',
  
  # Human-readable timestamps
@@@ -7739,8 -7697,7 +7738,8 @@@ This property can come from xmp:Label i
  'exif-pngfilecomment' => 'See also:
  * {{msg-mw|Exif-pngfilecomment}}
  * {{msg-mw|Exif-giffilecomment}}',
 -'exif-disclaimer' => 'Disclaimer for the image.',
 +'exif-disclaimer' => 'Disclaimer for the image.
 +{{Identical|Disclaimer}}',
  'exif-contentwarning' => 'Content warning for the image. For example if the image/media contains violent, sexual or otherwise offensive content.
  
  This comes from the png warning textual chunk. See http://www.w3.org/TR/PNG/#11keywords',
@@@ -8360,8 -8317,7 +8359,8 @@@ See also
  'table_pager_limit' => "Do not use PLURAL in this message, because ''$1'' is not the actual number. ''$1'' is a limit selector drop-down list.",
  'table_pager_limit_label' => 'Used as label for input field.',
  'table_pager_limit_submit' => '{{Identical|Go}}',
 -'table_pager_empty' => 'Used in a table pager when there are no results (e.g. when there are no images in the table on [[Special:ImageList]]).',
 +'table_pager_empty' => 'Used in a table pager when there are no results (e.g. when there are no images in the table on [[Special:ImageList]]).
 +{{Identical|No result}}',
  
  # Auto-summaries
  'autosumm-blank' => 'The auto summary when blanking the whole page. This is not the same as deleting the page.',
@@@ -237,7 -237,6 +237,7 @@@ $wgMessageStructure = array
                'create-this-page',
                'delete',
                'deletethispage',
 +              'undeletethispage',
                'undelete_short',
                'viewdeleted_short',
                'protect',
                'namespaceprotected',
                'customcssprotected',
                'customjsprotected',
 +              'mycustomcssprotected',
 +              'mycustomjsprotected',
                'ns-specialprotected',
                'titleprotected',
                'filereadonlyerror',
        ),
        'passwordreset' => array(
                'passwordreset',
 -              'passwordreset-text',
 +              'passwordreset-text-one',
 +              'passwordreset-text-many',
                'passwordreset-legend',
                'passwordreset-disabled',
                'passwordreset-emaildisabled',
 -              'passwordreset-pretext',
                'passwordreset-username',
                'passwordreset-domain',
                'passwordreset-capture',
                'edit-gone-missing',
                'edit-conflict',
                'edit-no-change',
 +              'postedit-confirmation',
                'edit-already-exists',
                'addsection-preload',
                'addsection-editintro',
                'undo-failure',
                'undo-norev',
                'undo-summary',
 +              'undo-summary-username-hidden',
        ),
        'cantcreateaccount' => array(
                'cantcreateaccounttitle',
                'searchmenu-exists',
                'searchmenu-new',
                'searchmenu-new-nocreate',
 -              'searchhelp-url',
                'searchmenu-prefix',
 -              'searchmenu-help',
                'searchprofile-articles',
                'searchprofile-project',
                'searchprofile-images',
                'resetprefs',
                'restoreprefs',
                'prefs-editing',
 -              'prefs-edit-boxsize',
                'rows',
                'columns',
                'searchresultshead',
                'prefs-common-css-js',
                'prefs-reset-intro',
                'prefs-emailconfirm-label',
 -              'prefs-textboxsize',
                'youremail',
                'username',
                'uid',
                'prefs-dateformat',
                'prefs-timeoffset',
                'prefs-advancedediting',
 +              'prefs-editor',
 +              'prefs-preview',
                'prefs-advancedrc',
                'prefs-advancedrendering',
                'prefs-advancedsearchoptions',
                'userrights-unchangeable-col',
                'userrights-irreversible-marker',
                'userrights-conflict',
 +              'userrights-removed-self',
        ),
        'group' => array(
                'group',
                'right-editusercssjs',
                'right-editusercss',
                'right-edituserjs',
 +              'right-editmyusercss',
 +              'right-editmyuserjs',
 +              'right-viewmywatchlist',
 +              'right-editmywatchlist',
                'right-rollback',
                'right-markbotedits',
                'right-noratelimit',
                'action-userrights-interwiki',
                'action-siteadmin',
                'action-sendemail',
 +              'action-editmywatchlist',
 +              'action-viewmywatchlist',
        ),
        'recentchanges' => array(
                'nchanges',
                'recentchanges-legend',
                'recentchanges-summary',
                'recentchangestext',
+               'recentchanges-noresult',
                'recentchanges-feed-description',
                'recentchanges-label-newpage',
                'recentchanges-label-minor',
                'recentchangeslinked-feed',
                'recentchangeslinked-toolbox',
                'recentchangeslinked-title',
-               'recentchangeslinked-noresult',
                'recentchangeslinked-summary',
                'recentchangeslinked-page',
                'recentchangeslinked-to',
                'unwatchthispage',
                'notanarticle',
                'notvisiblerev',
-               'watchnochange',
                'watchlist-details',
                'wlheader-enotif',
                'wlheader-showupdated',
@@@ -3927,8 -3916,8 +3926,8 @@@ $wgBlockComments = array
  begin with * or ** are discarded, furthermore lines that do begin with ** and
  do not contain | are also discarded, but do not depend on this behavior for
  future releases. Also note that since each list value is wrapped in a unique
 -XHTML id it should only appear once and include characters that are legal
 -XHTML id names.",
 +(X)HTML id it should only appear once and include characters that are legal
 +(X)HTML id names.",
        'toggles'             => 'User preference toggles',
        'underline'           => '',
        'editfont'            => 'Font style option in Special:Preferences',