Merge "Document external libraries changes in release notes"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 2 Dec 2014 21:04:46 +0000 (21:04 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 2 Dec 2014 21:04:46 +0000 (21:04 +0000)
72 files changed:
.jscsrc
.jshintrc
HISTORY
RELEASE-NOTES-1.24 [deleted file]
RELEASE-NOTES-1.25
composer.json
docs/hooks.txt
includes/PrefixSearch.php
includes/api/ApiExpandTemplates.php
includes/api/ApiQueryPrefixSearch.php
includes/api/i18n/en.json
includes/api/i18n/ia.json
includes/api/i18n/ksh.json
includes/api/i18n/mk.json
includes/api/i18n/qqq.json
includes/api/i18n/zh-hans.json
includes/content/JavaScriptContentHandler.php
includes/content/JsonContentHandler.php
includes/db/LBFactory.php
includes/db/LBFactoryMulti.php
includes/db/LBFactorySingle.php
includes/db/LoadBalancer.php
includes/installer/InstallDocFormatter.php
includes/installer/WebInstallerOutput.php
includes/installer/i18n/el.json
includes/installer/i18n/nap.json
includes/page/Article.php
includes/page/WikiPage.php
includes/profiler/ProfilerXhprof.php
includes/specialpage/SpecialPage.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialListusers.php
includes/specials/SpecialLog.php
includes/specials/SpecialPagesWithProp.php
includes/specials/SpecialRedirect.php
includes/specials/SpecialWatchlist.php
languages/i18n/ar.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/ca.json
languages/i18n/el.json
languages/i18n/et.json
languages/i18n/frr.json
languages/i18n/gl.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/it.json
languages/i18n/ka.json
languages/i18n/kk-cyrl.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/mai.json
languages/i18n/mk.json
languages/i18n/nap.json
languages/i18n/ru.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/ur.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
resources/Resources.php
resources/src/mediawiki.legacy/ajax.js
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki/mediawiki.js
tests/frontend/package.json
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/PrefixSearchTest.php
tests/phpunit/includes/installer/InstallDocFormatterTest.php

diff --git a/.jscsrc b/.jscsrc
index b9139b2..2ebd40e 100644 (file)
--- a/.jscsrc
+++ b/.jscsrc
@@ -1,10 +1,8 @@
 {
        "preset": "wikimedia",
 
-       "disallowDanglingUnderscores": null,
        "disallowKeywordsOnNewLine": null,
        "disallowQuotedKeysInObjects": null,
-       "requireCamelCaseOrUpperCaseIdentifiers": null,
        "requireSpacesInsideArrayBrackets": null,
        "validateIndentation": null
 }
index c136dfc..92c8c43 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -22,9 +22,5 @@
                "mediaWiki": true,
                "jQuery": false,
                "QUnit": false
-       },
-
-       // Legacy (to be handled by jscs once supported)
-       "camelcase": true,
-       "nomen": true
+       }
 }
