Merge "Support GENDER in MediaWiki:Blockip and Special:Block"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 9 Aug 2014 16:25:30 +0000 (16:25 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 9 Aug 2014 16:25:30 +0000 (16:25 +0000)
1  2 
RELEASE-NOTES-1.24
includes/SkinTemplate.php
languages/i18n/cs.json
languages/i18n/en.json

diff --combined RELEASE-NOTES-1.24
@@@ -1,5 -1,5 +1,5 @@@
 -Security reminder: MediaWiki does not require PHP's register_globals. If you
 -have it on, turn it '''off''' if you can.
 +Security reminder: If you have PHP's register_globals option set, you must
 +turn it off. MediaWiki will no longer work with it enabled.
  
  == MediaWiki 1.24 ==
  
@@@ -9,14 -9,6 +9,14 @@@ MediaWiki 1.24 is an alpha-quality bran
  production.
  
  === Configuration changes in 1.24 ===
 +* MediaWiki will no longer run if register_globals is enabled. It has been
 +  deprecated for 5 years now, and was removed in PHP 5.4. For more information
 +  about why, see <https://www.mediawiki.org/wiki/register_globals>.
 +* MediaWiki now requires PHP's iconv extension. openSUSE users may need to
 +  install the php5-iconv package. Users of other systems may need to add
 +  extension=iconv.so to php.ini or recompile PHP without --without-iconv.
 +* MediaWiki will no longer function if magic quotes are enabled. It has
 +  been deprecated for 5 years now, and was removed in PHP 5.4.
  * The server's canonical hostname is available as $wgServerName, which is
    exposed in both mw.config and ApiQuerySiteInfo.
  * Introduced $wgPagePropsHaveSortkey as a backwards-compatibility switch,
  * $wgSearchEverythingOnlyLoggedIn was removed as the 'searcheverything'
    user option was removed. Use $wgNamespacesToBeSearchedDefault instead or
    if you used to have $wgDefaultUserOptions['searcheverything'] = 1.
 +* $wgMasterWaitTimeout has been deprecated.
 +* $wgDBClusterTimeout has been removed.
 +* $wgProxyKey has been removed. It is no longer used by MediaWiki core.
 +  Ensure $wgSecretKey is set in LocalSettings.php.
 +* $wgExtraInterlanguageLinkPrefixes is a new configuration variable that
 +  contains an array of interwiki prefixes that should be treated as language
 +  prefixes (i.e. turned into interlanguage links when $wgInterwikiMagic is set
 +  to true).
 +* $wgParserTestRemote has been removed.
 +* $wgCountTotalSearchHits has been removed. If you're concerned about efficiency
 +  of search, you should use something like CirrusSearch instead of built in
 +  search.
 +* Users in the 'sysop' group have access to Special:MergeHistory by default.
 +* $wgFileStore was removed after having been deprecated in 1.17. Alternative
 +  configurations are $wgDeletedDirectory and $wgHashedUploadDirectory.
 +* The deprecated $wgUseCommaCount variable has been removed.
 +* $wgEnableSorbs and $wgSorbsUrl have been removed.
 +* The UserCryptPassword and UserComparePassword hooks are no longer called. Any extensions
 +  using them must be updated to use the Password Hashing API.
 +* $wgCompiledFiles has been removed.
 +* $wgSortSpecialPages was removed, the listing on Special:SpecialPages is
 +  now always sorted.
  
  === New features in 1.24 ===
  * Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
  * Added a new hook, "SidebarBeforeOutput", to allow to edit the structure of
    the sidebar just before its display.
  * (bug 49156) Added the mediawiki.cookie ResourceLoader module, which wraps
 -  jQuery.cookie so that getting/setting a cookie is syntactically and functionally
 -  similar to using the WebRequest#getCookie/WebResponse#setcookie methods.
 -* (bug 44740) jQuery upgraded from 1.8.3 to 1.11.1.
 +  jquery.cookie so that getting/setting a cookie is syntactically and
 +  functionally similar to using the WebRequest::getCookie() and
 +  WebResponse::setcookie() methods.
 +* (bug 44740) jQuery upgraded from 1.8.3 to 1.11.1. A new configuration option,
 +  $wgIncludejQueryMigrate, also loads the jQuery Migrate hack to let extensions
 +  and gadgets use the long-deprecated functions that were removed in jQuery 1.9.
 +  This option is turned off by default, and will be removed in MediaWiki 1.25.
 +* (bug 47076) jQuery UI upgraded from 1.8.24 to 1.9.2.
  * Changes to content typography (fonts, etc.). See
    https://www.mediawiki.org/wiki/Typography_refresh for further information.
  * WikitextContent will now render redirects with the expected "redirect"
    can probably be changed to no longer special-case redirects.
  * Header font set to a serif font stack. See
    https://www.mediawiki.org/wiki/Typography_refresh for further information.
 -* (bug 63903) Thumbnails without an explicit size specification are
 -  now resized to a square bounding box. This gives better results for
 -  non-landscape thumbnails.
 -* (bug 65567) Added a new hook, "BeforeHttpsRedirect", to allow cancellation of the HTTP
 -  to HTTPS redirect due to forceHTTPS cookie, userRequires, etc.  This is only for page views,
 -  since this hook doesn't affect UserLogin, OAuth, CentralAuth, etc.
 -  ATTENTION: This hook is likely to be removed soon due to overall design of the system.
 +* (bug 65567) Added a new hook, "BeforeHttpsRedirect", to allow cancellation of
 +  the HTTP to HTTPS redirect due to forceHTTPS cookie, userRequires, etc. This
 +  is only for page views, since this hook doesn't affect UserLogin, OAuth,
 +  CentralAuth, etc. ATTENTION: This hook is likely to be removed soon due to
 +  overall design of the system.
  * (bug 17367) It is now possible to add pages to your watchlist from
    Special:UnwatchedPages without reloading the special page.
  * New methods setVolatile and isVolatile are added to PPFrame, so that
    extensions such as Cite.php can mark that their output is volatile and
    shouldn't be cached.
 -* (bug 52817) Advanced search options are now saved on the search page itself, rather
 -  than in a dedicated pane in the preferences panel.
 +* (bug 52817) Advanced search options are now saved on the search page itself,
 +  rather than in a dedicated pane in the preferences panel.
 +* (bug 44591) The dropdown actions menu (little triangle next to page tabs) in
 +  the Vector skin has gained a label that should make it more discoverable.
 +* MWCryptHKDF added for fast, cryptographically secure random number generation
 +  that won't deplete openssl's entropy pool.
 +* ResourceLoader: File modules can now provide a skip function that uses an
 +  inline feature test to bypass loading of the module.
 +* (bug 20210) Special pages may now provide autocompletion of their subpage
 +  names in search suggestions. Right now the only useful implementation is in
 +  Special:Log, but more are to come.
 +* Special:MostLinkedTemplates is no longer limited to transclusions from the
 +  Template namespace.
 +* Skins can now use 'remoteSkinPath' when defining ResourceLoader modules.
 +  This works the same as 'remoteExtPath' but is relative to the skins/ folder
 +  instead of the extensions/ folder.
 +* Added the json2.js polyfill for the ES5 JSON.stringify and JSON.parse methods.
 +  Exposed as module "json" with a skip function to optimise loading.
 +* Extensions and skins may now use 'namemsg' in $wgExtensionCredits in addition
 +  to 'name', to allow for the name to be localizable. 'name' should still be
 +  specified for backwards-compatibility and to define the path Special:Version
 +  uses to find extension license information.
 +* Browser tests are now included to verify basic wiki functionality in developer
 +  environments. For details on running tests, see tests/browser/README.mediawiki.
 +* Upgrade jStorage to v0.4.10.
 +* {{!}} is now a magic word that produces the | character. This removes the need
 +  for Template:! for purposes such as passing pipes inside of parameters.
 +* (bug 20790) The block log snippet on Special:Contributions and while
 +  editing user and user talk pages now works for IP range blocks.
 +* (bug 9360) Added ability to change the page language for MediaWiki pages using
 +  Special:PageLanguage. All pages are set to wiki language by default.
 +  The feature needs to be enabled with $wgPageLanguageUseDB=true and
 +  permission needs to be set for 'pagelang'.
 +* Upgrade Moment.js to v2.7.0.
 +* (bug 67042) Added support for the HTML5 <rtc> tag for East Asian typography.
 +* Upgrade Sinon.JS to 1.10.3.
 +* Added the es5-shim polyfill for older or non-compliant javascript engines.
 +* Upgrade jQuery Cookie to v1.3.1.
 +* (bug 20476) Add a "viewsuppressed" user right to be able to view
 +  suppressed content but not suppress it ("suppressrevision" right).
 +* (bug 66440) The MediaWiki web installer will now allow you to choose the skins
 +  to enable (from the ones included in download tarball) and decide which one
 +  should be the default.
 +* (bug 68085, 68802) Links like [[localInterwikiPrefix:languageCode:pageTitle]],
 +  where localInterwikiPrefix is a member of the $wgLocalInterwikis array, will
 +  no longer be displayed in the sidebar when $wgInterwikiMagic is true. In a
 +  similar way, links like [[localInterwikiPrefix:File:Image.png]] and
 +  [[localInterwikiPrefix:Category:Hello]] will now render as regular links, and
 +  will not include the file or add the page to the category.
 +* New special page, MyLanguages, to redirect users to subpages with localised
 +  versions of a page. (Integrated from Extension:Translate)
 +* MediaWiki now supports multiple password types, including bcrypt and PBKDF2.
 +  The default type can be changed with $wgPasswordDefault and the type
 +  configurations can be changed with $wgPasswordConfig.
 +* Skins can now define custom styles for default ResourceLoader modules using
 +  the $wgResourceModuleSkinStyles global. See the Vector skin for examples.
 +* (bug 4488) There is now a preference to watch pages where the user has
 +  rollbacked an edit by default.
 +* (bug 15484) Users will now be redirected to the login page when they need to
 +  log in, rather than being shown a page asking them to log in and having to click
 +  another link to actually get to the login page.
 +* A JSONContent and JSONContentHandler were added for extensions to extend.
  
  === Bug fixes in 1.24 ===
+ * (bug 50572) MediaWiki:Blockip should support gender
  * (bug 49116) Footer copyright notice is now always displayed in user language
    rather than content language (same as copyright notice for editing interface).
  * (bug 62258) A bug was fixed in File::getUnscaledThumb when a height
 -  restriction was present in the parameters.  Images with both the "frame"
 +  restriction was present in the parameters. Images with both the "frame"
    option and a size specification set will now always ignore the provided
    size and display an unscaled image, as the documentation has always
    claimed it would.
  * (bug 52587) Maintenance script deleteBatch.php no longer follows redirects
    in the file namespace and delete the file on the target page. It will still
    however delete the redirect page.
 +* (bug 22683) {{msgnw:}} and other uses of PPFrame::RECOVER_ORIG will correctly
 +  recover the original code of extension tags.
 +* (bug 65757) MSSQL: Update script drops unnamed constraints to be prepared
 +  for future updates. Because it's doing so heuristically, it may fail or drop
 +  wrong constraints.
 +* (bug 67870) wfShellExec() cuts off stdout at multiples of 8192 bytes.
 +* $wgRunJobsAsync now works with private wikis (e.g. read requires login).
 +* (bugs 57238, 65206) Blank pages can now be directly created.
  
  === Web API changes in 1.24 ===
  * action=parse API now supports prop=modules, which provides the list of
    specified.
  * action=logevents has a new parameter, lenamespace, to allow filtering by
    namespace.
 +* action=expandtemplates has a new parameter, prop, and a new output format.
 +  The old format is still used if prop isn't provided, but this is deprecated.
 +* meta=userinfo can now return the count of unread pages on the watchlist.
 +* list=watchlist can now filter by unread status.
 +* The deprecated action=parse&prop=languageshtml has been removed.
 +* (bug 48071) action=setnotificationtimestamp no longer throws PHP or database
 +  errors when no pages are given.
 +* (bug 60734) Actions that use ApiPageSet (e.g. purge, watch,
 +  setnotificationtimestamp) will now include continuation information when
 +  using a generator.
 +* $wgAPIModules (and the related $wgAPIFormatModules, $wgAPIMetaModules,
 +  $wgAPIPropModules, and $wgAPIListModules settings) now allow API modules
 +  to be specified using a "module spec" array instead of a plain class name.
 +  A "module spec" is an associative array containing at least the 'class' key
 +  for the module's class, and optionally a 'factory' key for the factory function
 +  to use for the module. This is intended for extensions that want control over
 +  the instantiation of their API modules, to allow for proper dependency
 +  injection.
  
  === Languages updated in 1.24 ===
  
@@@ -241,77 -123,6 +242,77 @@@ changes to languages because of Bugzill
    the "headelement" template key are no longer supported. Setting
    $useHeadElement = false; is no longer supported and will not cause old keys
    like "headlinks", "skinnameclass", etc. to be defined.
 +* The deprecated 'SpecialVersionExtensionTypes' hook was removed.
 +* (bug 63891) Add 'X-Robots-Tag: noindex' header in action=render pages.
 +* SpecialPage no longer supports the syntax for invoking wfSpecial*() functions.
 +  Special pages should subclass SpecialPage and implement the execute() method.
 +* (bug 63755) The deprecated constants RC_MOVE and RC_MOVE_OVER_REDIRECT were
 +  removed.
 +* Special:MostLinkedTemplates has been renamed to Special:MostTranscludedPages.
 +* The skin autodiscovery mechanism has been deprecated and will be removed in
 +  MediaWiki 1.25. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery
 +  for migration guide for creators and users of custom skins that relied on it.
 +* ResourceLoaderFileModule#getAllStyleFiles now returns all style files and all
 +  skin style files used by the module.
 +* Removed getLang() from IContextSource and subclasses. (deprecated since 1.19)
 +* Removed setLang() from subclasses of IContextSource. (deprecated since 1.19)
 +* Removed WebRequest::escapeAppendQuery(). (deprecated since 1.20)
 +* Removed info(), purge(), revert() and rollback() from the Article class; they
 +  have since become subclasses of the Action class. (deprecated since 1.19)
 +* SearchEngineReplacePrefixesComplete hook was removed.
 +* The "jquery.json" module has been deprecated. Use the "json" module instead.
 +* Removed HTMLForm::addJS(). (deprecated since 1.18)
 +* Removed LogEventsList::showHeader(). (deprecated since 1.19)
 +* Removed ImageGalleryBase::useSkin(). (deprecated since 1.18)
 +* Removed DatabaseMysqlBase::getLagFromProcesslist(). (deprecated since 1.19)
 +* Removed LoadBalancer::closeConnecton(). (deprecated since 1.18)
 +* Removed ApiBase::createContext(). (deprecated since 1.19)
 +* BREAKING CHANGE: The undocumented Special{$this->getName()}BeforeFormDisplay
 +  set of hooks has been removed and replaced by a single new hook
 +  SpecialPageBeforeFormDisplay.
 +* (bug 65781) Removed block warning on included {{Special:Contributions}}
 +* Removed Skin::makeGlobalVariablesScript. (deprecated since 1.19)
 +* Removed MWNamespace::isMain(). (deprecated since 1.19)
 +* Removed Preferences::loadOldSearchNs(). (deprecated since 1.19)
 +* Removed OutputPage::getStatusMessage(). (deprecated since 1.18)
 +* Removed OutputPage::isUserJsAllowed(). (deprecated since 1.18)
 +* Removed Title::updateTitleProtection(). (deprecated since 1.19)
 +* Removed ParserOptions::setSkin(). (deprecated since 1.19)
 +* Removed Title::escapeCanonicalURL(). (deprecated since 1.19)
 +* Removed Title::escapeLocalURL(). (deprecated since 1.19)
 +* Removed Title::escapeFullURL(). (deprecated since 1.19)
 +* Removed User::isValidEmailAddr(). (deprecated since 1.18)
 +* Removed Title::getEscapedText(). (deprecated since 1.19)
 +* Removed Language::getFallbackLanguageCode(). (deprecated since 1.19)
 +* Removed WikiPage::isBigDeletion(). (deprecated since 1.19)
 +* Removed MWInit class which contained functions related to a now discontinued
 +  PHP compiler called hphpc. (deprecated since 1.22)
 +* ApiResult::enableSizeCheck() and disableSizeCheck() are now obsolete.
 +* Removed ResourceLoaderGetStartupModules hook. (deprecated since 1.23)
 +* Removed getFormFields(), onSubmit() and onSuccess() from FormlessAction, as
 +  these were meant specifically for FormAction instead.
 +* Removed Action::execute().
 +* Removed AjaxAddScript which has been obsolete since ResourceLoader and
 +  is unused by any modern extension.
 +* Removed maintenance/nextJobDB.php; no longer in use.
 +* Removed global function wfViewPrevNext(). (deprecated since 1.19)
 +* Removed global function xmlsafe() from Export.php. (moved to OAIRepo extension)
 +* Removed Title::userCanRead(). (deprecated since 1.19)
 +* Removed maintenance script importTextFile.php. Use edit.php script instead.
 +* A _from_namespace field has been added to the templatelinks, pagelinks,
 +  and filelinks tables. Run update.php to apply this change to the schema.
 +* Removed File::sha1Base36(). (deprecated since 1.19)
 +* Removed File::getPropsFromPath(). (deprecated since 1.19)
 +* Removed functions blockedPage(), noCreatePermission(), readOnlyPage() and
 +  userNotLoggedInPage() from EditPage.php. (deprecated since 1.19)
 +* Removed functions getContent(), getPreloadedText(), mergeChangesInto() and
 +  setPreloadedText() from EditPage.php. (deprecated since 1.21)
 +* Removed global functions wfArrayLookup(), wfArrayMerge(), wfDebugDieBacktrace()
 +  and wfTime(). (deprecated since 1.22)
 +* Microsoft Internet Explorer 6 is now a "grade C" browser, meaning that
 +  JavaScript is no longer executed in this browser. The IEFixes script, which
 +  existed purely to provide support for MSIE versions below 7 and which was
 +  conditionally loaded for those browsers, was also removed.
  
  ==== Renamed classes ====
  * CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
  * CLDRPluralRuleEvaluator_Range to CLDRPluralRuleEvaluatorRange
  * CSSJanus_Tokenizer to CSSJanusTokenizer
  * MediaWiki_I18N to MediaWikiI18N
 +* Parser_DiffTest to ParserDiffTest
  * RevDel_ArchiveItem to RevDelArchiveItem
  * RevDel_ArchiveList to RevDelArchiveList
  * RevDel_ArchivedFileItem to RevDelArchivedFileItem
  ==== Removed classes ====
  * IPBlockForm - Use SpecialBlock directly
  * WatchlistEditor - Use SpecialEditWatchlist directly
 +* FormatExif - Use FormatMetadata directly
 +* RevertFileAction - Use RevertAction directly
 +* HistoryPage - Use HistoryAction directly
 +* RawPage - Use RawAction directly
 +* StubContLang - Use Language::factory() instead
 +* XMLReader2 - Use XMLReader directly
  
  == Compatibility ==
  
@@@ -399,7 -203,7 +400,7 @@@ Don't forget to always back up your dat
  
  See the file UPGRADE for more detailed upgrade instructions.
  
 -For notes on 1.22.x and older releases, see HISTORY.
 +For notes on 1.23.x and older releases, see HISTORY.
  
  == Online documentation ==
  
@@@ -74,6 -74,12 +74,6 @@@ class SkinTemplate extends Skin 
         */
        public $skinname = 'monobook';
  
 -      /**
 -       * @var string Stylesheets set to use. Subdirectory in skins/ where various
 -       *   stylesheets are located.  Child classes should override the default.
 -       */
 -      public $stylename = 'monobook';
 -
        /**
         * @var string For QuickTemplate, the name of the subclass which will
         *   actually fill the template.  Child classes should override the default.
         * @private
         */
        function setupTemplate( $classname, $repository = false, $cache_dir = false ) {
 -              return new $classname();
 +              return new $classname( $this->getConfig() );
        }
  
        /**
         * Generates array of language links for the current page
         *
         * @return array
 -       * @public
         */
        public function getLanguages() {
                global $wgHideInterlanguageLinks;
                                $ilLangName = Language::fetchLanguageName( $ilInterwikiCode );
  
                                if ( strval( $ilLangName ) === '' ) {
 -                                      $ilLangName = $languageLinkText;
 +                                      $ilDisplayTextMsg = wfMessage( "interlanguage-link-$ilInterwikiCode" );
 +                                      if ( !$ilDisplayTextMsg->isDisabled() ) {
 +                                              // Use custom MW message for the display text
 +                                              $ilLangName = $ilDisplayTextMsg->text();
 +                                      } else {
 +                                              // Last resort: fallback to the language link target
 +                                              $ilLangName = $languageLinkText;
 +                                      }
                                } else {
 +                                      // Use the language autonym as display text
                                        $ilLangName = $this->formatLanguageName( $ilLangName );
                                }
  
                                );
  
                                $languageLinkTitleText = $languageLinkTitle->getText();
 -                              if ( $languageLinkTitleText === '' ) {
 +                              if ( $ilLangLocalName === '' ) {
 +                                      $ilFriendlySiteName = wfMessage( "interlanguage-link-sitename-$ilInterwikiCode" );
 +                                      if ( !$ilFriendlySiteName->isDisabled() ) {
 +                                              if ( $languageLinkTitleText === '' ) {
 +                                                      $ilTitle = wfMessage(
 +                                                              'interlanguage-link-title-nonlangonly',
 +                                                              $ilFriendlySiteName->text()
 +                                                      )->text();
 +                                              } else {
 +                                                      $ilTitle = wfMessage(
 +                                                              'interlanguage-link-title-nonlang',
 +                                                              $languageLinkTitleText,
 +                                                              $ilFriendlySiteName->text()
 +                                                      )->text();
 +                                              }
 +                                      } else {
 +                                              // we have nothing friendly to put in the title, so fall back to
 +                                              // displaying the interlanguage link itself in the title text
 +                                              // (similar to what is done in page content)
 +                                              $ilTitle = $languageLinkTitle->getInterwiki() .
 +                                                      ":$languageLinkTitleText";
 +                                      }
 +                              } elseif ( $languageLinkTitleText === '' ) {
                                        $ilTitle = wfMessage(
                                                'interlanguage-link-title-langonly',
                                                $ilLangLocalName
         * @return QuickTemplate The template to be executed by outputPage
         */
        protected function prepareQuickTemplate() {
 -              global $wgContLang, $wgScript, $wgStylePath,
 -                      $wgMimeType, $wgJsMimeType, $wgXhtmlNamespaces, $wgHtml5Version,
 +              global $wgContLang, $wgScript, $wgStylePath, $wgMimeType, $wgJsMimeType,
                        $wgDisableCounters, $wgSitename, $wgLogo, $wgMaxCredits,
                        $wgShowCreditsIfMax, $wgPageShowWatchingUsers, $wgArticlePath,
                        $wgScriptPath, $wgServer;
                $tpl->set( 'handheld', $request->getBool( 'handheld' ) );
                $tpl->setRef( 'loggedin', $this->loggedin );
                $tpl->set( 'notspecialpage', !$title->isSpecialPage() );
 -              /* XXX currently unused, might get useful later
 -              $tpl->set( 'editable', ( !$title->isSpecialPage() ) );
 -              $tpl->set( 'exists', $title->getArticleID() != 0 );
 -              $tpl->set( 'watch', $user->isWatched( $title ) ? 'unwatch' : 'watch' );
 -              $tpl->set( 'protect', count( $title->isProtected() ) ? 'unprotect' : 'protect' );
 -              $tpl->set( 'helppage', $this->msg( 'helppage' )->text() );
 -              */
                $tpl->set( 'searchaction', $this->escapeSearchLink() );
                $tpl->set( 'searchtitle', SpecialPage::getTitleFor( 'Search' )->getPrefixedDBkey() );
                $tpl->set( 'search', trim( $request->getVal( 'search' ) ) );
        /**
         * Builds an array with tab definition
         *
 -       * @param Title $title page Where the tab links to
 +       * @param Title $title Page Where the tab links to
         * @param string|array $message Message key or an array of message keys (will fall back)
         * @param bool $selected Display the tab as selected
         * @param string $query Query string attached to tab URL
                                        /**
                                         * The following actions use messages which, if made particular to
                                         * the any specific skins, would break the Ajax code which makes this
 -                                       * action happen entirely inline. Skin::makeGlobalVariablesScript
 +                                       * action happen entirely inline. OutputPage::getJSVars
                                         * defines a set of messages in a javascript object - and these
                                         * messages are assumed to be global for all skins. Without making
                                         * a change to that procedure these messages will have to remain as
  
        /**
         * an array of edit links by default used for the tabs
 -       * @param $content_navigation
 +       * @param array $content_navigation
         * @return array
         */
        private function buildContentActionUrls( $content_navigation ) {
  
                        if ( $this->getUser()->isAllowed( 'block' ) ) {
                                $nav_urls['blockip'] = array(
+                                       'text' => $this->msg( 'blockip', $rootUser )->text(),
                                        'href' => self::makeSpecialUrlSubpage( 'Block', $rootUser )
                                );
                        }
   * @ingroup Skins
   */
  abstract class QuickTemplate {
 +
 +      /** @var Config $config */
 +      protected $config;
        /**
 -       * Constructor
 +       * @var Config $config
         */
 -      function __construct() {
 +      function __construct( Config $config = null ) {
                $this->data = array();
                $this->translator = new MediaWikiI18N();
 +              if ( $config === null ) {
 +                      wfDebug( __METHOD__ . ' was called with no Config instance passed to it' );
 +                      $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
 +              }
 +              $this->config = $config;
        }
  
        /**
@@@ -1804,9 -1782,9 +1805,9 @@@ abstract class BaseTemplate extends Qui
         * Makes a link, usually used by makeListItem to generate a link for an item
         * in a list used in navigation lists, portlets, portals, sidebars, etc...
         *
 -       * @param string $key usually a key from the list you are generating this
 +       * @param string $key Usually a key from the list you are generating this
         * link from.
 -       * @param array $item contains some of a specific set of keys.
 +       * @param array $item Contains some of a specific set of keys.
         *
         * The text of the link will be generated either from the contents of the
         * "text" key in the $item array, if a "msg" key is present a message by
         *
         * If you don't want an accesskey, set $item['tooltiponly'] = true;
         *
 -       * @param array $options can be used to affect the output of a link.
 +       * @param array $options Can be used to affect the output of a link.
         * Possible options are:
         *   - 'text-wrapper' key to specify a list of elements to wrap the text of
         *   a link in. This should be an array of arrays containing a 'tag' and
diff --combined languages/i18n/cs.json
@@@ -42,7 -42,6 +42,7 @@@
        "tog-watchdefault": "Přidávat mnou editované stránky a soubory ke sledovaným",
        "tog-watchmoves": "Přidávat mnou přesouvané stránky a soubory mezi sledované",
        "tog-watchdeletion": "Přidávat stránky a soubory, které smažu, mezi sledované",
 +      "tog-watchrollback": "Přidávat stránky, které jsem {{GENDER:|vrátil|vrátila}} zpět, ke sledovaným",
        "tog-minordefault": "Označovat editace implicitně jako malé",
        "tog-previewontop": "Zobrazovat náhled před editačním oknem (ne za ním)",
        "tog-previewonfirst": "Zobrazit při první editaci náhled",
        "qbmyoptions": "Moje stránky",
        "faq": "Často kladené otázky",
        "faqpage": "Project:Často kladené otázky",
 -      "vector-action-addsection": "Přidat téma",
 -      "vector-action-delete": "Smazat",
 -      "vector-action-move": "Přesunout",
 -      "vector-action-protect": "Zamknout",
 -      "vector-action-undelete": "Obnovit",
 -      "vector-action-unprotect": "Změnit zámek",
 -      "vector-view-create": "Založit",
 -      "vector-view-edit": "Editovat",
 -      "vector-view-history": "Zobrazit historii",
 -      "vector-view-view": "Číst",
 -      "vector-view-viewsource": "Zobrazit zdrojový kód",
        "actions": "Akce",
        "namespaces": "Jmenné prostory",
        "variants": "Varianty",
        "talkpagelinktext": "diskuse",
        "specialpage": "Speciální stránka",
        "personaltools": "Osobní nástroje",
 -      "postcomment": "Nová sekce",
        "articlepage": "Prohlédnout si stránku",
        "talk": "Diskuse",
        "views": "Zobrazení",
        "externaldberror": "Buď nastala chyba externí autentizační databáze, nebo nemáte dovoleno měnit svůj externí účet.",
        "login": "Přihlaste se",
        "nav-login-createaccount": "Přihlášení / vytvoření účtu",
 -      "loginprompt": "K přihlášení do {{grammar:2sg|{{SITENAME}}}} musíte mít povoleny cookies.",
        "userlogin": "Přihlášení / vytvoření účtu",
        "userloginnocreate": "Přihlášení",
        "logout": "Odhlásit se",
        "loginerror": "Chyba při přihlašování",
        "createacct-error": "Chyba při zakládání účtu",
        "createaccounterror": "Nepodařilo se vytvořit uživatelský účet: $1",
 -      "nocookiesnew": "Uživatelský účet byl vytvořen, ale nejste přihlášeni. {{SITENAME}} používá cookies k přihlášení uživatelů. Vy máte cookies vypnuty. Prosím zapněte je a přihlaste se znovu s vaším novým uživatelským jménem a heslem.",
 +      "nocookiesnew": "Uživatelský účet byl vytvořen, ale nejste přihlášeni. {{SITENAME}} používá cookies k přihlášení uživatelů. Vy máte cookies vypnuty. Prosím, zapněte je a poté se přihlaste svým novým uživatelským jménem a heslem.",
        "nocookieslogin": "{{SITENAME}} používá cookies k přihlášení uživatelů. Vy máte cookies vypnuty. Prosím zapněte je a zkuste znovu.",
        "nocookiesfornew": "Uživatelský účet nebyl založen, neboť jsme nebyli schopni potvrdit jeho původ.\nUjistěte se, že máte povoleny cookies, obnovte tuto stránku a zkuste to znovu.",
        "noname": "Musíte uvést jméno svého účtu.",
        "preview": "Náhled",
        "showpreview": "Ukázat náhled",
        "showdiff": "Ukázat změny",
 +      "blankarticle": "<strong>Upozornění:</strong> Stránka, kterou se chystáte založit, je prázdná. Pokud ještě jednou kliknete na „{{int:savearticle}}“, bude založena zcela bez obsahu.",
        "anoneditwarning": "'''Varování:''' Nejste přihlášen(a). Vaše IP adresa bude zveřejněna v historii této stránky.",
        "anonpreviewwarning": "''Nejste přihlášen(a). Uložením zveřejníte svou IP adresu v historii této stránky.''",
        "missingsummary": "'''Připomenutí:''' Nezadali jste shrnutí editace. Pokud ještě jednou kliknete na Uložit změny, bude vaše editace zapsána bez shrnutí.",
        "currentrev": "Aktuální verze",
        "currentrev-asof": "Aktuální verze z $1",
        "revisionasof": "Verze z $1",
 -      "revision-info": "Verze z $1; $2",
 +      "revision-info": "Verze z $1, kterou {{GENDER:$6|vytvořil|vytvořila}} $2$7",
        "previousrevision": "← Starší verze",
        "nextrevision": "Novější verze →",
        "currentrevisionlink": "zobrazit aktuální verzi",
        "rev-deleted-event": "(záznam odstraněn)",
        "rev-deleted-user-contribs": "[uživatelské jméno nebo IP adresa odstraněny – editace v příspěvcích skryta]",
        "rev-deleted-text-permission": "Tato revize byla '''smazána'''.\nPodrobnosti mohou být uvedeny v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} knize smazaných stránek].",
 +      "rev-suppressed-text-permission": "Tato revize byla <strong>utajena</strong>. Podrobnosti jsou uvedeny v [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} knize utajení].",
        "rev-deleted-text-unhide": "Tato revize byla '''smazána'''.\nPodrobnosti mohou být uvedeny v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} knize smazaných stránek].\nPokud chcete, můžete si přesto [$1 tuto revizi prohlédnout].",
        "rev-suppressed-text-unhide": "Tato revize byla '''utajena'''.\nPodrobnosti mohou být uvedeny v [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} záznamu utajení].\nPokud chcete, můžete si přesto [$1 tuto revizi prohlédnout].",
        "rev-deleted-text-view": "Tato revize byla '''smazána'''.\nMůžete si ji prohlédnout; podrobnosti jsou uvedeny v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} knize smazaných stránek].",
        "revdelete-text-text": "Smazané editace se budou i nadále zobrazovat v historii stránky, ale části jejich obsahu nebudou veřejně přístupné.",
        "revdelete-text-file": "Smazané verze souborů se budou i nadále zobrazovat v historii stránky, ale části jejich obsahu nebudou veřejně přístupné.",
        "logdelete-text": "Smazané protokolovací záznamy se budou i nadále zobrazovat v historii stránky, ale části jejich obsahu nebudou veřejně přístupné.",
 -      "revdelete-text-others": "Ostatní správci {{grammar:2sg|{{SITENAME}}}} budou i nadále moci ke skrytému obsahu přistupovat a mohou ho pomocí stejného rozhraní obnovit, pokud nejsou nastavena dodatečná omezení.",
 +      "revdelete-text-others": "Ostatní správci budou i nadále moci ke skrytému obsahu přistupovat a mohou ho obnovit, pokud nejsou nastavena dodatečná omezení.",
        "revdelete-confirm": "Prosím potvrďte, že to opravdu chcete učinit, že si uvědomujete důsledky a že je to v souladu s [[{{MediaWiki:Policy-url}}|pravidly]].",
        "revdelete-suppress-text": "Utajování by se mělo používat '''pouze''' v následujících případech:\n* Potenciálně pomlouvačné informace\n* Nevhodné osobní údaje\n*: ''adresy bydliště a telefonní čísla, rodná čísla apod.''",
        "revdelete-legend": "Nastavit omezení viditelnosti",
        "mergehistory-empty": "Nelze sloučit žádnou verzi.",
        "mergehistory-success": "$3 {{PLURAL:$3|verze|verze|verzí}} stránky [[:$1]] {{PLURAL:$3|byla úspěšně sloučena|byly úspěšně sloučeny|bylo úspěšně sloučeno}} do stránky [[:$2]].",
        "mergehistory-fail": "Sloučení historií nelze provést. Překontrolujte zadané stránky a jejich historii.",
 +      "mergehistory-fail-toobig": "Nelze provést sloučení historie, protože by se přesouvalo více revizí, než je limit $1.",
        "mergehistory-no-source": "Zdrojová stránka $1 neexistuje.",
        "mergehistory-no-destination": "Cílová stránka $1 neexistuje.",
        "mergehistory-invalid-source": "Zdrojová stránka musí mít platný název.",
        "difference-missing-revision": "{{PLURAL:$2|Jedna z revizí|$2 revize|$2 revizí}} k požadovanému porovnání ($1) {{PLURAL:$2|neexistuje|neexistují|neexistuje}}.\n\nToto je obvykle způsobeno tím, že jste následovali zastaralý odkaz na historickou verzi stránky, jež byla smazána.\nPodrobnosti mohou být uvedeny v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} knize smazaných stránek].",
        "searchresults": "Výsledky hledání",
        "searchresults-title": "Výsledky hledání „$1“",
 -      "toomanymatches": "Požadavku odpovídá příliš mnoho záznamů, zkuste jiný dotaz.",
        "titlematches": "Stránky s odpovídajícím názvem",
        "textmatches": "Stránky s odpovídajícím textem",
        "notextmatches": "Žádné stránky textem neodpovídají.",
        "searchprofile-advanced-tooltip": "Nastavit jmenné prostory, ve kterých se má hledat",
        "search-result-size": "$1 ({{PLURAL:$2|1 slovo|$2 slova|$2 slov}})",
        "search-result-category-size": "{{PLURAL:$1|1 položka|$1 položky|$1 položek}} ({{PLURAL:$2|1 podkategorie|$2 podkategorie|$2 podkategorií}}, {{PLURAL:$3|1 soubor|$3 soubory|$3 souborů}})",
 -      "search-result-score": "Relevantnost: $1 %",
        "search-redirect": "(přesměrování $1)",
        "search-section": "(část $1)",
        "search-file-match": "(odpovídá obsahu souboru)",
        "search-interwiki-default": "Výsledky z $1:",
        "search-interwiki-more": "(více)",
        "search-relatedarticle": "Související",
 -      "searcheverything-enable": "Hledat ve všech jmenných prostorech",
        "searchrelated": "související",
        "searchall": "vše",
        "showingresults": "Níže zobrazuji nejvýše <strong>$1</strong> {{PLURAL:$1|výsledek|výsledky|výsledků}} počínaje od <strong>$2</strong>.",
        "showingresultsinrange": "Níže zobrazuji nejvýše <strong>$1</strong> {{PLURAL:$1|výsledek|výsledky|výsledků}} v rozsahu #<strong>$2</strong>–#<strong>$3</strong>.",
 -      "showingresultsnum": "Zobrazuji <strong>$3</strong> {{PLURAL:$3|výsledek|výsledky|výsledků}} počínaje od <strong>$2</strong>.",
        "showingresultsheader": "{{PLURAL:$5|Výsledek '''$1''' z '''$3'''|Výsledky '''$1–$2''' z '''$3'''}} pro '''$4'''",
        "search-nonefound": "Na váš dotaz nebyly nalezeny žádné výsledky.",
        "powersearch-legend": "Rozšířené vyhledávání",
        "powersearch-togglelabel": "Zaškrtnout:",
        "powersearch-toggleall": "Všechno",
        "powersearch-togglenone": "Nic",
 +      "powersearch-remember": "Zapamatovat si výběr pro budoucí vyhledávání",
        "search-external": "Externí hledání",
        "searchdisabled": "<p>Omlouváme se. Plnotextové vyhledávání je dočasně nedostupné. Zatím můžete zkusit vyhledávání Googlem; je ale možné, že jeho výsledky nemusí být aktuální.</p>",
        "search-error": "Při hledání došlo k chybě: $1",
        "allowemail": "Povolit e-mail od ostatních uživatelů",
        "prefs-searchoptions": "Vyhledávání",
        "prefs-namespaces": "Jmenné prostory",
 -      "defaultns": "Nebo hledat v těchto jmenných prostorech:",
        "default": "implicitní",
        "prefs-files": "Soubory",
        "prefs-custom-css": "Vlastní CSS",
        "right-deletedtext": "Prohlížení smazaného textu a rozdílů mezi smazanými verzemi",
        "right-browsearchive": "Vyhledávání ve smazaných stránkách",
        "right-undelete": "Obnovování smazaných stránek",
 -      "right-suppressrevision": "Prohlížení a obnovování revizí skrytých před správci",
 +      "right-suppressrevision": "Prohlížení, skrývání a odkrývání revizí skrytých před všemi uživateli",
 +      "right-viewsuppressed": "Prohlížení revizí skrytých před všemi uživateli",
        "right-suppressionlog": "Prohlížení skrytých protokolovacích záznamů",
        "right-block": "Blokování možnosti editace ostatním uživatelům",
        "right-blockemail": "Blokování možnosti poslat e-mail",
        "recentchanges-label-unpatrolled": "Tato změna dosud nebyla prověřena",
        "recentchanges-label-plusminus": "Velikost stránky se změnila o tolik bajtů",
        "recentchanges-legend-heading": "'''Legenda:'''",
 -      "recentchanges-legend-newpage": "(vizte též [[Special:NewPages|seznam nových stránek]])",
 +      "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vizte též [[Special:NewPages|seznam nových stránek]])",
        "recentchanges-legend-plusminus": "(''±123'')",
 -      "rcnotefrom": "Níže jsou změny od <strong>$2</strong> ({{PLURAL:$1|zobrazena|zobrazeny|zobrazeno}} nejvýše <strong>$1</strong>).",
 +      "rcnotefrom": "Níže {{PLURAL:$5|je změna|jsou změny}} od <strong>$3, $4</strong> ({{PLURAL:$1|zobrazena|zobrazeny|zobrazeno}} nejvýše <strong>$1</strong>).",
        "rclistfrom": "Ukázat nové změny, počínaje od $2, $3",
        "rcshowhideminor": "$1 malé editace",
        "rcshowhideminor-show": "Zobrazit",
        "windows-nonascii-filename": "Tato wiki nepodporuje názvy souborů obsahující zvláštní znaky.",
        "fileexists": "Soubor s tímto jménem již existuje, prosím podívejte se na <strong>[[:$1]]</strong>, pokud nevíte jistě, zda chcete tento soubor nahradit.\n[[$1|thumb]]",
        "filepageexists": "Popisná stránka pro soubor s tímto jménem již byla na <strong>[[:$1]]</strong> založena, avšak odpovídající soubor dosud neexistuje.\nShrnutí, které zde uvedete, se na popisné stránce nezobrazí.\nPokud tam chcete své shrnutí zobrazit, budete muset příslušnou stránku editovat ručně. [[$1|thumb]]",
 -      "fileexists-extension": "Již existuje soubor s podobným jménem: [[$2|thumb]]\n* Jméno načítaného souboru: <strong>[[:$1]]</strong>\n* Jméno existujícího souboru: <strong>[[:$2]]</strong>\nVyberte jiné jméno.",
 +      "fileexists-extension": "Již existuje soubor s podobným jménem: [[$2|thumb]]\n* Jméno načítaného souboru: <strong>[[:$1]]</strong>\n* Jméno existujícího souboru: <strong>[[:$2]]</strong>\nNechcete raději použít odlišnější jméno?",
        "fileexists-thumbnail-yes": "Tento soubor je zřejmě obrázek ve zmenšené velikosti ''(náhled)''. [[$1|thumb]]\nZkontrolujte soubor <strong>[[:$1]]</strong>.\nPokud je zmiňovaný soubor větší, ale jinak stejný, není potřeba zvlášť načítat jeho zmenšenou verzi.",
        "file-thumbnail-no": "Jméno souboru začíná na <strong>$1</strong>.\nMožná to je obrázek ve zmenšené velikosti ''(náhled)''.\nNačtěte soubor v plném rozlišením, pokud je k dispozici, nebo změňte jméno souboru.",
        "fileexists-forbidden": "Soubor s tímto názvem již existuje a není dovoleno ho přepsat.\nPokud chcete přesto soubor načíst, vraťte se a zvolte jiný název.\n[[File:$1|thumb|center|$1]]",
        "uploadwarning": "Upozornění k načítání",
        "uploadwarning-text": "Prosíme, upravte popis souboru níže a zkuste to znovu.",
        "savefile": "Uložit soubor",
 -      "uploadedimage": "načítá „[[$1]]“",
 -      "overwroteimage": "načtena nová verze \"[[$1]]\"",
        "uploaddisabled": "Načítání souborů vypnuto.",
        "copyuploaddisabled": "Načítání souborů prostřednictvím URL je vypnuto.",
        "uploaddisabledtext": "Načítání souborů je vypnuto.",
        "license": "Licence:",
        "license-header": "Licence",
        "nolicense": "Bez udání licence",
 +      "licenses-edit": "Editovat nabídku licencí",
        "license-nopreview": "(Náhled není dostupný)",
 -      "upload_source_url": " (platné, veřejně přístupné URL)",
 -      "upload_source_file": " (soubor ve vašem počítači)",
 +      "upload_source_url": "(vybraný soubor z platného, veřejně přístupného URL)",
 +      "upload_source_file": "(vybraný soubor z vašeho počítače)",
 +      "listfiles-delete": "smazat",
        "listfiles-summary": "Tato speciální stránka zobrazuje všechny načtené soubory.",
        "listfiles_search_for": "Hledat soubor podle názvu:",
        "imgfile": "soubor",
        "filedelete-maintenance": "Mazání a obnovování souborů je kvůli údržbě dočasně vypnuto.",
        "filedelete-maintenance-title": "Soubor nelze smazat",
        "mimesearch": "Hledání podle MIME typu",
 -      "mimesearch-summary": "Tato stránka umožňuje filtrovat soubory podle MIME typu.<br />\nVstup: <code>typ obsahu/podtyp</code>, např. <code>image/jpeg</code>.",
 +      "mimesearch-summary": "Tato stránka umožňuje filtrovat soubory podle MIME typu.<br />\nVstup: <code>typ obsahu/podtyp</code> nebo <code>typ obsahu/*</code>, např. <code>image/jpeg</code>.",
        "mimetype": "MIME typ:",
        "download": "stažení",
        "unwatchedpages": "Nesledované stránky",
        "wantedpages-badtitle": "Výsledky obsahují neplatný název: $1",
        "wantedfiles": "Chybějící soubory",
        "wantedfiletext-cat": "Následující soubory se používají, ale neexistují. Soubory ze vzdálených úložišť zde mohou být uvedeny, přestože existují. Taková falešná pozitiva budou zobrazena <del>přeškrtnutě</del>. Stránky, které vkládají neexistující soubory, jsou navíc uvedeny v [[:$1]].",
 +      "wantedfiletext-cat-noforeign": "Následující soubory se používají, ale neexistují. Stránky, které používají neexistující soubory, jsou navíc uvedeny v [[:$1]].",
        "wantedfiletext-nocat": "Následující soubory se používají, ale neexistují. Soubory ze vzdálených úložišť zde mohou být uvedeny, přestože existují. Taková falešná pozitiva budou zobrazena <del>přeškrtnutě</del>.",
 +      "wantedfiletext-nocat-noforeign": "Následující soubory se používají, ale neexistují.",
        "wantedtemplates": "Chybějící šablony",
        "mostlinked": "Nejodkazovanější stránky",
        "mostlinkedcategories": "Nejpoužívanější kategorie",
 -      "mostlinkedtemplates": "Nejvkládanější šablony",
 +      "mostlinkedtemplates": "Nejvkládanější stránky",
        "mostcategories": "Stránky s nejvyšším počtem kategorií",
        "mostimages": "Nejpoužívanější soubory",
        "mostinterwikis": "Stránky s nejvyšším počtem mezijazykových odkazů",
        "watchlist-details": "Na vašem seznamu sledovaných stránek {{PLURAL:$1|je $1 stránka|jsou $1 stránky|je $1 stránek}}, nepočítaje v to diskusní stránky.",
        "wlheader-enotif": "Upozorňování e-mailem je zapnuto.",
        "wlheader-showupdated": "Stránky, které se změnily od vaší poslední návštěvy, jsou zobrazeny '''tučně'''.",
 -      "wlnote2": "Níže jsou změny za {{PLURAL:$1|poslední hodinu|poslední <strong>$1</strong> hodiny|posledních <strong>$1</strong> hodin}} do $3, $2.",
 +      "wlnote": "Níže {{PLURAL:$1|je poslední změna|jsou poslední <strong>$1</strong> změny|je posledních <strong>$1</strong> změn}} za {{PLURAL:$2|poslední hodinu|poslední <strong>$2</strong> hodiny|posledních <strong>$2</strong> hodin}} do $4, $3.",
        "wlshowlast": "Ukázat posledních $1 hodin $2 dnů $3",
        "watchlist-options": "Možnosti sledovaných stránek",
        "watching": "Přidávám na seznam sledovaných stránek…",
        "autoblockid": "Autoblok #$1",
        "block": "Zablokovat uživatele",
        "unblock": "Odblokovat uživatele",
-       "blockip": "Zablokovat uživatele",
+       "blockip": "Zablokovat {{GENDER:$1|uživatele|uživatelku}}",
        "blockip-legend": "Zablokovat uživatele",
        "blockiptext": "Tento formulář slouží k zablokování editací z konkrétní IP adresy nebo uživatelského jména.\nToto by mělo být používáno jen v souladu s [[{{MediaWiki:Policy-url}}|pravidly]].\nUdejte přesný důvod níže (například ocitujte, které stránky byly poškozeny).",
        "ipaddressorusername": "IP adresa nebo uživatelské jméno:",
        "ipb-unblock-addr": "Odblokovat {{GENDER:$1|uživatele|uživatelku|uživatele nebo IP adresu}} $1",
        "ipb-unblock": "Odblokovat uživatele nebo IP adresu",
        "ipb-blocklist": "Zobrazit probíhající bloky",
-       "ipb-blocklist-contribs": "Příspěvky uživatele $1",
+       "ipb-blocklist-contribs": "Příspěvky {{GENDER:$1|uživatele|uživatelky}} $1",
        "unblockip": "Odblokovat uživatele",
        "unblockiptext": "Tímto formulářem je možno obnovit právo blokované IP adresy či uživatele opět přispívat do {{grammar:2sg|{{SITENAME}}}}.",
        "ipusubmit": "Odblokovat",
        "import-invalid-interwiki": "Ze zadané wiki nelze importovat.",
        "import-error-edit": "Stránka „$1“ se nenaimportovala, protože nemáte oprávnění ji editovat.",
        "import-error-create": "Stránka „$1“ se nenaimportovala, protože nemáte oprávnění ji založit.",
 -      "import-error-interwiki": "Stránka „$1“ se neimportuje, protože její název je vyhrazen pro externí odkazy (interwiki).",
 -      "import-error-special": "Stránka „$1“ se neimportuje, protože patří do speciálního jmenného prostoru, do kterého stránky nepatří.",
 -      "import-error-invalid": "Stránka „$1“ se neimportuje, protože její název je neplatný.",
 +      "import-error-interwiki": "Stránka „$1“ se nenaimportovala, protože její název je vyhrazen pro externí odkazy (interwiki).",
 +      "import-error-special": "Stránka „$1“ se nenaimportovala, protože patří do speciálního jmenného prostoru, ve kterém stránky být nemohou.",
 +      "import-error-invalid": "Stránka „$1“ se nenaimportovala, protože název, do kterého by se naimportovala, je na této wiki nepoužitelný.",
        "import-error-unserialize": "Nepodařilo se deserializovat revizi $2 stránky „$1“. Revize měla používat model obsahu $3 serializovaný jako $4.",
        "import-error-bad-location": "Revizi $2 používající obsahový model $3 nelze uložit na \"$1\" na této wiki, neboť tento model není na této stránce podporován.",
        "import-options-wrong": "{{PLURAL:$2|Chybná volba|Chybné volby}}: <nowiki>$1</nowiki>",
        "importlogpage": "Kniha importů",
        "importlogpagetext": "Na této stránce se zobrazují správcovské importy stránek včetně historie editací z jiných wiki.",
        "import-logentry-upload": "naimportoval [[$1]] načtením souboru",
 -      "import-logentry-upload-detail": "$1 {{PLURAL:$1|revizi|revize|revizí}}",
 +      "import-logentry-upload-detail": "{{PLURAL:$1|naimportována $1 revize|naimportovány $1 revize|naimportováno $1 revizí}}",
        "import-logentry-interwiki": "přenesl $1",
 -      "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revizi|revize|revizí}} z $2",
 +      "import-logentry-interwiki-detail": "{{PLURAL:$1|naimportována $1 revize|naimportovány $1 revize|naimportováno $1 revizí}} z $2",
        "javascripttest": "Testování JavaScriptu",
        "javascripttest-title": "Spouštějí se testy v $1",
        "javascripttest-pagetext-noframework": "Tato stránka je vyhrazena pro spouštění testů JavaScriptu.",
        "tooltip-summary": "Zadejte stručné shrnutí",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* Zde uvedené CSS bude ovlivňovat všechny styly */",
 -      "monobook.css": "/* Zde uvedené CSS bude ovlivňovat pouze styl „Monobook“ */",
 -      "vector.css": "/* Zde uvedené CSS bude ovlivňovat pouze styl „Vektor“ */",
        "print.css": "/* Zde uvedené CSS bude ovlivňovat tiskový výstup */",
        "noscript.css": "/* Zde uvedené CSS bude ovlivňovat uživatele s vypnutým JavaScriptem */",
        "group-autoconfirmed.css": "/* Zde uvedené CSS bude ovlivňovat pouze automaticky schválené uživatele */",
        "group-sysop.css": "/* Zde uvedené CSS bude ovlivňovat pouze správce */",
        "group-bureaucrat.css": "/* Zde uvedené CSS bude ovlivňovat pouze byrokraty */",
        "common.js": "/* Zde uvedený JavaScript bude použit pro všechny uživatele při načtení každé stránky. */",
 -      "monobook.js": "/* JavaScript pro uživatele používající vzhled MonoBook */",
 -      "vector.js": "/* JavaScript pro uživatele používající vzhled „Vektor“ */",
        "group-autoconfirmed.js": "/* Zde uvedený JavaScript bude použit pouze pro automaticky schválené uživatele */",
        "group-user.js": "/* Zde uvedený JavaScript bude použit pouze pro registrované uživatele */",
        "group-bot.js": "/* Zde uvedený JavaScript bude použit pouze pro boty */",
        "pageinfo-category-pages": "Počet stránek",
        "pageinfo-category-subcats": "Počet podkategorií",
        "pageinfo-category-files": "Počet souborů",
 -      "skinname-vector": "Vektor",
        "markaspatrolleddiff": "Označit jako prověřené",
        "markaspatrolledtext": "Označit tuto stránku jako prověřenou",
        "markedaspatrolled": "Označeno jako prověřené",
        "autosumm-replace": "Obsah stránky nahrazen textem „$1“",
        "autoredircomment": "Přesměrování na [[$1]]",
        "autosumm-new": "Založena nová stránka s textem „$1“",
 +      "autosumm-newblank": "Založena prázdná stránka",
        "size-kilobytes": "$1 KB",
        "lag-warn-normal": "Změny za {{PLURAL:$1|poslední sekundu|poslední $1 sekundy|posledních $1 sekund}} nemusí být v tomto seznamu zobrazeny.",
        "lag-warn-high": "Protože je databázový server právě mimořádně vytížen, nemusí být změny za {{PLURAL:$1|poslední sekundu|poslední $1 sekundy|posledních $1 sekund}} v tomto seznamu zobrazeny.",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskuse]])",
        "unknown_extension_tag": "Neznámá značka rozšíření: „$1“",
        "duplicate-defaultsort": "Upozornění: Implicitní klíč řazení (DEFAULTSORTKEY) „$2“ přepisuje dříve nastavenou hodnotu „$1“.",
 +      "duplicate-displaytitle": "<strong>Upozornění:</strong> Předchozí zobrazovaný název „$1“ je nahrazen zobrazovaným názvem „$2“.",
        "version": "Verze",
        "version-extensions": "Nainstalovaná rozšíření",
 +      "version-skins": "Nainstalované vzhledy",
        "version-specialpages": "Speciální stránky",
        "version-parserhooks": "Přípojné body syntaktického analyzátoru",
        "version-variables": "Proměnné",
        "version-antispam": "Ochrana proti spamu",
 -      "version-skins": "Vzhledy",
        "version-other": "Jiné",
        "version-mediahandlers": "Obsluha médií",
        "version-hooks": "Přípojné body",
        "version-hook-name": "Název přípojného bodu",
        "version-hook-subscribedby": "Volán z",
        "version-version": "($1)",
 +      "version-no-ext-name": "[bez názvu]",
        "version-license": "Licence MediaWiki",
        "version-ext-license": "Licence",
        "version-ext-colheader-name": "Rozšíření",
 +      "version-skin-colheader-name": "Vzhled",
        "version-ext-colheader-version": "Verze",
        "version-ext-colheader-license": "Licence",
        "version-ext-colheader-description": "Popis",
        "expand_templates_remove_nowiki": "Potlačit ve výsledku značky <nowiki>",
        "expand_templates_generate_xml": "Zobrazit syntaktický strom v XML",
        "expand_templates_generate_rawhtml": "Zobrazit surové HTML",
 -      "expand_templates_preview": "Náhled"
 +      "expand_templates_preview": "Náhled",
 +      "pagelanguage": "Volba jazyka stránky",
 +      "pagelang-name": "Stránka",
 +      "pagelang-language": "Jazyk",
 +      "pagelang-use-default": "Použít implicitní jazyk",
 +      "pagelang-select-lang": "Vybrat jazyk",
 +      "right-pagelang": "Změnit jazyk stránky",
 +      "action-pagelang": "měnit jazyk stránky",
 +      "log-name-pagelang": "Kniha změn jazyků",
 +      "log-description-pagelang": "Toto je protokol změn jazyků stránek.",
 +      "logentry-pagelang-pagelang": "$1 {{GENDER:$2|změnil|změnila}} jazyk stránky $3 z $4 na $5."
  }
diff --combined languages/i18n/en.json
@@@ -17,7 -17,6 +17,7 @@@
        "tog-watchdefault": "Add pages and files I edit to my watchlist",
        "tog-watchmoves": "Add pages and files I move to my watchlist",
        "tog-watchdeletion": "Add pages and files I delete to my watchlist",
 +      "tog-watchrollback": "Add pages where I have performed a rollback to my watchlist",
        "tog-minordefault": "Mark all edits minor by default",
        "tog-previewontop": "Show preview before edit box",
        "tog-previewonfirst": "Show preview on first edit",
        "faqpage": "Project:FAQ",
        "sitetitle": "{{SITENAME}}",
        "sitesubtitle": "",
 -      "vector-action-addsection": "Add topic",
 -      "vector-action-delete": "Delete",
 -      "vector-action-move": "Move",
 -      "vector-action-protect": "Protect",
 -      "vector-action-undelete": "Undelete",
 -      "vector-action-unprotect": "Change protection",
 -      "vector-view-create": "Create",
 -      "vector-view-edit": "Edit",
 -      "vector-view-history": "View history",
 -      "vector-view-view": "Read",
 -      "vector-view-viewsource": "View source",
        "actions": "Actions",
        "namespaces": "Namespaces",
        "variants": "Variants",
        "talkpagelinktext": "Talk",
        "specialpage": "Special page",
        "personaltools": "Personal tools",
 -      "postcomment": "New section",
        "addsection": "+",
        "articlepage": "View content page",
        "talk": "Discussion",
        "hidetoc": "hide",
        "collapsible-collapse": "Collapse",
        "collapsible-expand": "Expand",
 +      "confirmable-confirm": "Are {{GENDER:$1|you}} sure?",
 +      "confirmable-yes": "Yes",
 +      "confirmable-no": "No",
        "thisisdeleted": "View or restore $1?",
        "viewdeleted": "View $1?",
        "restorelink": "{{PLURAL:$1|one deleted edit|$1 deleted edits}}",
        "invalidtitle-knownnamespace": "Invalid title with namespace \"$2\" and text \"$3\"",
        "invalidtitle-unknownnamespace": "Invalid title with unknown namespace number $1 and text \"$2\"",
        "exception-nologin": "Not logged in",
 -      "exception-nologin-text": "Please [[Special:Userlogin|log in]] to be able to access this page or action.",
 +      "exception-nologin-text": "Please log in to be able to access this page or action.",
        "exception-nologin-text-manual": "Please $1 to be able to access this page or action.",
        "virus-badscanner": "Bad configuration: Unknown virus scanner: <em>$1</em>",
        "virus-scanfailed": "scan failed (code $1)",
        "externaldberror": "There was either an authentication database error or you are not allowed to update your external account.",
        "login": "Log in",
        "nav-login-createaccount": "Log in / create account",
 -      "loginprompt": "You must have cookies enabled to log in to {{SITENAME}}.",
 +      "loginprompt": "",
        "userlogin": "Log in / create account",
        "userloginnocreate": "Log in",
        "logout": "Log out",
        "preview": "Preview",
        "showpreview": "Show preview",
        "showdiff": "Show changes",
 +      "blankarticle": "<strong>Warning:</strong> The page you are creating is blank.\nIf you click \"{{int:savearticle}}\" again, the page will be created without any content.",
        "anoneditwarning": "<strong>Warning:</strong> You are not logged in.\nYour IP address will be recorded in this page's edit history.",
        "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.\nIf you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
        "parser-template-loop-warning": "Template loop detected: [[$1]]",
        "parser-template-recursion-depth-warning": "Template recursion depth limit exceeded ($1)",
        "language-converter-depth-warning": "Language converter depth limit exceeded ($1)",
 -      "node-count-exceeded-category": "Pages where node-count is exceeded",
 -      "node-count-exceeded-category-desc": "A category for pages where the node-count is exceeded.",
 -      "node-count-exceeded-warning": "Page exceeded the node-count",
 +      "node-count-exceeded-category": "Pages where node count is exceeded",
 +      "node-count-exceeded-category-desc": "The page exceeds the maximum node count.",
 +      "node-count-exceeded-warning": "Page exceeded the node count",
        "expansion-depth-exceeded-category": "Pages where expansion depth is exceeded",
 -      "expansion-depth-exceeded-category-desc": "This is a category for pages where the expansion depth is exceeded.",
 +      "expansion-depth-exceeded-category-desc": "The page exceeds the maximum expansion depth.",
        "expansion-depth-exceeded-warning": "Page exceeded the expansion depth",
        "parser-unstrip-loop-warning": "Unstrip loop detected",
        "parser-unstrip-recursion-limit": "Unstrip recursion limit exceeded ($1)",
        "currentrev": "Latest revision",
        "currentrev-asof": "Latest revision as of $1",
        "revisionasof": "Revision as of $1",
 -      "revision-info": "Revision as of $1 by $2",
 +      "revision-info": "Revision as of $1 by {{GENDER:$6|$2}}$7",
        "revision-info-current": "-",
        "revision-nav": "($1) $2{{int:pipe-separator}}$3 ($4){{int:pipe-separator}}$5 ($6)",
        "previousrevision": "← Older revision",
        "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 <strong>deleted</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
 +      "rev-suppressed-text-permission": "This page revision has been <strong>suppressed</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
        "rev-deleted-text-unhide": "This page revision has been <strong>deleted</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].\nYou can still [$1 view this revision] if you wish to proceed.",
        "rev-suppressed-text-unhide": "This page revision has been <strong>suppressed</strong>.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].\nYou can still [$1 view this revision] if you wish to proceed.",
        "rev-deleted-text-view": "This page revision has been <strong>deleted</strong>.\nYou can view it; details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "revdelete-text-text": "Deleted revisions will still appear in the page history, but parts of their content will be inaccessible to the public.",
        "revdelete-text-file": "Deleted file versions will still appear in the file history, but parts of their content will be inaccessible to the public.",
        "logdelete-text": "Deleted log events will still appear in the logs, but parts of their content will be inaccessible to the public.",
 -      "revdelete-text-others": "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-text-others": "Other administrators will still be able to access the hidden content and to undelete it, 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 <strong>only</strong> be used for the following cases:\n* potentially libelous information\n* inappropriate personal information\n*: <em>home addresses and telephone numbers, national identification numbers, etc.</em>",
        "revdelete-legend": "Set visibility restrictions",
        "mergehistory-empty": "No revisions can be merged.",
        "mergehistory-success": "$3 {{PLURAL:$3|revision|revisions}} of [[:$1]] successfully merged into [[:$2]].",
        "mergehistory-fail": "Unable to perform history merge, please recheck the page and time parameters.",
 +      "mergehistory-fail-toobig" : "Unable to perform history merge as more than the limit of $1 {{PLURAL:$1|revision|revisions}} would be moved.",
        "mergehistory-no-source": "Source page $1 does not exist.",
        "mergehistory-no-destination": "Destination page $1 does not exist.",
        "mergehistory-invalid-source": "Source page must be a valid title.",
        "search-summary": "",
        "searchresults": "Search results",
        "searchresults-title": "Search results for \"$1\"",
 -      "toomanymatches": "Too many matches were returned, please try a different query",
        "titlematches": "Page title matches",
        "textmatches": "Page text matches",
        "notextmatches": "No page text matches",
        "searchprofile-advanced-tooltip": "Search in custom namespaces",
        "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 words}})",
        "search-result-category-size": "{{PLURAL:$1|1 member|$1 members}} ({{PLURAL:$2|1 subcategory|$2 subcategories}}, {{PLURAL:$3|1 file|$3 files}})",
 -      "search-result-score": "Relevance: $1%",
        "search-redirect": "(redirect $1)",
        "search-section": "(section $1)",
        "search-file-match": "(matches file content)",
        "searchall": "all",
        "showingresults": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} starting with #<strong>$2</strong>.",
        "showingresultsinrange": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} in range #<strong>$2</strong> to #<strong>$3</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",
        "preferences-summary": "",
        "mypreferences": "Preferences",
        "prefs-edits": "Number of edits:",
 -      "prefsnologintext2": "Please $1 to change your preferences.",
 +      "prefsnologintext2": "Please login to change your preferences.",
        "prefs-skin": "Skin",
        "skin-preview": "Preview",
        "datedefault": "No preference",
        "right-deletedtext": "View deleted text and changes between deleted revisions",
        "right-browsearchive": "Search deleted pages",
        "right-undelete": "Undelete a page",
 -      "right-suppressrevision": "Review and restore revisions hidden from administrators",
 +      "right-suppressrevision": "View, hide and unhide specific revisions of pages from any user",
 +      "right-viewsuppressed": "View revisions hidden from any user",
        "right-suppressionlog": "View private logs",
        "right-block": "Block other users from editing",
        "right-blockemail": "Block a user from sending email",
        "recentchanges-label-unpatrolled": "This edit has not yet been patrolled",
        "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-newpage": "{{int:recentchanges-label-newpage}} (also see [[Special:NewPages|list of new pages]])",
 +      "recentchanges-legend-minor": "{{int:recentchanges-label-minor}}",
 +      "recentchanges-legend-bot": "{{int:recentchanges-label-bot}}",
 +      "recentchanges-legend-unpatrolled": "{{int:recentchanges-label-unpatrolled}}",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
 -      "rcnotefrom": "Below are the changes since <strong>$2</strong> (up to <strong>$1</strong> shown).",
 +      "rcnotefrom": "Below {{PLURAL:$5|is the change|are the changes}} since <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
        "rclistfrom": "Show new changes starting from $2, $3",
        "rcshowhideminor": "$1 minor edits",
        "rcshowhideminor-show": "Show",
        "largefileserver": "This file is bigger than the server is configured to allow.",
        "emptyfile": "The file you uploaded seems to be empty.\nThis might be due to a typo in the filename.\nPlease check whether you really want to upload this file.",
        "windows-nonascii-filename": "This wiki does not support filenames with special characters.",
 -      "fileexists": "A file with this name exists already, please check <strong>[[:$1]]</strong> if you are not sure if you want to change it.\n[[$1|thumb]]",
 +      "fileexists": "A file with this name exists already, please check <strong>[[:$1]]</strong> if {{GENDER:|you}} are not sure if you want to change it.\n[[$1|thumb]]",
        "filepageexists": "The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.\nThe summary you enter will not appear on the description page.\nTo make your summary appear there, you will need to manually edit it.\n[[$1|thumb]]",
 -      "fileexists-extension": "A file with a similar name exists: [[$2|thumb]]\n* Name of the uploading file: <strong>[[:$1]]</strong>\n* Name of the existing file: <strong>[[:$2]]</strong>\nPlease choose a different name.",
 +      "fileexists-extension": "A file with a similar name exists: [[$2|thumb]]\n* Name of the uploading file: <strong>[[:$1]]</strong>\n* Name of the existing file: <strong>[[:$2]]</strong>\nDo you perhaps want to use a more distinctive name?",
        "fileexists-thumbnail-yes": "The file seems to be an image of reduced size <em>(thumbnail)</em>.\n[[$1|thumb]]\nPlease check the file <strong>[[:$1]]</strong>.\nIf 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>.\nIt seems to be an image of reduced size <em>(thumbnail)</em>.\nIf 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.\nIf you still want to upload your file, please go back and use a new name.\n[[File:$1|thumb|center|$1]]",
        "license-header": "Licensing",
        "nolicense": "None selected",
        "licenses": "-",
 +      "licenses-edit": "Edit license options",
        "license-nopreview": "(Preview not available)",
 -      "upload_source_url": "(a valid, publicly accessible URL)",
 -      "upload_source_file": "(a file on your computer)",
 +      "upload_source_url": "(your chosen file from a valid, publicly accessible URL)",
 +      "upload_source_file": "(your chosen file from your computer)",
 +      "listfiles-delete": "delete",
        "listfiles-summary": "This special page shows all uploaded files.",
        "listfiles_search_for": "Search for media name:",
        "imgfile": "file",
        "filedelete-maintenance": "Deletion and restoration of files temporarily disabled during maintenance.",
        "filedelete-maintenance-title": "Cannot delete file",
        "mimesearch": "MIME search",
 -      "mimesearch-summary": "This page enables the filtering of files for their MIME type.\nInput: contenttype/subtype, e.g. <code>image/jpeg</code>.",
 +      "mimesearch-summary": "This page enables the filtering of files for their MIME type.\nInput: contenttype/subtype or contenttype/*, e.g. <code>image/jpeg</code>.",
        "mimetype": "MIME type:",
        "download": "download",
        "unwatchedpages": "Unwatched pages",
        "wantedfiles": "Wanted files",
        "wantedfiles-summary": "",
        "wantedfiletext-cat": "The following files are used but do not exist. Files from foreign repositories may be listed despite existing. Any such false positives will be <del>struck out</del>. Additionally, pages that embed files that do not exist are listed in [[:$1]].",
 +      "wantedfiletext-cat-noforeign": "The following files are used but do not exist. Additionally, pages that embed files that do not exist are listed in [[:$1]].",
        "wantedfiletext-nocat": "The following files are used but do not exist. Files from foreign repositories may be listed despite existing. Any such false positives will be <del>struck out</del>.",
 +      "wantedfiletext-nocat-noforeign": "The following files are used but do not exist.",
        "wantedtemplates": "Wanted templates",
        "wantedtemplates-summary": "",
        "mostlinked": "Most linked-to pages",
        "mostlinked-summary": "",
        "mostlinkedcategories": "Most linked-to categories",
        "mostlinkedcategories-summary": "",
 -      "mostlinkedtemplates": "Most linked-to templates",
 +      "mostlinkedtemplates": "Most transcluded pages",
        "mostlinkedtemplates-summary": "",
        "mostcategories": "Pages with the most categories",
        "mostcategories-summary": "",
        "trackingcategories-desc": "Category inclusion criteria",
        "noindex-category-desc": "The page is not indexed by robots because it has the magic word <code><nowiki>__NOINDEX__</nowiki></code> on it and is in a namespace where that flag is allowed.",
        "index-category-desc": "The page has a <code><nowiki>__INDEX__</nowiki></code> on it (and is in a namespace where that flag is allowed), and hence is indexed by robots where it normally wouldn't be.",
 -      "post-expand-template-inclusion-category-desc": "After expanding all the templates, the page size is bigger than <code>$wgMaxArticleSize</code>, so some templates weren't expanded.",
 -      "post-expand-template-argument-category-desc": "After expanding a template argument (something in triple braces, like <code>{{{Foo}}}</code>), the page is bigger than <code>$wgMaxArticleSize</code>.",
 -      "expensive-parserfunction-category-desc": "Too many expensive parser functions (like <code>#ifexist</code>) included on a page. See [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
 -      "broken-file-category-desc": "Category added if the page contains a broken file link (a link to embed a file when the file does not exist).",
 -      "hidden-category-category-desc": "This is a category with <code><nowiki>__HIDDENCAT__</nowiki></code> on it, which prevents it from showing up in the category links box on pages, by default.",
 +      "post-expand-template-inclusion-category-desc": "The page size is bigger than <code>$wgMaxArticleSize</code> after expanding all the templates, so some templates were not expanded.",
 +      "post-expand-template-argument-category-desc": "The page is bigger than <code>$wgMaxArticleSize</code> after expanding a template argument (something in triple braces, like <code>{{{Foo}}}</code>).",
 +      "expensive-parserfunction-category-desc": "The page uses too many expensive parser functions (like <code>#ifexist</code>). See [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
 +      "broken-file-category-desc": "The page contains a broken file link (a link to embed a file when the file does not exist).",
 +      "hidden-category-category-desc": "The category contains <code><nowiki>__HIDDENCAT__</nowiki></code> in its page content, which prevents it from showing up in the category links box on pages by default.",
        "trackingcategories-nodesc": "No description available.",
        "trackingcategories-disabled": "Category is disabled",
        "mailnologin": "No send address",
        "mywatchlist": "Watchlist",
        "watchlistfor2": "For $1 $2",
        "nowatchlist": "You have no items on your watchlist.",
 -      "watchlistanontext": "Please $1 to view or edit items on your watchlist.",
 +      "watchlistanontext": "Please login to view or edit items on your watchlist.",
        "watchnologin": "Not logged in",
        "addwatch": "Add to watchlist",
        "addedwatchtext": "The page \"[[:$1]]\" has been added to your [[Special:Watchlist|watchlist]].\nFuture changes to this page and its associated talk page will be listed there.",
        "watchlist-details": "{{PLURAL:$1|$1 page|$1 pages}} on your watchlist, not separately counting talk pages.",
        "wlheader-enotif": "Email notification is enabled.",
        "wlheader-showupdated": "Pages that have been changed since you last visited them are shown in <strong>bold</strong>.",
 -      "wlnote2": "Below are the changes in the last {{PLURAL:$1|hour|<strong>$1</strong> hours}}, as of $2, $3.",
 +      "wlnote": "Below {{PLURAL:$1|is the last change|are the last <strong>$1</strong> changes}} in the last {{PLURAL:$2|hour|<strong>$2</strong> hours}}, as of $3, $4.",
        "wlshowlast": "Show last $1 hours $2 days $3",
        "watchlist-options": "Watchlist options",
        "watching": "Watching...",
        "block": "Block user",
        "unblock": "Unblock user",
        "unblock-summary": "",
-       "blockip": "Block user",
+       "blockip": "Block {{GENDER:$1|user}}",
        "blockip-legend": "Block user",
        "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalized).",
        "ipaddressorusername": "IP address or username:",
        "ipb-unblock-addr": "Unblock $1",
        "ipb-unblock": "Unblock a username or IP address",
        "ipb-blocklist": "View existing blocks",
-       "ipb-blocklist-contribs": "Contributions for $1",
+       "ipb-blocklist-contribs": "Contributions for {{GENDER:$1|$1}}",
        "unblockip": "Unblock user",
        "unblockiptext": "Use the form below to restore write access to a previously blocked IP address or username.",
        "ipusubmit": "Remove this block",
        "import-upload": "Upload XML data",
        "import-token-mismatch": "Loss of session data.\nPlease try again.",
        "import-invalid-interwiki": "Cannot import from the specified wiki.",
 -      "import-error-edit": "Page \"$1\" is not imported because you are not allowed to edit it.",
 -      "import-error-create": "Page \"$1\" is not imported because you are not allowed to create it.",
 -      "import-error-interwiki": "Page \"$1\" is not imported because its name is reserved for external linking (interwiki).",
 -      "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-edit": "Page \"$1\" was not imported because you are not allowed to edit it.",
 +      "import-error-create": "Page \"$1\" was not imported because you are not allowed to create it.",
 +      "import-error-interwiki": "Page \"$1\" was not imported because its name is reserved for external linking (interwiki).",
 +      "import-error-special": "Page \"$1\" was not imported because it belongs to a special namespace that does not allow pages.",
 +      "import-error-invalid": "Page \"$1\" was not imported because the name to which it would be imported is invalid on this wiki.",
        "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 cannot 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>",
        "importlogpage": "Import log",
        "importlogpagetext": "Administrative imports of pages with edit history from other wikis.",
        "import-logentry-upload": "imported [[$1]] by file upload",
 -      "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision|revisions}}",
 +      "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision|revisions}} imported",
        "import-logentry-interwiki": "transwikied $1",
 -      "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision|revisions}} from $2",
 +      "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision|revisions}} imported from $2",
        "javascripttest": "JavaScript testing",
        "javascripttest-backlink": "< $1",
        "javascripttest-title": "Running $1 tests",
        "tooltip-summary": "Enter a short summary",
        "interlanguage-link-title": "$1 – $2",
        "interlanguage-link-title-langonly": "$1",
 +      "interlanguage-link-title-nonlang": "$1 – $2",
 +      "interlanguage-link-title-nonlangonly": "$1",
        "common.css": "/* CSS placed here will be applied to all skins */",
 -      "monobook.css": "/* CSS placed here will affect users of the MonoBook skin */",
 -      "vector.css": "/* CSS placed here will affect users of the Vector skin */",
        "print.css": "/* CSS placed here will affect the print output */",
        "noscript.css": "/* CSS placed here will affect users with JavaScript disabled */",
        "group-autoconfirmed.css": "/* CSS placed here will affect autoconfirmed users only */",
        "group-sysop.css": "/* CSS placed here will affect sysops only */",
        "group-bureaucrat.css": "/* CSS placed here will affect bureaucrats only */",
        "common.js": "/* Any JavaScript here will be loaded for all users on every page load. */",
 -      "monobook.js": "/* Any JavaScript here will be loaded for users using the MonoBook skin */",
 -      "vector.js": "/* Any JavaScript here will be loaded for users using the Vector skin */",
        "group-autoconfirmed.js": "/* Any JavaScript here will be loaded for autoconfirmed users only */",
        "group-user.js": "/* Any JavaScript here will be loaded for registered users only */",
        "group-bot.js": "/* Any JavaScript here will be loaded for bots only */",
        "pageinfo-category-pages": "Number of pages",
        "pageinfo-category-subcats": "Number of subcategories",
        "pageinfo-category-files": "Number of files",
 -      "skinname-monobook": "MonoBook",
 -      "skinname-vector": "Vector",
        "markaspatrolleddiff": "Mark as patrolled",
        "markaspatrolledlink": "[$1]",
        "markaspatrolledtext": "Mark this page as patrolled",
        "autosumm-replace": "Replaced content with \"$1\"",
        "autoredircomment": "Redirected page to [[$1]]",
        "autosumm-new": "Created page with \"$1\"",
 +      "autosumm-newblank": "Created blank page",
        "autoblock_whitelist": "AOL http://webmaster.info.aol.com/proxyinfo.html\n*64.12.96.0/19\n*149.174.160.0/20\n*152.163.240.0/21\n*152.163.248.0/22\n*152.163.252.0/23\n*152.163.96.0/22\n*152.163.100.0/23\n*195.93.32.0/22\n*195.93.48.0/22\n*195.93.64.0/19\n*195.93.96.0/19\n*195.93.16.0/20\n*198.81.0.0/22\n*198.81.16.0/20\n*198.81.8.0/23\n*202.67.64.128/25\n*205.188.192.0/20\n*205.188.208.0/23\n*205.188.112.0/20\n*205.188.146.144/30\n*207.200.112.0/21",
        "size-bytes": "$1 B",
        "size-kilobytes": "$1 KB",
        "timezone-utc": "UTC",
        "unknown_extension_tag": "Unknown extension tag \"$1\"",
        "duplicate-defaultsort": "<strong>Warning:</strong> Default sort key \"$2\" overrides earlier default sort key \"$1\".",
 +      "duplicate-displaytitle": "<strong>Warning:</strong> Display title \"$2\" overrides earlier display title \"$1\".",
        "version": "Version",
        "version-summary": "",
        "version-extensions": "Installed extensions",
 +      "version-skins": "Installed skins",
        "version-specialpages": "Special pages",
        "version-parserhooks": "Parser hooks",
        "version-variables": "Variables",
        "version-antispam": "Spam prevention",
 -      "version-skins": "Skins",
        "version-api": "API",
        "version-other": "Other",
        "version-mediahandlers": "Media handlers",
        "version-hook-name": "Hook name",
        "version-hook-subscribedby": "Subscribed by",
        "version-version": "($1)",
 +      "version-no-ext-name": "[no name]",
        "version-svn-revision": "r$1",
        "version-license": "MediaWiki License",
        "version-ext-license": "License",
        "version-ext-colheader-name": "Extension",
 +      "version-skin-colheader-name": "Skin",
        "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "License",
        "version-ext-colheader-description": "Description",
        "version-software": "Installed software",
        "version-software-product": "Product",
        "version-software-version": "Version",
 -      "version-db-mysql-url": "http://www.mysql.com/",
 -      "version-db-mariadb-url": "http://mariadb.org/",
 +      "version-db-mysql-url": "https://www.mysql.com/",
 +      "version-db-mariadb-url": "https://mariadb.org/",
        "version-db-percona-url": "http://www.percona.com/software/percona-server",
        "version-db-postgres-url": "http://www.postgresql.org/",
        "version-db-oracle-url": "http://www.oracle.com/database/",
 -      "version-db-sqlite-url": "http://www.sqlite.org/",
 -      "version-db-mssql-url": "http://www.microsoft.com/sql/",
 +      "version-db-sqlite-url": "https://www.sqlite.org/",
 +      "version-db-mssql-url": "https://www.microsoft.com/sql/",
        "version-entrypoints": "Entry point URLs",
        "version-entrypoints-header-entrypoint": "Entry point",
        "version-entrypoints-header-url": "URL",
        "logentry-rights-rights": "$1 {{GENDER:$2|changed}} group membership for $3 from $4 to $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|changed}} group membership for $3",
        "logentry-rights-autopromote": "$1 was automatically {{GENDER:$2|promoted}} from $4 to $5",
 +      "logentry-upload-upload": "$1 {{GENDER:$2|uploaded}} $3",
 +      "logentry-upload-overwrite": "$1 {{GENDER:$2|uploaded}} a new version of $3",
 +      "logentry-upload-revert": "$1 {{GENDER:$2|uploaded}} $3",
        "rightsnone": "(none)",
        "revdelete-logentry": "changed revision visibility of \"[[$1]]\"",
        "logdelete-logentry": "changed event visibility of \"[[$1]]\"",
        "expand_templates_remove_nowiki": "Suppress <nowiki> tags in result",
        "expand_templates_generate_xml": "Show XML parse tree",
        "expand_templates_generate_rawhtml": "Show raw HTML",
 -      "expand_templates_preview": "Preview"
 +      "expand_templates_preview": "Preview",
 +      "pagelanguage": "Page language selector",
 +      "pagelang-name": "Page",
 +      "pagelang-language": "Language",
 +      "pagelang-use-default": "Use default language",
 +      "pagelang-select-lang": "Select language",
 +      "right-pagelang": "Change page language",
 +      "action-pagelang": "change the page language",
 +      "log-name-pagelang": "Change language log",
 +      "log-description-pagelang": "This is a log of changes in page languages.",
 +      "logentry-pagelang-pagelang": "$1 {{GENDER:$2|changed}} page language for $3 from $4 to $5.",
 +      "default-skin-not-found": "Whoops! The default skin for your wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, is not available.\n\nYour installation seems to include the following skins. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable them and choose the default.\n\n$2\n\n; If you have just installed MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code>skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n; If you have just upgraded MediaWiki:\n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following lines into <code>LocalSettings.php</code> to enable all currently installed skins:\n\n<pre>$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>:\n: Double-check the skin names for typos.",
 +      "default-skin-not-found-no-skins": "Whoops! The default skin for your wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, is not available.\n\nYou have no installed skins.\n\n; If you have just installed or upgraded MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. MediaWiki 1.24 and newer doesn't include any skins in the main repository. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code>skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable skins and choose the default.\n",
 +      "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enabled)",
 +      "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabled''')"
  }