diff --git a/HISTORY b/HISTORY
index 7477942..78ece33 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -1,4 +1,688 @@
-Change notes from older releases. For current info see RELEASE-NOTES-1.24.
+Change notes from older releases. For current info see RELEASE-NOTES-1.25.
+
+== MediaWiki 1.24 ==
+
+=== 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,
+  for using the old schema of the page_props table, in case the respective
+  schema update was not applied.
+* $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.
+* $wgSpecialPages may now use callback functions as an alternative to plain class names.
+  This allows more control over constructor parameters.
+* $wgHTCPMulticastAddress, $wgHTCPMulticastRouting and $wgHTCPPort were removed.
+* $wgRC2UDPAddress, $wgRC2UDPInterwikiPrefix, $wgRC2UDPOmitBots, $wgRC2UDPPort
+  and $wgRC2UDPPrefix have been removed.
+* The default password type for MediaWiki has been changed from MD5 to PBKDF2.
+  Password hashes will automatically be updated as users log in. If necessary, the
+  old MD5 hashing can be restored by changing $wgPasswordDefault to 'B'. In addition,
+  there is a maintenance script wrapOldPassword.php that can wrap all passwords in
+  PBKDF2 (or the hashing algorithm of your choice) if you don't want to wait for your
+  users to log in.
+* $wgImportSources can now either be a regular array, or an associative map
+  specifying subprojects on the interwiki map of the target wiki, or a mix of
+  the two. Existing configurations will still work.
+* Users must be able to edit through a page's protection to be able to delete it.
+* The default thumb size ($wgDefaultUserOptions['thumbsize']) is now 300px, up from
+  180px. If you have altered the number of entries in $wgThumbLimits for your wiki, you
+  may need to adjust your default user settings to compensate for the index change.
+* $wgDeferredUpdateList is now deprecated, you should use DeferredUpdates::addUpdate()
+  instead.
+* $wgCanonicalLanguageLinks has been removed. Per Google recommendations, we
+  will not send a rel=canonical pointing to a variant-neutral page, however
+  we will send rel=alternate.
+* $wgResourceLoaderLESSFunctions has been deprecated and will be removed in the future.
+* $wgGoToEdit has been removed. Use the SpecialSearchNogomatch hook for similar
+  functionality.
+
+=== New features in 1.24 ===
+* Added new hook WatchlistEditorBeforeFormRender, allowing subscribers to
+  manipulate the list of pages and/or preload lots of data at once.
+* Added new argument &$link in hook WatchlistEditorBuildRemoveLine, allowing the
+  link to the title to be changed.
+* Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
+  WhatLinksHere entries.
+* Added a new hook, "ContentGetParserOutput", to customize parser output for
+  a given content object.
+* Deprecated the hook "ShowRawCssJs", use "ContentGetParserOutput" instead.
+* HTMLForm's HTMLTextField now supports the 'url' type.
+* HTMLForm fields may now be dynamically hidden based on the values of other
+  fields in the form.
+* HTMLForm now supports multiple copies of an input field or set of input
+  fields, e.g. the form may request "one or more usernames" without having to
+  have the user enter delimited list of names into a text field.
+* 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() 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"
+  header, rather than as an ordered list. Code calling Article::viewRedirect
+  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 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 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.8.3.
+* (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, MyLanguage, 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 35045) Redirects to sections will now update the URL in browser's address
+  bar using the HTML5 History API. When [[Dog]] redirects to [[Animals#Dog]],
+  the user will now see "Animals#Dog" in their browser instead of "Dog#Dog".
+* API token handling has been rewritten. Any API module using tokens will need
+  to be updated. See the entry below under "Action API internal changes".
+* Added HTMLAutoCompleteSelectField.
+* Added a new hook, "SkinPreloadExistence", to allow extensions to add titles to
+  link existence cache before the page is rendered.
+* Config::set() was moved to its own interface, MutableConfig. GlobalVarConfig::set()
+  is now deprecated, does not implement MutableConfig.
+* A MutableConfig named HashConfig was added, that stores an array of configuration
+  settings.
+* (bug 69418) A MultiConfig implementation was added that supports fallback
+  to multiple Config instances.
+* Update CSSJanus to v1.1.0.
+* Added FormatJson::parse() returning status with result or localized error message
+
+=== 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"
+  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 39035) Improved Vector skin performance by removing collapsibleNav,
+  which used to collapse some sidebar elements by default.
+  This removes -list id suffixes like p-lang-list: instead of using things like
+  #p-lang-list, you can do #p-lang .body ul.
+* (bug 890) Links in Special:RecentChanges and Special:Watchlist no longer
+  follow redirects to their target pages.
+* Parser now dies early if called recursively, instead of producing subtle bugs.
+* (bug 14323) Redirect pages, when viewed with redirect=no, no longer hide the
+  remaining page content.
+* (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.
+* (bug 69789) Title::getContentModel() now loads from the database when
+  necessary instead of incorrectly returning the default content model.
+* (bug 69249) wfBaseConvert() now works around PHP Bug #50175 when using GMP.
+* (bug 57909) URLs in the externallinks table will no longer have certain
+  characters decoded in the query string.
+* (bug 67368) LESS mixins like .background-image() correctly flip image
+  references for RTL stylesheets now.
+
+=== Action API changes in 1.24 ===
+* action=parse API now supports prop=modules, which provides the list of
+  ResourceLoader modules that should be used to enhance the parsed content.
+* action=query&meta=siteinfo&siprop=interwikimap returns a new "protorel"
+  field which is true if protocol-relative urls can be used to access
+  a particular interwiki map entry.
+* list=logevents now provides logpage, which is the page ID from the
+  logging table, if ids are requested and the user has the permissions.
+* action=edit now requires that appendtext, prependtext, or section=new be used
+  when using the 'redirect' parameter, to prevent clients accidentally
+  overwriting the target page with the content of the redirect.
+* list=logevents will now return an error if both letitle and leprefix are
+  specified.
+* list=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.
+* Removed 'props' and 'errors' from action=paraminfo, as they have extremely
+  limited use and are generally inaccurate, unmaintained, and impossible to
+  properly maintain.
+* Formats dbg, dump, txt, wddx, and yaml are now deprecated.
+* action=paraminfo now indicates when a parameter is specifying a submodule.
+* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for
+  parallelism with prop=langlinks.
+* All tokens should be fetched from action=query&meta=tokens; all other methods
+  of fetching tokens are deprecated. The value needed for meta=tokens's 'type'
+  parameter for each module is documented in the action=help output and is
+  returned from action=paraminfo.
+* New action ClearHasMsg that can be used to clear HasMsg flag.
+* The cmstartsortkey and cmendsortkey parameters to list=categorymembers are
+  deprecated in favor of cmstarthexsortkey and cmendhexsortkey.
+* (bug 63326) Add blockedtimestamp field to output of blockinfo property for
+  the list=allusers and list=users modules.
+* prop=imageinfo no longer requires iiurlwidth to be set when using iiurlparam.
+* Added prop=linkshere, prop=fileusage, and prop=transcludedin, which are
+  roughly equivalent to list=backlinks, list=imageusage, and list=embeddedin
+  but can work on a list of titles (including titles from a generator).
+* prop=redirects can now filter returned redirects by namespace.
+
+=== Action API internal changes in 1.24 ===
+* Methods for handling continuation are added to ApiResult, so actions other
+  than query that use generators can easily support continuation.
+* $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.
+* A new param type 'submodule' is available. Parameters of this type will take
+  the list of valid values from the module's ApiModuleManager for the group
+  corresponding to the parameter name.
+* The 'APIGetPossibleErrors' and 'APIGetResultProperties' hooks are no longer used.
+* API token handling has been rewritten. Any API module using tokens will need
+  to be updated:
+  * ApiBase::needsToken now returns a token type instead of boolean true when a
+    token is needed. Returning true will throw an exception. See documentation
+    of that method for details.
+  * Information for the 'token' parameter is automatically set by ApiBase
+    getFinalParams and getFinalParamDescription.
+  * ApiBase::getTokenSalt has been removed.
+  * The hooks APIQueryInfoTokens, APIQueryRevisionsTokens,
+    APIQueryRecentChangesTokens, APIQueryUsersTokens, and
+    ApiTokensGetTokenTypes are deprecated, but are still called to support
+    backwards-compatible token access.
+* ApiBase::validateLimit and ApiBase::validateTimestamp are now protected.
+* ApiQueryRedirects was removed; prop=redirects is now implemented by
+  ApiQueryBacklinksProp along with the newly-added prop modules.
+* The following methods have been deprecated and may be removed in a future
+  release:
+  * ApiBase::getResultProperties
+  * ApiBase::getFinalResultProperties
+  * ApiBase::addTokenProperties
+  * ApiBase::getRequireOnlyOneParameterErrorMessages
+  * ApiBase::getRequireMaxOneParameterErrorMessages
+  * ApiBase::getRequireAtLeastOneParameterErrorMessages
+  * ApiBase::getTitleOrPageIdErrorMessage
+  * ApiBase::getPossibleErrors
+  * ApiBase::getFinalPossibleErrors
+  * ApiBase::parseErrors
+  * ApiQuery::setGeneratorContinue
+  * ApiQueryBase::checkRowCount
+  * ApiQueryBase::titleToKey
+  * ApiQueryBase::keyToTitle
+  * ApiQueryBase::keyPartToTitle
+  * ApiQueryInfo::getTokenFunctions
+  * ApiQueryInfo::resetTokenCache
+  * ApiQueryInfo::getEditToken
+  * ApiQueryInfo::getDeleteToken
+  * ApiQueryInfo::getProtectToken
+  * ApiQueryInfo::getMoveToken
+  * ApiQueryInfo::getBlockToken
+  * ApiQueryInfo::getUnblockToken
+  * ApiQueryInfo::getEmailToken
+  * ApiQueryInfo::getImportToken
+  * ApiQueryInfo::getWatchToken
+  * ApiQueryInfo::getOptionsToken
+  * ApiQueryRecentChanges::getTokenFunctions
+  * ApiQueryRecentChanges::getPatrolToken
+  * ApiQueryRevisions::getTokenFunctions
+  * ApiQueryRevisions::getRollbackToken
+  * ApiQueryUsers::getTokenFunctions
+  * ApiQueryUsers::getUserrightsToken
+* The following classes have been deprecated and may be removed in a future
+  release:
+  * ApiFormatDbg
+  * ApiFormatDump
+  * ApiFormatTxt
+  * ApiFormatWddx
+  * ApiFormatYaml
+  * ApiTokens
+* The following class constants have been deprecated and may be removed in a
+  future release:
+  * ApiBase::PROP_ROOT
+  * ApiBase::PROP_LIST
+  * ApiBase::PROP_TYPE
+  * ApiBase::PROP_NULLABLE
+
+=== Languages updated in 1.24 ===
+
+MediaWiki supports over 350 languages. Many localisations are updated
+regularly. Below only new and removed languages are listed, as well as
+changes to languages because of Bugzilla reports.
+
+=== Other changes in 1.24 ===
+* The deprecated jquery.delayedBind ResourceLoader module was removed.
+* The deprecated function mw.util.toggleToc was removed.
+* The Special:Search hooks SpecialSearchGo and SpecialSearchResultsAppend
+  were removed as they were unused.
+* (bug 65477) User::pingLimiter() now has an additional profile point varying
+  by action being used.
+* mediawiki.util.$content no longer supports old versions of the Vector,
+  Monobook, Modern and CologneBlue skins that don't yet implement the "mw-body"
+  and/or "mw-body-primary" class name in their html.
+* Added pp_sortkey column to page_props table, so pages can be efficiently
+  queried and sorted by property value (bug 58032).
+  See $wgPagePropsHaveSortkey if you want to postpone the schema change.
+* BREAKING CHANGE: All four built-in MediaWiki skins (Vector, MonoBook, Modern
+  and Cologne Blue) were moved out of MediaWiki core to their own respective
+  repositories. They will be installed with the release tarball, but you must
+  install them separately if installing MediaWiki from source code. A warning
+  message displayed until you do it should guide you through the process. See
+  also <https://www.mediawiki.org/wiki/Manual:Skin_configuration>.
+* BREAKING CHANGE: Skins built for MediaWiki 1.15 and earlier that do not use
+  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.
+* BREAKING CHANGE: The files commonElements.css, commonContent.css and
+  commonInterface.css (in skins/common/) have been removed. Skins may no longer
+  rely on their presence and include them in their style modules. ResourceLoader
+  modules introduced in MediaWiki 1.23 should be loaded instead:
+  - skins/common/commonElements.css  → 'mediawiki.skinning.elements' module
+  - skins/common/commonContent.css   → 'mediawiki.skinning.content' module
+  - skins/common/commonInterface.css → 'mediawiki.skinning.interface' module
+* 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)
+* Browser support for Internet Explorer 6 and 7 lowered from Grade A to Grade C,
+  meaning that JavaScript is no longer executed in these browser versions.
+* Browser support for Opera 11 lowered from Grade A to Grade C.
+* Removed IEFixes module which existed purely to provide support for MSIE versions
+* Deprecated SpecialPageFactory::getList() in favor of
+  SpecialPageFactory::getNames()
+  below 7 (conditionally loaded only for those browsers).
+* Action::checkCanExecute() no longer has a return value.
+* Removed cleanupForIRC(), loadFromCurRow(), newFromCurRow(), notifyRC2UDP()
+  and sendToUDP() from RecentChange.php. (deprecated since 1.22)
+* Removed EnhancedChangesList::arrow(), sideArrow(), downArrow(), spacerArrow().
+* Removed Xml::namespaceSelector(). (deprecated since 1.19)
+* Removed WikiPage::estimateRevisionCount(). (deprecated since 1.19)
+* MYSQL: Enum item added to "major MIME type" columns.
+  Running update.php on MySQL < v5.1 may result in heavy processing.
+* RSS and Atom feeds generated by MediaWiki no longer include a fallback
+  stylesheet. It was ignored by most browsers these days anyway.
+* SpecialSearchNoResults hook has been removed. SpecialSearchResults is now
+  called unconditionally.
+* TablePager::getBody() is now 'final' and can't be overridden in subclasses.
+* TablePager::getBody() is deprecated, use getBodyOutput() or getFullOutput().
+* Added $outputPage parameter to the SkinTemplateGetLanguageLink hook.
+* log_page for move log entries store the original page ID, rather than that
+  of the new redirect page. This is not retroactive.
+* LCStoreAccel was removed. $wgLocalisationCacheConf can no longer be set to
+  use this store class.
+* Html::infoBox() no longer accepts paths relative to skins/common/images/.
+* Deprecated defunct Skin::getCommonStylePath().
+* Some extensions had their ResourceLoader modules depend on the "mediawiki"
+  and "jquery" modules. In the past, this behavior was undefined, now it will
+  throw an error.
+* Removed BagOStuff::replace(). (deprecated since 1.23)
+* In Linker.php, link(), linkText() and makeBrokenImageLinkObj() now display
+  warnings if their first parameter is not a Title object. Also makeImageLink()
+  now requires a Parser as its first parameter.
+* (bug 67368) LESS functions embed() and embeddable(), added in MediaWiki 1.23
+  and broken by design, have been removed. Use appropriate LESS mixins instead.
+* Removed cssjanus.py from maintenance directory as it was unused.
+* Removed maintenance/purgeOldText.inc and the PurgeRedundantText() function
+  it contained (superseded by Maintenance::purgeRedundantText() in 1.16).
+  The purgeOldText.php maintenance script has been retained.
+* PHPUnit tests can be found by directory discovery, by adding the directory
+  path from your UnitTestsList callback. Older versions of MediaWiki core will
+  barf at this usage.
+
+==== Renamed classes ====
+* CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
+* CLDRPluralRuleConverter_Fragment to CLDRPluralRuleConverterFragment
+* CLDRPluralRuleConverter_Operator to CLDRPluralRuleConverterOperator
+* 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
+* RevDel_ArchivedFileList to RevDelArchivedFileList
+* RevDel_ArchivedRevisionItem to RevDelArchivedRevisionItem
+* RevDel_FileItem to RevDelFileItem
+* RevDel_FileList to RevDelFileList
+* RevDel_Item to RevDelItem
+* RevDel_List to RevDelList
+* RevDel_LogItem to RevDelLogItem
+* RevDel_LogList to RevDelLogList
+* RevDel_RevisionItem to RevDelRevisionItem
+* RevDel_RevisionList to RevDelRevisionList
+* WebInstaller_Complete to WebInstallerComplete
+* WebInstaller_Copying to WebInstallerCopying
+* WebInstaller_DBConnect to WebInstallerDBConnect
+* WebInstaller_DBSettings to WebInstallerDBSettings
+* WebInstaller_Document to WebInstallerDocument
+* WebInstaller_ExistingWiki to WebInstallerExistingWiki
+* WebInstaller_Install to WebInstallerInstall
+* WebInstaller_Language to WebInstallerLanguage
+* WebInstaller_Name to WebInstallerName
+* WebInstaller_Options to WebInstallerOptions
+* WebInstaller_Readme to WebInstallerReadme
+* WebInstaller_ReleaseNotes to WebInstallerReleaseNotes
+* WebInstaller_Restart to WebInstallerRestart
+* WebInstaller_Upgrade to WebInstallerUpgrade
+* WebInstaller_UpgradeDoc to WebInstallerUpgradeDoc
+* WebInstaller_Welcome to WebInstallerWelcome
+
+==== 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
+* ResourceLoaderLESSFunctions - No longer in use, not intended for public usage
+
+==== Removed files ====
+The skins/common/ directory, previously containing some assets intended to be
+used by skins and a number of legacy styles and scripts, has been removed. Its
+contents have been deleted or relocated into the resources/ directory. Full list
+of files that are no longer available follows.
+
+* skins/common/ajax.js
+* skins/common/commonContent.css
+* skins/common/commonElements.css
+* skins/common/commonInterface.css
+* skins/common/commonPrint.css
+* skins/common/config-cc.css
+* skins/common/config.css
+* skins/common/config.js
+* skins/common/feed.css
+* skins/common/IEFixes.js
+* skins/common/oldshared.css
+* skins/common/protect.js
+* skins/common/shared.css
+* skins/common/upload.js
+* skins/common/wikibits.js
+* skins/common/images/add.png
+* skins/common/images/ajax-loader.gif
+* skins/common/images/arrow_disabled_first_25.png
+* skins/common/images/arrow_disabled_last_25.png
+* skins/common/images/arrow_disabled_left_25.png
+* skins/common/images/arrow_disabled_right_25.png
+* skins/common/images/arrow_first_25.png
+* skins/common/images/arrow_last_25.png
+* skins/common/images/arrow_left_25.png
+* skins/common/images/arrow_right_25.png
+* skins/common/images/Arr_.png
+* skins/common/images/Arr_d.png
+* skins/common/images/Arr_l.png
+* skins/common/images/Arr_r.png
+* skins/common/images/Arr_u.png
+* skins/common/images/bullet.gif
+* skins/common/images/button_bold.png
+* skins/common/images/button_extlink.png
+* skins/common/images/button_headline.png
+* skins/common/images/button_hr.png
+* skins/common/images/button_image.png
+* skins/common/images/button_italic.png
+* skins/common/images/button_link.png
+* skins/common/images/button_media.png
+* skins/common/images/button_nowiki.png
+* skins/common/images/button_sig.png
+* skins/common/images/button_template.png
+* skins/common/images/cc-0.png
+* skins/common/images/cc-by-nc-sa.png
+* skins/common/images/cc-by-sa.png
+* skins/common/images/cc-by.png
+* skins/common/images/Checker-16x16.png
+* skins/common/images/closewindow.png
+* skins/common/images/closewindow19x19.png
+* skins/common/images/critical-32.png
+* skins/common/images/diffunderline.gif
+* skins/common/images/download-32.png
+* skins/common/images/feed-icon.png
+* skins/common/images/feed-icon.svg
+* skins/common/images/gnu-fdl.png
+* skins/common/images/help-question-hover.gif
+* skins/common/images/help-question.gif
+* skins/common/images/info-32.png
+* skins/common/images/link_icon.gif
+* skins/common/images/magnify-clip-rtl.png
+* skins/common/images/magnify-clip.png
+* skins/common/images/mediawiki.png
+* skins/common/images/nextredirectltr.png
+* skins/common/images/nextredirectrtl.png
+* skins/common/images/poweredby_mediawiki_88x31.png
+* skins/common/images/public-domain.png
+* skins/common/images/question-small.png
+* skins/common/images/question.svg
+* skins/common/images/redirectltr.png
+* skins/common/images/redirectrtl.png
+* skins/common/images/remove.png
+* skins/common/images/spinner.gif
+* skins/common/images/tick-32.png
+* skins/common/images/tipsy-arrow.gif
+* skins/common/images/tooltip_icon.png
+* skins/common/images/warning-32.png
+* skins/common/images/wiki.png
+* skins/common/images/Zoom_sans.gif
+* skins/common/images/ar/button_bold.png
+* skins/common/images/ar/button_headline.png
+* skins/common/images/ar/button_italic.png
+* skins/common/images/ar/button_link.png
+* skins/common/images/ar/button_nowiki.png
+* skins/common/images/be-tarask/button_bold.png
+* skins/common/images/be-tarask/button_italic.png
+* skins/common/images/be-tarask/button_link.png
+* skins/common/images/cyrl/button_bold.png
+* skins/common/images/cyrl/button_italic.png
+* skins/common/images/cyrl/button_link.png
+* skins/common/images/de/button_bold.png
+* skins/common/images/de/button_italic.png
+* skins/common/images/fa/button_bold.png
+* skins/common/images/fa/button_headline.png
+* skins/common/images/fa/button_italic.png
+* skins/common/images/fa/button_link.png
+* skins/common/images/fa/button_nowiki.png
+* skins/common/images/icons/fileicon-c.png
+* skins/common/images/icons/fileicon-cpp.png
+* skins/common/images/icons/fileicon-deb.png
+* skins/common/images/icons/fileicon-djvu.png
+* skins/common/images/icons/fileicon-djvu.xcf
+* skins/common/images/icons/fileicon-dvi.png
+* skins/common/images/icons/fileicon-exe.png
+* skins/common/images/icons/fileicon-h.png
+* skins/common/images/icons/fileicon-html.png
+* skins/common/images/icons/fileicon-iso.png
+* skins/common/images/icons/fileicon-java.png
+* skins/common/images/icons/fileicon-mid.png
+* skins/common/images/icons/fileicon-mov.png
+* skins/common/images/icons/fileicon-o.png
+* skins/common/images/icons/fileicon-ogg.png
+* skins/common/images/icons/fileicon-ogg.xcf
+* skins/common/images/icons/fileicon-pdf.png
+* skins/common/images/icons/fileicon-ps.png
+* skins/common/images/icons/fileicon-psd.png
+* skins/common/images/icons/fileicon-rm.png
+* skins/common/images/icons/fileicon-rpm.png
+* skins/common/images/icons/fileicon-svg.png
+* skins/common/images/icons/fileicon-tar.png
+* skins/common/images/icons/fileicon-tex.png
+* skins/common/images/icons/fileicon-ttf.png
+* skins/common/images/icons/fileicon-txt.png
+* skins/common/images/icons/fileicon.png
+* skins/common/images/ksh/button_S_italic.png
+
 
 == MediaWiki 1.23 ==
 
diff --git a/RELEASE-NOTES-1.24 b/RELEASE-NOTES-1.24
deleted file mode 100644 (file)
index 03cf277..0000000
+++ /dev/null
@@ -1,756 +0,0 @@
-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 ==
-
-THIS IS NOT A RELEASE YET
-
-MediaWiki 1.24 is an alpha-quality branch and is not recommended for use in
-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,
-  for using the old schema of the page_props table, in case the respective
-  schema update was not applied.
-* $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.
-* $wgSpecialPages may now use callback functions as an alternative to plain class names.
-  This allows more control over constructor parameters.
-* $wgHTCPMulticastAddress, $wgHTCPMulticastRouting and $wgHTCPPort were removed.
-* $wgRC2UDPAddress, $wgRC2UDPInterwikiPrefix, $wgRC2UDPOmitBots, $wgRC2UDPPort
-  and $wgRC2UDPPrefix have been removed.
-* The default password type for MediaWiki has been changed from MD5 to PBKDF2.
-  Password hashes will automatically be updated as users log in. If necessary, the
-  old MD5 hashing can be restored by changing $wgPasswordDefault to 'B'. In addition,
-  there is a maintenance script wrapOldPassword.php that can wrap all passwords in
-  PBKDF2 (or the hashing algorithm of your choice) if you don't want to wait for your
-  users to log in.
-* $wgImportSources can now either be a regular array, or an associative map
-  specifying subprojects on the interwiki map of the target wiki, or a mix of
-  the two. Existing configurations will still work.
-* Users must be able to edit through a page's protection to be able to delete it.
-* The default thumb size ($wgDefaultUserOptions['thumbsize']) is now 300px, up from
-  180px. If you have altered the number of entries in $wgThumbLimits for your wiki, you
-  may need to adjust your default user settings to compensate for the index change.
-* $wgDeferredUpdateList is now deprecated, you should use DeferredUpdates::addUpdate()
-  instead.
-* $wgCanonicalLanguageLinks has been removed. Per Google recommendations, we
-  will not send a rel=canonical pointing to a variant-neutral page, however
-  we will send rel=alternate.
-* $wgResourceLoaderLESSFunctions has been deprecated and will be removed in the future.
-* $wgGoToEdit has been removed. Use the SpecialSearchNogomatch hook for similar
-  functionality.
-
-=== New features in 1.24 ===
-* Added new hook WatchlistEditorBeforeFormRender, allowing subscribers to
-  manipulate the list of pages and/or preload lots of data at once.
-* Added new argument &$link in hook WatchlistEditorBuildRemoveLine, allowing the
-  link to the title to be changed.
-* Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
-  WhatLinksHere entries.
-* Added a new hook, "ContentGetParserOutput", to customize parser output for
-  a given content object.
-* Deprecated the hook "ShowRawCssJs", use "ContentGetParserOutput" instead.
-* HTMLForm's HTMLTextField now supports the 'url' type.
-* HTMLForm fields may now be dynamically hidden based on the values of other
-  fields in the form.
-* HTMLForm now supports multiple copies of an input field or set of input
-  fields, e.g. the form may request "one or more usernames" without having to
-  have the user enter delimited list of names into a text field.
-* 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() 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"
-  header, rather than as an ordered list. Code calling Article::viewRedirect
-  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 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 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.8.3.
-* (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, MyLanguage, 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 35045) Redirects to sections will now update the URL in browser's address
-  bar using the HTML5 History API. When [[Dog]] redirects to [[Animals#Dog]],
-  the user will now see "Animals#Dog" in their browser instead of "Dog#Dog".
-* API token handling has been rewritten. Any API module using tokens will need
-  to be updated. See the entry below under "Action API internal changes".
-* Added HTMLAutoCompleteSelectField.
-* Added a new hook, "SkinPreloadExistence", to allow extensions to add titles to
-  link existence cache before the page is rendered.
-* Config::set() was moved to its own interface, MutableConfig. GlobalVarConfig::set()
-  is now deprecated, does not implement MutableConfig.
-* A MutableConfig named HashConfig was added, that stores an array of configuration
-  settings.
-* (bug 69418) A MultiConfig implementation was added that supports fallback
-  to multiple Config instances.
-* Update CSSJanus to v1.1.0.
-* Added FormatJson::parse() returning status with result or localized error message
-
-=== 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"
-  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 39035) Improved Vector skin performance by removing collapsibleNav,
-  which used to collapse some sidebar elements by default.
-  This removes -list id suffixes like p-lang-list: instead of using things like
-  #p-lang-list, you can do #p-lang .body ul.
-* (bug 890) Links in Special:RecentChanges and Special:Watchlist no longer
-  follow redirects to their target pages.
-* Parser now dies early if called recursively, instead of producing subtle bugs.
-* (bug 14323) Redirect pages, when viewed with redirect=no, no longer hide the
-  remaining page content.
-* (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.
-* (bug 69789) Title::getContentModel() now loads from the database when
-  necessary instead of incorrectly returning the default content model.
-* (bug 69249) wfBaseConvert() now works around PHP Bug #50175 when using GMP.
-* (bug 57909) URLs in the externallinks table will no longer have certain
-  characters decoded in the query string.
-* (bug 67368) LESS mixins like .background-image() correctly flip image
-  references for RTL stylesheets now.
-
-=== Action API changes in 1.24 ===
-* action=parse API now supports prop=modules, which provides the list of
-  ResourceLoader modules that should be used to enhance the parsed content.
-* action=query&meta=siteinfo&siprop=interwikimap returns a new "protorel"
-  field which is true if protocol-relative urls can be used to access
-  a particular interwiki map entry.
-* list=logevents now provides logpage, which is the page ID from the
-  logging table, if ids are requested and the user has the permissions.
-* action=edit now requires that appendtext, prependtext, or section=new be used
-  when using the 'redirect' parameter, to prevent clients accidentally
-  overwriting the target page with the content of the redirect.
-* list=logevents will now return an error if both letitle and leprefix are
-  specified.
-* list=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.
-* Removed 'props' and 'errors' from action=paraminfo, as they have extremely
-  limited use and are generally inaccurate, unmaintained, and impossible to
-  properly maintain.
-* Formats dbg, dump, txt, wddx, and yaml are now deprecated.
-* action=paraminfo now indicates when a parameter is specifying a submodule.
-* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for
-  parallelism with prop=langlinks.
-* All tokens should be fetched from action=query&meta=tokens; all other methods
-  of fetching tokens are deprecated. The value needed for meta=tokens's 'type'
-  parameter for each module is documented in the action=help output and is
-  returned from action=paraminfo.
-* New action ClearHasMsg that can be used to clear HasMsg flag.
-* The cmstartsortkey and cmendsortkey parameters to list=categorymembers are
-  deprecated in favor of cmstarthexsortkey and cmendhexsortkey.
-* (bug 63326) Add blockedtimestamp field to output of blockinfo property for
-  the list=allusers and list=users modules.
-* prop=imageinfo no longer requires iiurlwidth to be set when using iiurlparam.
-* Added prop=linkshere, prop=fileusage, and prop=transcludedin, which are
-  roughly equivalent to list=backlinks, list=imageusage, and list=embeddedin
-  but can work on a list of titles (including titles from a generator).
-* prop=redirects can now filter returned redirects by namespace.
-
-=== Action API internal changes in 1.24 ===
-* Methods for handling continuation are added to ApiResult, so actions other
-  than query that use generators can easily support continuation.
-* $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.
-* A new param type 'submodule' is available. Parameters of this type will take
-  the list of valid values from the module's ApiModuleManager for the group
-  corresponding to the parameter name.
-* The 'APIGetPossibleErrors' and 'APIGetResultProperties' hooks are no longer used.
-* API token handling has been rewritten. Any API module using tokens will need
-  to be updated:
-  * ApiBase::needsToken now returns a token type instead of boolean true when a
-    token is needed. Returning true will throw an exception. See documentation
-    of that method for details.
-  * Information for the 'token' parameter is automatically set by ApiBase
-    getFinalParams and getFinalParamDescription.
-  * ApiBase::getTokenSalt has been removed.
-  * The hooks APIQueryInfoTokens, APIQueryRevisionsTokens,
-    APIQueryRecentChangesTokens, APIQueryUsersTokens, and
-    ApiTokensGetTokenTypes are deprecated, but are still called to support
-    backwards-compatible token access.
-* ApiBase::validateLimit and ApiBase::validateTimestamp are now protected.
-* ApiQueryRedirects was removed; prop=redirects is now implemented by
-  ApiQueryBacklinksProp along with the newly-added prop modules.
-* The following methods have been deprecated and may be removed in a future
-  release:
-  * ApiBase::getResultProperties
-  * ApiBase::getFinalResultProperties
-  * ApiBase::addTokenProperties
-  * ApiBase::getRequireOnlyOneParameterErrorMessages
-  * ApiBase::getRequireMaxOneParameterErrorMessages
-  * ApiBase::getRequireAtLeastOneParameterErrorMessages
-  * ApiBase::getTitleOrPageIdErrorMessage
-  * ApiBase::getPossibleErrors
-  * ApiBase::getFinalPossibleErrors
-  * ApiBase::parseErrors
-  * ApiQuery::setGeneratorContinue
-  * ApiQueryBase::checkRowCount
-  * ApiQueryBase::titleToKey
-  * ApiQueryBase::keyToTitle
-  * ApiQueryBase::keyPartToTitle
-  * ApiQueryInfo::getTokenFunctions
-  * ApiQueryInfo::resetTokenCache
-  * ApiQueryInfo::getEditToken
-  * ApiQueryInfo::getDeleteToken
-  * ApiQueryInfo::getProtectToken
-  * ApiQueryInfo::getMoveToken
-  * ApiQueryInfo::getBlockToken
-  * ApiQueryInfo::getUnblockToken
-  * ApiQueryInfo::getEmailToken
-  * ApiQueryInfo::getImportToken
-  * ApiQueryInfo::getWatchToken
-  * ApiQueryInfo::getOptionsToken
-  * ApiQueryRecentChanges::getTokenFunctions
-  * ApiQueryRecentChanges::getPatrolToken
-  * ApiQueryRevisions::getTokenFunctions
-  * ApiQueryRevisions::getRollbackToken
-  * ApiQueryUsers::getTokenFunctions
-  * ApiQueryUsers::getUserrightsToken
-* The following classes have been deprecated and may be removed in a future
-  release:
-  * ApiFormatDbg
-  * ApiFormatDump
-  * ApiFormatTxt
-  * ApiFormatWddx
-  * ApiFormatYaml
-  * ApiTokens
-* The following class constants have been deprecated and may be removed in a
-  future release:
-  * ApiBase::PROP_ROOT
-  * ApiBase::PROP_LIST
-  * ApiBase::PROP_TYPE
-  * ApiBase::PROP_NULLABLE
-
-=== Languages updated in 1.24 ===
-
-MediaWiki supports over 350 languages. Many localisations are updated
-regularly. Below only new and removed languages are listed, as well as
-changes to languages because of Bugzilla reports.
-
-=== Other changes in 1.24 ===
-* The deprecated jquery.delayedBind ResourceLoader module was removed.
-* The deprecated function mw.util.toggleToc was removed.
-* The Special:Search hooks SpecialSearchGo and SpecialSearchResultsAppend
-  were removed as they were unused.
-* (bug 65477) User::pingLimiter() now has an additional profile point varying
-  by action being used.
-* mediawiki.util.$content no longer supports old versions of the Vector,
-  Monobook, Modern and CologneBlue skins that don't yet implement the "mw-body"
-  and/or "mw-body-primary" class name in their html.
-* Added pp_sortkey column to page_props table, so pages can be efficiently
-  queried and sorted by property value (bug 58032).
-  See $wgPagePropsHaveSortkey if you want to postpone the schema change.
-* BREAKING CHANGE: All four built-in MediaWiki skins (Vector, MonoBook, Modern
-  and Cologne Blue) were moved out of MediaWiki core to their own respective
-  repositories. They will be installed with the release tarball, but you must
-  install them separately if installing MediaWiki from source code. A warning
-  message displayed until you do it should guide you through the process. See
-  also <https://www.mediawiki.org/wiki/Manual:Skin_configuration>.
-* BREAKING CHANGE: Skins built for MediaWiki 1.15 and earlier that do not use
-  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.
-* BREAKING CHANGE: The files commonElements.css, commonContent.css and
-  commonInterface.css (in skins/common/) have been removed. Skins may no longer
-  rely on their presence and include them in their style modules. ResourceLoader
-  modules introduced in MediaWiki 1.23 should be loaded instead:
-  - skins/common/commonElements.css  → 'mediawiki.skinning.elements' module
-  - skins/common/commonContent.css   → 'mediawiki.skinning.content' module
-  - skins/common/commonInterface.css → 'mediawiki.skinning.interface' module
-* 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)
-* Browser support for Internet Explorer 6 and 7 lowered from Grade A to Grade C,
-  meaning that JavaScript is no longer executed in these browser versions.
-* Browser support for Opera 11 lowered from Grade A to Grade C.
-* Removed IEFixes module which existed purely to provide support for MSIE versions
-* Deprecated SpecialPageFactory::getList() in favor of
-  SpecialPageFactory::getNames()
-  below 7 (conditionally loaded only for those browsers).
-* Action::checkCanExecute() no longer has a return value.
-* Removed cleanupForIRC(), loadFromCurRow(), newFromCurRow(), notifyRC2UDP()
-  and sendToUDP() from RecentChange.php. (deprecated since 1.22)
-* Removed EnhancedChangesList::arrow(), sideArrow(), downArrow(), spacerArrow().
-* Removed Xml::namespaceSelector(). (deprecated since 1.19)
-* Removed WikiPage::estimateRevisionCount(). (deprecated since 1.19)
-* MYSQL: Enum item added to "major MIME type" columns.
-  Running update.php on MySQL < v5.1 may result in heavy processing.
-* RSS and Atom feeds generated by MediaWiki no longer include a fallback
-  stylesheet. It was ignored by most browsers these days anyway.
-* SpecialSearchNoResults hook has been removed. SpecialSearchResults is now
-  called unconditionally.
-* TablePager::getBody() is now 'final' and can't be overridden in subclasses.
-* TablePager::getBody() is deprecated, use getBodyOutput() or getFullOutput().
-* Added $outputPage parameter to the SkinTemplateGetLanguageLink hook.
-* log_page for move log entries store the original page ID, rather than that
-  of the new redirect page. This is not retroactive.
-* LCStoreAccel was removed. $wgLocalisationCacheConf can no longer be set to
-  use this store class.
-* Html::infoBox() no longer accepts paths relative to skins/common/images/.
-* Deprecated defunct Skin::getCommonStylePath().
-* Some extensions had their ResourceLoader modules depend on the "mediawiki"
-  and "jquery" modules. In the past, this behavior was undefined, now it will
-  throw an error.
-* Removed BagOStuff::replace(). (deprecated since 1.23)
-* In Linker.php, link(), linkText() and makeBrokenImageLinkObj() now display
-  warnings if their first parameter is not a Title object. Also makeImageLink()
-  now requires a Parser as its first parameter.
-* (bug 67368) LESS functions embed() and embeddable(), added in MediaWiki 1.23
-  and broken by design, have been removed. Use appropriate LESS mixins instead.
-* Removed cssjanus.py from maintenance directory as it was unused.
-* Removed maintenance/purgeOldText.inc and the PurgeRedundantText() function
-  it contained (superseded by Maintenance::purgeRedundantText() in 1.16).
-  The purgeOldText.php maintenance script has been retained.
-* PHPUnit tests can be found by directory discovery, by adding the directory
-  path from your UnitTestsList callback. Older versions of MediaWiki core will
-  barf at this usage.
-
-==== Renamed classes ====
-* CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
-* CLDRPluralRuleConverter_Fragment to CLDRPluralRuleConverterFragment
-* CLDRPluralRuleConverter_Operator to CLDRPluralRuleConverterOperator
-* 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
-* RevDel_ArchivedFileList to RevDelArchivedFileList
-* RevDel_ArchivedRevisionItem to RevDelArchivedRevisionItem
-* RevDel_FileItem to RevDelFileItem
-* RevDel_FileList to RevDelFileList
-* RevDel_Item to RevDelItem
-* RevDel_List to RevDelList
-* RevDel_LogItem to RevDelLogItem
-* RevDel_LogList to RevDelLogList
-* RevDel_RevisionItem to RevDelRevisionItem
-* RevDel_RevisionList to RevDelRevisionList
-* WebInstaller_Complete to WebInstallerComplete
-* WebInstaller_Copying to WebInstallerCopying
-* WebInstaller_DBConnect to WebInstallerDBConnect
-* WebInstaller_DBSettings to WebInstallerDBSettings
-* WebInstaller_Document to WebInstallerDocument
-* WebInstaller_ExistingWiki to WebInstallerExistingWiki
-* WebInstaller_Install to WebInstallerInstall
-* WebInstaller_Language to WebInstallerLanguage
-* WebInstaller_Name to WebInstallerName
-* WebInstaller_Options to WebInstallerOptions
-* WebInstaller_Readme to WebInstallerReadme
-* WebInstaller_ReleaseNotes to WebInstallerReleaseNotes
-* WebInstaller_Restart to WebInstallerRestart
-* WebInstaller_Upgrade to WebInstallerUpgrade
-* WebInstaller_UpgradeDoc to WebInstallerUpgradeDoc
-* WebInstaller_Welcome to WebInstallerWelcome
-
-==== 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
-* ResourceLoaderLESSFunctions - No longer in use, not intended for public usage
-
-==== Removed files ====
-The skins/common/ directory, previously containing some assets intended to be
-used by skins and a number of legacy styles and scripts, has been removed. Its
-contents have been deleted or relocated into the resources/ directory. Full list
-of files that are no longer available follows.
-
-* skins/common/ajax.js
-* skins/common/commonContent.css
-* skins/common/commonElements.css
-* skins/common/commonInterface.css
-* skins/common/commonPrint.css
-* skins/common/config-cc.css
-* skins/common/config.css
-* skins/common/config.js
-* skins/common/feed.css
-* skins/common/IEFixes.js
-* skins/common/oldshared.css
-* skins/common/protect.js
-* skins/common/shared.css
-* skins/common/upload.js
-* skins/common/wikibits.js
-* skins/common/images/add.png
-* skins/common/images/ajax-loader.gif
-* skins/common/images/arrow_disabled_first_25.png
-* skins/common/images/arrow_disabled_last_25.png
-* skins/common/images/arrow_disabled_left_25.png
-* skins/common/images/arrow_disabled_right_25.png
-* skins/common/images/arrow_first_25.png
-* skins/common/images/arrow_last_25.png
-* skins/common/images/arrow_left_25.png
-* skins/common/images/arrow_right_25.png
-* skins/common/images/Arr_.png
-* skins/common/images/Arr_d.png
-* skins/common/images/Arr_l.png
-* skins/common/images/Arr_r.png
-* skins/common/images/Arr_u.png
-* skins/common/images/bullet.gif
-* skins/common/images/button_bold.png
-* skins/common/images/button_extlink.png
-* skins/common/images/button_headline.png
-* skins/common/images/button_hr.png
-* skins/common/images/button_image.png
-* skins/common/images/button_italic.png
-* skins/common/images/button_link.png
-* skins/common/images/button_media.png
-* skins/common/images/button_nowiki.png
-* skins/common/images/button_sig.png
-* skins/common/images/button_template.png
-* skins/common/images/cc-0.png
-* skins/common/images/cc-by-nc-sa.png
-* skins/common/images/cc-by-sa.png
-* skins/common/images/cc-by.png
-* skins/common/images/Checker-16x16.png
-* skins/common/images/closewindow.png
-* skins/common/images/closewindow19x19.png
-* skins/common/images/critical-32.png
-* skins/common/images/diffunderline.gif
-* skins/common/images/download-32.png
-* skins/common/images/feed-icon.png
-* skins/common/images/feed-icon.svg
-* skins/common/images/gnu-fdl.png
-* skins/common/images/help-question-hover.gif
-* skins/common/images/help-question.gif
-* skins/common/images/info-32.png
-* skins/common/images/link_icon.gif
-* skins/common/images/magnify-clip-rtl.png
-* skins/common/images/magnify-clip.png
-* skins/common/images/mediawiki.png
-* skins/common/images/nextredirectltr.png
-* skins/common/images/nextredirectrtl.png
-* skins/common/images/poweredby_mediawiki_88x31.png
-* skins/common/images/public-domain.png
-* skins/common/images/question-small.png
-* skins/common/images/question.svg
-* skins/common/images/redirectltr.png
-* skins/common/images/redirectrtl.png
-* skins/common/images/remove.png
-* skins/common/images/spinner.gif
-* skins/common/images/tick-32.png
-* skins/common/images/tipsy-arrow.gif
-* skins/common/images/tooltip_icon.png
-* skins/common/images/warning-32.png
-* skins/common/images/wiki.png
-* skins/common/images/Zoom_sans.gif
-* skins/common/images/ar/button_bold.png
-* skins/common/images/ar/button_headline.png
-* skins/common/images/ar/button_italic.png
-* skins/common/images/ar/button_link.png
-* skins/common/images/ar/button_nowiki.png
-* skins/common/images/be-tarask/button_bold.png
-* skins/common/images/be-tarask/button_italic.png
-* skins/common/images/be-tarask/button_link.png
-* skins/common/images/cyrl/button_bold.png
-* skins/common/images/cyrl/button_italic.png
-* skins/common/images/cyrl/button_link.png
-* skins/common/images/de/button_bold.png
-* skins/common/images/de/button_italic.png
-* skins/common/images/fa/button_bold.png
-* skins/common/images/fa/button_headline.png
-* skins/common/images/fa/button_italic.png
-* skins/common/images/fa/button_link.png
-* skins/common/images/fa/button_nowiki.png
-* skins/common/images/icons/fileicon-c.png
-* skins/common/images/icons/fileicon-cpp.png
-* skins/common/images/icons/fileicon-deb.png
-* skins/common/images/icons/fileicon-djvu.png
-* skins/common/images/icons/fileicon-djvu.xcf
-* skins/common/images/icons/fileicon-dvi.png
-* skins/common/images/icons/fileicon-exe.png
-* skins/common/images/icons/fileicon-h.png
-* skins/common/images/icons/fileicon-html.png
-* skins/common/images/icons/fileicon-iso.png
-* skins/common/images/icons/fileicon-java.png
-* skins/common/images/icons/fileicon-mid.png
-* skins/common/images/icons/fileicon-mov.png
-* skins/common/images/icons/fileicon-o.png
-* skins/common/images/icons/fileicon-ogg.png
-* skins/common/images/icons/fileicon-ogg.xcf
-* skins/common/images/icons/fileicon-pdf.png
-* skins/common/images/icons/fileicon-ps.png
-* skins/common/images/icons/fileicon-psd.png
-* skins/common/images/icons/fileicon-rm.png
-* skins/common/images/icons/fileicon-rpm.png
-* skins/common/images/icons/fileicon-svg.png
-* skins/common/images/icons/fileicon-tar.png
-* skins/common/images/icons/fileicon-tex.png
-* skins/common/images/icons/fileicon-ttf.png
-* skins/common/images/icons/fileicon-txt.png
-* skins/common/images/icons/fileicon.png
-* skins/common/images/ksh/button_S_italic.png
-
-== Compatibility ==
-
-MediaWiki 1.24 requires PHP 5.3.2 or later. There is experimental support for
-HHVM 3.3.0.
-
-MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
-support for them is somewhat less mature. There is experimental support for
-Oracle and Microsoft SQL Server.
-
-The supported versions are:
-
-* MySQL 5.0.2 or later
-* PostgreSQL 8.3 or later
-* SQLite 3.3.7 or later
-* Oracle 9.0.1 or later
-* Microsoft SQL Server 2005 (9.00.1399)
-
-== Upgrading ==
-
-1.24 has several database changes since 1.23, and will not work without schema
-updates. Note that due to changes to some very large tables like the revision
-table, the schema update may take quite long (minutes on a medium sized site,
-many hours on a large site).
-
-If upgrading from before 1.11, and you are using a wiki as a commons
-repository, make sure that it is updated as well. Otherwise, errors may arise
-due to database schema changes.
-
-If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
-new database fields are filled with data.
-
-If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to
-1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed
-with MediaWiki 1.21.
-
-Don't forget to always back up your database before upgrading!
-
-See the file UPGRADE for more detailed upgrade instructions.
-
-For notes on 1.23.x and older releases, see HISTORY.
-
-== Online documentation ==
-
-Documentation for both end-users and site administrators is available on
-MediaWiki.org, and is covered under the GNU Free Documentation License (except
-for pages that explicitly state that their contents are in the public domain):
-
-       https://www.mediawiki.org/wiki/Documentation
-
-== Mailing list ==
-
-A mailing list is available for MediaWiki user support and discussion:
-
-       https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
-
-A low-traffic announcements-only list is also available:
-
-       https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
-
-It's highly recommended that you sign up for one of these lists if you're
-going to run a public MediaWiki, so you can be notified of security fixes.
-
-== IRC help ==
-
-There's usually someone online in #mediawiki on irc.freenode.net.
index 21d3c88..92e0a2c 100644 (file)
@@ -16,7 +16,7 @@ production.
   validity must be checked by passing the user-supplied token to
   User::matchEditToken rather than by testing for equality with a
   newly-generated token.
-* (bug 72951) The UserGetLanguageObject hook may be passed any IContextSource
+* (T74951) The UserGetLanguageObject hook may be passed any IContextSource
   for its $context parameter. Formerly it was documented as receiving a
   RequestContext specifically.
 * Profiling was restructured and $wgProfiler now requires an 'output' parameter.
@@ -29,17 +29,17 @@ production.
 * $wgOpenSearchTemplate is deprecated in favor of $wgOpenSearchTemplates.
 
 === New features in 1.25 ===
-* (bug 62861) Updated plural rules to CLDR 26. Includes incompatible changes
+* (T64861) Updated plural rules to CLDR 26. Includes incompatible changes
   for plural forms in Russian, Prussian, Tagalog, Manx and several languages
   that fall back to Russian.
-* (bug 58139) ResourceLoaderFileModule now supports language fallback
+* (T60139) ResourceLoaderFileModule now supports language fallback
   for 'languageScripts'.
 * Added a new hook, "ContentAlterParserOutput", to allow extensions to modify the
   parser output for a content object before links update.
-* (bug 35785) Enhanced recent changes and extended watchlist are now default.
+* (T37785) Enhanced recent changes and extended watchlist are now default.
   Documentation: https://meta.wikimedia.org/wiki/Help:Enhanced_recent_changes
   and https://www.mediawiki.org/wiki/Manual:$wgDefaultUserOptions.
-* (bug 67341) SVG images will no longer be base64-encoded when being embedded
+* (T69341) SVG images will no longer be base64-encoded when being embedded
   in CSS. This results in slight size increase before gzip compression (due to
   percent-encoding), but up to 20% decrease after it.
 * Upgrade jStorage to v0.4.12.
@@ -59,6 +59,10 @@ production.
 * Added a hook, "ApiOpenSearchSuggest", to allow extensions to provide extracts
   and images for ApiOpenSearch output. The semantics are identical to the
   "OpenSearchXml" hook provided by the OpenSearchXml extension.
+* PrefixSearchBackend hook now has an $offset parameter. Combined with $limit,
+  this allows for pagination of prefix results. Extensions using this hook
+  should implement supporting behavior. Not doing so can result in undefined
+  behavior from API clients trying to continue through prefix results.
 
 ==== External libraries ====
 * MediaWiki now requires certain external libraries to be installed. In the past
@@ -86,9 +90,9 @@ production.
     about the library can be found at <https://www.mediawiki.org/wiki/CDB>.
 
 === Bug fixes in 1.25 ===
-* (bug 71003) No additional code will be generated to try to load CSS-embedded
+* (T73003) No additional code will be generated to try to load CSS-embedded
   SVG images in Internet Explorer 6 and 7, as they don't support them anyway.
-* (bug 67021) On Special:BookSources, corrected validation of ISBNs (both
+* (T69021) On Special:BookSources, corrected validation of ISBNs (both
   10- and 13-digit forms) containing "X".
 * Page moving was refactored into a MovePage class. As part of that:
 ** The AbortMove hook was removed.
@@ -102,7 +106,7 @@ production.
    and MovePage::checkPermissions().
 
 === Action API changes in 1.25 ===
-* (bug 65403) XML tag highlighting is now only performed for formats
+* (T67403) XML tag highlighting is now only performed for formats
   "xmlfm" and "wddxfm".
 * action=paraminfo supports generalized submodules (modules=query+value),
   querymodules and formatmodules are deprecated
@@ -130,7 +134,7 @@ production.
 * If the user has the 'deletedhistory' right, action=query's revids parameter
   will now recognize deleted revids.
 * prop=revisions may be used as a generator, generating revids.
-* (bug 66776) format=json results will no longer be corrupted when
+* (T68776) format=json results will no longer be corrupted when
   $wgMangleFlashPolicy is in effect. format=php results will cleanly return an
   error instead of returning invalid serialized data.
 * Generators may now return data for the generated pages when used with
@@ -141,8 +145,9 @@ production.
 * ApiOpenSearch now supports XML output.
 * ApiOpenSearch will now output descriptions and URLs as array indexes 2 and 3
   in JSON format.
-* (bug T76051) list=tags will now continue correctly.
-* (bug T76052) list=tags can now indicate whether a tag is defined.
+* (T76051) list=tags will now continue correctly.
+* (T76052) list=tags can now indicate whether a tag is defined.
+* (T75522) list=prefixsearch now supports continuation
 
 === Action API internal changes in 1.25 ===
 * ApiHelp has been rewritten to support i18n and paginated HTML output.
@@ -202,7 +207,7 @@ MediaWiki supports over 350 languages. Many localisations are updated
 regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Bugzilla reports.
 
-* (bug 64440) Kazakh (kk) wikis should no longer forcefully reset the user's
+* (T66440) Kazakh (kk) wikis should no longer forcefully reset the user's
   interface language to kk where unexpected.
 
 === Other changes in 1.25 ===
@@ -210,7 +215,7 @@ changes to languages because of Bugzilla reports.
   removed. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for
   migration guide for creators and users of custom skins that relied on it.
 * Javascript variable 'wgFileCanRotate' now only available on Special:Upload.
-* (bug 56257) Set site logo from mediawiki.skinning.interface module instead of
+* (T58257) Set site logo from mediawiki.skinning.interface module instead of
   inline styles in the HTML.
 * Removed ApiQueryUsers::getAutoGroups(). (deprecated since 1.20)
 * Removed XmlDumpWriter::schemaVersion(). (deprecated since 1.20)
@@ -285,7 +290,7 @@ Don't forget to always back up your database before upgrading!
 
 See the file UPGRADE for more detailed upgrade instructions.
 
-For notes on 1.23.x and older releases, see HISTORY.
+For notes on 1.24.x and older releases, see HISTORY.
 
 == Online documentation ==
 
index e5ade52..bcd196f 100644 (file)
@@ -40,5 +40,9 @@
        "scripts": {
                "pre-update-cmd": "ComposerHookHandler::onPreUpdate",
                "pre-install-cmd": "ComposerHookHandler::onPreInstall"
+       },
+       "config": {
+               "prepend-autoloader": false,
+               "optimize-autoloader": true
        }
 }
index 0146b86..a4e02c6 100644 (file)
@@ -2166,6 +2166,7 @@ $ns : array of int namespace keys to search in
 $search : search term (not guaranteed to be conveniently normalized)
 $limit : maximum number of results to return
 &$results : out param: array of page names (strings)
+$offset : number of results to offset from the beginning
 
 'PrefixSearchExtractNamespace': Called if core was not able to extract a
 namespace from the search string so that extensions can attempt it.
index 839fedc..a4e64ee 100644 (file)
@@ -34,11 +34,12 @@ abstract class PrefixSearch {
         * @param string $search
         * @param int $limit
         * @param array $namespaces Used if query is not explicitly prefixed
+        * @param int $offset How many results to offset from the beginning
         * @return array Array of strings
         */
-       public static function titleSearch( $search, $limit, $namespaces = array() ) {
+       public static function titleSearch( $search, $limit, $namespaces = array(), $offset = 0 ) {
                $prefixSearch = new StringPrefixSearch;
-               return $prefixSearch->search( $search, $limit, $namespaces );
+               return $prefixSearch->search( $search, $limit, $namespaces, $offset );
        }
 
        /**
@@ -47,9 +48,10 @@ abstract class PrefixSearch {
         * @param string $search
         * @param int $limit
         * @param array $namespaces Used if query is not explicitly prefixed
+        * @param int $offset How many results to offset from the beginning
         * @return array Array of strings or Title objects
         */
-       public function search( $search, $limit, $namespaces = array() ) {
+       public function search( $search, $limit, $namespaces = array(), $offset = 0 ) {
                $search = trim( $search );
                if ( $search == '' ) {
                        return array(); // Return empty result
@@ -65,7 +67,7 @@ abstract class PrefixSearch {
                                $ns = $namespaces; // no explicit prefix, use default namespaces
                                wfRunHooks( 'PrefixSearchExtractNamespace', array( &$ns, &$search ) );
                        }
-                       return $this->searchBackend( $ns, $search, $limit );
+                       return $this->searchBackend( $ns, $search, $limit, $offset );
                }
 
                // Is this a namespace prefix?
@@ -80,7 +82,7 @@ abstract class PrefixSearch {
                        wfRunHooks( 'PrefixSearchExtractNamespace', array( &$namespaces, &$search ) );
                }
 
-               return $this->searchBackend( $namespaces, $search, $limit );
+               return $this->searchBackend( $namespaces, $search, $limit, $offset );
        }
 
        /**
@@ -88,12 +90,13 @@ abstract class PrefixSearch {
         * @param string $search
         * @param int $limit
         * @param array $namespaces
+        * @param int $offset How many results to offset from the beginning
         *
         * @return array
         */
-       public function searchWithVariants( $search, $limit, array $namespaces ) {
+       public function searchWithVariants( $search, $limit, array $namespaces, $offset = 0 ) {
                wfProfileIn( __METHOD__ );
-               $searches = $this->search( $search, $limit, $namespaces );
+               $searches = $this->search( $search, $limit, $namespaces, $offset );
 
                // if the content language has variants, try to retrieve fallback results
                $fallbackLimit = $limit - count( $searches );
@@ -141,48 +144,125 @@ abstract class PrefixSearch {
         * @param array $namespaces
         * @param string $search
         * @param int $limit
+        * @param int $offset How many results to offset from the beginning
         * @return array Array of strings
         */
-       protected function searchBackend( $namespaces, $search, $limit ) {
+       protected function searchBackend( $namespaces, $search, $limit, $offset ) {
                if ( count( $namespaces ) == 1 ) {
                        $ns = $namespaces[0];
                        if ( $ns == NS_MEDIA ) {
                                $namespaces = array( NS_FILE );
                        } elseif ( $ns == NS_SPECIAL ) {
-                               return $this->titles( $this->specialSearch( $search, $limit ) );
+                               return $this->titles( $this->specialSearch( $search, $limit, $offset ) );
                        }
                }
                $srchres = array();
-               if ( wfRunHooks( 'PrefixSearchBackend', array( $namespaces, $search, $limit, &$srchres ) ) ) {
-                       return $this->titles( $this->defaultSearchBackend( $namespaces, $search, $limit ) );
+               if ( wfRunHooks( 'PrefixSearchBackend', array( $namespaces, $search, $limit, &$srchres, $offset ) ) ) {
+                       return $this->titles( $this->defaultSearchBackend( $namespaces, $search, $limit, $offset ) );
+               }
+               return $this->strings( $this->handleResultFromHook( $srchres, $namespaces, $search, $limit ) );
+       }
+
+       /**
+        * Default search backend does proper prefix searching, but custom backends
+        * may sort based on other algorythms that may cause the exact title match
+        * to not be in the results or be lower down the list.
+        * @param array $srchres results from the hook
+        * @return array munged results from the hook
+        */
+       private function handleResultFromHook( $srchres, $namespaces, $search, $limit ) {
+               // Pick namespace (based on PrefixSearch::defaultSearchBackend)
+               $ns = in_array( NS_MAIN, $namespaces ) ? NS_MAIN : $namespaces[0];
+               $t = Title::newFromText( $search, $ns );
+               if ( !$t || !$t->exists() ) {
+                       // No exact match so just return the search results
+                       return $srchres;
+               }
+               $string = $t->getPrefixedText();
+               $key = array_search( $string, $srchres );
+               if ( $key !== false ) {
+                       // Exact match was in the results so just move it to the front
+                       return $this->pullFront( $key, $srchres );
+               }
+               // Exact match not in the search results so check for some redirect handling cases
+               if ( $t->isRedirect() ) {
+                       $target = $this->getRedirectTarget( $t );
+                       $key = array_search( $target, $srchres );
+                       if ( $key !== false ) {
+                               // Exact match is a redirect to one of the returned matches so pull the
+                               // returned match to the front.  This might look odd but the alternative
+                               // is to put the redirect in front and drop the match.  The name of the
+                               // found match is often more descriptive/better formed than the name of
+                               // the redirect AND by definition they share a prefix.  Hopefully this
+                               // choice is less confusing and more helpful.  But it might not be.  But
+                               // it is the choice we're going with for now.
+                               return $this->pullFront( $key, $srchres );
+                       }
+                       $redirectTargetsToRedirect = $this->redirectTargetsToRedirect( $srchres );
+                       if ( isset( $redirectTargetsToRedirect[ $target ] ) ) {
+                               // The exact match and something in the results list are both redirects
+                               // to the same thing!  In this case we'll pull the returned match to the
+                               // top following the same logic above.  Again, it might not be a perfect
+                               // choice but it'll do.
+                               return $this->pullFront( $redirectTargetsToRedirect[ $target ], $srchres );
+                       }
                } else {
-                       // Default search backend does proper prefix searching, but custom backends
-                       // may sort based on other algorythms that may cause the exact title match
-                       // to not be in the results or be lower down the list.
-
-                       // Pick namespace (based on PrefixSearch::defaultSearchBackend)
-                       $ns = in_array( NS_MAIN, $namespaces ) ? NS_MAIN : $namespaces[0];
-                       $t = Title::newFromText( $search, $ns );
-                       if ( $t ) {
-                               // If text is a valid title and is in the search results
-                               $string = $t->getPrefixedText();
-                               $key = array_search( $string, $srchres );
-                               if ( $key !== false ) {
-                                       // Move it to the front
-                                       $cut = array_splice( $srchres, $key, 1 );
-                                       array_unshift( $srchres, $cut[0] );
-                               } elseif ( $t->exists() ) {
-                                       // Add it in front
-                                       array_unshift( $srchres, $string );
-
-                                       if ( count( $srchres ) > $limit ) {
-                                               array_pop( $srchres );
-                                       }
-                               }
+                       $redirectTargetsToRedirect = $this->redirectTargetsToRedirect( $srchres );
+                       if ( isset( $redirectTargetsToRedirect[ $string ] ) ) {
+                               // The exact match is the target of a redirect already in the results list so remove
+                               // the redirect from the results list and push the exact match to the front
+                               array_splice( $srchres, $redirectTargetsToRedirect[ $string ], 1 );
+                               array_unshift( $srchres, $string );
+                               return $srchres;
                        }
                }
 
-               return $this->strings( $srchres );
+               // Exact match is totally unique from the other results so just add it to the front
+               array_unshift( $srchres, $string );
+               // And roll one off the end if the results are too long
+               if ( count( $srchres ) > $limit ) {
+                       array_pop( $srchres );
+               }
+               return $srchres;
+       }
+
+       /**
+        * @param Array(string) $titles as strings
+        * @return Array(string => int) redirect target prefixedText to index of title in titles
+        *   that is a redirect to it.
+        */
+       private function redirectTargetsToRedirect( $titles ) {
+               $result = array();
+               foreach ( $titles as $key => $titleText ) {
+                       $title = Title::newFromText( $titleText );
+                       if ( !$title || !$title->isRedirect() ) {
+                               continue;
+                       }
+                       $target = $this->getRedirectTarget( $title );
+                       if ( !$target ) {
+                               continue;
+                       }
+                       $result[ $target ] = $key;
+               }
+               return $result;
+       }
+
+       /**
+        * @param int $key key to pull to the front
+        * @return array $array with the item at $key pulled to the front
+        */
+       private function pullFront( $key, $array ) {
+               $cut = array_splice( $array, $key, 1 );
+               array_unshift( $array, $cut[0] );
+               return $array;
+       }
+
+       private function getRedirectTarget( $title ) {
+               $page = WikiPage::factory( $title );
+               if ( !$page->exists() ) {
+                       return null;
+               }
+               return $page->getRedirectTarget()->getPrefixedText();
        }
 
        /**
@@ -190,9 +270,10 @@ abstract class PrefixSearch {
         *
         * @param string $search Term
         * @param int $limit Max number of items to return
+        * @param int $offset Number of items to offset
         * @return array
         */
-       protected function specialSearch( $search, $limit ) {
+       protected function specialSearch( $search, $limit, $offset ) {
                global $wgContLang;
 
                $searchParts = explode( '/', $search, 2 );
@@ -208,7 +289,7 @@ abstract class PrefixSearch {
                        }
                        $special = SpecialPageFactory::getPage( $specialTitle->getText() );
                        if ( $special ) {
-                               $subpages = $special->prefixSearchSubpages( $subpageSearch, $limit );
+                               $subpages = $special->prefixSearchSubpages( $subpageSearch, $limit, $offset );
                                return array_map( function ( $sub ) use ( $specialTitle ) {
                                        return $specialTitle->getSubpage( $sub );
                                }, $subpages );
@@ -240,12 +321,17 @@ abstract class PrefixSearch {
                ksort( $keys );
 
                $srchres = array();
+               $skipped = 0;
                foreach ( $keys as $pageKey => $page ) {
                        if ( $searchKey === '' || strpos( $pageKey, $searchKey ) === 0 ) {
                                // bug 27671: Don't use SpecialPage::getTitleFor() here because it
                                // localizes its input leading to searches for e.g. Special:All
                                // returning Spezial:MediaWiki-Systemnachrichten and returning
                                // Spezial:Alle_Seiten twice when $wgLanguageCode == 'de'
+                               if ( $offset > 0 && $skipped < $offset ) {
+                                       $skipped++;
+                                       continue;
+                               }
                                $srchres[] = Title::makeTitleSafe( NS_SPECIAL, $page );
                        }
 
@@ -266,9 +352,10 @@ abstract class PrefixSearch {
         * @param array $namespaces Namespaces to search in
         * @param string $search Term
         * @param int $limit Max number of items to return
+        * @param int $offset Number of items to skip
         * @return array Array of Title objects
         */
-       protected function defaultSearchBackend( $namespaces, $search, $limit ) {
+       protected function defaultSearchBackend( $namespaces, $search, $limit, $offset ) {
                $ns = array_shift( $namespaces ); // support only one namespace
                if ( in_array( NS_MAIN, $namespaces ) ) {
                        $ns = NS_MAIN; // if searching on many always default to main
@@ -284,7 +371,11 @@ abstract class PrefixSearch {
                                'page_title ' . $dbr->buildLike( $prefix, $dbr->anyString() )
                        ),
                        __METHOD__,
-                       array( 'LIMIT' => $limit, 'ORDER BY' => 'page_title' )
+                       array(
+                               'LIMIT' => $limit,
+                               'ORDER BY' => 'page_title',
+                               'OFFSET' => $offset
+                       )
                );
                $srchres = array();
                foreach ( $res as $row ) {
index eea10e9..751be75 100644 (file)
@@ -52,10 +52,19 @@ class ApiExpandTemplates extends ApiBase {
                        $prop = array_flip( $params['prop'] );
                }
 
-               // Create title for parser
-               $title_obj = Title::newFromText( $params['title'] );
-               if ( !$title_obj || $title_obj->isExternal() ) {
-                       $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
+               // Get title and revision ID for parser
+               $revid = $params['revid'];
+               if ( $revid !== null ) {
+                       $rev = Revision::newFromId( $revid );
+                       if ( !$rev ) {
+                               $this->dieUsage( "There is no revision ID $revid", 'missingrev' );
+                       }
+                       $title_obj = $rev->getTitle();
+               } else {
+                       $title_obj = Title::newFromText( $params['title'] );
+                       if ( !$title_obj || $title_obj->isExternal() ) {
+                               $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
+                       }
                }
 
                $result = $this->getResult();
@@ -98,7 +107,7 @@ class ApiExpandTemplates extends ApiBase {
                if ( $prop || $params['prop'] === null ) {
                        $wgParser->startExternalParse( $title_obj, $options, Parser::OT_PREPROCESS );
                        $frame = $wgParser->getPreprocessor()->newFrame();
-                       $wikitext = $wgParser->preprocess( $params['text'], $title_obj, $options, null, $frame );
+                       $wikitext = $wgParser->preprocess( $params['text'], $title_obj, $options, $revid, $frame );
                        if ( $params['prop'] === null ) {
                                // the old way
                                ApiResult::setContent( $retval, $wikitext );
@@ -141,6 +150,9 @@ class ApiExpandTemplates extends ApiBase {
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true,
                        ),
+                       'revid' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
+                       ),
                        'prop' => array(
                                ApiBase::PARAM_TYPE => array(
                                        'wikitext',
index 95f8483..069e30b 100644 (file)
@@ -43,20 +43,21 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                $search = $params['search'];
                $limit = $params['limit'];
                $namespaces = $params['namespace'];
+               $offset = $params['offset'];
 
                $searcher = new TitlePrefixSearch;
-               $titles = $searcher->searchWithVariants( $search, $limit, $namespaces );
+               $titles = $searcher->searchWithVariants( $search, $limit + 1, $namespaces, $offset );
                if ( $resultPageSet ) {
                        $resultPageSet->populateFromTitles( $titles );
-                       /** @todo If this module gets an 'offset' parameter, use it here */
-                       $offset = 1;
                        foreach ( $titles as $index => $title ) {
-                               $resultPageSet->setGeneratorData( $title, array( 'index' => $index + $offset ) );
+                               $resultPageSet->setGeneratorData( $title, array( 'index' => $index + $offset + 1 ) );
                        }
                } else {
                        $result = $this->getResult();
+                       $count = 0;
                        foreach ( $titles as $title ) {
-                               if ( !$limit-- ) {
+                               if ( ++$count > $limit ) {
+                                       $this->setContinueEnumParameter( 'offset', $offset + $params['limit'] );
                                        break;
                                }
                                $vals = array(
@@ -70,6 +71,7 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                                }
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
                                if ( !$fit ) {
+                                       $this->setContinueEnumParameter( 'offset', $offset + $count - 1 );
                                        break;
                                }
                        }
@@ -102,6 +104,10 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                                        ApiBase::PARAM_MAX => 100,
                                        ApiBase::PARAM_MAX2 => 200,
                                ),
+                               'offset' => array(
+                                       ApiBase::PARAM_DFLT => 0,
+                                       ApiBase::PARAM_TYPE => 'integer',
+                               ),
                        );
        }
 
index e941f1a..f7e3a57 100644 (file)
        "apihelp-expandtemplates-description": "Expands all templates in wikitext.",
        "apihelp-expandtemplates-param-title": "Title of page.",
        "apihelp-expandtemplates-param-text": "Wikitext to convert.",
+       "apihelp-expandtemplates-param-revid": "Revision ID, for <nowiki>{{REVISIONID}}</nowiki> and similar variables.",
        "apihelp-expandtemplates-param-prop": "Which pieces of information to get:\n;wikitext:The expanded wikitext.\n;categories:Any categories present in the input that are not represented in the wikitext output.\n;volatile:Whether the output is volatile and should not be reused elsewhere within the page.\n;ttl:The maximum time after which caches of the result should be invalidated.\n;parsetree:The XML parse tree of the input.\nNote that if no values are selected, the result will contain the wikitext, but the output will be in a deprecated format.",
        "apihelp-expandtemplates-param-includecomments": "Whether to include HTML comments in the output.",
        "apihelp-expandtemplates-param-generatexml": "Generate XML parse tree (replaced by $1prop=parsetree).",
        "apihelp-query+prefixsearch-param-search": "Search string.",
        "apihelp-query+prefixsearch-param-namespace": "Namespaces to search.",
        "apihelp-query+prefixsearch-param-limit": "Maximum number of results to return.",
+       "apihelp-query+prefixsearch-param-offset": "Number of results to skip.",
        "apihelp-query+prefixsearch-example-simple": "Search for page titles beginning with \"meaning\"",
 
        "apihelp-query+protectedtitles-description": "List all titles protected from creation.",
index 8be3899..f377056 100644 (file)
@@ -6,5 +6,13 @@
        },
        "apihelp-main-param-action": "Qual action exequer.",
        "apihelp-main-param-format": "Le formato del resultato.",
-       "apihelp-main-param-maxlag": "Le latentia maximal pote esser usate quando MediaWiki es installate in un cluster de base de datos replicate. Pro evitar actiones que causa additional latentia de replication de sito, iste parametro pote facer le cliente attender usque le latentia de replication es minus que le valor specificate. In caso de latentia excessive, le codice de error \"maxlag\" es retornate con un message como \"Attende $host: $lag secundas de latentia\".<br />Vide https://www.mediawiki.org/wiki/Manual:Maxlag_parameter pro plus information."
+       "apihelp-main-param-maxlag": "Le latentia maximal pote esser usate quando MediaWiki es installate in un cluster de base de datos replicate. Pro evitar actiones que causa additional latentia de replication de sito, iste parametro pote facer le cliente attender usque le latentia de replication es minus que le valor specificate. In caso de latentia excessive, le codice de error \"maxlag\" es retornate con un message como \"Attende $host: $lag secundas de latentia\".<br />Vide https://www.mediawiki.org/wiki/Manual:Maxlag_parameter pro plus information.",
+       "apihelp-main-param-smaxage": "Fixar le capite s-maxage a iste numero de secundas. Errores nunquam es mittite in cache.",
+       "apihelp-main-param-maxage": "Fixar le capite max-age a iste numero de secundas. Errores nunquam es mittite in cache.",
+       "apihelp-main-param-assert": "Verificar si le usator ha aperite session si mittite a \"user\", o si ha le derecto de usator robot si \"bot\".",
+       "apihelp-main-param-requestid": "Omne valor fornite hic essera includite in le responsa. Pote esser usate pro distinguer requestas.",
+       "apihelp-main-param-servedby": "Includer in le resultato le nomine del host que ha servite le requesta.",
+       "apihelp-main-param-curtimestamp": "Includer le data e hora actual in le resultato.",
+       "apihelp-block-description": "Blocar un usator.",
+       "apihelp-block-param-user": "Nomine de usator, adresse IP o intervallo IP que tu vole blocar."
 }
index d746fd3..3c708a7 100644 (file)
@@ -4,11 +4,23 @@
                        "Purodha"
                ]
        },
+       "apihelp-main-param-action": "Wat för en Aufjahb.",
+       "apihelp-main-param-format": "Et Fommaht för ußzejävve.",
+       "apihelp-main-param-requestid": "Jehde Aanjahb vun heh weed widder med ußjejovve. Esuh kam_mer einzel Affrohre ussenein hallde.",
+       "apihelp-main-param-servedby": "Donn däm ẞööver, dä et jedonn hät, singe Nahme med ußjävve.",
+       "apihelp-main-param-curtimestamp": "Donn de aktoälle Zigg un et Dattum med ußjävve.",
        "apihelp-block-description": "Ene Metmaacher schpärre.",
+       "apihelp-block-param-user": "Däm Nahme vun däm Metmaacher, de <i lang=\"en\" xml:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß udder dä Berätt, dä De Schpärre wells.",
        "apihelp-block-param-reason": "Der Schpärrjrond.",
+       "apihelp-block-param-anononly": "Bloß de nahmelohse Metmaaacher spärre, alsu donn et nahmelohse Beärbeide vun dä <i lang=\"en\" xml:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß verhendere.",
        "apihelp-block-param-nocreate": "Et Neu-Aanmelde verbeede",
        "apihelp-block-param-autoblock": "Dun automattesch de läzde <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräß schpärre, di dä Metmaacher jehatt hät, un och all di <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräße, vun wo dä versöhk, jet ze ändere.",
        "apihelp-block-param-watchuser": "Donn de Metmaachersigg un de Klaafsigg dohzoh op mig Oppaßleß säze.",
+       "apihelp-createaccount-description": "Ene neue Zohjang för ene Metmaacher aanlähje.",
        "apihelp-createaccount-param-name": "Der Nahme för dä Metmaacher.",
-       "apihelp-delete-description": "Schmieß en Sigg fott."
+       "apihelp-createaccount-param-password": "Et Paßwoot (Weed ävver it jebruc un övverjange, wann <code lang=\"en\" xml:lang=\"en\">$1mailpassword</code> jesaz es)",
+       "apihelp-delete-description": "Schmieß en Sigg fott.",
+       "apihelp-delete-param-watch": "Donn die Sigg en Ding Oppassliss opnemme.",
+       "apihelp-delete-param-unwatch": "Schmiiß di Sigg us Dinge Oppassless erus.",
+       "apihelp-delete-example-simple": "Schmiiß de Houpsigg fott"
 }
index d98b6e2..73d4b64 100644 (file)
        "apihelp-expandtemplates-description": "Ги проширува сите шаблони во викитекст.",
        "apihelp-expandtemplates-param-title": "Наслов на страница.",
        "apihelp-expandtemplates-param-text": "Викитекст за претворање.",
+       "apihelp-expandtemplates-param-revid": "Назнака на преработката, за <nowiki>{{REVISIONID}}</nowiki> и слични променливи.",
        "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n;wikitext:The expanded wikitext.\n;categories: Категориите присутно во вносот кои не се претставени во викитекстуалниот извод.\n;volatile: Дали изводот е месно врзан и не треба да се преупотребува на други места во страницата.\n;ttl: Максималното време по кое треба да се поништи меѓускладираниот резултат.\n;parsetree: XML-дрвото на расчленување за изводот.\nИмајте на ум дека ако не изберете никаква вредност, резултатот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
        "apihelp-expandtemplates-param-includecomments": "Дали во изводот да се вклучени HTML-коментари.",
        "apihelp-expandtemplates-param-generatexml": "Создај XML-дрво на расчленување (заменето со $1prop=parsetree).",
        "apihelp-opensearch-param-limit": "Максималниот број на резултати за прикажување.",
        "apihelp-opensearch-param-namespace": "Именски простори за пребарување.",
        "apihelp-opensearch-param-suggest": "Не прави ништо ако [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] е неточно.",
+       "apihelp-opensearch-param-redirects": "Како да се работи со пренасочувања:\n;return: Дај го самото пренасочување.\n;resolve: Дај ја целната страница. Може да даде помалку од $1limit резултати.\nОд историски причини, по основно е „return“ за $1format=json и „resolve“ за други формати.",
        "apihelp-opensearch-param-format": "Формат на изводот.",
        "apihelp-opensearch-example-te": "Најди страници што почнуваат со „Те“",
        "apihelp-options-description": "Смени ги нагодувањата на тековниот корисник.\n\nМожат да се зададат само можностите заведени во јадрото или во едно од воспоставените додатоци, или пак можности со клуч кој ја има претставката „userjs-“ (предвиден за употреба од кориснички скрипти).",
        "apihelp-paraminfo-param-helpformat": "Формат на помошните низи.",
        "apihelp-paraminfo-param-querymodules": "Список на називи на модули за барања (вредност на параметарот prop=, meta= или list=). Користете го „$1modules=query+foo“ наместо „$1querymodules=foo“.",
        "apihelp-paraminfo-param-mainmodule": "Добави информации и за главниот (врховен) модул. Користете го „$1modules=main“ наместо тоа.",
+       "apihelp-paraminfo-param-pagesetmodule": "Дај ги сите информации и за модулот на збирот страници (укажувајќи titles= и сродни).",
+       "apihelp-paraminfo-param-formatmodules": "Список на називи на форматни модули (вредностза параметарот format=). Наместо тоа, користете го „$1modules“.",
        "apihelp-parse-param-summary": "Опис за расчленување.",
        "apihelp-parse-param-preview": "Расчлени во прегледен режим.",
        "apihelp-parse-param-sectionpreview": "Расчлени во прегледен режим на поднасловот (го овозможува и прегледниот режим).",
        "apihelp-upload-param-url": "Од која URL-адреса да се преземе податотеката.",
        "apihelp-upload-param-filekey": "Клуч на претходното подигање кое е привремено складирано.",
        "apihelp-upload-param-sessionkey": "Исто што и $1filekey. Се одржува за назадна складност.",
-       "apihelp-upload-param-stash": "Ако е зададено, опслужувачот нема да ја стави податотеката во складиштето за привремено чување.",
+       "apihelp-upload-param-stash": "Ако е зададено, опслужувачот ќе ја стави податотеката на привремено чување наместо да го додаде во складиштето.",
        "apihelp-upload-param-filesize": "Големина на целото подигање.",
        "apihelp-upload-param-offset": "Зафатнина на делот во бајти.",
        "apihelp-upload-param-chunk": "Содржина на делот.",
index 8382edc..0889dc9 100644 (file)
        "apihelp-expandtemplates-description": "{{doc-apihelp-description|expandtemplates}}",
        "apihelp-expandtemplates-param-title": "{{doc-apihelp-param|expandtemplates|title}}",
        "apihelp-expandtemplates-param-text": "{{doc-apihelp-param|expandtemplates|text}}",
+       "apihelp-expandtemplates-param-revid": "{{doc-apihelp-param|expandtemplates|revid}}",
        "apihelp-expandtemplates-param-prop": "{{doc-apihelp-param|expandtemplates|prop}}",
        "apihelp-expandtemplates-param-includecomments": "{{doc-apihelp-param|expandtemplates|includecomments}}",
        "apihelp-expandtemplates-param-generatexml": "{{doc-apihelp-param|expandtemplates|generatexml}}",
        "apihelp-query+prefixsearch-param-search": "{{doc-apihelp-param|query+prefixsearch|search}}",
        "apihelp-query+prefixsearch-param-namespace": "{{doc-apihelp-param|query+prefixsearch|namespace}}",
        "apihelp-query+prefixsearch-param-limit": "{{doc-apihelp-param|query+prefixsearch|limit}}",
+       "apihelp-query+prefixsearch-param-offset": "{{doc-apihelp-param|query+prefixsearch|offset}}",
        "apihelp-query+prefixsearch-example-simple": "{{doc-apihelp-example|query+prefixsearch}}",
        "apihelp-query+protectedtitles-description": "{{doc-apihelp-description|query+protectedtitles}}",
        "apihelp-query+protectedtitles-param-namespace": "{{doc-apihelp-param|query+protectedtitles|namespace}}",
        "apihelp-upload-example-filekey": "{{doc-apihelp-example|upload}}",
        "apihelp-userrights-description": "{{doc-apihelp-description|userrights}}",
        "apihelp-userrights-param-user": "{{doc-apihelp-param|userrights|user}}\n{{Identical|Username}}",
-       "apihelp-userrights-param-userid": "{{doc-apihelp-param|userrights|userid}}",
+       "apihelp-userrights-param-userid": "{{doc-apihelp-param|userrights|userid}}\n{{Identical|User ID}}",
        "apihelp-userrights-param-add": "{{doc-apihelp-param|userrights|add}}",
        "apihelp-userrights-param-remove": "{{doc-apihelp-param|userrights|remove}}",
        "apihelp-userrights-param-reason": "{{doc-apihelp-param|userrights|reason}}",
index 0b5e01c..0f954cd 100644 (file)
@@ -47,7 +47,9 @@
        "apihelp-createaccount-param-realname": "用户的真实姓名(可选)。",
        "apihelp-createaccount-param-mailpassword": "如果设置为任何值,将向用户发送一个随机密码。",
        "apihelp-createaccount-param-reason": "将要放在日志中的,关于创建帐户的可选原因。",
+       "apihelp-createaccount-param-language": "要为用户设置为默认值的语言代码(可选,默认为内容语言)。",
        "apihelp-createaccount-example-pass": "创建用户“testuser”和密码“test123”",
+       "apihelp-createaccount-example-mail": "创建用户“testmailuser”并电邮发送一个随机生成的密码",
        "apihelp-delete-description": "删除一个页面。",
        "apihelp-delete-param-title": "你所希望删除的页面的标题。不能与$1pageid一起使用。",
        "apihelp-delete-param-pageid": "你所希望删除的页面的页面ID。不能与$1title一起使用。",
@@ -58,6 +60,8 @@
        "apihelp-delete-example-reason": "删除首页,原因“准备移动”",
        "apihelp-disabled-description": "此模块已禁用。",
        "apihelp-edit-description": "创建和编辑页面。",
+       "apihelp-edit-param-title": "您希望编辑的页面标题。不能与$1pageid一起使用。",
+       "apihelp-edit-param-pageid": "您希望编辑的页面ID。不能与$1title一起使用。",
        "apihelp-edit-param-sectiontitle": "新小节的标题。",
        "apihelp-edit-param-text": "页面内容。",
        "apihelp-edit-param-summary": "编辑摘要。当$1section=new且未设置$1sectiontitle时,还包括小节标题。",
@@ -86,6 +90,7 @@
        "apihelp-expandtemplates-description": "展开维基文本中的所有模板。",
        "apihelp-expandtemplates-param-title": "页面标题。",
        "apihelp-expandtemplates-param-text": "要转换的wiki文本。",
+       "apihelp-expandtemplates-param-revid": "修订版本ID,用于<nowiki>{{REVISIONID}}</nowiki>和类似变体。",
        "apihelp-expandtemplates-example-simple": "展开wiki文本“<nowiki>{{Project:Sandbox}}</nowiki>”",
        "apihelp-feedcontributions-description": "返回用户贡献纲要。",
        "apihelp-feedcontributions-param-feedformat": "纲要的格式。",
        "apihelp-filerevert-param-filename": "目标文件名,不包含前缀“File:”。",
        "apihelp-filerevert-param-comment": "上传评论。",
        "apihelp-filerevert-example-revert": "回退Wiki.png至2011-03-05T15:27:40Z的版本",
+       "apihelp-help-param-helpformat": "帮助的输出格式。",
        "apihelp-help-example-main": "主模块帮助",
        "apihelp-help-example-recursive": "一个页面中的所有帮助",
        "apihelp-help-example-help": "帮助模块本身的帮助",
        "apihelp-query+categories-example-simple": "获取属于[[阿尔伯特·爱因斯坦]]的分类列表",
        "apihelp-query+categories-example-generator": "获取有关用于[[阿尔伯特·爱因斯坦]]的分类的信息",
        "apihelp-query+categoryinfo-example-simple": "获取有关[[:Category:Foo]]和[[:Category:Bar]]的信息",
+       "apihelp-query+categorymembers-description": "在指定的分类中列出所有页面。",
        "apihelp-query+categorymembers-param-sort": "要作为排序方式的属性。",
        "apihelp-query+categorymembers-param-startsortkey": "请改用$1starthexsortkey。",
        "apihelp-query+categorymembers-param-endsortkey": "请改用$1endhexsortkey。",
        "apihelp-query+langbacklinks-example-simple": "获取链接至[[:fr:Test]]的页面",
        "apihelp-query+langbacklinks-example-generator": "获取链接至[[:fr:Test]]的页面的信息",
        "apihelp-query+langlinks-param-limit": "返回多少语言链接。",
+       "apihelp-query+langlinks-param-url": "是否获取完整URL(不能与$1prop一起使用)。",
+       "apihelp-query+langlinks-param-inlanguagecode": "本地化语言名称的语言代码。",
        "apihelp-query+langlinks-example-simple": "从[[首页]]获取跨语言链接",
        "apihelp-query+links-param-limit": "返回多少链接。",
        "apihelp-query+links-example-simple": "从[[首页]]获取链接",
index 457b83d..d221897 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Content handler for JavaScript pages.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
 /**
  * Content handler for JavaScript pages.
  *
+ * @todo Create a ScriptContentHandler base class, do highlighting stuff there?
+ *
  * @since 1.21
  * @ingroup Content
- * @todo make ScriptContentHandler base class, do highlighting stuff there?
  */
 class JavaScriptContentHandler extends CodeContentHandler {
 
@@ -36,6 +35,9 @@ class JavaScriptContentHandler extends CodeContentHandler {
                parent::__construct( $modelId, array( CONTENT_FORMAT_JAVASCRIPT ) );
        }
 
+       /**
+        * @return string
+        */
        protected function getContentClass() {
                return 'JavaScriptContent';
        }
index 392ce37..b149f52 100644 (file)
@@ -1,15 +1,31 @@
 <?php
 /**
- * JSON Schema Content Handler
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
- * @file
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
  *
- * @author Ori Livneh <ori@wikimedia.org>
- * @author Kunal Mehta <legoktm@gmail.com>
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
  */
 
 /**
+ * Content handler for JSON.
+ *
+ * @author Ori Livneh <ori@wikimedia.org>
+ * @author Kunal Mehta <legoktm@gmail.com>
+ *
  * @since 1.24
+ * @ingroup Content
  */
 class JsonContentHandler extends CodeContentHandler {
 
index 2f93ce7..e049a5d 100644 (file)
@@ -27,7 +27,7 @@
  */
 abstract class LBFactory {
        /** @var LBFactory */
-       protected static $instance;
+       private static $instance;
 
        /**
         * Disables all access to the load balancer, will cause all database access
@@ -43,7 +43,7 @@ abstract class LBFactory {
         *
         * @return LBFactory
         */
-       static function &singleton() {
+       public static function &singleton() {
                global $wgLBFactoryConf;
 
                if ( is_null( self::$instance ) ) {
@@ -87,7 +87,7 @@ abstract class LBFactory {
        /**
         * Shut down, close connections and destroy the cached instance.
         */
-       static function destroyInstance() {
+       public static function destroyInstance() {
                if ( self::$instance ) {
                        self::$instance->shutdown();
                        self::$instance->forEachLBCallMethod( 'closeAll' );
@@ -100,7 +100,7 @@ abstract class LBFactory {
         *
         * @param LBFactory $instance
         */
-       static function setInstance( $instance ) {
+       public static function setInstance( $instance ) {
                self::destroyInstance();
                self::$instance = $instance;
        }
@@ -109,7 +109,7 @@ abstract class LBFactory {
         * Construct a factory based on a configuration array (typically from $wgLBFactoryConf)
         * @param array $conf
         */
-       abstract function __construct( array $conf );
+       public abstract function __construct( array $conf );
 
        /**
         * Create a new load balancer object. The resulting object will be untracked,
@@ -118,7 +118,7 @@ abstract class LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancer
         */
-       abstract function newMainLB( $wiki = false );
+       public abstract function newMainLB( $wiki = false );
 
        /**
         * Get a cached (tracked) load balancer object.
@@ -126,7 +126,7 @@ abstract class LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancer
         */
-       abstract function getMainLB( $wiki = false );
+       public abstract function getMainLB( $wiki = false );
 
        /**
         * Create a new load balancer for external storage. The resulting object will be
@@ -137,7 +137,7 @@ abstract class LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancer
         */
-       abstract function newExternalLB( $cluster, $wiki = false );
+       protected abstract function newExternalLB( $cluster, $wiki = false );
 
        /**
         * Get a cached (tracked) load balancer for external storage
@@ -146,7 +146,7 @@ abstract class LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancer
         */
-       abstract function &getExternalLB( $cluster, $wiki = false );
+       public abstract function &getExternalLB( $cluster, $wiki = false );
 
        /**
         * Execute a function for each tracked load balancer
@@ -156,13 +156,13 @@ abstract class LBFactory {
         * @param callable $callback
         * @param array $params
         */
-       abstract function forEachLB( $callback, array $params = array() );
+       public abstract function forEachLB( $callback, array $params = array() );
 
        /**
         * Prepare all tracked load balancers for shutdown
         * STUB
         */
-       function shutdown() {
+       public function shutdown() {
        }
 
        /**
@@ -171,24 +171,16 @@ abstract class LBFactory {
         * @param string $methodName
         * @param array $args
         */
-       function forEachLBCallMethod( $methodName, array $args = array() ) {
-               $this->forEachLB( array( $this, 'callMethod' ), array( $methodName, $args ) );
-       }
-
-       /**
-        * Private helper for forEachLBCallMethod
-        * @param LoadBalancer $loadBalancer
-        * @param string $methodName
-        * @param array $args
-        */
-       function callMethod( $loadBalancer, $methodName, $args ) {
-               call_user_func_array( array( $loadBalancer, $methodName ), $args );
+       private function forEachLBCallMethod( $methodName, array $args = array() ) {
+               $this->forEachLB( function( LoadBalancer $loadBalancer, $methodName, array $args ) {
+                       call_user_func_array( array( $loadBalancer, $methodName ), $args );
+               }, array( $methodName, $args ) );
        }
 
        /**
         * Commit changes on all master connections
         */
-       function commitMasterChanges() {
+       public function commitMasterChanges() {
                $this->forEachLBCallMethod( 'commitMasterChanges' );
        }
 
@@ -196,7 +188,7 @@ abstract class LBFactory {
         * Rollback changes on all master connections
         * @since 1.23
         */
-       function rollbackMasterChanges() {
+       public function rollbackMasterChanges() {
                $this->forEachLBCallMethod( 'rollbackMasterChanges' );
        }
 
@@ -205,7 +197,7 @@ abstract class LBFactory {
         * @since 1.23
         * @return bool
         */
-       function hasMasterChanges() {
+       public function hasMasterChanges() {
                $ret = false;
                $this->forEachLB( function ( $lb ) use ( &$ret ) {
                        $ret = $ret || $lb->hasMasterChanges();
@@ -219,15 +211,15 @@ abstract class LBFactory {
  */
 class LBFactorySimple extends LBFactory {
        /** @var LoadBalancer */
-       protected $mainLB;
+       private $mainLB;
 
        /** @var LoadBalancer[] */
-       protected $extLBs = array();
+       private $extLBs = array();
 
        /** @var ChronologyProtector */
-       protected $chronProt;
+       private $chronProt;
 
-       function __construct( array $conf ) {
+       public function __construct( array $conf ) {
                $this->chronProt = new ChronologyProtector;
        }
 
@@ -235,7 +227,7 @@ class LBFactorySimple extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancer
         */
-       function newMainLB( $wiki = false ) {
+       public function newMainLB( $wiki = false ) {
                global $wgDBservers;
                if ( $wgDBservers ) {
                        $servers = $wgDBservers;
@@ -274,7 +266,7 @@ class LBFactorySimple extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancer
         */
-       function getMainLB( $wiki = false ) {
+       public function getMainLB( $wiki = false ) {
                if ( !isset( $this->mainLB ) ) {
                        $this->mainLB = $this->newMainLB( $wiki );
                        $this->mainLB->parentInfo( array( 'id' => 'main' ) );
@@ -290,7 +282,7 @@ class LBFactorySimple extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancer
         */
-       function newExternalLB( $cluster, $wiki = false ) {
+       protected function newExternalLB( $cluster, $wiki = false ) {
                global $wgExternalServers;
                if ( !isset( $wgExternalServers[$cluster] ) ) {
                        throw new MWException( __METHOD__ . ": Unknown cluster \"$cluster\"" );
@@ -306,7 +298,7 @@ class LBFactorySimple extends LBFactory {
         * @param bool|string $wiki
         * @return array
         */
-       function &getExternalLB( $cluster, $wiki = false ) {
+       public function &getExternalLB( $cluster, $wiki = false ) {
                if ( !isset( $this->extLBs[$cluster] ) ) {
                        $this->extLBs[$cluster] = $this->newExternalLB( $cluster, $wiki );
                        $this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
@@ -324,7 +316,7 @@ class LBFactorySimple extends LBFactory {
         * @param callable $callback
         * @param array $params
         */
-       function forEachLB( $callback, array $params = array() ) {
+       public function forEachLB( $callback, array $params = array() ) {
                if ( isset( $this->mainLB ) ) {
                        call_user_func_array( $callback, array_merge( array( $this->mainLB ), $params ) );
                }
@@ -333,7 +325,7 @@ class LBFactorySimple extends LBFactory {
                }
        }
 
-       function shutdown() {
+       public function shutdown() {
                if ( $this->mainLB ) {
                        $this->chronProt->shutdownLB( $this->mainLB );
                }
@@ -352,26 +344,26 @@ class LBFactorySimple extends LBFactory {
  * LBFactory::enableBackend() to return to normal behavior
  */
 class LBFactoryFake extends LBFactory {
-       function __construct( array $conf ) {
+       public function __construct( array $conf ) {
        }
 
-       function newMainLB( $wiki = false ) {
+       public function newMainLB( $wiki = false ) {
                throw new DBAccessError;
        }
 
-       function getMainLB( $wiki = false ) {
+       public function getMainLB( $wiki = false ) {
                throw new DBAccessError;
        }
 
-       function newExternalLB( $cluster, $wiki = false ) {
+       protected function newExternalLB( $cluster, $wiki = false ) {
                throw new DBAccessError;
        }
 
-       function &getExternalLB( $cluster, $wiki = false ) {
+       public function &getExternalLB( $cluster, $wiki = false ) {
                throw new DBAccessError;
        }
 
-       function forEachLB( $callback, array $params = array() ) {
+       public function forEachLB( $callback, array $params = array() ) {
        }
 }
 
@@ -379,7 +371,7 @@ class LBFactoryFake extends LBFactory {
  * Exception class for attempted DB access
  */
 class DBAccessError extends MWException {
-       function __construct() {
+       public function __construct() {
                parent::__construct( "Mediawiki tried to access the database via wfGetDB(). " .
                        "This is not allowed." );
        }
index 7100615..aa305ab 100644 (file)
@@ -77,82 +77,82 @@ class LBFactoryMulti extends LBFactory {
        // Required settings
 
        /** @var array A map of database names to section names */
-       protected $sectionsByDB;
+       private $sectionsByDB;
 
        /**
         * @var array A 2-d map. For each section, gives a map of server names to
         * load ratios
         */
-       protected $sectionLoads;
+       private $sectionLoads;
 
        /**
         * @var array A server info associative array as documented for
         * $wgDBservers. The host, hostName and load entries will be
         * overridden
         */
-       protected $serverTemplate;
+       private $serverTemplate;
 
        // Optional settings
 
        /** @var array A 3-d map giving server load ratios for each section and group */
-       protected $groupLoadsBySection = array();
+       private $groupLoadsBySection = array();
 
        /** @var array A 3-d map giving server load ratios by DB name */
-       protected $groupLoadsByDB = array();
+       private $groupLoadsByDB = array();
 
        /** @var array A map of hostname to IP address */
-       protected $hostsByName = array();
+       private $hostsByName = array();
 
        /** @var array A map of external storage cluster name to server load map */
-       protected $externalLoads = array();
+       private $externalLoads = array();
 
        /**
         * @var array A set of server info keys overriding serverTemplate for
         * external storage
         */
-       protected $externalTemplateOverrides;
+       private $externalTemplateOverrides;
 
        /**
         * @var array A 2-d map overriding serverTemplate and
         * externalTemplateOverrides on a server-by-server basis. Applies to both
         * core and external storage
         */
-       protected $templateOverridesByServer;
+       private $templateOverridesByServer;
 
        /** @var array A 2-d map overriding the server info by external storage cluster */
-       protected $templateOverridesByCluster;
+       private $templateOverridesByCluster;
 
        /** @var array An override array for all master servers */
-       protected $masterTemplateOverrides;
+       private $masterTemplateOverrides;
 
        /**
         * @var array|bool A map of section name to read-only message. Missing or
         * false for read/write
         */
-       protected $readOnlyBySection = array();
+       private $readOnlyBySection = array();
 
        // Other stuff
 
        /** @var array Load balancer factory configuration */
-       protected $conf;
+       private $conf;
 
        /** @var LoadBalancer[] */
-       protected $mainLBs = array();
+       private $mainLBs = array();
 
        /** @var LoadBalancer[] */
-       protected $extLBs = array();
+       private $extLBs = array();
 
        /** @var string */
-       protected $lastWiki;
+       private $lastWiki;
 
        /** @var string */
-       protected $lastSection;
+       private $lastSection;
 
        /**
         * @param array $conf
         * @throws MWException
         */
-       function __construct( array $conf ) {
+       public function __construct( array $conf ) {
                $this->chronProt = new ChronologyProtector;
                $this->conf = $conf;
                $required = array( 'sectionsByDB', 'sectionLoads', 'serverTemplate' );
@@ -186,7 +186,7 @@ class LBFactoryMulti extends LBFactory {
         * @param bool|string $wiki
         * @return string
         */
-       function getSectionForWiki( $wiki = false ) {
+       private function getSectionForWiki( $wiki = false ) {
                if ( $this->lastWiki === $wiki ) {
                        return $this->lastSection;
                }
@@ -206,7 +206,7 @@ class LBFactoryMulti extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancer
         */
-       function newMainLB( $wiki = false ) {
+       public function newMainLB( $wiki = false ) {
                list( $dbName, ) = $this->getDBNameAndPrefix( $wiki );
                $section = $this->getSectionForWiki( $wiki );
                $groupLoads = array();
@@ -229,7 +229,7 @@ class LBFactoryMulti extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancer
         */
-       function getMainLB( $wiki = false ) {
+       public function getMainLB( $wiki = false ) {
                $section = $this->getSectionForWiki( $wiki );
                if ( !isset( $this->mainLBs[$section] ) ) {
                        $lb = $this->newMainLB( $wiki, $section );
@@ -247,7 +247,7 @@ class LBFactoryMulti extends LBFactory {
         * @throws MWException
         * @return LoadBalancer
         */
-       function newExternalLB( $cluster, $wiki = false ) {
+       protected function newExternalLB( $cluster, $wiki = false ) {
                if ( !isset( $this->externalLoads[$cluster] ) ) {
                        throw new MWException( __METHOD__ . ": Unknown cluster \"$cluster\"" );
                }
@@ -267,7 +267,7 @@ class LBFactoryMulti extends LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancer
         */
-       function &getExternalLB( $cluster, $wiki = false ) {
+       public function &getExternalLB( $cluster, $wiki = false ) {
                if ( !isset( $this->extLBs[$cluster] ) ) {
                        $this->extLBs[$cluster] = $this->newExternalLB( $cluster, $wiki );
                        $this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
@@ -285,7 +285,7 @@ class LBFactoryMulti extends LBFactory {
         * @param array $groupLoads
         * @return LoadBalancer
         */
-       function newLoadBalancer( $template, $loads, $groupLoads ) {
+       private function newLoadBalancer( $template, $loads, $groupLoads ) {
                $servers = $this->makeServerArray( $template, $loads, $groupLoads );
                $lb = new LoadBalancer( array(
                        'servers' => $servers,
@@ -302,7 +302,7 @@ class LBFactoryMulti extends LBFactory {
         * @param array $groupLoads
         * @return array
         */
-       function makeServerArray( $template, $loads, $groupLoads ) {
+       private function makeServerArray( $template, $loads, $groupLoads ) {
                $servers = array();
                $master = true;
                $groupLoadsByServer = $this->reindexGroupLoads( $groupLoads );
@@ -344,7 +344,7 @@ class LBFactoryMulti extends LBFactory {
         * @param array $groupLoads
         * @return array
         */
-       function reindexGroupLoads( $groupLoads ) {
+       private function reindexGroupLoads( $groupLoads ) {
                $reindexed = array();
                foreach ( $groupLoads as $group => $loads ) {
                        foreach ( $loads as $server => $load ) {
@@ -360,7 +360,7 @@ class LBFactoryMulti extends LBFactory {
         * @param bool|string $wiki
         * @return array
         */
-       function getDBNameAndPrefix( $wiki = false ) {
+       private function getDBNameAndPrefix( $wiki = false ) {
                if ( $wiki === false ) {
                        global $wgDBname, $wgDBprefix;
 
@@ -377,7 +377,7 @@ class LBFactoryMulti extends LBFactory {
         * @param callable $callback
         * @param array $params
         */
-       function forEachLB( $callback, array $params = array() ) {
+       public function forEachLB( $callback, array $params = array() ) {
                foreach ( $this->mainLBs as $lb ) {
                        call_user_func_array( $callback, array_merge( array( $lb ), $params ) );
                }
@@ -386,7 +386,7 @@ class LBFactoryMulti extends LBFactory {
                }
        }
 
-       function shutdown() {
+       public function shutdown() {
                foreach ( $this->mainLBs as $lb ) {
                        $this->chronProt->shutdownLB( $lb );
                }
index 03b7fbe..a41dadf 100644 (file)
  */
 class LBFactorySingle extends LBFactory {
        /** @var LoadBalancerSingle */
-       protected $lb;
+       private $lb;
 
        /**
         * @param array $conf An associative array with one member:
         *  - connection: The DatabaseBase connection object
         */
-       function __construct( array $conf ) {
+       public function __construct( array $conf ) {
                $this->lb = new LoadBalancerSingle( $conf );
        }
 
@@ -40,7 +40,7 @@ class LBFactorySingle extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancerSingle
         */
-       function newMainLB( $wiki = false ) {
+       public function newMainLB( $wiki = false ) {
                return $this->lb;
        }
 
@@ -48,7 +48,7 @@ class LBFactorySingle extends LBFactory {
         * @param bool|string $wiki
         * @return LoadBalancerSingle
         */
-       function getMainLB( $wiki = false ) {
+       public function getMainLB( $wiki = false ) {
                return $this->lb;
        }
 
@@ -57,7 +57,7 @@ class LBFactorySingle extends LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancerSingle
         */
-       function newExternalLB( $cluster, $wiki = false ) {
+       protected function newExternalLB( $cluster, $wiki = false ) {
                return $this->lb;
        }
 
@@ -66,7 +66,7 @@ class LBFactorySingle extends LBFactory {
         * @param bool|string $wiki Wiki ID, or false for the current wiki
         * @return LoadBalancerSingle
         */
-       function &getExternalLB( $cluster, $wiki = false ) {
+       public function &getExternalLB( $cluster, $wiki = false ) {
                return $this->lb;
        }
 
@@ -74,7 +74,7 @@ class LBFactorySingle extends LBFactory {
         * @param string|callable $callback
         * @param array $params
         */
-       function forEachLB( $callback, array $params = array() ) {
+       public function forEachLB( $callback, array $params = array() ) {
                call_user_func_array( $callback, array_merge( array( $this->lb ), $params ) );
        }
 }
@@ -84,12 +84,12 @@ class LBFactorySingle extends LBFactory {
  */
 class LoadBalancerSingle extends LoadBalancer {
        /** @var DatabaseBase */
-       protected $db;
+       private $db;
 
        /**
         * @param array $params
         */
-       function __construct( array $params ) {
+       public function __construct( array $params ) {
                $this->db = $params['connection'];
                parent::__construct( array( 'servers' => array( array(
                        'type' => $this->db->getType(),
@@ -106,7 +106,7 @@ class LoadBalancerSingle extends LoadBalancer {
         *
         * @return DatabaseBase
         */
-       function reallyOpenConnection( $server, $dbNameOverride = false ) {
+       protected function reallyOpenConnection( $server, $dbNameOverride = false ) {
                return $this->db;
        }
 }
index 4e11af2..07645bd 100644 (file)
@@ -67,7 +67,7 @@ class LoadBalancer {
         *   loadMonitor       Name of a class used to fetch server lag and load.
         * @throws MWException
         */
-       function __construct( array $params ) {
+       public function __construct( array $params ) {
                if ( !isset( $params['servers'] ) ) {
                        throw new MWException( __CLASS__ . ': missing servers parameter' );
                }
@@ -117,7 +117,7 @@ class LoadBalancer {
         *
         * @return LoadMonitor
         */
-       function getLoadMonitor() {
+       private function getLoadMonitor() {
                if ( !isset( $this->mLoadMonitor ) ) {
                        $class = $this->mLoadMonitorClass;
                        $this->mLoadMonitor = new $class( $this );
@@ -131,7 +131,7 @@ class LoadBalancer {
         * @param mixed $x
         * @return mixed
         */
-       function parentInfo( $x = null ) {
+       public function parentInfo( $x = null ) {
                return wfSetVar( $this->mParentInfo, $x );
        }
 
@@ -144,7 +144,7 @@ class LoadBalancer {
         * @param array $weights
         * @return bool|int|string
         */
-       function pickRandom( array $weights ) {
+       public function pickRandom( array $weights ) {
                return ArrayUtils::pickRandom( $weights );
        }
 
@@ -153,7 +153,7 @@ class LoadBalancer {
         * @param bool|string $wiki Wiki to get non-lagged for
         * @return bool|int|string
         */
-       function getRandomNonLagged( array $loads, $wiki = false ) {
+       private function getRandomNonLagged( array $loads, $wiki = false ) {
                # Unset excessively lagged servers
                $lags = $this->getLagTimes( $wiki );
                foreach ( $lags as $i => $lag ) {
@@ -202,7 +202,7 @@ class LoadBalancer {
         * @throws MWException
         * @return bool|int|string
         */
-       function getReaderIndex( $group = false, $wiki = false ) {
+       public function getReaderIndex( $group = false, $wiki = false ) {
                global $wgReadOnly, $wgDBtype;
 
                # @todo FIXME: For now, only go through all this for mysql databases
@@ -364,7 +364,7 @@ class LoadBalancer {
         * @param int $i
         * @return DatabaseBase|bool False on failure
         */
-       function getAnyOpenConnection( $i ) {
+       public function getAnyOpenConnection( $i ) {
                foreach ( $this->mConns as $conns ) {
                        if ( !empty( $conns[$i] ) ) {
                                return reset( $conns[$i] );
@@ -594,7 +594,7 @@ class LoadBalancer {
         *
         * @access private
         */
-       function openConnection( $i, $wiki = false ) {
+       public function openConnection( $i, $wiki = false ) {
                wfProfileIn( __METHOD__ );
                if ( $wiki !== false ) {
                        $conn = $this->openForeignConnection( $i, $wiki );
@@ -640,7 +640,7 @@ class LoadBalancer {
         * @param string $wiki Wiki ID to open
         * @return DatabaseBase
         */
-       function openForeignConnection( $i, $wiki ) {
+       private function openForeignConnection( $i, $wiki ) {
                wfProfileIn( __METHOD__ );
                list( $dbName, $prefix ) = wfSplitWikiID( $wiki );
                if ( isset( $this->mConns['foreignUsed'][$i][$wiki] ) ) {
@@ -706,7 +706,7 @@ class LoadBalancer {
         * @access private
         * @return bool
         */
-       function isOpen( $index ) {
+       private function isOpen( $index ) {
                if ( !is_integer( $index ) ) {
                        return false;
                }
@@ -724,7 +724,7 @@ class LoadBalancer {
         * @throws MWException
         * @return DatabaseBase
         */
-       function reallyOpenConnection( $server, $dbNameOverride = false ) {
+       protected function reallyOpenConnection( $server, $dbNameOverride = false ) {
                if ( !is_array( $server ) ) {
                        throw new MWException( 'You must update your load-balancing configuration. ' .
                                'See DefaultSettings.php entry for $wgDBservers.' );
@@ -789,7 +789,7 @@ class LoadBalancer {
        /**
         * @return int
         */
-       function getWriterIndex() {
+       private function getWriterIndex() {
                return 0;
        }
 
@@ -799,7 +799,7 @@ class LoadBalancer {
         * @param string $i
         * @return bool
         */
-       function haveIndex( $i ) {
+       public function haveIndex( $i ) {
                return array_key_exists( $i, $this->mServers );
        }
 
@@ -809,7 +809,7 @@ class LoadBalancer {
         * @param string $i
         * @return bool
         */
-       function isNonZeroLoad( $i ) {
+       public function isNonZeroLoad( $i ) {
                return array_key_exists( $i, $this->mServers ) && $this->mLoads[$i] != 0;
        }
 
@@ -818,7 +818,7 @@ class LoadBalancer {
         *
         * @return int
         */
-       function getServerCount() {
+       public function getServerCount() {
                return count( $this->mServers );
        }
 
@@ -828,7 +828,7 @@ class LoadBalancer {
         * @param string $i
         * @return string
         */
-       function getServerName( $i ) {
+       public function getServerName( $i ) {
                if ( isset( $this->mServers[$i]['hostName'] ) ) {
                        return $this->mServers[$i]['hostName'];
                } elseif ( isset( $this->mServers[$i]['host'] ) ) {
@@ -843,7 +843,7 @@ class LoadBalancer {
         * @param int $i
         * @return array|bool
         */
-       function getServerInfo( $i ) {
+       public function getServerInfo( $i ) {
                if ( isset( $this->mServers[$i] ) ) {
                        return $this->mServers[$i];
                } else {
@@ -857,7 +857,7 @@ class LoadBalancer {
         * @param int $i
         * @param array $serverInfo
         */
-       function setServerInfo( $i, array $serverInfo ) {
+       public function setServerInfo( $i, array $serverInfo ) {
                $this->mServers[$i] = $serverInfo;
        }
 
@@ -865,7 +865,7 @@ class LoadBalancer {
         * Get the current master position for chronology control purposes
         * @return mixed
         */
-       function getMasterPos() {
+       public function getMasterPos() {
                # If this entire request was served from a slave without opening a connection to the
                # master (however unlikely that may be), then we can fetch the position from the slave.
                $masterConn = $this->getAnyOpenConnection( 0 );
@@ -891,7 +891,7 @@ class LoadBalancer {
        /**
         * Close all open connections
         */
-       function closeAll() {
+       public function closeAll() {
                foreach ( $this->mConns as $conns2 ) {
                        foreach ( $conns2 as $conns3 ) {
                                /** @var DatabaseBase $conn */
@@ -913,7 +913,7 @@ class LoadBalancer {
         * If you use $conn->close() directly, the load balancer won't update its state.
         * @param DatabaseBase $conn
         */
-       function closeConnection( $conn ) {
+       public function closeConnection( $conn ) {
                $done = false;
                foreach ( $this->mConns as $i1 => $conns2 ) {
                        foreach ( $conns2 as $i2 => $conns3 ) {
@@ -935,7 +935,7 @@ class LoadBalancer {
        /**
         * Commit transactions on all open connections
         */
-       function commitAll() {
+       public function commitAll() {
                foreach ( $this->mConns as $conns2 ) {
                        foreach ( $conns2 as $conns3 ) {
                                /** @var DatabaseBase[] $conns3 */
@@ -951,7 +951,7 @@ class LoadBalancer {
        /**
         *  Issue COMMIT only on master, only if queries were done on connection
         */
-       function commitMasterChanges() {
+       public function commitMasterChanges() {
                // Always 0, but who knows.. :)
                $masterIndex = $this->getWriterIndex();
                foreach ( $this->mConns as $conns2 ) {
@@ -971,7 +971,7 @@ class LoadBalancer {
         * Issue ROLLBACK only on master, only if queries were done on connection
         * @since 1.23
         */
-       function rollbackMasterChanges() {
+       public function rollbackMasterChanges() {
                // Always 0, but who knows.. :)
                $masterIndex = $this->getWriterIndex();
                foreach ( $this->mConns as $conns2 ) {
@@ -991,7 +991,7 @@ class LoadBalancer {
         * @return bool Whether a master connection is already open
         * @since 1.24
         */
-       function hasMasterConnection() {
+       public function hasMasterConnection() {
                return $this->isOpen( $this->getWriterIndex() );
        }
 
@@ -1001,7 +1001,7 @@ class LoadBalancer {
         * @since 1.23
         * @return bool
         */
-       function hasMasterChanges() {
+       public function hasMasterChanges() {
                // Always 0, but who knows.. :)
                $masterIndex = $this->getWriterIndex();
                foreach ( $this->mConns as $conns2 ) {
@@ -1022,14 +1022,14 @@ class LoadBalancer {
         * @param mixed $value
         * @return mixed
         */
-       function waitTimeout( $value = null ) {
+       public function waitTimeout( $value = null ) {
                return wfSetVar( $this->mWaitTimeout, $value );
        }
 
        /**
         * @return bool
         */
-       function getLaggedSlaveMode() {
+       public function getLaggedSlaveMode() {
                return $this->mLaggedSlaveMode;
        }
 
@@ -1038,7 +1038,7 @@ class LoadBalancer {
         * @param null|bool $mode
         * @return bool
         */
-       function allowLagged( $mode = null ) {
+       public function allowLagged( $mode = null ) {
                if ( $mode === null ) {
                        return $this->mAllowLagged;
                }
@@ -1050,7 +1050,7 @@ class LoadBalancer {
        /**
         * @return bool
         */
-       function pingAll() {
+       public function pingAll() {
                $success = true;
                foreach ( $this->mConns as $conns2 ) {
                        foreach ( $conns2 as $conns3 ) {
@@ -1071,7 +1071,7 @@ class LoadBalancer {
         * @param callable $callback
         * @param array $params
         */
-       function forEachOpenConnection( $callback, array $params = array() ) {
+       public function forEachOpenConnection( $callback, array $params = array() ) {
                foreach ( $this->mConns as $conns2 ) {
                        foreach ( $conns2 as $conns3 ) {
                                foreach ( $conns3 as $conn ) {
@@ -1092,7 +1092,7 @@ class LoadBalancer {
         * @param bool|string $wiki Wiki ID, or false for the default database
         * @return array ( host, max lag, index of max lagged host )
         */
-       function getMaxLag( $wiki = false ) {
+       public function getMaxLag( $wiki = false ) {
                $maxLag = -1;
                $host = '';
                $maxIndex = 0;
@@ -1121,7 +1121,7 @@ class LoadBalancer {
         * @param string|bool $wiki
         * @return int[] Map of (server index => seconds)
         */
-       function getLagTimes( $wiki = false ) {
+       public function getLagTimes( $wiki = false ) {
                if ( $this->getServerCount() <= 1 ) {
                        return array( 0 => 0 ); // no replication = no lag
                }
@@ -1152,7 +1152,7 @@ class LoadBalancer {
         * @param DatabaseBase $conn
         * @return int
         */
-       function safeGetLag( $conn ) {
+       public function safeGetLag( $conn ) {
                if ( $this->getServerCount() == 1 ) {
                        return 0;
                } else {
@@ -1163,7 +1163,7 @@ class LoadBalancer {
        /**
         * Clear the cache for slag lag delay times
         */
-       function clearLagTimeCache() {
+       public function clearLagTimeCache() {
                $this->mProcCache->clear( 'slave_lag' );
        }
 }
@@ -1177,13 +1177,13 @@ class LoadBalancer {
  */
 class DBConnRef implements IDatabase {
        /** @var LoadBalancer */
-       protected $lb;
+       private $lb;
 
        /** @var DatabaseBase|null */
-       protected $conn;
+       private $conn;
 
        /** @var array|null */
-       protected $params;
+       private $params;
 
        /**
         * @param LoadBalancer $lb
@@ -1207,7 +1207,7 @@ class DBConnRef implements IDatabase {
                return call_user_func_array( array( $this->conn, $name ), $arguments );
        }
 
-       function __destruct() {
+       public function __destruct() {
                if ( $this->conn !== null ) {
                        $this->lb->reuseConnection( $this->conn );
                }
index 3250ff8..0d52e64 100644 (file)
@@ -44,25 +44,31 @@ class InstallDocFormatter {
                // Replace tab indents with colons
                $text = preg_replace( '/^\t\t/m', '::', $text );
                $text = preg_replace( '/^\t/m', ':', $text );
+
+               $linkStart = '<span class="config-plainlink">[';
+               $linkEnd = ' $0]</span>';
+
+               // turn (Tnnnn) into links
+               $text = preg_replace(
+                       '/T\d+/',
+                       "{$linkStart}https://phabricator.wikimedia.org/$0{$linkEnd}",
+                       $text
+               );
+
                // turn (bug nnnn) into links
-               $text = preg_replace_callback( '/bug (\d+)/', array( $this, 'replaceBugLinks' ), $text );
+               $text = preg_replace(
+                       '/bug (\d+)/',
+                       "{$linkStart}https://bugzilla.wikimedia.org/$1{$linkEnd}",
+                       $text
+               );
+
                // add links to manual to every global variable mentioned
-               $text = preg_replace_callback(
-                       '/(\$wg[a-z0-9_]+)/i',
-                       array( $this, 'replaceConfigLinks' ),
+               $text = preg_replace(
+                       '/\$wg[a-z0-9_]+/i',
+                       "{$linkStart}https://www.mediawiki.org/wiki/Manual:$0{$linkEnd}",
                        $text
                );
 
                return $text;
        }
-
-       protected function replaceBugLinks( $matches ) {
-               return '<span class="config-plainlink">[https://bugzilla.wikimedia.org/' .
-                       $matches[1] . ' bug ' . $matches[1] . ']</span>';
-       }
-
-       protected function replaceConfigLinks( $matches ) {
-               return '<span class="config-plainlink">[https://www.mediawiki.org/wiki/Manual:' .
-                       $matches[1] . ' ' . $matches[1] . ']</span>';
-       }
 }
index 22fb1df..8ff3d2f 100644 (file)
@@ -296,11 +296,14 @@ class WebInstallerOutput {
                href="https://www.mediawiki.org/"
                title="Main Page"></a>
        </div>
-       <div class="portal"><div class="body">
 <?php
-       echo $this->parent->parse( wfMessage( 'config-sidebar' )->plain(), true );
+       $message = wfMessage( 'config-sidebar' )->plain();
+       foreach( explode( '----', $message ) as $section ) {
+               echo '<div class="portal"><div class="body">';
+               echo $this->parent->parse( $section, true );
+               echo '</div></div>';
+       }
 ?>
-       </div></div>
 </div>
 
 <?php
index e3a6075..27b930a 100644 (file)
        "config-email-auth": "Ενεργοποίηση ταυτοποίησης μέσω ηλεκτρονικού ταχυδρομείου",
        "config-upload-settings": "Ανέβασμα εικόνων και άλλων αρχείων",
        "config-upload-enable": "Ενεργοποιήστε το ανέβασμα αρχείων",
-       "config-upload-deleted": "Î\9aαÏ\84αλÏ\8cγοÏ\85 για διαγραφέντα αρχεία:",
+       "config-upload-deleted": "Î\9aαÏ\84αλÏ\8cγοÏ\82 για διαγραφέντα αρχεία:",
        "config-logo": "Διεύθυνση URL λογότυπου:",
        "config-instantcommons": "Ενεργοποίηση Instant Commons",
        "config-cc-again": "Επιλέξτε ξανά...",
        "config-advanced-settings": "Προηγμένες ρυθμίσεις παραμέτρων",
        "config-extensions": "Επεκτάσεις",
        "config-skins": "Θέματα εμφάνισης",
-       "config-skins-help": "Τα skins που αναφέρονται παραπάνω, εντοπίστηκαν στον κατάλογο <code>./skins</code>. Πρέπει να  ενεργοποιήσετε τουλάχιστον ένα, και επιλέξτε το προεπιλεγμένο.",
-       "config-skins-use-as-default": "ΧÏ\81ηÏ\83ιμοÏ\80οιήÏ\83Ï\84ε Î±Ï\85Ï\84Ï\8c Ï\84ο skin ως προεπιλογή",
-       "config-skins-must-enable-default": "Το skin που επιλέχθηκε ως προεπιλεγμένο πρέπει να ενεργοποιηθεί.",
+       "config-skins-help": "Τα θέματα εμφάνισης που αναφέρονται παραπάνω εντοπίστηκαν στον κατάλογο <code>./skins</code>. Πρέπει να  ενεργοποιήσετε τουλάχιστον ένα και να επιλέξτε ποιο θα είναι το προεπιλεγμένο.",
+       "config-skins-use-as-default": "ΧÏ\81ήÏ\83η Î±Ï\85Ï\84οÏ\8d Ï\84οÏ\85 Î¸Î­Î¼Î±Ï\84οÏ\82 ÎµÎ¼Ï\86άνιÏ\83ηÏ\82 ως προεπιλογή",
+       "config-skins-must-enable-default": "Το θέμα εμφάνισης που επιλέχθηκε ως προεπιλεγμένο πρέπει να είναι ενεργοποιημένο.",
        "config-install-step-done": "έγινε",
        "config-install-step-failed": "απέτυχε",
        "config-install-database": "Ρύθμιση βάσης δεδομένων",
index 17e0d50..c459010 100644 (file)
@@ -62,6 +62,7 @@
        "config-safe-mode": "<strong>Warning:</strong> PHP's [http://www.php.net/features.safe-mode safe mode] è attivato.\nPutesse fà cocche probblema, specialmente si state ausanno 'a funziona 'e carrecà file e 'o supporto d' ' e funziune <code>math</code>.",
        "config-xml-bad": "'O modulo XML 'e PHP è mancante.\nA MediaWiki servessero 'e funziune prisente dint'a stu modulo e nun faticarrà c' 'a configurazione 'e mò.\nSi se sta eseguenno Mandrake, installare 'o pacco php-xml.",
        "config-pcre-old": "<strong>Errore fatale:</strong> s'addimanna PCRE  $1 o succiessivo.\n'O file vuosto binario PHP è acucchiato c' 'o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Cchiù nfurmaziune].",
+       "config-pcre-no-utf8": "<strong>Fatale:</strong> 'E module PCRE d' 'o PHP pare ca se so' compilate senza PCRE_UTF8 supporto.\nA MediaWiki serve nu supporto UTF-8 pe' putè funziunà apposto.",
        "config-memory-raised": "'O valore 'e PHP <code>memory_limit</code> è $1, aumentato a $2.",
        "config-memory-bad": "<strong>Attenziò:</strong> 'o valore 'e PHP <code>memory_limit</code> è $1.\nProbabbilmente troppo basso.\n'A installazione se putesse scassà!",
        "config-ctype": "'''Errore''': 'o PHP s'adda ghienchere c' 'o supporto pe' l'[http://www.php.net/manual/it/ctype.installation.php estensione Ctype].",
index cf53f1d..e3541bd 100644 (file)
@@ -1003,7 +1003,9 @@ class Article implements Page {
                                        array( 'redirect' => 'no' )
                                );
 
-                               $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
+                               $outputPage->addSubtitle( "<span class=\"mw-redirectedfrom\">" .
+                                       wfMessage( 'redirectedfrom' )->rawParams( $redir )->parse()
+                               . "</span>" );
 
                                // Add the script to update the displayed URL and
                                // set the fragment if one was specified in the redirect
@@ -1025,7 +1027,9 @@ class Article implements Page {
                        // If it was reported from a trusted site, supply a backlink.
                        if ( $wgRedirectSources && preg_match( $wgRedirectSources, $rdfrom ) ) {
                                $redir = Linker::makeExternalLink( $rdfrom, $rdfrom );
-                               $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
+                               $outputPage->addSubtitle( "<span class=\"mw-redirectedfrom\">" .
+                                       wfMessage( 'redirectedfrom' )->rawParams( $redir )->parse()
+                               . "</span>" );
 
                                // Add the script to update the displayed URL
                                $outputPage->addJsConfigVars( array(
index 61f0504..b99093c 100644 (file)
@@ -1831,11 +1831,6 @@ class WikiPage implements Page, IDBAccessObject {
                        $changed = !$content->equals( $old_content );
 
                        if ( $changed ) {
-                               if ( !$content->isValid() ) {
-                                       wfProfileOut( __METHOD__ );
-                                       throw new MWException( "New content failed validity check!" );
-                               }
-
                                $dbw->begin( __METHOD__ );
                                try {
 
index 00209e2..88196db 100644 (file)
@@ -131,7 +131,7 @@ class ProfilerXhprof extends Profiler {
                if ( $exists ) {
                        xhprof_frame_begin( $section );
                        return new ScopedCallback( function() use ( $section ) {
-                               xhprof_frame_end( $section );
+                               xhprof_frame_end();
                        } );
                }
 
index c0a94af..072f87f 100644 (file)
@@ -303,10 +303,28 @@ class SpecialPage {
         *   - `prefixSearchSubpages( "" )` should return `array( foo", "bar", "baz" )`
         *
         * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
+        * @param int $limit Maximum number of results to return (usually 10)
+        * @param int $offset Number of results to skip (usually 0)
         * @return string[] Matching subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
+       public function prefixSearchSubpages( $search, $limit, $offset ) {
+               $subpages = $this->getSubpagesForPrefixSearch();
+               if ( !$subpages ) {
+                       return array();
+               }
+
+               return self::prefixSearchArray( $search, $limit, $subpages, $offset );
+       }
+
+       /**
+        * Return an array of subpages that this special page will accept for prefix
+        * searches. If this method requires a query you might instead want to implement
+        * prefixSearchSubpages() directly so you can support $limit and $offset. This
+        * method is better for static-ish lists of things.
+        *
+        * @return string[] subpages to search from
+        */
+       protected function getSubpagesForPrefixSearch() {
                return array();
        }
 
@@ -318,11 +336,13 @@ class SpecialPage {
         * @param string $search
         * @param int $limit
         * @param array $subpages
+        * @param int $offset
         * @return string[]
         */
-       protected static function prefixSearchArray( $search, $limit, array $subpages ) {
+       protected static function prefixSearchArray( $search, $limit, array $subpages, $offset ) {
                $escaped = preg_quote( $search, '/' );
-               return array_slice( preg_grep( "/^$escaped/i", $subpages ), 0, $limit );
+               return array_slice( preg_grep( "/^$escaped/i",
+                       array_slice( $subpages, $offset ) ), 0, $limit );
        }
 
        /**
index 9007603..cb97420 100644 (file)
@@ -134,22 +134,17 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
        }
 
        /**
-        * Return an array of subpages beginning with $search that this special page will accept.
+        * Return an array of subpages that this special page will accept.
         *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
-        * @return string[] Matching subpages
+        * @see also SpecialWatchlist::getSubpagesForPrefixSearch
+        * @return string[] subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
-               return self::prefixSearchArray(
-                       $search,
-                       $limit,
-                       // SpecialWatchlist uses SpecialEditWatchlist::getMode, so new types should be added
-                       // here and there - no 'edit' here, because that the default for this page
-                       array(
-                               'clear',
-                               'raw',
-                       )
+       public function getSubpagesForPrefixSearch() {
+               // SpecialWatchlist uses SpecialEditWatchlist::getMode, so new types should be added
+               // here and there - no 'edit' here, because that the default for this page
+               return array(
+                       'clear',
+                       'raw',
                );
        }
 
index 0efebb3..a61a673 100644 (file)
@@ -173,18 +173,12 @@ HTML;
        }
 
        /**
-        * Return an array of subpages beginning with $search that this special page will accept.
+        * Return an array of subpages that this special page will accept.
         *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
-        * @return string[] Matching subpages
+        * @return string[] subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
-               return self::prefixSearchArray(
-                       $search,
-                       $limit,
-                       array_keys( self::$frameworks )
-               );
+       public function getSubpagesForPrefixSearch() {
+               return array_keys( self::$frameworks );
        }
 
        protected function getGroupName() {
index dad9074..fa20994 100644 (file)
@@ -397,15 +397,12 @@ class SpecialListUsers extends IncludableSpecialPage {
        }
 
        /**
-        * Return an array of subpages beginning with $search that this special page will accept.
+        * Return an array of subpages that this special page will accept.
         *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
-        * @return string[] Matching subpages
+        * @return string[] subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
-               $subpages = User::getAllGroups();
-               return self::prefixSearchArray( $search, $limit, $subpages );
+       public function getSubpagesForPrefixSearch() {
+               return User::getAllGroups();
        }
 
        protected function getGroupName() {
index 99704a9..04c2fe9 100644 (file)
@@ -119,17 +119,15 @@ class SpecialLog extends SpecialPage {
        }
 
        /**
-        * Return an array of subpages beginning with $search that this special page will accept.
+        * Return an array of subpages that this special page will accept.
         *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
-        * @return string[] Matching subpages
+        * @return string[] subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
+       public function getSubpagesForPrefixSearch() {
                $subpages = $this->getConfig()->get( 'LogTypes' );
                $subpages[] = 'all';
                sort( $subpages );
-               return self::prefixSearchArray( $search, $limit, $subpages );
+               return $subpages;
        }
 
        private function parseParams( FormOptions $opts, $par ) {
index f5b19cc..670a397 100644 (file)
@@ -83,11 +83,13 @@ class SpecialPagesWithProp extends QueryPage {
         *
         * @param string $search Prefix to search for
         * @param int $limit Maximum number of results to return
+        * @param int $offset Number of pages to skip
         * @return string[] Matching subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
-               $subpages = array_keys( $this->getExistingPropNames() );
-               return self::prefixSearchArray( $search, $limit, $subpages );
+       public function prefixSearchSubpages( $search, $limit, $offset ) {
+               $subpages = array_keys( $this->queryExistingProps( $limit, $offset ) );
+               // We've already limited and offsetted, set to N and 0 respectively.
+               return self::prefixSearchArray( $search, count( $subpages ), $subpages, 0 );
        }
 
        /**
@@ -154,23 +156,38 @@ class SpecialPagesWithProp extends QueryPage {
 
        public function getExistingPropNames() {
                if ( $this->existingPropNames === null ) {
-                       $dbr = wfGetDB( DB_SLAVE );
-                       $res = $dbr->select(
-                               'page_props',
-                               'pp_propname',
-                               '',
-                               __METHOD__,
-                               array( 'DISTINCT', 'ORDER BY' => 'pp_propname' )
-                       );
-                       $propnames = array();
-                       foreach ( $res as $row ) {
-                               $propnames[$row->pp_propname] = $row->pp_propname;
-                       }
-                       $this->existingPropNames = $propnames;
+                       $this->existingPropNames = $this->queryExistingProps();
                }
                return $this->existingPropNames;
        }
 
+       protected function queryExistingProps( $limit = null, $offset = 0 ) {
+               $opts = array(
+                       'DISTINCT', 'ORDER BY' => 'pp_propname'
+               );
+               if ( $limit ) {
+                       $opts['LIMIT'] = $limit;
+               }
+               if ( $offset ) {
+                       $opts['OFFSET'] = $offset;
+               }
+
+               $res = wfGetDB( DB_SLAVE )->select(
+                       'page_props',
+                       'pp_propname',
+                       '',
+                       __METHOD__,
+                       $opts
+               );
+
+               $propnames = array();
+               foreach ( $res as $row ) {
+                       $propnames[$row->pp_propname] = $row->pp_propname;
+               }
+
+               return $propnames;
+       }
+
        protected function getGroupName() {
                return 'pages';
        }
index a2683e5..72d21eb 100644 (file)
@@ -263,22 +263,16 @@ class SpecialRedirect extends FormSpecialPage {
        }
 
        /**
-        * Return an array of subpages beginning with $search that this special page will accept.
+        * Return an array of subpages that this special page will accept.
         *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
-        * @return string[] Matching subpages
+        * @return string[] subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
-               return self::prefixSearchArray(
-                       $search,
-                       $limit,
-                       array(
-                               "file",
-                               "page",
-                               "revision",
-                               "user",
-                       )
+       protected function getSubpagesForPrefixSearch() {
+               return array(
+                       "file",
+                       "page",
+                       "revision",
+                       "user",
                );
        }
 
index 421840f..a06955d 100644 (file)
@@ -79,22 +79,16 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        }
 
        /**
-        * Return an array of subpages beginning with $search that this special page will accept.
+        * Return an array of subpages that this special page will accept.
         *
-        * @param string $search Prefix to search for
-        * @param int $limit Maximum number of results to return
-        * @return string[] Matching subpages
+        * @see also SpecialEditWatchlist::getSubpagesForPrefixSearch
+        * @return string[] subpages
         */
-       public function prefixSearchSubpages( $search, $limit = 10 ) {
-               // See also SpecialEditWatchlist::prefixSearchSubpages
-               return self::prefixSearchArray(
-                       $search,
-                       $limit,
-                       array(
-                               'clear',
-                               'edit',
-                               'raw',
-                       )
+       public function getSubpagesForPrefixSearch() {
+               return array(
+                       'clear',
+                       'edit',
+                       'raw',
                );
        }
 
index 50a7561..31c8f1a 100644 (file)
        "alllogstext": "عرض شامل لكل السجلات المتوفرة في {{SITENAME}}.\nباستطاعتك جعل القائمة أكثر تحديداً، وذلك باختيار نوع السجل واسم المستخدم (حساس لحالة الحروف)، أو الصفحة المتأثرة (أيضاً حساس لحالة الحروف).",
        "logempty": "لا توجد مدخلات مطابقة في السجل.",
        "log-title-wildcard": "ابحث عن عناوين تبدأ بهذا النص",
-       "showhideselectedlogentries": "إطÙ\87ار/إخÙ\81اء Ø³Ø¬Ù\84ات Ø§Ù\84دخÙ\88ل المختارة",
+       "showhideselectedlogentries": "غÙ\8aر Ø±Ø¤Ù\8aØ© Ù\85دخÙ\84ات Ø§Ù\84سجل المختارة",
        "allpages": "كل الصفحات",
        "nextpage": "الصفحة التالية ($1)",
        "prevpage": "الصفحة السابقة ($1)",
index c5182bc..d417347 100644 (file)
        "action-viewmywatchlist": "праглядаць ваш сьпіс назіраньня",
        "action-viewmyprivateinfo": "прагляд вашых прыватных зьвестак",
        "action-editmyprivateinfo": "рэдагаваньне вашых прыватных зьвестак",
+       "action-editcontentmodel": "рэдагаваньне мадэлі зьместу старонкі",
        "nchanges": "$1 {{PLURAL:$1|зьмена|зьмены|зьменаў}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|з апошняга візыту}}",
        "enhancedrc-history": "гісторыя",
        "expand_templates_generate_xml": "Паказаць дрэва аналізу XML",
        "expand_templates_generate_rawhtml": "Паказаць HTML",
        "expand_templates_preview": "Папярэдні прагляд",
+       "expand_templates_preview_fail_html": "<em>Праз тое што {{SITENAME}} мае ўключаным сыры HTML і адбылася страта зьвестак сэсіі, папярэдні прагляд схаваны, як засьцярога ад атакаў з дапамогай JavaScript.</em>\n\n<strong>Калі гэта слушная спроба перадпрагляду, калі ласка, паспрабуйце яшчэ раз.</strong>\nКалі гэта не спрацуе, паспрабуйце [[Special:UserLogout|выйсьці]] і ўвайсьці яшчэ раз.",
+       "expand_templates_preview_fail_html_anon": "<em>Праз тое што {{SITENAME}} мае ўключаным сыры HTML і вы не ўвайшлі ў сыстэму, папярэдні прагляд схаваны, як засьцярога ад атакаў з дапамогай JavaScript.</em>\n\n<strong>Калі гэта слушная спроба перадпрагляду, калі ласка, [[Special:UserLogin|увайдзіце ў сыстэму]] і паспрабуйце яшчэ раз.</strong>",
        "pagelanguage": "Выбар мовы старонкі",
        "pagelang-name": "Старонка",
        "pagelang-language": "Мова",
        "log-name-pagelang": "Журнал зьменаў мовы",
        "log-description-pagelang": "Гэта журнал зьменаў мовы старонак.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} мову старонкі $3 з $4 на $5.",
-       "default-skin-not-found": "Упс! Тэма афармленьня па змоўчаньні для вашай вікі, вызначаная ў <code dir=\"ltr\">$wgDefaultSkin</code> як <code>$1</code> недаступная.\n\nВашае ўсталяваньне, падобна, уключае наступныя тэмы афармленьня. Глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.\n\n$2\n\n; Калі вы толькі што ўсталявалі MediaWiki:\n: Напэўна вы ўсталявалі з git або наўпрост з крынічнага коду з ужываньнем іншага мэтаду. Гэта чакана. Паспрабуйце ўсталяваць некалькі тэмаў афармленьня з [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's каталёгу тэмаў]:\n:* Спампуйце [https://www.mediawiki.org/wiki/Download tarball-усталёўнік], які ўтрымлівае некалькі тэмаў і пашырэньняў. Вы можаце скапіяваць каталёг <code>skins/</code> зь яго.\n:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code dir=\"ltr\">skins/</code> вашай усталёўкі MediaWiki.\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча.\n\n; Калі вы толькі што абнавілі MediaWiki:\n: MediaWiki вэрсіі 1.24 і навейшыя больш не падключаюць тэмы афармленьня аўтаматычна (глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Інструкцыя:Аўтаматычнае выяўленьне тэмаў афармленьня]). Вы можаце дадаць наступныя радкі ў <code>LocalSettings.php</code>, каб падключыць усе ўсталяваныя тэмы афармленьня:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Калі вы толькі што зьмянілі <code>LocalSettings.php</code>:\n: Пераправерце назвы тэмаў афармленьня на наяўнасьць памылак.",
-       "default-skin-not-found-no-skins": "УпÑ\81! Ð¢Ñ\8dма Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ð¿Ð° Ð·Ð¼Ð¾Ñ\9eÑ\87анÑ\8cнÑ\8f Ð´Ð»Ñ\8f Ð²Ð°Ñ\88ай Ð²Ñ\96кÑ\96, Ð²Ñ\8bзнаÑ\87анаÑ\8f Ñ\9e <code>$wgDefaultSkin</code> Ñ\8fк <code>$1</code>, Ð½ÐµÐ´Ð°Ñ\81Ñ\82Ñ\83пнаÑ\8f.\n\nÐ\92Ñ\8b Ð½Ñ\8f Ð¼Ð°ÐµÑ\86е Ñ\9eÑ\81Ñ\82алÑ\8fванÑ\8bÑ\85 Ñ\82Ñ\8dмаÑ\9e Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f.\n\n; Ð\9aалÑ\96 Ð²Ñ\8b Ñ\82олÑ\8cкÑ\96 Ñ\88Ñ\82о Ñ\9eÑ\81Ñ\82алÑ\8fвалÑ\96 Ð°Ð±Ð¾ Ð°Ð±Ð½Ð°Ð²Ñ\96лÑ\96 MediaWiki:\n: Ð\9dапÑ\8dÑ\9eна Ð²Ñ\8b Ñ\9eÑ\81Ñ\82алÑ\8fвалÑ\96 Ð· git Ð°Ð±Ð¾ Ð½Ð°Ñ\9eпÑ\80оÑ\81Ñ\82 Ð· ÐºÑ\80Ñ\8bнÑ\96Ñ\87нага ÐºÐ¾Ð´Ñ\83 Ð· Ñ\83жÑ\8bванÑ\8cнем Ñ\96нÑ\88ага Ð¼Ñ\8dÑ\82адÑ\83. Ð\93Ñ\8dÑ\82а Ñ\87акана. MediaWiki Ð²Ñ\8dÑ\80Ñ\81Ñ\96Ñ\96 1.24 Ñ\96 Ð½Ð°Ð²ÐµÐ¹Ñ\88Ñ\8bÑ\8f Ð½Ñ\8f Ñ\9eÑ\82Ñ\80Ñ\8bмлÑ\96ваÑ\8eÑ\86Ñ\8c Ñ\82Ñ\8dмÑ\8b Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ñ\9e Ð³Ð°Ð»Ð¾Ñ\9eнÑ\8bм Ñ\81Ñ\85овÑ\96Ñ\88Ñ\87Ñ\8b. Ð\9fаÑ\81пÑ\80абÑ\83йÑ\86е Ñ\9eÑ\81Ñ\82алÑ\8fваÑ\86Ñ\8c Ð½ÐµÐºÐ°Ð»Ñ\8cкÑ\96 Ñ\82Ñ\8dмаÑ\9e Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ð· [https://www.mediawiki.org/wiki/Category:All_skins ÐºÐ°Ñ\82алÑ\91гÑ\83 Ñ\82Ñ\8dмаÑ\9e mediawiki.org]:\n:* Ð¡Ð¿Ð°Ð¼Ð¿Ñ\83йÑ\86е [https://www.mediawiki.org/wiki/Download tarball-Ñ\83Ñ\81Ñ\82алÑ\91Ñ\9eнÑ\96к], Ñ\8fкÑ\96 Ñ\9eÑ\82Ñ\80Ñ\8bмлÑ\96вае Ð½ÐµÐºÐ°Ð»Ñ\8cкÑ\96 Ñ\82Ñ\8dмаÑ\9e Ñ\96 Ð¿Ð°Ñ\88Ñ\8bÑ\80Ñ\8dнÑ\8cнÑ\8fÑ\9e. Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ñ\81капÑ\96Ñ\8fваÑ\86Ñ\8c ÐºÐ°Ñ\82алÑ\91г <code dir=\"ltr\">skins/</code> Ð·Ñ\8c Ñ\8fго.\n:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code>skins/</code> вашай усталёўкі MediaWiki.\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча. Глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.",
+       "default-skin-not-found": "Упс! Тэма афармленьня па змоўчаньні для вашай вікі, вызначаная ў <code dir=\"ltr\">$wgDefaultSkin</code> як <code>$1</code> недаступная.\n\nВашае ўсталяваньне, падобна, уключае наступныя тэмы афармленьня. Глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.\n\n$2\n\n; Калі вы толькі што ўсталявалі MediaWiki:\n: Напэўна вы ўсталявалі з git або наўпрост з крынічнага коду з ужываньнем іншага мэтаду. Гэта чакана. Паспрабуйце ўсталяваць некалькі тэмаў афармленьня з [https://www.mediawiki.org/wiki/Category:All_skins каталёгу тэмаў mediawiki.org]:\n:* Спампуйце [https://www.mediawiki.org/wiki/Download tarball-усталёўнік], які ўтрымлівае некалькі тэмаў і пашырэньняў. Вы можаце скапіяваць каталёг <code>skins/</code> зь яго.\n:* Спампуйце tarball-усталёўнікі для асобных тэмаў з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code dir=\"ltr\">skins/</code> вашай усталёўкі MediaWiki.\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча.\n\n; Калі вы толькі што абнавілі MediaWiki:\n: MediaWiki вэрсіі 1.24 і навейшыя больш не падключаюць тэмы афармленьня аўтаматычна (глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Інструкцыя:Аўтаматычнае выяўленьне тэмаў афармленьня]). Вы можаце дадаць наступныя радкі ў <code>LocalSettings.php</code>, каб падключыць усе ўсталяваныя тэмы афармленьня:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Калі вы толькі што зьмянілі <code>LocalSettings.php</code>:\n: Пераправерце назвы тэмаў афармленьня на наяўнасьць памылак.",
+       "default-skin-not-found-no-skins": "УпÑ\81! Ð¢Ñ\8dма Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ð¿Ð° Ð·Ð¼Ð¾Ñ\9eÑ\87анÑ\8cнÑ\96 Ð´Ð»Ñ\8f Ð²Ð°Ñ\88ай Ð²Ñ\96кÑ\96, Ð²Ñ\8bзнаÑ\87анаÑ\8f Ñ\9e <code>$wgDefaultSkin</code> Ñ\8fк <code>$1</code>, Ð½ÐµÐ´Ð°Ñ\81Ñ\82Ñ\83пнаÑ\8f.\n\nÐ\92Ñ\8b Ð½Ñ\8f Ð¼Ð°ÐµÑ\86е Ñ\9eÑ\81Ñ\82алÑ\8fванÑ\8bÑ\85 Ñ\82Ñ\8dмаÑ\9e Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f.\n\n; Ð\9aалÑ\96 Ð²Ñ\8b Ñ\82олÑ\8cкÑ\96 Ñ\88Ñ\82о Ñ\9eÑ\81Ñ\82алÑ\8fвалÑ\96 Ð°Ð±Ð¾ Ð°Ð±Ð½Ð°Ð²Ñ\96лÑ\96 MediaWiki:\n: Ð\9dапÑ\8dÑ\9eна Ð²Ñ\8b Ñ\9eÑ\81Ñ\82алÑ\8fвалÑ\96 Ð· git Ð°Ð±Ð¾ Ð½Ð°Ñ\9eпÑ\80оÑ\81Ñ\82 Ð· ÐºÑ\80Ñ\8bнÑ\96Ñ\87нага ÐºÐ¾Ð´Ñ\83 Ð· Ñ\83жÑ\8bванÑ\8cнем Ñ\96нÑ\88ага Ð¼Ñ\8dÑ\82адÑ\83. Ð\93Ñ\8dÑ\82а Ñ\87акана. MediaWiki Ð²Ñ\8dÑ\80Ñ\81Ñ\96Ñ\96 1.24 Ñ\96 Ð½Ð°Ð²ÐµÐ¹Ñ\88Ñ\8bÑ\8f Ð½Ñ\8f Ñ\9eÑ\82Ñ\80Ñ\8bмлÑ\96ваÑ\8eÑ\86Ñ\8c Ñ\82Ñ\8dмÑ\8b Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ñ\9e Ð³Ð°Ð»Ð¾Ñ\9eнÑ\8bм Ñ\81Ñ\85овÑ\96Ñ\88Ñ\87Ñ\8b. Ð\9fаÑ\81пÑ\80абÑ\83йÑ\86е Ñ\9eÑ\81Ñ\82алÑ\8fваÑ\86Ñ\8c Ð½ÐµÐºÐ°Ð»Ñ\8cкÑ\96 Ñ\82Ñ\8dмаÑ\9e Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ð· [https://www.mediawiki.org/wiki/Category:All_skins ÐºÐ°Ñ\82алÑ\91гÑ\83 Ñ\82Ñ\8dмаÑ\9e mediawiki.org]:\n:* Ð¡Ð¿Ð°Ð¼Ð¿Ñ\83йÑ\86е [https://www.mediawiki.org/wiki/Download tarball-Ñ\83Ñ\81Ñ\82алÑ\91Ñ\9eнÑ\96к], Ñ\8fкÑ\96 Ñ\9eÑ\82Ñ\80Ñ\8bмлÑ\96вае Ð½ÐµÐºÐ°Ð»Ñ\8cкÑ\96 Ñ\82Ñ\8dмаÑ\9e Ñ\96 Ð¿Ð°Ñ\88Ñ\8bÑ\80Ñ\8dнÑ\8cнÑ\8fÑ\9e. Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ñ\81капÑ\96Ñ\8fваÑ\86Ñ\8c ÐºÐ°Ñ\82алÑ\91г <code dir=\"ltr\">skins/</code> Ð·Ñ\8c Ñ\8fго.\n:* Ð¡Ð¿Ð°Ð¼Ð¿Ñ\83йÑ\86е tarball-Ñ\83Ñ\81Ñ\82алÑ\91Ñ\9eнÑ\96кÑ\96 Ð´Ð»Ñ\8f Ð°Ñ\81обнÑ\8b Ñ\82Ñ\8dмаÑ\9e Ð°Ñ\84аÑ\80мленÑ\8cнÑ\8f Ð· [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code>skins/</code> вашай усталёўкі MediaWiki.\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча. Глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (уключана)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''адключана''')",
        "mediastatistics": "Статыстыка мэдыяфайлаў",
index 720082f..a6192ee 100644 (file)
        "viewsourceold": "উৎস দেখাও",
        "editlink": "সম্পাদনা",
        "viewsourcelink": "উৎস দেখুন",
-       "editsectionhint": "পরিচ্ছেদ সম্পাদনা: $1",
+       "editsectionhint": "à¦\85নà§\81চ্ছেদ সম্পাদনা: $1",
        "toc": "পরিচ্ছেদসমূহ",
        "showtoc": "দেখাও",
        "hidetoc": "আড়ালে রাখো",
index 976e9d3..133825c 100644 (file)
        "nocookiesnew": "S'ha creat el compte d'usuari, però no esteu enregistrat. El projecte {{SITENAME}} usa galetes per enregistrar els usuaris. Si us plau activeu-les, per a poder enregistrar-vos amb el vostre nom d'usuari i la clau.",
        "nocookieslogin": "El programari {{SITENAME}} utilitza galetes per enregistrar usuaris. Teniu les galetes desactivades. Activeu-les i torneu a provar.",
        "nocookiesfornew": "No s'ha creat el compte d'usuari, ja que no es podia confirmar el seu origen.\nVerifiqueu que teniu habilitades les galetes al vostre navegador, torneu a carregar aquesta pàgina i intenteu-lo de nou.",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "No heu especificat un nom vàlid d'usuari.",
        "loginsuccesstitle": "S'ha iniciat la sessió amb èxit",
        "loginsuccess": "Heu iniciat la sessió a {{SITENAME}} com a «$1».",
        "template-semiprotected": "(semiprotegida)",
        "hiddencategories": "Aquesta pàgina forma part de {{PLURAL:$1|la següent categoria oculta|les següents categories ocultes}}:",
        "edittools": "<!-- Es mostrarà als formularis d'edició i de càrrega el text que hi haja després d'aquesta línia. -->",
+       "edittools-upload": "-",
        "nocreatetext": "El projecte {{SITENAME}} ha restringit la possibilitat de crear noves pàgines.\nPodeu modificar les planes ja existents o bé [[Special:UserLogin|entrar en un compte d'usuari]].",
        "nocreate-loggedin": "No teniu permisos per a crear pàgines noves.",
        "sectioneditnotsupported-title": "Edició de la secció no suportada",
        "content-model-text": "text net",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pàgines amb arguments duplicats en utilització de plantilles",
        "expensive-parserfunction-warning": "Atenció: Aquesta pàgina conté massa crides a funcions parserfunction complexes.\n\nActualment n'hi ha {{PLURAL:$1|$1|$1}} i, com a molt, {{PLURAL:$2|hauria|haurien}} de ser $2.",
        "expensive-parserfunction-category": "Pàgines amb massa crides de parser function",
        "post-expand-template-inclusion-warning": "Avís: La mida d'inclusió de la plantilla és massa gran.\nNo s'inclouran algunes plantilles.",
        "mergehistory-comment": "[[:$1]] fusionat en [[:$2]]: $3",
        "mergehistory-same-destination": "Les pàgines d'origen i de destinació no poden ser la mateixa",
        "mergehistory-reason": "Motiu:",
+       "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Registre de fusions",
        "revertmerge": "Desfusiona",
        "mergelogpagetext": "A sota hi ha una llista de les fusions més recents d'una pàgina d'historial en una altra.",
        "search-result-category-size": "{{PLURAL:$1|1 membre|$1 membres}} ({{PLURAL:$2|1 subcategoria|$2 subcategories}}, {{PLURAL:$3|1 fitxer|$3 fitxers}})",
        "search-redirect": "(redirigit des de $1)",
        "search-section": "(secció $1)",
+       "search-category": "(categoria $1)",
        "search-file-match": "(coincideix amb el contingut del fitxer)",
        "search-suggest": "Volíeu dir: $1",
        "search-interwiki-caption": "Projectes germans",
        "youremail": "Correu electrònic:",
        "username": "{{GENDER:$1|Nom d'usuari}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|del grup|dels grups}}:",
+       "prefs-memberingroups-type": "$1",
        "prefs-registration": "Hora de registre:",
+       "prefs-registration-date-time": "$1",
        "yourrealname": "Nom real*:",
        "yourlanguage": "Idioma:",
        "yourvariant": "Variant lingüística:",
        "saveusergroups": "Desa els grups d'usuari",
        "userrights-groupsmember": "Membre de:",
        "userrights-groupsmember-auto": "Membre implícit de:",
+       "userrights-groupsmember-type": "$1",
        "userrights-groups-help": "Podeu modificar els grups als quals pertany {{GENDER:$1|aquest usuari|aquesta usuària}}.\n* Una casella marcada significa que {{GENDER:$1|l’usuari|la usuària}} pertany a aquest grup.\n* Una casella no marcada significa que {{GENDER:$1|l’usuari|la usuària}} no pertany a aquest grup.\n* Un asterisc (*) indica que no {{GENDER:$1|el|la}} podreu treure del grup una vegada l'hàgiu afegit o viceversa.",
        "userrights-reason": "Motiu:",
        "userrights-no-interwiki": "No teniu permisos per a editar els permisos d'usuari d'altres wikis.",
        "userrights-notallowed": "No teniu autorització per concedir o retirar permisos d'usuari.",
        "userrights-changeable-col": "Grups que podeu canviar",
        "userrights-unchangeable-col": "Grups que no podeu canviar",
+       "userrights-irreversible-marker": "$1*",
        "userrights-conflict": "Conflicte de canvis dels permisos d'usuari. Reviseu i confirmeu els canvis.",
        "userrights-removed-self": "Heu suprimit els propis permisos correctament. Per tant, ja no podreu tornar a accedir a aquesta pàgina.",
        "group": "Grup:",
        "right-protect": "Canviar el nivell de protecció i modificar pàgines protegides",
        "right-editprotected": "Modificar pàgines protegides (sense protecció de cascada)",
        "right-editsemiprotected": "Edita les pàgines protegides com «{{int:protect-level-autoconfirmed}}»",
+       "right-editcontentmodel": "Editar el model de contingut d'una pàgina",
        "right-editinterface": "Editar la interfície d'usuari",
        "right-editusercssjs": "Editar els fitxers de configuració CSS i JS d'altres usuaris",
        "right-editusercss": "Editar els fitxers de configuració CSS d'altres usuaris",
        "action-viewmywatchlist": "mostra la llista de seguiment",
        "action-viewmyprivateinfo": "mostra la informació personal",
        "action-editmyprivateinfo": "edita la informació personal",
+       "action-editcontentmodel": "editar el model de contingut d'una pàgina",
        "nchanges": "$1 {{PLURAL:$1|canvi|canvis}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|des de la darrera visita}}",
        "enhancedrc-history": "historial",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
+       "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|Un usuari vigila|$1 usuaris vigilen}} aquesta pàgina]",
        "rc_categories": "Limita a les categories (separades amb \"|\")",
        "rc_categories_any": "Qualsevol",
+       "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} després del canvi",
        "newsectionsummary": "/* $1 */ secció nova",
        "rc-enhanced-expand": "Mostra detalls",
        "listgrouprights-rights": "Drets",
        "listgrouprights-helppage": "Help:Drets del grup",
        "listgrouprights-members": "(llista de membres)",
+       "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code>($2)</code></span>",
+       "listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 <code>($2)</code></span>",
        "listgrouprights-addgroup": "Pot afegir {{PLURAL:$2|grup|grups}}: $1",
        "listgrouprights-removegroup": "Treu membres {{PLURAL:$2|grup|grups}}: $1",
        "listgrouprights-addgroup-all": "Poder afegir tots els grups",
        "protect-fallback": "Permetre només a usuaris amb permisos de \"$1\"",
        "protect-level-autoconfirmed": "Permetre només usuaris autoconfirmats",
        "protect-level-sysop": "Permetre només administradors",
+       "protect-summary-desc": "[$1=$2] ($3)",
        "protect-summary-cascade": "en cascada",
        "protect-expiring": "expira el dia $1 (UTC)",
        "protect-expiring-local": "caduca el $1",
        "undelete-error-long": "S'han produït errors en revertir la supressió del fitxer:\n\n$1",
        "undelete-show-file-confirm": "Segur que voleu veure la revisió esborrada del fitxer «<nowiki>$1</nowiki>» corresponent a les $3 del $2?",
        "undelete-show-file-submit": "Sí",
+       "undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
        "namespace": "Espai de noms:",
        "invert": "Inverteix la selecció",
        "tooltip-invert": "Marqueu aquesta casella per ocultar els canvis a les pàgines de l'espai de noms seleccionat (i l'espai de noms associat si està activat)",
        "tooltip-pt-mycontris": "Llista de les vostres contribucions.",
        "tooltip-pt-login": "Us animem a registrar-vos, però no és obligatori",
        "tooltip-pt-logout": "Finalitza la sessió d'usuari",
+       "tooltip-pt-createaccount": "Us animem a què creeu un compte i inicieu sessió, encara que no és obligatori",
        "tooltip-ca-talk": "Discussió sobre el contingut d'aquesta pàgina",
        "tooltip-ca-edit": "Podeu modificar aquesta pàgina. Si us plau, previsualitzeu-la abans de desar.",
        "tooltip-ca-addsection": "Comença una nova secció",
        "tooltip-summary": "Afegiu un breu resum",
        "interlanguage-link-title": "$1 - $2",
        "common.css": "/* Editeu aquest fitxer per personalitzar totes les aparences per al lloc sencer */",
+       "print.css": "/* El CSS d'aquí afectarà la sortida impresa */",
+       "noscript.css": "/* El CSS d'aquí afectarà els usuaris que tinguin el JavaScript desactivat */",
+       "group-autoconfirmed.css": "/* El CSS d'aquí només afectarà els usuaris autoconfirmats */",
+       "group-user.css": "/* El CSS d'aquí només afectarà els usuaris registrats */",
+       "group-bot.css": "/* El CSS d'aquí només afectarà els bots */",
+       "group-sysop.css": "/* El CSS d'aquí només afectarà els sysops */",
+       "group-bureaucrat.css": "/* El CSS d'aquí només afectarà els buròcrates */",
        "common.js": "/* Es carregarà per a tots els usuaris, i per a qualsevol pàgina, el codi JavaScript que hi haja després d'aquesta línia. */",
+       "group-autoconfirmed.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als usuaris autoconfirmats */",
+       "group-user.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als usuaris rgistrats */",
+       "group-bot.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als bots */",
+       "group-sysop.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als sysops */",
+       "group-bureaucrat.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als buròcrates */",
        "anonymous": "Usuari{{PLURAL:$1| anònim|s anònims}} del projecte {{SITENAME}}",
        "siteuser": "{{GENDER:$2|l'usuari|la usuària}} $1 del projecte {{SITENAME}}",
        "anonuser": "$1, usuari anònim de {{SITENAME}}",
        "pageinfo-watchers": "Número d'usuaris que vigilen la pàgina",
        "pageinfo-few-watchers": "Menys de $1 {{PLURAL:$1|observador|observadors}}",
        "pageinfo-redirects-name": "Nombre de redireccions a aquesta pàgina",
+       "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Subpàgines d'aquesta pàgina",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirecció|redireccions}}; $3 {{PLURAL:$3|no redireció|no redireccions}})",
        "pageinfo-firstuser": "Creador de la pàgina",
        "mediawarning": "'''Advertència''': Aquest fitxer podria contenir codi maliciós.\nSi l'executeu, podeu comprometre la seguretat del vostre sistema.",
        "imagemaxsize": "Límit de mida d'imatges:<br />''(per a pàgines de descripció de fitxers)''",
        "thumbsize": "Mida de la miniatura:",
+       "widthheight": "$1 × $2",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pàgina|pàgines}}",
        "file-info": "mida: $1, tipus MIME: $2",
        "file-info-size": "$1 × $2 píxels, mida del fitxer: $3, tipus MIME: $4",
        "ilsubmit": "Cerca",
        "bydate": "per data",
        "sp-newimages-showfrom": "Mostra fitxers nous des del $1 a les $2",
+       "video-dims": "$1, $2 × $3",
+       "seconds-abbrev": "$1 s",
        "minutes-abbrev": "$1 min",
+       "hours-abbrev": "$1 h",
+       "days-abbrev": "$1 d",
        "seconds": "{{PLURAL:$1|$1 segon|$1 segons}}",
        "minutes": "{{PLURAL:$1|$1 minut|$1 minuts}}",
        "hours": "{{PLURAL:$1|$1 hora|$1 hores}}",
        "sunday-at": "Diumenge a les $1",
        "yesterday-at": "Ahir a les $1",
        "bad_image_list": "El format ha de ser el següent:\n\nNomés els elements de llista (les línies que comencin amb un *) es prenen en consideració. El primer enllaç de cada línia ha de ser el d'un fitxer dolent.\nLa resta d'enllaços de la línia són les excepcions, és a dir, les pàgines on s'hi pot encabir el fitxer.",
+       "variantname-zh-cn": "cn",
+       "variantname-zh-tw": "tw",
+       "variantname-zh-hk": "hk",
+       "variantname-zh-mo": "mo",
+       "variantname-zh-sg": "sg",
+       "variantname-zh-my": "my",
+       "variantname-zh": "zh",
+       "variantname-sr-ec": "sr-ec",
+       "variantname-shi-latn": "shi-Latn",
+       "variantname-shi": "shi",
+       "variantname-uz": "uz",
+       "variantname-uz-latn": "uz-Latn",
+       "variantname-uz-cyrl": "uz-Cyrl",
        "metadata": "Metadades",
        "metadata-help": "Aquest fitxer conté informació addicional, probablement afegida per la càmera digital o l'escàner utilitzat per a crear-lo o digitalitzar-lo. Si s'ha modificat posteriorment, alguns detalls poden no reflectir les dades reals del fitxer modificat.",
        "metadata-expand": "Mostra els detalls estesos",
        "metadata-collapse": "Amaga els detalls estesos",
        "metadata-fields": "Els camps de metadades de la imatge llistats en aquest missatge s'inclouran en la pàgina de descripció de la imatge fins i tot quan la taula estigui plegada. La resta estaran ocults però es podran desplegar.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-langitem": "<strong>$2:</strong> $1",
+       "metadata-langitem-default": "$1",
        "exif-imagewidth": "Amplada",
        "exif-imagelength": "Alçada",
        "exif-bitspersample": "Octets per component",
        "exif-exposuretime": "Temps d'exposició",
        "exif-exposuretime-format": "$1 s ($2)",
        "exif-fnumber": "Obertura del diafragma",
+       "exif-fnumber-format": "f/$1",
        "exif-exposureprogram": "Programa d'exposició",
        "exif-spectralsensitivity": "Sensibilitat espectral",
        "exif-isospeedratings": "Sensibilitat ISO",
        "exif-lightsource": "Font de llum",
        "exif-flash": "Flaix",
        "exif-focallength": "Longitud focal de la lent",
+       "exif-focallength-format": "$1 mm",
        "exif-subjectarea": "Enquadre del subjecte",
        "exif-flashenergy": "Energia del flaix",
        "exif-focalplanexresolution": "Resolució X del pla focal",
        "exif-compression-2": "Codificació CCITT Grup 3 longitud monodimensional de Huffman modificat",
        "exif-compression-3": "Codificació de fax CCITT grup 3",
        "exif-compression-4": "Codificació de fax CCITT grup 4",
+       "exif-compression-6": "JPEG (antic)",
        "exif-copyrighted-true": "Sotmesa a drets d'autor",
        "exif-copyrighted-false": "No s'ha definit l'estat de copyright",
        "exif-unknowndate": "Data desconeguda",
index bd4df6d..883dbd7 100644 (file)
@@ -83,7 +83,7 @@
        "tog-prefershttps": "Να γίνεται πάντα χρήση ασφαλούς σύνδεσης όταν ο χρήστης είναι συνδεδεμένος",
        "underline-always": "Πάντα",
        "underline-never": "Ποτέ",
-       "underline-default": "Προεπιλογή από το θέμα ή από τον περιηγητή",
+       "underline-default": "Προεπιλογή από θέμα εμφάνισης ή από περιηγητή",
        "editfont-style": "Στυλ γραμματοσειράς της περιοχής επεξεργασίας:",
        "editfont-default": "Προεπιλογή περιηγητή",
        "editfont-monospace": "Γραμματοσειρά με σταθερό πλάτος χαρακτήρων",
        "expensive-parserfunction-warning": "Προειδοποίηση: Αυτή η σελίδα περιέχει πάρα πολύ ακριβό αναλυτή λειτουργικών κλήσεων.\n\nΠρέπει να περιέχει λιγότερες από $2 {{PLURAL:$2|κλήση|κλήσεις}}, τώρα {{PLURAL:$1|υπάρχει $1 κλήση|υπάρχουν $1 κλήσεις}}.",
        "expensive-parserfunction-category": "Σελίδες με πάρα πολλές ακριβές κλήσεις σε λεξιαναλυτικές συναρτήσεις",
        "post-expand-template-inclusion-warning": "'''Προειδοποίηση:''' Το μέγεθος συμπερίληψης προτύπων είναι πολύ μεγάλο.\nΚάποια πρότυπα δεν θα συμπεριληφθούν.",
-       "post-expand-template-inclusion-category": "ΣελίδεÏ\82 Ï\8cÏ\80οÏ\85 Ï\85Ï\80εÏ\81βαίνεÏ\84αι Ï\84ο Ï\8cÏ\81ιο Î¼ÎµÎ³Î­Î¸Î¿Ï\85Ï\82 Ï\83Ï\85μÏ\80εÏ\81ίληÏ\88ηÏ\82 Ï\80Ï\81οÏ\84Ï\8dÏ\80Ï\89ν",
+       "post-expand-template-inclusion-category": "ΣελίδεÏ\82 Ï\8cÏ\80οÏ\85 Ï\84ο Ï\8cÏ\81ιο Î¼ÎµÎ³Î­Î¸Î¿Ï\85Ï\82 Ï\83Ï\85μÏ\80εÏ\81ίληÏ\88ηÏ\82 Ï\80Ï\81οÏ\84Ï\8dÏ\80Ï\89ν Ï\85Ï\80εÏ\81βαίνεÏ\84αι",
        "post-expand-template-argument-warning": "'''Προειδοποίηση:''' Αυτή η σελίδα περιέχει τουλάχιστον μια παράμετρο προτύπου η οποία έχει πολύ μεγάλο μέγεθος ανάπτυξης.\nΑυτές οι παράμετροι έχουν παραλειφθεί.",
        "post-expand-template-argument-category": "Σελίδες που περιέχουν παραλειπόμενες παραμέτρους προτύπων",
        "parser-template-loop-warning": "Εντοπίστηκε πρότυπο σε βρόχο: [[$1]]",
        "prefs-files": "Αρχεία",
        "prefs-custom-css": "Προκαθορισμένη CSS",
        "prefs-custom-js": "Προκαθορισμένη JS",
-       "prefs-common-css-js": "Κοινά CSS/JS για όλα τα θέματα:",
+       "prefs-common-css-js": "Κοινά CSS/JavaScript για όλα τα θέματα εμφάνισης:",
        "prefs-reset-intro": "Μπορείτε να χρησιμοποιήσετε αυτήν την σελίδα για να επαναρρυθμίσετε τις προτιμήσεις σας στις προεπιλογές του ιστότοπου. Αυτό δεν μπορεί να αναστρεφθεί.",
        "prefs-emailconfirm-label": "Επιβεβαίωση e-mail:",
        "youremail": "Διεύθυνση ηλεκτρονικού ταχυδρομείου:",
        "uploaddisabledtext": "Το ανέβασμα αρχείων είναι απενεργοποιημένο.",
        "php-uploaddisabledtext": "Οι επιφορτώσεις αρχείων ειναι απενεργοποιημένες στην PHP. Παρακαλούμε, ελέγξτε την ρύθμιση file_uploads.",
        "uploadscripted": "Αυτό το αρχείο περιέχει κώδικα HTML ή script που μπορεί να παρερμηνευθεί από μερικούς browser.",
-       "uploadscriptednamespace": "Î\91Ï\85Ï\84Ï\8c Ï\84ο Î±Ï\81Ï\87είο SVG Ï\80εÏ\81ιέÏ\87ει Î­Î½Î±Î½ Î¼Î· Î±Ï\80οδεκÏ\84Ï\8c Î¿Î½Î¿Î¼Î±Ï\84οÏ\87Ï\8eÏ\81ο \"$1\".",
+       "uploadscriptednamespace": "Î\91Ï\85Ï\84Ï\8c Ï\84ο Î±Ï\81Ï\87είο SVG Ï\80εÏ\81ιέÏ\87ει Î¼Î· Î±Ï\80οδεκÏ\84Ï\8c Î¿Î½Î¿Î¼Î±Ï\84οÏ\87Ï\8eÏ\81ο Â«$1».",
        "uploadinvalidxml": "Δεν ήταν δυνατή η ανάλυση του κώδικα XML στο αρχείο.",
        "uploadvirus": "Το αρχείο περιέχει ιό! Λεπτομέρειες: $1",
        "uploadjava": "Το αρχείο είναι αρχείο ZIP, το οποίο περιέχει ένα αρχείο .class της γλώσσας Java.\nΔεν επιτρέπεται η αποστολή αρχείων Java, επειδή μπορούν να προκαλέσουν παράκαμψη των περιορισμών ασφαλείας του συστήματος.",
index 2ac9a42..fe227ff 100644 (file)
        "ipbenableautoblock": "Blokeeri automaatselt viimane IP-aadress, mida see kasutaja kasutas, ja ka järgnevad, mille alt ta võib proovida kaastööd teha",
        "ipbsubmit": "Blokeeri see kasutaja",
        "ipbother": "Muu tähtaeg:",
-       "ipboptions": "2 tundi:2 hours,1 päev:1 day,3 päeva:3 days,1 nädal:1 week,2 nädalat:2 weeks,1 kuu:1 month,3 kuud:3 months,6 kuud:6 months,1 aasta:1 year,igavene:infinite",
+       "ipboptions": "2 tundi:2 hours,1 päev:1 day,3 päeva:3 days,1 nädal:1 week,2 nädalat:2 weeks,1 kuu:1 month,3 kuud:3 months,6 kuud:6 months,1 aasta:1 year,tähtajatu:infinite",
        "ipbhidename": "Peida kasutajatunnus muudatustest ja loenditest",
        "ipbwatchuser": "Jälgi selle kasutaja lehekülge ja arutelu",
        "ipb-disableusertalk": "Keela sellel kasutajal blokeeringu ajal oma arutelulehekülge redigeerida",
        "log-name-pagelang": "Keele muutmise logi",
        "log-description-pagelang": "Siia on logitud lehekülgede keele muutmised.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutis}} lehekülje \"$3\" keelt: $4 → $5.",
-       "default-skin-not-found": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nPaistab, et sinu install sisaldab järgmisi kujundusi. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas neid lubada ja kuidas valida vaikekujundus.\n\n$2\n\n; Kui oled MediaWiki just paigaldanud:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja.\n\n; Kui oled MediaWikit just täiendanud:\n: MediaWiki 1.24-s ja uuemates versioonides pole paigaldatud kujundused enam automaatselt lubatud (vaata juhendist [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery kujunduste automaatse leidmise] kohta). Saad kleepida järgmised read leheküljele <code>LocalSettings.php</code>, et lubada kõik praegu paigaldatud kujundused:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Kui oled lehekülge <code>LocalSettings.php</code> just muutnud:\n: Kontrolli üle, ega kujunduste nimedes pole trükivigu.",
-       "default-skin-not-found-no-skins": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nÜhtegi kujundust pole paigaldatud.\n\n; Kui oled MediaWiki just paigaldanud või täiendasid seda:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. MediaWiki 1.24 ja uuemad versioonid ei sisalda peahoidlas ühtegi kujundust. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas kujundusi lubada ja kuidas valida vaikekujundus.",
+       "default-skin-not-found": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nPaistab, et sinu install sisaldab järgmisi kujundusi. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas neid lubada ja kuidas valida vaikekujundus.\n\n$2\n\n; Kui oled MediaWiki just paigaldanud:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org-ist] kindla kujunduse lintarhiivi alla laadida;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja.\n\n; Kui oled MediaWikit just täiendanud:\n: MediaWiki 1.24-s ja uuemates versioonides pole paigaldatud kujundused enam automaatselt lubatud (vaata juhendist [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery kujunduste automaatse leidmise] kohta). Saad kleepida järgmised read leheküljele <code>LocalSettings.php</code>, et lubada kõik praegu paigaldatud kujundused:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Kui oled lehekülge <code>LocalSettings.php</code> just muutnud:\n: Kontrolli üle, ega kujunduste nimedes pole trükivigu.",
+       "default-skin-not-found-no-skins": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nÜhtegi kujundust pole paigaldatud.\n\n; Kui oled MediaWiki just paigaldanud või täiendasid seda:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. MediaWiki 1.24 ja uuemad versioonid ei sisalda peahoidlas ühtegi kujundust. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org-ist] kindla kujunduse lintarhiivi alla laadida;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas kujundusi lubada ja kuidas valida vaikekujundus.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (lubatud)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''keelatud''')",
        "mediastatistics": "Meediafailide arvandmestik",
index 76840fb..62cfc72 100644 (file)
        "right-protect": "Sidjenseekerhaid feranre an kaskaaden-seekert sidjen bewerke",
        "right-editprotected": "Sidjen bewerke, diar mä „{{int:protect-level-sysop}}“ seekert san.",
        "right-editsemiprotected": "Sidjen bewerke, diar mä „{{int:protect-level-autoconfirmed}}“ seekert san.",
+       "right-editcontentmodel": "Det model faan det sidj bewerke",
        "right-editinterface": "Brüker-skak bewerke",
        "right-editusercssjs": "CSS- an JavaScript-datein faan ööder brükern bewerke",
        "right-editusercss": "CSS-datein faan ööder brükern bewerke",
        "action-viewmywatchlist": "sidjen uuntulukin, diar dü uun't uug behual wel",
        "action-viewmyprivateinfo": "din priwoot dooten uuntulukin",
        "action-editmyprivateinfo": "din priwoot dooten tu bewerkin",
+       "action-editcontentmodel": "det model faan det sidj tu bewerkin",
        "nchanges": "$1 {{PLURAL:$1|feranrang|feranrangen}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sant dan leetst beschük}}",
        "enhancedrc-history": "Ferluup",
        "specialpages-group-wiki": "Dooten an werktjüch",
        "specialpages-group-redirects": "Spezial-sidjen, diar widjer feer",
        "specialpages-group-spam": "''Spam'' werktjüch",
+       "specialpages-group-developer": "Werktjüügen",
        "blankpage": "Leesag sidj",
        "intentionallyblankpage": "Det sidj as mä walem leesag. Hat woort för benchmarks brükt.",
        "external_image_whitelist": " #Feranere detheer rä ei<pre>\n#Dialen faan reguleer ütjdrüker (tesken a tiakens //) kön oner iinden wurd.\n#Jo wurd do mä URLs faan ekstern bilen ferglikt.\n#Huar't auerianstemet, woort det bil uunwiset, ööders bluas en ferwis üüb det bil.\n#Räen mä en # bi a began san komentaaren.\n#Grat- an letjskriiwang woort ei onerskääst.\n\n#Skriiw dialen faan reguleer ütjdrüker auer detheer rä. Feranere detheer rä ei</pre>",
        "expand_templates_generate_xml": "XML-parser-buum uunwise",
        "expand_templates_generate_rawhtml": "Rä HTML uunwise",
        "expand_templates_preview": "Föörskau",
+       "expand_templates_preview_fail_html": "<em>Auer {{SITENAME}} rä HTML aktiwiaret hää an session-dooten wech san, as det föörskau ütj seekerhaids-grünjer ferbürgen wurden.</em>\n\n<strong>Wees so gud an ferschük det noch ans.</strong>\nWan det do uk noch ei gongt, [[Special:UserLogout|melde di uf]] an weder uun.",
+       "expand_templates_preview_fail_html_anon": "<em>Auer {{SITENAME}} rä HTML aktiwiaret hää an dü ein uunmeldet beest, as det föörskau ütj seekerhaids-grünjer ferbürgen wurden.</em>\n\n<strong>Wees so gud an [[Special:UserLogin|melde di uun]], an ferschük det noch ans.</strong>",
        "pagelanguage": "Ütjwool faan sidjenspriaken",
        "pagelang-name": "Sidj",
        "pagelang-language": "Spriak",
        "log-name-pagelang": "Logbuk för spriak-feranrangen",
        "log-description-pagelang": "Det as en logbuk för sidjenspriak-feranrangen",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|hää}} det sidjenspriak för $3 faan $4 tu $5 feranert.",
-       "default-skin-not-found": "Uuha! Uun <code dir=\"ltr\">$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDin instalatjuun hää wel jodiar skaker. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.\n\n$2\n\n; Wan dü MediaWiki jüst instaliaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest.\n\n; Wan dü jüst MediaWiki aktualisiaret heest:\n: MediaWiki 1.24 an neier werjuunen aktiwiare instaliaret skaker ei muar faan salew (luke uk iin uun det [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery brüker-hoonbuk]). Dü könst jodiar räen uun det datei <code>LocalSettings.php</code> iinsaat, am aal a instaliaret skaker tu aktiwiarin:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Wan dü jüst <code>LocalSettings.php</code> feranert heest:\n: Heest dü a skaker uk aaltumaal rocht skrewen?",
-       "default-skin-not-found-no-skins": "Uuha! Uun <code>$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDü heest goor nian skak instaliaret.\n\n; Wan dü MediaWiki jüst instaliaret of aktualisiaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. MediaWiki 1.24 an neier werjuunen haa nian skak uun't hood-fertiaknis. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.",
+       "default-skin-not-found": "Uuha! Uun <code dir=\"ltr\">$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDin instalatjuun hää wel jodiar skaker. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.\n\n$2\n\n; Wan dü MediaWiki jüst instaliaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest.\n\n; Wan dü jüst MediaWiki aktualisiaret heest:\n: MediaWiki 1.24 an neier werjuunen aktiwiare instaliaret skaker ei muar faan salew (luke uk iin uun det [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery brüker-hoonbuk]). Dü könst jodiar räen uun det datei <code>LocalSettings.php</code> iinsaat, am aal a instaliaret skaker tu aktiwiarin:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Wan dü jüst <code>LocalSettings.php</code> feranert heest:\n: Heest dü a skaker uk aaltumaal rocht skrewen?",
+       "default-skin-not-found-no-skins": "Uuha! Uun <code>$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDü heest goor nian skak instaliaret.\n\n; Wan dü MediaWiki jüst instaliaret of aktualisiaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. MediaWiki 1.24 an neier werjuunen haa nian skak uun't hood-fertiaknis. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiwiaret)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ufsteld''')",
        "mediastatistics": "Statistik faan meedien",
index 5ff1b41..d90b777 100644 (file)
        "filerenameerror": "Non se pode cambiar o nome do ficheiro \"$1\" a \"$2\".",
        "filedeleteerror": "Non se deu borrado o ficheiro \"$1\".",
        "directorycreateerror": "Non se puido crear o directorio \"$1\".",
+       "directoryreadonlyerror": "«$1» é un cartafol de só lectura.",
+       "directorynotreadableerror": "Non ten permisos de lectura no cartafol «$1».",
        "filenotfound": "Non se deu atopado o ficheiro \"$1\".",
        "unexpected": "Valor inesperado: \"$1\"=\"$2\".",
        "formerror": "Erro: Non se pode enviar o formulario.",
        "search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoría|$2 subcategorías}}, {{PLURAL:$3|1 ficheiro|$3 ficheiros}})",
        "search-redirect": "(redirixido desde \"$1\")",
        "search-section": "(sección \"$1\")",
+       "search-category": "(categoría $1)",
        "search-file-match": "(coincide co contido do ficheiro)",
        "search-suggest": "Quizais quixo dicir: $1",
        "search-interwiki-caption": "Proxectos irmáns",
        "right-protect": "Cambiar os niveis de protección e editar páxinas protexidas coa opción \"protección en serie\"",
        "right-editprotected": "Editar páxinas protexidas con \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Editar páxinas protexidas con \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Editar o modelo de contido dunha páxina.",
        "right-editinterface": "Editar a interface de usuario",
        "right-editusercssjs": "Editar os ficheiros CSS e JavaScript doutros usuarios",
        "right-editusercss": "Editar os ficheiros CSS doutros usuarios",
        "action-viewmywatchlist": "ver a súa lista de vixilancia",
        "action-viewmyprivateinfo": "ver a súa información privada",
        "action-editmyprivateinfo": "editar a súa información privada",
+       "action-editcontentmodel": "editar o modelo de contido dunha páxina",
        "nchanges": "$1 {{PLURAL:$1|modificación|modificacións}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde a última visita}}",
        "enhancedrc-history": "historial",
        "specialpages-group-wiki": "Datos e ferramentas",
        "specialpages-group-redirects": "Páxinas de redirección especiais",
        "specialpages-group-spam": "Ferramentas contra o spam",
+       "specialpages-group-developer": "Ferramentas dos desenvolvedores",
        "blankpage": "Baleirar a páxina",
        "intentionallyblankpage": "Esta páxina foi baleirada intencionadamente",
        "external_image_whitelist": " #Deixe esta liña tal e como está<pre>\n#Poña embaixo fragmentos de expresións regulares (tan só a parte que vai entre //)\n#Isto coincidirá cos enderezos URL das imaxes externas (hotlinked)\n#Aquelas que coincidan mostraranse como imaxes, senón, só se mostrará unha ligazón cara a esta\n#As liñas que comecen por \"#\" son comentarios\n#Non diferencia entre maiúsculas e minúsculas\n\n#Poña todos os fragmentos por riba desta liña. Deixe esta liña tal e como está</pre>",
        "api-error-stashfailed": "Erro interno: O servidor non puido almacenar o ficheiro temporal.",
        "api-error-publishfailed": "Erro interno: O servidor non puido publicar o ficheiro temporal.",
        "api-error-stasherror": "Houbo un erro ao subir o ficheiro ao depósito.",
+       "api-error-stashedfilenotfound": "O ficheiro apartado non se atopou ao intentar envialo.",
+       "api-error-stashpathinvalid": "A ruta na que se apartara o ficheiro non era correcta.",
+       "api-error-stashfilestorage": "Produciuse un erro ao apartar o ficheiro.",
+       "api-error-stashzerolength": "O servidor non puido apartar o ficheiro porque o ficheiro está baleiro.",
+       "api-error-stashnotloggedin": "Debe identificarse para gardar ficheiros no apartado de envío.",
+       "api-error-stashwrongowner": "O ficheiro apartado ao que intentaba acceder non lle pertence a vostede.",
+       "api-error-stashnosuchfilekey": "A clave de ficheiro apartado á que intentaba acceder non existe.",
        "api-error-timeout": "O servidor non respondeu no tempo esperado.",
        "api-error-unclassified": "Houbo un erro descoñecido.",
        "api-error-unknown-code": "Erro descoñecido: \"$1\"",
        "expand_templates_generate_xml": "Mostrar as árbores de análise XML",
        "expand_templates_generate_rawhtml": "Mostrar o HTML en bruto",
        "expand_templates_preview": "Vista previa",
+       "expand_templates_preview_fail_html": "<em>Dado que o código HTML puro está activado en {{SITENAME}} e produciuse unha perda dos datos da sesión, a vista previa está oculta como precaución contra ataques mediante código JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de acceso á vista previa, inténteo de novo.</strong>\nSe segue sen funcionar, probe a [[Special:UserLogout|saír]] e volver a entrar coa súa conta.",
+       "expand_templates_preview_fail_html_anon": "<em>Dado que o código HTML puro está activado en {{SITENAME}} e produciuse unha perda dos datos da sesión, a vista previa está oculta como precaución contra ataques mediante código JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de acceso á vista previa, probe a [[Special:UserLogout|saír]] e volver a entrar coa súa conta.</strong>",
        "pagelanguage": "Selector de lingua da páxina",
        "pagelang-name": "Páxina",
        "pagelang-language": "Lingua",
        "log-name-pagelang": "Rexistro de cambios de lingua",
        "log-description-pagelang": "Este é un rexistro dos cambios na lingua das páxinas.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiou}} a lingua da páxina \"$3\" do $4 ao $5.",
+       "default-skin-not-found": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nA súa instalación parece incluír os aspectos da seguinte lista. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración dos aspectos] para obter información sobre como activalos e escoller o predeterminado.\n\n$2\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clone un dos repositorios de <code>mediawiki/skins/*</code> mediante Git no cartafol <code dir=\"ltr\">skins/</code> da súa instalación de MediaWiki.\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki.\n\n; Se acaba de anovar MediaWiki:\n: MediaWiki 1.24 e versións posteriores xa non activan aspectos de maneira automática (lea o [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual de descubrimento automático de aspectos]). Pode pegar as seguintes liñas no seu ficheiro <code>LocalSettings.php</code> para activar todos os aspectos instalados actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se acaba de modificar <code>LocalSettings.php</code>:\n: Asegúrese de que os nomes dos aspectos están escritos correctamente.",
+       "default-skin-not-found-no-skins": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nNon ten aspectos instalados.\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clone un dos repositorios de <code>mediawiki/skins/*</code> mediante Git no cartafol <code dir=\"ltr\">skins/</code> da súa instalación de MediaWiki.\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración de aspectos] para obter información sobre como activar aspectos e escoller o aspecto predeterminado.",
        "default-skin-not-found-row-enabled": "* <code>$1</code>/$2 (activada)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code>/$2 ('''desactivada''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code>/$2 ('''desactivada''')",
+       "mediastatistics": "Estatísticas de contido multimedia",
+       "mediastatistics-summary": "Estatísticas sobre tipos de ficheiros enviados. Isto inclúe unicamente a última versión de cada ficheiro. As versións de ficheiros vellas ou eliminadas quedan excluídas.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "Tipo MIME",
+       "mediastatistics-table-extensions": "Extensións posíbeis",
+       "mediastatistics-table-count": "Número de ficheiros",
+       "mediastatistics-table-totalbytes": "Tamaño combinado",
+       "mediastatistics-header-unknown": "Descoñecido",
+       "mediastatistics-header-bitmap": "Imaxes de mapas de bits",
+       "mediastatistics-header-drawing": "Imaxes vectoriais",
+       "mediastatistics-header-audio": "Son",
+       "mediastatistics-header-video": "Vídeo",
+       "mediastatistics-header-multimedia": "Contido enriquecido",
+       "mediastatistics-header-office": "Oficina",
+       "mediastatistics-header-text": "Texto",
+       "mediastatistics-header-executable": "Executábeis",
+       "mediastatistics-header-archive": "Formatos comprimidos",
+       "json-warn-trailing-comma": "{{PLURAL:$1|Eliminouse $1 coma final|Elimináronse $1 comas finais}} do JSON.",
+       "json-error-unknown": "Houbo un problema co JSON. Erro: $1",
+       "json-error-depth": "Superouse o número máximo de ficheiros apartados.",
+       "json-error-state-mismatch": "O JSON non é válido.",
+       "json-error-ctrl-char": "Produciuse un erro de carácter de control, trátase probablemente dun problema de codificación.",
+       "json-error-syntax": "Erro de sintaxe",
+       "json-error-utf8": "Hai caracteres UTF-8 incorrectos, trátase probablemente dun problema de codificación.",
+       "json-error-recursion": "Atopáronse unha ou máis referencias recursivas no valor para codificar.",
+       "json-error-inf-or-nan": "Atopáronse un ou máis valores NAN ou INF no valor para codificar.",
+       "json-error-unsupported-type": "Indicouse un valor dun tipo que non se pode codificar."
 }
index 3bc239f..a19f7fd 100644 (file)
        "log-name-pagelang": "יומן שינוי שפה",
        "log-description-pagelang": "זהו יומן של שינויים בשפות של הדפים.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|שינה|שינתה}} את שפת הדף $3 מ$4 ל$5.",
-       "default-skin-not-found": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nנראה שההתקנה שלכם כוללת את העיצובים הבאים. ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל אותם ולבחור את עיצוב ברירת המחדל.\n\n$2\n\n; אם כרגע התקנתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* שכפול (clone) אחד מהמאגרים ב־<code dir=\"ltr\">mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם אם אתם מפתחים של מדיה־ויקי.\n\n; אם כרגע שדרגתם את מדיה־ויקי:\n: מדיה־ויקי 1.24 וגרסאות חדשות יותר כבר לא מפעילות עיצובים מותקנים באופן אוטומטי (ראו [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"גילוי אוטומטי של עיצובים\" במדריך]). תוכלו להעתיק את השורות הבאות לתוך הקובץ <code>LocalSettings.php</code> כדי להפעיל את כל העיצובים המותקנים כעת:\n\n<pre dir=\"ltr\">$3</pre>\n\n; אם כרגע שיניתם את <code>LocalSettings.php</code>:\n: בדקו שנית האם עשיתם שגיאות הקלדה בשמות העיצובים.",
-       "default-skin-not-found-no-skins": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nאין לכם עיצובים מותקנים.\n\n; אם כרגע התקנתם או שדרגתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. מדיה־ויקי 1.24 וגרסאות חדשות יותר אינן כוללות עיצובים ב־git repository הראשי. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה‏‏־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* שכפול (clone) אחד ממאגרים ב־<code>mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם (אם אתם מפתחים של מדיה־ויקי). ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל עיצובים ולבחור את עיצוב ברירת המחדל.",
+       "default-skin-not-found": "×\90×\95פס! ×¢×\99צ×\95×\91 ×\91ר×\99רת ×\94×\9e×\97×\93×\9c ×¢×\91×\95ר ×\90תר ×\94×\95×\95×\99ק×\99 ×©×\9c×\9b×\9d, ×©×\9e×\95×\92×\93ר ×\91Ö¾<code dir=\"ltr\">$wgDefaultSkin</code> ×\9bÖ¾<code>$1</code>, ×\90×\99× ×\95 ×\96×\9e×\99×\9f.\n\nנר×\90×\94 ×©×\94×\94תקנ×\94 ×©×\9c×\9b×\9d ×\9b×\95×\9c×\9cת ×\90ת ×\94×¢×\99צ×\95×\91×\99×\9d ×\94×\91×\90×\99×\9d. ×¨×\90×\95 ×\9e×\99×\93×¢ ×\91×\93×£ [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"×\94×\92×\93רת ×¢×\99צ×\95×\91×\99×\9d\" ×\91×\9e×\93ר×\99×\9a] ×¢×\9c ×\94×\90פשר×\95ת ×\9c×\94פע×\99×\9c ×\90×\95ת×\9d ×\95×\9c×\91×\97×\95ר ×\90ת ×¢×\99צ×\95×\91 ×\91ר×\99רת ×\94×\9e×\97×\93×\9c.\n\n$2\n\n; ×\90×\9d ×\9bר×\92×¢ ×\94תקנת×\9d ×\90ת ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99:\n: × ×¨×\90×\94 ×©×\96×\95 ×\94תקנ×\94 ×\9eÖ¾git, ×\90×\95 ×\99ש×\99ר×\95ת ×\9eק×\95×\93 ×\94×\9eק×\95ר ×\91ש×\99×\98×\94 ×\90×\97רת ×\9b×\9cש×\94×\99. ×\91×\9eקר×\94 ×\94×\96×\94, ×\91×¢×\99×\94 ×\96×\95 ×¦×¤×\95×\99×\94. × ×¡×\95 ×\9c×\94תק×\99×\9f ×\9b×\9e×\94 ×¢×\99צ×\95×\91×\99×\9d ×\9e[https://www.mediawiki.org/wiki/Category:All_skins ×¡×¤×¨×\99×\99ת ×\94×¢×\99צ×\95×\91×\99×\9d ×©×\9c mediawiki.org], ×¢×\9cÖ¾×\99×\93×\99:\n:* ×\94×\95ר×\93ת [https://www.mediawiki.org/wiki/Download ×§×\95×\91×¥ ×\94Ö¾tar ×\9c×\94תקנ×\94], ×©×\9b×\95×\9c×\9c ×\9eספר ×¢×\99צ×\95×\91×\99×\9d ×\95×\94ר×\97×\91×\95ת. ×\91×\90פשר×\95ת×\9b×\9d ×\9c×\94עת×\99ק ×\95×\9c×\94×\93×\91×\99ק ×\9eת×\95×\9b×\95 ×\90ת ×ª×\99ק×\99×\99ת ×\94â\80\8fâ\80\8fÖ¾<code>skins/</code>.\n:* ×\94×\95ר×\93ת ×§×\91צ×\99 tar ×©×\9c ×¢×\99צ×\95×\91×\99×\9d ×¡×¤×¦×\99פ×\99×\99×\9d ×\9eÖ¾[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* ×©×\9bפ×\95×\9c (clone) ×\90×\97×\93 ×\9e×\94×\9e×\90×\92ר×\99×\9d ×\91Ö¾<code dir=\"ltr\">mediawiki/skins/*</code> ×\91×¢×\96רת git ×\9cת×\95×\9a ×ª×\99ק×\99×\99ת ×\94Ö¾<code dir=\"ltr\">skins/</code> ×\91×\94תקנת ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99 ×©×\9c×\9b×\9d.\n: ×\90×\9d ×ª×¢×©×\95 ×\96×\90ת, ×\96×\94 ×\9c×\90 ×\90×\9e×\95ר ×\9c×\94פר×\99×¢ ×\9câ\80\8fâ\80\8f×\9e×\90×\92ר ×\94Ö¾git ×©×\9c×\9b×\9d ×\90×\9d ×\90ת×\9d ×\9eפת×\97×\99×\9d ×©×\9c ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99.\n\n; ×\90×\9d ×\9bר×\92×¢ ×©×\93ר×\92ת×\9d ×\90ת ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99:\n: ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99 1.24 ×\95×\92רס×\90×\95ת ×\97×\93ש×\95ת ×\99×\95תר ×\9b×\91ר ×\9c×\90 ×\9eפע×\99×\9c×\95ת ×¢×\99צ×\95×\91×\99×\9d ×\9e×\95תקנ×\99×\9d ×\91×\90×\95פ×\9f ×\90×\95×\98×\95×\9e×\98×\99 (ר×\90×\95 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"×\92×\99×\9c×\95×\99 ×\90×\95×\98×\95×\9e×\98×\99 ×©×\9c ×¢×\99צ×\95×\91×\99×\9d\" ×\91×\9e×\93ר×\99×\9a]). ×ª×\95×\9b×\9c×\95 ×\9c×\94עת×\99ק ×\90ת ×\94ש×\95ר×\95ת ×\94×\91×\90×\95ת ×\9cת×\95×\9a ×\94ק×\95×\91×¥ <code>LocalSettings.php</code> ×\9b×\93×\99 ×\9c×\94פע×\99×\9c ×\90ת ×\9b×\9c ×\94×¢×\99צ×\95×\91×\99×\9d ×\94×\9e×\95תקנ×\99×\9d ×\9bעת:\n\n<pre dir=\"ltr\">$3</pre>\n\n; ×\90×\9d ×\9bר×\92×¢ ×©×\99× ×\99ת×\9d ×\90ת <code>LocalSettings.php</code>:\n: ×\91×\93ק×\95 ×©× ×\99ת ×\94×\90×\9d ×¢×©×\99ת×\9d ×©×\92×\99×\90×\95ת ×\94ק×\9c×\93×\94 ×\91ש×\9e×\95ת ×\94×¢×\99צ×\95×\91×\99×\9d.",
+       "default-skin-not-found-no-skins": "×\90×\95פס! ×¢×\99צ×\95×\91 ×\91ר×\99רת ×\94×\9e×\97×\93×\9c ×¢×\91×\95ר ×\90תר ×\94×\95×\95×\99ק×\99 ×©×\9c×\9b×\9d, ×©×\9e×\95×\92×\93ר ×\91Ö¾<code dir=\"ltr\">$wgDefaultSkin</code> ×\9bÖ¾<code>$1</code>, ×\90×\99× ×\95 ×\96×\9e×\99×\9f.\n\n×\90×\99×\9f ×\9c×\9b×\9d ×¢×\99צ×\95×\91×\99×\9d ×\9e×\95תקנ×\99×\9d.\n\n; ×\90×\9d ×\9bר×\92×¢ ×\94תקנת×\9d ×\90×\95 ×©×\93ר×\92ת×\9d ×\90ת ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99:\n: × ×¨×\90×\94 ×©×\96×\95 ×\94תקנ×\94 ×\9eÖ¾git, ×\90×\95 ×\99ש×\99ר×\95ת ×\9eק×\95×\93 ×\94×\9eק×\95ר ×\91ש×\99×\98×\94 ×\90×\97רת ×\9b×\9cש×\94×\99. ×\91×\9eקר×\94 ×\94×\96×\94, ×\91×¢×\99×\94 ×\96×\95 ×¦×¤×\95×\99×\94. ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99 1.24 ×\95×\92רס×\90×\95ת ×\97×\93ש×\95ת ×\99×\95תר ×\90×\99× ×\9f ×\9b×\95×\9c×\9c×\95ת ×¢×\99צ×\95×\91×\99×\9d ×\91Ö¾git repository ×\94ר×\90ש×\99. × ×¡×\95 ×\9c×\94תק×\99×\9f ×\9b×\9e×\94 ×¢×\99צ×\95×\91×\99×\9d ×\9e[https://www.mediawiki.org/wiki/Category:All_skins ×¡×¤×¨×\99×\99ת ×\94×¢×\99צ×\95×\91×\99×\9d ×©×\9c mediawiki.org], ×¢×\9cÖ¾×\99×\93×\99:\n:* ×\94×\95ר×\93ת [https://www.mediawiki.org/wiki/Download ×§×\95×\91×¥ ×\94â\80\8fâ\80\8fÖ¾tar ×\9c×\94תקנ×\94], ×©×\9b×\95×\9c×\9c ×\9eספר ×¢×\99צ×\95×\91×\99×\9d ×\95×\94ר×\97×\91×\95ת. ×\91×\90פשר×\95ת×\9b×\9d ×\9c×\94עת×\99ק ×\95×\9c×\94×\93×\91×\99ק ×\9eת×\95×\9b×\95 ×\90ת ×ª×\99ק×\99×\99ת ×\94â\80\8fâ\80\8fÖ¾<code>skins/</code>.\n:* ×\94×\95ר×\93ת ×§×\91צ×\99 tar ×©×\9c ×¢×\99צ×\95×\91×\99×\9d ×¡×¤×¦×\99פ×\99×\99×\9d ×\9eÖ¾[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* ×©×\9bפ×\95×\9c (clone) ×\90×\97×\93 ×\9e×\9e×\90×\92ר×\99×\9d ×\91Ö¾<code>mediawiki/skins/*</code> ×\91×¢×\96רת git ×\9cת×\95×\9a ×ª×\99ק×\99×\99ת ×\94Ö¾<code dir=\"ltr\">skins/</code> ×\91×\94תקנת ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99 ×©×\9c×\9b×\9d.\n: ×\90×\9d ×ª×¢×©×\95 ×\96×\90ת, ×\96×\94 ×\9c×\90 ×\90×\9e×\95ר ×\9c×\94פר×\99×¢ ×\9câ\80\8fâ\80\8f×\9e×\90×\92ר ×\94Ö¾git ×©×\9c×\9b×\9d (×\90×\9d ×\90ת×\9d ×\9eפת×\97×\99×\9d ×©×\9c ×\9e×\93×\99×\94Ö¾×\95×\99ק×\99). ×¨×\90×\95 ×\9e×\99×\93×¢ ×\91×\93×£ [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"×\94×\92×\93רת ×¢×\99צ×\95×\91×\99×\9d\" ×\91×\9e×\93ר×\99×\9a] ×¢×\9c ×\94×\90פשר×\95ת ×\9c×\94פע×\99×\9c ×¢×\99צ×\95×\91×\99×\9d ×\95×\9c×\91×\97×\95ר ×\90ת ×¢×\99צ×\95×\91 ×\91ר×\99רת ×\94×\9e×\97×\93×\9c.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (מופעל)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''מבוטל''')",
        "mediastatistics": "סטטיסטיקות קבצים",
index bf2b96a..4b9c4fc 100644 (file)
        "changeemail-oldemail": "Trenutačna adresa e-pošte:",
        "changeemail-newemail": "Nova adresa e-pošte:",
        "changeemail-none": "(ništa)",
-       "changeemail-password": "Zaporka za {{SITENAME}}:",
+       "changeemail-password": "Zaporka za projekt {{SITENAME}}:",
        "changeemail-submit": "Promijeni E-mail",
        "changeemail-throttled": "Nedavno ste se previše puta pokušali prijaviti.\nMolimo Vas pričekajte $1 prije nego što pokušate ponovno.",
        "bold_sample": "Podebljani tekst",
        "table_pager_first": "Prva stranica",
        "table_pager_last": "Zadnja stranica",
        "table_pager_limit": "Prikaži $1 slika po stranici",
-       "table_pager_limit_label": "Stavke po stranici:",
+       "table_pager_limit_label": "Broj stavki po stranici:",
        "table_pager_limit_submit": "Idi",
        "table_pager_empty": "Nema rezultata",
        "autosumm-blank": "uklonjen cjelokupni sadržaj stranice",
index 21adac2..e81c941 100644 (file)
        "sharedupload": "Ez a fájl a(z) $1 megosztott tárhelyről származik, és más projektek is használhatják.",
        "sharedupload-desc-there": "Ez a fájl a $1 megosztott tárhelyről származik, és más projektek is használhatják.\nAz [$2 ottani leírólapján] további információkat találhatsz róla.",
        "sharedupload-desc-here": "Ez a fájl a $1 megosztott tárhelyről származik, és más projektek is használhatják.\nA [$2 fájl ottani leírólapjának] másolata alább látható.",
+       "sharedupload-desc-edit": "Ez a fájl a(z) $1 megosztott tárhelyről származik, és más projektek is használhatják.\nValószínűleg az [$2 ottani leírólapját] akartad szerkeszteni.",
        "filepage-nofile": "Nem létezik ilyen nevű fájl.",
        "filepage-nofile-link": "Nem létezik ilyen nevű fájl. [$1 Ide kattintva] feltölthetsz egyet.",
        "uploadnewversion-linktext": "Új változat feltöltése",
        "specialpages-group-wiki": "A wiki adatai és eszközei",
        "specialpages-group-redirects": "Átirányító speciális lapok",
        "specialpages-group-spam": "Spam eszközök",
+       "specialpages-group-developer": "Fejlesztői eszközök",
        "blankpage": "Üres lap",
        "intentionallyblankpage": "Ez a lap szándékosan maradt üresen",
        "external_image_whitelist": " #Ezt a sort hagyd pontosan így, ahogy van<pre>\n#Ide reguláris kifejezéseket írhatsz (azon részüket, amik a // közé mennek)\n#Ezek egyeztetve lesznek a külső képek URL-jeivel\n#Egyezés esetén képként fognak megjelenni, egyébként csak link fog rájuk mutatni\n#A #-tel kezdődő sorok megjegyzésnek számítanak\n#A kis- és nagybetűk nincsenek megkülönböztetve\n\n#A reguláris kifejezéseket ezen sor alá írd. Ezt a sort hagyd így, ahogy van.</pre>",
index c07156a..3ed9f04 100644 (file)
        "log-name-pagelang": "Modifiche lingua",
        "log-description-pagelang": "Questo è un registro delle modifiche alla lingua delle pagine.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha modificato}} la lingua della pagina $3 da $4 a $5.",
-       "default-skin-not-found": "Oops! La skin predefinita per il tuo wiki, definita in <code dir=\"ltr\">$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nLa tua installazione sembra includere le seguenti skin. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.\n\n$2\n\n; Se hai appena installato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code dir=\"ltr\">skins/</code> da lì.\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code>skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki.\n\n; Se hai appena aggiornato MediaWiki:\n: MediaWiki 1.24 e versioni successive non abilità più automaticamente le skin installate (vedi [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automatico skin]). Puoi copiare le seguenti linee nel <code>LocalSettings.php</code> per abilitare tutte le skin attualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se hai appena modificato <code>LocalSettings.php</code>:\n: Ricontrolla i nomi delle skin per errori di battitura.",
-       "default-skin-not-found-no-skins": "Oops! La skin predefinita per il tuo wiki, definita in <code>$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nNon hai skin installate.\n\n; Se hai appena installato o aggiornato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. MediaWiki 1.24 e versioni successive non include alcuna skin nel repository principale. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code>skins/</code> da lì.\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code dir=\"ltr\">skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.",
+       "default-skin-not-found": "Oops! La skin predefinita per il tuo wiki, definita in <code dir=\"ltr\">$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nLa tua installazione sembra includere le seguenti skin. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.\n\n$2\n\n; Se hai appena installato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code dir=\"ltr\">skins/</code> da lì.\n:* Scaricando tarball di singole skin da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code>skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki.\n\n; Se hai appena aggiornato MediaWiki:\n: MediaWiki 1.24 e versioni successive non abilità più automaticamente le skin installate (vedi [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automatico skin]). Puoi copiare le seguenti linee nel <code>LocalSettings.php</code> per abilitare tutte le skin attualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se hai appena modificato <code>LocalSettings.php</code>:\n: Ricontrolla i nomi delle skin per errori di battitura.",
+       "default-skin-not-found-no-skins": "Oops! La skin predefinita per il tuo wiki, definita in <code>$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nNon hai skin installate.\n\n; Se hai appena installato o aggiornato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. MediaWiki 1.24 e versioni successive non include alcuna skin nel repository principale. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code>skins/</code> da lì.\n:* Scaricando tarball di singole skin da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code dir=\"ltr\">skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilitata)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilitata''')",
        "mediastatistics": "Statistiche relative ai file multimediali",
index d0572c6..d70104e 100644 (file)
        "editcomment": "რედაქტირება განმარტებული იყო როგორც: \"''$1''\".",
        "revertpage": "[[Special:Contributions/$2|$2]]-ის რედაქტირება გაუქმდა; აღდგა ბოლოს [[User:$1|$1]]-ის მიერ რედაქტირებული ვერსია",
        "revertpage-nouser": "მომხმარებლის (მომხმარებლის სახელი დამალულია) ცვლილებები დაბრუნებულია ვერსიაზე {{GENDER:$1|[[User:$1|$1]]}}",
-       "rollback-success": "á\83\92á\83\90á\83£á\83¥á\83\9bá\83\93á\83\90 á\83¨á\83\94á\83¡á\83¬á\83\9dრება $1; დაბრუნება ვერსიაზე $2.",
+       "rollback-success": "á\83\92á\83\90á\83£á\83¥á\83\9bá\83\93á\83\90 á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98რება $1; დაბრუნება ვერსიაზე $2.",
        "sessionfailure-title": "სეანსის შეცდომა",
        "sessionfailure": "ჩანს, რომ პრობლემაა თქვენი რეგისტრაციის სესიისათვის;\nეს მოქმედება შეჩერდა თქვენი სესიაში შემოჭრის თავიდან ასაცილებლად.\nგთხოვთ, დააწკაპუნოთ ღილაკს \"უკან\" და თავიდან ჩართოთ გვერდი, რომლიდანაც შემოხვედით და სცადოთ განმეორებით.",
        "protectlogpage": "დაცვის ისტორია",
index 4f64bce..d3c9690 100644 (file)
        "diff-multi-manyusers": "($2-(ден<sup>4</sup>) көп {{PLURAL:$2|қатысуышының|қатысушының}} арадағы {{PLURAL:$1|бір түзетуі|$1 түзетуі}} көрсетілмеген)",
        "difference-missing-revision": "Бұл ($1) {{PLURAL:$2|нұсқа|$2 нұсқалар}} айырмашылығы табылмады.\n\n\nБұл әлте жойылған беттің нұсқалар айырмашылығының сілтемесі.\nЕгжей-тегжейін [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналынан] таба аласыз.",
        "searchresults": "Іздеу нәтижелері",
-       "searchresults-title": "\"$1\" сұранымына табылған нәтижелер",
+       "searchresults-title": "«$1» сұранымына табылған нәтижелер",
        "titlematches": "Бет атауы сәйкес келеді",
        "textmatches": "Бет мәтіні сәйкес келеді",
        "notextmatches": "Еш бет мәтіні сәйкес емес",
        "blocklogtext": "Бұл қатысушыларды бұғаттау және бұғаттауынан босату әрекеттерінің журналы.\nӨздіктік бұғатталған IP мекенжайлар тізімделмеген.\nҚазіргі уақыттағы белсенді тиымдар мен бұғаттауларды [[Special:BlockList|бұғаттау тізімінен]] қараңыз.",
        "unblocklogentry": "$1 есімді қатысушыны бұғаттауынан босатты",
        "block-log-flags-anononly": "тек аноним қатысушылар",
-       "block-log-flags-nocreate": "тіркелу өшірілген",
+       "block-log-flags-nocreate": "тіркелуін өшіріді",
        "block-log-flags-noautoblock": "автобұғаттау өшірілген",
        "block-log-flags-noemail": "е-пошта өшірілген",
        "block-log-flags-nousertalk": "өз талқылау бетін өңдей алмайтындай ету",
        "logentry-delete-event": "$1 $3 бетіндегі {{PLURAL:$5|журнал оқиғасы|$5 журнал оқиғасы}} көрінісін {{GENDER:$2|өзгертті}}: $4",
        "logentry-delete-revision": "$1 $3 бетіндегі {{PLURAL:$5|нұсқа|$5 нұсқа}} көрінісін {{GENDER:$2|өзгертті}}: $4",
        "logentry-suppress-event": "$1 $3 бетіндегі {{PLURAL:$5|журнал оқиғасы|$5 журнал оқиғасы}} көрінісін құпия түрде {{GENDER:$2|өзгертті}}: $4",
-       "revdelete-content-hid": "мағлұмат жасырылған",
+       "revdelete-content-hid": "мағлұматын жасырыды",
        "revdelete-summary-hid": "өңдеу түйіндемесі жасырылған",
        "revdelete-uname-hid": "қатысушы есімі жасырылған",
        "revdelete-content-unhid": "мағлұматы жасырылмаған",
index 3bc4dee..60b7594 100644 (file)
@@ -41,7 +41,8 @@
                        "Infinity",
                        "Bluemersen",
                        "Revi",
-                       "Namoroka"
+                       "Namoroka",
+                       "양념파닭"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "specialpages-group-wiki": "데이터와 도구",
        "specialpages-group-redirects": "넘겨주기 특수 문서",
        "specialpages-group-spam": "스팸 처리 도구",
+       "specialpages-group-developer": "개발자 도구",
        "blankpage": "빈 문서",
        "intentionallyblankpage": "일부러 비워 둔 문서입니다.",
        "external_image_whitelist": " #이 줄은 그대로 두십시오<pre>\n#정규 표현식(// 사이에 있는 부분)을 아래에 입력하세요.\n#이 목록은 바깥 그림의 URL과 대조할 것입니다.\n#이 목록과 일치하는 것은 그림이 직접 보여지지만, 그렇지 않은 경우 그림을 가리키는 링크만 보이게 될 것입니다.\n#\"#\" 문자에서 줄의 끝까지는 주석입니다\n#이 목록은 대소문자를 구별하지 않습니다\n\n#모든 정규 표현식은 이 줄 위에 넣어 주십시오. 그리고 이 줄은 그대로 두십시오.</pre>",
        "api-error-stashfailed": "내부 오류: 서버가 임시 파일을 저장하지 못했습니다.",
        "api-error-publishfailed": "내부 오류: 서버가 임시 파일을 게시하지 못했습니다.",
        "api-error-stasherror": "파일을 안전한 곳으로 업로드 하는 동안 오류가 발생했습니다.",
+       "api-error-stashnotloggedin": "파일을 업로드하기 위해 로그인이 필요합니다.",
        "api-error-timeout": "서버가 제 시간 내에 응답하지 않았습니다.",
        "api-error-unclassified": "알 수 없는 오류가 발생했습니다.",
        "api-error-unknown-code": "알 수 없는 오류: \"$1\"",
index 02a67f3..fe9b550 100644 (file)
        "right-protect": "Protektiounsniveauen änneren a kaskadegespaart Säiten änneren",
        "right-editprotected": "Protegéiert Säiten als \"{{int:protect-level-sysop}}\" änneren",
        "right-editsemiprotected": "Säiten déi als  \"{{int:protect-level-autoconfirmed}}\" gespaart sinn änneren",
+       "right-editcontentmodel": "De Modell vum Inhalt vun enger Säit änneren",
        "right-editinterface": "De Benotzerinterface änneren",
        "right-editusercssjs": "Anere Benotzer hir CSS a JS Fichieren änneren",
        "right-editusercss": "Anere Benotzer hir CSS Fichieren änneren",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskussioun]])",
        "unknown_extension_tag": "Onbekannten Erweiderungs-Tag \"$1\"",
        "duplicate-defaultsort": "'''Opgepasst:''' Den Zortéierschlëssel \"$2\" iwwerschreift de virege Standard-Zortéierschlëssel \"$1\".",
+       "duplicate-displaytitle": "<strong>Opgepasst:</strong> Den Titel dee gewise gëtt \"$2\" iwwerschreift deen Titel dee virdru gewise gouf \"$1\".",
        "version": "Versioun",
        "version-extensions": "Installéiert Erweiderungen",
        "version-skins": "Installéiert Skins/Layout",
        "specialpages-group-wiki": "Daten an Handwierksgeschir",
        "specialpages-group-redirects": "Spezialsäiten déi viruleeden",
        "specialpages-group-spam": "Handwierksgeschir géint de Spam",
+       "specialpages-group-developer": "Handwierksgeschir fir Entwéckler (Programméierer)",
        "blankpage": "Eidel Säit",
        "intentionallyblankpage": "Dës Säit ass absichtlech eidel. Si gëtt fir Benchmarking an Ähnleches benotzt.",
        "external_image_whitelist": "#Dës Zeil genee sou loosse wéi se ass<pre>\n#Schreift hei ënnendrënner Fragmenter vu regulären Ausdréck (just den Deel zwëscht den // aginn)\n#Dës gi mat den URLe vu Biller aus externe Quelle verglach\n#Wann d'Resultat positiv ass, gëtt d'Bild gewisen, soss gëtt d'Bild just als Link gewisen\n#Zeilen, déi mat engem # ufänken, ginn als Bemierkung behandelt\n#Et gëtt en Ënnerscheed tëscht groussen a klenge Buschtawe gemaach\n\n#All regulär Ausdréck ënner dëser Zeil androen. Dës Zeil genee sou loosse wéi se ass</pre>",
index 7c61184..3a7745a 100644 (file)
        "cannotdelete": "पन्ना व संचिका \"$1\" मेटाएल नै जा सकल।",
        "cannotdelete-title": "पन्ना \"$1\" नै मेटा सकल",
        "delete-hook-aborted": "सम्पादन नोकसीसँ खतम भेल।\nई कोनो कारण नै देलक।",
+       "no-null-revision": "\"$1\" पृष्ठ के लेल बिना परिवर्तन नब अवतरण बनाबए में असफल।",
        "badtitle": "खराप शीर्षक",
        "badtitletext": "आग्रह कएल पन्नाक शीर्षक गलत, खाली, वा गलत सम्बन्धित अन्तर-न्हाषा अन्तर विकी शीर्षक छी। ई एक वा बेशी कलाकार युक्त भऽ सकैए जे शीर्षकमे प्रयुक्त नै कएल जा सकैए।",
        "perfcached": "ई दत्तांश उपस्मृतिक आधारपर अछि आ भऽ सकैए जे अद्यतन नै हुअए। अधिकतम {{PLURAL:$1|एकटा परिणाम|$1 परिणाम सभ}} क्याचेमे उपलब्ध अछि ।",
        "resetpass-abort-generic": "कूटशब्दमे बदलाव कोनो एक्सटेंशनद्वारा रोकल गएल अछि।",
        "resetpass-expired": "अहाँके कूटशब्दक वैधता अवधि खत्तम भऽ गेल अछि । कृपया सम्प्रवेशित करवाक लेल नयाँ कूटशब्द राखु।",
        "resetpass-expired-soft": "अहाँके कूटशब्दकऽ वैधता अवधि समाप्त भऽ गेल आर कूटशब्द परिवार्तान करवाक आवश्यकता अछि। कृपया एगो नव कूटशब्द राखु, वा पाछु रिसेट करवाक लेल \"{{int:resetpass-submit-cancel}}\" क्लिक करु।",
+       "resetpass-validity-soft": "अहाँके कूटशब्द मान्य नै अछि: $1 \n\nकृपया आब एगो नव कूटशब्द चुनु, वा पाछु पुनर्स्थापित करए के लेल \"{{int:resetpass-submit-cancel}}\" में क्लिक करू।",
        "passwordreset": "कूटशब्द फेरसँ बनाउ",
        "passwordreset-text-one": "अपन कूटशब्द रीसेट करवाक लेल इ फारम भरु ।",
        "passwordreset-text-many": "{{PLURAL:$1|ई-पत्रके माध्यमसऽ एकटा अस्थायी कूटशब्द पावैलेल कोनो एकटा डिब्बा भरु ।}}",
        "changeemail-submit": "ई-पत्र संकेत बदलू",
        "changeemail-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास करबासँ पहिने कने काल थम्हू।",
        "resettokens": "टोकन रीसेट करी",
+       "resettokens-text": "जे स्तोक अहाँके खाता सँ सम्बद्ध किछु विशिष्ट व्यक्तिगत जानकारी प्रदान करएत अछि, अहाँ वोकरा एतए सँ रिसेट कऽ सकएत छी।\n\nयदि अहाँ एकरा गलती सँ केकरो देखा देनए छी वा अहाँ के खाता ह्याक भ गेल अछि तहन अहाँके एकरा रिसेट कऽ देना चाही।",
        "resettokens-no-tokens": "रीसेट करवाक लेल कोनो टोकन नै अछि।",
        "resettokens-legend": "टोकन रीसेट करी",
        "resettokens-tokens": "टोकन:",
        "resettokens-token-label": "$1 (वर्तमान मूल्य: $2)",
+       "resettokens-watchlist-token": "[[Special:Watchlist|अहाँके साकांक्षसूची के पृष्ठसभ में परिवर्तन सभ]] के वेब फिट (Atom/RSS) लेल स्तोक",
        "resettokens-done": "टोकन रीसेट भेल अछि।",
        "resettokens-resetbutton": "छानल टोकन रीसेट करु",
        "bold_sample": "गँहीर लेखन",
        "template-protected": "(संरक्षित)",
        "template-semiprotected": "(अर्ध-संरक्षित)",
        "hiddencategories": "ई पन्ना सदस्य अछि {{PLURAL:$1|1 नुकाएल संवर्ग|$1 नुकाएल संवर्ग सभ}}:",
+       "edittools": "<!-- एतए देल गेल पाठ सम्पादन आर अपलोड फारम के निचा देखाओल जाएत। -->",
        "edittools-upload": "-",
        "nocreatetext": "{{अन्तर्जाल}} नव पन्ना निर्माणक क्षमताकेँ सीमित कऽ देने अछि।\nअहाँ आपस जा सकै छी आ कोनो पन्नाकेँ सम्पादित कऽ सकै छी, वा [[Special:UserLogin|log in or create an account]]",
        "nocreate-loggedin": "अहाँकेँ नव पन्ना बनेबाक अधिकार नै अछि।",
        "postedit-confirmation-saved": "अहाके संपादनके सुरक्षित भेल ।",
        "edit-already-exists": "नव पन्नाक निर्माण नै भऽ सकल।\nई पहिनहियेसँ वर्तमान अछि।",
        "defaultmessagetext": "पूर्वनिर्धारित संदेश पाठ",
+       "content-failed-to-parse": "$1 के लेल $2 सामग्री के बिच्छेदन करए में विफल, त्रुटि: $3",
        "invalid-content-data": "अवैध डाटा सामग्री",
+       "content-not-allowed-here": "[[$2]] पृष्ठ पर \"$1\" सामग्री वर्जित अछि।",
+       "editwarning-warning": "इ पृष्ठ के छोड़ए सँ अहाके द्वारा कएल गेल कोनो भी परिवर्तन गायब भऽ जाएत।\nयदि अहाँ सम्प्रवेश केनए छी तहन ई सूचना के देखावए लेल अपन वरीयता सभ के \"{{int:prefs-editing}}\" भाग में बन्द कऽ सकएत छी।",
        "editpage-notsupportedcontentformat-title": "सामग्री स्वरूप समर्थित नै अछि",
+       "editpage-notsupportedcontentformat-text": "$1 सामग्री स्वरूप $2 सामग्री मोडल द्वारा समर्थित नै अछि।",
        "content-model-wikitext": "विकिटेक्स्ट",
        "content-model-text": "सामान्य पाठ",
        "content-model-javascript": "जावास्क्रिप्ट",
        "parser-template-loop-warning": "नमूना परिक्रम भेटल: [[$1]]",
        "parser-template-recursion-depth-warning": "नमूना प्रत्यावर्तन गहीर सीमा पार केलक ($1)",
        "language-converter-depth-warning": "भाषान्तर गहीर सीमा पार केलक ($1)",
-       "node-count-exceeded-category": "पन्ना नोड गिनती पार क्या गेल अछि",
-       "node-count-exceeded-category-desc": "ई पन्ना अधिकतम नोड गिनती पार केन अछि",
-       "node-count-exceeded-warning": "पन्ना नोड गिनती पार केन अछि",
-       "expansion-depth-exceeded-category": "ई पन्ना विस्तार गहिराई पार केन",
-       "expansion-depth-exceeded-category-desc": "ई पन्ना अधिकतमरुपमे विस्तार गहिराई पार के अछि",
-       "expansion-depth-exceeded-warning": "पन्ना विस्तार गहिराई पार केन अछि",
-       "parser-unstrip-loop-warning": "Unstrip लूप पता लाग्ल अछि",
+       "node-count-exceeded-category": "पन्ना जे में नोड-संख्या सीमा पार कऽ गेल अछि",
+       "node-count-exceeded-category-desc": "ई पृष्ठ अधिकतम नोड गिनती पार केनए अछि",
+       "node-count-exceeded-warning": "पन्ना नोड गिनती पार केनए अछि",
+       "expansion-depth-exceeded-category": "ई पन्ना विस्तार गहिराई पार केनए अछि",
+       "expansion-depth-exceeded-category-desc": "ई पृष्ठ अधिकतम रुपमे विस्तार गहिराई पार केनए अछि",
+       "expansion-depth-exceeded-warning": "पन्ना विस्तार गहिराई पार केनए अछि",
+       "parser-unstrip-loop-warning": "Unstrip लूप पाओल गेल",
+       "parser-unstrip-recursion-limit": "Unstrip पुनरावर्तन सीमा पार कइर गेल($1)",
+       "converter-manual-rule-error": "म्यानुअल भाषा परिवर्तन नियम में त्रुटि",
        "undo-success": "ई सम्पादन पूर्ववत बदलल जा सकैए।\nकृपा क' नीचाँक तुलनाक जाँच करू ई देखैले जे ई वएह भेल अछि जे अहाँ चाहै छलहुँ, आ तखन सम्पादन ख़तम करबा लेल नीचाँक परिवर्तन सुरक्षित करू ।",
        "undo-failure": "मध्यवर्ती विरोधी सम्पादनक कारण ऐ सम्पादनकेँ खतम नै कएल जा सकैए।",
        "undo-norev": "ई सम्पादन खतम नै कएला जा सकैए कारण ई अछि नै वा मेटा देल गेल अछि।",
        "prevpage": "पहिलुका पन्ना ($1)",
        "allpagesfrom": "पन्ना प्रदर्शन प्रारम्भ भेल:",
        "allpagesto": "एतऽ खतम होमएबला पन्नाक प्रदर्शन करू:",
-       "allarticles": "सभà¤\9fा à¤ªà¤¨à¥\8dना",
+       "allarticles": "सभà¤\9fा à¤²à¥\87à¤\96",
        "allinnamespace": "सभटा पन्ना ($1 नामगाम)",
        "allpagessubmit": "जाउ",
        "allpagesprefix": "उपसर्गक संग दृश्य पन्ना सभ:",
        "block-log-flags-anononly": "गुप्त प्रयोक्ता मात्र",
        "block-log-flags-nocreate": "लेखा निर्माण अशक्त कएल",
        "block-log-flags-noautoblock": "स्वचालित प्रतिबन्ध अशक्त",
-       "block-log-flags-noemail": "à¤\88-मà¥\87ल अशक्त",
+       "block-log-flags-noemail": "à¤\88-पतà¥\8dर अशक्त",
        "block-log-flags-nousertalk": "अपन वार्ता पन्ना सम्पादित नै कऽ सकब",
        "block-log-flags-angry-autoblock": "नीक स्वचालित प्रतिबन्ध देल गेल",
        "block-log-flags-hiddenname": "प्रयोक्तानाम नुकाएल",
        "tooltip-feed-atom": "ऐ पन्ना लेल अणु समदिया",
        "tooltip-t-contributions": "ऐ प्रयोक्ताक योगदानक सूची देखू",
        "tooltip-t-emailuser": "ऐ प्रयोक्ताकेँ ई-पत्र पठाउ",
-       "tooltip-t-info": "à¤\88 à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¬à¤¾à¤°à¥\87मà¥\87 à¤¥à¤ª जानकारी",
+       "tooltip-t-info": "à¤\88 à¤ªà¥\83षà¥\8dठ à¤\95à¥\87 à¤¸à¤®à¥\8dबनà¥\8dधमà¥\87à¤\82 à¤\86र à¤¬à¥\88à¤\82सà¥\80 जानकारी",
        "tooltip-t-upload": "चित्र आकि मीडिया फाइलकेँ अपलोड करू",
        "tooltip-t-specialpages": "सभटा विशेष पन्नाक सूची",
        "tooltip-t-print": "ऐ पृष्ठक छपैबला रूप",
index 7f49f3c..f4c1fc4 100644 (file)
        "searchprofile-everything-tooltip": "Пребарување по сета содржина (вклучувајќи страници за разговор)",
        "searchprofile-advanced-tooltip": "Пребарување во именски простори по избор",
        "search-result-size": "$1 ({{PLURAL:$2|еден збор|$2 збора}})",
-       "search-result-category-size": "{{PLURAL:$1|1 Ñ\87лен|$1 Ñ\87лена}} ({{PLURAL:$2|1 поткатегорија|$2 поткатегории}}, {{PLURAL:$3|1 податотека|$3 податотеки}})",
+       "search-result-category-size": "{{PLURAL:$1|1 Ñ\87лен|$1 Ñ\87ленови}} ({{PLURAL:$2|1 поткатегорија|$2 поткатегории}}, {{PLURAL:$3|1 податотека|$3 податотеки}})",
        "search-redirect": "(пренасочување $1)",
        "search-section": "(пасус $1)",
        "search-category": "(категорија $1)",
        "ncategories": "$1 {{PLURAL:$1|категорија|категории}}",
        "ninterwikis": "$1 {{PLURAL:$1|меѓувики|меѓувикија}}",
        "nlinks": "$1 {{PLURAL:$1|врска|врски}}",
-       "nmembers": "$1 {{PLURAL:$1|Ñ\87лен|Ñ\87лена}}",
-       "nmemberschanged": "$1 â\86\92 $2 {{PLURAL:$2|Ñ\87лен|Ñ\87лена}}",
+       "nmembers": "$1 {{PLURAL:$1|Ñ\87лен|Ñ\87ленови}}",
+       "nmemberschanged": "$1 â\86\92 $2 {{PLURAL:$2|Ñ\87лен|Ñ\87ленови}}",
        "nrevisions": "$1 {{PLURAL:$1|измена|измени}}",
        "nviews": "$1 {{PLURAL:$1|преглед|прегледи}}",
        "nimagelinks": "Се користи на $1 {{PLURAL:$1|страница|страници}}",
        "log-name-pagelang": "Дневник на менување на јазикот",
        "log-description-pagelang": "Ова е дневник на менувања на јазикот на страницата.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|го смени}} јазикот на страницата $3 од $4 на $5.",
-       "default-skin-not-found": "За жал, основното руво на вашето вики оопределено во <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code> не е достапно.\n\nВашата воспоставка ги опфаќа следниве рува. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.\n\n$2\n\n; Ако штотуку го имате воспоставено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code>skins/</code> од него.\n* Клонирајќи едно од складиштата <code>mediawiki/skins/*</code> преку git во папката <code dir=\"ltr\">skins/</code> на вашата воспоставка на МедијаВики.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики.\n\n; Ако штотуку го имате надградено МедијаВики:\n: МедијаВики 1.24 и поновите верзии повеќе не ги вклучуваат воспоставените рува автоматски (погл. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Прирачник: Самооткривање на рува]). Можете да ги прекопирате следниве редови во <code>LocalSettings.php</code> за да ги вклучите сите моментално воспоставени рува:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ако штотуку го имате изменето <code>LocalSettings.php</code>:\n: Проверете дали правилно се напишани називите на рувата.",
-       "default-skin-not-found-no-skins": "За жал, основното руво на вашето вики, определено во <code>$wgDefaultSkin</code> како <code>$1</code>, не е достапно.\n\nНемате воспоставено ниедно руво.\n\n; Ако штотуку го имате воспоставено или надградено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. МедијаВики 1.24 и поновите верзии немаат рува во главното складиште. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n:* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code dir=\"ltr\">skins/</code> од него.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.",
+       "default-skin-not-found": "За жал, основното руво на вашето вики оопределено во <code dir=\"ltr\">$wgDefaultSkin</code> како <code>$1</code> не е достапно.\n\nВашата воспоставка ги опфаќа следниве рува. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.\n\n$2\n\n; Ако штотуку го имате воспоставено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code>skins/</code> од него.\n:* Преземање на tarball-и за рува од [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n* Клонирајќи едно од складиштата <code>mediawiki/skins/*</code> преку git во папката <code dir=\"ltr\">skins/</code> на вашата воспоставка на МедијаВики.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики.\n\n; Ако штотуку го имате надградено МедијаВики:\n: МедијаВики 1.24 и поновите верзии повеќе не ги вклучуваат воспоставените рува автоматски (погл. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Прирачник: Самооткривање на рува]). Можете да ги прекопирате следниве редови во <code>LocalSettings.php</code> за да ги вклучите сите моментално воспоставени рува:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ако штотуку го имате изменето <code>LocalSettings.php</code>:\n: Проверете дали правилно се напишани називите на рувата.",
+       "default-skin-not-found-no-skins": "За жал, основното руво на вашето вики, определено во <code>$wgDefaultSkin</code> како <code>$1</code>, не е достапно.\n\nНемате воспоставено ниедно руво.\n\n; Ако штотуку го имате воспоставено или надградено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. МедијаВики 1.24 и поновите верзии немаат рува во главното складиште. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n:* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code dir=\"ltr\">skins/</code> од него.\n:* Преземање на tarball-и за поединечни рува од [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (вклучено)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''исклучено''')",
        "mediastatistics": "Статистики за слики и снимки",
index d6a919f..d18c67e 100644 (file)
        "log-name-pagelang": "Càgna 'o riggistro 'e llengue",
        "log-description-pagelang": "Chest'è nu riggistro 'e cagnamiente 'e lengua d' 'e paggene.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ave cagnato}} 'a lengua d' 'a paggena $3 'a $4 a $5.",
-       "default-skin-not-found": "Oops! 'A skin predefinta ' 'o wii vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\n'A installazione pare ca tenesse 'e skin ccà abbascio. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] pe' n'avè cchiù nfurmaziune ncopp' 'a manera 'e ll'abbià o scegliere chilla predefinita.\n\n$2\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki.\n\n; Si avite MediaWiki agghiurnato MediaWiki mò mò:\n: MediaWiki 1.24 e verziune appriesso nun abbìa automatecamente 'e skin installate (vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]). Putite copiare 'e linee ccà abbascio dint' 'o <code>LocalSettings.php</code> pe' putè appiccià tutt' 'e skin installate mò mò:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si avite cagnato mò mò <code>LocalSettings.php</code>:\n: Cuntrullate 'e nomme d' 'e skin n'ata vota pe' ve sparagnà cocch'errore 'e battitura.",
-       "default-skin-not-found-no-skins": "Oops! 'A skin predefinita p' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\nNun avite installato nisciuno skin.\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]) pe n'avè nfurmaziune ncopp' 'a maniera d'appiccià e scegliere chella predefinita.",
+       "default-skin-not-found": "Oops! 'A skin predefinta ' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\n'A installazione pare ca tenesse 'e skin ccà abbascio. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] pe' n'avè cchiù nfurmaziune ncopp' 'a manera 'e ll'abbià o scegliere chilla predefinita.\n\n$2\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Scarrecanne 'e tarballs individuale 'e skin 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki.\n\n; Si avite MediaWiki agghiurnato MediaWiki mò mò:\n: MediaWiki 1.24 e verziune appriesso nun abbìa automatecamente 'e skin installate (vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]). Putite copiare 'e linee ccà abbascio dint' 'o <code>LocalSettings.php</code> pe' putè appiccià tutt' 'e skin installate mò mò:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si avite cagnato mò mò <code>LocalSettings.php</code>:\n: Cuntrullate 'e nomme d' 'e skin n'ata vota pe' ve sparagnà cocch'errore 'e battitura.",
+       "default-skin-not-found-no-skins": "Oops! 'A skin predefinita p' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\nNun avite installato nisciuno skin.\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Scarrecanne 'e tarballs individuale 'e skin 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]) pe n'avè nfurmaziune ncopp' 'a maniera d'appiccià e scegliere chella predefinita.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (funzione appicciata)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''funzione stutata''')",
        "mediastatistics": "Statistiche d' 'e media",
index 7489420..412fc0c 100644 (file)
        "log-name-pagelang": "Журнал изменения языка",
        "log-description-pagelang": "Это журнал изменений в языках страницы.",
        "logentry-pagelang-pagelang": "$1 изменил{{GENDER:$2||а}} язык страницы для $3 с $4 на $5.",
-       "default-skin-not-found": "Упс! Тема оформления по умолчанию для вашей вики <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nВаша установка, похоже, содержит следующие темы оформления. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.\n\n$ 2\n\n; Если вы только что установили MediaWiki:\n: Вы, видимо, сделали это с Git или непосредственно из исходного кода с использованием другого способа. Тогда такое возможно. Попробуйте установить некоторые темы из [https://www.mediawiki.org/wiki/Category:All_skins каталога тем оформления сайта mediawiki.org]:\n:* Загрузив [https://www.mediawiki.org/wiki/Download архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\n:* Клонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code  dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.\n; Если вы только что обновили MediaWiki:\n: MediaWiki версии 1.24 и новее больше не включает автоматически установленные темы (см. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nВы можете вставить следующие строки в <code>LocalSettings.php</code>, чтобы включить все установленные темы оформления: \n\n\n<pre dir=\"ltr\">$3</pre>\n\n\n; Если вы только что изменили <code>LocalSettings.php</code>:\n: Перепроверьте названия тем на наличие опечаток.",
-       "default-skin-not-found-no-skins": "Упс! Тема оформления по умолчанию для вашей вики <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nУ вас нет установленных тем оформления.\n\n; Если вы только что установили или обновили MediaWiki:\n: Вы, видимо, сделали это с Git или непосредственно из исходного кода с использованием другого способа. Тогда такое возможно. MediaWiki версии 1.24 и новее не содержат темы оформления в основном репозитории. Попробуйте установить некоторые темы из [https://www.mediawiki.org/wiki/Category:All_skins каталога тем оформления сайта mediawiki.org]:\n:* Загрузив [https://www.mediawiki.org/wiki/Download архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\n:* Клонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.",
+       "default-skin-not-found": "УпÑ\81! Ð¢ÐµÐ¼Ð° Ð¾Ñ\84оÑ\80млениÑ\8f Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e Ð´Ð»Ñ\8f Ð²Ð°Ñ\88ей Ð²Ð¸ÐºÐ¸ <code>$wgDefaultSkin</code>, <code>$1</code> Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пна.\n\nÐ\92аÑ\88а Ñ\83Ñ\81Ñ\82ановка, Ð¿Ð¾Ñ\85оже, Ñ\81одеÑ\80жиÑ\82 Ñ\81ледÑ\83Ñ\8eÑ\89ие Ñ\82емÑ\8b Ð¾Ñ\84оÑ\80млениÑ\8f. Ð¡Ð¼. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] Ð´Ð»Ñ\8f Ð¿Ð¾Ð»Ñ\83Ñ\87ениÑ\8f Ð¸Ð½Ñ\84оÑ\80маÑ\86ии Ð¾ Ñ\82ом, ÐºÐ°Ðº Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82Ñ\8c Ñ\82емÑ\8b Ð¾Ñ\84оÑ\80млениÑ\8f Ð¸ Ð²Ñ\8bбÑ\80аÑ\82Ñ\8c Ñ\82емÑ\83 Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e.\n\n$ 2\n\n; Ð\95Ñ\81ли Ð²Ñ\8b Ñ\82олÑ\8cко Ñ\87Ñ\82о Ñ\83Ñ\81Ñ\82ановили MediaWiki:\n: Ð\92Ñ\8b, Ð²Ð¸Ð´Ð¸Ð¼Ð¾, Ñ\81делали Ñ\8dÑ\82о Ñ\81 Git Ð¸Ð»Ð¸ Ð½ÐµÐ¿Ð¾Ñ\81Ñ\80едÑ\81Ñ\82венно Ð¸Ð· Ð¸Ñ\81Ñ\85одного ÐºÐ¾Ð´Ð° Ñ\81 Ð¸Ñ\81полÑ\8cзованием Ð´Ñ\80Ñ\83гого Ñ\81поÑ\81оба. Ð¢Ð¾Ð³Ð´Ð° Ñ\82акое Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾. Ð\9fопÑ\80обÑ\83йÑ\82е Ñ\83Ñ\81Ñ\82ановиÑ\82Ñ\8c Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ñ\82емÑ\8b Ð¸Ð· [https://www.mediawiki.org/wiki/Category:All_skins ÐºÐ°Ñ\82алога Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f Ñ\81айÑ\82а mediawiki.org]:\n:* Ð\97агÑ\80Ñ\83зив [https://www.mediawiki.org/wiki/Download Ð°Ñ\80Ñ\85ив Ñ\83Ñ\81Ñ\82ановоÑ\87нÑ\8bÑ\85 Ñ\84айлов], ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ñ\81одеÑ\80жиÑ\82 Ð½ÐµÑ\81колÑ\8cко Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f Ð¸ Ñ\80аÑ\81Ñ\88иÑ\80ений. Ð\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81копиÑ\80оваÑ\82Ñ\8c Ð¿Ð°Ð¿ÐºÑ\83 <code>skins/</code> Ð¸Ð· Ð½ÐµÐ³Ð¾.\n:* Ð\97агÑ\80Ñ\83зив Ð°Ñ\80Ñ\85ивÑ\8b Ð¾Ñ\82делÑ\8cнÑ\8bÑ\85 Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f Ñ\81 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Ð\9aлониÑ\80овав Ð¾Ð´Ð¸Ð½ Ð¸Ð· Ñ\80епозиÑ\82оÑ\80иев <code>mediawiki/skins/*</code> Ñ\87еÑ\80ез git Ð² Ð¿Ð¾Ð´Ð¿Ð°Ð¿ÐºÑ\83 <code  dir=\"ltr\">skins/</code> Ð¿Ð°Ð¿ÐºÐ¸, ÐºÑ\83да Ñ\83Ñ\81Ñ\82ановлена MediaWiki.\n: Ð­Ñ\82о Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð½Ð°Ð²Ñ\80едиÑ\82Ñ\8c Ð²Ð°Ñ\88емÑ\83 Ñ\80епозиÑ\82оÑ\80иÑ\8e, ÐµÑ\81ли Ð²Ñ\8b MediaWiki-Ñ\80азÑ\80абоÑ\82Ñ\87ик. Ð¡Ð¼. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] Ð´Ð»Ñ\8f Ð¿Ð¾Ð»Ñ\83Ñ\87ениÑ\8f Ð¸Ð½Ñ\84оÑ\80маÑ\86ии Ð¾ Ñ\82ом, ÐºÐ°Ðº Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82Ñ\8c Ñ\82емÑ\8b Ð¾Ñ\84оÑ\80млениÑ\8f Ð¸ Ð²Ñ\8bбÑ\80аÑ\82Ñ\8c Ñ\82емÑ\83 Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e.\n; Ð\95Ñ\81ли Ð²Ñ\8b Ñ\82олÑ\8cко Ñ\87Ñ\82о Ð¾Ð±Ð½Ð¾Ð²Ð¸Ð»Ð¸ MediaWiki:\n: MediaWiki Ð²ÐµÑ\80Ñ\81ии 1.24 Ð¸ Ð½Ð¾Ð²ÐµÐµ Ð±Ð¾Ð»Ñ\8cÑ\88е Ð½Ðµ Ð²ÐºÐ»Ñ\8eÑ\87аеÑ\82 Ð°Ð²Ñ\82омаÑ\82иÑ\87еÑ\81ки Ñ\83Ñ\81Ñ\82ановленнÑ\8bе Ñ\82емÑ\8b (Ñ\81м. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nÐ\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ð²Ñ\81Ñ\82авиÑ\82Ñ\8c Ñ\81ледÑ\83Ñ\8eÑ\89ие Ñ\81Ñ\82Ñ\80оки Ð² <code>LocalSettings.php</code>, Ñ\87Ñ\82обÑ\8b Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82Ñ\8c Ð²Ñ\81е Ñ\83Ñ\81Ñ\82ановленнÑ\8bе Ñ\82емÑ\8b Ð¾Ñ\84оÑ\80млениÑ\8f: \n\n\n<pre dir=\"ltr\">$3</pre>\n\n\n; Ð\95Ñ\81ли Ð²Ñ\8b Ñ\82олÑ\8cко Ñ\87Ñ\82о Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð¸ <code>LocalSettings.php</code>:\n: Ð\9fеÑ\80епÑ\80овеÑ\80Ñ\8cÑ\82е Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ\8f Ñ\82ем Ð½Ð° Ð½Ð°Ð»Ð¸Ñ\87ие Ð¾Ð¿ÐµÑ\87аÑ\82ок.",
+       "default-skin-not-found-no-skins": "УпÑ\81! Ð¢ÐµÐ¼Ð° Ð¾Ñ\84оÑ\80млениÑ\8f Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e Ð´Ð»Ñ\8f Ð²Ð°Ñ\88ей Ð²Ð¸ÐºÐ¸ <code>$wgDefaultSkin</code>, <code>$1</code> Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пна.\n\nУ Ð²Ð°Ñ\81 Ð½ÐµÑ\82 Ñ\83Ñ\81Ñ\82ановленнÑ\8bÑ\85 Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f.\n\n; Ð\95Ñ\81ли Ð²Ñ\8b Ñ\82олÑ\8cко Ñ\87Ñ\82о Ñ\83Ñ\81Ñ\82ановили Ð¸Ð»Ð¸ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ð»Ð¸ MediaWiki:\n: Ð\92Ñ\8b, Ð²Ð¸Ð´Ð¸Ð¼Ð¾, Ñ\81делали Ñ\8dÑ\82о Ñ\81 Git Ð¸Ð»Ð¸ Ð½ÐµÐ¿Ð¾Ñ\81Ñ\80едÑ\81Ñ\82венно Ð¸Ð· Ð¸Ñ\81Ñ\85одного ÐºÐ¾Ð´Ð° Ñ\81 Ð¸Ñ\81полÑ\8cзованием Ð´Ñ\80Ñ\83гого Ñ\81поÑ\81оба. Ð¢Ð¾Ð³Ð´Ð° Ñ\82акое Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾. MediaWiki Ð²ÐµÑ\80Ñ\81ии 1.24 Ð¸ Ð½Ð¾Ð²ÐµÐµ Ð½Ðµ Ñ\81одеÑ\80жаÑ\82 Ñ\82емÑ\8b Ð¾Ñ\84оÑ\80млениÑ\8f Ð² Ð¾Ñ\81новном Ñ\80епозиÑ\82оÑ\80ии. Ð\9fопÑ\80обÑ\83йÑ\82е Ñ\83Ñ\81Ñ\82ановиÑ\82Ñ\8c Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ñ\82емÑ\8b Ð¸Ð· [https://www.mediawiki.org/wiki/Category:All_skins ÐºÐ°Ñ\82алога Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f Ñ\81айÑ\82а mediawiki.org]:\n:* Ð\97агÑ\80Ñ\83зив [https://www.mediawiki.org/wiki/Download Ð°Ñ\80Ñ\85ив Ñ\83Ñ\81Ñ\82ановоÑ\87нÑ\8bÑ\85 Ñ\84айлов], ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ñ\81одеÑ\80жиÑ\82 Ð½ÐµÑ\81колÑ\8cко Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f Ð¸ Ñ\80аÑ\81Ñ\88иÑ\80ений. Ð\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81копиÑ\80оваÑ\82Ñ\8c Ð¿Ð°Ð¿ÐºÑ\83 <code>skins/</code> Ð¸Ð· Ð½ÐµÐ³Ð¾.\n:* Ð\97агÑ\80Ñ\83зив Ð°Ñ\80Ñ\85ивÑ\8b Ð¾Ñ\82делÑ\8cнÑ\8bÑ\85 Ñ\82ем Ð¾Ñ\84оÑ\80млениÑ\8f Ñ\81 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Ð\9aлониÑ\80овав Ð¾Ð´Ð¸Ð½ Ð¸Ð· Ñ\80епозиÑ\82оÑ\80иев <code>mediawiki/skins/*</code> Ñ\87еÑ\80ез git Ð² Ð¿Ð¾Ð´Ð¿Ð°Ð¿ÐºÑ\83 <code dir=\"ltr\">skins/</code> Ð¿Ð°Ð¿ÐºÐ¸, ÐºÑ\83да Ñ\83Ñ\81Ñ\82ановлена MediaWiki.\n: Ð­Ñ\82о Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð½Ð°Ð²Ñ\80едиÑ\82Ñ\8c Ð²Ð°Ñ\88емÑ\83 Ñ\80епозиÑ\82оÑ\80иÑ\8e, ÐµÑ\81ли Ð²Ñ\8b MediaWiki-Ñ\80азÑ\80абоÑ\82Ñ\87ик. Ð¡Ð¼. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] Ð´Ð»Ñ\8f Ð¿Ð¾Ð»Ñ\83Ñ\87ениÑ\8f Ð¸Ð½Ñ\84оÑ\80маÑ\86ии Ð¾ Ñ\82ом, ÐºÐ°Ðº Ð²ÐºÐ»Ñ\8eÑ\87иÑ\82Ñ\8c Ñ\82емÑ\8b Ð¾Ñ\84оÑ\80млениÑ\8f Ð¸ Ð²Ñ\8bбÑ\80аÑ\82Ñ\8c Ñ\82емÑ\83 Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (включено)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''отключено''')",
        "mediastatistics": "Медиа-статистика",
index 75ff4c8..47267a0 100644 (file)
        "log-name-pagelang": "Dnevnik spreminjanja jezika",
        "log-description-pagelang": "Dnevnik sprememb jezika strani.",
        "logentry-pagelang-pagelang": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} jezik strani $3 z jezika $4 na jezik $5.",
-       "default-skin-not-found": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nKot kaže, vaša namestitev vsebuje kože, navedene spodaj. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.\n\n$2\n\n; Če ste MediaWiki pravkar namestili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code>skins/</code>.\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code dir=\"ltr\">skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git.\n\n; Če ste MediaWiki pravkar posodobili:\n: MediaWiki 1.24 in novejši nameščenih kož več ne omogočijo samodejno (oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priročnik: Samodejno odkrivanje kož]). V <code>LocalSettings.php</code> lahko prilepite naslednje vrstice, da omogočite trenutno nameščene kože:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Če ste pravkar spremenili <code>LocalSettings.php</code>:\n: Ponovno preverite imena kož, če ste se morda zatipkali.",
-       "default-skin-not-found-no-skins": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nNimate nameščenih kož.\n\n; Če ste MediaWiki pravkar namestili ali posodobili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. MediaWiki 1.24 in novejši nimajo vključene nobene kože v glavnem repozitoriju. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code dir=\"ltr\">skins/</code>.\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code>skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.",
+       "default-skin-not-found": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nKot kaže, vaša namestitev vsebuje kože, navedene spodaj. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.\n\n$2\n\n; Če ste MediaWiki pravkar namestili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code>skins/</code>.\n:* Prenesite tarballe posamezne kož z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code dir=\"ltr\">skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git.\n\n; Če ste MediaWiki pravkar posodobili:\n: MediaWiki 1.24 in novejši nameščenih kož več ne omogočijo samodejno (oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priročnik: Samodejno odkrivanje kož]). V <code>LocalSettings.php</code> lahko prilepite naslednje vrstice, da omogočite trenutno nameščene kože:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Če ste pravkar spremenili <code>LocalSettings.php</code>:\n: Ponovno preverite imena kož, če ste se morda zatipkali.",
+       "default-skin-not-found-no-skins": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nNimate nameščenih kož.\n\n; Če ste MediaWiki pravkar namestili ali posodobili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. MediaWiki 1.24 in novejši nimajo vključene nobene kože v glavnem repozitoriju. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code dir=\"ltr\">skins/</code>.\n:* Prenesite tarballe posamezne kož z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code>skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (omogočeno)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''onemogočeno''')",
        "mediastatistics": "Statistika predstavnosti",
index ba492b2..d51c8bf 100644 (file)
        "upload-options": "Поставке слања",
        "watchthisupload": "Надгледај ову датотеку",
        "filewasdeleted": "Датотека с овим називом је раније послата, али је обрисана.\nПроверите $1 пре него што наставите с поновним слањем.",
-       "filename-bad-prefix": "Назив датотеке коју шаљете почиње са '''\"$1\"''', а њега обично додељују дигитални фотоапарати.\nИзаберите назив датотеке који описује њен садржај.",
+       "filename-bad-prefix": "Назив датотеке коју шаљете почиње са <strong>„$1“</strong>, а њега обично додељују дигитални фотоапарати.\nИзаберите назив датотеке који описује њен садржај.",
        "filename-prefix-blacklist": " #<!-- оставите овај ред онаквим какав јесте --> <pre>\n# Синтакса је следећа:\n#   * Све од тарабе па до краја реда је коментар\n#   * Сваки ред означава префикс типичних назива датотека које додељивају дигитални апарати\nCIMG # Касио\nDSC_ # Никон\nDSCF # Фуџи\nDSCN # Никон\nDUW # неки мобилни телефони\nIMG # опште\nJD # Џеноптик\nMGP # Пентакс\nPICT # разно\n #</pre> <!-- оставите овај ред онаквим какав јесте -->",
        "upload-success-subj": "Успешно отпремање",
        "upload-success-msg": "Датотека из [$2] је послата. Доступна је овде: [[:{{ns:file}}:$1]]",
        "unblock-hideuser": "Не можете деблокирати овог корисника јер је његово корисничко име сакривено.",
        "ipb_cant_unblock": "Грешка: блокада $1 не постоји. Можда је корисник деблокиран.",
        "ipb_blocked_as_range": "Грешка: ИП адреса $1 није директно блокирана и не може да се деблокира.\nОна је блокирана као део блокаде $2, која може бити деблокирана.",
-       "ip_range_invalid": "Ð\9dеиÑ\81пÑ\80аван Ñ\80аÑ\81под ИП адреса.",
+       "ip_range_invalid": "Ð\9dеиÑ\81пÑ\80аван Ñ\80аÑ\81пон ИП адреса.",
        "ip_range_toolarge": "Опсежна блокирања већа од /$1 нису дозвољена.",
        "proxyblocker": "Блокер посредника",
        "proxyblockreason": "Ваша ИП адреса је блокирана јер представља отворени посредник.\nОбратите се вашем добављачу интернет услуга или техничку подршку и обавестите их о овом озбиљном безбедносном проблему.",
        "filemissing": "Недостаје датотека",
        "thumbnail_error": "Грешка при стварању минијатуре: $1",
        "djvu_page_error": "DjVu страница је недоступна",
-       "djvu_no_xml": "Не могу да преузмем XML за датотеку DjVu.",
+       "djvu_no_xml": "Не могу да преузмем XML за DjVu датотеку.",
        "thumbnail-temp-create": "Не могу да направим привремену датотеку минијатуре",
        "thumbnail-dest-create": "Не могу да сачувам минијатуру у одредишту",
        "thumbnail_invalid_params": "Неисправни параметри за минијатуру",
index 8eb2f0d..8721007 100644 (file)
        "upload-options": "Postavke slanja",
        "watchthisupload": "Nadgledaj ovu datoteku",
        "filewasdeleted": "Datoteka s ovim nazivom je ranije poslata, ali je obrisana.\nProverite $1 pre nego što nastavite s ponovnim slanjem.",
-       "filename-bad-prefix": "Naziv datoteke koju šaljete počinje sa '''\"$1\"''', a njega obično dodeljuju digitalni fotoaparati.\nIzaberite naziv datoteke koji opisuje njen sadržaj.",
+       "filename-bad-prefix": "Naziv datoteke koju šaljete počinje sa <strong>„$1“</strong>, a njega obično dodeljuju digitalni fotoaparati.\nIzaberite naziv datoteke koji opisuje njen sadržaj.",
        "filename-prefix-blacklist": " #<!-- ostavite ovaj red onakvim kakav jeste --> <pre>\n# Sintaksa je sledeća:\n#   * Sve od tarabe pa do kraja reda je komentar\n#   * Svaki red označava prefiks tipičnih naziva datoteka koje dodeljivaju digitalni aparati\nCIMG # Kasio\nDSC_ # Nikon\nDSCF # Fudži\nDSCN # Nikon\nDUW # neki mobilni telefoni\nIMG # opšte\nJD # Dženoptik\nMGP # Pentaks\nPICT # razno\n #</pre> <!-- ostavite ovaj red onakvim kakav jeste -->",
        "upload-success-subj": "Uspešno otpremanje",
        "upload-success-msg": "Datoteka iz [$2] je poslata. Dostupna je ovde: [[:{{ns:file}}:$1]]",
        "unblock-hideuser": "Ne možete deblokirati ovog korisnika jer je njegovo korisničko ime sakriveno.",
        "ipb_cant_unblock": "Greška: blokada $1 ne postoji. Možda je korisnik deblokiran.",
        "ipb_blocked_as_range": "Greška: IP adresa $1 nije direktno blokirana i ne može da se deblokira.\nOna je blokirana kao deo blokade $2, koja može biti deblokirana.",
-       "ip_range_invalid": "Neispravan raspod IP adresa.",
+       "ip_range_invalid": "Neispravan raspon IP adresa.",
        "ip_range_toolarge": "Opsežna blokiranja veća od /$1 nisu dozvoljena.",
        "proxyblocker": "Bloker posrednika",
        "proxyblockreason": "Vaša IP adresa je blokirana jer predstavlja otvoreni posrednik.\nObratite se vašem dobavljaču internet usluga ili tehničku podršku i obavestite ih o ovom ozbiljnom bezbednosnom problemu.",
        "filemissing": "Nedostaje datoteka",
        "thumbnail_error": "Greška pri stvaranju minijature: $1",
        "djvu_page_error": "DjVu stranica je nedostupna",
-       "djvu_no_xml": "Ne mogu da preuzmem XML za datoteku DjVu.",
+       "djvu_no_xml": "Ne mogu da preuzmem XML za DjVu datoteku.",
        "thumbnail-temp-create": "Ne mogu da napravim privremenu datoteku minijature",
        "thumbnail-dest-create": "Ne mogu da sačuvam minijaturu u odredištu",
        "thumbnail_invalid_params": "Neispravni parametri za minijaturu",
        "specialpages-group-wiki": "Podaci i alati",
        "specialpages-group-redirects": "Preusmeravanje posebnih stranica",
        "specialpages-group-spam": "Alatke protiv nepoželjnih poruka",
+       "specialpages-group-developer": "Programerski alati",
        "blankpage": "Prazna stranica",
        "intentionallyblankpage": "Ova stranica je namerno ostavljena praznom.",
        "external_image_whitelist": " #Ostavite ovaj red onakvim kakav jeste<pre>\n#Ispod dodajte odlomke regularnih izraza (samo deo koji se nalazi između //)\n#Oni će biti upoređeni s adresama spoljašnjih slika\n#One koje se poklapaju biće prikazane kao slike, a preostale kao veze do slika\n#Redovi koji počinju s tarabom se smatraju komentarima\n#Svi unosi su osetljivi na mala i velika slova\n\n#Dodajte sve odlomke regularnih izraza iznad ovog reda. Ovaj red ne dirajte</pre>",
index 4bc058c..73d8eef 100644 (file)
        "savefile": "فائل محفوظ کریں",
        "sourcefilename": "اسم ملف (فائل) کا منبع:",
        "destfilename": "تعین شدہ اسم ملف:",
-       "watchthisupload": "یہ صفحہ زیر نظر کیجیۓ",
+       "watchthisupload": "یہ صفحہ زیر نظر کریں",
        "license": "اجازہ:",
        "license-header": "اجازہ کاری",
        "listfiles": "فہرست فائل",
        "listredirects": "فہرست متبادل ربط",
        "unusedtemplates": "غیر استعمال شدہ سانچے",
        "randompage": "بےترتیب صفحہ",
+       "randomincategory-category": "زمرہ:",
        "statistics": "اعداد و شمار",
+       "statistics-header-pages": "احصائے صفحات",
+       "statistics-header-edits": "احصائے تدوین",
        "statistics-header-users": "ارکان کے اعداد و شمار",
+       "statistics-header-hooks": "احصائے دیگر",
+       "statistics-articles": "مندرج صفحات",
+       "statistics-pages": "صفحات",
+       "statistics-pages-desc": "(ویکی اقتباسات کے کل صفحات، بشمولِ تبادلۂ خیال، رجوع مکررات وغیرہ۔)",
+       "statistics-files": "زبراثقال شدہ ملفات",
+       "statistics-edits": "ویکی اقتباسات کے آغاز سے کل صفحاتی ترمیم",
+       "statistics-edits-average": "فی صفحہ اوسط ترامیم",
+       "statistics-users": "مندرج [[خاص:فہرست صارفین، صارف فہرست|صارفین]]",
+       "statistics-users-active": "متحرک صارفین",
        "doubleredirects": "دوہرے متبادل ربط",
        "brokenredirects": "نامکمل متبادل ربط",
+       "brokenredirects-edit": "ترمیم کریں",
+       "brokenredirects-delete": "حذف",
        "nbytes": "$1 {{PLURAL:$1|لکمہ|لکمہ جات}}",
        "ncategories": "{{PLURAL:$1|زمرہ|زمرہ جات}} $1",
        "nmembers": "{{PLURAL:$1|رکن|اراکین}}",
index 8a5ba76..5c703d6 100644 (file)
        "log-name-pagelang": "更改语言日志",
        "log-description-pagelang": "这是页面语言更改的日志。",
        "logentry-pagelang-pagelang": "$1{{GENDER:$2|更改}}$3的页面语言:从$4改为$5。",
-       "default-skin-not-found": "天哪!您在<code dir=\"ltr\">$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。您的安装版本看起来需要包含以下皮肤。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。\n\n$2\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的。希望如此。尝试通过以下方法从[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。\n\n; 如果您升级了您的MediaWiki的话:\n: MediaWiki 1.24版本起不再自动启用已安装皮肤(参见[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 此手册])。您可复制粘贴以下文本至您wiki的<code>LocalSettings.php</code>以启用安装的皮肤:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 如果您已经修改了<code>LocalSettings.php</code>:\n: 请再次检查皮肤名以确保不存在错误拼写。",
-       "default-skin-not-found-no-skins": "天哪!您在<code>$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。而且您没有安装任何皮肤。\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的,这是预期的。这是因为MediaWiki 1.24版本起主代码库不再包含任何皮肤。尝试通过以下方法从[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。",
+       "default-skin-not-found": "天哪!您在<code dir=\"ltr\">$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。您的安装版本看起来需要包含以下皮肤。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。\n\n$2\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的。希望如此。尝试通过以下方法从[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 从[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]单独下载皮肤安装包。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。\n\n; 如果您升级了您的MediaWiki的话:\n: MediaWiki 1.24版本起不再自动启用已安装皮肤(参见[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 此手册])。您可复制粘贴以下文本至您wiki的<code>LocalSettings.php</code>以启用安装的皮肤:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 如果您已经修改了<code>LocalSettings.php</code>:\n: 请再次检查皮肤名以确保不存在错误拼写。",
+       "default-skin-not-found-no-skins": "天哪!您在<code>$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。而且您没有安装任何皮肤。\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的,这是预期的。这是因为MediaWiki 1.24版本起主代码库不再包含任何皮肤。尝试通过以下方法从[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 从[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]单独下载皮肤安装包。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2(已启用)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2('''已禁用''')",
        "mediastatistics": "媒体统计",
index 5b53a88..31be674 100644 (file)
        "protectedpages-performer": "保護使用者",
        "protectedpages-params": "保護參數",
        "protectedpages-reason": "原因",
-       "protectedpages-unknown-timestamp": "未知",
+       "protectedpages-unknown-timestamp": "不明",
        "protectedpages-unknown-performer": "不明的使用者",
        "protectedtitles": "受保護標題",
        "protectedtitles-summary": "此頁面列出目前受保護的標題。 欲查詢受保護頁面清單,請參考 [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]。",
        "pagemovedsub": "已成功移動",
        "movepage-moved": "<strong>已移動 \"$1\" 至 \"$2\"</strong>",
        "movepage-moved-redirect": "已建立重新導向頁面。",
-       "movepage-moved-noredirect": "已禁止建立重新導向頁面。",
+       "movepage-moved-noredirect": "已取消建立重新導向頁面。",
        "articleexists": "該頁面名稱已存在,或您選擇的名稱無效。\n請改選擇其他名稱。",
        "cantmove-titleprotected": "您選擇的新標題已被禁止使用,您不可移動頁面到該位置。",
        "movetalk": "移動相關的對話頁面",
index 88965d0..f2c3227 100644 (file)
@@ -778,6 +778,7 @@ return array(
                'dependencies' => array(
                        'mediawiki.hlist',
                ),
+               'position' => 'top',
        ),
        'mediawiki.template' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.template.js',
@@ -786,6 +787,7 @@ return array(
        'mediawiki.apipretty' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.apipretty.css',
                'targets' => array( 'desktop', 'mobile' ),
+               'position' => 'top',
        ),
        'mediawiki.api' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.js',
index 6b9464a..cf9e27f 100644 (file)
@@ -5,7 +5,7 @@
  * http://www.modernmethod.com/sajax/
  */
 
-/*jshint camelcase:false */
+/*jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
 /*global alert */
 ( function ( mw ) {
 
index a52ccb6..9a8d391 100644 (file)
@@ -34,6 +34,7 @@ span.mw-filepage-other-resolutions,
 #filetoc,
 .usermessage,
 .patrollink,
+.ns-0 .mw-redirectedfrom,
 #mw-navigation,
 #siteNotice {
        display: none;
index 87de646..c6ee1a7 100644 (file)
                                };
                                img.src = dataURL;
                        }, mw.config.get( 'wgFileCanRotate' ) ? function ( data ) {
-                               /*jshint camelcase:false, nomen:false */
                                try {
                                        meta = mw.libs.jpegmeta( data, file.fileName );
+                                       // jscs:disable requireCamelCaseOrUpperCaseIdentifiers, disallowDanglingUnderscores
                                        meta._binary_data = null;
+                                       // jscs:enable
                                } catch ( e ) {
                                        meta = null;
                                }
index cfdb5a7..9e11842 100644 (file)
                                                        return;
                                                }
 
-                                               if ( !mw.config.get( 'wgResourceLoaderStorageEnabled' ) || mw.config.get( 'debug' ) ) {
-                                                       // Disabled by configuration, or because debug mode is set
+                                               if ( !mw.config.get( 'wgResourceLoaderStorageEnabled' ) ) {
+                                                       // Disabled by configuration.
+                                                       // Clear any previous store to free up space. (T66721)
+                                                       mw.loader.store.clear();
+                                                       mw.loader.store.enabled = false;
+                                                       return;
+                                               }
+                                               if ( mw.config.get( 'debug' ) ) {
+                                                       // Disable module store in debug mode
                                                        mw.loader.store.enabled = false;
                                                        return;
                                                }
index 7913363..9b15379 100644 (file)
@@ -9,7 +9,7 @@
     "grunt-contrib-jshint": "0.10.0",
     "grunt-contrib-watch": "0.6.1",
     "grunt-banana-checker": "0.2.0",
-    "grunt-jscs": "0.6.1",
+    "grunt-jscs": "0.8.1",
     "grunt-jsonlint": "1.0.4"
   }
 }
index 05275c8..2cd549e 100644 (file)
@@ -447,7 +447,8 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $comment = __METHOD__ . ': Sample page for unit test.';
 
                // Avoid memory leak...?
-               LinkCache::singleton()->clear();
+               // LinkCache::singleton()->clear();
+               // Maybe.  But doing this absolutely breaks $title->isRedirect() when called during unit tests....
 
                $page = WikiPage::factory( $title );
                $page->doEditContent( ContentHandler::makeContent( $text, $title ), $comment, 0, false, $user );
index a33f6a6..d0f6208 100644 (file)
@@ -41,6 +41,13 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                $this->insertPage( 'Example Foo' );
                $this->insertPage( 'Example Foo/Bar' );
                $this->insertPage( 'Example/Baz' );
+               $this->insertPage( 'Redirect test', '#REDIRECT [[Redirect Test]]' );
+               $this->insertPage( 'Redirect Test');
+               $this->insertPage( 'Redirect Test Worse Result');
+               $this->insertPage( 'Redirect test2', '#REDIRECT [[Redirect Test2]]' );
+               $this->insertPage( 'Redirect TEST2', '#REDIRECT [[Redirect Test2]]' );
+               $this->insertPage( 'Redirect Test2');
+               $this->insertPage( 'Redirect Test2 Worse Result');
 
                $this->insertPage( 'Talk:Sandbox' );
                $this->insertPage( 'Talk:Example' );
@@ -63,6 +70,10 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                                        'Example/Baz',
                                        'Example Bar',
                                ),
+                               // Third result when testing offset
+                               'offsetresult' => array(
+                                       'Example Foo',
+                               ),
                        ) ),
                        array( array(
                                'Talk namespace prefix',
@@ -87,6 +98,10 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                                        'Special:AllMessages',
                                        'Special:AllMyFiles',
                                ),
+                               // Third result when testing offset
+                               'offsetresult' => array(
+                                       'Special:AllMyUploads',
+                               ),
                        ) ),
                        array( array(
                                'Special namespace with prefix',
@@ -96,6 +111,10 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                                        'Special:UncategorizedCategories',
                                        'Special:UncategorizedFiles',
                                ),
+                               // Third result when testing offset
+                               'offsetresult' => array(
+                                       'Special:UncategorizedImages',
+                               ),
                        ) ),
                        array( array(
                                'Special page name',
@@ -138,6 +157,30 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                );
        }
 
+       /**
+        * @dataProvider provideSearch
+        * @covers PrefixSearch::search
+        * @covers PrefixSearch::searchBackend
+        */
+       public function testSearchWithOffset( Array $case ) {
+               $this->searchProvision( null );
+               $searcher = new StringPrefixSearch;
+               $results = $searcher->search( $case['query'], 3, array(), 1 );
+
+               // We don't expect the first result when offsetting
+               array_shift( $case['results'] );
+               // And sometimes we expect a different last result
+               $expected = isset( $case['offsetresult'] ) ?
+                       array_merge( $case['results'], $case['offsetresult'] ):
+                       $case['results'];
+
+               $this->assertEquals(
+                       $expected,
+                       $results,
+                       $case[0]
+               );
+       }
+
        public static function provideSearchBackend() {
                return array(
                        array( array(
@@ -196,6 +239,55 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                                        'External',
                                ),
                        ) ),
+                       array( array(
+                               "Exact match shouldn't override already found match if " .
+                                       "exact is redirect and found isn't",
+                               'provision' => array(
+                                       // Target of the exact match is low in the list
+                                       'Redirect Test Worse Result',
+                                       'Redirect Test',
+                               ),
+                               'query' => 'redirect test',
+                               'results' => array(
+                                       // Redirect target is pulled up and exact match isn't added
+                                       'Redirect Test',
+                                       'Redirect Test Worse Result',
+                               ),
+                       ) ),
+                       array( array(
+                               "Exact match shouldn't override already found match if " .
+                                       "both exact match and found match are redirect",
+                               'provision' => array(
+                                       // Another redirect to the same target as the exact match
+                                       // is low in the list
+                                       'Redirect Test2 Worse Result',
+                                       'Redirect test2',
+                               ),
+                               'query' => 'redirect TEST2',
+                               'results' => array(
+                                       // Found redirect is pulled to the top and exact match isn't
+                                       // added
+                                       'Redirect test2',
+                                       'Redirect Test2 Worse Result',
+                               ),
+                       ) ),
+                       array( array(
+                               "Exact match should override any already found matches that " .
+                                       "are redirects to it",
+                               'provision' => array(
+                                       // Another redirect to the same target as the exact match
+                                       // is low in the list
+                                       'Redirect Test Worse Result',
+                                       'Redirect test',
+                               ),
+                               'query' => 'Redirect Test',
+                               'results' => array(
+                                       // Found redirect is pulled to the top and exact match isn't
+                                       // added
+                                       'Redirect Test',
+                                       'Redirect Test Worse Result',
+                               ),
+                       ) ),
                );
        }
 
index 064d518..724f0c8 100644 (file)
@@ -34,6 +34,21 @@ class InstallDocFormatterTest extends MediaWikiTestCase {
                        array( ':One indentation', "\tOne indentation", 'Replacing a single \t' ),
                        array( '::Two indentations', "\t\tTwo indentations", 'Replacing 2 x \t' ),
 
+                       # Transform 'T123' links
+                       array(
+                               '<span class="config-plainlink">[https://phabricator.wikimedia.org/T123 T123]</span>',
+                               'T123', 'Testing T123 links' ),
+                       array(
+                               'bug <span class="config-plainlink">[https://phabricator.wikimedia.org/T123 T123]</span>',
+                               'bug T123', 'Testing bug T123 links' ),
+                       array(
+                               '(<span class="config-plainlink">[https://phabricator.wikimedia.org/T987654 T987654]</span>)',
+                               '(T987654)', 'Testing (T987654) links' ),
+
+                       # "Tabc" shouldn't work
+                       array( 'Tfoobar', 'Tfoobar', "Don't match T followed by non-digits" ),
+                       array( 'T!!fakefake!!', 'T!!fakefake!!', "Don't match T followed by non-digits" ),
+
                        # Transform 'bug 123' links
                        array(
                                '<span class="config-plainlink">[https://bugzilla.wikimedia.org/123 bug 123]</span>',