Merge "Revert "Apply IP blocks to X-Forwarded-For header""
authorAaron Schulz <aschulz@wikimedia.org>
Fri, 29 Mar 2013 19:57:34 +0000 (19:57 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 29 Mar 2013 19:57:35 +0000 (19:57 +0000)
349 files changed:
.jshintignore
CREDITS
HISTORY
RELEASE-NOTES-1.21
RELEASE-NOTES-1.22 [new file with mode: 0644]
docs/title.txt
includes/ArrayUtils.php
includes/Article.php
includes/AutoLoader.php
includes/Cdb_PHP.php
includes/ChangesFeed.php
includes/ChangesList.php
includes/Collation.php
includes/DefaultSettings.php
includes/Defines.php
includes/EditPage.php
includes/Exception.php
includes/Export.php
includes/FeedUtils.php
includes/FileDeleteForm.php
includes/GlobalFunctions.php
includes/HTMLForm.php
includes/Hooks.php
includes/HttpFunctions.php
includes/ImagePage.php
includes/Import.php
includes/Linker.php
includes/LinksUpdate.php
includes/MWFunction.php
includes/Metadata.php
includes/MimeMagic.php
includes/Namespace.php
includes/OutputPage.php
includes/PHPVersionError.php
includes/ProtectionForm.php
includes/RecentChange.php
includes/Revision.php
includes/RevisionList.php
includes/Sanitizer.php
includes/SeleniumWebSettings.php
includes/Setup.php
includes/SiteConfiguration.php
includes/Skin.php
includes/SkinLegacy.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/SpecialPageFactory.php
includes/StatCounter.php [new file with mode: 0644]
includes/Timestamp.php
includes/Title.php
includes/User.php
includes/UserArray.php
includes/UserMailer.php
includes/WebRequest.php
includes/WikiMap.php
includes/WikiPage.php
includes/Xml.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/PurgeAction.php
includes/actions/RawAction.php
includes/api/ApiBase.php
includes/api/ApiFormatJson.php
includes/api/ApiImageRotate.php
includes/api/ApiMain.php
includes/api/ApiOpenSearch.php
includes/api/ApiPageSet.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiRsd.php
includes/cache/MessageCache.php
includes/cache/SquidUpdate.php
includes/cache/UserCache.php
includes/content/ContentHandler.php
includes/db/Database.php
includes/db/DatabaseMssql.php
includes/db/DatabaseOracle.php
includes/db/DatabasePostgres.php
includes/db/LBFactory.php
includes/diff/DairikiDiff.php
includes/diff/DifferenceEngine.php
includes/filebackend/FSFileBackend.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/FileBackendStore.php
includes/filebackend/FileOp.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignAPIFile.php
includes/filerepo/file/LocalFile.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.i18n.php
includes/installer/Installer.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MysqlInstaller.php
includes/installer/OracleInstaller.php
includes/installer/PostgresInstaller.php
includes/installer/PostgresUpdater.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerPage.php
includes/job/Job.php
includes/job/JobQueue.php
includes/job/JobQueueAggregator.php
includes/job/JobQueueAggregatorMemc.php
includes/job/JobQueueAggregatorRedis.php
includes/job/JobQueueDB.php
includes/job/JobQueueGroup.php
includes/json/FormatJson.php
includes/json/Services_JSON.php [deleted file]
includes/logging/DeleteLogFormatter.php [new file with mode: 0644]
includes/logging/LogFormatter.php
includes/logging/MoveLogFormatter.php [new file with mode: 0644]
includes/logging/NewUsersLogFormatter.php [new file with mode: 0644]
includes/logging/PatrolLogFormatter.php [new file with mode: 0644]
includes/logging/RightsLogFormatter.php [new file with mode: 0644]
includes/media/BMP.php
includes/media/Bitmap.php
includes/media/DjVuImage.php
includes/media/ExifBitmap.php
includes/media/FormatMetadata.php
includes/media/ImageHandler.php
includes/media/Jpeg.php
includes/media/MediaHandler.php
includes/media/MediaTransformOutput.php
includes/media/PNGMetadataExtractor.php
includes/media/SVGMetadataExtractor.php
includes/media/XMP.php
includes/media/XMPValidate.php
includes/objectcache/MemcachedClient.php
includes/parser/CoreParserFunctions.php
includes/parser/DateFormatter.php
includes/parser/LinkHolderArray.php
includes/parser/Parser.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/profiler/Profiler.php
includes/profiler/ProfilerSimpleUDP.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderLanguageDataModule.php
includes/resourceloader/ResourceLoaderUserOptionsModule.php
includes/resourceloader/ResourceLoaderUserTokensModule.php
includes/revisiondelete/RevisionDelete.php
includes/revisiondelete/RevisionDeleteAbstracts.php
includes/revisiondelete/RevisionDeleter.php
includes/search/SearchMySQL.php
includes/search/SearchOracle.php
includes/search/SearchPostgres.php
includes/search/SearchSqlite.php
includes/search/SearchUpdate.php
includes/site/MediaWikiSite.php
includes/specials/SpecialActiveusers.php [deleted file]
includes/specials/SpecialAllmessages.php
includes/specials/SpecialAllpages.php
includes/specials/SpecialAncientpages.php
includes/specials/SpecialBlankpage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialBlockme.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialBrokenRedirects.php
includes/specials/SpecialCategories.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialComparePages.php
includes/specials/SpecialConfirmemail.php
includes/specials/SpecialContributions.php
includes/specials/SpecialEmailuser.php
includes/specials/SpecialExport.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialImport.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPagesWithProp.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialProtectedpages.php
includes/specials/SpecialProtectedtitles.php
includes/specials/SpecialRandompage.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialWatchlist.php
includes/specials/SpecialWhatlinkshere.php
includes/specials/SpecialWithoutinterwiki.php
includes/templates/NoLocalSettings.php
includes/upload/UploadBase.php
includes/upload/UploadFromChunks.php
languages/Language.php
languages/LanguageConverter.php
languages/classes/LanguageIu.php
languages/classes/LanguageKk.php
languages/classes/LanguageKu.php
languages/classes/LanguageShi.php
languages/classes/LanguageSr.php
languages/messages/MessagesArc.php
languages/messages/MessagesAst.php
languages/messages/MessagesAzb.php
languages/messages/MessagesBa.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBn.php
languages/messages/MessagesCa.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCs.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDv.php
languages/messages/MessagesEn.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFo.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesGl.php
languages/messages/MessagesHe.php
languages/messages/MessagesHr.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIlo.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKa.php
languages/messages/MessagesKm.php
languages/messages/MessagesKn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesLb.php
languages/messages/MessagesLez.php
languages/messages/MessagesLt.php
languages/messages/MessagesLus.php
languages/messages/MessagesLv.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesNah.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesOr.php
languages/messages/MessagesPl.php
languages/messages/MessagesPt.php
languages/messages/MessagesQqq.php
languages/messages/MessagesQu.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesSl.php
languages/messages/MessagesSo.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesTa.php
languages/messages/MessagesTe.php
languages/messages/MessagesTet.php
languages/messages/MessagesTh.php
languages/messages/MessagesUk.php
languages/messages/MessagesUz.php
languages/messages/MessagesVi.php
languages/messages/MessagesWar.php
languages/messages/MessagesYi.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/dumpLinks.php
maintenance/dumpSisterSites.php
maintenance/jsduck/MetaTags.rb
maintenance/jsduck/categories.json
maintenance/jsduck/external.js
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/purgeList.php
maintenance/runJobs.php
maintenance/showSiteStats.php
resources/mediawiki.api/mediawiki.api.category.js
resources/mediawiki.api/mediawiki.api.edit.js
resources/mediawiki.api/mediawiki.api.js
resources/mediawiki.api/mediawiki.api.parse.js
resources/mediawiki.api/mediawiki.api.watch.js
resources/mediawiki/mediawiki.js
skins/monobook/main.css
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/JsonTest.php [deleted file]
tests/phpunit/includes/LanguageConverterTest.php
tests/phpunit/includes/PathRouterTest.php
tests/phpunit/includes/StringUtilsTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/api/ApiAccountCreationTest.php
tests/phpunit/includes/api/ApiTest.php
tests/phpunit/includes/api/query/ApiQueryBasicTest.php
tests/phpunit/includes/api/query/ApiQueryContinue2Test.php
tests/phpunit/includes/api/query/ApiQueryContinueTest.php
tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php
tests/phpunit/includes/api/query/ApiQueryTestBase.php
tests/phpunit/includes/cache/MessageCacheTest.php [deleted file]
tests/phpunit/includes/content/ContentHandlerTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/jobqueue/JobQueueTest.php
tests/phpunit/includes/json/FormatJsonTest.php [new file with mode: 0644]
tests/phpunit/includes/json/ServicesJsonTest.php [deleted file]
tests/phpunit/includes/normal/CleanUpTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/languages/LanguageBe_taraskTest.php
tests/phpunit/languages/LanguageCsTest.php
tests/phpunit/languages/LanguageCuTest.php
tests/phpunit/languages/LanguageCyTest.php
tests/phpunit/languages/LanguageGaTest.php
tests/phpunit/languages/LanguageGdTest.php
tests/phpunit/languages/LanguageGvTest.php
tests/phpunit/languages/LanguageHeTest.php
tests/phpunit/languages/LanguageHrTest.php
tests/phpunit/languages/LanguageHyTest.php
tests/phpunit/languages/LanguageKshTest.php
tests/phpunit/languages/LanguageLtTest.php
tests/phpunit/languages/LanguageLvTest.php
tests/phpunit/languages/LanguageMkTest.php
tests/phpunit/languages/LanguageMoTest.php
tests/phpunit/languages/LanguageMtTest.php
tests/phpunit/languages/LanguageNsoTest.php
tests/phpunit/languages/LanguagePlTest.php
tests/phpunit/languages/LanguageRoTest.php
tests/phpunit/languages/LanguageRuTest.php
tests/phpunit/languages/LanguageSeTest.php
tests/phpunit/languages/LanguageShTest.php
tests/phpunit/languages/LanguageSkTest.php
tests/phpunit/languages/LanguageSlTest.php
tests/phpunit/languages/LanguageSmaTest.php
tests/phpunit/languages/LanguageSrTest.php
tests/phpunit/languages/LanguageTiTest.php
tests/phpunit/languages/LanguageTlTest.php
tests/phpunit/languages/LanguageUkTest.php
tests/phpunit/languages/LanguageWaTest.php
tests/phpunit/phpunit.php
tests/phpunit/skins/SideBarTest.php
tests/phpunit/suites/UploadFromUrlTestSuite.php
tests/qunit/data/load.mock.php
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.textSelection.test.js

index 3869deb..30b6ee1 100644 (file)
@@ -1,3 +1,7 @@
+# Generated documentation
+docs/html/
+docs/js/
+
 # third-party libs
 extensions/
 node_modules/
diff --git a/CREDITS b/CREDITS
index 9c49a9b..4e701f1 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -1,4 +1,4 @@
-MediaWiki 1.21 is a collaborative project released under the
+MediaWiki 1.22 is a collaborative project released under the
 GNU General Public License v2. We would like to recognize the
 following names for their contribution to the product.
 
diff --git a/HISTORY b/HISTORY
index 02ba8d8..45eab2e 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -1,4 +1,337 @@
-Change notes from older releases. For current info see RELEASE-NOTES-1.21.
+Change notes from older releases. For current info see RELEASE-NOTES-1.22.
+
+== MediaWiki 1.21 ==
+
+MediaWiki 1.21 is an alpha-quality branch and is not recommended for use in
+production.
+
+=== Configuration changes in 1.21 ===
+* (bug 29374) $wgVectorUseSimpleSearch is now enabled by default.
+* Deprecated $wgAllowRealName is removed. Use $wgHiddenPrefs[] = 'realname'
+  instead.
+* (bug 39957) Added $wgUnwatchedPageThreshold, specifying minimum count
+  of page watchers required for the number to be accessible to users
+  without the unwatchedpages permission.
+* $wgBug34832TransitionalRollback has been removed.
+* (bug 29472) $wgUseDynamicDates has been removed and its functionality
+  disabled.
+
+=== New features in 1.21 ===
+* (bug 38110) Schema changes (adding or dropping tables, indices and
+  fields) can be now be done separately from from other changes that
+  update.php makes.  This is useful in environments that use database
+  permissions to restrict schema changes but allow the DB user that
+  MediaWiki normally runs as to perform other changes that update.php
+  makes.  Schema changes can be run separately.  See the file UPGRADE
+  for more information.
+* (bug 34876) jquery.makeCollapsible has been improved in performance.
+* Added ContentHandler facility to allow extensions to support other content
+  than wikitext. See docs/contenthandler.txt for details.
+* New feature was developed for showing high-DPI thumbnails for high-DPI mobile
+  and desktop displays (configurable with $wgResponsiveImages).
+* Added new backend to represent and store information about sites and site
+  specific configuration.
+* jQuery upgraded from 1.8.2 to 1.8.3.
+* jQuery UI upgraded from 1.8.23 to 1.8.24.
+* Added separate fa_sha1 field to filearchive table. This allows sha1
+  searches with the api in miser mode for deleted files.
+* Add initial and programmatic sorting for tablesorter.
+* Add the event "sortEnd.tablesorter", triggered after sorting has completed.
+* The Job system was refactored to allow for different backing stores for
+  queues as well as cross-wiki access to queues, among other things. The schema
+  for the DB queue was changed to support better concurrency and reduce
+  deadlock errors.
+* Added ApiQueryORM class to facilitate creation of query API modules based on
+  tables that have a corresponding ORMTable class.
+* (bug 40876) Icon for PSD (Adobe Photoshop) file types.
+* (bug 40641) Implemented Special:Version/Credits with a list of contributors.
+* (bug 7851) Implemented one-click AJAX patrolling.
+* The <data>, <time>, <meta>, and <link> elements are allowed within WikiText
+  for use with Microdata.
+* The HTML5 <mark> tag has been whitelisted.
+* Added ParserCloned hook for when the Parser object is cloned.
+* Added AlternateEditPreview hook to allow extensions to replace the page
+  preview from the edit page.
+* Added EditPage::showStandardInputs:options hook to allow extensions to add
+  new fields to the "editOptions" area of the edit form.
+* Upload stash DB schema altered to improve upload performance.
+* The following global functions are now reporting deprecated warnings in
+  debug mode: wfMsg, wfMsgNoTrans, wfMsgForContent, wfMsgForContentNoTrans,
+  wfMsgReal, wfMsgGetKey, wfMsgHtml, wfMsgWikiHtml, wfMsgExt, wfEmptyMsg. Use
+  the Message class, or the global method wfMessage.
+* Added $wgEnableCanonicalServerLink, off by default. If enabled, a
+  <link rel=canonical> tag is added to every page indicating the correct server
+  to use.
+* Debug message emitted by wfDebugLog() will now be prefixed with the group
+  name when its logged to the default log file. That is the case whenever the
+  group has no key in wgDebugLogGroups, that will help triage the default log.
+* (bug 24620) Add types to LogFormatter.
+* jQuery JSON upgraded from 2.3 to 2.4.0.
+* Added GetDoubleUnderscoreIDs hook, for modifying the list of magic words.
+* DatabaseUpdater class has two new methods to ease extensions schema changes:
+  dropExtensionIndex and renameExtensionIndex.
+* New preference type - 'api'. Preferences of this type are not shown on
+  Special:Preferences, but are still available via the action=options API.
+* (bug 39397) Hide rollback link if a user is the only contributor of the page.
+* $wgPageInfoTransclusionLimit limits the list size of transcluded articles
+  on the info action. Default is 50.
+* Added action=createaccount to allow user account creation.
+* (bug 40124) action=options API also allows for setting of arbitrary
+  preferences, provided that their names are prefixed with 'userjs-'. This
+  officially reenables the feature that was undocumented and defective
+  in MW 1.20 (saving preferences using Special:Preferences cleared any
+  additional fields) and which has been disabled in 1.20.1 as a part of
+  a security fix (bug 42202).
+* Added option to specify "others" as author in extension credits using
+  "..." as author name.
+* Added the ability to limit the wall clock time used by shell processes,
+  as well as the CPU time. Configurable with $wgMaxShellWallClockTime.
+* Allow memory of shell subprocesses to be limited using Linux cgroups
+  instead of ulimit -v, which tends to cause deadlocks in recent versions
+  of ImageMagick. Configurable with $wgShellCgroup.
+* Added $wgWhitelistReadRegexp for regex whitelisting.
+* (bug 5346) Categories that are redirects will be displayed italic in
+  the category links section at the bottom of a page.
+* (bug 43915) New maintenance script deleteEqualMessages.php.
+* You can now create checkbox option matrices through the HTMLCheckMatrix
+  subclass in HTMLForm.
+* WikiText now permits the use of WAI-ARIA's role="presentation" inside of
+  html elements and tables. This allows presentational markup, especially
+  tables. To be marked up as such.
+* maintenance/sql.php learned the --cluster option. Let you run the script
+  on some external cluster instead of the primary cluster for a given wiki.
+* (bug 20281) test the parsing of inline URLs.
+* Added Special:PagesWithProp, which lists pages using a particular page property.
+* Implemented language-specific collations for category sorting for 67 languages
+  based in latin, greek and cyrillic alphabets. This allows one to *finally* get
+  articles to be correctly sorted on category pages. They are named
+  'uca-<langcode>', where <langcode> is one of: af, ast, az, be, bg, br, bs, ca,
+  co, cs, cy, da, de, dsb, el, en, eo, es, et, eu, fi, fo, fr, fur, fy, ga, gd,
+  gl, hr, hsb, hu, is, it, kk, kl, ku, ky, la, lb, lt, lv, mk, mo, mt, nl, no,
+  oc, pl, pt, rm, ro, ru, rup, sco, sk, sl, smn, sq, sr, sv, tk, tl, tr, tt, uk,
+  uz, vi.
+* Added 'CategoryAfterPageAdded' and 'CategoryAfterPageRemoved' hooks.
+* Added 'HistoryRevisionTools' and 'DiffRevisionTools' hooks.
+* Added 'SpecialSearchResultsPrepend' and 'SpecialSearchResultsAppend' hooks.
+* (bug 33186) Add image rotation api "imagerotate"
+* (bug 34040) Add "User rights management" link on user page toolbox.
+* (bug 45526) Add QUnit assertion helper "QUnit.assert.htmlEqual" for asserting
+  structual equality of HTML (ignoring insignificant differences like
+  quotmarks, order and whitespace in the attribute list).
+* (bug 23393) HTML <hN> headings containing line breaks are now handled
+  correctly.
+* (bug 45803) Whitespace within == Headline == syntax and within <hN> headings
+  is now non-significant and not preserved in the HTML output.
+
+=== Bug fixes in 1.21 ===
+* (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
+* (bug 40352) fixDoubleRedirects.php should support interwiki redirects.
+* (bug 9237) SpecialBrokenRedirect should not list interwiki redirects.
+* (bug 34960) Drop unused fields rc_moved_to_ns and rc_moved_to_title from
+  recentchanges table.
+* (bug 32951) Do not register internal externals with absolute protocol,
+  when server has relative protocol.
+* (bug 39005) When purging proxies listed in $wgSquidServers using HTTP PURGE
+  method requests, we now send a Host header by default, for Varnish
+  compatibility. This also works with Squid in reverse-proxy mode. If you wish
+  to support Squid configured in forward-proxy mode, set
+  $wgSquidPurgeUseHostHeader to false.
+* (bug 37020) sql.php with readline eats semicolon.
+* (bug 11748) Properly handle optionally-closed HTML tags when Tidy is
+  disabled, and don't wrap HTML-syntax definition lists in paragraphs.
+* (bug 41409) Diffs while editing an old revision should again diff against the
+  current revision.
+* (bug 41494) Honor $wgLogExceptionBacktrace when logging non-API exceptions
+  caught during API execution.
+* (bug 37963) Fixed loading process for user options.
+* (bug 26995) Update filename field on Upload page after having sanitized it.
+* (bug 41793) Contribution links to users with 0 edits on Special:ListUsers
+  didn't show up red.
+* (bug 41899) A PHP notice no longer occurs when using the "rvcontinue" API
+  parameter.
+* (bug 42036) Account creation emails now contain canonical (not
+  protocol-relative) URLs.
+* (bug 41990) Fix regression: API edit with redirect=true and lacking
+  starttimestamp and basetimestamp should not cause an edit conflict.
+* (bug 41706) EditPage: Preloaded page should be converted if possible and
+  needed.
+* (bug 41886) Rowspans are no longer exploded by tablesorter until the table is
+  actually sorted.
+* (bug 2865)  User interface HTML elements don't use lang attribute.
+  (completed the fix by adding the lang attribute to firstHeading).
+* (bug 42173) Removed namespace prefixes on Special:UncategorizedCategories.
+* (bug 36053) Log in "returnto" feature forgets query parameters if no
+  title parameter was specified.
+* (bug 42410) API action=edit now returns correct timestamp for the new edit.
+* (bug 14901) Email notification mistakes log action for new page creation.
+  Enotif no longer sends "page has been created" notifications for some log
+  actions. The following events now have a correct message: page creation,
+  deletion, move, restore (undeletion), change (edit). Parameter
+  $CHANGEDORCREATED is deprecated in 'enotif_body' and scheduled for removal in
+  MediaWiki 1.23.
+* (bug 457) In the sidebar of Vector, CologneBlue, Monobook, and Monobook-based
+  skins, the heading levels have been changed from (variously per skin)
+  <h4>, <h5> or <h6> to only <h3>s, with a <h2> hidden heading above them.
+  If you are styling or scripting the headings in a custom way, this change
+  will require updates to your site's CSS or JS.
+* (bug 41342) jquery.suggestions should cancel any active (async) fetches
+  before it triggers another fetch.
+* (bug 42184) $wgUploadSizeWarning missing second variable.
+* (bug 34581) removeUnusedAccounts.php maintenance script now ignores newuser
+  log when determining whether an account is used.
+* (bug 43379) Gracefully fail if rev_len is unavailable for a revision on the
+  History page.
+* (bug 42949) API no longer assumes all exceptions are MWException.
+* (bug 41733) Hide "New user message" (.usermessage) element from printable view.
+* (bug 39062) Special:Contributions will display changes that don't have
+  a parent id instead of just an empty bullet item.
+* (bug 37209) "LinkCache doesn't currently know about this title" error fixed.
+* wfMerge() now works if $wgDiff3 contains spaces
+* (bug 43052) mediawiki.action.view.dblClickEdit.dblClickEdit should trigger
+  ca-edit click instead opening URL directly.
+* (bug 43964) Invalid value of "link" parameter in <gallery> no longer produces
+  a fatal error.
+* (bug 44775) The username field is not pre-filled when creating an account.
+* (bug 45069) wfParseUrl() no longer produces a PHP notice if passed a "mailto:"
+  URL without address
+* (bug 45012) Creating an account by e-mail can no longer show a
+  "password mismatch" error.
+* (bug 44599) On Special:Version, HEADs for submodule checkouts (e.g. for
+  extensions) performed using Git 1.7.8+ should now appear.
+* (bug 42184) $wgUploadSizeWarning missing second variable
+* (bug 40326) Check if files exist with a different extension during uploading
+* (bug 34798) Updated CSS for Atom/RSS recent changes feeds to match on-wiki diffs.
+* (bug 42430) Calling numRows on MySQL no longer propagates unrelated errors.
+* (bug 44719) Removed mention of non-existing maintenance/migrateCurStubs.php
+  script in includes/DefaultSettings.php
+* (bug 45143) jquery.badge: Treat non-Latin variants of zero as zero as well.
+* (bug 46151) mwdocgen.php should not ignore exit code of doxygen command.
+* (bug 41889) Fix $.tablesorter rowspan exploding for complex cases.
+
+=== API changes in 1.21 ===
+* prop=revisions can now report the contentmodel and contentformat.
+  See docs/contenthandler.txt.
+* action=edit and action=parse now support contentmodel and contentformat
+  parameters to control the interpretation of page content.
+  See docs/contenthandler.txt for details.
+* (bug 35693) ApiQueryImageInfo now suppresses errors when unserializing metadata.
+* (bug 40111) Disable minor edit for page/section creation by API.
+* (bug 41042) Revert change to action=parse&page=... behavior when the page
+  does not exist.
+* (bug 27202) Add timestamp sort to list=allimages.
+* (bug 43137) Don't return the sha1 of revisions through the API if the content is
+  revision-deleted.
+* ApiQueryImageInfo now also returns imageinfo for redirects.
+* list=alltransclusions added to enumerate every instance of page embedding
+* list=alllinks & alltransclusions now allow both 'from' and 'continue' in
+  the same query. When both are present, 'from' is simply ignored.
+* list=alllinks & alltransclusions now allow 'unique' in generators, to yield
+  a list of all link/template target pages instead of source pages.
+* BREAKING CHANGE: list=logevents output format changed for details of some log
+  types. Specifically, details that were formerly reported under a key like
+  "4::foo" will now be reported under a key of simply "foo".
+* BREAKING CHANGE: '??_badcontinue' error code was changed to '??badcontinue'
+  for all query modules.
+* ApiQueryBase adds 'badcontinue' error code if module has 'continue' parameter.
+* (bug 35885) Removed version parameter and all getVersion() methods.
+* action=options now takes a "resetkinds" option, which allows only resetting
+  certain types of preferences when the "reset" option is set.
+* (bug 36751) ApiQueryImageInfo now returns imageinfo for the redirect target
+  when queried with &redirects=.
+* (bug 31849) ApiQueryImageInfo no longer gets confused when asked for info on
+  a redirect and its target.
+* (bug 43849) ApiQueryImageInfo no longer throws exceptions with ForeignDBRepo
+  redirects.
+* On error, any warnings generated before that error will be shown in the result.
+* action=help supports generalized submodules (modules=query+value), querymodules obsolete
+* ApiQueryImageInfo continuation is more reliable. The only major change is
+  that the imagerepository property will no longer be set on page objects not
+  processed in the current query (i.e. non-images or those skipped due to
+  iicontinue).
+* Add supports for all pageset capabilities - generators, redirects, converttitles to
+  action=purge and action=setnotificationtimestamp.
+* (bug 43251) prop=pageprops&ppprop= now accepts multiple props to query.
+* ApiQueryImageInfo will now limit the number of calls to File::transform made
+  in any one query. If there are too many, iicontinue will be returned.
+* action=query&meta=siteinfo&siprop=general will now return the regexes used for
+  link trails and link prefixes. Added for Parsoid support.
+* Added an API query module list=pageswithprop, which lists pages using a
+  particular page property.
+* Added an API query module list=pagepropnames, which lists all page prop names
+  currently in use on the wiki.
+* (bug 44921) ApiMain::execute() will now return after the CORS check for an
+  HTTP OPTIONS request.
+* (bug 44923) action=upload works correctly if the entire file is uploaded in
+  the first chunk.
+* Added 'continue=' parameter to streamline client iteration over complex query results
+* (bug 44909) API parameters may now be marked as type "upload", which is now
+  used for action=upload's 'file' and 'chunk' parameters. This type will raise
+  an error during parameter validation if the parameter is given but not
+  recognized as an uploaded file.
+* (bug 44244) prop=info may now return the number of people watching each page.
+* (bug 33304) list=allpages will no longer return duplicate entries when
+  querying protection.
+* (bug 33304) list=allpages will now find really old indefinite protections.
+* (bug 45937) meta=allmessages will report a syntactically invalid lang as a
+  proper error instead of as an uncaught exception.
+* (bug 25325) added support for wlshow filtering (bots/anon/minor/patrolled)
+  to action=feedwatchlist
+* WDDX formatted output will actually be formatted (and normal output will no
+  longer be), and will no longer choke on booleans.
+
+=== API internal changes in 1.21 ===
+* For debugging only, a new global $wgDebugAPI removes many API restrictions when true.
+  Never use on the production servers, as this flag introduces security holes.
+  Whenever enabled, a warning will also be added to all output.
+* ApiModuleManager now handles all submodules (actions,props,lists) and instantiation
+* Query stores prop/list/meta as submodules
+* ApiPageSet can now be used in any action to process titles/pageids/revids or any generator.
+* BREAKING CHANGE: ApiPageSet constructor now has two params instead of three, with only the
+  first one keeping its meaning. ApiPageSet is now derived from ApiBase.
+* BREAKING CHANGE: ApiQuery::newGenerator() and executeGeneratorModule() were deleted.
+* ApiQueryGeneratorBase::setGeneratorMode() now requires a pageset param.
+* $wgAPIGeneratorModules is now obsolete and will be ignored.
+* Added flags ApiResult::OVERRIDE and ADD_ON_TOP to setElement() and addValue()
+* Internal API calls will now include <warnings> in case of unused parameters
+
+=== Languages updated in 1.21 ===
+
+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.
+
+* South Azerbaijani (azb) added.
+* (bug 30040) Autonym for nds-nl is now 'Nedersaksies' (was 'Nedersaksisch').
+* (bug 45436) Autonym for pi (Pali) is now 'पालि' (was ''पाळि').
+* (bug 34977) Now formatted numbers in Spanish use space as separator
+  for thousands, as mandated by the Real Academia Española.
+* (bug 35031) Kurdish formatted numbers now use period and comma
+  as separators for thousands and decimals respectively.
+
+=== Other changes in 1.21 ===
+* BREAKING CHANGE: (bug 44385) Removed the jquery.collapsibleTabs module and
+  moved it to the Vector extension. It was entirely Vector-extension-specific,
+  deeply interconnected with the extension, and this functionality really
+  belongs to the extension instead of the skin anyway. In the unlikely case you
+  were using it, you have to either copy it to your extension, or install the
+  Vector extension (and possibly disable its features using config settings if
+  you don't want them).
+* Experimental IBM DB2 support was removed due to lack of interest and maintainership
+* BREAKING CHANGE: Filenames of maintenance scripts were standardized into
+  lowerCamelCase format, and made more explicit:
+  - clear_stats.php -> clearCacheStats.php
+  - clear_interwiki_cache.php -> clearInterwikiCache.php
+  - initStats.php -> initSiteStats.php
+  - proxy_check.php -> proxyCheck.php
+  - stats.php -> showCacheStats.php
+  - showStats.php -> showSiteStats.php.
+  Class names were renamed accordingly:
+  - clear_stats -> ClearCacheStats
+  - InitStats -> InitSiteStats
+  - CacheStats -> ShowCacheStats
+  - ShowStats -> ShowSiteStats.
+* BREAKING CHANGE: (bug 38244) Removed the mediawiki.api.titleblacklist module
+  and moved it to the TitleBlacklist extension.
 
 == MediaWiki 1.20 ==
 
index 56d812c..8835576 100644 (file)
@@ -18,6 +18,7 @@ production.
 * $wgBug34832TransitionalRollback has been removed.
 * (bug 29472) $wgUseDynamicDates has been removed and its functionality
   disabled.
+* $wgVectorUseIconWatch is now enabled by default.
 
 === New features in 1.21 ===
 * (bug 38110) Schema changes (adding or dropping tables, indices and
@@ -281,6 +282,11 @@ production.
   to action=feedwatchlist
 * WDDX formatted output will actually be formatted (and normal output will no
   longer be), and will no longer choke on booleans.
+* The JSON output formatter now leaves forward slashes unescaped to improve human
+  readability of URLs and similar strings. Also, a "utf8" option is now provided
+  to use UTF-8 encoding instead of hex escape codes for most non-ASCII characters.
+* action=opensearch no longer silently ignores the format parameter.
+* action=opensearch now supports format=jsonfm.
 
 === API internal changes in 1.21 ===
 * For debugging only, a new global $wgDebugAPI removes many API restrictions when true.
@@ -335,6 +341,19 @@ changes to languages because of Bugzilla reports.
   - ShowStats -> ShowSiteStats.
 * BREAKING CHANGE: (bug 38244) Removed the mediawiki.api.titleblacklist module
   and moved it to the TitleBlacklist extension.
+* The Special:ActiveUsers special page was removed
+* BREAKING CHANGE: Implementation of MediaWiki's JS and JSON value encoding
+  has changed:
+** MediaWiki no longer supports PHP installations in which the native JSON
+   extension is missing or disabled.
+** XmlJsCode objects can no longer be nested inside objects or arrays.
+   (For Xml::encodeJsCall(), this individually applies to each argument.)
+** The sets of characters escaped by default, along with the precise escape
+   sequences used, have changed (except for the Xml::escapeJsString()
+   function, which is now deprecated).
+* BREAKING CHANGE: The Services_JSON class has been removed; if necessary,
+  be sure to upgrade affected extensions at the same time (e.g. Collection).
+* Calling Linker methods using a skin will now output deprecation warnings.
 
 == Compatibility ==
 
diff --git a/RELEASE-NOTES-1.22 b/RELEASE-NOTES-1.22
new file mode 100644 (file)
index 0000000..fd6c5c9
--- /dev/null
@@ -0,0 +1,90 @@
+Security reminder: MediaWiki does not require PHP's register_globals. If you
+have it on, turn it '''off''' if you can.
+
+== MediaWiki 1.22 ==
+
+THIS IS NOT A RELEASE YET
+
+MediaWiki 1.22 is an alpha-quality branch and is not recommended for use in
+production.
+
+=== Configuration changes in 1.22 ===
+
+=== New features in 1.22 ===
+
+=== Bug fixes in 1.22 ===
+
+=== API changes in 1.22 ===
+
+=== Languages updated in 1.22===
+
+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.22 ===
+
+
+== Compatibility ==
+
+MediaWiki 1.22 requires PHP 5.3.2 or later.
+
+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.
+
+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
+
+== Upgrading ==
+
+1.22 has several database changes since 1.21, 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.21.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 d2d91c9..454711d 100644 (file)
@@ -8,7 +8,7 @@ and can be queried for the others, and for other attributes of the title. This
 is intended to be an immutable "value" class, so there are no mutator functions.
 
 To get a new instance, call Title::newFromText(). Once instantiated, the
-non-static accessor methods can be used, such as getText(), getDBKey(),
+non-static accessor methods can be used, such as getText(), getDBkey(),
 getNamespace(), etc. Note that Title::newFromText() may return false if the text
 is illegal according to the rules below.
 
@@ -36,11 +36,11 @@ An initial colon in a title listed in wiki text may however suppress special
 handling for interlanguage links, image links, and category links. It is also
 used to indicate the main namespace in template inclusions.
 
-Once prefixes have been stripped, the rest of the title processed this way: 
+Once prefixes have been stripped, the rest of the title processed this way:
 
 * Spaces and underscores are treated as equivalent and each  is converted to the
   other in the appropriate context (underscore in URL and database keys, spaces
-  in plain text). 
+  in plain text).
 * Multiple consecutive spaces are converted to a single space.
 * Leading or trailing space is removed.
 * If $wgCapitalLinks is enabled (the default), the first letter is  capitalised,
@@ -58,7 +58,7 @@ UTF-8, because that is the size of the database field. Special page titles may
 be up to 512 bytes.
 
 Note that Unicode Normal Form C (NFC) is enforced by MediaWiki's user interface
-input functions, and so titles will typically be in this form. 
+input functions, and so titles will typically be in this form.
 
 getArticleID() needs some explanation: for "internal" articles, it should return
 the "page_id" field if the article exists, else it returns 0. For all external
index 0b74f06..985271f 100644 (file)
@@ -39,7 +39,7 @@ class ArrayUtils {
         *
         * @return bool|int|string
         */
-       public static function pickRandom( $weights ){
+       public static function pickRandom( $weights ) {
                if ( !is_array( $weights ) || count( $weights ) == 0 ) {
                        return false;
                }
index 9b4afe4..d2f52bc 100644 (file)
@@ -988,8 +988,9 @@ class Article implements Page {
 
                                // Set the fragment if one was specified in the redirect
                                if ( strval( $this->getTitle()->getFragment() ) != '' ) {
-                                       $fragment = Xml::escapeJsString( $this->getTitle()->getFragmentForURL() );
-                                       $outputPage->addInlineScript( "redirectToFragment(\"$fragment\");" );
+                                       $outputPage->addInlineScript( Xml::encodeJsCall(
+                                               'redirectToFragment', array( $this->getTitle()->getFragmentForURL() )
+                                       ) );
                                }
 
                                // Add a <link rel="canonical"> tag
@@ -1188,7 +1189,7 @@ class Article implements Page {
                } elseif ( $this->getContext()->getRequest()->getInt( 'unhide' ) != 1 ) {
                        # Give explanation and add a link to view the revision...
                        $oldid = intval( $this->getOldID() );
-                       $link = $this->getTitle()->getFullUrl( "oldid={$oldid}&unhide=1" );
+                       $link = $this->getTitle()->getFullURL( "oldid={$oldid}&unhide=1" );
                        $msg = $this->mRevision->isDeleted( Revision::DELETED_RESTRICTED ) ?
                                'rev-suppressed-text-unhide' : 'rev-deleted-text-unhide';
                        $outputPage->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
index 42cea7a..9ef3165 100644 (file)
@@ -243,6 +243,7 @@ $wgAutoloadLocalClasses = array(
        'SpecialRedirectToSpecial' => 'includes/SpecialPage.php',
        'SquidPurgeClient' => 'includes/SquidPurgeClient.php',
        'SquidPurgeClientPool' => 'includes/SquidPurgeClient.php',
+       'StatCounter' => 'includes/StatCounter.php',
        'Status' => 'includes/Status.php',
        'StreamFile' => 'includes/StreamFile.php',
        'StringUtils' => 'includes/StringUtils.php',
@@ -680,8 +681,6 @@ $wgAutoloadLocalClasses = array(
 
        # includes/json
        'FormatJson' => 'includes/json/FormatJson.php',
-       'Services_JSON' => 'includes/json/Services_JSON.php',
-       'Services_JSON_Error' => 'includes/json/Services_JSON.php',
 
        # includes/libs
        'CSSJanus' => 'includes/libs/CSSJanus.php',
@@ -701,7 +700,7 @@ $wgAutoloadLocalClasses = array(
 
        # includes/logging
        'DatabaseLogEntry' => 'includes/logging/LogEntry.php',
-       'DeleteLogFormatter' => 'includes/logging/LogFormatter.php',
+       'DeleteLogFormatter' => 'includes/logging/DeleteLogFormatter.php',
        'LegacyLogFormatter' => 'includes/logging/LogFormatter.php',
        'LogEntry' => 'includes/logging/LogEntry.php',
        'LogEventsList' => 'includes/logging/LogEventsList.php',
@@ -710,12 +709,12 @@ $wgAutoloadLocalClasses = array(
        'LogPage' => 'includes/logging/LogPage.php',
        'LogPager' => 'includes/logging/LogPager.php',
        'ManualLogEntry' => 'includes/logging/LogEntry.php',
-       'MoveLogFormatter' => 'includes/logging/LogFormatter.php',
-       'NewUsersLogFormatter' => 'includes/logging/LogFormatter.php',
+       'MoveLogFormatter' => 'includes/logging/MoveLogFormatter.php',
+       'NewUsersLogFormatter' => 'includes/logging/NewUsersLogFormatter.php',
        'PatrolLog' => 'includes/logging/PatrolLog.php',
-       'PatrolLogFormatter' => 'includes/logging/LogFormatter.php',
+       'PatrolLogFormatter' => 'includes/logging/PatrolLogFormatter.php',
        'RCDatabaseLogEntry' => 'includes/logging/LogEntry.php',
-       'RightsLogFormatter' => 'includes/logging/LogFormatter.php',
+       'RightsLogFormatter' => 'includes/logging/RightsLogFormatter.php',
 
        # includes/media
        'BitmapHandler' => 'includes/media/Bitmap.php',
@@ -891,7 +890,6 @@ $wgAutoloadLocalClasses = array(
        'SiteStore' => 'includes/site/SiteStore.php',
 
        # includes/specials
-       'ActiveUsersPager' => 'includes/specials/SpecialActiveusers.php',
        'AllmessagesTablePager' => 'includes/specials/SpecialAllmessages.php',
        'AncientPagesPage' => 'includes/specials/SpecialAncientpages.php',
        'BlockListPager' => 'includes/specials/SpecialBlockList.php',
@@ -936,7 +934,6 @@ $wgAutoloadLocalClasses = array(
        'ProtectedTitlesPager' => 'includes/specials/SpecialProtectedtitles.php',
        'RandomPage' => 'includes/specials/SpecialRandompage.php',
        'ShortPagesPage' => 'includes/specials/SpecialShortpages.php',
-       'SpecialActiveUsers' => 'includes/specials/SpecialActiveusers.php',
        'SpecialAllmessages' => 'includes/specials/SpecialAllmessages.php',
        'SpecialAllpages' => 'includes/specials/SpecialAllpages.php',
        'SpecialBlankpage' => 'includes/specials/SpecialBlankpage.php',
index 71b55f8..e16397b 100644 (file)
@@ -411,7 +411,7 @@ class CdbWriter_PHP extends CdbWriter {
                // Calculate the number of items that will be in each hashtable
                $counts = array_fill( 0, 256, 0 );
                foreach ( $this->hplist as $item ) {
-                       ++ $counts[ 255 & $item['h'] ];
+                       ++ $counts[255 & $item['h']];
                }
 
                // Fill in $starts with the *end* indexes
index 476de5b..8b8b94e 100644 (file)
@@ -146,7 +146,7 @@ class ChangesFeed {
                        $feedLastmodUnix = wfTimestamp( TS_UNIX, $feedLastmod );
                        $lastmodUnix = wfTimestamp( TS_UNIX, $lastmod );
 
-                       if( $feedAge < $wgFeedCacheTimeout || $feedLastmodUnix > $lastmodUnix) {
+                       if( $feedAge < $wgFeedCacheTimeout || $feedLastmodUnix > $lastmodUnix ) {
                                wfDebug( "RC: loading feed from cache ($key; $feedLastmod; $lastmod)...\n" );
                                if ( $feedLastmodUnix < $lastmodUnix ) {
                                        $wgOut->setLastModified( $feedLastmod ); // bug 21916
@@ -187,7 +187,7 @@ class ChangesFeed {
 
                foreach( $sorted as $obj ) {
                        $title = Title::makeTitle( $obj->rc_namespace, $obj->rc_title );
-                       $talkpage = MWNamespace::canTalk( $obj->rc_namespace ) ? $title->getTalkPage()->getFullUrl() : '';
+                       $talkpage = MWNamespace::canTalk( $obj->rc_namespace ) ? $title->getTalkPage()->getFullURL() : '';
                        // Skip items with deleted content (avoids partially complete/inconsistent output)
                        if( $obj->rc_deleted ) continue;
 
index 8461001..0c4d69e 100644 (file)
@@ -936,7 +936,7 @@ class EnhancedChangesList extends ChangesList {
                krsort( $userlinks );
                asort( $userlinks );
                $users = array();
-               foreach( $userlinks as $userlink => $count) {
+               foreach( $userlinks as $userlink => $count ) {
                        $text = $userlink;
                        $text .= $this->getLanguage()->getDirMark();
                        if( $count > 1 ) {
index 3f0fa7b..107e8f9 100644 (file)
@@ -364,8 +364,8 @@ class IcuCollation extends Collation {
                        // Append additional characters
                        $letters = array_merge( $letters, self::$tailoringFirstLetters[$this->locale] );
                        // Remove unnecessary ones, if any
-                       if ( isset( self::$tailoringFirstLetters[ '-' . $this->locale ] ) ) {
-                               $letters = array_diff( $letters, self::$tailoringFirstLetters[ '-' . $this->locale ] );
+                       if ( isset( self::$tailoringFirstLetters['-' . $this->locale] ) ) {
+                               $letters = array_diff( $letters, self::$tailoringFirstLetters['-' . $this->locale] );
                        }
                } else {
                        $letters = wfGetPrecompiledData( "first-letters-{$this->locale}.ser" );
index 26fe197..7e88fc3 100644 (file)
@@ -63,7 +63,7 @@ $wgConf = new SiteConfiguration;
  * MediaWiki version number
  * @since 1.2
  */
-$wgVersion = '1.21alpha';
+$wgVersion = '1.22alpha';
 
 /**
  * Name of the site. It must be changed in LocalSettings.php
@@ -2841,7 +2841,7 @@ $wgVectorUseSimpleSearch = true;
  *  - true = use an icon watch/unwatch button
  *  - false = use watch/unwatch text link
  */
-$wgVectorUseIconWatch = false;
+$wgVectorUseIconWatch = true;
 
 /**
  * Display user edit counts in various prominent places.
index c4a8633..28847db 100644 (file)
@@ -197,8 +197,8 @@ define( 'EDIT_AUTOSUMMARY', 64 );
 define( 'LIST_COMMA', 0 );
 define( 'LIST_AND', 1 );
 define( 'LIST_SET', 2 );
-define( 'LIST_NAMES', 3);
-define( 'LIST_OR', 4);
+define( 'LIST_NAMES', 3 );
+define( 'LIST_OR', 4 );
 /**@}*/
 
 /**
index 8b2dbb5..f88dc90 100644 (file)
@@ -100,7 +100,7 @@ class EditPage {
 
        /**
         * Status: user tried to create this page, but is not allowed to do that
-        * ( Title->usercan('create') == false )
+        * ( Title->userCan('create') == false )
         */
        const AS_NO_CREATE_PERMISSION = 223;
 
@@ -487,7 +487,7 @@ class EditPage {
                        // The edit page was reached via a red link.
                        // Redirect to the article page and let them click the edit tab if
                        // they really want a permission error.
-                       $wgOut->redirect( $this->mTitle->getFullUrl() );
+                       $wgOut->redirect( $this->mTitle->getFullURL() );
                        return;
                }
 
@@ -540,7 +540,7 @@ class EditPage {
                        // The edit page was reached via a red link.
                        // Redirect to the article page and let them click the edit tab if
                        // they really want a permission error.
-                       $wgOut->redirect( $this->mTitle->getFullUrl() );
+                       $wgOut->redirect( $this->mTitle->getFullURL() );
                } else {
                        $wgOut->readOnlyPage( $source, $protected, $reasons, $action );
                }
index 0bd7a2a..dc34320 100644 (file)
@@ -75,11 +75,11 @@ class MWException extends Exception {
                        return null; // Just silently ignore
                }
 
-               if ( !array_key_exists( $name, $wgExceptionHooks ) || !is_array( $wgExceptionHooks[ $name ] ) ) {
+               if ( !array_key_exists( $name, $wgExceptionHooks ) || !is_array( $wgExceptionHooks[$name] ) ) {
                        return null;
                }
 
-               $hooks = $wgExceptionHooks[ $name ];
+               $hooks = $wgExceptionHooks[$name];
                $callargs = array_merge( array( $this ), $args );
 
                foreach ( $hooks as $hook ) {
@@ -130,8 +130,7 @@ class MWException extends Exception {
                                '</p><p>Backtrace:</p><p>' . nl2br( htmlspecialchars( $this->getTraceAsString() ) ) .
                                "</p>\n";
                } else {
-                       return
-                               "<div class=\"errorbox\">" .
+                       return "<div class=\"errorbox\">" .
                                '[' . $this->getLogId() . '] ' .
                                gmdate( 'Y-m-d H:i:s' ) .
                                ": Fatal exception of type " . get_class( $this ) . "</div>\n" .
@@ -329,11 +328,17 @@ class ErrorPageError extends MWException {
                $this->msg = $msg;
                $this->params = $params;
 
+               // Bug 44111: Messages in the log files should be in English and not
+               // customized by the local wiki. So get the default English version for
+               // passing to the parent constructor. Our overridden report() below
+               // makes sure that the page shown to the user is not forced to English.
                if( $msg instanceof Message ) {
-                       parent::__construct( $msg );
+                       $enMsg = clone( $msg );
                } else {
-                       parent::__construct( wfMessage( $msg )->text() );
+                       $enMsg = wfMessage( $msg, $params );
                }
+               $enMsg->inLanguage( 'en' )->useDatabase( false );
+               parent::__construct( $enMsg->text() );
        }
 
        function report() {
index d8cc024..085662a 100644 (file)
@@ -541,7 +541,7 @@ class XmlDumpWriter {
         * @return string
         */
        function homelink() {
-               return Xml::element( 'base', array(), Title::newMainPage()->getCanonicalUrl() );
+               return Xml::element( 'base', array(), Title::newMainPage()->getCanonicalURL() );
        }
 
        /**
@@ -563,8 +563,9 @@ class XmlDumpWriter {
                foreach ( $wgContLang->getFormattedNamespaces() as $ns => $title ) {
                        $spaces .= '      ' .
                                Xml::element( 'namespace',
-                                       array(  'key' => $ns,
-                                                       'case' => MWNamespace::isCapitalized( $ns ) ? 'first-letter' : 'case-sensitive',
+                                       array(
+                                               'key' => $ns,
+                                               'case' => MWNamespace::isCapitalized( $ns ) ? 'first-letter' : 'case-sensitive',
                                        ), $title ) . "\n";
                }
                $spaces .= "    </namespaces>";
@@ -837,7 +838,7 @@ class XmlDumpWriter {
                        "      " . $comment . "\n" .
                        "      " . Xml::element( 'filename', null, $file->getName() ) . "\n" .
                        $archiveName .
-                       "      " . Xml::element( 'src', null, $file->getCanonicalUrl() ) . "\n" .
+                       "      " . Xml::element( 'src', null, $file->getCanonicalURL() ) . "\n" .
                        "      " . Xml::element( 'size', null, $file->getSize() ) . "\n" .
                        "      " . Xml::element( 'sha1base36', null, $file->getSha1() ) . "\n" .
                        "      " . Xml::element( 'rel', null, $file->getRel() ) . "\n" .
index adc1f78..57d8c0b 100644 (file)
@@ -223,7 +223,7 @@ class FeedUtils {
                $queryParameters = ($oldid == null)
                        ? "diff={$newid}"
                        : "diff={$newid}&oldid={$oldid}";
-               $diffUrl = $title->getFullUrl( $queryParameters );
+               $diffUrl = $title->getFullURL( $queryParameters );
 
                $diffLink = Html::element( 'a', array( 'href' => $diffUrl ),
                        wfMessage( 'showdiff' )->inContentLanguage()->text() );
index 28403cc..9ce2f76 100644 (file)
@@ -379,7 +379,7 @@ class FileDeleteForm {
                        $q['oldimage'] = $this->oldimage;
                }
 
-               return $this->title->getLocalUrl( $q );
+               return $this->title->getLocalURL( $q );
        }
 
        /**
index e1e1234..1a4b985 100644 (file)
@@ -1177,6 +1177,8 @@ function wfLogProfilingData() {
        global $wgRequestTime, $wgDebugLogFile, $wgDebugRawPage, $wgRequest;
        global $wgProfileLimit, $wgUser;
 
+       StatCounter::singleton()->flush();
+
        $profiler = Profiler::instance();
 
        # Profiling must actually be enabled...
@@ -1240,51 +1242,7 @@ function wfLogProfilingData() {
  * @return void
  */
 function wfIncrStats( $key, $count = 1 ) {
-       global $wgStatsMethod;
-
-       $count = intval( $count );
-       if ( $count == 0 ) {
-               return;
-       }
-
-       if( $wgStatsMethod == 'udp' ) {
-               global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgAggregateStatsID;
-               static $socket;
-
-               $id = $wgAggregateStatsID !== false ? $wgAggregateStatsID : wfWikiID();
-
-               if ( !$socket ) {
-                       $socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
-                       $statline = "stats/{$id} - 1 1 1 1 1 -total\n";
-                       socket_sendto(
-                               $socket,
-                               $statline,
-                               strlen( $statline ),
-                               0,
-                               $wgUDPProfilerHost,
-                               $wgUDPProfilerPort
-                       );
-               }
-               $statline = "stats/{$id} - {$count} 1 1 1 1 {$key}\n";
-               wfSuppressWarnings();
-               socket_sendto(
-                       $socket,
-                       $statline,
-                       strlen( $statline ),
-                       0,
-                       $wgUDPProfilerHost,
-                       $wgUDPProfilerPort
-               );
-               wfRestoreWarnings();
-       } elseif( $wgStatsMethod == 'cache' ) {
-               global $wgMemc;
-               $key = wfMemcKey( 'stats', $key );
-               if ( is_null( $wgMemc->incr( $key, $count ) ) ) {
-                       $wgMemc->add( $key, $count );
-               }
-       } else {
-               // Disabled
-       }
+       StatCounter::singleton()->incr( $key, $count );
 }
 
 /**
@@ -3338,7 +3296,7 @@ function wfCheckEntropy() {
  */
 function wfFixSessionID() {
        // If the cookie or session id is already set we already have a session and should abort
-       if ( isset( $_COOKIE[ session_name() ] ) || session_id() ) {
+       if ( isset( $_COOKIE[session_name()] ) || session_id() ) {
                return;
        }
 
@@ -3940,7 +3898,7 @@ function wfIsBadImage( $name, $contextTitle = false, $blacklist = null ) {
        # Handle redirects
        $redirectTitle = RepoGroup::singleton()->checkRedirect( Title::makeTitle( NS_FILE, $name ) );
        if( $redirectTitle ) {
-               $name = $redirectTitle->getDbKey();
+               $name = $redirectTitle->getDBkey();
        }
 
        # Run the extension hook
index 6863973..4a527bb 100644 (file)
@@ -256,7 +256,7 @@ class HTMLForm extends ContextSource {
         */
        public function setDisplayFormat( $format ) {
                if ( !in_array( $format, $this->availableDisplayFormats ) ) {
-                       throw new MWException ( 'Display format must be one of ' . print_r( $this->availableDisplayFormats, true ) );
+                       throw new MWException( 'Display format must be one of ' . print_r( $this->availableDisplayFormats, true ) );
                }
                $this->displayFormat = $format;
                return $this;
index 8cc7ace..e3ffb19 100644 (file)
@@ -190,7 +190,7 @@ class Hooks {
                                        }
                                } elseif ( is_string( $hook[0] ) ) {
                                        $func = $hook[0];
-                                       if ( count( $hook ) > 1) {
+                                       if ( count( $hook ) > 1 ) {
                                                $data = $hook[1];
                                                $have_data = true;
                                        }
index 9e280db..4730a97 100644 (file)
@@ -563,8 +563,8 @@ class MWHttpRequest {
                        $this->parseHeader();
                }
 
-               if ( isset( $this->respHeaders[strtolower ( $header ) ] ) ) {
-                       $v = $this->respHeaders[strtolower ( $header ) ];
+               if ( isset( $this->respHeaders[strtolower( $header )] ) ) {
+                       $v = $this->respHeaders[strtolower( $header )];
                        return $v[count( $v ) - 1];
                }
 
@@ -646,17 +646,17 @@ class MWHttpRequest {
                $headers = $this->getResponseHeaders();
 
                //return full url (fix for incorrect but handled relative location)
-               if ( isset( $headers[ 'location' ] ) ) {
-                       $locations = $headers[ 'location' ];
+               if ( isset( $headers['location'] ) ) {
+                       $locations = $headers['location'];
                        $domain = '';
                        $foundRelativeURI = false;
                        $countLocations = count( $locations );
 
                        for ( $i = $countLocations - 1; $i >= 0; $i-- ) {
-                               $url = parse_url( $locations[ $i ] );
+                               $url = parse_url( $locations[$i] );
 
                                if ( isset( $url['host'] ) ) {
-                                       $domain = $url[ 'scheme' ] . '://' . $url[ 'host' ];
+                                       $domain = $url['scheme'] . '://' . $url['host'];
                                        break; //found correct URI (with host)
                                } else {
                                        $foundRelativeURI = true;
@@ -665,15 +665,15 @@ class MWHttpRequest {
 
                        if ( $foundRelativeURI ) {
                                if ( $domain ) {
-                                       return $domain . $locations[ $countLocations - 1 ];
+                                       return $domain . $locations[$countLocations - 1];
                                } else {
                                        $url = parse_url( $this->url );
-                                       if ( isset($url[ 'host' ]) ) {
-                                               return $url[ 'scheme' ] . '://' . $url[ 'host' ] . $locations[ $countLocations - 1 ];
+                                       if ( isset( $url['host'] ) ) {
+                                               return $url['scheme'] . '://' . $url['host'] . $locations[$countLocations - 1];
                                        }
                                }
                        } else {
-                               return $locations[ $countLocations - 1 ];
+                               return $locations[$countLocations - 1];
                        }
                }
 
@@ -938,8 +938,7 @@ class PhpHttpRequest extends MWHttpRequest {
 
                // If everything went OK, or we received some error code
                // get the response body content.
-               if ( $this->status->isOK()
-                               || (int)$this->respStatus >= 300) {
+               if ( $this->status->isOK() || (int)$this->respStatus >= 300 ) {
                        while ( !feof( $fh ) ) {
                                $buf = fread( $fh, 8192 );
 
index b3a485a..b5b69df 100644 (file)
@@ -719,7 +719,7 @@ EOT
                $limit = 100;
 
                $out = $this->getContext()->getOutput();
-               $res = $this->queryImageLinks( $this->getTitle()->getDbKey(), $limit + 1);
+               $res = $this->queryImageLinks( $this->getTitle()->getDBkey(), $limit + 1 );
                $rows = array();
                $redirects = array();
                foreach ( $res as $row ) {
index fee636f..04d99e1 100644 (file)
@@ -47,7 +47,7 @@ class WikiImporter {
 
                stream_wrapper_register( 'uploadsource', 'UploadSourceAdapter' );
                $id = UploadSourceAdapter::registerSource( $source );
-               if (defined( 'LIBXML_PARSEHUGE' ) ) {
+               if ( defined( 'LIBXML_PARSEHUGE' ) ) {
                        $this->reader->open( "uploadsource://$id", null, LIBXML_PARSEHUGE );
                } else {
                        $this->reader->open( "uploadsource://$id" );
@@ -1714,7 +1714,7 @@ class ImportStreamSource {
                        if ( $history ) $params['history'] = 1;
                        if ( $templates ) $params['templates'] = 1;
                        if ( $pageLinkDepth ) $params['pagelink-depth'] = $pageLinkDepth;
-                       $url = $link->getFullUrl( $params );
+                       $url = $link->getFullURL( $params );
                        # For interwikis, use POST to avoid redirects.
                        return ImportStreamSource::newFromURL( $url, "POST" );
                }
index 972adfc..e4222e3 100644 (file)
@@ -612,7 +612,7 @@ class Linker {
                                $hp['width'] = $file->getWidth( $page );
                        }
 
-                       if ( isset( $fp['thumbnail'] ) || isset( $fp['framed'] ) || isset( $fp['frameless'] ) || !$hp['width'] ) {
+                       if ( isset( $fp['thumbnail'] ) || isset( $fp['manualthumb'] ) || isset( $fp['framed'] ) || isset( $fp['frameless'] ) || !$hp['width'] ) {
                                global $wgThumbLimits, $wgThumbUpright;
                                if ( $widthOption === null || !isset( $wgThumbLimits[$widthOption] ) ) {
                                        $widthOption = User::getDefaultOption( 'thumbsize' );
@@ -797,6 +797,7 @@ class Linker {
                }
                $thumb = false;
                $noscale = false;
+               $manualthumb = false;
 
                if ( !$exists ) {
                        $outerWidth = $hp['width'] + 2;
@@ -808,6 +809,7 @@ class Linker {
                                        $manual_img = wfFindFile( $manual_title );
                                        if ( $manual_img ) {
                                                $thumb = $manual_img->getUnscaledThumb( $hp );
+                                               $manualthumb = true;
                                        } else {
                                                $exists = false;
                                        }
@@ -840,6 +842,12 @@ class Linker {
                if ( $page ) {
                        $url = wfAppendQuery( $url, 'page=' . urlencode( $page ) );
                }
+               if ( $manualthumb &&
+                    !isset( $fp['link-title'] ) &&
+                    !isset( $fp['link-url'] ) &&
+                    !isset( $fp['no-link'] ) ) {
+                       $fp['link-url'] = $url;
+               }
 
                $s = "<div class=\"thumb t{$fp['align']}\"><div class=\"thumbinner\" style=\"width:{$outerWidth}px;\">";
                if ( !$exists ) {
@@ -849,7 +857,7 @@ class Linker {
                        $s .= wfMessage( 'thumbnail_error', '' )->escaped();
                        $zoomIcon = '';
                } else {
-                       if ( !$noscale ) {
+                       if ( !$noscale && !$manualthumb ) {
                                self::processResponsiveImages( $file, $thumb, $hp );
                        }
                        $params = array(
@@ -961,7 +969,7 @@ class Linker {
         */
        protected static function getUploadUrl( $destFile, $query = '' ) {
                global $wgUploadMissingFileUrl, $wgUploadNavigationUrl;
-               $q = 'wpDestFile=' . $destFile->getPartialUrl();
+               $q = 'wpDestFile=' . $destFile->getPartialURL();
                if ( $query != '' )
                        $q .= '&' . $query;
 
@@ -971,7 +979,7 @@ class Linker {
                        return wfAppendQuery( $wgUploadNavigationUrl, $q );
                } else {
                        $upload = SpecialPage::getTitleFor( 'Upload' );
-                       return $upload->getLocalUrl( $q );
+                       return $upload->getLocalURL( $q );
                }
        }
 
@@ -1527,7 +1535,7 @@ class Linker {
                                        $nodotdot = substr( $nodotdot, 3 );
                                }
                                if ( $dotdotcount > 0 ) {
-                                       $exploded = explode( '/', $contextTitle->GetPrefixedText() );
+                                       $exploded = explode( '/', $contextTitle->getPrefixedText() );
                                        if ( count( $exploded ) > $dotdotcount ) { # not allowed to go below top level page
                                                $ret = implode( '/', array_slice( $exploded, 0, -$dotdotcount ) );
                                                # / at the end means don't show full path
index d99ae22..f79b423 100644 (file)
@@ -847,7 +847,7 @@ class LinksDeletionUpdate extends SqlDataUpdate {
                $res = $this->mDb->select( 'categorylinks', 'cl_to', array( 'cl_from' => $id ), __METHOD__ );
 
                foreach ( $res as $row ) {
-                       $cats [] = $row->cl_to;
+                       $cats[] = $row->cl_to;
                }
 
                $this->mPage->updateCategoryCounts( array(), $cats );
index 36fcc30..240a6d3 100644 (file)
@@ -32,7 +32,7 @@ class MWFunction {
                        if ( strpos( $callback, '::' ) !== false ) {
                                // PHP 5.1 cannot use call_user_func( 'Class::Method' )
                                // It can only handle only call_user_func( array( 'Class', 'Method' ) )
-                               $callback = explode( '::', $callback, 2);
+                               $callback = explode( '::', $callback, 2 );
                        }
                }
 
index 0b8014a..96d00ae 100644 (file)
@@ -107,7 +107,7 @@ abstract class RdfMetaData {
         * @param $title Title
         */
        protected function page( $name, $title ) {
-               $this->url( $name, $title->getFullUrl() );
+               $this->url( $name, $title->getFullURL() );
        }
 
        protected function url( $name, $url ) {
index edabd54..7592530 100644 (file)
@@ -432,7 +432,7 @@ class MimeMagic {
                $ext = explode( ' ', $ext );
 
                $extension = strtolower( $extension );
-               return  in_array( $extension, $ext );
+               return in_array( $extension, $ext );
        }
 
        /**
@@ -689,11 +689,11 @@ class MimeMagic {
                $script_type = null;
 
                # detect by shebang
-               if ( substr( $head, 0, 2) == "#!" ) {
+               if ( substr( $head, 0, 2 ) == "#!" ) {
                        $script_type = "ASCII";
-               } elseif ( substr( $head, 0, 5) == "\xef\xbb\xbf#!" ) {
+               } elseif ( substr( $head, 0, 5 ) == "\xef\xbb\xbf#!" ) {
                        $script_type = "UTF-8";
-               } elseif ( substr( $head, 0, 7) == "\xfe\xff\x00#\x00!" ) {
+               } elseif ( substr( $head, 0, 7 ) == "\xfe\xff\x00#\x00!" ) {
                        $script_type = "UTF-16BE";
                } elseif ( substr( $head, 0, 7 ) == "\xff\xfe#\x00!" ) {
                        $script_type = "UTF-16LE";
@@ -804,7 +804,7 @@ class MimeMagic {
                                 * These mime's are stored in the database, where we don't really want
                                 * x-opc+zip, because we use it only for internal purposes
                                 */
-                               if ( $this->isMatchingExtension( $ext, $mime) ) {
+                               if ( $this->isMatchingExtension( $ext, $mime ) ) {
                                        /* A known file extension for an OPC file,
                                         * find the proper mime type for that file extension
                                         */
@@ -817,10 +817,10 @@ class MimeMagic {
                } elseif ( substr( $header, 0, 8 ) == "\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1" &&
                                ($headerpos = strpos( $tail, "PK\x03\x04" ) ) !== false &&
                                preg_match( $openxmlRegex, substr( $tail, $headerpos + 30 ) ) ) {
-                       if ( substr( $header, 512, 4) == "\xEC\xA5\xC1\x00" ) {
+                       if ( substr( $header, 512, 4 ) == "\xEC\xA5\xC1\x00" ) {
                                $mime = "application/msword";
                        }
-                       switch( substr( $header, 512, 6) ) {
+                       switch( substr( $header, 512, 6 ) ) {
                                case "\xEC\xA5\xC1\x00\x0E\x00":
                                case "\xEC\xA5\xC1\x00\x1C\x00":
                                case "\xEC\xA5\xC1\x00\x43\x00":
index fccfbed..8001b41 100644 (file)
@@ -387,9 +387,9 @@ class MWNamespace {
                if ( in_array( $index, self::$alwaysCapitalizedNamespaces ) ) {
                        return true;
                }
-               if ( isset( $wgCapitalLinkOverrides[ $index ] ) ) {
+               if ( isset( $wgCapitalLinkOverrides[$index] ) ) {
                        // $wgCapitalLinkOverrides is explicitly set
-                       return $wgCapitalLinkOverrides[ $index ];
+                       return $wgCapitalLinkOverrides[$index];
                }
                // Default to the global setting
                return $wgCapitalLinks;
index 1e0c396..905b005 100644 (file)
@@ -1401,7 +1401,7 @@ class OutputPage extends ContextSource {
         * @param $timestamp Mixed: string, or null
         * @return Mixed: previous value
         */
-       public function setRevisionTimestamp( $timestamp) {
+       public function setRevisionTimestamp( $timestamp ) {
                return wfSetVar( $this->mRevisionTimestamp, $timestamp );
        }
 
index 7749bf1..e8ecf6d 100644 (file)
@@ -38,7 +38,7 @@
  * version are hardcoded here
  */
 function wfPHPVersionError( $type ) {
-       $mwVersion = '1.21';
+       $mwVersion = '1.22';
        $minimumVersionPHP = '5.3.2';
 
        $phpVersion = phpversion();
index d7b8840..7ebefec 100644 (file)
@@ -191,7 +191,7 @@ class ProtectionForm {
                if( $wgRequest->wasPosted() ) {
                        if( $this->save() ) {
                                $q = $this->mArticle->isRedirect() ? 'redirect=no' : '';
-                               $wgOut->redirect( $this->mTitle->getFullUrl( $q ) );
+                               $wgOut->redirect( $this->mTitle->getFullURL( $q ) );
                        }
                } else {
                        $this->show();
@@ -359,7 +359,7 @@ class ProtectionForm {
                if( !$this->disabled ) {
                        $wgOut->addModules( 'mediawiki.legacy.protect' );
                        $out .= Xml::openElement( 'form', array( 'method' => 'post',
-                               'action' => $this->mTitle->getLocalUrl( 'action=protect' ),
+                               'action' => $this->mTitle->getLocalURL( 'action=protect' ),
                                'id' => 'mw-Protect-Form', 'onsubmit' => 'ProtectionForm.enableUnchainedInputs(true)' ) );
                }
 
index d7cf995..faad391 100644 (file)
@@ -284,7 +284,9 @@ class RecentChange {
        public function notifyRC2UDP() {
                global $wgRC2UDPAddress, $wgRC2UDPOmitBots;
                # Notify external application via UDP
-               if ( $wgRC2UDPAddress && ( !$this->mAttribs['rc_bot'] || !$wgRC2UDPOmitBots ) ) {
+               # Omit RC_EXTERNAL changes: bots and tools can get these edits from the feed of the external wiki
+               if ( $wgRC2UDPAddress && $this->mAttribs['rc_type'] != RC_EXTERNAL &&
+                       ( !$this->mAttribs['rc_bot'] || !$wgRC2UDPOmitBots ) ) {
                        self::sendToUDP( $this->getIRCLine() );
                }
        }
index 2b34984..18cd94e 100644 (file)
@@ -1340,8 +1340,8 @@ class Revision implements IDBAccessObject {
                        $defaultModel = ContentHandler::getDefaultModelFor( $title );
                        $defaultFormat = ContentHandler::getForModelID( $defaultModel )->getDefaultFormat();
 
-                       $row[ 'rev_content_model' ] = ( $model === $defaultModel ) ? null : $model;
-                       $row[ 'rev_content_format' ] = ( $format === $defaultFormat ) ? null : $format;
+                       $row['rev_content_model'] = ( $model === $defaultModel ) ? null : $model;
+                       $row['rev_content_format'] = ( $format === $defaultFormat ) ? null : $format;
                }
 
                $dbw->insert( 'revision', $row, __METHOD__ );
@@ -1517,8 +1517,8 @@ class Revision implements IDBAccessObject {
                        );
 
                        if ( $wgContentHandlerUseDB ) {
-                               $row[ 'content_model' ] = $current->rev_content_model;
-                               $row[ 'content_format' ] = $current->rev_content_format;
+                               $row['content_model'] = $current->rev_content_model;
+                               $row['content_format'] = $current->rev_content_format;
                        }
 
                        $revision = new Revision( $row );
index d87c540..666df96 100644 (file)
@@ -352,8 +352,7 @@ class RevisionItem extends RevisionItemBase {
                if ( $this->isDeleted() && !$this->canViewContent() ) {
                        return $this->context->msg( 'diff' )->escaped();
                } else {
-                       return
-                               Linker::link(
+                       return Linker::link(
                                        $this->list->title,
                                        $this->context->msg( 'diff' )->escaped(),
                                        array(),
index 2dff081..3acb740 100644 (file)
@@ -507,7 +507,7 @@ class Sanitizer {
                                                !in_array( 'table', $tagstack ) ) {
                                                        $badtag = true;
                                                } elseif ( in_array( $t, $tagstack ) &&
-                                               !isset( $htmlnest [$t ] ) ) {
+                                               !isset( $htmlnest[$t] ) ) {
                                                        $badtag = true;
                                                # Is it a self closed htmlpair ? (bug 5487)
                                                } elseif ( $brace == '/>' &&
@@ -555,12 +555,14 @@ class Sanitizer {
                                                continue;
                                        }
                                }
-                               $text .= '&lt;' . str_replace( '>', '&gt;', $x);
+                               $text .= '&lt;' . str_replace( '>', '&gt;', $x );
                        }
                        # Close off any remaining tags
-                       while ( is_array( $tagstack ) && ($t = array_pop( $tagstack )) ) {
+                       while ( is_array( $tagstack ) && ( $t = array_pop( $tagstack ) ) ) {
                                $text .= "</$t>\n";
-                               if ( $t == 'table' ) { $tagstack = array_pop( $tablestack ); }
+                               if ( $t == 'table' ) {
+                                       $tagstack = array_pop( $tablestack );
+                               }
                        }
                } else {
                        # this might be possible using tidy itself
@@ -585,7 +587,7 @@ class Sanitizer {
                                                continue;
                                        }
                                }
-                               $text .= '&lt;' . str_replace( '>', '&gt;', $x);
+                               $text .= '&lt;' . str_replace( '>', '&gt;', $x );
                        }
                }
                wfProfileOut( __METHOD__ );
@@ -723,7 +725,7 @@ class Sanitizer {
                        }
 
                        # Allow any attribute beginning with "data-", if in HTML5 mode
-                       if ( !($wgHtml5 && preg_match( '/^data-/i', $attribute )) && !isset( $whitelist[$attribute] ) ) {
+                       if ( !( $wgHtml5 && preg_match( '/^data-/i', $attribute ) ) && !isset( $whitelist[$attribute] ) ) {
                                continue;
                        }
 
@@ -1357,9 +1359,9 @@ class Sanitizer {
                if( $matches[1] != '' ) {
                        return Sanitizer::decodeEntity( $matches[1] );
                } elseif( $matches[2] != '' ) {
-                       return  Sanitizer::decodeChar( intval( $matches[2] ) );
+                       return Sanitizer::decodeChar( intval( $matches[2] ) );
                } elseif( $matches[3] != '' ) {
-                       return  Sanitizer::decodeChar( hexdec( $matches[3] ) );
+                       return Sanitizer::decodeChar( hexdec( $matches[3] ) );
                }
                # Last case should be an ampersand by itself
                return $matches[0];
@@ -1443,30 +1445,31 @@ class Sanitizer {
                if ( $wgAllowRdfaAttributes ) {
                        #RDFa attributes as specified in section 9 of http://www.w3.org/TR/2008/REC-rdfa-syntax-20081014
                        $common = array_merge( $common, array(
-                           'about', 'property', 'resource', 'datatype', 'typeof',
+                               'about', 'property', 'resource', 'datatype', 'typeof',
                        ) );
                }
 
                if ( $wgHtml5 && $wgAllowMicrodataAttributes ) {
                        # add HTML5 microdata tags as specified by http://www.whatwg.org/specs/web-apps/current-work/multipage/microdata.html#the-microdata-model
                        $common = array_merge( $common, array(
-                           'itemid', 'itemprop', 'itemref', 'itemscope', 'itemtype'
+                               'itemid', 'itemprop', 'itemref', 'itemscope', 'itemtype'
                        ) );
                }
 
                $block = array_merge( $common, array( 'align' ) );
                $tablealign = array( 'align', 'char', 'charoff', 'valign' );
-               $tablecell = array( 'abbr',
-                                   'axis',
-                                   'headers',
-                                   'scope',
-                                   'rowspan',
-                                   'colspan',
-                                   'nowrap', # deprecated
-                                   'width',  # deprecated
-                                   'height', # deprecated
-                                   'bgcolor' # deprecated
-                                   );
+               $tablecell = array(
+                       'abbr',
+                       'axis',
+                       'headers',
+                       'scope',
+                       'rowspan',
+                       'colspan',
+                       'nowrap', # deprecated
+                       'width', # deprecated
+                       'height', # deprecated
+                       'bgcolor', # deprecated
+               );
 
                # Numbers refer to sections in HTML 4.01 standard describing the element.
                # See: http://www.w3.org/TR/html4/
index 7715484..26c2df5 100644 (file)
@@ -67,7 +67,7 @@ if ( isset( $_GET['setupTestSuite'] ) ) {
        $testGlobalConfigs = array(); // an array containing all the global configs needed for this test
        $testResourceFiles = array(); // an array containing all the resource files needed for this test
        $callback = $wgSeleniumTestConfigs[$setupTestSuiteName];
-       call_user_func_array( $callback, array( &$testIncludes, &$testGlobalConfigs, &$testResourceFiles));
+       call_user_func_array( $callback, array( &$testIncludes, &$testGlobalConfigs, &$testResourceFiles ) );
 
        if ( isset( $testResourceFiles['images'] ) ) {
                $testImageZip = $testResourceFiles['images'];
@@ -112,7 +112,7 @@ if ( isset( $_COOKIE[$cookieName] ) ) {
        $testGlobalConfigs = array(); // an array containing all the global configs needed for this test
        $testResourceFiles = array(); // an array containing all the resource files needed for this test
        $callback = $wgSeleniumTestConfigs[$testSuiteName];
-       call_user_func_array( $callback, array( &$testIncludes, &$testGlobalConfigs, &$testResourceFiles));
+       call_user_func_array( $callback, array( &$testIncludes, &$testGlobalConfigs, &$testResourceFiles ) );
 
        if ( isset( $testResourceFiles['db'] ) ) {
                $testResourceName = getTestResourceNameFromTestSuiteName( $testSuiteName );
index e87b200..a602b79 100644 (file)
@@ -426,7 +426,7 @@ wfMemoryLimit();
  * that happens whenever you use a date function without the timezone being
  * explicitly set. Inspired by phpMyAdmin's treatment of the problem.
  */
-if ( is_null( $wgLocaltimezone) ) {
+if ( is_null( $wgLocaltimezone ) ) {
        wfSuppressWarnings();
        $wgLocaltimezone = date_default_timezone_get();
        wfRestoreWarnings();
index bbc14a1..2d250df 100644 (file)
@@ -228,7 +228,7 @@ class SiteConfiguration {
                                                        $retval = $thisSetting[$suffix];
                                                }
                                                break;
-                                       } elseif ( array_key_exists( "+$suffix", $thisSetting ) && is_array($thisSetting["+$suffix"]) ) {
+                                       } elseif ( array_key_exists( "+$suffix", $thisSetting ) && is_array( $thisSetting["+$suffix"] ) ) {
                                                if ( !isset( $retval ) ) {
                                                        $retval = array();
                                                }
index 0cc1086..a4cb9f4 100644 (file)
@@ -56,17 +56,19 @@ abstract class Skin extends ContextSource {
 
                        $skinDir = dir( $wgStyleDirectory );
 
-                       # while code from www.php.net
-                       while ( false !== ( $file = $skinDir->read() ) ) {
-                               // Skip non-PHP files, hidden files, and '.dep' includes
-                               $matches = array();
-
-                               if ( preg_match( '/^([^.]*)\.php$/', $file, $matches ) ) {
-                                       $aSkin = $matches[1];
-                                       $wgValidSkinNames[strtolower( $aSkin )] = $aSkin;
+                       if ( $skinDir !== false && $skinDir !== null ) {
+                               # while code from www.php.net
+                               while ( false !== ( $file = $skinDir->read() ) ) {
+                                       // Skip non-PHP files, hidden files, and '.dep' includes
+                                       $matches = array();
+
+                                       if ( preg_match( '/^([^.]*)\.php$/', $file, $matches ) ) {
+                                               $aSkin = $matches[1];
+                                               $wgValidSkinNames[strtolower( $aSkin )] = $aSkin;
+                                       }
                                }
+                               $skinDir->close();
                        }
-                       $skinDir->close();
                        $skinsInitialised = true;
                        wfProfileOut( __METHOD__ . '-init' );
                }
@@ -1252,7 +1254,7 @@ abstract class Skin extends ContextSource {
                                                }
 
                                                global $wgExternalLinkTarget;
-                                               if ( $wgExternalLinkTarget) {
+                                               if ( $wgExternalLinkTarget ) {
                                                        $extraAttribs['target'] = $wgExternalLinkTarget;
                                                }
                                        } else {
@@ -1557,6 +1559,7 @@ abstract class Skin extends ContextSource {
        function __call( $fname, $args ) {
                $realFunction = array( 'Linker', $fname );
                if ( is_callable( $realFunction ) ) {
+                       wfDeprecated( get_class( $this ) . '::' . $fname, '1.21' );
                        return call_user_func_array( $realFunction, $args );
                } else {
                        $className = get_class( $this );
index b9766a9..b17abc2 100644 (file)
@@ -531,7 +531,7 @@ class LegacyTemplate extends BaseTemplate {
                $s = array();
 
                if ( !$wgOut->isPrintable() ) {
-                       $printurl = htmlspecialchars( $this->getSkin()->getTitle()->getLocalUrl(
+                       $printurl = htmlspecialchars( $this->getSkin()->getTitle()->getLocalURL(
                                $wgRequest->appendQueryValue( 'printable', 'yes', true ) ) );
                        $s[] = "<a href=\"$printurl\" rel=\"alternate\">"
                                . wfMessage( 'printableversion' )->text() . '</a>';
index 59e1ccf..fee3058 100644 (file)
@@ -742,7 +742,7 @@ class SkinTemplate extends Skin {
                return array(
                        'class' => implode( ' ', $classes ),
                        'text' => $text,
-                       'href' => $title->getLocalUrl( $query ),
+                       'href' => $title->getLocalURL( $query ),
                        'primary' => true );
        }
 
@@ -1203,7 +1203,7 @@ class SkinTemplate extends Skin {
 
                if ( $out->isArticleRelated() ) {
                        $nav_urls['whatlinkshere'] = array(
-                               'href' => SpecialPage::getTitleFor( 'Whatlinkshere', $this->thispage )->getLocalUrl()
+                               'href' => SpecialPage::getTitleFor( 'Whatlinkshere', $this->thispage )->getLocalURL()
                        );
 
                        $nav_urls['info'] = array(
@@ -1213,7 +1213,7 @@ class SkinTemplate extends Skin {
 
                        if ( $this->getTitle()->getArticleID() ) {
                                $nav_urls['recentchangeslinked'] = array(
-                                       'href' => SpecialPage::getTitleFor( 'Recentchangeslinked', $this->thispage )->getLocalUrl()
+                                       'href' => SpecialPage::getTitleFor( 'Recentchangeslinked', $this->thispage )->getLocalURL()
                                );
                        }
                }
@@ -1322,8 +1322,10 @@ abstract class QuickTemplate {
 
        /**
         * @private
+        * @deprecated since 1.21; use Xml::encodeJsVar() or Xml::encodeJsCall() instead
         */
        function jstext( $str ) {
+               wfDeprecated( __METHOD__, '1.21' );
                echo Xml::escapeJsString( $this->data[$str] );
        }
 
index c32738f..46d4304 100644 (file)
@@ -1090,7 +1090,7 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
                $query = $this->getRedirectQuery();
                // Redirect to a page title with possible query parameters
                if ( $redirect instanceof Title ) {
-                       $url = $redirect->getFullUrl( $query );
+                       $url = $redirect->getFullURL( $query );
                        $this->getOutput()->redirect( $url );
                        return $redirect;
                // Redirect to index.php with query parameters
@@ -1100,7 +1100,7 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
                        $this->getOutput()->redirect( $url );
                        return $redirect;
                } else {
-                       $class = __CLASS__;
+                       $class = get_class( $this );
                        throw new MWException( "RedirectSpecialPage $class doesn't redirect!" );
                }
        }
index 7368ab7..a53b901 100644 (file)
@@ -99,7 +99,6 @@ class SpecialPageFactory {
                'Listusers'                 => 'SpecialListUsers',
                'Listadmins'                => 'SpecialListAdmins',
                'Listbots'                  => 'SpecialListBots',
-               'Activeusers'               => 'SpecialActiveUsers',
                'Userrights'                => 'UserrightsPage',
                'EditWatchlist'             => 'SpecialEditWatchlist',
 
@@ -466,7 +465,7 @@ class SpecialPageFactory {
                                unset( $query['title'] );
                                $query = wfArrayToCgi( $query );
                                $title = $page->getTitle( $par );
-                               $url = $title->getFullUrl( $query );
+                               $url = $title->getFullURL( $query );
                                $context->getOutput()->redirect( $url );
                                wfProfileOut( __METHOD__ );
                                return $title;
diff --git a/includes/StatCounter.php b/includes/StatCounter.php
new file mode 100644 (file)
index 0000000..30e5042
--- /dev/null
@@ -0,0 +1,141 @@
+<?php
+/**
+ * @defgroup StatCounter StatCounter
+ *
+ * StatCounter is used to increment arbitrary keys for profiling reasons.
+ * The key/values are persisted in several possible ways (see $wgStatsMethod).
+ */
+
+/**
+ * Aggregator for wfIncrStats() that batches updates per request.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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
+ * @ingroup StatCounter
+ */
+
+/**
+ * Aggregator for wfIncrStats() that batches updates per request.
+ * This avoids spamming the collector many times for the same key.
+ *
+ * @ingroup StatCounter
+ */
+class StatCounter {
+       /** @var Array */
+       protected $deltas = array(); // (key => count)
+
+       protected function __construct() {}
+
+       public static function singleton() {
+               static $instance = null;
+               if ( !$instance ) {
+                       $instance = new self();
+               }
+               return $instance;
+       }
+
+       /**
+        * Increment a key by delta $count
+        *
+        * @param string $key
+        * @param integer $count
+        * @return void
+        */
+       public function incr( $key, $count = 1 ) {
+               if ( PHP_SAPI === 'cli' ) {
+                       $this->sendDelta( $key, $count );
+               } else {
+                       if ( !isset( $this->deltas[$key] ) ) {
+                               $this->deltas[$key] = 0;
+                       }
+                       $this->deltas[$key] += $count;
+               }
+       }
+
+       /**
+        * Flush all pending deltas to persistent storage
+        *
+        * @return void
+        */
+       public function flush() {
+               try {
+                       foreach ( $this->deltas as $key => $count ) {
+                               $this->sendDelta( $key, $count );
+                       }
+               } catch ( MWException $e ) {
+                       trigger_error( "Caught exception: {$e->getMessage()}");
+               }
+               $this->deltas = array();
+       }
+
+       /**
+        * @param string $key
+        * @param string $count
+        * @return void
+        */
+       protected function sendDelta( $key, $count ) {
+               global $wgStatsMethod;
+
+               $count = intval( $count );
+               if ( $count == 0 ) {
+                       return;
+               }
+
+               if ( $wgStatsMethod == 'udp' ) {
+                       global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgAggregateStatsID;
+                       static $socket;
+
+                       $id = $wgAggregateStatsID !== false ? $wgAggregateStatsID : wfWikiID();
+
+                       if ( !$socket ) {
+                               $socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
+                               $statline = "stats/{$id} - 1 1 1 1 1 -total\n";
+                               socket_sendto(
+                                       $socket,
+                                       $statline,
+                                       strlen( $statline ),
+                                       0,
+                                       $wgUDPProfilerHost,
+                                       $wgUDPProfilerPort
+                               );
+                       }
+                       $statline = "stats/{$id} - {$count} 1 1 1 1 {$key}\n";
+                       wfSuppressWarnings();
+                       socket_sendto(
+                               $socket,
+                               $statline,
+                               strlen( $statline ),
+                               0,
+                               $wgUDPProfilerHost,
+                               $wgUDPProfilerPort
+                       );
+                       wfRestoreWarnings();
+               } elseif ( $wgStatsMethod == 'cache' ) {
+                       global $wgMemc;
+                       $key = wfMemcKey( 'stats', $key );
+                       if ( is_null( $wgMemc->incr( $key, $count ) ) ) {
+                               $wgMemc->add( $key, $count );
+                       }
+               } else {
+                       // Disabled
+               }
+       }
+
+       function __destruct() {
+               $this->flush();
+       }
+}
index 1cf99a7..7dbfabf 100644 (file)
@@ -141,7 +141,7 @@ class MWTimestamp {
 
                try {
                        $final = new DateTime( $strtime, new DateTimeZone( 'GMT' ) );
-               } catch(Exception $e) {
+               } catch( Exception $e ) {
                        throw new TimestampException( __METHOD__ . ' Invalid timestamp format.' );
                }
 
index 974ea91..5ce742c 100644 (file)
@@ -993,7 +993,7 @@ class Title {
         */
        public function getSkinFromCssJsSubpage() {
                $subpage = explode( '/', $this->mTextform );
-               $subpage = $subpage[ count( $subpage ) - 1 ];
+               $subpage = $subpage[count( $subpage ) - 1];
                $lastdot = strrpos( $subpage, '.' );
                if ( $lastdot === false )
                        return $subpage; # Never happens: only called for names ending in '.css' or '.js'
@@ -4070,8 +4070,8 @@ class Title {
 
                if ( $res->numRows() > 0 ) {
                        foreach ( $res as $row ) {
-                               // $data[] = Title::newFromText($wgContLang->getNSText ( NS_CATEGORY ).':'.$row->cl_to);
-                               $data[$wgContLang->getNSText( NS_CATEGORY ) . ':' . $row->cl_to] = $this->getFullText();
+                               // $data[] = Title::newFromText($wgContLang->getNsText ( NS_CATEGORY ).':'.$row->cl_to);
+                               $data[$wgContLang->getNsText( NS_CATEGORY ) . ':' . $row->cl_to] = $this->getFullText();
                        }
                }
                return $data;
index 6b7348a..2b7c787 100644 (file)
@@ -710,7 +710,7 @@ class User {
                                return 'passwordtooshort';
                        } elseif ( $wgContLang->lc( $password ) == $wgContLang->lc( $this->mName ) ) {
                                return 'password-name-match';
-                       } elseif ( isset( $blockedLogins[ $this->getName() ] ) && $password == $blockedLogins[ $this->getName() ] ) {
+                       } elseif ( isset( $blockedLogins[$this->getName()] ) && $password == $blockedLogins[$this->getName()] ) {
                                return 'password-login-forbidden';
                        } else {
                                //it seems weird returning true here, but this is because of the
@@ -1521,7 +1521,7 @@ class User {
                // Set the user limit key
                if ( $userLimit !== false ) {
                        wfDebug( __METHOD__ . ": effective user limit: $userLimit\n" );
-                       $keys[ wfMemcKey( 'limiter', $action, 'user', $id ) ] = $userLimit;
+                       $keys[wfMemcKey( 'limiter', $action, 'user', $id )] = $userLimit;
                }
 
                $triggered = false;
@@ -3663,7 +3663,7 @@ class User {
        protected function getTokenUrl( $page, $token ) {
                // Hack to bypass localization of 'Special:'
                $title = Title::makeTitle( NS_MAIN, "Special:$page/$token" );
-               return $title->getCanonicalUrl();
+               return $title->getCanonicalURL();
        }
 
        /**
@@ -3674,8 +3674,12 @@ class User {
         * @return bool
         */
        public function confirmEmail() {
-               $this->setEmailAuthenticationTimestamp( wfTimestampNow() );
-               wfRunHooks( 'ConfirmEmailComplete', array( $this ) );
+               // Check if it's already confirmed, so we don't touch the database
+               // and fire the ConfirmEmailComplete hook on redundant confirmations.
+               if ( !$this->isEmailConfirmed() ) {
+                       $this->setEmailAuthenticationTimestamp( wfTimestampNow() );
+                       wfRunHooks( 'ConfirmEmailComplete', array( $this ) );
+               }
                return true;
        }
 
@@ -4018,7 +4022,7 @@ class User {
                }
 
                // Re-map numeric keys of AddToSelf/RemoveFromSelf to the 'user' key for backwards compatibility
-               if( empty( $wgGroupsAddToSelf['user']) || $wgGroupsAddToSelf['user'] !== true ) {
+               if( empty( $wgGroupsAddToSelf['user'] ) || $wgGroupsAddToSelf['user'] !== true ) {
                        foreach( $wgGroupsAddToSelf as $key => $value ) {
                                if( is_int( $key ) ) {
                                        $wgGroupsAddToSelf['user'][] = $value;
@@ -4026,7 +4030,7 @@ class User {
                        }
                }
 
-               if( empty( $wgGroupsRemoveFromSelf['user']) || $wgGroupsRemoveFromSelf['user'] !== true ) {
+               if( empty( $wgGroupsRemoveFromSelf['user'] ) || $wgGroupsRemoveFromSelf['user'] !== true ) {
                        foreach( $wgGroupsRemoveFromSelf as $key => $value ) {
                                if( is_int( $key ) ) {
                                        $wgGroupsRemoveFromSelf['user'][] = $value;
index 3b8f5c1..1f55ef3 100644 (file)
@@ -44,7 +44,7 @@ abstract class UserArray implements Iterator {
                $ids = array_map( 'intval', (array)$ids ); // paranoia
                if ( !$ids ) {
                        // Database::select() doesn't like empty arrays
-                       return new ArrayIterator(array());
+                       return new ArrayIterator( array() );
                }
                $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'user', '*', array( 'user_id' => $ids ),
index 6eb9917..c5dcfc3 100644 (file)
@@ -696,20 +696,20 @@ class EmailNotification {
 
                $keys = array();
                $postTransformKeys = array();
-               $pageTitleUrl = $this->title->getCanonicalUrl();
+               $pageTitleUrl = $this->title->getCanonicalURL();
                $pageTitle = $this->title->getPrefixedText();
 
                if ( $this->oldid ) {
                        // Always show a link to the diff which triggered the mail. See bug 32210.
                        $keys['$NEWPAGE'] = "\n\n" . wfMessage( 'enotif_lastdiff',
-                               $this->title->getCanonicalUrl( 'diff=next&oldid=' . $this->oldid ) )
+                               $this->title->getCanonicalURL( 'diff=next&oldid=' . $this->oldid ) )
                                ->inContentLanguage()->text();
 
                        if ( !$wgEnotifImpersonal ) {
                                // For personal mail, also show a link to the diff of all changes
                                // since last visited.
                                $keys['$NEWPAGE'] .= "\n\n" . wfMessage( 'enotif_lastvisited',
-                                       $this->title->getCanonicalUrl( 'diff=0&oldid=' . $this->oldid ) )
+                                       $this->title->getCanonicalURL( 'diff=0&oldid=' . $this->oldid ) )
                                        ->inContentLanguage()->text();
                        }
                        $keys['$OLDID'] = $this->oldid;
@@ -724,10 +724,10 @@ class EmailNotification {
                }
 
                $keys['$PAGETITLE'] = $this->title->getPrefixedText();
-               $keys['$PAGETITLE_URL'] = $this->title->getCanonicalUrl();
+               $keys['$PAGETITLE_URL'] = $this->title->getCanonicalURL();
                $keys['$PAGEMINOREDIT'] = $this->minorEdit ?
                        wfMessage( 'minoredit' )->inContentLanguage()->text() : '';
-               $keys['$UNWATCHURL'] = $this->title->getCanonicalUrl( 'action=unwatch' );
+               $keys['$UNWATCHURL'] = $this->title->getCanonicalURL( 'action=unwatch' );
 
                if ( $this->editor->isAnon() ) {
                        # real anon (user:xxx.xxx.xxx.xxx)
@@ -738,10 +738,10 @@ class EmailNotification {
                } else {
                        $keys['$PAGEEDITOR'] = $wgEnotifUseRealName ? $this->editor->getRealName() : $this->editor->getName();
                        $emailPage = SpecialPage::getSafeTitleFor( 'Emailuser', $this->editor->getName() );
-                       $keys['$PAGEEDITOR_EMAIL'] = $emailPage->getCanonicalUrl();
+                       $keys['$PAGEEDITOR_EMAIL'] = $emailPage->getCanonicalURL();
                }
 
-               $keys['$PAGEEDITOR_WIKI'] = $this->editor->getUserPage()->getCanonicalUrl();
+               $keys['$PAGEEDITOR_WIKI'] = $this->editor->getUserPage()->getCanonicalURL();
 
                # Replace this after transforming the message, bug 35019
                $postTransformKeys['$PAGESUMMARY'] = $this->summary == '' ? ' - ' : $this->summary;
index 98007ef..3bdf645 100644 (file)
@@ -224,7 +224,7 @@ class WebRequest {
                }
 
                $matches = self::getPathInfo( 'title' );
-               foreach( $matches as $key => $val) {
+               foreach( $matches as $key => $val ) {
                        $this->data[$key] = $_GET[$key] = $_REQUEST[$key] = $val;
                }
        }
@@ -603,7 +603,7 @@ class WebRequest {
         * @return Boolean
         */
        public function checkSessionCookie() {
-               return isset( $_COOKIE[ session_name() ] );
+               return isset( $_COOKIE[session_name()] );
        }
 
        /**
@@ -654,11 +654,13 @@ class WebRequest {
                if( $hash !== false ) {
                        $base = substr( $base, 0, $hash );
                }
+
                if( $base[0] == '/' ) {
-                       return $base;
+                       // More than one slash will look like it is protocol relative
+                       return preg_replace( '!^/+!', '/', $base );
                } else {
                        // We may get paths with a host prepended; strip it.
-                       return preg_replace( '!^[^:]+://[^/]+/!', '/', $base );
+                       return preg_replace( '!^[^:]+://[^/]+/+!', '/', $base );
                }
        }
 
@@ -844,7 +846,7 @@ class WebRequest {
 
                if ( function_exists( 'apache_request_headers' ) ) {
                        foreach ( apache_request_headers() as $tempName => $tempValue ) {
-                               $this->headers[ strtoupper( $tempName ) ] = $tempValue;
+                               $this->headers[strtoupper( $tempName )] = $tempValue;
                        }
                } else {
                        foreach ( $_SERVER as $name => $value ) {
@@ -1103,7 +1105,7 @@ HTML;
                                $curIP = IP::canonicalize( $curIP );
                                if ( wfIsTrustedProxy( $curIP ) ) {
                                        if ( isset( $ipchain[$i + 1] ) ) {
-                                               if ( $wgUsePrivateIPs || IP::isPublic( $ipchain[$i + 1 ] ) ) {
+                                               if ( $wgUsePrivateIPs || IP::isPublic( $ipchain[$i + 1] ) ) {
                                                        $ip = $ipchain[$i + 1];
                                                }
                                        }
index b04a784..a1dbbfc 100644 (file)
@@ -211,15 +211,14 @@ class WikiReference {
        }
 
        /**
-        * Get a URL based on $wgServer, like Title::getFullUrl() would produce
+        * Get a URL based on $wgServer, like Title::getFullURL() would produce
         * when called locally on the wiki.
         *
         * @param string $page page name (must be normalized before calling this function!)
         * @return String: URL
         */
        public function getFullUrl( $page ) {
-               return
-                       $this->mServer .
+               return $this->mServer .
                        $this->getLocalUrl( $page );
        }
 }
index 8d9d740..f4d2e23 100644 (file)
@@ -1274,7 +1274,7 @@ class WikiPage implements Page, IDBAccessObject {
                );
 
                if ( $wgContentHandlerUseDB ) {
-                       $row[ 'page_content_model' ] = $revision->getContentModel();
+                       $row['page_content_model'] = $revision->getContentModel();
                }
 
                $dbw->update( 'page',
@@ -2591,8 +2591,8 @@ class WikiPage implements Page, IDBAccessObject {
                );
 
                if ( $wgContentHandlerUseDB ) {
-                       $row[ 'ar_content_model' ] = 'rev_content_model';
-                       $row[ 'ar_content_format' ] = 'rev_content_format';
+                       $row['ar_content_model'] = 'rev_content_model';
+                       $row['ar_content_format'] = 'rev_content_format';
                }
 
                $dbw->insertSelect( 'archive', array( 'page', 'revision' ),
index ee19dee..7cecf3a 100644 (file)
@@ -493,17 +493,17 @@ class Xml {
 
                $options = self::option( $other, 'other', $selected === 'other' );
 
-               foreach ( explode( "\n", $list ) as $option) {
+               foreach ( explode( "\n", $list ) as $option ) {
                                $value = trim( $option );
                                if ( $value == '' ) {
                                        continue;
-                               } elseif ( substr( $value, 0, 1) == '*' && substr( $value, 1, 1) != '*' ) {
+                               } elseif ( substr( $value, 0, 1 ) == '*' && substr( $value, 1, 1 ) != '*' ) {
                                        // A new group is starting ...
                                        $value = trim( substr( $value, 1 ) );
                                        if( $optgroup ) $options .= self::closeElement( 'optgroup' );
                                        $options .= self::openElement( 'optgroup', array( 'label' => $value ) );
                                        $optgroup = true;
-                               } elseif ( substr( $value, 0, 2) == '**' ) {
+                               } elseif ( substr( $value, 0, 2 ) == '**' ) {
                                        // groupmember
                                        $value = trim( substr( $value, 2 ) );
                                        $options .= self::option( $value, $value, $selected === $value );
@@ -590,6 +590,7 @@ class Xml {
         * for JavaScript source code.
         * Illegal control characters are assumed not to be present.
         *
+        * @deprecated since 1.21; use Xml::encodeJsVar() or Xml::encodeJsCall() instead
         * @param string $string to escape
         * @return String
         */
@@ -621,72 +622,46 @@ class Xml {
        }
 
        /**
-        * Encode a variable of unknown type to JavaScript.
-        * Arrays are converted to JS arrays, objects are converted to JS associative
-        * arrays (objects). So cast your PHP associative arrays to objects before
-        * passing them to here.
+        * Encode a variable of arbitrary type to JavaScript.
+        * If the value is an XmlJsCode object, pass through the object's value verbatim.
         *
-        * @param $value
+        * @note Only use this function for generating JavaScript code. If generating output
+        *       for a proper JSON parser, just call FormatJson::encode() directly.
         *
-        * @return string
+        * @param mixed $value The value being encoded. Can be any type except a resource.
+        * @param bool $pretty If true, add non-significant whitespace to improve readability.
+        * @return string|bool: String if successful; false upon failure
         */
-       public static function encodeJsVar( $value ) {
-               if ( is_bool( $value ) ) {
-                       $s = $value ? 'true' : 'false';
-               } elseif ( is_null( $value ) ) {
-                       $s = 'null';
-               } elseif ( is_int( $value ) || is_float( $value ) ) {
-                       $s = strval( $value );
-               } elseif ( is_array( $value ) && // Make sure it's not associative.
-                                       array_keys( $value ) === range( 0, count( $value ) - 1 ) ||
-                                       count( $value ) == 0
-                               ) {
-                       $s = '[';
-                       foreach ( $value as $elt ) {
-                               if ( $s != '[' ) {
-                                       $s .= ',';
-                               }
-                               $s .= self::encodeJsVar( $elt );
-                       }
-                       $s .= ']';
-               } elseif ( $value instanceof XmlJsCode ) {
-                       $s = $value->value;
-               } elseif ( is_object( $value ) || is_array( $value ) ) {
-                       // Objects and associative arrays
-                       $s = '{';
-                       foreach ( (array)$value as $name => $elt ) {
-                               if ( $s != '{' ) {
-                                       $s .= ',';
-                               }
-
-                               $s .= '"' . self::escapeJsString( $name ) . '":' .
-                                       self::encodeJsVar( $elt );
-                       }
-                       $s .= '}';
-               } else {
-                       $s = '"' . self::escapeJsString( $value ) . '"';
+       public static function encodeJsVar( $value, $pretty = false ) {
+               if ( $value instanceof XmlJsCode ) {
+                       return $value->value;
                }
-               return $s;
+               return FormatJson::encode( $value, $pretty, FormatJson::UTF8_OK );
        }
 
        /**
         * Create a call to a JavaScript function. The supplied arguments will be
         * encoded using Xml::encodeJsVar().
         *
+        * @since 1.17
         * @param string $name The name of the function to call, or a JavaScript expression
         *    which evaluates to a function object which is called.
-        * @param array $args of arguments to pass to the function.
-        *
-        * @since 1.17
-        *
-        * @return string
+        * @param array $args The arguments to pass to the function.
+        * @param bool $pretty If true, add non-significant whitespace to improve readability.
+        * @return string|bool: String if successful; false upon failure
         */
-       public static function encodeJsCall( $name, $args ) {
+       public static function encodeJsCall( $name, $args, $pretty = false ) {
                foreach ( $args as &$arg ) {
-                       $arg = Xml::encodeJsVar( $arg );
+                       $arg = Xml::encodeJsVar( $arg, $pretty );
+                       if ( $arg === false ) {
+                               return false;
+                       }
                }
 
-               return "$name(" . implode( ', ', $args ) . ");\n";
+               return "$name(" . ( $pretty
+                       ? ( ' ' . implode( ', ', $args ) . ' ' )
+                       : implode( ',', $args )
+               ) . ");";
        }
 
        /**
@@ -963,6 +938,11 @@ class XmlSelect {
  *    Xml::encodeJsVar( new XmlJsCode( 'a + b' ) );
  *
  * Returns "a + b".
+ *
+ * @note As of 1.21, XmlJsCode objects cannot be nested inside objects or arrays. The sole
+ *       exception is the $args argument to Xml::encodeJsCall() because Xml::encodeJsVar() is
+ *       called for each individual element in that array.
+ *
  * @since 1.17
  */
 class XmlJsCode {
index f2e61a5..909bd49 100644 (file)
@@ -256,7 +256,7 @@ class HistoryAction extends FormlessAction {
                        $this->getTitle()->getPrefixedText() . ' - ' .
                        $this->msg( 'history-feed-title' )->inContentLanguage()->text(),
                        $this->msg( 'history-feed-description' )->inContentLanguage()->text(),
-                       $this->getTitle()->getFullUrl( 'action=history' )
+                       $this->getTitle()->getFullURL( 'action=history' )
                );
 
                // Get a limit on number of feed entries. Provide a sane default
@@ -283,10 +283,10 @@ class HistoryAction extends FormlessAction {
                return new FeedItem(
                        $this->msg( 'nohistory' )->inContentLanguage()->text(),
                        $this->msg( 'history-feed-empty' )->inContentLanguage()->parseAsBlock(),
-                       $this->getTitle()->getFullUrl(),
+                       $this->getTitle()->getFullURL(),
                        wfTimestamp( TS_MW ),
                        '',
-                       $this->getTitle()->getTalkPage()->getFullUrl()
+                       $this->getTitle()->getTalkPage()->getFullURL()
                );
        }
 
@@ -323,10 +323,10 @@ class HistoryAction extends FormlessAction {
                return new FeedItem(
                        $title,
                        $text,
-                       $this->getTitle()->getFullUrl( 'diff=' . $rev->getId() . '&oldid=prev' ),
+                       $this->getTitle()->getFullURL( 'diff=' . $rev->getId() . '&oldid=prev' ),
                        $rev->getTimestamp(),
                        $rev->getUserText(),
-                       $this->getTitle()->getTalkPage()->getFullUrl()
+                       $this->getTitle()->getTalkPage()->getFullURL()
                );
        }
 }
index 1e312d7..ac9107f 100644 (file)
@@ -229,7 +229,7 @@ class InfoAction extends FormlessAction {
                }
 
                // Default sort key
-               $sortKey = $title->getCategorySortKey();
+               $sortKey = $title->getCategorySortkey();
                if ( !empty( $pageProperties['defaultsort'] ) ) {
                        $sortKey = $pageProperties['defaultsort'];
                }
index 00bb961..82cdc79 100644 (file)
@@ -96,6 +96,6 @@ class PurgeAction extends FormAction {
        }
 
        public function onSuccess() {
-               $this->getOutput()->redirect( $this->getTitle()->getFullUrl( $this->redirectParams ) );
+               $this->getOutput()->redirect( $this->getTitle()->getFullURL( $this->redirectParams ) );
        }
 }
index d1d457c..f8209e6 100644 (file)
@@ -195,7 +195,7 @@ class RawAction extends FormlessAction {
                        case 'next':
                                # output next revision, or nothing if there isn't one
                                if( $oldid ) {
-                                       $oldid = $this->getTitle()->getNextRevisionId( $oldid );
+                                       $oldid = $this->getTitle()->getNextRevisionID( $oldid );
                                }
                                $oldid = $oldid ? $oldid : -1;
                                break;
@@ -205,7 +205,7 @@ class RawAction extends FormlessAction {
                                        # get the current revision so we can get the penultimate one
                                        $oldid = $this->page->getLatest();
                                }
-                               $prev = $this->getTitle()->getPreviousRevisionId( $oldid );
+                               $prev = $this->getTitle()->getPreviousRevisionID( $oldid );
                                $oldid = $prev ? $prev : -1;
                                break;
                        case 'cur':
index d2d50ae..741e908 100644 (file)
@@ -1535,7 +1535,7 @@ abstract class ApiBase extends ContextSource {
        public function getWatchlistUser( $params ) {
                if ( !is_null( $params['owner'] ) && !is_null( $params['token'] ) ) {
                        $user = User::newFromName( $params['owner'], false );
-                       if ( !($user && $user->getId()) ) {
+                       if ( !( $user && $user->getId() ) ) {
                                $this->dieUsage( 'Specified user does not exist', 'bad_wlowner' );
                        }
                        $token = $user->getOption( 'watchlisttoken' );
index abb6348..342a580 100644 (file)
@@ -56,30 +56,32 @@ class ApiFormatJson extends ApiFormatBase {
        }
 
        public function execute() {
-               $prefix = $suffix = '';
-
                $params = $this->extractRequestParams();
+               $json = FormatJson::encode(
+                       $this->getResultData(),
+                       $this->getIsHtml(),
+                       $params['utf8'] ? FormatJson::ALL_OK : FormatJson::XMLMETA_OK
+               );
                $callback = $params['callback'];
-               if ( !is_null( $callback ) ) {
-                       $prefix = preg_replace( "/[^][.\\'\\\"_A-Za-z0-9]/", '', $callback ) . '(';
-                       $suffix = ')';
+               if ( $callback !== null ) {
+                       $callback = preg_replace( "/[^][.\\'\\\"_A-Za-z0-9]/", '', $callback );
+                       $this->printText( "$callback($json)" );
+               } else {
+                       $this->printText( $json );
                }
-               $this->printText(
-                       $prefix .
-                       FormatJson::encode( $this->getResultData(), $this->getIsHtml() ) .
-                       $suffix
-               );
        }
 
        public function getAllowedParams() {
                return array(
-                       'callback'  => null,
+                       'callback' => null,
+                       'utf8' => false,
                );
        }
 
        public function getParamDescription() {
                return array(
                        'callback' => 'If specified, wraps the output into a given function call. For safety, all user-specific data will be restricted.',
+                       'utf8' => 'If specified, encodes most (but not all) non-ASCII characters as UTF-8 instead of replacing them with hexadecimal escape sequences.',
                );
        }
 
index b2d7582..ebdbedd 100644 (file)
@@ -56,7 +56,7 @@ class ApiImageRotate extends ApiBase {
 
        public function execute() {
                $params = $this->extractRequestParams();
-               $rotation = $params[ 'rotation' ];
+               $rotation = $params['rotation'];
                $user = $this->getUser();
 
                $pageSet = $this->getPageSet();
@@ -111,15 +111,17 @@ class ApiImageRotate extends ApiBase {
                                continue;
                        }
                        $ext = strtolower( pathinfo( "$srcPath", PATHINFO_EXTENSION ) );
-                       $tmpFile = TempFSFile::factory( 'rotate_', $ext);
+                       $tmpFile = TempFSFile::factory( 'rotate_', $ext );
                        $dstPath = $tmpFile->getPath();
                        $err = $handler->rotate( $file, array(
                                "srcPath" => $srcPath,
                                "dstPath" => $dstPath,
-                               "rotation"=> $rotation
+                               "rotation" => $rotation
                        ) );
                        if ( !$err ) {
-                               $comment = wfMessage( 'rotate-comment' )->numParams( $rotation )->text();
+                               $comment = wfMessage(
+                                       'rotate-comment'
+                               )->numParams( $rotation )->inContentLanguage()->text();
                                $status = $file->upload( $dstPath,
                                        $comment, $comment, 0, false, false, $this->getUser() );
                                if ( $status->isGood() ) {
@@ -157,8 +159,8 @@ class ApiImageRotate extends ApiBase {
         */
        protected function checkPermissions( $user, $title ) {
                $permissionErrors = array_merge(
-                       $title->getUserPermissionsErrors( 'edit' , $user ),
-                       $title->getUserPermissionsErrors( 'upload' , $user )
+                       $title->getUserPermissionsErrors( 'edit', $user ),
+                       $title->getUserPermissionsErrors( 'upload', $user )
                );
 
                if ( $permissionErrors ) {
index 80bca2f..a6813e3 100644 (file)
@@ -83,7 +83,7 @@ class ApiMain extends ApiBase {
                'import' => 'ApiImport',
                'userrights' => 'ApiUserrights',
                'options' => 'ApiOptions',
-               'imagerotate' =>'ApiImageRotate',
+               'imagerotate' => 'ApiImageRotate',
        );
 
        /**
@@ -418,7 +418,7 @@ class ApiMain extends ApiBase {
                }
 
                // Log the request whether or not there was an error
-               $this->logRequest( microtime( true ) - $t);
+               $this->logRequest( microtime( true ) - $t );
 
                // Send cache headers after any code which might generate an error, to
                // avoid sending public cache headers for errors.
index caf361a..315ace3 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- *
- *
  * Created on Oct 13, 2006
  *
  * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
  */
 class ApiOpenSearch extends ApiBase {
 
+       /**
+        * Override built-in handling of format parameter.
+        * Only JSON is supported.
+        *
+        * @return ApiFormatBase
+        */
        public function getCustomPrinter() {
-               return $this->getMain()->createPrinterByName( 'json' );
+               $params = $this->extractRequestParams();
+               $format = $params['format'];
+               $allowed = array( 'json', 'jsonfm' );
+               if ( in_array( $format, $allowed ) ) {
+                       return $this->getMain()->createPrinterByName( $format );
+               }
+               return $this->getMain()->createPrinterByName( $allowed[0] );
        }
 
        public function execute() {
@@ -94,6 +104,10 @@ class ApiOpenSearch extends ApiBase {
                                ApiBase::PARAM_ISMULTI => true
                        ),
                        'suggest' => false,
+                       'format' => array(
+                               ApiBase::PARAM_DFLT => 'json',
+                               ApiBase::PARAM_TYPE => array( 'json', 'jsonfm' ),
+                       )
                );
        }
 
@@ -103,6 +117,7 @@ class ApiOpenSearch extends ApiBase {
                        'limit' => 'Maximum amount of results to return',
                        'namespace' => 'Namespaces to search',
                        'suggest' => 'Do nothing if $wgEnableOpenSearchSuggest is false',
+                       'format' => 'The format of the output',
                );
        }
 
index 074efe4..c76e22b 100644 (file)
@@ -595,7 +595,7 @@ class ApiPageSet extends ApiBase {
                }
 
                foreach ( $this->mRequestedPageFields as $fieldName => &$fieldValues ) {
-                       $fieldValues[$pageId] = $row-> $fieldName;
+                       $fieldValues[$pageId] = $row->$fieldName;
                }
        }
 
index f69ad23..7c64996 100644 (file)
@@ -513,7 +513,7 @@ class ApiQuery extends ApiBase {
                        ApiQueryBase::addTitleInfo( $vals, $title );
                        $vals['special'] = '';
                        if ( $title->isSpecialPage() &&
-                                       !SpecialPageFactory::exists( $title->getDbKey() ) ) {
+                                       !SpecialPageFactory::exists( $title->getDBkey() ) ) {
                                $vals['missing'] = '';
                        } elseif ( $title->getNamespace() == NS_MEDIA &&
                                        !wfFindFile( $title ) ) {
index 496a0eb..952c2dc 100644 (file)
@@ -76,7 +76,7 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                if ( $dir == 'newer' ) {
                        $this->addWhereRange( 'cat_pages', 'newer', $min, $max );
                } else {
-                       $this->addWhereRange( 'cat_pages', 'older', $max, $min);
+                       $this->addWhereRange( 'cat_pages', 'older', $max, $min );
                }
 
                if ( isset( $params['prefix'] ) ) {
index 3ef6b84..6899808 100644 (file)
@@ -294,9 +294,9 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                                        // We've reached the one extra which shows that there are additional pages to be had. Stop here...
                                        // We need to keep the parent page of this redir in
                                        if ( $this->hasNS ) {
-                                               $parentID = $this->pageMap[$row-> { $this->bl_ns } ][$row-> { $this->bl_title } ];
+                                               $parentID = $this->pageMap[$row->{$this->bl_ns}][$row->{$this->bl_title}];
                                        } else {
-                                               $parentID = $this->pageMap[NS_FILE][$row-> { $this->bl_title } ];
+                                               $parentID = $this->pageMap[NS_FILE][$row->{$this->bl_title}];
                                        }
                                        $this->continueStr = $this->getContinueRedirStr( $parentID, $row->page_id );
                                        break;
@@ -377,8 +377,8 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                if ( $row->page_is_redirect ) {
                        $a['redirect'] = '';
                }
-               $ns = $this->hasNS ? $row-> { $this->bl_ns } : NS_FILE;
-               $parentID = $this->pageMap[$ns][$row-> { $this->bl_title } ];
+               $ns = $this->hasNS ? $row->{$this->bl_ns} : NS_FILE;
+               $parentID = $this->pageMap[$ns][$row->{$this->bl_title}];
                // Put all the results in an array first
                $this->resultArr[$parentID]['redirlinks'][] = $a;
                $this->getResult()->setIndexedTagName( $this->resultArr[$parentID]['redirlinks'], $this->bl_code );
index 7819ead..44fbf58 100644 (file)
@@ -432,7 +432,7 @@ abstract class ApiQueryBase extends ApiBase {
                if ( trim( $key ) == '' ) {
                        return '';
                }
-               $t = Title::newFromDbKey( $key );
+               $t = Title::newFromDBkey( $key );
                // This really shouldn't happen but we gotta check anyway
                if ( !$t ) {
                        $this->dieUsageMsg( array( 'invalidtitle', $key ) );
index d9be9f2..ba90452 100644 (file)
@@ -63,7 +63,7 @@ class ApiQueryBlocks extends ApiQueryBase {
                $this->addTables( 'ipblocks' );
                $this->addFields( 'ipb_auto' );
 
-               $this->addFieldsIf ( 'ipb_id', $fld_id );
+               $this->addFieldsIf( 'ipb_id', $fld_id );
                $this->addFieldsIf( array( 'ipb_address', 'ipb_user' ), $fld_user || $fld_userid );
                $this->addFieldsIf( 'ipb_by_text', $fld_by );
                $this->addFieldsIf( 'ipb_by', $fld_byid );
index 810e1d6..f79083e 100644 (file)
@@ -121,7 +121,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data = array();
                $mainPage = Title::newMainPage();
                $data['mainpage'] = $mainPage->getPrefixedText();
-               $data['base'] = wfExpandUrl( $mainPage->getFullUrl(), PROTO_CURRENT );
+               $data['base'] = wfExpandUrl( $mainPage->getFullURL(), PROTO_CURRENT );
                $data['sitename'] = $GLOBALS['wgSitename'];
                $data['generator'] = "MediaWiki {$GLOBALS['wgVersion']}";
                $data['phpversion'] = phpversion();
@@ -675,7 +675,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                ' variables             - Returns a list of variable IDs',
                                ' protocols             - Returns a list of protocols that are allowed in external links.',
                        ),
-                       'filteriw' =>  'Return only local or only nonlocal entries of the interwiki map',
+                       'filteriw' => 'Return only local or only nonlocal entries of the interwiki map',
                        'showalldb' => 'List all database servers, not just the one lagging the most',
                        'numberingroup' => 'Lists the number of users in user groups',
                        'inlanguagecode' => 'Language code for localised language names (best effort, use CLDR extension)',
index c4a1328..d219c91 100644 (file)
@@ -40,7 +40,7 @@ class ApiRsd extends ApiBase {
                $service = array( 'apis' => $this->formatRsdApiList() );
                ApiResult::setContent( $service, 'MediaWiki', 'engineName' );
                ApiResult::setContent( $service, 'https://www.mediawiki.org/', 'engineLink' );
-               ApiResult::setContent( $service, Title::newMainPage()->getCanonicalUrl(), 'homePageLink' );
+               ApiResult::setContent( $service, Title::newMainPage()->getCanonicalURL(), 'homePageLink' );
 
                $result->setIndexedTagName( $service['apis'], 'api' );
 
index 7425978..6231a61 100644 (file)
@@ -586,70 +586,50 @@ class MessageCache {
        }
 
        /**
-        * Get a message from either the content language or the user language. The fallback
-        * language order is the users language fallback union the content language fallback.
-        * This list is then applied to find keys in the following order
-        * 1) MediaWiki:$key/$langcode (for every language except the content language where
-        *    we look at MediaWiki:$key)
-        * 2) Built-in messages via the l10n cache which is also in fallback order
+        * Get a message from either the content language or the user language.
         *
-        * @param string $key the message cache key
-        * @param $useDB Boolean: If true will look for the message in the DB, false only
-        *        get the message from the DB, false to use only the compiled l10n cache.
-        * @param bool|string|object $langcode Code of the language to get the message for.
-        *        - If string and a valid code, will create a standard language object
-        *        - If string but not a valid code, will create a basic language object
-        *        - If boolean and false, create object from the current users language
-        *        - If boolean and true, create object from the wikis content language
-        *        - If language object, use it as given
+        * @param $key String: the message cache key
+        * @param $useDB Boolean: get the message from the DB, false to use only
+        *               the localisation
+        * @param bool|string $langcode Code of the language to get the message for, if
+        *                  it is a valid code create a language for that language,
+        *                  if it is a string but not a valid code then make a basic
+        *                  language object, if it is a false boolean then use the
+        *                  current users language (as a fallback for the old
+        *                  parameter functionality), or if it is a true boolean
+        *                  then use the wikis content language (also as a
+        *                  fallback).
         * @param $isFullKey Boolean: specifies whether $key is a two part key
         *                   "msg/lang".
         *
         * @throws MWException
-        * @return string|bool False if the message doesn't exist, otherwise the message
+        * @return string|bool
         */
        function get( $key, $useDB = true, $langcode = true, $isFullKey = false ) {
                global $wgLanguageCode, $wgContLang;
 
-               wfProfileIn( __METHOD__ );
-
                if ( is_int( $key ) ) {
                        // "Non-string key given" exception sometimes happens for numerical strings that become ints somewhere on their way here
                        $key = strval( $key );
                }
 
                if ( !is_string( $key ) ) {
-                       wfProfileOut( __METHOD__ );
                        throw new MWException( 'Non-string key given' );
                }
 
                if ( strval( $key ) === '' ) {
                        # Shortcut: the empty key is always missing
-                       wfProfileOut( __METHOD__ );
                        return false;
                }
 
-
-               # Obtain the initial language object
-               if ( $isFullKey ) {
-                       $keyParts = explode( '/', $key );
-                       if ( count( $keyParts ) < 2 ) {
-                               throw new MWException( "Message key '$key' does not appear to be a full key." );
-                       }
-
-                       $langcode = array_pop( $keyParts );
-                       $key = implode( '/', $keyParts );
-               }
-
-               # Obtain a language object for the requested language from the passed language code
-               # Note that the language code could in fact be a language object already but we assume
-               # it's a string further below.
-               $requestedLangObj = wfGetLangObj( $langcode );
-               if ( !$requestedLangObj ) {
-                       wfProfileOut( __METHOD__ );
+               $lang = wfGetLangObj( $langcode );
+               if ( !$lang ) {
                        throw new MWException( "Bad lang code $langcode given" );
                }
-               $langcode = $requestedLangObj->getCode();
+
+               $langcode = $lang->getCode();
+
+               $message = false;
 
                # Normalise title-case input (with some inlining)
                $lckey = str_replace( ' ', '_', $key );
@@ -661,37 +641,24 @@ class MessageCache {
                        $uckey = $wgContLang->ucfirst( $lckey );
                }
 
-               # Loop through each language in the fallback list until we find something useful
-               $message = false;
-
                # Try the MediaWiki namespace
-               if ( !$this->mDisable && $useDB ) {
-                       $fallbackChain = Language::getFallbacksIncludingSiteLanguage( $langcode );
-                       array_unshift( $fallbackChain, $langcode );
-
-                       foreach ( $fallbackChain as $langcode ) {
-                               if ( $langcode === $wgLanguageCode ) {
-                                       # Messages created in the content language will not have the /lang extension
-                                       $message = $this->getMsgFromNamespace( $uckey, $langcode );
-                               } else {
-                                       $message = $this->getMsgFromNamespace( "$uckey/$langcode", $langcode );
-                               }
-
-                               if ( $message !== false ) {
-                                       break;
-                               }
+               if( !$this->mDisable && $useDB ) {
+                       $title = $uckey;
+                       if( !$isFullKey && ( $langcode != $wgLanguageCode ) ) {
+                               $title .= '/' . $langcode;
                        }
+                       $message = $this->getMsgFromNamespace( $title, $langcode );
                }
 
                # Try the array in the language object
                if ( $message === false ) {
-                       $message = $requestedLangObj->getMessage( $lckey );
-                       if ( is_null ( $message ) ) {
+                       $message = $lang->getMessage( $lckey );
+                       if ( is_null( $message ) ) {
                                $message = false;
                        }
                }
 
-               # If we still have no message, maybe the key was in fact a full key so try that
+               # Try the array of another language
                if( $message === false ) {
                        $parts = explode( '/', $lckey );
                        # We may get calls for things that are http-urls from sidebar
@@ -705,9 +672,15 @@ class MessageCache {
                        }
                }
 
+               # Is this a custom message? Try the default language in the db...
+               if( ( $message === false || $message === '-' ) &&
+                       !$this->mDisable && $useDB &&
+                       !$isFullKey && ( $langcode != $wgLanguageCode ) ) {
+                       $message = $this->getMsgFromNamespace( $uckey, $wgLanguageCode );
+               }
+
                # Final fallback
                if( $message === false ) {
-                       wfProfileOut( __METHOD__ );
                        return false;
                }
 
@@ -721,7 +694,6 @@ class MessageCache {
                                '&#160;' => "\xc2\xa0",
                        ) );
 
-               wfProfileOut( __METHOD__ );
                return $message;
        }
 
@@ -729,6 +701,10 @@ class MessageCache {
         * Get a message from the MediaWiki namespace, with caching. The key must
         * first be converted to two-part lang/msg form if necessary.
         *
+        * Unlike self::get(), this function doesn't resolve fallback chains, and
+        * some callers require this behavior. LanguageConverter::parseCachedTable()
+        * and self::get() are some examples in core.
+        *
         * @param string $title Message cache key with initial uppercase letter.
         * @param string $code code denoting the language to try.
         *
index 39bf4c9..69f0bf7 100644 (file)
@@ -219,7 +219,7 @@ class SquidUpdate {
                                // implementation exists, so adapt to Squid
                                $htcpPacket = pack( 'nxxnCxNxxa*n',
                                        $htcpLen, $htcpDataLen, $htcpOpCLR,
-                                       $htcpTransID, $htcpSpecifier, 2);
+                                       $htcpTransID, $htcpSpecifier, 2 );
 
                                // Send out
                                wfDebug( "Purging URL $url via HTCP\n" );
index bfbacfa..694c1a1 100644 (file)
@@ -58,6 +58,17 @@ class UserCache {
                        : false; // user does not exist?
        }
 
+       /**
+        * Get the name of a user or return $ip if the user ID is 0
+        *
+        * @param integer $userId
+        * @param string $ip
+        * @since 1.21
+        */
+       public function getUserName( $userId, $ip ) {
+               return $userId > 0 ? $this->getProp( $userId, 'name' ) : $ip;
+       }
+
        /**
         * Preloads user names for given list of users.
         * @param array $userIds List of user IDs
index 9c20195..9c5ebcd 100644 (file)
@@ -1086,8 +1086,8 @@ abstract class ContentHandler {
                                $contentObjects[$k] = $v;
 
                                $v = $v->serialize();
-                               $contentTexts[ $k ] = $v;
-                               $args[ $k ] = $v;
+                               $contentTexts[$k] = $v;
+                               $args[$k] = $v;
                        }
                }
 
@@ -1098,7 +1098,7 @@ abstract class ContentHandler {
                foreach ( $contentTexts as $k => $orig ) {
                        /* @var Content $content */
 
-                       $modified = $args[ $k ];
+                       $modified = $args[$k];
                        $content = $contentObjects[$k];
 
                        if ( $modified !== $orig ) {
@@ -1106,7 +1106,7 @@ abstract class ContentHandler {
                                $content = $content->getContentHandler()->unserializeContent( $modified );
                        }
 
-                       $args[ $k ] = $content;
+                       $args[$k] = $content;
                }
 
                return $ok;
index 5ad196d..d0b877f 100644 (file)
@@ -1582,19 +1582,19 @@ abstract class DatabaseBase implements DatabaseType {
        static function generalizeSQL( $sql ) {
                # This does the same as the regexp below would do, but in such a way
                # as to avoid crashing php on some large strings.
-               # $sql = preg_replace ( "/'([^\\\\']|\\\\.)*'|\"([^\\\\\"]|\\\\.)*\"/", "'X'", $sql);
+               # $sql = preg_replace( "/'([^\\\\']|\\\\.)*'|\"([^\\\\\"]|\\\\.)*\"/", "'X'", $sql );
 
-               $sql = str_replace ( "\\\\", '', $sql );
-               $sql = str_replace ( "\\'", '', $sql );
-               $sql = str_replace ( "\\\"", '', $sql );
-               $sql = preg_replace ( "/'.*'/s", "'X'", $sql );
-               $sql = preg_replace ( '/".*"/s', "'X'", $sql );
+               $sql = str_replace( "\\\\", '', $sql );
+               $sql = str_replace( "\\'", '', $sql );
+               $sql = str_replace( "\\\"", '', $sql );
+               $sql = preg_replace( "/'.*'/s", "'X'", $sql );
+               $sql = preg_replace( '/".*"/s', "'X'", $sql );
 
                # All newlines, tabs, etc replaced by single space
-               $sql = preg_replace ( '/\s+/', ' ', $sql );
+               $sql = preg_replace( '/\s+/', ' ', $sql );
 
                # All numbers => N
-               $sql = preg_replace ( '/-?[0-9]+/s', 'N', $sql );
+               $sql = preg_replace( '/-?[0-9]+/s', 'N', $sql );
 
                return $sql;
        }
index 575f629..dde3af5 100644 (file)
@@ -148,7 +148,7 @@ class DatabaseMssql extends DatabaseBase {
                }
 
                // MSSQL doesn't have EXTRACT(epoch FROM XXX)
-               if ( preg_match('#\bEXTRACT\s*?\(\s*?EPOCH\s+FROM\b#i', $sql, $matches ) ) {
+               if ( preg_match( '#\bEXTRACT\s*?\(\s*?EPOCH\s+FROM\b#i', $sql, $matches ) ) {
                        // This is same as UNIX_TIMESTAMP, we need to calc # of seconds from 1970
                        $sql = str_replace( $matches[0], "DATEDIFF(s,CONVERT(datetime,'1/1/1970'),", $sql );
                }
@@ -202,9 +202,9 @@ class DatabaseMssql extends DatabaseBase {
                $retErrors = sqlsrv_errors( SQLSRV_ERR_ALL );
                if ( $retErrors != null ) {
                        foreach ( $retErrors as $arrError ) {
-                               $strRet .= "SQLState: " . $arrError[ 'SQLSTATE'] . "\n";
-                               $strRet .= "Error Code: " . $arrError[ 'code'] . "\n";
-                               $strRet .= "Message: " . $arrError[ 'message'] . "\n";
+                               $strRet .= "SQLState: " . $arrError['SQLSTATE'] . "\n";
+                               $strRet .= "Error Code: " . $arrError['code'] . "\n";
+                               $strRet .= "Message: " . $arrError['message'] . "\n";
                        }
                } else {
                        $strRet = "No errors found";
@@ -429,9 +429,9 @@ class DatabaseMssql extends DatabaseBase {
                        // if we have an identity column
                        if( $identity ) {
                                // iterate through
-                               foreach ($a as $k => $v ) {
+                               foreach ( $a as $k => $v ) {
                                        if ( $k == $identity ) {
-                                               if( !is_null($v) ) {
+                                               if( !is_null( $v ) ) {
                                                        // there is a value being passed to us, we need to turn on and off inserted identity
                                                        $sqlPre = "SET IDENTITY_INSERT $table ON;";
                                                        $sqlPost = ";SET IDENTITY_INSERT $table OFF;";
@@ -501,7 +501,7 @@ class DatabaseMssql extends DatabaseBase {
                        } elseif ( $ret != null ) {
                                // remember number of rows affected
                                $this->mAffectedRows = sqlsrv_rows_affected( $ret );
-                               if ( !is_null($identity) ) {
+                               if ( !is_null( $identity ) ) {
                                        // then we want to get the identity column value we were assigned and save it off
                                        $row = sqlsrv_fetch_object( $ret );
                                        $this->mInsertId = $row->$identity;
index 7db032f..e59ca95 100644 (file)
@@ -206,7 +206,7 @@ class DatabaseOracle extends DatabaseBase {
        }
 
        function __destruct() {
-               if ($this->mOpened) {
+               if ( $this->mOpened ) {
                        wfSuppressWarnings();
                        $this->close();
                        wfRestoreWarnings();
@@ -791,7 +791,7 @@ class DatabaseOracle extends DatabaseBase {
                $endArray[] = strtoupper( $prefix . 'PAGE' );
                $endArray[] = strtoupper( $prefix . 'IMAGE' );
                $fixedOrderTabs = $endArray;
-               while ( ($row = $result->fetchRow()) !== false ) {
+               while ( ( $row = $result->fetchRow() ) !== false ) {
                        if ( !in_array( $row['table_name'], $fixedOrderTabs ) )
                                $endArray[] = $row['table_name'];
                }
@@ -1125,12 +1125,12 @@ class DatabaseOracle extends DatabaseBase {
                $conds2 = array();
                foreach ( $conds as $col => $val ) {
                        if ( is_array( $val ) ) {
-                               $conds2[$col] = $this->wrapConditionsForWhere ( $table, $val, $col );
+                               $conds2[$col] = $this->wrapConditionsForWhere( $table, $val, $col );
                        } else {
                                if ( is_numeric( $col ) && $parentCol != null ) {
-                                       $this->wrapFieldForWhere ( $table, $parentCol, $val );
+                                       $this->wrapFieldForWhere( $table, $parentCol, $val );
                                } else {
-                                       $this->wrapFieldForWhere ( $table, $col, $val );
+                                       $this->wrapFieldForWhere( $table, $col, $val );
                                }
                                $conds2[$col] = $val;
                        }
index c6ac11a..55e0f88 100644 (file)
@@ -556,8 +556,10 @@ class DatabasePostgres extends DatabaseBase {
        }
 
        /**
-        * This must be called after nextSequenceVal
-        * @return null
+        * Return the result of the last call to nextSequenceValue();
+        * This must be called after nextSequenceValue().
+        *
+        * @return integer|null
         */
        function insertId() {
                return $this->mInsertId;
index d469e86..85e7775 100644 (file)
@@ -201,7 +201,7 @@ class LBFactory_Simple extends LBFactory {
                                $flags |= DBO_COMPRESS;
                        }
 
-                       $servers = array(array(
+                       $servers = array( array(
                                'host' => $wgDBserver,
                                'user' => $wgDBuser,
                                'password' => $wgDBpassword,
index 1a26d0c..f9cb656 100644 (file)
@@ -508,7 +508,7 @@ class _DiffEngine {
                        reset( $seps );
                        $pt1 = $seps[0];
                        while ( $pt2 = next( $seps ) ) {
-                               $this->_compareseq ( $pt1[0], $pt2[0], $pt1[1], $pt2[1] );
+                               $this->_compareseq( $pt1[0], $pt2[0], $pt1[1], $pt2[1] );
                                $pt1 = $pt2;
                        }
                }
index 0f3c77f..d44c050 100644 (file)
@@ -304,7 +304,7 @@ class DifferenceEngine extends ContextSource {
                                }
                                if ( !$this->mOldRev->isDeleted( Revision::DELETED_TEXT ) && !$this->mNewRev->isDeleted( Revision::DELETED_TEXT ) ) {
                                        $undoLink = Html::element( 'a', array(
-                                                       'href' => $this->mNewPage->getLocalUrl( array(
+                                                       'href' => $this->mNewPage->getLocalURL( array(
                                                                'action' => 'edit',
                                                                'undoafter' => $this->mOldid,
                                                                'undo' => $this->mNewid ) ),
@@ -414,7 +414,7 @@ class DifferenceEngine extends ContextSource {
                                        array( $msg ) );
                        } else {
                                # Give explanation and add a link to view the diff...
-                               $link = $this->getTitle()->getFullUrl( $this->getRequest()->appendQueryValue( 'unhide', '1', true ) );
+                               $link = $this->getTitle()->getFullURL( $this->getRequest()->appendQueryValue( 'unhide', '1', true ) );
                                $msg = $suppressed ? 'rev-suppressed-unhide-diff' : 'rev-deleted-unhide-diff';
                                $out->wrapWikiMsg( "<div id='mw-$msg' class='mw-warning plainlinks'>\n$1\n</div>\n", array( $msg, $link ) );
                        }
index c976998..92fee83 100644 (file)
@@ -319,7 +319,7 @@ class FSFileBackend extends FileBackendStore {
                        $status->value = new FSFileOpHandle( $this, $params, 'Copy', $cmd, $dest );
                } else { // immediate write
                        $this->trapWarnings();
-                       $ok = copy( $source, $dest );
+                       $ok = ( $source === $dest ) ? true : copy( $source, $dest );
                        $this->untrapWarnings();
                        // In some cases (at least over NFS), copy() returns true when it fails
                        if ( !$ok || ( filesize( $source ) !== filesize( $dest ) ) ) {
@@ -383,7 +383,7 @@ class FSFileBackend extends FileBackendStore {
                        $status->value = new FSFileOpHandle( $this, $params, 'Move', $cmd );
                } else { // immediate write
                        $this->trapWarnings();
-                       $ok = rename( $source, $dest );
+                       $ok = ( $source === $dest ) ? true : rename( $source, $dest );
                        $this->untrapWarnings();
                        clearstatcache(); // file no longer at source
                        if ( !$ok ) {
index 638e7cd..d0020da 100644 (file)
@@ -261,17 +261,19 @@ abstract class FileBackend {
         *   - ignoreMissingSource : The operation will simply succeed and do
         *                           nothing if the source file does not exist.
         *   - overwrite           : Any destination file will be overwritten.
-        *   - overwriteSame       : An error will not be given if a file already
-        *                           exists at the destination that has the same
-        *                           contents as the new contents to be written there.
-        *   - headers             : If supplied, the backend will return these headers when
-        *                           GETs/HEADs of the destination file are made. Header values
-        *                           should be smaller than 256 bytes, often options or numbers.
-        *                           Content-Disposition headers can be longer, though the system
-        *                           might ignore or truncate ones that are too long to store.
-        *                           Existing headers will remain, but these will replace any
-        *                           conflicting previous headers, and headers will be removed
-        *                           if they are set to an empty string.
+        *   - overwriteSame       : If a file already exists at the destination with the
+        *                           same contents, then do nothing to the destination file
+        *                           instead of giving an error. This does not compare headers.
+        *                           This option is ignored if 'overwrite' is already provided.
+        *   - headers             : If supplied, the result of merging these headers with any
+        *                           existing source file headers (replacing conflicting ones)
+        *                           will be set as the destination file headers. Headers are
+        *                           deleted if their value is set to the empty string. When a
+        *                           file has headers they are included in responses to GET and
+        *                           HEAD requests to the backing store for that file.
+        *                           Header values should be no larger than 255 bytes, except for
+        *                           Content-Disposition. The system might ignore or truncate any
+        *                           headers that are too long to store (exact limits will vary).
         *                           Backends that don't support metadata ignore this. (since 1.21)
         *
         * $opts is an associative of boolean flags, including:
index 939315d..17b060c 100644 (file)
@@ -457,7 +457,7 @@ class FileBackendMultiWrite extends FileBackend {
         * @return bool Path container should have dir changes pushed to all backends
         */
        protected function replicateContainerDirChanges( $path ) {
-               list( , $shortCont,  ) = self::splitStoragePath( $path );
+               list( , $shortCont, ) = self::splitStoragePath( $path );
                return !in_array( $shortCont, $this->noPushDirConts );
        }
 
index 1a9ac3b..be0d502 100644 (file)
@@ -276,10 +276,12 @@ abstract class FileBackendStore extends FileBackend {
         */
        protected function doMoveInternal( array $params ) {
                unset( $params['async'] ); // two steps, won't work here :)
+               $nsrc = FileBackend::normalizeStoragePath( $params['src'] );
+               $ndst = Filebackend::normalizeStoragePath( $params['dst'] );
                // Copy source to dest
                $status = $this->copyInternal( $params );
-               if ( $status->isOK() ) {
-                       // Delete source (only fails due to races or medium going down)
+               if ( $nsrc !== $ndst && $status->isOK() ) {
+                       // Delete source (only fails due to races or network problems)
                        $status->merge( $this->deleteInternal( array( 'src' => $params['src'] ) ) );
                        $status->setResult( true, $status->value ); // ignore delete() errors
                }
@@ -303,9 +305,13 @@ abstract class FileBackendStore extends FileBackend {
        final public function describeInternal( array $params ) {
                wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-' . $this->name );
-               $status = $this->doDescribeInternal( $params );
-               $this->clearCache( array( $params['src'] ) );
-               $this->deleteFileCache( $params['src'] ); // persistent cache
+               if ( count( $params['headers'] ) ) {
+                       $status = $this->doDescribeInternal( $params );
+                       $this->clearCache( array( $params['src'] ) );
+                       $this->deleteFileCache( $params['src'] ); // persistent cache
+               } else {
+                       $status = Status::newGood(); // nothing to do
+               }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
index e019324..62e9fba 100644 (file)
@@ -46,7 +46,7 @@ abstract class FileOp {
 
        protected $doOperation = true; // boolean; operation is not a no-op
        protected $sourceSha1; // string
-       protected $destSameAsSource; // boolean
+       protected $overwriteSameCase; // boolean
        protected $destExists; // boolean
 
        /* Object life-cycle */
@@ -55,7 +55,7 @@ abstract class FileOp {
        const STATE_ATTEMPTED = 3;
 
        /**
-        * Build a new file operation transaction
+        * Build a new batch file operation transaction
         *
         * @param $backend FileBackendStore
         * @param $params Array
@@ -64,8 +64,10 @@ abstract class FileOp {
        final public function __construct( FileBackendStore $backend, array $params ) {
                $this->backend = $backend;
                list( $required, $optional ) = $this->allowedParams();
+               // @TODO: normalizeAnyStoragePaths() calls are overzealous, use a parameter list
                foreach ( $required as $name ) {
                        if ( isset( $params[$name] ) ) {
+                               // Normalize paths so the paths to the same file have the same string
                                $this->params[$name] = self::normalizeAnyStoragePaths( $params[$name] );
                        } else {
                                throw new MWException( "File operation missing parameter '$name'." );
@@ -73,6 +75,7 @@ abstract class FileOp {
                }
                foreach ( $optional as $name ) {
                        if ( isset( $params[$name] ) ) {
+                               // Normalize paths so the paths to the same file have the same string
                                $this->params[$name] = self::normalizeAnyStoragePaths( $params[$name] );
                        }
                }
@@ -341,7 +344,7 @@ abstract class FileOp {
 
        /**
         * Check for errors with regards to the destination file already existing.
-        * Also set the destExists, destSameAsSource and sourceSha1 member variables.
+        * Also set the destExists, overwriteSameCase and sourceSha1 member variables.
         * A bad status will be returned if there is no chance it can be overwritten.
         *
         * @param $predicates Array
@@ -354,7 +357,7 @@ abstract class FileOp {
                if ( $this->sourceSha1 === null ) { // file in storage?
                        $this->sourceSha1 = $this->fileSha1( $this->params['src'], $predicates );
                }
-               $this->destSameAsSource = false;
+               $this->overwriteSameCase = false;
                $this->destExists = $this->fileExists( $this->params['dst'], $predicates );
                if ( $this->destExists ) {
                        if ( $this->getParam( 'overwrite' ) ) {
@@ -368,7 +371,7 @@ abstract class FileOp {
                                        // Give an error if the files are not identical
                                        $status->fatal( 'backend-fail-notsame', $this->params['dst'] );
                                } else {
-                                       $this->destSameAsSource = true; // OK
+                                       $this->overwriteSameCase = true; // OK
                                }
                                return $status; // do nothing; either OK or bad status
                        } else {
@@ -489,7 +492,7 @@ class CreateFileOp extends FileOp {
         * @return Status
         */
        protected function doAttempt() {
-               if ( !$this->destSameAsSource ) {
+               if ( !$this->overwriteSameCase ) {
                        // Create the file at the destination
                        return $this->backend->createInternal( $this->setFlags( $this->params ) );
                }
@@ -561,8 +564,8 @@ class StoreFileOp extends FileOp {
         * @return Status
         */
        protected function doAttempt() {
-               // Store the file at the destination
-               if ( !$this->destSameAsSource ) {
+               if ( !$this->overwriteSameCase ) {
+                       // Store the file at the destination
                        return $this->backend->storeInternal( $this->setFlags( $this->params ) );
                }
                return Status::newGood();
@@ -638,14 +641,19 @@ class CopyFileOp extends FileOp {
         * @return Status
         */
        protected function doAttempt() {
-               // Do nothing if the src/dst paths are the same
-               if ( $this->params['src'] !== $this->params['dst'] ) {
-                       // Copy the file into the destination
-                       if ( !$this->destSameAsSource ) {
-                               return $this->backend->copyInternal( $this->setFlags( $this->params ) );
-                       }
+               if ( $this->overwriteSameCase ) {
+                       $status = Status::newGood(); // nothing to do
+               } elseif ( $this->params['src'] === $this->params['dst'] ) {
+                       // Just update the destination file headers
+                       $headers = $this->getParam( 'headers' ) ?: array();
+                       $status = $this->backend->describeInternal( $this->setFlags( array(
+                               'src' => $this->params['dst'], 'headers' => $headers
+                       ) ) );
+               } else {
+                       // Copy the file to the destination
+                       $status = $this->backend->copyInternal( $this->setFlags( $this->params ) );
                }
-               return Status::newGood();
+               return $status;
        }
 
        /**
@@ -717,18 +725,27 @@ class MoveFileOp extends FileOp {
         * @return Status
         */
        protected function doAttempt() {
-               // Do nothing if the src/dst paths are the same
-               if ( $this->params['src'] !== $this->params['dst'] ) {
-                       if ( !$this->destSameAsSource ) {
-                               // Move the file into the destination
-                               return $this->backend->moveInternal( $this->setFlags( $this->params ) );
+               if ( $this->overwriteSameCase ) {
+                       if ( $this->params['src'] === $this->params['dst'] ) {
+                               // Do nothing to the destination (which is also the source)
+                               $status = Status::newGood();
                        } else {
-                               // Just delete source as the destination needs no changes
-                               $params = array( 'src' => $this->params['src'] );
-                               return $this->backend->deleteInternal( $this->setFlags( $params ) );
+                               // Just delete the source as the destination file needs no changes
+                               $status = $this->backend->deleteInternal( $this->setFlags(
+                                       array( 'src' => $this->params['src'] )
+                               ) );
                        }
+               } elseif ( $this->params['src'] === $this->params['dst'] ) {
+                       // Just update the destination file headers
+                       $headers = $this->getParam( 'headers' ) ?: array();
+                       $status = $this->backend->describeInternal( $this->setFlags(
+                               array( 'src' => $this->params['dst'], 'headers' => $headers )
+                       ) );
+               } else {
+                       // Move the file to the destination
+                       $status = $this->backend->moveInternal( $this->setFlags( $this->params ) );
                }
-               return Status::newGood();
+               return $status;
        }
 
        /**
index cecd0ae..d72755a 100644 (file)
@@ -518,7 +518,7 @@ abstract class File {
         * @param $version integer version number.
         * @return Array containing metadata, or what was passed to it on fail (unserializing if not array)
         */
-       public function convertMetadataVersion($metadata, $version) {
+       public function convertMetadataVersion( $metadata, $version ) {
                $handler = $this->getHandler();
                if ( !is_array( $metadata ) ) {
                        // Just to make the return type consistent
@@ -681,7 +681,7 @@ abstract class File {
                if ( $mime === "unknown/unknown" ) {
                        return false; #unknown type, not trusted
                }
-               if ( in_array( $mime, $wgTrustedMediaFormats) ) {
+               if ( in_array( $mime, $wgTrustedMediaFormats ) ) {
                        return true;
                }
 
@@ -910,8 +910,7 @@ abstract class File {
                                                // XXX: Pass in the storage path even though we are not rendering anything
                                                // and the path is supposed to be an FS path. This is due to getScalerType()
                                                // getting called on the path and clobbering $thumb->getUrl() if it's false.
-                                               $thumb = $handler->getTransform(
-                                                       $this, $thumbPath, $thumbUrl, $params );
+                                               $thumb = $handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
                                                $thumb->setStoragePath( $thumbPath );
                                                break;
                                        }
index a96c1f3..edf623e 100644 (file)
@@ -54,7 +54,7 @@ class ForeignAPIFile extends File {
         */
        static function newFromTitle( Title $title, $repo ) {
                $data = $repo->fetchImageQuery( array(
-                       'titles'            => 'File:' . $title->getDBKey(),
+                       'titles'            => 'File:' . $title->getDBkey(),
                        'iiprop'            => self::getProps(),
                        'prop'              => 'imageinfo',
                        'iimetadataversion' => MediaHandler::getMetadataVersion()
@@ -67,7 +67,7 @@ class ForeignAPIFile extends File {
                                ? count( $data['query']['redirects'] ) - 1
                                : -1;
                        if( $lastRedirect >= 0 ) {
-                               $newtitle = Title::newFromText( $data['query']['redirects'][$lastRedirect]['to']);
+                               $newtitle = Title::newFromText( $data['query']['redirects'][$lastRedirect]['to'] );
                                $img = new self( $newtitle, $repo, $info, true );
                                if( $img ) {
                                        $img->redirectedFrom( $title->getDBkey() );
@@ -166,7 +166,7 @@ class ForeignAPIFile extends File {
                }
                $ret = array();
                foreach( $metadata as $meta ) {
-                       $ret[ $meta['name'] ] = self::parseMetadata( $meta['value'] );
+                       $ret[$meta['name']] = self::parseMetadata( $meta['value'] );
                }
                return $ret;
        }
index 639228b..6ff898e 100644 (file)
@@ -1590,7 +1590,7 @@ class LocalFile extends File {
         * @return String
         */
        function getDescriptionUrl() {
-               return $this->title->getLocalUrl();
+               return $this->title->getLocalURL();
        }
 
        /**
index 8231e7f..cd14e4e 100644 (file)
@@ -510,8 +510,7 @@ abstract class DatabaseInstaller {
         * @return String
         */
        public function getInstallUserBox() {
-               return
-                       Html::openElement( 'fieldset' ) .
+               return Html::openElement( 'fieldset' ) .
                        Html::element( 'legend', array(), wfMessage( 'config-db-install-account' )->text() ) .
                        $this->getTextBox( '_InstallUser', 'config-db-username', array( 'dir' => 'ltr' ), $this->parent->getHelpBox( 'config-db-install-username' ) ) .
                        $this->getPasswordBox( '_InstallPassword', 'config-db-password', array( 'dir' => 'ltr' ), $this->parent->getHelpBox( 'config-db-install-password' ) ) .
index b88ae61..94164eb 100644 (file)
@@ -302,7 +302,7 @@ abstract class DatabaseUpdater {
         * @param string $fieldName The field to be modified
         * @param string $sqlPath The path to the SQL change path
         */
-       public function modifyExtensionField( $tableName, $fieldName, $sqlPath) {
+       public function modifyExtensionField( $tableName, $fieldName, $sqlPath ) {
                $this->extensionUpdates[] = array( 'modifyField', $tableName, $fieldName, $sqlPath, true );
        }
 
index ee07a13..3b097de 100644 (file)
@@ -574,6 +574,7 @@ When that has been done, you can '''[$2 enter your wiki]'''.",
  * @author Shirayuki
  * @author Siebrand
  * @author Umherirrender
+ * @author Waldir
  */
 $messages['qqq'] = array(
        'config-desc' => '{{desc}}',
@@ -602,6 +603,7 @@ Used as error message.',
        'config-page-name' => '{{Identical|Name}}',
        'config-page-options' => '{{Identical|Options}}',
        'config-page-install' => '{{Identical|Install}}',
+       'config-page-releasenotes' => '{{Identical|Release notes}}',
        'config-page-copying' => 'This is a link to the full GPL text',
        'config-restart' => 'Button text to confirm the installation procedure has to be restarted.',
        'config-copyright' => 'This message follows {{msg-mw|config-env-good}}.
@@ -744,6 +746,7 @@ See also:
 * $1 - full URL of index.php
 See also:
 * {{msg-mw|config-upgrade-done}}',
+       'config-regenerate' => 'This message appears in a button after LocalSettings.php is generated and downloaded at the end of the MediaWiki installation process.',
        'config-show-table-status' => '{{doc-important|"<code>SHOW TABLE STATUS</code>" is a MySQL command. Do not translate this.}}',
        'config-db-web-account-same' => 'checkbox label',
        'config-db-web-create' => 'checkbox label',
@@ -1043,12 +1046,10 @@ U gebruik tans $2.',
        'config-sqlite-dir' => 'Gids vir SQLite se data:',
        'config-oracle-def-ts' => 'Standaard tabelruimte:',
        'config-oracle-temp-ts' => 'Tydelike tabelruimte:',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-header-mysql' => 'MySQL-instellings',
        'config-header-postgres' => 'PostgreSQL-instellings',
        'config-header-sqlite' => 'SQLite-instellings',
        'config-header-oracle' => 'Oracle-instellings',
-       'config-header-ibm_db2' => 'Instellings vir IBM DB2',
        'config-invalid-db-type' => 'Ongeldige databasistipe',
        'config-missing-db-name' => 'U moet \'n waarde vir "Databasnaam" verskaf',
        'config-sqlite-readonly' => 'Die lêer <code>$1</code> kan nie geskryf word nie.',
@@ -1056,7 +1057,7 @@ U gebruik tans $2.',
        'config-upgrade-done-no-regenerate' => 'Opgradering is voltooi.
 
 U kan nou [$1 u wiki gebruik].',
-       'config-regenerate' => 'Herskep <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Herskep LocalSettings.php →',
        'config-show-table-status' => 'Die uitvoer van <code>SHOW TABLE STATUS</code> het gefaal!',
        'config-db-web-account' => 'Databasisgebruiker vir toegang tot die web',
        'config-mysql-engine' => 'Stoor-enjin:',
@@ -1698,7 +1699,6 @@ ResourceLoader, складнік MediaWiki, будзе абходзіць гэт
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki падтрымлівае наступныя сыстэмы базаў зьвестак:
 
 $1
@@ -1708,12 +1708,10 @@ $1
        'config-support-postgres' => '* $1 — вядомая сыстэма базы зьвестак з адкрытым кодам, якая зьяўляецца альтэрнатывай MySQL ([http://www.php.net/manual/en/pgsql.installation.php як кампіляваць PHP з падтрымкай PostgreSQL]). Яна можа ўтрымліваць дробныя памылкі, і не рэкамэндуецца выкарыстоўваць яе для працуючых праектаў.',
        'config-support-sqlite' => '* $1 — невялікая сыстэма базы зьвестак, якая мае вельмі добрую падтрымку. ([http://www.php.net/manual/en/pdo.installation.php як кампіляваць PHP з падтрымкай SQLite], выкарыстоўвае PDO)',
        'config-support-oracle' => '* $1 зьяўляецца камэрцыйнай прафэсійнай базай зьвестак. ([http://www.php.net/manual/en/oci8.installation.php Як скампіляваць PHP з падтрымкай OCI8])',
-       'config-support-ibm_db2' => '* $1 — база зьвестак маштабу прадпрыемства. ([http://www.php.net/manual/en/ibm-db2.installation.php Як скампіляваць PHP з падтрымкай IBM DB2])',
        'config-header-mysql' => 'Налады MySQL',
        'config-header-postgres' => 'Налады PostgreSQL',
        'config-header-sqlite' => 'Налады SQLite',
        'config-header-oracle' => 'Налады Oracle',
-       'config-header-ibm_db2' => 'Налады IBM DB2',
        'config-invalid-db-type' => 'Няслушны тып базы зьвестак',
        'config-missing-db-name' => 'Вы павінны ўвесьці значэньне парамэтру «Імя базы зьвестак»',
        'config-missing-db-host' => 'Вы павінны ўвесьці значэньне парамэтру «Хост базы зьвестак»',
@@ -1775,7 +1773,7 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => 'Абнаўленьне скончанае.
 
 Цяпер Вы можаце [$1 пачаць працу з вікі].',
-       'config-regenerate' => 'Рэгенэраваць <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Рэгенэраваць LocalSettings.php →',
        'config-show-table-status' => "Запыт '<code>SHOW TABLE STATUS</code>' не атрымаўся!",
        'config-unknown-collation' => "'''Папярэджаньне:''' база зьвестак выкарыстоўвае нераспазнанае супастаўленьне.",
        'config-db-web-account' => 'Рахунак базы зьвестак для вэб-доступу',
@@ -1805,7 +1803,6 @@ chmod a+w $3</pre>',
 Гэта болей эфэктыўна за рэжым MySQL UTF-8, і дазваляе Вам выкарыстоўваць увесь дыяпазон сымбаляў Unicode.
 
 У '''рэжыме UTF-8''', MySQL ведае, якая табліцы сымбаляў выкарыстоўваецца ў Вашых зьвестках, і можа адпаведна прадстаўляць і канвэртаваць іх, але гэта не дазволіць Вам захоўваць сымбалі па-за межамі [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Базавага шматмоўнага дыяпазону].",
-       'config-ibm_db2-low-db-pagesize' => "Вашая база зьвестак DB2 мае таблічную прасторну зь недастатковым памерам старонкі. Памер старонкі мусіць быць ня менш за '''32к'''.",
        'config-site-name' => 'Назва вікі:',
        'config-site-name-help' => 'Назва будзе паказвацца ў загалоўку браўзэра і ў некаторых іншых месцах.',
        'config-site-name-blank' => 'Увядзіце назву сайта.',
@@ -2224,7 +2221,6 @@ $1
 Това включва сурови данни за потребителите (адреси за е-поща, хеширани пароли), както и изтрити версии на страници и друга чувствителна и с ограничен достъп информация от и за уикито.
 
 Базата от данни е препоръчително да се разположи на друго място, например в <code>/var/lib/mediawiki/yourwiki</code>.",
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'МедияУики поддържа следните системи за бази от данни:
 
 $1
@@ -2234,12 +2230,10 @@ $1
        'config-support-postgres' => '* $1 е популярна система за бази от данни с отворен изходен код, която е алтернатива на MySQL ([http://www.php.net/manual/en/pgsql.installation.php как се компилира PHP с поддръжка на PostgreSQL]). Възможно е все още да има грешки, затова не се препоръчва да се използва в общодостъпна среда.',
        'config-support-sqlite' => '* $1 е лека система за база от данни, която е много добре поддържана. ([http://www.php.net/manual/en/pdo.installation.php Как се компилира PHP с поддръжка на SQLite], използва PDO)',
        'config-support-oracle' => '* $1 е комерсиална корпоративна база от данни. ([http://www.php.net/manual/en/oci8.installation.php Как се компилира PHP с поддръжка на OCI8])',
-       'config-support-ibm_db2' => '* $1 е комерсиална фирмена база от данни. ([http://www.php.net/manual/en/ibm-db2.installation.php Как се компилира PHP с поддръжка на IBM DB2])',
        'config-header-mysql' => 'Настройки за MySQL',
        'config-header-postgres' => 'Настройки за PostgreSQL',
        'config-header-sqlite' => 'Настройки за SQLite',
        'config-header-oracle' => 'Настройки за Oracle',
-       'config-header-ibm_db2' => 'Настройки за IBM DB2',
        'config-invalid-db-type' => 'Невалиден тип база от данни',
        'config-missing-db-name' => 'Необходимо е да се въведе стойност за "Име на базата от данни"',
        'config-missing-db-host' => 'Необходимо е да се въведе стойност за "Хост на базата от данни"',
@@ -2301,7 +2295,7 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => 'Обновяването приключи.
 
 Вече е възможно [$1 да използвате уикито].',
-       'config-regenerate' => 'Създаване на <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Създаване на LocalSettings.php →',
        'config-show-table-status' => 'Заявката <code>SHOW TABLE STATUS</code> не сполучи!',
        'config-unknown-collation' => "'''Предупреждение:''' Базата от данни използва неразпозната колация.",
        'config-db-web-account' => 'Сметка за уеб достъп до базата от данни',
@@ -2926,7 +2920,7 @@ Da hizivaat anezho da VediaWiki $1, klikañ war '''Kenderc'hel'''.",
        'config-upgrade-done-no-regenerate' => 'Hizivadenn kaset da benn.
 
 Gallout a rit [$1 kregiñ da implijout ho wiki].',
-       'config-regenerate' => 'Adgenel <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Adgenel LocalSettings.php →',
        'config-show-table-status' => "C'hwitet ar reked <code>SHOW TABLE STATUS</code> !",
        'config-unknown-collation' => "'''Diwallit :''' Emañ an diaz roadennoù o renkañ an traoù diouzh un urzh lizherennek dianav.",
        'config-db-web-account' => 'Kont an diaz roadennoù evit ar voned Kenrouedad',
@@ -3501,7 +3495,6 @@ Zvažte umístění databáze někam zcela jinam, například do <code>/var/lib/
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Věštba',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki podporuje následující databázové systémy:
 
 $1
@@ -3511,12 +3504,10 @@ Pokud v nabídce níže nevidíte databázový systém, který chcete použít,
        'config-support-postgres' => '* $1 je populární open-source databázový systém používaný jako alternativa k MySQL ([http://www.php.net/manual/en/pgsql.installation.php jak přeložit PHP s podporou PostgreSQL]). Mohou se vyskytnout ještě nějaké menší chyby, použití v produkčním prostředí se nedoporučuje.',
        'config-support-sqlite' => '* $1 je velmi dobře podporovaný lehký databázový systém. ([http://www.php.net/manual/en/pdo.installation.php Jak přeložit PHP s podporou SQLite], používá PDO)',
        'config-support-oracle' => '* $1 je komerční podniková databáze. ([http://www.php.net/manual/en/oci8.installation.php Jak přeložit PHP s podporou OCI8])',
-       'config-support-ibm_db2' => '* $1 je komerční podniková databáze. ([http://www.php.net/manual/en/ibm-db2.installation.php Jak přeložit PHP s podporou IBM DB2])',
        'config-header-mysql' => 'Nastavení MySQL',
        'config-header-postgres' => 'Nastavení PostgreSQL',
        'config-header-sqlite' => 'Nastavení SQLite',
        'config-header-oracle' => 'Nastavení Oracle',
-       'config-header-ibm_db2' => 'Nastavení IBM DB2',
        'config-invalid-db-type' => 'Chybný typ databáze',
        'config-missing-db-name' => 'Musíte zadat hodnotu pro „Jméno databáze“',
        'config-missing-db-host' => 'Musíte zadat hodnotu pro „Databázový server“',
@@ -3578,7 +3569,7 @@ To se ale '''nedoporučuje''', pokud s wiki nemáte problémy.",
        'config-upgrade-done-no-regenerate' => 'Aktualizace byla dokončena.
 
 Svou wiki teď můžete [$1 začít používat].',
-       'config-regenerate' => 'Přegenerovat <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Přegenerovat LocalSettings.php →',
        'config-show-table-status' => 'Dotaz <code>SHOW TABLE STATUS</code> se nezdařil!',
        'config-unknown-collation' => "'''Upozornění:''' Databáze používá nerozpoznané řazení.",
        'config-db-web-account' => 'Databázový účet pro webový přístup',
@@ -3608,7 +3599,6 @@ Databáze MyISAM bývají poškozeny častěji než databáze InnoDB.",
 To je výkonnější než UTF-8 režim MySQL a umožňuje využít plný rozsah znaků Unicode.
 
 V '''režimu UTF-8''' bude MySQL znát znakovou sadu vašich dat a může je příslušně zobrazovat a převádět, ale neumožní vám uložit znaky mimo [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
-       'config-ibm_db2-low-db-pagesize' => "Vaše DB2 databáze má implicitní tabulkový prostor s nedostatečnou velikostí stránky. Velikost stránky musí být minimálně '''32K'''.",
        'config-site-name' => 'Název wiki:',
        'config-site-name-help' => 'Bude se zobrazovat v titulku prohlížeče a na dalších místech.',
        'config-site-name-blank' => 'Zadejte název serveru.',
@@ -3940,7 +3930,7 @@ Dieses Programm ist freie Software, d. h. es kann, gemäß den Bedingungen der v
 
 Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings '''ohne jegliche Garantie''' und sogar ohne die implizierte Garantie einer '''Marktgängigkeit''' oder '''Eignung für einen bestimmten Zweck'''. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.
 
-Eine <doclink href=Copying>Kopie der ''GNU General Public License''</doclink> sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/copyleft/gpl.html online gelesen] werden.",
+Eine <doclink href=Copying>Kopie der GNU General Public License</doclink> sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/copyleft/gpl.html online gelesen] werden.",
        'config-sidebar' => '* [//www.mediawiki.org/wiki/MediaWiki/de Website von MediaWiki]
 * [//www.mediawiki.org/wiki/Help:Contents/de Benutzeranleitung]
 * [//www.mediawiki.org/wiki/Manual:Contents/de Administratorenanleitung]
@@ -4003,7 +3993,7 @@ Der Installationsvorgang könnte daher scheitern!",
        'config-xcache' => '[http://xcache.lighttpd.net/ XCache] ist installiert',
        'config-apc' => '[http://www.php.net/apc APC] ist installiert',
        'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] ist installiert',
-       'config-no-cache' => "'''Warnung:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] oder [http://www.iis.net/download/WinCacheForPhp WinCache] konnten nicht gefunden werden.
+       'config-no-cache' => "'''Warnung:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] oder [http://www.iis.net/download/WinCacheForPhp WinCache] wurden nicht gefunden.
 Das Objektcaching kann daher nicht aktiviert werden.",
        'config-mod-security' => "'''Warnung:''' Auf dem Webserver wurde [http://modsecurity.org/ ModSecurity] aktiviert. Sofern falsch konfiguriert, kann dies zu Problemen mit MediaWiki sowie anderer Software auf dem Server führen und es Benutzern ermöglichen beliebige Inhalte im Wiki einzustellen.
 Für weitere Informationen empfehlen wir die [http://modsecurity.org/documentation/ Dokumentation zu ModSecurity] oder den Kontakt zum Hoster, sofern Fehler auftreten.",
@@ -4179,7 +4169,7 @@ Dies wird '''nicht empfohlen''', es sei denn, es treten Probleme mit dem Wiki au
        'config-upgrade-done-no-regenerate' => 'Die Aktualisierung ist abgeschlossen.
 
 Das Wiki kann nun [$1 genutzt werden].',
-       'config-regenerate' => '<code>LocalSettings.php</code> neu erstellen →',
+       'config-regenerate' => 'LocalSettings.php neu erstellen →',
        'config-show-table-status' => 'Die Abfrage <code>SHOW TABLE STATUS</code> ist gescheitert!',
        'config-unknown-collation' => "'''Warnung:''' Die Datenbank nutzt eine unbekannte Kollation.",
        'config-db-web-account' => 'Datenbankkonto für den Webzugriff',
@@ -4874,7 +4864,6 @@ Considere la posibilidad de poner la base de datos en algún otro sitio, por eje
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki es compatible con los siguientes sistemas de bases de datos:
 
 $1
@@ -4884,12 +4873,10 @@ Si no encuentras en el listado el sistema de base de datos que estás intentando
        'config-support-postgres' => '$1 es un popular sistema de base de datos de código abierto, alternativa a MySQL. ([http://www.php.net/manual/es/pgsql.installation.php cómo compilar PHP con compatibilidad PostgreSQL]). Puede haber algunos defectos menores destacables, y no es recomendable para uso en un entorno de producción.',
        'config-support-sqlite' => '* $1 es una base de datos ligera con gran compatibilidad con MediaWiki ([http://www.php.net/manual/es/pdo.installation.php cómo compilar PHP con compatibilidad SQLite usando PDO]).',
        'config-support-oracle' => '* $1 es una base de datos comercial a nivel empresarial ([http://www.php.net/manual/es/oci8.installation.php cómo compilar PHP con compatibilidad con OCI8])',
-       'config-support-ibm_db2' => '* $1 es una base de datos comercial a nivel empresarial ([http://www.php.net/manual/es/ibm-db2.installation.php cómo compilar PHP con compatibilidad con ibm_db2]).', # Fuzzy
        'config-header-mysql' => 'Configuración de MySQL',
        'config-header-postgres' => 'Configuración de PostgreSQL',
        'config-header-sqlite' => 'Configuración de SQLite',
        'config-header-oracle' => 'Configuración de Oracle',
-       'config-header-ibm_db2' => 'Configuración de IBM DB2',
        'config-invalid-db-type' => 'Tipo de base de datos inválida',
        'config-missing-db-name' => 'Debes introducir un valor para "Nombre de la base de datos"',
        'config-missing-db-host' => 'Debe introducir un valor para "Servidor (host) de base de datos"',
@@ -4950,7 +4937,7 @@ Esto '''no se recomienda''' a menos que esté teniendo problemas con su wiki.",
        'config-upgrade-done-no-regenerate' => 'Actualización completa.
 
 Usted puede ahora [$1  empezar a usar su wiki].',
-       'config-regenerate' => 'Regenerar <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Regenerar LocalSettings.php →',
        'config-show-table-status' => '<code>SHOW TABLE STATUS</code> ha fallado!',
        'config-unknown-collation' => "'''Advertencia:''' La base de datos está utilizando una intercalación no reconocida.",
        'config-db-web-account' => 'Cuenta de base de datos para acceso Web',
@@ -4980,7 +4967,6 @@ Las bases de datos MyISAM tienden a corromperse más a menudo que las bases de d
 Esto es más eficiente que el modo UTF-8 de MySQL y le permite utilizar la gama completa de caracteres Unicode.
 
 En '''modo UTF-8''', MySQL sabrá qué conjunto de caracteres emplean sus datos y puede presentarlos y convertirlos adecuadamente, pero no le permitirá almacenar caracteres por encima del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plano multilingüe básico].",
-       'config-ibm_db2-low-db-pagesize' => "Su base de datos DB2 tiene un espacio de tablas por defecto con un tamaño de página insuficiente. El tamaño de página tiene que ser '''32 K''' o superior.",
        'config-site-name' => 'Nombre del wiki:',
        'config-site-name-help' => 'Esto aparecerá en la barra de título del navegador y en varios otros lugares.',
        'config-site-name-blank' => 'Ingresar un nombre de sitio.',
@@ -5568,13 +5554,10 @@ Asennus saattaa epäonnistua!",
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
-       'config-support-ibm_db2' => '* $1 on kaupallinen tietokanta yrityskäyttöön.', # Fuzzy
        'config-header-mysql' => 'MySQL-asetukset',
        'config-header-postgres' => 'PostgreSQL-asetukset',
        'config-header-sqlite' => 'SQLite-asetukset',
        'config-header-oracle' => 'Oracle-asetukset',
-       'config-header-ibm_db2' => 'IBM DB2 -asetukset',
        'config-invalid-db-type' => 'Virheellinen tietokantatyyppi',
        'config-missing-db-name' => 'Kenttä »Tietokannan nimi» on pakollinen',
        'config-invalid-db-name' => '”$1” ei kelpaa tietokannan nimeksi.
@@ -5598,7 +5581,7 @@ Tämä '''ei ole suositeltavaa''', jos wikissäsi ei ole ongelmia.",
        'config-upgrade-done-no-regenerate' => 'Päivitys valmis.
 
 Voit [$1 aloittaa wikin käytön].',
-       'config-regenerate' => 'Luo <code>LocalSettings.php</code> uudelleen →',
+       'config-regenerate' => 'Luo LocalSettings.php uudelleen →',
        'config-show-table-status' => 'Kysely <code>SHOW TABLE STATUS</code> epäonnistui!',
        'config-mysql-engine' => 'Tallennusmoottori',
        'config-mysql-innodb' => 'InnoDB',
@@ -5903,7 +5886,6 @@ Envisagez de placer la base de données ailleurs, par exemple dans <code>/var/li
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => "MediaWiki supporte ces systèmes de bases de données :
 
 $1
@@ -5913,12 +5895,10 @@ Si vous ne voyez pas le système de base de données que vous essayez d'utiliser
        'config-support-postgres' => "* $1 est un système de base de données populaire et ''open source'' qui peut être une alternative à MySQL ([http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). Il peut contenir quelques bogues mineurs et n'est pas recommandé dans un environnement de production.",
        'config-support-sqlite' => '* $1 est un système de base de données léger qui est bien supporté. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], utilise PDO)',
        'config-support-oracle' => '* $1 est un système commercial de gestion de base de données d’entreprise. ([http://www.php.net/manual/en/oci8.installation.php Comment compiler PHP avec le support OCI8])',
-       'config-support-ibm_db2' => "* $1 est une base de données d'entreprise commerciale. ([http://www.php.net/manual/en/ibm-db2.installation.php Comment compiler PHP avec le support de DB2 d’IBM])",
        'config-header-mysql' => 'Paramètres de MySQL',
        'config-header-postgres' => 'Paramètres de PostgreSQL',
        'config-header-sqlite' => 'Paramètres de SQLite',
        'config-header-oracle' => 'Paramètres d’Oracle',
-       'config-header-ibm_db2' => 'paramètres de IBM DB2',
        'config-invalid-db-type' => 'Type de base de données non valide',
        'config-missing-db-name' => 'Vous devez saisir une valeur pour « Nom de la base de données »',
        'config-missing-db-host' => "Vous devez entrer une valeur pour « l'hôte de la base de données »",
@@ -5980,7 +5960,7 @@ Ce '''n'est pas recommandé''' sauf si vous rencontrez des problèmes avec votre
        'config-upgrade-done-no-regenerate' => 'Mise à jour terminée.
 
 Vous pouvez maintenant [$1 commencer à utiliser votre wiki].',
-       'config-regenerate' => 'Regénérer <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Regénérer LocalSettings.php →',
        'config-show-table-status' => 'Échec de la requête <code>SHOW TABLE STATUS</code> !',
        'config-unknown-collation' => "'''Attention:''' La base de données effectue un classement alphabétique (''collation'') inconnu.",
        'config-db-web-account' => "Compte de la base de données pour l'accès Web",
@@ -6007,7 +5987,6 @@ Si votre installation MySQL supporte InnoDB, il est fortement recommandé que vo
 
 En ''mode binaire'', MediaWiki stocke le texte UTF-8 dans des champs binaires de la base de données. C'est plus efficace que le ''mode UTF-8'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode.
 En ''mode UTF-8'', MySQL connaîtra le jeu de caractères de vos données et pourra présenter et convertir les données de manière appropriée, mais il ne vous laissera pas stocker les caractères au-dessus du [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingue de base] (en anglais).",
-       'config-ibm_db2-low-db-pagesize' => "Votre base de données DB2 a un espace de stockage par défaut avec un pagesize insuffisant. Le pagesize doit être au minimum '''32K'''.",
        'config-site-name' => 'Nom du wiki :',
        'config-site-name-help' => 'Il apparaîtra dans la barre de titre du navigateur et en divers autres endroits.',
        'config-site-name-blank' => 'Entrez un nom de site.',
@@ -6286,18 +6265,16 @@ Portant, MediaWiki at fôta de PHP $2 ou ben ples hôt.',
        'config-sqlite-dir' => 'Dossiér de les balyês SQLite :',
        'config-oracle-def-ts' => "Èspâço de stocâjo (''tablespace'') per dèfôt :",
        'config-oracle-temp-ts' => "Èspâço de stocâjo (''tablespace'') temporèro :",
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-header-mysql' => 'Paramètres de MySQL',
        'config-header-postgres' => 'Paramètres de PostgreSQL',
        'config-header-sqlite' => 'Paramètres de SQLite',
        'config-header-oracle' => 'Paramètres d’Oracle',
-       'config-header-ibm_db2' => 'Paramètres d’IBM DB2',
        'config-invalid-db-type' => 'Tipo de bâsa de balyês envalido',
        'config-missing-db-name' => 'Vos dête buchiér una valor por « Nom de la bâsa de balyês »',
        'config-missing-db-host' => 'Vos dête buchiér una valor por « Hôto de la bâsa de balyês »',
        'config-missing-db-server-oracle' => 'Vos dête buchiér una valor por « TNS de la bâsa de balyês »',
        'config-sqlite-readonly' => 'Lo fichiér <code>$1</code> est pas accèssiblo en ècritura.',
-       'config-regenerate' => 'Refâre <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Refâre LocalSettings.php →',
        'config-show-table-status' => 'Falyita de la requéta <code>SHOW TABLE STATUS</code> !',
        'config-db-web-account' => 'Compto de la bâsa de balyês por l’accès vouèbe',
        'config-db-web-account-same' => 'Utilisâd lo mémo compto que por l’enstalacion',
@@ -6720,7 +6697,6 @@ Considere poñer a base de datos nun só lugar, por exemplo en <code>/var/lib/me
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki soporta os seguintes sistemas de bases de datos:
 
 $1
@@ -6730,12 +6706,10 @@ Se non ve listado a continuación o sistema de base de datos que intenta usar, s
        'config-support-postgres' => '* $1 é un sistema de base de datos popular e de código aberto como alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar o PHP con soporte PostgreSQL]). É posible que haxa algúns pequenos erros e non se recomenda o seu uso nunha contorna de produción.',
        'config-support-sqlite' => '* $1 é un sistema de base de datos lixeiro moi ben soportado. ([http://www.php.net/manual/en/pdo.installation.php Como compilar o PHP con soporte SQLite], emprega PDO)',
        'config-support-oracle' => '* $1 é un sistema comercial de xestión de base de datos de empresa. ([http://www.php.net/manual/en/oci8.installation.php Como compilar o PHP con soporte OCI8])',
-       'config-support-ibm_db2' => '* $1 é unha base de datos de empresa comercial. ([http://www.php.net/manual/en/ibm-db2.installation.php Como compilar o PHP con soporte IBM DB2])',
        'config-header-mysql' => 'Configuración do MySQL',
        'config-header-postgres' => 'Configuración do PostgreSQL',
        'config-header-sqlite' => 'Configuración do SQLite',
        'config-header-oracle' => 'Configuración do Oracle',
-       'config-header-ibm_db2' => 'Configuración de IBM DB2',
        'config-invalid-db-type' => 'Tipo de base de datos incorrecto',
        'config-missing-db-name' => 'Debe escribir un valor "Nome da base de datos"',
        'config-missing-db-host' => 'Debe escribir un valor "Servidor da base de datos"',
@@ -6797,7 +6771,7 @@ Isto '''non é recomendable''' a menos que estea a ter problemas co seu wiki.",
        'config-upgrade-done-no-regenerate' => 'Actualización completada.
 
 Xa pode [$1 comezar a usar o seu wiki].',
-       'config-regenerate' => 'Rexenerar <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Rexenerar LocalSettings.php →',
        'config-show-table-status' => 'A pescuda <code>SHOW TABLE STATUS</code> fallou!',
        'config-unknown-collation' => "'''Atención:''' A base de datos está a empregar unha clasificación alfabética irrecoñecible.",
        'config-db-web-account' => 'Conta na base de datos para o acceso á internet',
@@ -6828,7 +6802,6 @@ Isto é máis eficaz ca o modo UTF-8 de MySQL e permítelle usar o rango complet
 
 No '''modo UTF-8''', MySQL saberá o xogo de caracteres dos seus datos e pode presentar e converter os datos de maneira axeitada,
 pero non lle deixará gardar caracteres por riba do [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingüe básico].",
-       'config-ibm_db2-low-db-pagesize' => "A súa base de datos DB2 ten un espazo de táboa cun tamaño de páxina insuficiente. O tamaño de páxina debe ser '''32k''' ou maior.",
        'config-site-name' => 'Nome do wiki:',
        'config-site-name-help' => 'Isto aparecerá na barra de títulos do navegador e noutros lugares.',
        'config-site-name-blank' => 'Escriba o nome do sitio.',
@@ -7438,7 +7411,6 @@ $1
 כדאי לשקול לשים את מסד הנתונים במקום אחר לגמרי, למשל ב־<code dir="ltr">/var/lib/mediawiki/yourwik</code>.',
        'config-oracle-def-ts' => 'מרחב טבלאות לפי בררת מחדל (default tablespace):',
        'config-oracle-temp-ts' => 'מרחב טבלאות זמני (temporary tablespace):',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'מדיה־ויקי תומכת במערכות מסדי הנתונים הבאות:
 
 $1
@@ -7448,12 +7420,10 @@ $1
        'config-support-postgres' => '$1 הוא מסד נתונים נפוץ בקוד פתוח והוא נפוץ בתור חלופה ל־MySQL (ר׳ [http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). ייתכן שיש בתצורה הזאת באגים מסוימים והיא לא מומלצת לסביבות מבצעיות.',
        'config-support-sqlite' => '* $1 הוא מסד נתונים קליל עם תמיכה טובה מאוד. (ר׳ [http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], משתמש ב־PDO)',
        'config-support-oracle' => '* $1 הוא מסד נתונים עסקי מסחרי. (ר׳ [http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])',
-       'config-support-ibm_db2' => '* $1 הוא מסד נתונים מסחרי ארגוני. ([http://www.php.net/manual/en/ibm-db2.installation.php How to compile PHP with IBM DB2 support])',
        'config-header-mysql' => 'הגדרות MySQL',
        'config-header-postgres' => 'הגדרות PostgreSQL',
        'config-header-sqlite' => 'הגדרות SQLite',
        'config-header-oracle' => 'הגדרות Oracle',
-       'config-header-ibm_db2' => 'תצורת IBM DB2',
        'config-invalid-db-type' => 'סוג מסד הנתונים שגוי',
        'config-missing-db-name' => 'עליך להזין ערך עבור "שם מסד הנתונים"',
        'config-missing-db-host' => 'יש להכניס ערך לשדה "שרת מסד הנתונים"',
@@ -7515,7 +7485,7 @@ chmod a+w $3</pre></div>',
        'config-upgrade-done-no-regenerate' => 'השדרוג הושלם.
 
 עכשיו אפשר [$1 להתחיל להשתמש בוויקי שלכם].',
-       'config-regenerate' => 'לחולל מחדש את <code>LocalSettings.php</code> ←',
+       'config-regenerate' => 'לחולל מחדש את LocalSettings.php ←',
        'config-show-table-status' => 'שאילתת <code>SHOW TABLE STATUS</code> נכשלה!',
        'config-unknown-collation' => "'''אזהרה:''' מסד הנתונים משתמש בשיטת מיון שאינה מוּכּרת.",
        'config-db-web-account' => 'חשבון במסד הנתונים לגישה מהרשת',
@@ -7545,7 +7515,6 @@ chmod a+w $3</pre></div>',
 זה יעיל יותר ממצב UTF-8 של MySQL ומאפשר לכם להשתמש בכל הטווח של תווי יוניקוד.
 
 ב'''מצב UTF-8'''&rlm; (UTF-8 mode)&rlm; MySQL יֵדַע מה קבוצת התווים (character set) של הטקסט שלכם ויציג וימיר אותו בהתאם, אבל לא יאפשר לכם לשמור תווים שאינם נמצאים בטווח הרב־לשוני הבסיסי ([//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane]).",
-       'config-ibm_db2-low-db-pagesize' => "במסד הנתונים DB2 שלכם יש מרחב טבלאות לפי מחדלי עם גודל דף בלתי־מספיק. גודל הדף צריך להיות '''32K''' או יותר.",
        'config-site-name' => 'שם הוויקי:',
        'config-site-name-help' => 'זה יופיע בשורת הכותרת של הדפדפן ובמקומות רבים אחרים.',
        'config-site-name-blank' => 'נא להזין שם לאתר.',
@@ -7992,7 +7961,7 @@ Zo by je na MediaWiki $1 aktualizował, klikń na '''Dale'''.",
        'config-upgrade-done-no-regenerate' => 'Aktualizacija dokónčena.
 
 Móžeš nětko [$1 swój wiki wužiwać].',
-       'config-regenerate' => '<code>LocalSettings.php</code> znowa wutworić →',
+       'config-regenerate' => 'LocalSettings.php znowa wutworić →',
        'config-show-table-status' => 'Naprašowanje <code>SHOW TABLE STATUS</code> je so njeporadźiło!',
        'config-unknown-collation' => "'''Warnowanje:''' Datowa banka njeznatu kolaciju wužiwa.",
        'config-db-web-account' => 'Konto datoweje banki za webpřistup',
@@ -8379,7 +8348,6 @@ A telepítő készít egy <code>.htaccess</code> fájlt az adatbázis mellé, az
 Fontold meg az adatbázis más helyre történő elhelyezését, például a <code>/var/lib/mediawiki/tewikid</code> könyvtárba.",
        'config-oracle-def-ts' => 'Alapértelmezett táblatér:',
        'config-oracle-temp-ts' => 'Ideiglenes táblatér:',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'A MediaWiki a következő adatbázisrendszereket támogatja:
 
 $1
@@ -8389,12 +8357,10 @@ Ha az alábbi listán nem találod azt a rendszert, melyet használni szeretnél
        'config-support-postgres' => '* A $1 népszerű, nyílt forráskódú adatbázisrendszer, a MySQL alternatívája ([http://www.php.net/manual/en/pgsql.installation.php Hogyan fordítható a PHP PostgreSQL-támogatással]). Több apró, javítatlan hiba is előfordulhat, így nem ajánlott éles környezetben használni.',
        'config-support-sqlite' => '* Az $1 egy könnyű, nagyon jól támogatott adatbázisrendszer. ([http://www.php.net/manual/en/pdo.installation.php Hogyan fordítható a PHP SQLite-támogatással], PDO-t használ)',
        'config-support-oracle' => '* Az $1 kereskedelmi, vállalati adatbázisrendszer. ([http://www.php.net/manual/en/oci8.installation.php Hogyan fordítható a PHP OCI8-támogatással])',
-       'config-support-ibm_db2' => '* Az $1 kereskedelmi vállalati adatbázisrendszer.', # Fuzzy
        'config-header-mysql' => 'MySQL-beállítások',
        'config-header-postgres' => 'PostgreSQL-beállítások',
        'config-header-sqlite' => 'SQLite-beállítások',
        'config-header-oracle' => 'Oracle-beállítások',
-       'config-header-ibm_db2' => 'IBM DB2-beállítások',
        'config-invalid-db-type' => 'Érvénytelen adatbázistípus',
        'config-missing-db-name' => 'Meg kell adnod az „Adatbázisnév” értékét',
        'config-missing-db-host' => 'Meg kell adnod az „Adatbázis hosztneve” értékét',
@@ -8456,7 +8422,7 @@ Ez '''nem ajánlott''', csak akkor, ha problémák vannak a wikivel.",
        'config-upgrade-done-no-regenerate' => "A frissítés befejeződött.
 
 Most már '''[$1 beléphetsz a wikibe]'''.",
-       'config-regenerate' => '<code>LocalSettings.php</code> elkészítése újra →',
+       'config-regenerate' => 'LocalSettings.php elkészítése újra →',
        'config-show-table-status' => 'A <code>SHOW TABLE STATUS</code> lekérdezés nem sikerült!',
        'config-unknown-collation' => "'''Figyelmeztetés:''' az adatbázis ismeretlen egybevetést használ.",
        'config-db-web-account' => 'A webes hozzáférésnél használt adatbázisfiók',
@@ -8485,7 +8451,6 @@ A '''MyISAM''' gyorsabb megoldás lehet egyfelhasználós vagy csak olvasható k
 Ez sokkal hatékonyabb a MySQL UTF-8-as módjánál, és lehetővé teszi a teljes Unicode-karakterkészlet használatát.
 
 '''UTF-8-as módban''' a MySQL tudni fogja,hogy az adatok milyen karakterkészlettel rendelkeznek, és megfelelően átalakítja őket, azonban nem tárolhatóak olyan karakterek, melyek a [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] felett vannak.",
-       'config-ibm_db2-low-db-pagesize' => "A DB2 adatbázisodnak alapértelmezett táblatere van elégtelen lapmérettel. A lapméretnek legalább '''32K'''-nak kell lennie.",
        'config-site-name' => 'A wiki neve:',
        'config-site-name-help' => 'A böngésző címsorában és még számos más helyen jelenik meg.',
        'config-site-name-blank' => 'Add meg az oldal nevét.',
@@ -9010,7 +8975,6 @@ Considera poner le base de datos in un loco completemente differente, per exempl
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki supporta le sequente systemas de base de datos:
 
 $1
@@ -9020,12 +8984,10 @@ Si tu non vide hic infra le systema de base de datos que tu tenta usar, alora se
        'config-support-postgres' => '* $1 es un systema de base de datos popular e open source, alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar PHP con supporto de PostgreSQL]). Es possibile que resta alcun minor defectos non resolvite, dunque illo non es recommendate pro uso in un ambiente de production.',
        'config-support-sqlite' => '* $1 es un systema de base de datos legier que es multo ben supportate. ([http://www.php.net/manual/en/pdo.installation.php Como compilar PHP con supporto de SQLite], usa PDO)',
        'config-support-oracle' => '* $1 es un banca de datos commercial pro interprisas. ([http://www.php.net/manual/en/oci8.installation.php Como compilar PHP con supporto de OCI8])',
-       'config-support-ibm_db2' => '* $1 es un systema commercial de base de datos pro interprisas.', # Fuzzy
        'config-header-mysql' => 'Configuration de MySQL',
        'config-header-postgres' => 'Configuration de PostgreSQL',
        'config-header-sqlite' => 'Configuration de SQLite',
        'config-header-oracle' => 'Configuration de Oracle',
-       'config-header-ibm_db2' => 'Configurationes pro IBM DB2',
        'config-invalid-db-type' => 'Typo de base de datos invalide',
        'config-missing-db-name' => 'Tu debe entrar un valor pro "Nomine de base de datos"',
        'config-missing-db-host' => 'Tu debe entrar un valor pro "Host del base de datos"',
@@ -9087,7 +9049,7 @@ Isto '''non es recommendate''' si tu non ha problemas con tu wiki.",
        'config-upgrade-done-no-regenerate' => 'Actualisation complete.
 
 Tu pote ora [$1 comenciar a usar tu wiki].',
-       'config-regenerate' => 'Regenerar <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Regenerar LocalSettings.php →',
        'config-show-table-status' => 'Le consulta <code>SHOW TABLE STATUS</code> falleva!',
        'config-unknown-collation' => "'''Aviso:''' Le base de datos usa un collation non recognoscite.",
        'config-db-web-account' => 'Conto de base de datos pro accesso via web',
@@ -9117,7 +9079,6 @@ Le bases de datos MyISAM tende a esser corrumpite plus frequentemente que le bas
 Isto es plus efficiente que le modo UTF-8 de MySQL, e permitte usar le rango complete de characteres Unicode.
 
 In '''modo UTF-8''', MySQL cognoscera le codification de characteres usate pro tu dats, e pote presentar e converter lo appropriatemente, ma illo non permittera immagazinar characteres supra le [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Basic].",
-       'config-ibm_db2-low-db-pagesize' => 'Tu base de datos DB2 ha un "tablespace" (spatio de tabella) predefinite con un "pagesize" (dimension de pagina) insufficiente. Le "pagesize" debe esser \'\'\'32K\'\'\' o plus.',
        'config-site-name' => 'Nomine del wiki:',
        'config-site-name-help' => 'Isto apparera in le barra de titulo del navigator e in varie altere locos.',
        'config-site-name-blank' => 'Entra un nomine de sito.',
@@ -9625,7 +9586,7 @@ Tindakan ini '''tidak dianjurkan''' kecuali jika Anda mengalami masalah dengan w
        'config-upgrade-done-no-regenerate' => 'Pemutakhiran selesai.
 
 Anda sekarang dapat [$1 mulai menggunakan wiki Anda].',
-       'config-regenerate' => 'Regenerasi <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Regenerasi LocalSettings.php →',
        'config-show-table-status' => 'Kueri <code>SHOW TABLE STATUS</code> gagal!',
        'config-unknown-collation' => "'''Peringatan:''' basis data menggunakan kolasi yang tidak dikenal.",
        'config-db-web-account' => 'Akun basis data untuk akses web',
@@ -10439,7 +10400,7 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => 'アップグレードが完了しました。
 
 [$1 ウィキの使用を開始]することができます。',
-       'config-regenerate' => '<code>LocalSettings.php</code> を再生成→',
+       'config-regenerate' => 'LocalSettings.php を再生成→',
        'config-show-table-status' => '<code>SHOW TABLE STATUS</code> クエリが失敗しました!',
        'config-unknown-collation' => "'''警告:''' データベースは認識されない照合を使用しています。",
        'config-db-web-account' => 'ウェブアクセスのためのデータベースアカウント',
@@ -11142,7 +11103,6 @@ MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전
        'config-oracle-def-ts' => '기본 테이블공간:',
        'config-oracle-temp-ts' => '임시 테이블공간:',
        'config-type-oracle' => '오라클',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => '미디어위키는 다음의 데이터베이스 시스템을 지원합니다:
 
 $1
        'config-support-postgres' => '* $1은 MySQL의 대안으로 인기 있는 오픈 소스 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL을 지원하여 PHP를 컴파일하는 방법]) 몇가지 사소한 해결하지 못한 버그가 있을 수 있으며, 이를 제작 환경에서 사용하지 않는 것이 좋습니다.',
        'config-support-sqlite' => '* $1는 매우 잘 지원하는 가벼운 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pdo.installation.php SQLite를 지원하여 PHP를 컴파일하는 방법], PDO 사용)',
        'config-support-oracle' => '* $1은 상용 엔터프라이스 데이터베이스입니다. ([http://www.php.net/manual/en/oci8.installation.php OCI8을 지원하여 PHP를 컴파일하는 방법])',
-       'config-support-ibm_db2' => '* $1는 상용 엔터프라이즈 데이터베이스입니다.([http://www.php.net/manual/en/ibm-db2.installation.php IBM DB2를 지원하여 PHP를 컴파일하는 방법])',
        'config-header-mysql' => 'MySQL 설정',
        'config-header-postgres' => 'PostgreSQL 설정',
        'config-header-sqlite' => 'SQLite 설정',
        'config-header-oracle' => '오라클 설정',
-       'config-header-ibm_db2' => 'IBM DB2 설정',
        'config-invalid-db-type' => '잘못된 데이터베이스 종류',
        'config-missing-db-name' => '"데이터베이스 이름"에 대한 값을 입력해야 합니다',
        'config-missing-db-host' => '"데이터베이스 호스트"에 대한 값을 입력해야 합니다',
@@ -11219,7 +11177,7 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => '업그레이드가 완료되었습니다.
 
 이제 [$1 위키를 시작]할 수 있습니다.',
-       'config-regenerate' => '<code>LocalSettings.php</code> 다시 만들기 →',
+       'config-regenerate' => 'LocalSettings.php 다시 만들기 →',
        'config-show-table-status' => '<code>SHOW TABLE STATUS</code> 쿼리를 실패했습니다!',
        'config-unknown-collation' => "'''경고:''' 데이터베이스가 인식하지 않는 정렬을 사용하고 있습니다.",
        'config-db-web-account' => '웹 접근을 위한 데이터베이스 계정',
@@ -11249,7 +11207,6 @@ MyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실
 MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.
 '''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 문자 집합을 알고 있기 때문에 적절하게 표현하고 변환할 수 있지만
 [//ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%ED%8F%89%EB%A9%B4#.EA.B8.B0.EB.B3.B8_.EB.8B.A4.EA.B5.AD.EC.96.B4_.ED.8F.89.EB.A9.B4 기본 다국어 평면] 밖의 문자를 저장할 수 없습니다.",
-       'config-ibm_db2-low-db-pagesize' => "DB2 데이터베이스에 부족한 페이지 크기가 기본 테이블 공간에 있습니다. 페이지 크기는 '''32K''' 이상이어야 합니다.",
        'config-site-name' => '위키 이름:',
        'config-site-name-help' => '브라우저 제목 표시줄과 다른 여러 곳에 나타납니다.',
        'config-site-name-blank' => '사이트 이름을 입력하세요.',
@@ -12179,13 +12136,10 @@ Wann et de Kont net gëtt, a wann den Installatiouns-Kont genuch Rechter huet, g
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
-       'config-support-ibm_db2' => '* $1 ass eng kommerziell Firma fir Datebanken', # Fuzzy
        'config-header-mysql' => 'MySQL-Astellungen',
        'config-header-postgres' => 'PostgreSQL-Astellungen',
        'config-header-sqlite' => 'SQLite-Astellungen',
        'config-header-oracle' => 'Oracle-Astellungen',
-       'config-header-ibm_db2' => 'IBM DB2-Astellungen',
        'config-invalid-db-type' => 'Net valabelen Datebank-Typ',
        'config-missing-db-name' => 'Dir musst en Numm fir de Wäert "Numm vun der Datebank" uginn',
        'config-missing-db-host' => 'Dir musst e Wäert fir "Database host" uginn',
@@ -12200,7 +12154,7 @@ E gëtt fir den Numm vum SQLite Date-Fichier benotzt.',
        'config-upgrade-done-no-regenerate' => "D'Aktualisatioun ass ofgeschloss.
 
 Dir kënnt elo [$1 ufänken Är Wiki ze benotzen]",
-       'config-regenerate' => '<code>LocalSettings.php</code> regeneréieren →',
+       'config-regenerate' => 'LocalSettings.php regeneréieren →',
        'config-db-web-account' => 'Datebankkont fir den Accès iwwer de Web',
        'config-db-web-account-same' => 'Dee selwechte Kont wéi bei der Installatioun benotzen',
        'config-db-web-create' => 'De Kont uleeë wann et e net scho gëtt',
@@ -12790,7 +12744,6 @@ $1
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'МедијаВики ги поддржува следниве системи на бази на податоци:
 
 $1
        'config-support-postgres' => '* $1 е популарен систем на бази на податоци со отворен код кој претставува алтернатива на MySQL ([http://www.php.net/manual/en/pgsql.installation.php како да составите PHP со поддршка за PostgreSQL]). Може сè уште да има некои грешки. па затоа не се препорачува за употреба во производна средина.',
        'config-support-sqlite' => '* $1 е лесен систем за бази на податоци кој е многу добро поддржан. ([http://www.php.net/manual/en/pdo.installation.php Како да составите PHP со поддршка за SQLite], користи PDO)',
        'config-support-oracle' => '* $1 е база на податоци на комерцијално претпријатие. ([http://www.php.net/manual/en/oci8.installation.php Како да составите PHP со поддршка за OCI8])',
-       'config-support-ibm_db2' => '* $1 е комерцијална база на податоциза фирми. ([http://www.php.net/manual/en/ibm-db2.installation.php Како да составите PHP со поддршка за IBM DB2])',
        'config-header-mysql' => 'Нагодувања на MySQL',
        'config-header-postgres' => 'Нагодувања на PostgreSQL',
        'config-header-sqlite' => 'Нагодувања на SQLite',
        'config-header-oracle' => 'Нагодувања на Oracle',
-       'config-header-ibm_db2' => 'Нагодувања на IBM DB2',
        'config-invalid-db-type' => 'Неважечки тип на база',
        'config-missing-db-name' => 'Мора да внесете значење за параметарот „Име на базата“',
        'config-missing-db-host' => 'Мора да внесете вредност за „Домаќин на базата на податоци“',
@@ -12867,7 +12818,7 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => 'Надградбата заврши.
 
 Сега можете да [$1 почнете да го користите викито].',
-       'config-regenerate' => 'Пресоздај <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Пресоздај LocalSettings.php →',
        'config-show-table-status' => 'Барањето <code>SHOW TABLE STATUS</code> не успеа!',
        'config-unknown-collation' => "'''Предупредување:''' Базата корисни непрепознаена упатна споредба.",
        'config-db-web-account' => 'Сметка на базата за мрежен пристап',
@@ -12897,7 +12848,6 @@ chmod a+w $3</pre>',
 Ова е поефикасно отколку  TF-8 режимот на MySQL, и ви овозможува да ја користите целата палета на уникодни знаци.
 
 Во '''UTF-8 режим''', MySQL ќе знае на кој збир знаци припаѓаат вашите податоци, и може соодветно да ги претстави и претвори, но нема да ви дозволи да складиратезнаци над [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Основната повеќејазична рамнина].",
-       'config-ibm_db2-low-db-pagesize' => "Вашата база на податоци DB2 има основно-зададен табеларен простор со недоволна големина на страниците. Таа треба да изнесува барем '''32 килобајти'''.",
        'config-site-name' => 'Име на викито:',
        'config-site-name-help' => 'Ова ќе се појавува во заглавната лента на прелистувачот и на разни други места.',
        'config-site-name-blank' => 'Внесете име на мрежното место.',
@@ -13177,7 +13127,7 @@ $1
        'config-connection-error' => '$1.
 
 താഴെ നൽകിയിരിക്കുന്ന ഹോസ്റ്റ്, ഉപയോക്തൃനാമം, രഹസ്യവാക്ക് എന്നിവ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.',
-       'config-regenerate' => '<code>LocalSettings.php</code> പുനഃസൃഷ്ടിക്കുക →',
+       'config-regenerate' => 'LocalSettings.php പുനഃസൃഷ്ടിക്കുക →',
        'config-mysql-engine' => 'സ്റ്റോറേജ് എൻജിൻ:',
        'config-site-name' => 'വിക്കിയുടെ പേര്:',
        'config-site-name-help' => 'ഇത് ബ്രൗസറിന്റെ ടൈറ്റിൽ ബാറിലും മറ്റനേകം ഇടങ്ങളിലും പ്രദർശിപ്പിക്കപ്പെടും.',
@@ -13532,7 +13482,7 @@ $messages['nan'] = array(
 * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki的公布列單]',
 );
 
-/** Norwegian Bokmål (norsk (bokmål)‎)
+/** Norwegian Bokmål (norsk bokmål)
  * @author Event
  * @author Nghtwlkr
  * @author 아라
@@ -13763,7 +13713,6 @@ Vurder å plassere databasen et helt annet sted, for eksempel i <code>/var/lib/m
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki støtter følgende databasesystem:
 
 $1
@@ -13773,12 +13722,10 @@ Hvis du ikke ser databasesystemet du prøver å bruke i listen nedenfor, følg i
        'config-support-postgres' => '* $1 er et populært åpen kildekode-databasesystem som er et alternativ til MySQL ([http://www.php.net/manual/en/pgsql.installation.php hvordan kompilere PHP med PostgreSQL-støtte]). Det kan være noen små utestående feil og det anbefales ikke for bruk i et produksjonsmiljø.',
        'config-support-sqlite' => '* $1 er et lettvekts-databasesystem som er veldig godt støttet. ([http://www.php.net/manual/en/pdo.installation.php hvordan kompilere PHP med SQLite-støtte], bruker PDO)',
        'config-support-oracle' => '* $1 er en kommersiell bedriftsdatabase. ([http://www.php.net/manual/en/oci8.installation.php Hvordan kompilere PHP med OCI8-støtte])',
-       'config-support-ibm_db2' => '* $1 er en kommersiell bedriftsdatabase.', # Fuzzy
        'config-header-mysql' => 'MySQL-innstillinger',
        'config-header-postgres' => 'PostgreSQL-innstillinger',
        'config-header-sqlite' => 'SQLite-innstillinger',
        'config-header-oracle' => 'Oracle-innstillinger',
-       'config-header-ibm_db2' => 'IBM DB2-innstillinger',
        'config-invalid-db-type' => 'Ugyldig databasetype',
        'config-missing-db-name' => 'Du må skrive inn en verdi for «Databasenavn»',
        'config-missing-db-host' => 'Du må skrive inn en verdi for «Databasevert»',
@@ -13840,7 +13787,7 @@ Dette er '''ikke anbefalt''' med mindre du har problemer med wikien din.",
        'config-upgrade-done-no-regenerate' => 'Oppgradering fullført.
 
 Du kan nå [$1 begynne å bruke wikien din].',
-       'config-regenerate' => 'Regenerer <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Regenerer LocalSettings.php →',
        'config-show-table-status' => '<code>SHOW TABLE STATUS</code> etterspørselen mislyktes!',
        'config-unknown-collation' => "'''Advarsel:''' Databasen bruker en ukjent sortering.",
        'config-db-web-account' => 'Databasekonto for nettilgang',
@@ -13864,7 +13811,6 @@ Dette er mer effektivt enn MySQLs UTF-8 modus og tillater deg å bruke hele spek
 
 I '''UTF-8 mode''' vil MySQL vite hvilket tegnsett dataene dine er i og kan presentere og konvertere det på en riktig måte,
 men det vil ikke la deg lagre tegn over «[//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes the Basic Multilingual Plane]».",
-       'config-ibm_db2-low-db-pagesize' => "DB2-databasen din har et standard tabellområde med en utilstrekkelig pagesize. Pagesize må være '''32K''' eller større.",
        'config-site-name' => 'Navn på wiki:',
        'config-site-name-help' => 'Dette vil vises i tittellinjen i nettleseren og diverse andre steder.',
        'config-site-name-blank' => 'Skriv inn et nettstedsnavn.',
@@ -14268,7 +14214,6 @@ Overweeg om de database op een totaal andere plaats neer te zetten, bijvoorbeeld
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki ondersteunt de volgende databasesystemen:
 
 $1
@@ -14278,12 +14223,10 @@ Als u het databasesysteem dat u wilt gebruiken niet in de lijst terugvindt, volg
        'config-support-postgres' => '* $1 is een populair open source databasesysteem als alternatief voor MySQL ([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL]). Het is mogelijk dat er een aantal bekende problemen zijn met MediaWiki in combinatie met deze database en daarom wordt PostgreSQL niet aanbevolen voor een productieomgeving.',
        'config-support-sqlite' => '* $1 is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd zijn met ondersteuning voor SQLite]; gebruikt PDO)',
        'config-support-oracle' => '* $1 is een commerciële data voor grote bedrijven ([http://www.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).',
-       'config-support-ibm_db2' => '* $1 is een commerciële enterprisedatabase. ([http://www.php.net/manual/en/ibm-db2.installation.php Hoe PHP compolieren met ondersteuning voor IBM DB2])',
        'config-header-mysql' => 'MySQL-instellingen',
        'config-header-postgres' => 'PostgreSQL-instellingen',
        'config-header-sqlite' => 'SQLite-instellingen',
        'config-header-oracle' => 'Oracle-instellingen',
-       'config-header-ibm_db2' => 'Instellingen voor IBM DB2',
        'config-invalid-db-type' => 'Ongeldig databasetype',
        'config-missing-db-name' => 'U moet een waarde ingeven voor "Databasenaam"',
        'config-missing-db-host' => 'U moet een waarde invoeren voor "Databaseserver"',
@@ -14347,7 +14290,7 @@ Dit is '''niet aan te raden''' tenzij u problemen hebt met uw wiki.",
        'config-upgrade-done-no-regenerate' => 'Het bijwerken is afgerond.
 
 U kunt nu [$1 uw wiki gebruiken].',
-       'config-regenerate' => '<code>LocalSettings.php</code> opnieuw aanmaken →',
+       'config-regenerate' => 'LocalSettings.php opnieuw aanmaken →',
        'config-show-table-status' => 'Het uitvoeren van <code>SHOW TABLE STATUS</code> is mislukt!',
        'config-unknown-collation' => "'''Waarschuwing:''' de database gebruikt een collatie die niet wordt herkend.",
        'config-db-web-account' => 'Databasegebruiker voor webtoegang',
@@ -14378,7 +14321,6 @@ Dit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledig
 
 In '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.
 Het is dat niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
-       'config-ibm_db2-low-db-pagesize' => "Uw DB2-database heeft een standaard tablespace met een onvoldoende grote pagesize. De pagesize moet tenminste '''32K''' zijn.",
        'config-site-name' => 'Naam van de wiki:',
        'config-site-name-help' => 'Deze naam verschijnt in de titelbalk van browsers en op andere plaatsen.',
        'config-site-name-blank' => 'Geef een naam op voor de site.',
@@ -15201,7 +15143,6 @@ Zawiera ona nieopracowane dane użytkownika (adresy e-mail, zahaszowane hasła)
 Warto rozważyć umieszczenie w bazie danych zupełnie gdzie indziej, na przykład w <code>/var/lib/mediawiki/yourwiki</code> .",
        'config-oracle-def-ts' => 'Domyślna przestrzeń tabel',
        'config-oracle-temp-ts' => 'Przestrzeń tabel tymczasowych',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki może współpracować z następującymi systemami baz danych:
 
 $1
@@ -15211,12 +15152,10 @@ Poniżej wyświetlone są systemy baz danych gotowe do użycia. Jeżeli poniżej
        'config-support-postgres' => '* $1 jest popularnym systemem baz danych, często stosowanym zamiast MySQL  ([http://www.php.net/manual/en/pgsql.installation.php Zobacz, jak skompilować PHP ze wsparciem dla PostgreSQL]). Z powodu możliwości wystąpienia drobnych błędów, nie jest zalecana do wymagających wdrożeń.',
        'config-support-sqlite' => '* $1 jest niewielkim systemem bazy danych, z którym MediaWiki bardzo dobrze współpracuje. ([http://www.php.net/manual/en/pdo.installation.php Jak skompilować PHP ze wsparciem dla SQLite], korzystając z PDO)',
        'config-support-oracle' => '* $1 jest komercyjną profesjonalną bazą danych. ([http://www.php.net/manual/en/oci8.installation.php Jak skompilować PHP ze wsparciem dla OCI8])',
-       'config-support-ibm_db2' => '* $1 jest komercyjną zaawansowaną bazą danych.', # Fuzzy
        'config-header-mysql' => 'Ustawienia MySQL',
        'config-header-postgres' => 'Ustawienia PostgreSQL',
        'config-header-sqlite' => 'Ustawienia SQLite',
        'config-header-oracle' => 'Ustawienia Oracle',
-       'config-header-ibm_db2' => 'ustawienia dla IBM DB2',
        'config-invalid-db-type' => 'Nieprawidłowy typ bazy danych',
        'config-missing-db-name' => 'Należy wpisać wartość w polu „Nazwa bazy danych”',
        'config-missing-db-host' => 'Musisz wpisać wartość w polu „Serwer bazy danych”',
@@ -15278,7 +15217,7 @@ Jest to '''nie zalecane''', chyba że występują problemy z twoją wiki.",
        'config-upgrade-done-no-regenerate' => 'Aktualizacja zakończona.
 
 Możesz wreszcie [$1 zacząć korzystać ze swojej wiki].',
-       'config-regenerate' => 'Ponowne generowanie <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Ponowne generowanie LocalSettings.php →',
        'config-show-table-status' => 'Zapytanie „<code>SHOW TABLE STATUS</code>” nie powiodło się!',
        'config-unknown-collation' => "'''Uwaga''' – bazy danych używa nierozpoznanej metody porównywania.",
        'config-db-web-account' => 'Konto bazy danych dla dostępu przez WWW',
@@ -15308,7 +15247,6 @@ Bazy danych MyISAM mają tendencję do ulegania uszkodzeniom częściej niż baz
 Jest on bardziej wydajny niż tryb UTF-8 w MySQL i pozwala na używanie znaków pełnego zakresu Unicode.
 
 W '''trybie UTF-8''', MySQL będzie znać zestaw znaków w jakim zakodowano dane, można też przedstawić i przekonwertuj je odpowiednio, ale nie pozwoli Ci przechowywać znaków spoza [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes podstawowej płaszczyzny wielojęzyczności].",
-       'config-ibm_db2-low-db-pagesize' => "Baza danych DB2 posiada domyślny obszar tabel z niewystarczającym rozmiarem strony. Wartość rozmiaru strony musi być równa lub powyżej  '''32 K'''.",
        'config-site-name' => 'Nazwa wiki',
        'config-site-name-help' => 'Ten napis pojawi się w pasku tytułowym przeglądarki oraz w różnych innych miejscach.',
        'config-site-name-blank' => 'Wprowadź nazwę witryny.',
@@ -15745,7 +15683,6 @@ Lòn a comprend ij dat brut ëd l'utent (adrëssa ëd pòsta eletrònica, ciav t
 Ch'a consìdera ëd buté la base ëd dàit tuta antrega da n'àutra part, për esempi an <code>/var/lib/mediawiki/yourwiki</code>.",
        'config-oracle-def-ts' => 'Spassi dla tàula dë stàndard:',
        'config-oracle-temp-ts' => 'Spassi dla tàula temporani:',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => "MediaWiki a manten ij sistema ëd base ëd dàit sì-dapress:
 
 $1
@@ -15755,12 +15692,10 @@ S'a vëd pa listà sì-sota ël sistema ëd base ëd dàit ch'a preuva a dovré,
        'config-support-postgres' => "* $1 e l'é un sistema ëd base ëd dàit popolar a sorgiss duverta com alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php com compilé PHP con ël manteniment ëd PostgreSQL]). A peulo ess-ie chèich cit bigat, e a l'é nen arcomandà ëd dovrelo an n'ambient ëd produssion.",
        'config-support-sqlite' => "* $1 e l'é un sistema ëd base ëd dàit leger che a l'é motobin bin mantnù ([http://www.php.net/manual/en/pdo.installation.php com compilé PHP con ël manteniment ëd SQLite], a deuvra PDO)",
        'config-support-oracle' => "* $1 a l'é na base ëd dàit comersial për j'amprèise. ([http://www.php.net/manual/en/oci8.installation.php Com compilé PHP con ël manteniment OCI8])",
-       'config-support-ibm_db2' => "* $1 a l'é na base ëd dàit d'asiendal comersial.", # Fuzzy
        'config-header-mysql' => 'Ampostassion MySQL',
        'config-header-postgres' => 'Ampostassion PostgreSQL',
        'config-header-sqlite' => 'Ampostassion SQLite',
        'config-header-oracle' => 'Ampostassion Oracle',
-       'config-header-ibm_db2' => "Ampostassion d'IBM DB2",
        'config-invalid-db-type' => 'Sòrt ëd ëd base ëd dàit pa bon-a',
        'config-missing-db-name' => 'A dev buteje un valor për "Nòm ëd la base ëd dàit"',
        'config-missing-db-host' => 'A dev buteje un valor për "l\'òspit ëd la base ëd dàit"',
@@ -15820,7 +15755,7 @@ Sòn a l'è '''pa arcomandà''' gavà ch'a rancontra dij problema con soa wiki."
        'config-upgrade-done-no-regenerate' => 'Agiornament complet.
 
 It peule adess [$1 ancaminé a dovré toa wiki].',
-       'config-regenerate' => 'Generé torna <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Generé torna LocalSettings.php →',
        'config-show-table-status' => 'Arcesta <code>SHOW TABLE STATUS</code> falìa!',
        'config-unknown-collation' => "'''Avis:''' La base ëd dàit a deuvra na classificassion pa arconossùa.",
        'config-db-web-account' => "Cont dla base ëd dàit për l'acess a l'aragnà",
@@ -15850,7 +15785,6 @@ La base ëd dàit MyISAM a tira a corompse pi 'd soens che la base ëd dàit Inn
 Sòn a l'é pi eficient che la manera UTF-8 ëd MySQL, e a-j përmët ëd dovré l'ansema antregh ëd caràter Unicode.
 
 An '''manera UTF-8''', MySQL a conossrà an che ansem ëd caràter a son ij sò dat, e a peul presenteje e convertije apropriatament, ma a-j lassa pa memorisé ij caràter ëdzora al [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes pian multilenghìstich ëd base].",
-       'config-ibm_db2-low-db-pagesize' => "Soa base ëd dàit DB2 a l'ha në spassi d'ambaronament predefinì con na dimension ëd pàgina insuficent. La dimension ëd pàgina a dev esse '''32K''' o pi gròssa.",
        'config-site-name' => 'Nòm ëd la wiki:',
        'config-site-name-help' => "Sòn a comparirà ant la bara dël tìtol dël navigador e an vàire d'àutri pòst.",
        'config-site-name-blank' => "Ch'a buta un nòm ëd sit.",
@@ -16367,7 +16301,6 @@ Considere colocar a base de dados num local completamente diferente, como, por e
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'O MediaWiki suporta as seguintes plataformas de base de dados:
 
 $1
@@ -16377,12 +16310,10 @@ Se a plataforma que pretende usar não está listada abaixo, siga as instruçõe
        'config-support-postgres' => '* $1 é uma plataforma de base de dados comum, de fonte aberta, alternativa ao MySQL ([http://www.php.net/manual/en/pgsql.installation.php como compilar PHP com suporte PostgreSQL]). Poderão existir alguns pequenos problemas e não é recomendado o seu uso em ambientes de exploração/produção.',
        'config-support-sqlite' => '* $1 é uma plataforma de base de dados ligeira muito bem suportada. ([http://www.php.net/manual/en/pdo.installation.php Como compilar PHP com suporte SQLite], usa PDO)',
        'config-support-oracle' => '* $1 é uma base de dados de uma empresa comercial. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])',
-       'config-support-ibm_db2' => '* $1 é uma base de dados empresarial.', # Fuzzy
        'config-header-mysql' => 'Definições MySQL',
        'config-header-postgres' => 'Definições PostgreSQL',
        'config-header-sqlite' => 'Definições SQLite',
        'config-header-oracle' => 'Definições Oracle',
-       'config-header-ibm_db2' => 'Configurações da IBM DB2',
        'config-invalid-db-type' => 'O tipo de base de dados é inválido',
        'config-missing-db-name' => 'Tem de introduzir um valor para "Nome da base de dados"',
        'config-missing-db-host' => 'Tem de introduzir um valor para "Servidor da base de dados"',
@@ -16444,7 +16375,7 @@ Esta operação '''não é recomendada''' a menos que esteja a ter problemas com
        'config-upgrade-done-no-regenerate' => 'Actualização terminada.
 
 Agora pode [$1 começar a usar a sua wiki].',
-       'config-regenerate' => 'Regenerar o <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Regenerar o LocalSettings.php →',
        'config-show-table-status' => 'A consulta <code>SHOW TABLE STATUS</code> falhou!',
        'config-unknown-collation' => "'''Aviso:''' A base de dados está a utilizar uma colação ''(collation)'' desconhecida.",
        'config-db-web-account' => 'Conta na base de dados para acesso pela internet',
@@ -16475,7 +16406,6 @@ Isto é mais eficiente do que o modo UTF-8 do MySQL e permite que sejam usados t
 
 No modo '''UTF-8''', o MySQL saberá em que conjunto de caracteres os seus dados estão e pode apresentá-los e convertê-los da forma mais adequada,
 mas não lhe permitirá armazenar caracteres acima do [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Plano Multilingue Básico].",
-       'config-ibm_db2-low-db-pagesize' => "A sua base de dados DB2 tem um tablespace padrão com um pagesize insuficiente. O pagesize tem de ser '''32K'' ou maior.",
        'config-site-name' => 'Nome da wiki:',
        'config-site-name-help' => 'Este nome aparecerá no título da janela do seu browser e em vários outros sítios.',
        'config-site-name-blank' => 'Introduza o nome do site.',
@@ -16882,12 +16812,10 @@ Totuși, MediaWiki necesită PHP $2 sau mai nou.',
        'config-sqlite-dir' => 'Director de date SQLite:',
        'config-oracle-def-ts' => 'Spațiu de stocare („tablespace”) implicit:',
        'config-oracle-temp-ts' => 'Spațiu de stocare („tablespace”) temporar:',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-header-mysql' => 'Setările MySQL',
        'config-header-postgres' => 'Setări PostgreSQL',
        'config-header-sqlite' => 'Setări SQLite',
        'config-header-oracle' => 'Setări Oracle',
-       'config-header-ibm_db2' => 'Setări IBM DB2',
        'config-invalid-db-type' => 'Tip de bază de date incorect',
        'config-missing-db-name' => 'Trebuie să introduci o valoare pentru „Numele bazei de date”',
        'config-connection-error' => '$1.
@@ -16896,7 +16824,7 @@ Verificați gazda, numele de utilizator și parola și reîncercați.',
        'config-upgrade-done-no-regenerate' => 'Actualizare completă.
 
 Acum puteți [$1 începe să vă folosiți wikiul].',
-       'config-regenerate' => 'Regenerare <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Regenerare LocalSettings.php →',
        'config-unknown-collation' => 'AVERTISMENT: Baza de date folosește o colaționare nerecunoscută.',
        'config-db-web-account' => 'Contul bazei de date pentru accesul web.',
        'config-db-web-create' => 'Creați contul dacă nu există deja',
@@ -16994,6 +16922,8 @@ $messages['roa-tara'] = array(
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
+       'config-mysql-innodb' => 'InnoDB',
+       'config-mysql-myisam' => 'MyISAM',
        'config-admin-email' => 'Indirizze e-mail:',
        'config-install-step-done' => 'fatte',
        'config-install-step-failed' => 'fallite',
@@ -17251,7 +17181,6 @@ MediaWiki требует поддержки UTF-8 для корректной р
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki поддерживает следующие СУБД:
 
 $1
        'config-support-postgres' => '* $1 — популярная открытая СУБД, альтернатива MySQL ([http://www.php.net/manual/en/pgsql.installation.php инструкция, как собрать PHP с поддержкой PostgreSQL]). Могут встречаться небольшие неисправленные ошибки, не рекомендуется для использования в рабочей системе.',
        'config-support-sqlite' => '* $1 — это легковесная система баз данных, имеющая очень хорошую поддержку. ([http://www.php.net/manual/en/pdo.installation.php инструкция, как собрать PHP с поддержкой SQLite], работающей посредством PDO)',
        'config-support-oracle' => '* $1 — это коммерческая база данных масштаба предприятия. ([http://www.php.net/manual/en/oci8.installation.php Как собрать PHP с поддержкой OCI8])',
-       'config-support-ibm_db2' => '$1 — коммерческая база данных масштаба предприятия.', # Fuzzy
        'config-header-mysql' => 'Настройки MySQL',
        'config-header-postgres' => 'Настройки PostgreSQL',
        'config-header-sqlite' => 'Настройки SQLite',
        'config-header-oracle' => 'Настройки Oracle',
-       'config-header-ibm_db2' => 'Настройки IBM DB2',
        'config-invalid-db-type' => 'Неверный тип базы данных',
        'config-missing-db-name' => 'Вы должны ввести значение параметра «Имя базы данных»',
        'config-missing-db-host' => 'Необходимо ввести значение параметра «Сервер базы данных»',
@@ -17328,7 +17255,7 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => 'Обновление завершено.
 
 Теперь вы можете [$1 начать работу с вики].',
-       'config-regenerate' => 'Создать <code>LocalSettings.php</code> заново →',
+       'config-regenerate' => 'Создать LocalSettings.php заново →',
        'config-show-table-status' => 'Запрос «<code>SHOW TABLE STATUS</code>» не выполнен!',
        'config-unknown-collation' => "'''Внимание:''' База данных использует нераспознанные правила сортировки.",
        'config-db-web-account' => 'Учётная запись для доступа к базе данных из веб-сервера',
@@ -17357,7 +17284,6 @@ chmod a+w $3</pre>',
 Это более эффективно, чем ''UTF-8 режим'' MySQL, и позволяет использовать полный набор символов Unicode.
 
 В '''режиме UTF-8''' MySQL будет знать в какой кодировке находятся Ваши данные и может отображать и преобразовывать их соответствующим образом, но это не позволит вам хранить символы выше [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Базовой Многоязыковой Плоскости].",
-       'config-ibm_db2-low-db-pagesize' => "В вашей базе данных DB2 по умолчанию задано табличное пространство с недостаточным размером страницы. Размер страницы должен быть не менее '''32K'''.",
        'config-site-name' => 'Название вики:',
        'config-site-name-help' => 'Название будет отображаться в заголовке окна браузера и в некоторых других местах вики.',
        'config-site-name-blank' => 'Введите название сайта.',
@@ -17730,17 +17656,15 @@ $messages['si'] = array(
        'config-sqlite-dir' => 'SQLite දත්ත නාමවලිය:',
        'config-oracle-def-ts' => 'සාමාන්‍ය වගු අවකාශය:',
        'config-oracle-temp-ts' => 'තාවකාලික වගු අවකාශය:',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-header-mysql' => 'MySQL සැකසුම්',
        'config-header-postgres' => 'PostgreSQL සැකසුම්',
        'config-header-sqlite' => 'SQLite සැකසුම්',
        'config-header-oracle' => 'ඔරකල් සැකසුම්',
-       'config-header-ibm_db2' => 'IBM DB2 සැකසුම්',
        'config-invalid-db-type' => 'වලංගු නොවන දත්ත සංචිත වර්ගය',
        'config-missing-db-name' => '"දත්ත සංචිත නාමය" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ',
        'config-missing-db-host' => '"දත්ත සංචිත ධාරකය" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ',
        'config-missing-db-server-oracle' => '"දත්ත සංචිත TNS" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ',
-       'config-regenerate' => 'නැවත ජනිත කරන්න <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'නැවත ජනිත කරන්න LocalSettings.php →',
        'config-db-web-account' => 'ජාල ප්‍රවේශනය සඳහා දත්ත සංචිත ගිණුම',
        'config-mysql-engine' => 'ආචයන එන්ජිම:',
        'config-mysql-innodb' => 'InnoDB',
@@ -17938,7 +17862,6 @@ Vendar pa MediaWiki zahteva PHP $2 ali višji.',
        'config-db-schema-help' => 'Ta shema je po navadi v redu.
 Spremenite jo samo, če veste, da jo morate.',
        'config-sqlite-dir' => 'Mapa podatkov SQLite:',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki podpira naslednje sisteme zbirk podatkov:
 
 $1
@@ -17948,7 +17871,6 @@ $1
        'config-header-postgres' => 'Nastavitve PostgreSQL',
        'config-header-sqlite' => 'Nastavitve SQLite',
        'config-header-oracle' => 'Nastavitve Oracle',
-       'config-header-ibm_db2' => 'Nastavitve IBM DB2',
        'config-invalid-db-type' => 'Neveljavna vrsta zbirke podatkov',
        'config-missing-db-name' => 'Vnesti morate vrednost za »Ime zbirke podatkov«',
        'config-missing-db-host' => 'Vnesti morate vrednost za »Gostitelj zbirke podatkov«',
@@ -17971,7 +17893,7 @@ Preverite mapo podatkov in ime zbirke podatkov spodaj ter poskusite znova.',
        'config-upgrade-done-no-regenerate' => 'Nadgradnja je končana.
 
 Sedaj lahko [$1 začnete uporabljati vaš wiki].',
-       'config-regenerate' => 'Ponovno ustvari <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Ponovno ustvari LocalSettings.php →',
        'config-show-table-status' => 'Poizvedba <code>SHOW TABLE STATUS</code> ni uspela!',
        'config-unknown-collation' => "'''Opozorilo:''' Zbirke podatkov uporablja neprepoznano razvrščanje znakov.",
        'config-db-web-account' => 'Račun zbirke podatkov za spletni dostop',
@@ -18910,7 +18832,6 @@ Isaalang-alang ang paglalagay na magkakasama ang kalipunan ng dato sa ibang luga
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'DB2 ng IBM',
        'config-support-info' => 'Sinusuportahan ng MediaWiki ang sumusunod na mga sistema ng kalipunan ng dato:
 
 $1
@@ -18920,12 +18841,10 @@ Kung hindi mo makita ang sistema ng kalipunan ng dato na sinusubukan mong gamiti
        'config-support-postgres' => '* Ang $1 ay isang bantog na sistema ng kalipunan ng dato na bukas ang pinagmulan na panghalili sa MySQL ([http://www.php.net/manual/en/pgsql.installation.php paano magtipon ng PHP na mayroong suporta ng PostgreSQL]). Maaaring mayroong ilang hindi pangunahing mga surot na natitira pa, at hindi iminumungkahi para gamitin sa loob ng isang kapaligiran ng produksiyon.',
        'config-support-sqlite' => 'Ang $1 ay isang magaan ang timbang na sistema ng kalipunan ng dato na sinusuportahan nang napaka mainam. ([http://www.php.net/manual/en/pdo.installation.php Paano magtipon ng PHP na mayroong suporta ng SQLite], gumagamit ng PDO)',
        'config-support-oracle' => '* Ang $1 ay isang kalipunan ng dato ng kasigasigang pangkalakal. ([http://www.php.net/manual/en/oci8.installation.php Paano magtipunan ng PHP na mayroong suporta ng OCI8])',
-       'config-support-ibm_db2' => '* Ang $1 ay isang kalipunan ng dato ng kasigasigang pangkalakal.', # Fuzzy
        'config-header-mysql' => 'Mga katakdaan ng MySQL',
        'config-header-postgres' => 'Mga katakdaan ng PostgreSQL',
        'config-header-sqlite' => 'Mga katakdaan ng SQLite',
        'config-header-oracle' => 'Mga katakdaan ng Oracle',
-       'config-header-ibm_db2' => 'Mga katakdaan ng DB2 ng IBM',
        'config-invalid-db-type' => 'Hindi tanggap na uri ng kalipunan ng dato',
        'config-missing-db-name' => 'Dapat kang magpasok ng isang halaga para sa "Pangalan ng kalipunan ng dato"',
        'config-missing-db-host' => 'Dapat kang magpasok ng isang halaga para sa "Tagapagpasinaya ng kalipunan ng dato"',
@@ -18987,7 +18906,7 @@ Kung nais mong muling likhain ang iyong talaksang <code>LocalSettings.php</code>
        'config-upgrade-done-no-regenerate' => 'Buo na ang pagsasapanahon.
 
 Maaari ka na ngayong [$1 magsimula sa paggamit ng wiki mo].',
-       'config-regenerate' => 'Muling likhain ang <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Muling likhain ang LocalSettings.php →',
        'config-show-table-status' => 'Nabigo ang pagtatanong na IPAKITA ANG KALAGAYAN NG TALAHANAYAN!', # Fuzzy
        'config-unknown-collation' => "'''Babala:''' Ang kalipunan ng dato ay gumagagamit ng hindi nakikilalang pag-iipon.",
        'config-db-web-account' => 'Akawnt ng kalipunan ng dato para sa pagpunta sa web',
@@ -19017,7 +18936,6 @@ May gawi ang mga kalipunan ng dato ng MyISAM na masira nang mas madalas kaysa sa
 Mas kapaki-pakinabang ito kaysa sa gawi na UTF-8 ng MySQL, at nagpapahintulot sa iyo upang magamit ang buong kasaklawan ng mga panitik ng Unikodigo.
 
 Sa ''gawi na UTF-8''', malalaman ng MySQL kung sa anong pangkat ng panitik nakapaloob ang iyong dato, at angkop na makakapagharap at makapapagpalit nito, subalit hindi ka nito papayagan na mag-imbak ng mga panitik na nasa itaas ng [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] o Saligang Tapyas na Pangmaramihang Wika.",
-       'config-ibm_db2-low-db-pagesize' => "Ang kalipunan mo ng dato na DB2 ay mayroong isang likas na nakatakdang puwang ng talahanayan na mayroong hindi sapat na sukat ng pahina. Ang sukat ng pahina ay dapat na maging '''32K''' o mas mataas.",
        'config-site-name' => 'Pangalan ng wiki:',
        'config-site-name-help' => "Lilitaw ito sa bareta ng pamagat ng pantingin-tingin at sa samu't saring ibang mga lugar.",
        'config-site-name-blank' => 'Magpasok ng isang pangalan ng sityo.',
@@ -19522,7 +19440,6 @@ MediaWiki вимагає підтримку UTF-8 для коректної ро
 За можливості розташуйте базу даних десь окремо, наприклад в <code>/var/lib/mediawiki/yourwiki</code>.",
        'config-oracle-def-ts' => 'Простір таблиць за замовчуванням:',
        'config-oracle-temp-ts' => 'Тимчасовий простір таблиць:',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki підтримує таки системи баз даних:
 
 $1
        'config-support-postgres' => '* $1 — популярна відкрита СУБД, альтернатива MySQL ([http://www.php.net/manual/en/pgsql.installation.php як зібрати PHP з допомогою PostgreSQL]). Можуть зустрічатись деякі невеликі невиправлені помилки, не рекомендується використовувати у робочій системі.',
        'config-support-sqlite' => '* $1 — легка система баз даних, яка дуже добре підтримується. ([http://www.php.net/manual/en/pdo.installation.php Як зібрати PHP з допомогою SQLite], що використовує PDO)',
        'config-support-oracle' => '* $1 — комерційна база даних масштабу підприємства. ([http://www.php.net/manual/en/oci8.installation.php Як зібрати PHP з підтримкою OCI8])',
-       'config-support-ibm_db2' => '* $1 — комерційна база даних масштабу підприємства.', # Fuzzy
        'config-header-mysql' => 'Налаштування MySQL',
        'config-header-postgres' => 'Налаштування PostgreSQL',
        'config-header-sqlite' => 'Налаштування SQLite',
        'config-header-oracle' => 'Налаштування Oracle',
-       'config-header-ibm_db2' => 'Налаштування IBM DB2',
        'config-invalid-db-type' => 'Невірний тип бази даних',
        'config-missing-db-name' => "Ви повинні ввести значення параметру «Ім'я бази даних»",
        'config-missing-db-host' => 'Ви повинні ввести значення параметру «Хост бази даних»',
@@ -19599,7 +19514,7 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => 'Оновлення завершено.
 
 Ви можете зараз [$1 починати використовувати свою вікі].',
-       'config-regenerate' => 'Повторно згенерувати <code>LocalSettings.php</code> →',
+       'config-regenerate' => 'Повторно згенерувати LocalSettings.php →',
        'config-show-table-status' => 'Запит <code>SHOW TABLE STATUS</code> не виконано!',
        'config-unknown-collation' => "'''Увага:''' База даних використовує нерозпізнане сортування.",
        'config-db-web-account' => 'Обліковий запис бази даних для інтернет-доступу',
@@ -19629,7 +19544,6 @@ chmod a+w $3</pre>',
 Це більш ефективно, ніж UTF-8 режим MySQL, і дозволяє використовувати увесь набір символів Юнікоду.
 
 У '''режимі UTF-8''' MySQL буде знати, якого символу стосуються Ваші дані, і могтиме відображати та конвертувати їх належним чином, але не дозволятиме зберігати символи, що виходять за межі [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
-       'config-ibm_db2-low-db-pagesize' => "У Вашій базі даних DB2 за замовчуванням заданий табличний простір з недостатнім розміром сторінки. Розмір сторінки має бути '''32K''' і більше.",
        'config-site-name' => 'Назва вікі:',
        'config-site-name-help' => 'Це буде відображатись у заголовку вікна браузера та у деяких інших місцях.',
        'config-site-name-blank' => 'Введіть назву сайту.',
@@ -20332,7 +20246,7 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => '升级完成。
 
 现在您可以[$1 开始使用您的wiki]了。',
-       'config-regenerate' => '重新生成<code>LocalSettings.php</code> →',
+       'config-regenerate' => '重新生成LocalSettings.php →',
        'config-show-table-status' => '<code>SHOW TABLE STATUS</code>语句执行失败!',
        'config-unknown-collation' => "'''警告:'''数据库使用了无法识别的整理。",
        'config-db-web-account' => '供网页访问使用的数据库帐号',
@@ -20772,7 +20686,7 @@ chmod a+w $3</pre>',
        'config-upgrade-done-no-regenerate' => '升級完成。
 
 現在您可以[$1 開始使用您的wiki]了。',
-       'config-regenerate' => '重新生成<code>LocalSettings.php</code> →',
+       'config-regenerate' => '重新生成LocalSettings.php →',
        'config-show-table-status' => '查詢<code>SHOW TABLE STATUS</code>失敗!',
        'config-unknown-collation' => "'''警告:'''數據庫使用了無法識別的整理。",
        'config-db-web-account' => '供網頁訪問使用的數據庫帳號',
index 8aee15c..daac558 100644 (file)
@@ -997,7 +997,7 @@ abstract class Installer {
                }
 
                # Try the current value of LANG.
-               if ( isset( $candidatesByLocale[ getenv( 'LANG' ) ] ) ) {
+               if ( isset( $candidatesByLocale[getenv( 'LANG' )] ) ) {
                        $this->setVar( 'wgShellLocale', getenv( 'LANG' ) );
                        return true;
                }
@@ -1408,10 +1408,10 @@ abstract class Installer {
                // then adding any callbacks that wanted to attach after a given step
                foreach( $coreInstallSteps as $step ) {
                        $this->installSteps[] = $step;
-                       if( isset( $this->extraInstallSteps[ $step['name'] ] ) ) {
+                       if( isset( $this->extraInstallSteps[$step['name']] ) ) {
                                $this->installSteps = array_merge(
                                        $this->installSteps,
-                                       $this->extraInstallSteps[ $step['name'] ]
+                                       $this->extraInstallSteps[$step['name']]
                                );
                        }
                }
@@ -1598,7 +1598,7 @@ abstract class Installer {
                $status = Status::newGood();
                try {
                        $page = WikiPage::factory( Title::newMainPage() );
-                       $content = new WikitextContent (
+                       $content = new WikitextContent(
                                wfMessage( 'mainpagetext' )->inContentLanguage()->text() . "\n\n" .
                                wfMessage( 'mainpagedocfooter' )->inContentLanguage()->text()
                        );
@@ -1608,7 +1608,7 @@ abstract class Installer {
                                        EDIT_NEW,
                                        false,
                                        User::newFromName( 'MediaWiki default' ) );
-               } catch (MWException $e) {
+               } catch ( MWException $e ) {
                        //using raw, because $wgShowExceptionDetails can not be set yet
                        $status->fatal( 'config-install-mainpage-failed', $e->getMessage() );
                }
index 7cb3779..aa7fc97 100644 (file)
@@ -227,7 +227,7 @@ class LocalSettingsGenerator {
                        case 'db':
                        case 'memcached':
                        case 'accel':
-                               $cacheType = 'CACHE_' . strtoupper( $this->values['wgMainCacheType']);
+                               $cacheType = 'CACHE_' . strtoupper( $this->values['wgMainCacheType'] );
                                break;
                        case 'none':
                        default:
index 06821f8..72514f2 100644 (file)
@@ -86,8 +86,7 @@ class MysqlInstaller extends DatabaseInstaller {
         * @return string
         */
        public function getConnectForm() {
-               return
-                       $this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) .
+               return $this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) .
                        Html::openElement( 'fieldset' ) .
                        Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
                        $this->getTextBox( 'wgDBname', 'config-db-name', array( 'dir' => 'ltr' ), $this->parent->getHelpBox( 'config-db-name-help' ) ) .
index e853889..632015f 100644 (file)
@@ -59,8 +59,7 @@ class OracleInstaller extends DatabaseInstaller {
                if ( $this->getVar( 'wgDBserver' ) == 'localhost' ) {
                        $this->parent->setVar( 'wgDBserver', '' );
                }
-               return
-                       $this->getTextBox( 'wgDBserver', 'config-db-host-oracle', array(), $this->parent->getHelpBox( 'config-db-host-oracle-help' ) ) .
+               return $this->getTextBox( 'wgDBserver', 'config-db-host-oracle', array(), $this->parent->getHelpBox( 'config-db-host-oracle-help' ) ) .
                        Html::openElement( 'fieldset' ) .
                        Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
                        $this->getTextBox( 'wgDBprefix', 'config-db-prefix' ) .
index 4e5ae8c..e7ae8d5 100644 (file)
@@ -56,8 +56,7 @@ class PostgresInstaller extends DatabaseInstaller {
        }
 
        function getConnectForm() {
-               return
-                       $this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) .
+               return $this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) .
                        $this->getTextBox( 'wgDBport', 'config-db-port' ) .
                        Html::openElement( 'fieldset' ) .
                        Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
@@ -137,7 +136,8 @@ class PostgresInstaller extends DatabaseInstaller {
                                $this->getVar( 'wgDBserver' ),
                                $user,
                                $password,
-                               $dbName);
+                               $dbName
+                       );
                        $status->value = $db;
                } catch ( DBConnectionError $e ) {
                        $status->fatal( 'config-connection-error', $e->getMessage() );
index 0a4b5e6..17285c5 100644 (file)
@@ -613,7 +613,7 @@ END;
                }
        }
 
-       protected function changeNullableField( $table, $field, $null) {
+       protected function changeNullableField( $table, $field, $null ) {
                $fi = $this->db->fieldInfo( $table, $field );
                if ( is_null( $fi ) ) {
                        $this->output( "...ERROR: expected column $table.$field to exist\n" );
index 35d649b..ac66cd9 100644 (file)
@@ -353,7 +353,7 @@ class WebInstaller extends Installer {
        public function getFingerprint() {
                // Get the base URL of the installation
                $url = $this->request->getFullRequestURL();
-               if ( preg_match( '!^(.*\?)!', $url, $m) ) {
+               if ( preg_match( '!^(.*\?)!', $url, $m ) ) {
                        // Trim query string
                        $url = $m[1];
                }
@@ -724,8 +724,7 @@ class WebInstaller extends Installer {
                        $attributes['for'] = $forId;
                }
 
-               return
-                       "<div class=\"config-block\">\n" .
+               return "<div class=\"config-block\">\n" .
                        "  <div class=\"config-block-label\">\n" .
                        Xml::tags( 'label',
                                $attributes,
@@ -767,8 +766,7 @@ class WebInstaller extends Installer {
                if ( !isset( $params['help'] ) ) {
                        $params['help'] = "";
                }
-               return
-                       $this->label(
+               return $this->label(
                                $params['label'],
                                $params['controlName'],
                                Xml::input(
@@ -814,8 +812,7 @@ class WebInstaller extends Installer {
                if ( !isset( $params['help'] ) ) {
                        $params['help'] = "";
                }
-               return
-                       $this->label(
+               return $this->label(
                                $params['label'],
                                $params['controlName'],
                                Xml::textarea(
@@ -898,8 +895,7 @@ class WebInstaller extends Installer {
                        $labelText = $this->parse( wfMessage( $params['label'] )->text() );
                }
 
-               return
-                       "<div class=\"config-input-check\">\n" .
+               return "<div class=\"config-input-check\">\n" .
                        $params['help'] .
                        "<label>\n" .
                        Xml::check(
index 9119c12..305c012 100644 (file)
@@ -1051,8 +1051,7 @@ class WebInstaller_Options extends WebInstallerPage {
                }
                $wrapperStyle = ($this->getVar( '_LicenseCode' ) == 'cc-choose') ? '' : 'display: none';
 
-               return
-                       "<div class=\"config-cc-wrapper\" id=\"config-cc-wrapper\" style=\"$wrapperStyle\">\n" .
+               return "<div class=\"config-cc-wrapper\" id=\"config-cc-wrapper\" style=\"$wrapperStyle\">\n" .
                        Html::element( 'iframe', $iframeAttribs, '', false /* not short */ ) .
                        "</div>\n";
        }
@@ -1062,8 +1061,7 @@ class WebInstaller_Options extends WebInstallerPage {
                // If you change this height, also change it in config.css
                $expandJs = str_replace( '$1', '54em', $js );
                $reduceJs = str_replace( '$1', '70px', $js );
-               return
-                       '<p>'.
+               return '<p>'.
                        Html::element( 'img', array( 'src' => $this->getVar( 'wgRightsIcon' ) ) ) .
                        '&#160;&#160;' .
                        htmlspecialchars( $this->getVar( 'wgRightsText' ) ) .
@@ -1242,7 +1240,7 @@ class WebInstaller_Complete extends WebInstallerPage {
                        // JS appears the only method that works consistently with IE7+
                        $this->addHtml( "\n<script type=\"" . $GLOBALS['wgJsMimeType'] .
                                '">jQuery( document ).ready( function() { document.location=' .
-                               Xml::encodeJsVar( $lsUrl) . "; } );</script>\n" );
+                               Xml::encodeJsVar( $lsUrl ) . "; } );</script>\n" );
                } else {
                        $this->parent->request->response()->header( "Refresh: 0;url=$lsUrl" );
                }
index d8f55c3..e12bc95 100644 (file)
@@ -212,10 +212,12 @@ abstract class Job {
                        'title'     => $this->getTitle()->getDBkey(),
                        'params'    => $this->getParams()
                );
-               // Identical jobs with different "root" jobs should count as duplicates
                if ( is_array( $info['params'] ) ) {
+                       // Identical jobs with different "root" jobs should count as duplicates
                        unset( $info['params']['rootJobSignature'] );
                        unset( $info['params']['rootJobTimestamp'] );
+                       // Likewise for jobs with different delay times
+                       unset( $info['params']['jobReleaseTimestamp'] );
                }
                return $info;
        }
index 9c152cd..09ca67c 100644 (file)
@@ -36,7 +36,8 @@ abstract class JobQueue {
        protected $maxTries; // integer; maximum number of times to try a job
        protected $checkDelay; // boolean; allow delayed jobs
 
-       const QoS_Atomic = 1; // integer; "all-or-nothing" job insertions
+       const QOS_ATOMIC = 1; // integer; "all-or-nothing" job insertions
+       const QoS_Atomic = 1; // integer; "all-or-nothing" job insertions (b/c)
 
        const ROOTJOB_TTL = 2419200; // integer; seconds to remember root jobs (28 days)
 
@@ -243,7 +244,7 @@ abstract class JobQueue {
         * Outside callers should use JobQueueGroup::push() instead of this function.
         *
         * @param $jobs Job|Array
-        * @param $flags integer Bitfield (supports JobQueue::QoS_Atomic)
+        * @param $flags integer Bitfield (supports JobQueue::QOS_ATOMIC)
         * @return bool Returns false on failure
         * @throws MWException
         */
@@ -257,7 +258,7 @@ abstract class JobQueue {
         * Outside callers should use JobQueueGroup::push() instead of this function.
         *
         * @param array $jobs List of Jobs
-        * @param $flags integer Bitfield (supports JobQueue::QoS_Atomic)
+        * @param $flags integer Bitfield (supports JobQueue::QOS_ATOMIC)
         * @return bool Returns false on failure
         * @throws MWException
         */
index 3dba3c5..a8186ab 100644 (file)
@@ -118,6 +118,23 @@ abstract class JobQueueAggregator {
         */
        abstract protected function doGetAllReadyWikiQueues();
 
+       /**
+        * Purge all of the aggregator information
+        *
+        * @return bool Success
+        */
+       final public function purge() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doPurge();
+               wfProfileOut( __METHOD__ );
+               return $res;
+       }
+
+       /**
+        * @see JobQueueAggregator::purge()
+        */
+       abstract protected function doPurge();
+
        /**
         * Get all databases that have a pending job.
         * This poll all the queues and is this expensive.
index 4b82cf9..15bb833 100644 (file)
@@ -108,6 +108,13 @@ class JobQueueAggregatorMemc extends JobQueueAggregator {
                        : array(); // cache is both empty and locked
        }
 
+       /**
+        * @see JobQueueAggregator::doPurge()
+        */
+       protected function doPurge() {
+               return $this->cache->delete( $this->getReadyQueueCacheKey() );
+       }
+
        /**
         * @return string
         */
index 512a24a..aae800e 100644 (file)
@@ -120,6 +120,23 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                }
        }
 
+       /**
+        * @see JobQueueAggregator::doPurge()
+        */
+       protected function doPurge() {
+               $conn = $this->getConnection();
+               if ( !$conn ) {
+                       return false;
+               }
+               try {
+                       $conn->delete( $this->getReadyQueueKey() );
+               } catch ( RedisException $e ) {
+                       $this->handleException( $conn, $e );
+                       return false;
+               }
+               return true;
+       }
+
        /**
         * Get a connection to the server that handles all sub-queues for this queue
         *
index 4b22e94..379f010 100644 (file)
@@ -34,6 +34,9 @@ class JobQueueDB extends JobQueue {
        const MAX_JOB_RANDOM = 2147483647; // integer; 2^31 - 1, used for job_random
        const MAX_OFFSET = 255; // integer; maximum number of rows to skip
 
+       /** @var BagOStuff */
+       protected $cache;
+
        protected $cluster = false; // string; name of an external DB cluster
 
        /**
@@ -45,8 +48,13 @@ class JobQueueDB extends JobQueue {
         * @param $params array
         */
        protected function __construct( array $params ) {
+               global $wgMemc;
+
                parent::__construct( $params );
+
                $this->cluster = isset( $params['cluster'] ) ? $params['cluster'] : false;
+               // Make sure that we don't use the SQL cache, which would be harmful
+               $this->cache = ( $wgMemc instanceof SqlBagOStuff ) ? new EmptyBagOStuff() : $wgMemc;
        }
 
        protected function supportedOrders() {
@@ -62,11 +70,9 @@ class JobQueueDB extends JobQueue {
         * @return bool
         */
        protected function doIsEmpty() {
-               global $wgMemc;
-
                $key = $this->getCacheKey( 'empty' );
 
-               $isEmpty = $wgMemc->get( $key );
+               $isEmpty = $this->cache->get( $key );
                if ( $isEmpty === 'true' ) {
                        return true;
                } elseif ( $isEmpty === 'false' ) {
@@ -77,7 +83,7 @@ class JobQueueDB extends JobQueue {
                $found = $dbr->selectField( // unclaimed job
                        'job', '1', array( 'job_cmd' => $this->type, 'job_token' => '' ), __METHOD__
                );
-               $wgMemc->add( $key, $found ? 'false' : 'true', self::CACHE_TTL_LONG );
+               $this->cache->add( $key, $found ? 'false' : 'true', self::CACHE_TTL_LONG );
 
                return !$found;
        }
@@ -87,11 +93,9 @@ class JobQueueDB extends JobQueue {
         * @return integer
         */
        protected function doGetSize() {
-               global $wgMemc;
-
                $key = $this->getCacheKey( 'size' );
 
-               $size = $wgMemc->get( $key );
+               $size = $this->cache->get( $key );
                if ( is_int( $size ) ) {
                        return $size;
                }
@@ -101,7 +105,7 @@ class JobQueueDB extends JobQueue {
                        array( 'job_cmd' => $this->type, 'job_token' => '' ),
                        __METHOD__
                );
-               $wgMemc->set( $key, $size, self::CACHE_TTL_SHORT );
+               $this->cache->set( $key, $size, self::CACHE_TTL_SHORT );
 
                return $size;
        }
@@ -111,15 +115,13 @@ class JobQueueDB extends JobQueue {
         * @return integer
         */
        protected function doGetAcquiredCount() {
-               global $wgMemc;
-
                if ( $this->claimTTL <= 0 ) {
                        return 0; // no acknowledgements
                }
 
                $key = $this->getCacheKey( 'acquiredcount' );
 
-               $count = $wgMemc->get( $key );
+               $count = $this->cache->get( $key );
                if ( is_int( $count ) ) {
                        return $count;
                }
@@ -129,7 +131,7 @@ class JobQueueDB extends JobQueue {
                        array( 'job_cmd' => $this->type, "job_token != {$dbr->addQuotes( '' )}" ),
                        __METHOD__
                );
-               $wgMemc->set( $key, $count, self::CACHE_TTL_SHORT );
+               $this->cache->set( $key, $count, self::CACHE_TTL_SHORT );
 
                return $count;
        }
@@ -159,12 +161,11 @@ class JobQueueDB extends JobQueue {
 
                        $key = $this->getCacheKey( 'empty' );
                        $atomic = ( $flags & self::QoS_Atomic );
+                       $cache = $this->cache;
 
                        $dbw->onTransactionIdle(
-                               function() use ( $dbw, $rowSet, $rowList, $atomic, $key, $scope
+                               function() use ( $dbw, $cache, $rowSet, $rowList, $atomic, $key, $scope
                        ) {
-                               global $wgMemc;
-
                                if ( $atomic ) {
                                        $dbw->begin( __METHOD__ ); // wrap all the job additions in one transaction
                                }
@@ -203,7 +204,7 @@ class JobQueueDB extends JobQueue {
                                        $dbw->commit( __METHOD__ );
                                }
 
-                               $wgMemc->set( $key, 'false', JobQueueDB::CACHE_TTL_LONG );
+                               $cache->set( $key, 'false', JobQueueDB::CACHE_TTL_LONG );
                        } );
                }
 
@@ -215,9 +216,7 @@ class JobQueueDB extends JobQueue {
         * @return Job|bool
         */
        protected function doPop() {
-               global $wgMemc;
-
-               if ( $wgMemc->get( $this->getCacheKey( 'empty' ) ) === 'true' ) {
+               if ( $this->cache->get( $this->getCacheKey( 'empty' ) ) === 'true' ) {
                        return false; // queue is empty
                }
 
@@ -237,7 +236,7 @@ class JobQueueDB extends JobQueue {
                        }
                        // Check if we found a row to reserve...
                        if ( !$row ) {
-                               $wgMemc->set( $this->getCacheKey( 'empty' ), 'true', self::CACHE_TTL_LONG );
+                               $this->cache->set( $this->getCacheKey( 'empty' ), 'true', self::CACHE_TTL_LONG );
                                break; // nothing to do
                        }
                        wfIncrStats( 'job-pop' );
@@ -266,11 +265,9 @@ class JobQueueDB extends JobQueue {
         * @return Row|false
         */
        protected function claimRandom( $uuid, $rand, $gte ) {
-               global $wgMemc;
-
                list( $dbw, $scope ) = $this->getMasterDB();
                // Check cache to see if the queue has <= OFFSET items
-               $tinyQueue = $wgMemc->get( $this->getCacheKey( 'small' ) );
+               $tinyQueue = $this->cache->get( $this->getCacheKey( 'small' ) );
 
                $row = false; // the row acquired
                $invertedDirection = false; // whether one job_random direction was already scanned
@@ -311,7 +308,7 @@ class JobQueueDB extends JobQueue {
                                );
                                if ( !$row ) {
                                        $tinyQueue = true; // we know the queue must have <= MAX_OFFSET rows
-                                       $wgMemc->set( $this->getCacheKey( 'small' ), 1, 30 );
+                                       $this->cache->set( $this->getCacheKey( 'small' ), 1, 30 );
                                        continue; // use job_random
                                }
                        }
@@ -404,8 +401,6 @@ class JobQueueDB extends JobQueue {
         * @return integer Number of jobs recycled/deleted
         */
        public function recycleAndDeleteStaleJobs() {
-               global $wgMemc;
-
                $now = time();
                list( $dbw, $scope ) = $this->getMasterDB();
                $count = 0; // affected rows
@@ -443,7 +438,7 @@ class JobQueueDB extends JobQueue {
                                );
                                $count += $dbw->affectedRows();
                                wfIncrStats( 'job-recycle', $dbw->affectedRows() );
-                               $wgMemc->set( $this->getCacheKey( 'empty' ), 'false', self::CACHE_TTL_LONG );
+                               $this->cache->set( $this->getCacheKey( 'empty' ), 'false', self::CACHE_TTL_LONG );
                        }
                }
 
@@ -512,16 +507,15 @@ class JobQueueDB extends JobQueue {
                // maintained. Having only the de-duplication registration succeed would cause
                // jobs to become no-ops without any actual jobs that made them redundant.
                list( $dbw, $scope ) = $this->getMasterDB();
-               $dbw->onTransactionIdle( function() use ( $params, $key, $scope ) {
-                       global $wgMemc;
-
-                       $timestamp = $wgMemc->get( $key ); // current last timestamp of this job
+               $cache = $this->cache;
+               $dbw->onTransactionIdle( function() use ( $cache, $params, $key, $scope ) {
+                       $timestamp = $cache->get( $key ); // current last timestamp of this job
                        if ( $timestamp && $timestamp >= $params['rootJobTimestamp'] ) {
                                return true; // a newer version of this root job was enqueued
                        }
 
                        // Update the timestamp of the last root job started at the location...
-                       return $wgMemc->set( $key, $params['rootJobTimestamp'], JobQueueDB::ROOTJOB_TTL );
+                       return $cache->set( $key, $params['rootJobTimestamp'], JobQueueDB::ROOTJOB_TTL );
                } );
 
                return true;
@@ -551,10 +545,8 @@ class JobQueueDB extends JobQueue {
         * @return void
         */
        protected function doFlushCaches() {
-               global $wgMemc;
-
                foreach ( array( 'empty', 'size', 'acquiredcount' ) as $type ) {
-                       $wgMemc->delete( $this->getCacheKey( $type ) );
+                       $this->cache->delete( $this->getCacheKey( $type ) );
                }
        }
 
index 351c71a..85f99b7 100644 (file)
@@ -40,6 +40,7 @@ class JobQueueGroup {
        const TYPE_ANY = 2; // integer; any job
 
        const USE_CACHE = 1; // integer; use process or persistent cache
+       const USE_PRIORITY = 2; // integer; respect deprioritization
 
        const PROC_CACHE_TTL = 15; // integer; seconds
 
@@ -146,6 +147,9 @@ class JobQueueGroup {
         */
        public function pop( $qtype = self::TYPE_DEFAULT, $flags = 0 ) {
                if ( is_string( $qtype ) ) { // specific job type
+                       if ( ( $flags & self::USE_PRIORITY ) && $this->isQueueDeprioritized( $qtype ) ) {
+                               return false; // back off
+                       }
                        $job = $this->get( $qtype )->pop();
                        if ( !$job ) {
                                JobQueueAggregator::singleton()->notifyQueueEmpty( $this->wiki, $qtype );
@@ -167,6 +171,9 @@ class JobQueueGroup {
                        shuffle( $types ); // avoid starvation
 
                        foreach ( $types as $type ) { // for each queue...
+                               if ( ( $flags & self::USE_PRIORITY ) && $this->isQueueDeprioritized( $type ) ) {
+                                       continue; // back off
+                               }
                                $job = $this->get( $type )->pop();
                                if ( $job ) { // found
                                        return $job;
@@ -264,10 +271,15 @@ class JobQueueGroup {
         * @return bool
         */
        public function isQueueDeprioritized( $type ) {
+               if ( $this->cache->has( 'isDeprioritized', $type, 5 ) ) {
+                       return $this->cache->get( 'isDeprioritized', $type );
+               }
                if ( $type === 'refreshLinks2' ) {
                        // Don't keep converting refreshLinks2 => refreshLinks jobs if the
                        // later jobs have not been done yet. This helps throttle queue spam.
-                       return !$this->get( 'refreshLinks' )->isEmpty();
+                       $deprioritized = !$this->get( 'refreshLinks' )->isEmpty();
+                       $this->cache->set( 'isDeprioritized', $type, $deprioritized );
+                       return $deprioritized;
                }
                return false;
        }
index eececcb..013d589 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Simple wrapper for json_encode and json_decode that falls back on Services_JSON class.
+ * Wrapper for json_encode and json_decode.
  *
  * 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
  * @file
  */
 
-require_once __DIR__ . '/Services_JSON.php';
-
 /**
  * JSON formatter wrapper class
  */
 class FormatJson {
 
+       /**
+        * Skip escaping most characters above U+007F for readability and compactness.
+        * This encoding option saves 3 to 8 bytes (uncompressed) for each such character;
+        * however, it could break compatibility with systems that incorrectly handle UTF-8.
+        *
+        * @since 1.21
+        */
+       const UTF8_OK = 1;
+
+       /**
+        * Skip escaping the characters '<', '>', and '&', which have special meanings in
+        * HTML and XML.
+        *
+        * @warning Do not use this option for JSON that could end up in inline scripts.
+        * - HTML5, §4.3.1.2 Restrictions for contents of script elements
+        * - XML 1.0 (5th Ed.), §2.4 Character Data and Markup
+        *
+        * @since 1.21
+        */
+       const XMLMETA_OK = 2;
+
+       /**
+        * Skip escaping as many characters as reasonably possible.
+        *
+        * @warning When generating inline script blocks, use FormatJson::UTF8_OK instead.
+        *
+        * @since 1.21
+        */
+       const ALL_OK = 3;
+
+       /**
+        * Characters problematic in JavaScript and their corresponding escape sequences.
+        *
+        * @note These are listed in ECMA-262 (5.1 Ed.), §7.3 Line Terminators along with U+000A (LF)
+        *       and U+000D (CR). However, PHP already escapes LF and CR according to RFC 4627.
+        */
+       private static $badChars = array(
+               "\xe2\x80\xa8" => '\u2028', // LINE SEPARATOR
+               "\xe2\x80\xa9" => '\u2029', // PARAGRAPH SEPARATOR
+       );
+
        /**
         * Returns the JSON representation of a value.
         *
-        * @param $value Mixed: the value being encoded. Can be any type except a resource.
-        * @param $pretty Boolean: If true, adds non-significant whitespace to improve readability.
+        * @note Empty arrays are encoded as numeric arrays, not as objects, so cast any associative
+        *       array that might be empty to an object before encoding it.
         *
-        * @return string
+        * @note In pre-1.21 versions of MediaWiki, using this function for generating inline script
+        *       blocks may result in an XSS vulnerability, and quite likely will in XML documents
+        *       (cf. FormatJson::XMLMETA_OK). Use Xml::encodeJsVar() instead in such cases.
+        *
+        * @param mixed $value The value to encode. Can be any type except a resource.
+        * @param bool $pretty If true, add non-significant whitespace to improve readability.
+        * @param int $escaping Bitfield consisting of _OK class constants
+        * @return string|bool: String if successful; false upon failure
         */
-       public static function encode( $value, $pretty = false ) {
-               if ( !function_exists( 'json_encode' ) || ( $pretty && version_compare( PHP_VERSION, '5.4.0', '<' ) ) ) {
-                       $json = new Services_JSON();
-                       return $json->encode( $value, $pretty );
-               } else {
-                       return json_encode( $value, $pretty ? JSON_PRETTY_PRINT : 0 );
+       public static function encode( $value, $pretty = false, $escaping = 0 ) {
+               if ( version_compare( PHP_VERSION, '5.4.0', '<' ) ) {
+                       return self::encode53( $value, $pretty, $escaping );
                }
+               return self::encode54( $value, $pretty, $escaping );
        }
 
        /**
         * Decodes a JSON string.
         *
-        * @param string $value the json string being decoded.
-        * @param $assoc Boolean: when true, returned objects will be converted into associative arrays.
+        * @param string $value The JSON string being decoded
+        * @param bool $assoc When true, returned objects will be converted into associative arrays.
         *
-        * @return Mixed: the value encoded in json in appropriate PHP type.
-        * Values true, false and null (case-insensitive) are returned as true, false
-        * and "&null;" respectively. "&null;" is returned if the json cannot be
+        * @return mixed: the value encoded in JSON in appropriate PHP type.
+        * Values `"true"`, `"false"`, and `"null"` (case-insensitive) are returned as `true`, `false`
+        * and `null` respectively. `null` is returned if the JSON cannot be
         * decoded or if the encoded data is deeper than the recursion limit.
         */
        public static function decode( $value, $assoc = false ) {
-               if ( !function_exists( 'json_decode' ) ) {
-                       $json = $assoc ? new Services_JSON( SERVICES_JSON_LOOSE_TYPE ) :
-                               new Services_JSON();
-                       $jsonDec = $json->decode( $value );
-                       return $jsonDec;
-               } else {
-                       return json_decode( $value, $assoc );
+               return json_decode( $value, $assoc );
+       }
+
+       /**
+        * JSON encoder wrapper for PHP >= 5.4, which supports useful encoding options.
+        *
+        * @param mixed $value
+        * @param bool $pretty
+        * @param int $escaping
+        * @return string|bool
+        */
+       private static function encode54( $value, $pretty, $escaping ) {
+               // PHP escapes '/' to prevent breaking out of inline script blocks using '</script>',
+               // which is hardly useful when '<' and '>' are escaped, and such escaping negatively
+               // impacts the human readability of URLs and similar strings.
+               $options = JSON_UNESCAPED_SLASHES;
+               $options |= $pretty ? JSON_PRETTY_PRINT : 0;
+               $options |= ( $escaping & self::UTF8_OK ) ? JSON_UNESCAPED_UNICODE : 0;
+               $options |= ( $escaping & self::XMLMETA_OK ) ? 0 : ( JSON_HEX_TAG | JSON_HEX_AMP );
+               $json = json_encode( $value, $options );
+               if ( $json === false ) {
+                       return false;
                }
+               return ( $escaping & self::UTF8_OK ) ? strtr( $json, self::$badChars ) : $json;
        }
 
+       /**
+        * JSON encoder wrapper for PHP 5.3, which lacks native support for some encoding options.
+        * Therefore, the missing options are implemented here purely in PHP code.
+        *
+        * @param mixed $value
+        * @param bool $pretty
+        * @param int $escaping
+        * @return string|bool
+        */
+       private static function encode53( $value, $pretty, $escaping ) {
+               $options = ( $escaping & self::XMLMETA_OK ) ? 0 : ( JSON_HEX_TAG | JSON_HEX_AMP );
+               $json = json_encode( $value, $options );
+               if ( $json === false ) {
+                       return false;
+               }
+               $json = str_replace( '\\/', '/', $json ); // emulate JSON_UNESCAPED_SLASHES
+               if ( $escaping & self::UTF8_OK ) {
+                       // JSON hex escape sequences follow the format \uDDDD, where DDDD is four hex digits
+                       // indicating the equivalent UTF-16 code unit's value. To most efficiently unescape
+                       // them, we exploit the JSON extension's built-in decoder.
+                       // * We escape the input a second time, so any such sequence becomes \\uDDDD.
+                       // * To avoid interpreting escape sequences that were in the original input,
+                       //   each double-escaped backslash (\\\\) is replaced with \\\u005c.
+                       // * We strip one of the backslashes from each of the escape sequences to unescape.
+                       // * Then the JSON decoder can perform the actual unescaping.
+                       $doubled = str_replace( "\\\\\\\\", "\\\\\\u005c", json_encode( $json ) );
+                       $json = json_decode( preg_replace( "/\\\\\\\\u(?!00[0-7])/", "\\\\u", $doubled ) );
+                       $json = strtr( $json, self::$badChars );
+               }
+               return $pretty ? self::prettyPrint( $json ) : $json;
+       }
+
+       /**
+        * Adds non-significant whitespace to an existing JSON representation of an object.
+        * Only needed for PHP < 5.4, which lacks the JSON_PRETTY_PRINT option.
+        *
+        * @param string $json
+        * @return string
+        */
+       private static function prettyPrint( $json ) {
+               $buf = '';
+               $indent = 0;
+               $json = str_replace( '\"', "\x01", $json );
+               for ( $i = 0, $n = strlen( $json ); $i < $n; $i += $skip ) {
+                       $skip = 1;
+                       switch ( $json[$i] ) {
+                               case ':':
+                                       $buf .= ': ';
+                                       break;
+                               case '[':
+                               case '{':
+                                       $indent++; // falls through
+                               case ',':
+                                       $buf .= $json[$i] . "\n" . str_repeat( '    ', $indent );
+                                       break;
+                               case ']':
+                               case '}':
+                                       $indent--;
+                                       $buf .= "\n" . str_repeat( '    ', $indent ) . $json[$i];
+                                       break;
+                               case '"':
+                                       $skip = strcspn( $json, '"', $i + 1 ) + 2;
+                                       $buf .= substr( $json, $i, $skip );
+                                       break;
+                               default:
+                                       $skip = strcspn( $json, ',]}"', $i + 1 ) + 1;
+                                       $buf .= substr( $json, $i, $skip );
+                       }
+               }
+               return str_replace( "\x01", '\"', preg_replace( '/ +$/m', '', $buf ) );
+       }
 }
diff --git a/includes/json/Services_JSON.php b/includes/json/Services_JSON.php
deleted file mode 100644 (file)
index b7c101a..0000000
+++ /dev/null
@@ -1,882 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
-* Converts to and from JSON format.
-*
-* JSON (JavaScript Object Notation) is a lightweight data-interchange
-* format. It is easy for humans to read and write. It is easy for machines
-* to parse and generate. It is based on a subset of the JavaScript
-* Programming Language, Standard ECMA-262 3rd Edition - December 1999.
-* This feature can also be found in  Python. JSON is a text format that is
-* completely language independent but uses conventions that are familiar
-* to programmers of the C-family of languages, including C, C++, C#, Java,
-* JavaScript, Perl, TCL, and many others. These properties make JSON an
-* ideal data-interchange language.
-*
-* This package provides a simple encoder and decoder for JSON notation. It
-* is intended for use with client-side Javascript applications that make
-* use of HTTPRequest to perform server communication functions - data can
-* be encoded into JSON notation for use in a client-side javascript, or
-* decoded from incoming Javascript requests. JSON format is native to
-* Javascript, and can be directly eval()'ed with no further parsing
-* overhead
-*
-* All strings should be in ASCII or UTF-8 format!
-*
-* LICENSE: Redistribution and use in source and binary forms, with or
-* without modification, are permitted provided that the following
-* conditions are met: Redistributions of source code must retain the
-* above copyright notice, this list of conditions and the following
-* disclaimer. Redistributions in binary form must reproduce the above
-* copyright notice, this list of conditions and the following disclaimer
-* in the documentation and/or other materials provided with the
-* distribution.
-*
-* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
-* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
-* NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
-* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-* DAMAGE.
-*
-* @file
-* @ingroup API
-* @author Michal Migurski <mike-json@teczno.com>
-* @author Matt Knapp <mdknapp[at]gmail[dot]com>
-* @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
-* @copyright 2005 Michal Migurski
-* @version CVS: $Id$
-* @license http://www.opensource.org/licenses/bsd-license.php
-* @see http://pear.php.net/pepr/pepr-proposal-show.php?id=198
-*/
-
-/**
-* Marker constant for Services_JSON::decode(), used to flag stack state
-*/
-define('SERVICES_JSON_SLICE',   1);
-
-/**
-* Marker constant for Services_JSON::decode(), used to flag stack state
-*/
-define('SERVICES_JSON_IN_STR',  2);
-
-/**
-* Marker constant for Services_JSON::decode(), used to flag stack state
-*/
-define('SERVICES_JSON_IN_ARR',  3);
-
-/**
-* Marker constant for Services_JSON::decode(), used to flag stack state
-*/
-define('SERVICES_JSON_IN_OBJ',  4);
-
-/**
-* Marker constant for Services_JSON::decode(), used to flag stack state
-*/
-define('SERVICES_JSON_IN_CMT', 5);
-
-/**
-* Behavior switch for Services_JSON::decode()
-*/
-define('SERVICES_JSON_LOOSE_TYPE', 16);
-
-/**
-* Behavior switch for Services_JSON::decode()
-*/
-define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
-
-/**
- * Converts to and from JSON format.
- *
- * Brief example of use:
- *
- * <code>
- * // create a new instance of Services_JSON
- * $json = new Services_JSON();
- *
- * // convert a complex value to JSON notation, and send it to the browser
- * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
- * $output = $json->encode($value);
- *
- * print($output);
- * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
- *
- * // accept incoming POST data, assumed to be in JSON notation
- * $input = file_get_contents('php://input', 1000000);
- * $value = $json->decode($input);
- * </code>
- *
- * @ingroup API
- */
-class Services_JSON
-{
-       /**
-        * constructs a new JSON instance
-        *
-        * @param $use Integer: object behavior flags; combine with boolean-OR
-        *
-        *      possible values:
-        *      - SERVICES_JSON_LOOSE_TYPE:  loose typing.
-        *                      "{...}" syntax creates associative arrays
-        *                      instead of objects in decode().
-        *      - SERVICES_JSON_SUPPRESS_ERRORS:  error suppression.
-        *                      Values which can't be encoded (e.g. resources)
-        *                      appear as NULL instead of throwing errors.
-        *                      By default, a deeply-nested resource will
-        *                      bubble up with an error, so all return values
-        *                      from encode() should be checked with isError()
-        */
-       function __construct($use = 0)
-       {
-               $this->use = $use;
-       }
-
-       private static $mHavePear = null;
-       /**
-        * Returns cached result of class_exists('pear'), to avoid calling AutoLoader numerous times
-        * in cases when PEAR is not present.
-        * @return boolean
-        */
-       private static function pearInstalled() {
-               if ( self::$mHavePear === null ) {
-                       self::$mHavePear = class_exists( 'pear' );
-               }
-               return self::$mHavePear;
-       }
-
-       /**
-        * convert a string from one UTF-16 char to one UTF-8 char
-        *
-        * Normally should be handled by mb_convert_encoding, but
-        * provides a slower PHP-only method for installations
-        * that lack the multibyte string extension.
-        *
-        * @param string $utf16 UTF-16 character
-        * @return String: UTF-8 character
-        * @access private
-        */
-       function utf162utf8($utf16)
-       {
-               // oh please oh please oh please oh please oh please
-               if(function_exists('mb_convert_encoding')) {
-                       return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
-               }
-
-               $bytes = (ord($utf16[0]) << 8) | ord($utf16[1]);
-
-               switch(true) {
-                       case ((0x7F & $bytes) == $bytes):
-                               // this case should never be reached, because we are in ASCII range
-                               // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                               return chr(0x7F & $bytes);
-
-                       case (0x07FF & $bytes) == $bytes:
-                               // return a 2-byte UTF-8 character
-                               // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                               return chr(0xC0 | (($bytes >> 6) & 0x1F))
-                                        . chr(0x80 | ($bytes & 0x3F));
-
-                       case (0xFC00 & $bytes) == 0xD800 && strlen($utf16) >= 4 && (0xFC & ord($utf16[2])) == 0xDC:
-                               // return a 4-byte UTF-8 character
-                               $char = ((($bytes & 0x03FF) << 10)
-                                          | ((ord($utf16[2]) & 0x03) << 8)
-                                          | ord($utf16[3]));
-                               $char += 0x10000;
-                               return chr(0xF0 | (($char >> 18) & 0x07))
-                                        . chr(0x80 | (($char >> 12) & 0x3F))
-                                        . chr(0x80 | (($char >> 6) & 0x3F))
-                                        . chr(0x80 | ($char & 0x3F));
-
-                       case (0xFFFF & $bytes) == $bytes:
-                               // return a 3-byte UTF-8 character
-                               // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                               return chr(0xE0 | (($bytes >> 12) & 0x0F))
-                                        . chr(0x80 | (($bytes >> 6) & 0x3F))
-                                        . chr(0x80 | ($bytes & 0x3F));
-               }
-
-               // ignoring UTF-32 for now, sorry
-               return '';
-       }
-
-       /**
-        * convert a string from one UTF-8 char to one UTF-16 char
-        *
-        * Normally should be handled by mb_convert_encoding, but
-        * provides a slower PHP-only method for installations
-        * that lack the multibyte string extension.
-        *
-        * @param string $utf8 UTF-8 character
-        * @return String: UTF-16 character
-        * @access private
-        */
-       function utf82utf16($utf8)
-       {
-               // oh please oh please oh please oh please oh please
-               if(function_exists('mb_convert_encoding')) {
-                       return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
-               }
-
-               switch(strlen($utf8)) {
-                       case 1:
-                               // this case should never be reached, because we are in ASCII range
-                               // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                               return $utf8;
-
-                       case 2:
-                               // return a UTF-16 character from a 2-byte UTF-8 char
-                               // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                               return chr(0x07 & (ord($utf8[0]) >> 2))
-                                        . chr((0xC0 & (ord($utf8[0]) << 6))
-                                                | (0x3F & ord($utf8[1])));
-
-                       case 3:
-                               // return a UTF-16 character from a 3-byte UTF-8 char
-                               // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                               return chr((0xF0 & (ord($utf8[0]) << 4))
-                                                | (0x0F & (ord($utf8[1]) >> 2)))
-                                        . chr((0xC0 & (ord($utf8[1]) << 6))
-                                                | (0x7F & ord($utf8[2])));
-
-                       case 4:
-                               // return a UTF-16 surrogate pair from a 4-byte UTF-8 char
-                               if(ord($utf8[0]) > 0xF4) return ''; # invalid
-                               $char = ((0x1C0000 & (ord($utf8[0]) << 18))
-                                          | (0x03F000 & (ord($utf8[1]) << 12))
-                                          | (0x000FC0 & (ord($utf8[2]) << 6))
-                                          | (0x00003F & ord($utf8[3])));
-                               if($char > 0x10FFFF) return ''; # invalid
-                               $char -= 0x10000;
-                               return chr(0xD8 | (($char >> 18) & 0x03))
-                                        . chr(($char >> 10) & 0xFF)
-                                        . chr(0xDC | (($char >> 8) & 0x03))
-                                        . chr($char & 0xFF);
-               }
-
-               // ignoring UTF-32 for now, sorry
-               return '';
-       }
-
-       /**
-        * encodes an arbitrary variable into JSON format
-        *
-        * @param $var Mixed: any number, boolean, string, array, or object to be encoded.
-        *                      see argument 1 to Services_JSON() above for array-parsing behavior.
-        *                      if var is a string, note that encode() always expects it
-        *                      to be in ASCII or UTF-8 format!
-        * @param $pretty Boolean: pretty-print output with indents and newlines
-        *
-        * @return mixed JSON string representation of input var or an error if a problem occurs
-        * @access public
-        */
-       function encode($var, $pretty=false)
-       {
-               $this->indent = 0;
-               $this->pretty = $pretty;
-               $this->nameValSeparator = $pretty ? ': ' : ':';
-               return $this->encode2($var);
-       }
-
-       /**
-        * encodes an arbitrary variable into JSON format
-        *
-        * @param $var Mixed: any number, boolean, string, array, or object to be encoded.
-        *                      see argument 1 to Services_JSON() above for array-parsing behavior.
-        *                      if var is a string, note that encode() always expects it
-        *                      to be in ASCII or UTF-8 format!
-        *
-        * @return mixed JSON string representation of input var or an error if a problem occurs
-        * @access private
-        */
-       function encode2($var)
-       {
-               if ($this->pretty) {
-                       $close = "\n" . str_repeat("\t", $this->indent);
-                       $open = $close . "\t";
-                       $mid = ',' . $open;
-               }
-               else {
-                       $open = $close = '';
-                       $mid = ',';
-               }
-
-               switch (gettype($var)) {
-                       case 'boolean':
-                               return $var ? 'true' : 'false';
-
-                       case 'NULL':
-                               return 'null';
-
-                       case 'integer':
-                               return (int) $var;
-
-                       case 'double':
-                       case 'float':
-                               return (float) $var;
-
-                       case 'string':
-                               // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
-                               $ascii = '';
-                               $strlen_var = strlen($var);
-
-                          /*
-                               * Iterate over every character in the string,
-                               * escaping with a slash or encoding to UTF-8 where necessary
-                               */
-                               for ($c = 0; $c < $strlen_var; ++$c) {
-
-                                       $ord_var_c = ord($var[$c]);
-
-                                       switch (true) {
-                                               case $ord_var_c == 0x08:
-                                                       $ascii .= '\b';
-                                                       break;
-                                               case $ord_var_c == 0x09:
-                                                       $ascii .= '\t';
-                                                       break;
-                                               case $ord_var_c == 0x0A:
-                                                       $ascii .= '\n';
-                                                       break;
-                                               case $ord_var_c == 0x0C:
-                                                       $ascii .= '\f';
-                                                       break;
-                                               case $ord_var_c == 0x0D:
-                                                       $ascii .= '\r';
-                                                       break;
-
-                                               case $ord_var_c == 0x22:
-                                               case $ord_var_c == 0x2F:
-                                               case $ord_var_c == 0x5C:
-                                                       // double quote, slash, slosh
-                                                       $ascii .= '\\'.$var[$c];
-                                                       break;
-
-                                               case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
-                                                       // characters U-00000000 - U-0000007F (same as ASCII)
-                                                       $ascii .= $var[$c];
-                                                       break;
-
-                                               case (($ord_var_c & 0xE0) == 0xC0):
-                                                       // characters U-00000080 - U-000007FF, mask 110XXXXX
-                                                       // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                                       $char = pack('C*', $ord_var_c, ord($var[$c + 1]));
-                                                       $c += 1;
-                                                       $utf16 = $this->utf82utf16($char);
-                                                       $ascii .= sprintf('\u%04s', bin2hex($utf16));
-                                                       break;
-
-                                               case (($ord_var_c & 0xF0) == 0xE0):
-                                                       // characters U-00000800 - U-0000FFFF, mask 1110XXXX
-                                                       // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                                       $char = pack('C*', $ord_var_c,
-                                                                       ord($var[$c + 1]),
-                                                                       ord($var[$c + 2]));
-                                                       $c += 2;
-                                                       $utf16 = $this->utf82utf16($char);
-                                                       $ascii .= sprintf('\u%04s', bin2hex($utf16));
-                                                       break;
-
-                                               case (($ord_var_c & 0xF8) == 0xF0):
-                                                       // characters U-00010000 - U-001FFFFF, mask 11110XXX
-                                                       // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                                       // These will always return a surrogate pair
-                                                       $char = pack('C*', $ord_var_c,
-                                                                       ord($var[$c + 1]),
-                                                                       ord($var[$c + 2]),
-                                                                       ord($var[$c + 3]));
-                                                       $c += 3;
-                                                       $utf16 = $this->utf82utf16($char);
-                                                       if($utf16 == '') {
-                                                               $ascii .= '\ufffd';
-                                                       } else {
-                                                               $utf16 = str_split($utf16, 2);
-                                                               $ascii .= sprintf('\u%04s\u%04s', bin2hex($utf16[0]), bin2hex($utf16[1]));
-                                                       }
-                                                       break;
-                                       }
-                               }
-
-                               return '"'.$ascii.'"';
-
-                       case 'array':
-                          /*
-                               * As per JSON spec if any array key is not an integer
-                               * we must treat the the whole array as an object. We
-                               * also try to catch a sparsely populated associative
-                               * array with numeric keys here because some JS engines
-                               * will create an array with empty indexes up to
-                               * max_index which can cause memory issues and because
-                               * the keys, which may be relevant, will be remapped
-                               * otherwise.
-                               *
-                               * As per the ECMA and JSON specification an object may
-                               * have any string as a property. Unfortunately due to
-                               * a hole in the ECMA specification if the key is a
-                               * ECMA reserved word or starts with a digit the
-                               * parameter is only accessible using ECMAScript's
-                               * bracket notation.
-                               */
-
-                               // treat as a JSON object
-                               if (is_array($var) && count($var) && (array_keys($var) !== range(0, count($var) - 1))) {
-                                       $this->indent++;
-                                       $properties = array_map(array($this, 'name_value'),
-                                                               array_keys($var),
-                                                               array_values($var));
-                                       $this->indent--;
-
-                                       foreach($properties as $property) {
-                                               if($this->isError($property)) {
-                                                       return $property;
-                                               }
-                                       }
-
-                                       return '{' . $open . join($mid, $properties) . $close . '}';
-                               }
-
-                               // treat it like a regular array
-                               $this->indent++;
-                               $elements = array_map(array($this, 'encode2'), $var);
-                               $this->indent--;
-
-                               foreach($elements as $element) {
-                                       if($this->isError($element)) {
-                                               return $element;
-                                       }
-                               }
-
-                               return '[' . $open . join($mid, $elements) . $close . ']';
-
-                       case 'object':
-                               $vars = get_object_vars($var);
-
-                               $this->indent++;
-                               $properties = array_map(array($this, 'name_value'),
-                                                       array_keys($vars),
-                                                       array_values($vars));
-                               $this->indent--;
-
-                               foreach($properties as $property) {
-                                       if($this->isError($property)) {
-                                               return $property;
-                                       }
-                               }
-
-                               return '{' . $open . join($mid, $properties) . $close . '}';
-
-                       default:
-                               return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS)
-                                       ? 'null'
-                                       : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string");
-               }
-       }
-
-       /**
-        * array-walking function for use in generating JSON-formatted name-value pairs
-        *
-        * @param string $name name of key to use
-        * @param $value Mixed: reference to an array element to be encoded
-        *
-        * @return String: JSON-formatted name-value pair, like '"name":value'
-        * @access private
-        */
-       function name_value($name, $value)
-       {
-               $encoded_value = $this->encode2($value);
-
-               if($this->isError($encoded_value)) {
-                       return $encoded_value;
-               }
-
-               return $this->encode2(strval($name)) . $this->nameValSeparator . $encoded_value;
-       }
-
-       /**
-        * reduce a string by removing leading and trailing comments and whitespace
-        *
-        * @param string $str string value to strip of comments and whitespace
-        *
-        * @return String: string value stripped of comments and whitespace
-        * @access private
-        */
-       function reduce_string($str)
-       {
-               $str = preg_replace(array(
-
-                               // eliminate single line comments in '// ...' form
-                               '#^\s*//(.+)$#m',
-
-                               // eliminate multi-line comments in '/* ... */' form, at start of string
-                               '#^\s*/\*(.+)\*/#Us',
-
-                               // eliminate multi-line comments in '/* ... */' form, at end of string
-                               '#/\*(.+)\*/\s*$#Us'
-
-                       ), '', $str);
-
-               // eliminate extraneous space
-               return trim($str);
-       }
-
-       /**
-        * decodes a JSON string into appropriate variable
-        *
-        * @param string $str JSON-formatted string
-        *
-        * @return mixed number, boolean, string, array, or object
-        *                 corresponding to given JSON input string.
-        *                 See argument 1 to Services_JSON() above for object-output behavior.
-        *                 Note that decode() always returns strings
-        *                 in ASCII or UTF-8 format!
-        * @access public
-        */
-       function decode($str)
-       {
-               $str = $this->reduce_string($str);
-
-               switch (strtolower($str)) {
-                       case 'true':
-                               return true;
-
-                       case 'false':
-                               return false;
-
-                       case 'null':
-                               return null;
-
-                       default:
-                               $m = array();
-
-                               if (is_numeric($str)) {
-                                       // Lookie-loo, it's a number
-
-                                       // This would work on its own, but I'm trying to be
-                                       // good about returning integers where appropriate:
-                                       // return (float)$str;
-
-                                       // Return float or int, as appropriate
-                                       return ((float)$str == (integer)$str)
-                                               ? (integer)$str
-                                               : (float)$str;
-
-                               } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) {
-                                       // STRINGS RETURNED IN UTF-8 FORMAT
-                                       $delim = substr($str, 0, 1);
-                                       $chrs = substr($str, 1, -1);
-                                       $utf8 = '';
-                                       $strlen_chrs = strlen($chrs);
-
-                                       for ($c = 0; $c < $strlen_chrs; ++$c) {
-
-                                               $substr_chrs_c_2 = substr($chrs, $c, 2);
-                                               $ord_chrs_c = ord($chrs[$c]);
-
-                                               switch (true) {
-                                                       case $substr_chrs_c_2 == '\b':
-                                                               $utf8 .= chr(0x08);
-                                                               ++$c;
-                                                               break;
-                                                       case $substr_chrs_c_2 == '\t':
-                                                               $utf8 .= chr(0x09);
-                                                               ++$c;
-                                                               break;
-                                                       case $substr_chrs_c_2 == '\n':
-                                                               $utf8 .= chr(0x0A);
-                                                               ++$c;
-                                                               break;
-                                                       case $substr_chrs_c_2 == '\f':
-                                                               $utf8 .= chr(0x0C);
-                                                               ++$c;
-                                                               break;
-                                                       case $substr_chrs_c_2 == '\r':
-                                                               $utf8 .= chr(0x0D);
-                                                               ++$c;
-                                                               break;
-
-                                                       case $substr_chrs_c_2 == '\\"':
-                                                       case $substr_chrs_c_2 == '\\\'':
-                                                       case $substr_chrs_c_2 == '\\\\':
-                                                       case $substr_chrs_c_2 == '\\/':
-                                                               if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
-                                                                  ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
-                                                                       $utf8 .= $chrs[++$c];
-                                                               }
-                                                               break;
-
-                                                       case preg_match('/\\\uD[89AB][0-9A-F]{2}\\\uD[C-F][0-9A-F]{2}/i', substr($chrs, $c, 12)):
-                                                               // escaped unicode surrogate pair
-                                                               $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
-                                                                          . chr(hexdec(substr($chrs, ($c + 4), 2)))
-                                                                          . chr(hexdec(substr($chrs, ($c + 8), 2)))
-                                                                          . chr(hexdec(substr($chrs, ($c + 10), 2)));
-                                                               $utf8 .= $this->utf162utf8($utf16);
-                                                               $c += 11;
-                                                               break;
-
-                                                       case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
-                                                               // single, escaped unicode character
-                                                               $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
-                                                                          . chr(hexdec(substr($chrs, ($c + 4), 2)));
-                                                               $utf8 .= $this->utf162utf8($utf16);
-                                                               $c += 5;
-                                                               break;
-
-                                                       case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
-                                                               $utf8 .= $chrs[$c];
-                                                               break;
-
-                                                       case ($ord_chrs_c & 0xE0) == 0xC0:
-                                                               // characters U-00000080 - U-000007FF, mask 110XXXXX
-                                                               //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                                               $utf8 .= substr($chrs, $c, 2);
-                                                               ++$c;
-                                                               break;
-
-                                                       case ($ord_chrs_c & 0xF0) == 0xE0:
-                                                               // characters U-00000800 - U-0000FFFF, mask 1110XXXX
-                                                               // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                                               $utf8 .= substr($chrs, $c, 3);
-                                                               $c += 2;
-                                                               break;
-
-                                                       case ($ord_chrs_c & 0xF8) == 0xF0:
-                                                               // characters U-00010000 - U-001FFFFF, mask 11110XXX
-                                                               // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                                               $utf8 .= substr($chrs, $c, 4);
-                                                               $c += 3;
-                                                               break;
-
-                                                       case ($ord_chrs_c & 0xFC) == 0xF8:
-                                                               // characters U-00200000 - U-03FFFFFF, mask 111110XX
-                                                               // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                                               $utf8 .= substr($chrs, $c, 5);
-                                                               $c += 4;
-                                                               break;
-
-                                                       case ($ord_chrs_c & 0xFE) == 0xFC:
-                                                               // characters U-04000000 - U-7FFFFFFF, mask 1111110X
-                                                               // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                                               $utf8 .= substr($chrs, $c, 6);
-                                                               $c += 5;
-                                                               break;
-
-                                               }
-
-                                       }
-
-                                       return $utf8;
-
-                               } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
-                                       // array, or object notation
-
-                                       if ($str[0] == '[') {
-                                               $stk = array(SERVICES_JSON_IN_ARR);
-                                               $arr = array();
-                                       } else {
-                                               if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
-                                                       $stk = array(SERVICES_JSON_IN_OBJ);
-                                                       $obj = array();
-                                               } else {
-                                                       $stk = array(SERVICES_JSON_IN_OBJ);
-                                                       $obj = new stdClass();
-                                               }
-                                       }
-
-                                       array_push($stk, array( 'what'  => SERVICES_JSON_SLICE,
-                                                               'where' => 0,
-                                                               'delim' => false));
-
-                                       $chrs = substr($str, 1, -1);
-                                       $chrs = $this->reduce_string($chrs);
-
-                                       if ($chrs == '') {
-                                               if (reset($stk) == SERVICES_JSON_IN_ARR) {
-                                                       return $arr;
-
-                                               } else {
-                                                       return $obj;
-
-                                               }
-                                       }
-
-                                       //print("\nparsing {$chrs}\n");
-
-                                       $strlen_chrs = strlen($chrs);
-
-                                       for ($c = 0; $c <= $strlen_chrs; ++$c) {
-
-                                               $top = end($stk);
-                                               $substr_chrs_c_2 = substr($chrs, $c, 2);
-
-                                               if (($c == $strlen_chrs) || (($chrs[$c] == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
-                                                       // found a comma that is not inside a string, array, etc.,
-                                                       // OR we've reached the end of the character list
-                                                       $slice = substr($chrs, $top['where'], ($c - $top['where']));
-                                                       array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
-                                                       //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
-
-                                                       if (reset($stk) == SERVICES_JSON_IN_ARR) {
-                                                               // we are in an array, so just push an element onto the stack
-                                                               array_push($arr, $this->decode($slice));
-
-                                                       } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
-                                                               // we are in an object, so figure
-                                                               // out the property name and set an
-                                                               // element in an associative array,
-                                                               // for now
-                                                               $parts = array();
-
-                                                               if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
-                                                                       // "name":value pair
-                                                                       $key = $this->decode($parts[1]);
-                                                                       $val = $this->decode($parts[2]);
-
-                                                                       if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
-                                                                               $obj[$key] = $val;
-                                                                       } else {
-                                                                               $obj->$key = $val;
-                                                                       }
-                                                               } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
-                                                                       // name:value pair, where name is unquoted
-                                                                       $key = $parts[1];
-                                                                       $val = $this->decode($parts[2]);
-
-                                                                       if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
-                                                                               $obj[$key] = $val;
-                                                                       } else {
-                                                                               $obj->$key = $val;
-                                                                       }
-                                                               }
-
-                                                       }
-
-                                               } elseif ((($chrs[$c] == '"') || ($chrs[$c] == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
-                                                       // found a quote, and we are not inside a string
-                                                       array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs[$c]));
-                                                       //print("Found start of string at {$c}\n");
-
-                                               } elseif (($chrs[$c] == $top['delim']) &&
-                                                                ($top['what'] == SERVICES_JSON_IN_STR) &&
-                                                                (($chrs[$c - 1] != '\\') ||
-                                                                ($chrs[$c - 1] == '\\' && $chrs[$c - 2] == '\\'))) {
-                                                       // found a quote, we're in a string, and it's not escaped
-                                                       array_pop($stk);
-                                                       //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
-
-                                               } elseif (($chrs[$c] == '[') &&
-                                                                in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
-                                                       // found a left-bracket, and we are in an array, object, or slice
-                                                       array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false));
-                                                       //print("Found start of array at {$c}\n");
-
-                                               } elseif (($chrs[$c] == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
-                                                       // found a right-bracket, and we're in an array
-                                                       array_pop($stk);
-                                                       //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
-
-                                               } elseif (($chrs[$c] == '{') &&
-                                                                in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
-                                                       // found a left-brace, and we are in an array, object, or slice
-                                                       array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
-                                                       //print("Found start of object at {$c}\n");
-
-                                               } elseif (($chrs[$c] == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
-                                                       // found a right-brace, and we're in an object
-                                                       array_pop($stk);
-                                                       //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
-
-                                               } elseif (($substr_chrs_c_2 == '/*') &&
-                                                                in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
-                                                       // found a comment start, and we are in an array, object, or slice
-                                                       array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false));
-                                                       $c++;
-                                                       //print("Found start of comment at {$c}\n");
-
-                                               } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) {
-                                                       // found a comment end, and we're in one now
-                                                       array_pop($stk);
-                                                       $c++;
-
-                                                       for ($i = $top['where']; $i <= $c; ++$i)
-                                                               $chrs = substr_replace($chrs, ' ', $i, 1);
-
-                                                       //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
-
-                                               }
-
-                                       }
-
-                                       if (reset($stk) == SERVICES_JSON_IN_ARR) {
-                                               return $arr;
-
-                                       } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
-                                               return $obj;
-
-                                       }
-
-                               }
-               }
-       }
-
-       /**
-        * @todo Ultimately, this should just call PEAR::isError()
-        * @return bool
-        */
-       function isError($data, $code = null)
-       {
-               if ( self::pearInstalled() ) {
-                       //avoid some strict warnings on PEAR isError check (looks like http://pear.php.net/bugs/bug.php?id=9950 has been around for some time)
-                       return @PEAR::isError($data, $code);
-               } elseif (is_object($data) && (get_class($data) == 'services_json_error' ||
-                               is_subclass_of($data, 'services_json_error'))) {
-                       return true;
-               }
-
-               return false;
-       }
-}
-
-
-// Hide the PEAR_Error variant from Doxygen
-/// @cond
-if (class_exists('PEAR_Error')) {
-
-       /**
-        * @ingroup API
-        */
-       class Services_JSON_Error extends PEAR_Error
-       {
-               function Services_JSON_Error($message = 'unknown error', $code = null,
-                                               $mode = null, $options = null, $userinfo = null)
-               {
-                       parent::PEAR_Error($message, $code, $mode, $options, $userinfo);
-               }
-       }
-
-} else {
-/// @endcond
-
-       /**
-        * @todo Ultimately, this class shall be descended from PEAR_Error
-        * @ingroup API
-        */
-       class Services_JSON_Error
-       {
-               function Services_JSON_Error($message = 'unknown error', $code = null,
-                                               $mode = null, $options = null, $userinfo = null)
-               {
-                       $this->message = $message;
-               }
-
-               function __toString()
-               {
-                       return $this->message;
-               }
-       }
-}
diff --git a/includes/logging/DeleteLogFormatter.php b/includes/logging/DeleteLogFormatter.php
new file mode 100644 (file)
index 0000000..8a9e6db
--- /dev/null
@@ -0,0 +1,196 @@
+<?php
+/**
+ * Formatter for delete log entries.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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
+ * @author Niklas Laxström
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.21
+ */
+
+/**
+ * This class formats delete log entries.
+ *
+ * @since 1.19
+ */
+class DeleteLogFormatter extends LogFormatter {
+       protected function getMessageKey() {
+               $key = parent::getMessageKey();
+               if ( in_array( $this->entry->getSubtype(), array( 'event', 'revision' ) ) ) {
+                       if ( count( $this->getMessageParameters() ) < 5 ) {
+                               return "$key-legacy";
+                       }
+               }
+               return $key;
+       }
+
+       protected function getMessageParameters() {
+               if ( isset( $this->parsedParametersDeleteLog ) ) {
+                       return $this->parsedParametersDeleteLog;
+               }
+
+               $params = parent::getMessageParameters();
+               $subtype = $this->entry->getSubtype();
+               if ( in_array( $subtype, array( 'event', 'revision' ) ) ) {
+                       // $params[3] here is 'revision' for page revisions, 'oldimage' for file versions, or a comma-separated list of log_ids for log entries.
+                       // $subtype here is 'revision' for page revisions and file versions, or 'event' for log entries.
+                       if (
+                               ( $subtype === 'event' && count( $params ) === 6 ) ||
+                               ( $subtype === 'revision' && isset( $params[3] ) && ( $params[3] === 'revision' || $params[3] === 'oldimage' ) )
+                       ) {
+                               $paramStart = $subtype === 'revision' ? 4 : 3;
+
+                               $old = $this->parseBitField( $params[$paramStart+1] );
+                               $new = $this->parseBitField( $params[$paramStart+2] );
+                               list( $hid, $unhid, $extra ) = RevisionDeleter::getChanges( $new, $old );
+                               $changes = array();
+                               foreach ( $hid as $v ) {
+                                       $changes[] = $this->msg( "$v-hid" )->plain();
+                               }
+                               foreach ( $unhid as $v ) {
+                                       $changes[] = $this->msg( "$v-unhid" )->plain();
+                               }
+                               foreach ( $extra as $v ) {
+                                       $changes[] = $this->msg( $v )->plain();
+                               }
+                               $changeText = $this->context->getLanguage()->listToText( $changes );
+
+                               $newParams = array_slice( $params, 0, 3 );
+                               $newParams[3] = $changeText;
+                               $count = count( explode( ',', $params[$paramStart] ) );
+                               $newParams[4] = $this->context->getLanguage()->formatNum( $count );
+                               return $this->parsedParametersDeleteLog = $newParams;
+                       } else {
+                               return $this->parsedParametersDeleteLog = array_slice( $params, 0, 3 );
+                       }
+               }
+
+               return $this->parsedParametersDeleteLog = $params;
+       }
+
+       protected function parseBitField( $string ) {
+               // Input is like ofield=2134 or just the number
+               if ( strpos( $string, 'field=' ) === 1 ) {
+                       list( , $field ) = explode( '=', $string );
+                       return (int) $field;
+               } else {
+                       return (int) $string;
+               }
+       }
+
+       public function getActionLinks() {
+               $user = $this->context->getUser();
+               if ( !$user->isAllowed( 'deletedhistory' ) || $this->entry->isDeleted( LogPage::DELETED_ACTION ) ) {
+                       return '';
+               }
+
+               switch ( $this->entry->getSubtype() ) {
+               case 'delete': // Show undelete link
+                       if( $user->isAllowed( 'undelete' ) ) {
+                               $message = 'undeletelink';
+                       } else {
+                               $message = 'undeleteviewlink';
+                       }
+                       $revert = Linker::linkKnown(
+                               SpecialPage::getTitleFor( 'Undelete' ),
+                               $this->msg( $message )->escaped(),
+                               array(),
+                               array( 'target' => $this->entry->getTarget()->getPrefixedDBkey() )
+                       );
+                       return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
+
+               case 'revision': // If an edit was hidden from a page give a review link to the history
+                       $params = $this->extractParameters();
+                       if ( !isset( $params[3] ) || !isset( $params[4] ) ) {
+                               return '';
+                       }
+
+                       // Different revision types use different URL params...
+                       $key = $params[3];
+                       // This is a CSV of the IDs
+                       $ids = explode( ',', $params[4] );
+
+                       $links = array();
+
+                       // If there's only one item, we can show a diff link
+                       if ( count( $ids ) == 1 ) {
+                               // Live revision diffs...
+                               if ( $key == 'oldid' || $key == 'revision' ) {
+                                       $links[] = Linker::linkKnown(
+                                               $this->entry->getTarget(),
+                                               $this->msg( 'diff' )->escaped(),
+                                               array(),
+                                               array(
+                                                       'diff' => intval( $ids[0] ),
+                                                       'unhide' => 1
+                                               )
+                                       );
+                               // Deleted revision diffs...
+                               } elseif ( $key == 'artimestamp' || $key == 'archive' ) {
+                                       $links[] = Linker::linkKnown(
+                                               SpecialPage::getTitleFor( 'Undelete' ),
+                                               $this->msg( 'diff' )->escaped(),
+                                               array(),
+                                               array(
+                                                       'target'    => $this->entry->getTarget()->getPrefixedDBkey(),
+                                                       'diff'      => 'prev',
+                                                       'timestamp' => $ids[0]
+                                               )
+                                       );
+                               }
+                       }
+
+                       // View/modify link...
+                       $links[] = Linker::linkKnown(
+                               SpecialPage::getTitleFor( 'Revisiondelete' ),
+                               $this->msg( 'revdel-restore' )->escaped(),
+                               array(),
+                               array(
+                                       'target' => $this->entry->getTarget()->getPrefixedText(),
+                                       'type' => $key,
+                                       'ids' => implode( ',', $ids ),
+                               )
+                       );
+
+                       return $this->msg( 'parentheses' )->rawParams(
+                               $this->context->getLanguage()->pipeList( $links ) )->escaped();
+
+               case 'event': // Hidden log items, give review link
+                       $params = $this->extractParameters();
+                       if ( !isset( $params[3] ) ) {
+                               return '';
+                       }
+                       // This is a CSV of the IDs
+                       $query = $params[3];
+                       // Link to each hidden object ID, $params[1] is the url param
+                       $revert = Linker::linkKnown(
+                               SpecialPage::getTitleFor( 'Revisiondelete' ),
+                               $this->msg( 'revdel-restore' )->escaped(),
+                               array(),
+                               array(
+                                       'target' => $this->entry->getTarget()->getPrefixedText(),
+                                       'type' => 'logging',
+                                       'ids' => $query
+                               )
+                       );
+                       return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
+               default:
+                       return '';
+               }
+       }
+}
index ace26bb..683dc03 100644 (file)
@@ -814,395 +814,3 @@ class LegacyLogFormatter extends LogFormatter {
        }
 }
 
-/**
- * This class formats move log entries.
- * @since 1.19
- */
-class MoveLogFormatter extends LogFormatter {
-       public function getPreloadTitles() {
-               $params = $this->extractParameters();
-               return array( Title::newFromText( $params[3] ) );
-       }
-
-       protected function getMessageKey() {
-               $key = parent::getMessageKey();
-               $params = $this->getMessageParameters();
-               if ( isset( $params[4] ) && $params[4] === '1' ) {
-                       $key .= '-noredirect';
-               }
-               return $key;
-       }
-
-       protected function getMessageParameters() {
-               $params = parent::getMessageParameters();
-               $oldname = $this->makePageLink( $this->entry->getTarget(), array( 'redirect' => 'no' ) );
-               $newname = $this->makePageLink( Title::newFromText( $params[3] ) );
-               $params[2] = Message::rawParam( $oldname );
-               $params[3] = Message::rawParam( $newname );
-               return $params;
-       }
-
-       public function getActionLinks() {
-               if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
-                       || $this->entry->getSubtype() !== 'move'
-                       || !$this->context->getUser()->isAllowed( 'move' ) )
-               {
-                       return '';
-               }
-
-               $params = $this->extractParameters();
-               $destTitle = Title::newFromText( $params[3] );
-               if ( !$destTitle ) {
-                       return '';
-               }
-
-               $revert = Linker::linkKnown(
-                       SpecialPage::getTitleFor( 'Movepage' ),
-                       $this->msg( 'revertmove' )->escaped(),
-                       array(),
-                       array(
-                               'wpOldTitle' => $destTitle->getPrefixedDBkey(),
-                               'wpNewTitle' => $this->entry->getTarget()->getPrefixedDBkey(),
-                               'wpReason'   => $this->msg( 'revertmove' )->inContentLanguage()->text(),
-                               'wpMovetalk' => 0
-                       )
-               );
-               return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
-       }
-}
-
-/**
- * This class formats delete log entries.
- * @since 1.19
- */
-class DeleteLogFormatter extends LogFormatter {
-       protected function getMessageKey() {
-               $key = parent::getMessageKey();
-               if ( in_array( $this->entry->getSubtype(), array( 'event', 'revision' ) ) ) {
-                       if ( count( $this->getMessageParameters() ) < 5 ) {
-                               return "$key-legacy";
-                       }
-               }
-               return $key;
-       }
-
-       protected function getMessageParameters() {
-               if ( isset( $this->parsedParametersDeleteLog ) ) {
-                       return $this->parsedParametersDeleteLog;
-               }
-
-               $params = parent::getMessageParameters();
-               $subtype = $this->entry->getSubtype();
-               if ( in_array( $subtype, array( 'event', 'revision' ) ) ) {
-                       // $params[3] here is 'revision' for page revisions, 'oldimage' for file versions, or a comma-separated list of log_ids for log entries.
-                       // $subtype here is 'revision' for page revisions and file versions, or 'event' for log entries.
-                       if (
-                               ( $subtype === 'event' && count( $params ) === 6 ) ||
-                               ( $subtype === 'revision' && isset( $params[3] ) && ( $params[3] === 'revision' || $params[3] === 'oldimage' ) )
-                       ) {
-                               $paramStart = $subtype === 'revision' ? 4 : 3;
-
-                               $old = $this->parseBitField( $params[$paramStart+1] );
-                               $new = $this->parseBitField( $params[$paramStart+2] );
-                               list( $hid, $unhid, $extra ) = RevisionDeleter::getChanges( $new, $old );
-                               $changes = array();
-                               foreach ( $hid as $v ) {
-                                       $changes[] = $this->msg( "$v-hid" )->plain();
-                               }
-                               foreach ( $unhid as $v ) {
-                                       $changes[] = $this->msg( "$v-unhid" )->plain();
-                               }
-                               foreach ( $extra as $v ) {
-                                       $changes[] = $this->msg( $v )->plain();
-                               }
-                               $changeText = $this->context->getLanguage()->listToText( $changes );
-
-                               $newParams = array_slice( $params, 0, 3 );
-                               $newParams[3] = $changeText;
-                               $count = count( explode( ',', $params[$paramStart] ) );
-                               $newParams[4] = $this->context->getLanguage()->formatNum( $count );
-                               return $this->parsedParametersDeleteLog = $newParams;
-                       } else {
-                               return $this->parsedParametersDeleteLog = array_slice( $params, 0, 3 );
-                       }
-               }
-
-               return $this->parsedParametersDeleteLog = $params;
-       }
-
-       protected function parseBitField( $string ) {
-               // Input is like ofield=2134 or just the number
-               if ( strpos( $string, 'field=' ) === 1 ) {
-                       list( , $field ) = explode( '=', $string );
-                       return (int) $field;
-               } else {
-                       return (int) $string;
-               }
-       }
-
-       public function getActionLinks() {
-               $user = $this->context->getUser();
-               if ( !$user->isAllowed( 'deletedhistory' ) || $this->entry->isDeleted( LogPage::DELETED_ACTION ) ) {
-                       return '';
-               }
-
-               switch ( $this->entry->getSubtype() ) {
-               case 'delete': // Show undelete link
-                       if( $user->isAllowed( 'undelete' ) ) {
-                               $message = 'undeletelink';
-                       } else {
-                               $message = 'undeleteviewlink';
-                       }
-                       $revert = Linker::linkKnown(
-                               SpecialPage::getTitleFor( 'Undelete' ),
-                               $this->msg( $message )->escaped(),
-                               array(),
-                               array( 'target' => $this->entry->getTarget()->getPrefixedDBkey() )
-                       );
-                       return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
-
-               case 'revision': // If an edit was hidden from a page give a review link to the history
-                       $params = $this->extractParameters();
-                       if ( !isset( $params[3] ) || !isset( $params[4] ) ) {
-                               return '';
-                       }
-
-                       // Different revision types use different URL params...
-                       $key = $params[3];
-                       // This is a CSV of the IDs
-                       $ids = explode( ',', $params[4] );
-
-                       $links = array();
-
-                       // If there's only one item, we can show a diff link
-                       if ( count( $ids ) == 1 ) {
-                               // Live revision diffs...
-                               if ( $key == 'oldid' || $key == 'revision' ) {
-                                       $links[] = Linker::linkKnown(
-                                               $this->entry->getTarget(),
-                                               $this->msg( 'diff' )->escaped(),
-                                               array(),
-                                               array(
-                                                       'diff' => intval( $ids[0] ),
-                                                       'unhide' => 1
-                                               )
-                                       );
-                               // Deleted revision diffs...
-                               } elseif ( $key == 'artimestamp' || $key == 'archive' ) {
-                                       $links[] = Linker::linkKnown(
-                                               SpecialPage::getTitleFor( 'Undelete' ),
-                                               $this->msg( 'diff' )->escaped(),
-                                               array(),
-                                               array(
-                                                       'target'    => $this->entry->getTarget()->getPrefixedDBkey(),
-                                                       'diff'      => 'prev',
-                                                       'timestamp' => $ids[0]
-                                               )
-                                       );
-                               }
-                       }
-
-                       // View/modify link...
-                       $links[] = Linker::linkKnown(
-                               SpecialPage::getTitleFor( 'Revisiondelete' ),
-                               $this->msg( 'revdel-restore' )->escaped(),
-                               array(),
-                               array(
-                                       'target' => $this->entry->getTarget()->getPrefixedText(),
-                                       'type' => $key,
-                                       'ids' => implode( ',', $ids ),
-                               )
-                       );
-
-                       return $this->msg( 'parentheses' )->rawParams(
-                               $this->context->getLanguage()->pipeList( $links ) )->escaped();
-
-               case 'event': // Hidden log items, give review link
-                       $params = $this->extractParameters();
-                       if ( !isset( $params[3] ) ) {
-                               return '';
-                       }
-                       // This is a CSV of the IDs
-                       $query = $params[3];
-                       // Link to each hidden object ID, $params[1] is the url param
-                       $revert = Linker::linkKnown(
-                               SpecialPage::getTitleFor( 'Revisiondelete' ),
-                               $this->msg( 'revdel-restore' )->escaped(),
-                               array(),
-                               array(
-                                       'target' => $this->entry->getTarget()->getPrefixedText(),
-                                       'type' => 'logging',
-                                       'ids' => $query
-                               )
-                       );
-                       return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
-               default:
-                       return '';
-               }
-       }
-}
-
-/**
- * This class formats patrol log entries.
- * @since 1.19
- */
-class PatrolLogFormatter extends LogFormatter {
-       protected function getMessageKey() {
-               $key = parent::getMessageKey();
-               $params = $this->getMessageParameters();
-               if ( isset( $params[5] ) && $params[5] ) {
-                       $key .= '-auto';
-               }
-               return $key;
-       }
-
-       protected function getMessageParameters() {
-               $params = parent::getMessageParameters();
-
-               $target = $this->entry->getTarget();
-               $oldid = $params[3];
-               $revision = $this->context->getLanguage()->formatNum( $oldid, true );
-
-               if ( $this->plaintext ) {
-                       $revlink = $revision;
-               } elseif ( $target->exists() ) {
-                       $query = array(
-                               'oldid' => $oldid,
-                               'diff' => 'prev'
-                       );
-                       $revlink = Linker::link( $target, htmlspecialchars( $revision ), array(), $query );
-               } else {
-                       $revlink = htmlspecialchars( $revision );
-               }
-
-               $params[3] = Message::rawParam( $revlink );
-               return $params;
-       }
-}
-
-/**
- * This class formats new user log entries.
- * @since 1.19
- */
-class NewUsersLogFormatter extends LogFormatter {
-       protected function getMessageParameters() {
-               $params = parent::getMessageParameters();
-               $subtype = $this->entry->getSubtype();
-               if ( $subtype === 'create2' || $subtype === 'byemail' ) {
-                       if ( isset( $params[3] ) ) {
-                               $target = User::newFromId( $params[3] );
-                       } else {
-                               $target = User::newFromName( $this->entry->getTarget()->getText(), false );
-                       }
-                       $params[2] = Message::rawParam( $this->makeUserLink( $target ) );
-                       $params[3] = $target->getName();
-               }
-               return $params;
-       }
-
-       public function getComment() {
-               $timestamp = wfTimestamp( TS_MW, $this->entry->getTimestamp() );
-               if ( $timestamp < '20080129000000' ) {
-                       # Suppress $comment from old entries (before 2008-01-29),
-                       # not needed and can contain incorrect links
-                       return '';
-               }
-               return parent::getComment();
-       }
-
-       public function getPreloadTitles() {
-               $subtype = $this->entry->getSubtype();
-               if ( $subtype === 'create2' || $subtype === 'byemail' ) {
-                       //add the user talk to LinkBatch for the userLink
-                       return array( Title::makeTitle( NS_USER_TALK, $this->entry->getTarget()->getText() ) );
-               }
-               return array();
-       }
-}
-
-/**
- * This class formats rights log entries.
- * @since 1.21
- */
-class RightsLogFormatter extends LogFormatter {
-       protected function makePageLink( Title $title = null, $parameters = array() ) {
-               global $wgContLang, $wgUserrightsInterwikiDelimiter;
-
-               if ( !$this->plaintext ) {
-                       $text = $wgContLang->ucfirst( $title->getText() );
-                       $parts = explode( $wgUserrightsInterwikiDelimiter, $text, 2 );
-
-                       if ( count( $parts ) === 2 ) {
-                               $titleLink = WikiMap::foreignUserLink( $parts[1], $parts[0],
-                                       htmlspecialchars( $title->getPrefixedText() ) );
-
-                               if ( $titleLink !== false ) {
-                                       return $titleLink;
-                               }
-                       }
-               }
-
-               return parent::makePageLink( $title, $parameters );
-       }
-
-       protected function getMessageKey() {
-               $key = parent::getMessageKey();
-               $params = $this->getMessageParameters();
-               if ( !isset( $params[3] ) && !isset( $params[4] ) ) {
-                       $key .= '-legacy';
-               }
-               return $key;
-       }
-
-       protected function getMessageParameters() {
-               $params = parent::getMessageParameters();
-
-               // Really old entries
-               if ( !isset( $params[3] ) && !isset( $params[4] ) ) {
-                       return $params;
-               }
-
-               $oldGroups = $params[3];
-               $newGroups = $params[4];
-
-               // Less old entries
-               if ( $oldGroups === '' ) {
-                       $oldGroups = array();
-               } elseif ( is_string( $oldGroups ) ) {
-                       $oldGroups = array_map( 'trim', explode( ',', $oldGroups ) );
-               }
-               if ( $newGroups === '' ) {
-                       $newGroups = array();
-               } elseif ( is_string( $newGroups ) ) {
-                       $newGroups = array_map( 'trim', explode( ',', $newGroups ) );
-               }
-
-               $userName = $this->entry->getTarget()->getText();
-               if ( !$this->plaintext && count( $oldGroups ) ) {
-                       foreach ( $oldGroups as &$group ) {
-                               $group = User::getGroupMember( $group, $userName );
-                       }
-               }
-               if ( !$this->plaintext && count( $newGroups ) ) {
-                       foreach ( $newGroups as &$group ) {
-                               $group = User::getGroupMember( $group, $userName );
-                       }
-               }
-
-               $lang = $this->context->getLanguage();
-               if ( count( $oldGroups ) ) {
-                       $params[3] = $lang->listToText( $oldGroups );
-               } else {
-                       $params[3] = $this->msg( 'rightsnone' )->text();
-               }
-               if ( count( $newGroups ) ) {
-                       // Array_values is used here because of bug 42211
-                       // see use of array_unique in UserrightsPage::doSaveUserGroups on $newGroups.
-                       $params[4] = $lang->listToText( array_values( $newGroups ) );
-               } else {
-                       $params[4] = $this->msg( 'rightsnone' )->text();
-               }
-
-               return $params;
-       }
-}
diff --git a/includes/logging/MoveLogFormatter.php b/includes/logging/MoveLogFormatter.php
new file mode 100644 (file)
index 0000000..8dafb4a
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Formatter for move log entries.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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
+ * @author Niklas Laxström
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.21
+ */
+
+/**
+ * This class formats move log entries.
+ *
+ * @since 1.19
+ */
+class MoveLogFormatter extends LogFormatter {
+       public function getPreloadTitles() {
+               $params = $this->extractParameters();
+               return array( Title::newFromText( $params[3] ) );
+       }
+
+       protected function getMessageKey() {
+               $key = parent::getMessageKey();
+               $params = $this->getMessageParameters();
+               if ( isset( $params[4] ) && $params[4] === '1' ) {
+                       $key .= '-noredirect';
+               }
+               return $key;
+       }
+
+       protected function getMessageParameters() {
+               $params = parent::getMessageParameters();
+               $oldname = $this->makePageLink( $this->entry->getTarget(), array( 'redirect' => 'no' ) );
+               $newname = $this->makePageLink( Title::newFromText( $params[3] ) );
+               $params[2] = Message::rawParam( $oldname );
+               $params[3] = Message::rawParam( $newname );
+               return $params;
+       }
+
+       public function getActionLinks() {
+               if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
+                       || $this->entry->getSubtype() !== 'move'
+                       || !$this->context->getUser()->isAllowed( 'move' ) )
+               {
+                       return '';
+               }
+
+               $params = $this->extractParameters();
+               $destTitle = Title::newFromText( $params[3] );
+               if ( !$destTitle ) {
+                       return '';
+               }
+
+               $revert = Linker::linkKnown(
+                       SpecialPage::getTitleFor( 'Movepage' ),
+                       $this->msg( 'revertmove' )->escaped(),
+                       array(),
+                       array(
+                               'wpOldTitle' => $destTitle->getPrefixedDBkey(),
+                               'wpNewTitle' => $this->entry->getTarget()->getPrefixedDBkey(),
+                               'wpReason'   => $this->msg( 'revertmove' )->inContentLanguage()->text(),
+                               'wpMovetalk' => 0
+                       )
+               );
+               return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
+       }
+}
diff --git a/includes/logging/NewUsersLogFormatter.php b/includes/logging/NewUsersLogFormatter.php
new file mode 100644 (file)
index 0000000..ed37b6a
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Formatter for new user log entries.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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
+ * @author Niklas Laxström
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.21
+ */
+
+/**
+ * This class formats new user log entries.
+ *
+ * @since 1.19
+ */
+class NewUsersLogFormatter extends LogFormatter {
+       protected function getMessageParameters() {
+               $params = parent::getMessageParameters();
+               $subtype = $this->entry->getSubtype();
+               if ( $subtype === 'create2' || $subtype === 'byemail' ) {
+                       if ( isset( $params[3] ) ) {
+                               $target = User::newFromId( $params[3] );
+                       } else {
+                               $target = User::newFromName( $this->entry->getTarget()->getText(), false );
+                       }
+                       $params[2] = Message::rawParam( $this->makeUserLink( $target ) );
+                       $params[3] = $target->getName();
+               }
+               return $params;
+       }
+
+       public function getComment() {
+               $timestamp = wfTimestamp( TS_MW, $this->entry->getTimestamp() );
+               if ( $timestamp < '20080129000000' ) {
+                       # Suppress $comment from old entries (before 2008-01-29),
+                       # not needed and can contain incorrect links
+                       return '';
+               }
+               return parent::getComment();
+       }
+
+       public function getPreloadTitles() {
+               $subtype = $this->entry->getSubtype();
+               if ( $subtype === 'create2' || $subtype === 'byemail' ) {
+                       //add the user talk to LinkBatch for the userLink
+                       return array( Title::makeTitle( NS_USER_TALK, $this->entry->getTarget()->getText() ) );
+               }
+               return array();
+       }
+}
diff --git a/includes/logging/PatrolLogFormatter.php b/includes/logging/PatrolLogFormatter.php
new file mode 100644 (file)
index 0000000..74ab196
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Formatter for new user log entries.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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
+ * @author Niklas Laxström
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.21
+ */
+
+/**
+ * This class formats patrol log entries.
+ *
+ * @since 1.19
+ */
+class PatrolLogFormatter extends LogFormatter {
+       protected function getMessageKey() {
+               $key = parent::getMessageKey();
+               $params = $this->getMessageParameters();
+               if ( isset( $params[5] ) && $params[5] ) {
+                       $key .= '-auto';
+               }
+               return $key;
+       }
+
+       protected function getMessageParameters() {
+               $params = parent::getMessageParameters();
+
+               $target = $this->entry->getTarget();
+               $oldid = $params[3];
+               $revision = $this->context->getLanguage()->formatNum( $oldid, true );
+
+               if ( $this->plaintext ) {
+                       $revlink = $revision;
+               } elseif ( $target->exists() ) {
+                       $query = array(
+                               'oldid' => $oldid,
+                               'diff' => 'prev'
+                       );
+                       $revlink = Linker::link( $target, htmlspecialchars( $revision ), array(), $query );
+               } else {
+                       $revlink = htmlspecialchars( $revision );
+               }
+
+               $params[3] = Message::rawParam( $revlink );
+               return $params;
+       }
+}
diff --git a/includes/logging/RightsLogFormatter.php b/includes/logging/RightsLogFormatter.php
new file mode 100644 (file)
index 0000000..67bd4d0
--- /dev/null
@@ -0,0 +1,112 @@
+<?php
+/**
+ * Formatter for user rights log entries.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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
+ * @author Alexandre Emsenhuber
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.21
+ */
+
+/**
+ * This class formats rights log entries.
+ *
+ * @since 1.21
+ */
+class RightsLogFormatter extends LogFormatter {
+       protected function makePageLink( Title $title = null, $parameters = array() ) {
+               global $wgContLang, $wgUserrightsInterwikiDelimiter;
+
+               if ( !$this->plaintext ) {
+                       $text = $wgContLang->ucfirst( $title->getText() );
+                       $parts = explode( $wgUserrightsInterwikiDelimiter, $text, 2 );
+
+                       if ( count( $parts ) === 2 ) {
+                               $titleLink = WikiMap::foreignUserLink( $parts[1], $parts[0],
+                                       htmlspecialchars( $title->getPrefixedText() ) );
+
+                               if ( $titleLink !== false ) {
+                                       return $titleLink;
+                               }
+                       }
+               }
+
+               return parent::makePageLink( $title, $parameters );
+       }
+
+       protected function getMessageKey() {
+               $key = parent::getMessageKey();
+               $params = $this->getMessageParameters();
+               if ( !isset( $params[3] ) && !isset( $params[4] ) ) {
+                       $key .= '-legacy';
+               }
+               return $key;
+       }
+
+       protected function getMessageParameters() {
+               $params = parent::getMessageParameters();
+
+               // Really old entries
+               if ( !isset( $params[3] ) && !isset( $params[4] ) ) {
+                       return $params;
+               }
+
+               $oldGroups = $params[3];
+               $newGroups = $params[4];
+
+               // Less old entries
+               if ( $oldGroups === '' ) {
+                       $oldGroups = array();
+               } elseif ( is_string( $oldGroups ) ) {
+                       $oldGroups = array_map( 'trim', explode( ',', $oldGroups ) );
+               }
+               if ( $newGroups === '' ) {
+                       $newGroups = array();
+               } elseif ( is_string( $newGroups ) ) {
+                       $newGroups = array_map( 'trim', explode( ',', $newGroups ) );
+               }
+
+               $userName = $this->entry->getTarget()->getText();
+               if ( !$this->plaintext && count( $oldGroups ) ) {
+                       foreach ( $oldGroups as &$group ) {
+                               $group = User::getGroupMember( $group, $userName );
+                       }
+               }
+               if ( !$this->plaintext && count( $newGroups ) ) {
+                       foreach ( $newGroups as &$group ) {
+                               $group = User::getGroupMember( $group, $userName );
+                       }
+               }
+
+               $lang = $this->context->getLanguage();
+               if ( count( $oldGroups ) ) {
+                       $params[3] = $lang->listToText( $oldGroups );
+               } else {
+                       $params[3] = $this->msg( 'rightsnone' )->text();
+               }
+               if ( count( $newGroups ) ) {
+                       // Array_values is used here because of bug 42211
+                       // see use of array_unique in UserrightsPage::doSaveUserGroups on $newGroups.
+                       $params[4] = $lang->listToText( array_values( $newGroups ) );
+               } else {
+                       $params[4] = $this->msg( 'rightsnone' )->text();
+               }
+
+               return $params;
+       }
+}
index 46d1b95..e1bacf3 100644 (file)
@@ -65,8 +65,8 @@ class BmpHandler extends BitmapHandler {
                fclose( $f );
 
                // Extract binary form of width and height from the header
-               $w = substr( $header, 18, 4);
-               $h = substr( $header, 22, 4);
+               $w = substr( $header, 18, 4 );
+               $h = substr( $header, 22, 4 );
 
                // Convert the unsigned long 32 bits (little endian):
                try {
index e2dc68b..1d8337d 100644 (file)
@@ -765,16 +765,16 @@ class BitmapHandler extends ImageHandler {
        public function rotate( $file, $params ) {
                global $wgImageMagickConvertCommand;
 
-               $rotation = ( $params[ 'rotation' ] + $this->getRotation( $file ) ) % 360;
+               $rotation = ( $params['rotation'] + $this->getRotation( $file ) ) % 360;
                $scene = false;
 
                $scaler = self::getScalerType( null, false );
                switch ( $scaler ) {
                        case 'im':
                                $cmd = wfEscapeShellArg( $wgImageMagickConvertCommand ) . " " .
-                                       wfEscapeShellArg( $this->escapeMagickInput( $params[ 'srcPath' ], $scene ) ) .
+                                       wfEscapeShellArg( $this->escapeMagickInput( $params['srcPath'], $scene ) ) .
                                        " -rotate -$rotation " .
-                                       wfEscapeShellArg( $this->escapeMagickOutput( $params[ 'dstPath' ] ) ) . " 2>&1";
+                                       wfEscapeShellArg( $this->escapeMagickOutput( $params['dstPath'] ) ) . " 2>&1";
                                wfDebug( __METHOD__ . ": running ImageMagick: $cmd\n" );
                                wfProfileIn( 'convert' );
                                $retval = 0;
index 4698966..0831e68 100644 (file)
@@ -263,7 +263,7 @@ class DjVuImage {
                        $retval = '';
                        $txt = wfShellExec( $cmd, $retval, array(), array( 'memory' => self::DJVUTXT_MEMORY_LIMIT ) );
                        wfProfileOut( 'djvutxt' );
-                       if( $retval == 0) {
+                       if( $retval == 0 ) {
                                # Strip some control characters
                                $txt = preg_replace( "/[\013\035\037]/", "", $txt );
                                $reg = <<<EOR
index 1671ab2..98c423f 100644 (file)
@@ -51,11 +51,11 @@ class ExifBitmapHandler extends BitmapHandler {
 
                // Treat Software as a special case because in can contain
                // an array of (SoftwareName, Version).
-               if (isset( $metadata['Software'] )
+               if ( isset( $metadata['Software'] )
                        && is_array( $metadata['Software'] )
-                       && is_array( $metadata['Software'][0])
+                       && is_array( $metadata['Software'][0] )
                        && isset( $metadata['Software'][0][0] )
-                       && isset( $metadata['Software'][0][1])
+                       && isset( $metadata['Software'][0][1] )
                ) {
                        $metadata['Software'] = $metadata['Software'][0][0] . ' (Version '
                                . $metadata['Software'][0][1] . ')';
index 1a7d772..5bcb484 100644 (file)
@@ -79,7 +79,7 @@ class FormatMetadata {
                        }
 
                        //This is done differently as the tag is an array.
-                       if ( $tag == 'GPSTimeStamp' && count( $vals ) === 3) {
+                       if ( $tag == 'GPSTimeStamp' && count( $vals ) === 3 ) {
                                //hour min sec array
 
                                $h = explode( '/', $vals[0] );
@@ -682,7 +682,7 @@ class FormatMetadata {
                                                $urgency = 'high';
                                        } elseif ( $val == 5 ) {
                                                $urgency = 'normal';
-                                       } elseif ( $val <= 8 && $val > 5) {
+                                       } elseif ( $val <= 8 && $val > 5 ) {
                                                $urgency = 'low';
                                        }
 
index 419afee..ad9919b 100644 (file)
@@ -160,7 +160,7 @@ abstract class ImageHandler extends MediaHandler {
                $width = intval( $width );
 
                # Sanity check $width
-               if( $width <= 0) {
+               if( $width <= 0 ) {
                        wfDebug( __METHOD__ . ": Invalid destination width: $width\n" );
                        return false;
                }
index 3551943..cb0fbb3 100644 (file)
@@ -69,18 +69,18 @@ class JpegHandler extends ExifBitmapHandler {
        public function rotate( $file, $params ) {
                global $wgJpegTran;
 
-               $rotation = ( $params[ 'rotation' ] + $this->getRotation( $file ) ) % 360;
+               $rotation = ( $params['rotation'] + $this->getRotation( $file ) ) % 360;
 
-               if( $wgJpegTran && is_file( $wgJpegTran ) ){
+               if( $wgJpegTran && is_file( $wgJpegTran ) ) {
                        $cmd = wfEscapeShellArg( $wgJpegTran ) .
                                " -rotate " . wfEscapeShellArg( $rotation ) .
-                               " -outfile " . wfEscapeShellArg( $params[ 'dstPath' ] ) .
-                               " " . wfEscapeShellArg( $params[ 'srcPath' ] ) .  " 2>&1";
-                               wfDebug( __METHOD__ . ": running jpgtran: $cmd\n" );
-                               wfProfileIn( 'jpegtran' );
-                               $retval = 0;
-                               $err = wfShellExec( $cmd, $retval, $env );
-                               wfProfileOut( 'jpegtran' );
+                               " -outfile " . wfEscapeShellArg( $params['dstPath'] ) .
+                               " " . wfEscapeShellArg( $params['srcPath'] ) . " 2>&1";
+                       wfDebug( __METHOD__ . ": running jpgtran: $cmd\n" );
+                       wfProfileIn( 'jpegtran' );
+                       $retval = 0;
+                       $err = wfShellExec( $cmd, $retval, $env );
+                       wfProfileOut( 'jpegtran' );
                        if ( $retval !== 0 ) {
                                $this->logErrorForExternalProcess( $retval, $err, $cmd );
                                return new MediaTransformError( 'thumbnail_error', 0, 0, $err );
index b36bfa9..b67f3d3 100644 (file)
@@ -136,7 +136,7 @@ abstract class MediaHandler {
        static function getMetadataVersion() {
                $version = Array( '2' ); // core metadata version
                wfRunHooks( 'GetMetadataVersion', Array( &$version ) );
-               return implode( ';', $version);
+               return implode( ';', $version );
        }
 
        /**
index 1f95bc3..1c2dfdd 100644 (file)
@@ -151,7 +151,12 @@ abstract class MediaTransformOutput {
                if ( $this->isError() ) {
                        return false;
                } elseif ( $this->path === null ) {
-                       return $this->file->getLocalRefPath();
+                       return $this->file->getLocalRefPath(); // assume thumb was not scaled
+               } elseif ( FileBackend::isStoragePath( $this->path ) ) {
+                       $be = $this->file->getRepo()->getBackend();
+                       // The temp file will be process cached by FileBackend
+                       $fsFile = $be->getLocalReference( array( 'src' => $this->path ) );
+                       return $fsFile ? $fsFile->getPath() : false;
                } else {
                        return $this->path; // may return false
                }
index 87f705c..e65a558 100644 (file)
@@ -214,9 +214,9 @@ class PNGMetadataExtractor {
                                                        continue;
                                                }
                                        }
-                                       $finalKeyword = self::$text_chunks[ $items[1] ];
-                                       $text[ $finalKeyword ][ $items[3] ] = $items[5];
-                                       $text[ $finalKeyword ]['_type'] = 'lang';
+                                       $finalKeyword = self::$text_chunks[$items[1]];
+                                       $text[$finalKeyword][$items[3]] = $items[5];
+                                       $text[$finalKeyword]['_type'] = 'lang';
 
                                } else {
                                        // Error reading iTXt chunk
@@ -251,9 +251,9 @@ class PNGMetadataExtractor {
                                        throw new Exception( __METHOD__ . ": Read error (error with iconv)" );
                                }
 
-                               $finalKeyword = self::$text_chunks[ $keyword ];
-                               $text[ $finalKeyword ][ 'x-default' ] = $content;
-                               $text[ $finalKeyword ]['_type'] = 'lang';
+                               $finalKeyword = self::$text_chunks[$keyword];
+                               $text[$finalKeyword]['x-default'] = $content;
+                               $text[$finalKeyword]['_type'] = 'lang';
 
                        } elseif ( $chunk_type == 'zTXt' ) {
                                if ( function_exists( 'gzuncompress' ) ) {
@@ -303,9 +303,9 @@ class PNGMetadataExtractor {
                                                throw new Exception( __METHOD__ . ": Read error (error with iconv)" );
                                        }
 
-                                       $finalKeyword = self::$text_chunks[ $keyword ];
-                                       $text[ $finalKeyword ][ 'x-default' ] = $content;
-                                       $text[ $finalKeyword ]['_type'] = 'lang';
+                                       $finalKeyword = self::$text_chunks[$keyword];
+                                       $text[$finalKeyword]['x-default'] = $content;
+                                       $text[$finalKeyword]['_type'] = 'lang';
 
                                } else {
                                        wfDebug( __METHOD__ . " Cannot decompress zTXt chunk due to lack of zlib. Skipping." );
index e07fd86..f21d6b0 100644 (file)
@@ -179,7 +179,7 @@ class SVGReader {
         * @param string $metafield that we will fill with the result
         */
        private function readField( $name, $metafield=null ) {
-               $this->debug ( "Read field $metafield" );
+               $this->debug( "Read field $metafield" );
                if( !$metafield || $this->reader->nodeType != XmlReader::ELEMENT ) {
                        return;
                }
@@ -201,7 +201,7 @@ class SVGReader {
         * @throws MWException
         */
        private function readXml( $metafield=null ) {
-               $this->debug ( "Read top level metadata" );
+               $this->debug( "Read top level metadata" );
                if( !$metafield || $this->reader->nodeType != XmlReader::ELEMENT ) {
                        return;
                }
@@ -220,7 +220,7 @@ class SVGReader {
         * @param string $name of the element that we are reading from
         */
        private function animateFilter( $name ) {
-               $this->debug ( "animate filter for tag $name" );
+               $this->debug( "animate filter for tag $name" );
                if( $this->reader->nodeType != XmlReader::ELEMENT ) {
                        return;
                }
index d9cca3f..081433b 100644 (file)
@@ -993,15 +993,15 @@ class XMPReader {
                if ( $elm !== self::NS_RDF . ' li' ) {
                        throw new MWException( __METHOD__ . " <rdf:li> expected but got $elm." );
                }
-               if ( !isset( $attribs[ self::NS_XML . ' lang'] )
-                       || !preg_match( '/^[-A-Za-z0-9]{2,}$/D', $attribs[ self::NS_XML . ' lang' ] ) )
+               if ( !isset( $attribs[self::NS_XML . ' lang'] )
+                       || !preg_match( '/^[-A-Za-z0-9]{2,}$/D', $attribs[self::NS_XML . ' lang'] ) )
                {
                        throw new MWException( __METHOD__
                                . " <rdf:li> did not contain, or has invalid xml:lang attribute in lang alternative" );
                }
 
                // Lang is case-insensitive.
-               $this->itemLang = strtolower( $attribs[ self::NS_XML . ' lang' ] );
+               $this->itemLang = strtolower( $attribs[self::NS_XML . ' lang'] );
 
                // need to add curItem[0] on again since one is for the specific item
                // and one is for the entire group.
index b7b35dc..f727400 100644 (file)
@@ -214,7 +214,7 @@ class XMPValidate {
                        // this only validates standalone properties, not arrays, etc
                        return;
                }
-               if ( !preg_match( '/^[-A-Za-z0-9]{2,}$/D', $val) ) {
+               if ( !preg_match( '/^[-A-Za-z0-9]{2,}$/D', $val ) ) {
                        //this is a rather naive check.
                        wfDebugLog( 'XMP', __METHOD__ . " Expected Lang code but got $val" );
                        $val = null;
index 0d96ed6..bc2acb3 100644 (file)
@@ -55,9 +55,9 @@
  *              'compress_threshold' => 10240,
  *              'persistent' => true));
  *
- * $mc->add('key', array('some', 'array'));
- * $mc->replace('key', 'some random string');
- * $val = $mc->get('key');
+ * $mc->add( 'key', array( 'some', 'array' ) );
+ * $mc->replace( 'key', 'some random string' );
+ * $val = $mc->get( 'key' );
  *
  * @author  Ryan T. Dean <rtdean@cytherianage.net>
  * @version 0.1.2
@@ -489,17 +489,17 @@ class MWMemcached {
                        }
                        $key = is_array( $key ) ? $key[1] : $key;
                        if ( !isset( $sock_keys[$sock] ) ) {
-                               $sock_keys[ intval( $sock ) ] = array();
+                               $sock_keys[intval( $sock )] = array();
                                $socks[] = $sock;
                        }
-                       $sock_keys[ intval( $sock ) ][] = $key;
+                       $sock_keys[intval( $sock )][] = $key;
                }
 
                $gather = array();
                // Send out the requests
                foreach ( $socks as $sock ) {
                        $cmd = 'gets';
-                       foreach ( $sock_keys[ intval( $sock ) ] as $key ) {
+                       foreach ( $sock_keys[intval( $sock )] as $key ) {
                                $cmd .= ' ' . $key;
                        }
                        $cmd .= "\r\n";
index 542ac0f..36bfb48 100644 (file)
@@ -555,7 +555,7 @@ class CoreParserFunctions {
                $t = Title::newFromText( $title );
                if ( is_null( $t ) || !$t->canTalk() )
                        return '';
-               return wfEscapeWikiText( $t->getTalkPage()->getPrefixedUrl() );
+               return wfEscapeWikiText( $t->getTalkPage()->getPrefixedURL() );
        }
        static function subjectpagename( $parser, $title = null ) {
                $t = Title::newFromText( $title );
@@ -567,7 +567,7 @@ class CoreParserFunctions {
                $t = Title::newFromText( $title );
                if ( is_null( $t ) )
                        return '';
-               return wfEscapeWikiText( $t->getSubjectPage()->getPrefixedUrl() );
+               return wfEscapeWikiText( $t->getSubjectPage()->getPrefixedURL() );
        }
 
        /**
@@ -753,7 +753,7 @@ class CoreParserFunctions {
         */
        static function anchorencode( $parser, $text ) {
                $text = $parser->killMarkers( $text );
-               return substr( $parser->guessSectionNameFromWikiText( $text ), 1);
+               return (string)substr( $parser->guessSectionNameFromWikiText( $text ), 1 );
        }
 
        static function special( $parser, $text ) {
index a2da307..08b1f3e 100644 (file)
@@ -337,7 +337,7 @@ class DateFormatter {
        function makeIsoYear( $year ) {
                # Assumes the year is in a nice format, as enforced by the regex
                if ( substr( $year, -2 ) == 'BC' ) {
-                       $num = intval(substr( $year, 0, -3 )) - 1;
+                       $num = intval( substr( $year, 0, -3 ) ) - 1;
                        # PHP bug note: sprintf( "%04d", -1 ) fails poorly
                        $text = sprintf( '-%04d', $num );
 
index 49b2d33..f125510 100644 (file)
@@ -406,7 +406,8 @@ class LinkHolderArray {
                $text = preg_replace_callback(
                        '/(<!--LINK .*?-->)/',
                        $replacer->cb(),
-                       $text);
+                       $text
+               );
 
                wfProfileOut( __METHOD__ . '-replace' );
                wfProfileOut( __METHOD__ );
index 8209f8a..5b14ad2 100644 (file)
@@ -1252,7 +1252,7 @@ class Parser {
                        ));
                        $titleObj = SpecialPage::getTitleFor( 'Booksources', $num );
                        return'<a href="' .
-                               htmlspecialchars( $titleObj->getLocalUrl() ) .
+                               htmlspecialchars( $titleObj->getLocalURL() ) .
                                "\" class=\"internal mw-magiclink-isbn\">ISBN $isbn</a>";
                } else {
                        return $m[0];
@@ -2756,7 +2756,7 @@ class Parser {
                        case 'talkpagenamee':
                                if ( $this->mTitle->canTalk() ) {
                                        $talkPage = $this->mTitle->getTalkPage();
-                                       $value = wfEscapeWikiText( $talkPage->getPrefixedUrl() );
+                                       $value = wfEscapeWikiText( $talkPage->getPrefixedURL() );
                                } else {
                                        $value = '';
                                }
@@ -2767,10 +2767,10 @@ class Parser {
                                break;
                        case 'subjectpagenamee':
                                $subjPage = $this->mTitle->getSubjectPage();
-                               $value = wfEscapeWikiText( $subjPage->getPrefixedUrl() );
+                               $value = wfEscapeWikiText( $subjPage->getPrefixedURL() );
                                break;
                        case 'pageid': // requested in bug 23427
-                               $pageid = $this->getTitle()->getArticleId();
+                               $pageid = $this->getTitle()->getArticleID();
                                if( $pageid == 0 ) {
                                        # 0 means the page doesn't exist in the database,
                                        # which means the user is previewing a new page.
@@ -3289,7 +3289,7 @@ class Parser {
                if ( !$found && $title ) {
                        if ( !Profiler::instance()->isPersistent() ) {
                                # Too many unique items can kill profiling DBs/collectors
-                               $titleProfileIn = __METHOD__ . "-title-" . $title->getDBKey();
+                               $titleProfileIn = __METHOD__ . "-title-" . $title->getDBkey();
                                wfProfileIn( $titleProfileIn ); // template in
                        }
                        wfProfileIn( __METHOD__ . '-loadtpl' );
@@ -3592,7 +3592,7 @@ class Parser {
                }
 
                $dom = $this->preprocessToDom( $text, self::PTD_FOR_INCLUSION );
-               $this->mTplDomCache[ $titleText ] = $dom;
+               $this->mTplDomCache[$titleText] = $dom;
 
                if ( !$title->equals( $cacheTitle ) ) {
                        $this->mTplRedirCache[$cacheTitle->getPrefixedDBkey()] =
@@ -3775,7 +3775,7 @@ class Parser {
                        return wfMessage( 'scarytranscludedisabled' )->inContentLanguage()->text();
                }
 
-               $url = $title->getFullUrl( "action=$action" );
+               $url = $title->getFullURL( "action=$action" );
 
                if ( strlen( $url ) > 255 ) {
                        return wfMessage( 'scarytranscludetoolong' )->inContentLanguage()->text();
@@ -3811,8 +3811,8 @@ class Parser {
                $dbw->replace( 'transcache', array( 'tc_url' ), array(
                        'tc_url' => $url,
                        'tc_time' => $dbw->timestamp( time() ),
-                       'tc_contents' => $text)
-               );
+                       'tc_contents' => $text
+               ) );
                return $text;
        }
 
index d0c57ab..78ebbbb 100644 (file)
@@ -397,7 +397,7 @@ class Preprocessor_DOM implements Preprocessor {
 
                                                if ( $stack->top ) {
                                                        $part = $stack->top->getCurrentPart();
-                                                       if ( !(isset( $part->commentEnd ) && $part->commentEnd == $wsStart - 1 )) {
+                                                       if ( !( isset( $part->commentEnd ) && $part->commentEnd == $wsStart - 1 ) ) {
                                                                $part->visualEnd = $wsStart;
                                                        }
                                                        // Else comments abutting, no change in visual end
@@ -746,7 +746,7 @@ class PPDStack {
                        $class = $this->elementClass;
                        $this->stack[] = new $class( $data );
                }
-               $this->top = $this->stack[ count( $this->stack ) - 1 ];
+               $this->top = $this->stack[count( $this->stack ) - 1];
                $this->accum =& $this->top->getAccum();
        }
 
@@ -757,7 +757,7 @@ class PPDStack {
                $temp = array_pop( $this->stack );
 
                if ( count( $this->stack ) ) {
-                       $this->top = $this->stack[ count( $this->stack ) - 1 ];
+                       $this->top = $this->stack[count( $this->stack ) - 1];
                        $this->accum =& $this->top->getAccum();
                } else {
                        $this->top = self::$false;
@@ -1014,11 +1014,13 @@ class PPFrame_DOM implements PPFrame {
 
                while ( count( $iteratorStack ) > 1 ) {
                        $level = count( $outStack ) - 1;
-                       $iteratorNode =& $iteratorStack[ $level ];
+                       $iteratorNode =& $iteratorStack[$level];
                        $out =& $outStack[$level];
                        $index =& $indexStack[$level];
 
-                       if ( $iteratorNode instanceof PPNode_DOM ) $iteratorNode = $iteratorNode->node;
+                       if ( $iteratorNode instanceof PPNode_DOM ) {
+                               $iteratorNode = $iteratorNode->node;
+                       }
 
                        if ( is_array( $iteratorNode ) ) {
                                if ( $index >= count( $iteratorNode ) ) {
@@ -1148,9 +1150,7 @@ class PPFrame_DOM implements PPFrame {
 
                                        # Insert a heading marker only for <h> children of <root>
                                        # This is to stop extractSections from going over multiple tree levels
-                                       if ( $contextNode->parentNode->nodeName == 'root'
-                                         && $this->parser->ot['html'] )
-                                       {
+                                       if ( $contextNode->parentNode->nodeName == 'root' && $this->parser->ot['html'] ) {
                                                # Insert heading index marker
                                                $headingIndex = $contextNode->getAttribute( 'i' );
                                                $titleText = $this->title->getPrefixedDBkey();
index fad1adb..9f87ed7 100644 (file)
@@ -332,7 +332,7 @@ class Preprocessor_Hash implements Preprocessor {
 
                                                if ( $stack->top ) {
                                                        $part = $stack->top->getCurrentPart();
-                                                       if ( !(isset( $part->commentEnd ) && $part->commentEnd == $wsStart - 1 )) {
+                                                       if ( !( isset( $part->commentEnd ) && $part->commentEnd == $wsStart - 1 ) ) {
                                                                $part->visualEnd = $wsStart;
                                                        }
                                                        // Else comments abutting, no change in visual end
@@ -952,7 +952,7 @@ class PPFrame_Hash implements PPFrame {
 
                while ( count( $iteratorStack ) > 1 ) {
                        $level = count( $outStack ) - 1;
-                       $iteratorNode =& $iteratorStack[ $level ];
+                       $iteratorNode =& $iteratorStack[$level];
                        $out =& $outStack[$level];
                        $index =& $indexStack[$level];
 
index 5ecdc4f..c732b8d 100644 (file)
@@ -537,7 +537,7 @@ class Profiler {
                                $eventCount = $this->mCalls[$name];
                                $timeSum = (float) ($elapsed * 1000);
                                $memorySum = (float)$this->mMemory[$name];
-                               $name = substr($name, 0, 255);
+                               $name = substr( $name, 0, 255 );
 
                                // Kludge
                                $timeSum = ($timeSum >= 0) ? $timeSum : 0;
index abefa81..1cf4fa7 100644 (file)
@@ -58,7 +58,7 @@ class ProfilerSimpleUDP extends ProfilerSimple {
                                continue;
                        }
                        $pfline = sprintf( "%s %s %d %f %f %f %f %s\n", $this->getProfileID(), "-", $pfdata['count'],
-                               $pfdata['cpu'], $pfdata['cpu_sq'], $pfdata['real'], $pfdata['real_sq'], $entry);
+                               $pfdata['cpu'], $pfdata['cpu_sq'], $pfdata['real'], $pfdata['real_sq'], $entry );
                        $length = strlen( $pfline );
                        /* printf("<!-- $pfline -->"); */
                        if ( $length + $plength > 1400 ) {
index 27f682c..62c0822 100644 (file)
@@ -863,7 +863,9 @@ class ResourceLoader {
                                // output javascript "[]" instead of "{}". This fixes that.
                                (object)$styles,
                                (object)$messages
-                       ) );
+                       ),
+                       ResourceLoader::inDebugMode()
+               );
        }
 
        /**
@@ -1039,7 +1041,7 @@ class ResourceLoader {
         * @return string
         */
        public static function makeConfigSetScript( array $configuration ) {
-               return Xml::encodeJsCall( 'mw.config.set', array( $configuration ) );
+               return Xml::encodeJsCall( 'mw.config.set', array( $configuration ), ResourceLoader::inDebugMode() );
        }
 
        /**
index 0f8e54c..e840300 100644 (file)
@@ -108,7 +108,7 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
         * @return array|int|Mixed
         */
        public function getModifiedTime( ResourceLoaderContext $context ) {
-               $this->language = Language::factory( $context ->getLanguage() );
+               $this->language = Language::factory( $context->getLanguage() );
                $cache = wfGetCache( CACHE_ANYTHING );
                $key = wfMemcKey( 'resourceloader', 'langdatamodule', 'changeinfo' );
 
index 4624cbc..0b7e196 100644 (file)
@@ -56,7 +56,9 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
        public function getScript( ResourceLoaderContext $context ) {
                global $wgUser;
                return Xml::encodeJsCall( 'mw.user.options.set',
-                       array( $wgUser->getOptions() ) );
+                       array( $wgUser->getOptions() ),
+                       ResourceLoader::inDebugMode()
+               );
        }
 
        /**
index 6d787c5..f3090dd 100644 (file)
@@ -54,7 +54,9 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
         */
        public function getScript( ResourceLoaderContext $context ) {
                return Xml::encodeJsCall( 'mw.user.tokens.set',
-                       array( $this->contextUserTokens( $context ) ) );
+                       array( $this->contextUserTokens( $context ) ),
+                       ResourceLoader::inDebugMode()
+               );
        }
 
        /**
index 1ace383..ae5d934 100644 (file)
@@ -242,8 +242,7 @@ class RevDel_RevisionItem extends RevDel_Item {
                if ( $this->isDeleted() && !$this->canViewContent() ) {
                        return $this->list->msg( 'diff' )->escaped();
                } else {
-                       return
-                               Linker::linkKnown(
+                       return Linker::linkKnown(
                                        $this->list->title,
                                        $this->list->msg( 'diff' )->escaped(),
                                        array(),
index b2108de..fcbec9e 100644 (file)
@@ -68,7 +68,7 @@ abstract class RevDel_List extends RevisionListBase {
 
                for ( $this->reset(); $this->current(); $this->next() ) {
                        $item = $this->current();
-                       unset( $missing[ $item->getId() ] );
+                       unset( $missing[$item->getId()] );
 
                        $oldBits = $item->getBits();
                        // Build the actual new rev_deleted bitfield
index fe351c5..d2e10e1 100644 (file)
@@ -40,7 +40,7 @@ class RevisionDeleter {
         */
        protected static function checkItem( $desc, $field, $diff, $new, &$arr ) {
                if( $diff & $field ) {
-                       $arr[ ( $new & $field ) ? 0 : 1 ][] = $desc;
+                       $arr[( $new & $field ) ? 0 : 1][] = $desc;
                }
        }
 
index 4a501fd..605a71b 100644 (file)
@@ -99,7 +99,7 @@ class SearchMySQL extends SearchEngine {
                                $strippedVariants = array_unique( $strippedVariants );
 
                                $searchon .= $modifier;
-                               if( count( $strippedVariants) > 1 )
+                               if( count( $strippedVariants ) > 1 )
                                        $searchon .= '(';
                                foreach( $strippedVariants as $stripped ) {
                                        $stripped = $this->normalizeText( $stripped );
@@ -111,7 +111,7 @@ class SearchMySQL extends SearchEngine {
                                        }
                                        $searchon .= "$quote$stripped$quote$wildcard ";
                                }
-                               if( count( $strippedVariants) > 1 )
+                               if( count( $strippedVariants ) > 1 )
                                        $searchon .= ')';
 
                                // Match individual terms or quoted phrase in result highlighting...
index b0ea97f..dd152f7 100644 (file)
  */
 class SearchOracle extends SearchEngine {
 
-       private $reservedWords = array ('ABOUT' => 1,
-                                                                       'ACCUM' => 1,
-                                                                       'AND' => 1,
-                                                                       'BT' => 1,
-                                                                       'BTG' => 1,
-                                                                       'BTI' => 1,
-                                                                       'BTP' => 1,
-                                                                       'FUZZY' => 1,
-                                                                       'HASPATH' => 1,
-                                                                       'INPATH' => 1,
-                                                                       'MINUS' => 1,
-                                                                       'NEAR' => 1,
-                                                                       'NOT' => 1,
-                                                                       'NT' => 1,
-                                                                       'NTG' => 1,
-                                                                       'NTI' => 1,
-                                                                       'NTP' => 1,
-                                                                       'OR' => 1,
-                                                                       'PT' => 1,
-                                                                       'RT' => 1,
-                                                                       'SQE' => 1,
-                                                                       'SYN' => 1,
-                                                                       'TR' => 1,
-                                                                       'TRSYN' => 1,
-                                                                       'TT' => 1,
-                                                                       'WITHIN' => 1);
+       private $reservedWords = array(
+               'ABOUT' => 1,
+               'ACCUM' => 1,
+               'AND' => 1,
+               'BT' => 1,
+               'BTG' => 1,
+               'BTI' => 1,
+               'BTP' => 1,
+               'FUZZY' => 1,
+               'HASPATH' => 1,
+               'INPATH' => 1,
+               'MINUS' => 1,
+               'NEAR' => 1,
+               'NOT' => 1,
+               'NT' => 1,
+               'NTG' => 1,
+               'NTI' => 1,
+               'NTP' => 1,
+               'OR' => 1,
+               'PT' => 1,
+               'RT' => 1,
+               'SQE' => 1,
+               'SYN' => 1,
+               'TR' => 1,
+               'TRSYN' => 1,
+               'TT' => 1,
+               'WITHIN' => 1,
+       );
 
        /**
         * Creates an instance of this class
@@ -199,8 +201,8 @@ class SearchOracle extends SearchEngine {
                                // Search terms in all variant forms, only
                                // apply on wiki with LanguageConverter
                                $temp_terms = $wgContLang->autoConvertToAllVariants( $terms[2] );
-                               if( is_array( $temp_terms )) {
-                                       $temp_terms = array_unique( array_values( $temp_terms ));
+                               if( is_array( $temp_terms ) ) {
+                                       $temp_terms = array_unique( array_values( $temp_terms ) );
                                        foreach( $temp_terms as $t ) {
                                                $searchon .= ($terms[1] == '-' ? ' ~' : ' & ') . $this->escapeTerm( $t );
                                        }
@@ -227,9 +229,9 @@ class SearchOracle extends SearchEngine {
        private function escapeTerm( $t ) {
                global $wgContLang;
                $t = $wgContLang->normalizeForSearch( $t );
-               $t = isset( $this->reservedWords[strtoupper( $t )] ) ? '{'.$t.'}' : $t;
-               $t = preg_replace('/^"(.*)"$/', '($1)', $t);
-               $t = preg_replace('/([-&|])/', '\\\\$1', $t);
+               $t = isset( $this->reservedWords[strtoupper( $t )] ) ? '{' . $t . '}' : $t;
+               $t = preg_replace( '/^"(.*)"$/', '($1)', $t );
+               $t = preg_replace( '/([-&|])/', '\\\\$1', $t );
                return $t;
        }
        /**
index 56464e9..b8d5dc1 100644 (file)
@@ -86,18 +86,18 @@ class SearchPostgres extends SearchEngine {
                wfDebug( "parseQuery received: $term \n" );
 
                ## No backslashes allowed
-               $term = preg_replace('/\\\/', '', $term);
+               $term = preg_replace( '/\\\/', '', $term );
 
                ## Collapse parens into nearby words:
-               $term = preg_replace('/\s*\(\s*/', ' (', $term);
-               $term = preg_replace('/\s*\)\s*/', ') ', $term);
+               $term = preg_replace( '/\s*\(\s*/', ' (', $term );
+               $term = preg_replace( '/\s*\)\s*/', ') ', $term );
 
                ## Treat colons as word separators:
-               $term = preg_replace('/:/', ' ', $term);
+               $term = preg_replace( '/:/', ' ', $term );
 
                $searchstring = '';
                $m = array();
-               if( preg_match_all('/([-!]?)(\S+)\s*/', $term, $m, PREG_SET_ORDER ) ) {
+               if( preg_match_all( '/([-!]?)(\S+)\s*/', $term, $m, PREG_SET_ORDER ) ) {
                        foreach( $m as $terms ) {
                                if ( strlen( $terms[1] ) ) {
                                        $searchstring .= ' & !';
@@ -118,19 +118,19 @@ class SearchPostgres extends SearchEngine {
                }
 
                ## Strip out leading junk
-               $searchstring = preg_replace('/^[\s\&\|]+/', '', $searchstring);
+               $searchstring = preg_replace( '/^[\s\&\|]+/', '', $searchstring );
 
                ## Remove any doubled-up operators
-               $searchstring = preg_replace('/([\!\&\|]) +(?:[\&\|] +)+/', "$1 ", $searchstring);
+               $searchstring = preg_replace( '/([\!\&\|]) +(?:[\&\|] +)+/', "$1 ", $searchstring );
 
                ## Remove any non-spaced operators (e.g. "Zounds!")
-               $searchstring = preg_replace('/([^ ])[\!\&\|]/', "$1", $searchstring);
+               $searchstring = preg_replace( '/([^ ])[\!\&\|]/', "$1", $searchstring );
 
                ## Remove any trailing whitespace or operators
-               $searchstring = preg_replace('/[\s\!\&\|]+$/', '', $searchstring);
+               $searchstring = preg_replace( '/[\s\!\&\|]+$/', '', $searchstring );
 
                ## Remove unnecessary quotes around everything
-               $searchstring = preg_replace('/^[\'"](.*)[\'"]$/', "$1", $searchstring);
+               $searchstring = preg_replace( '/^[\'"](.*)[\'"]$/', "$1", $searchstring );
 
                ## Quote the whole thing
                $searchstring = $this->db->addQuotes( $searchstring );
@@ -169,7 +169,7 @@ class SearchPostgres extends SearchEngine {
                }
                else {
                        $m = array();
-                       if( preg_match_all("/'([^']+)'/", $top, $m, PREG_SET_ORDER ) ) {
+                       if( preg_match_all( "/'([^']+)'/", $top, $m, PREG_SET_ORDER ) ) {
                                foreach( $m as $terms ) {
                                        $this->searchTerms[$terms[1]] = $terms[1];
                                }
index f3f4788..ee30d9b 100644 (file)
@@ -101,7 +101,7 @@ class SearchSqlite extends SearchEngine {
                                $strippedVariants = array_unique( $strippedVariants );
 
                                $searchon .= $modifier;
-                               if( count( $strippedVariants) > 1 )
+                               if( count( $strippedVariants ) > 1 )
                                        $searchon .= '(';
                                foreach( $strippedVariants as $stripped ) {
                                        if( $nonQuoted && strpos( $stripped, ' ' ) !== false ) {
@@ -112,7 +112,7 @@ class SearchSqlite extends SearchEngine {
                                        }
                                        $searchon .= "$quote$stripped$quote$wildcard ";
                                }
-                               if( count( $strippedVariants) > 1 )
+                               if( count( $strippedVariants ) > 1 )
                                        $searchon .= ')';
 
                                // Match individual terms or quoted phrase in result highlighting...
index eabcda3..35199d6 100644 (file)
@@ -66,7 +66,7 @@ class SearchUpdate implements DeferrableUpdate {
                $lc = SearchEngine::legalSearchChars() . '&#;';
 
                if( $this->mText === false ) {
-                       $search->updateTitle($this->mId,
+                       $search->updateTitle( $this->mId,
                                $search->normalizeText( Title::indexTitle( $this->mNamespace, $this->mTitle ) ) );
                        wfProfileOut( __METHOD__ );
                        return;
index 0509272..21226fd 100644 (file)
@@ -185,7 +185,7 @@ class MediaWikiSite extends Site {
                // the single page in the "pages" substructure.
                if ( isset( $externalData['query']['pages'] ) ) {
                        $pages = array_values( $externalData['query']['pages'] );
-                       if ( count( $pages) === 1 ) {
+                       if ( count( $pages ) === 1 ) {
                                return $pages[0];
                        }
                }
diff --git a/includes/specials/SpecialActiveusers.php b/includes/specials/SpecialActiveusers.php
deleted file mode 100644 (file)
index c9c82ad..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-<?php
-/**
- * Implements Special:Activeusers
- *
- * Copyright © 2008 Aaron Schulz
- *
- * 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.
- *
- * 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.
- *
- * 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
- * @ingroup SpecialPage
- */
-
-/**
- * This class is used to get a list of active users. The ones with specials
- * rights (sysop, bureaucrat, developer) will have them displayed
- * next to their names.
- *
- * @ingroup SpecialPage
- */
-class ActiveUsersPager extends UsersPager {
-
-       /**
-        * @var FormOptions
-        */
-       protected $opts;
-
-       /**
-        * @var Array
-        */
-       protected $hideGroups = array();
-
-       /**
-        * @var Array
-        */
-       protected $hideRights = array();
-
-       /**
-        * @param $context IContextSource
-        * @param $group null Unused
-        * @param string $par Parameter passed to the page
-        */
-       function __construct( IContextSource $context = null, $group = null, $par = null ) {
-               global $wgActiveUserDays;
-
-               parent::__construct( $context );
-
-               $this->RCMaxAge = $wgActiveUserDays;
-               $un = $this->getRequest()->getText( 'username', $par );
-               $this->requestedUser = '';
-               if ( $un != '' ) {
-                       $username = Title::makeTitleSafe( NS_USER, $un );
-                       if( !is_null( $username ) ) {
-                               $this->requestedUser = $username->getText();
-                       }
-               }
-
-               $this->setupOptions();
-       }
-
-       public function setupOptions() {
-               $this->opts = new FormOptions();
-
-               $this->opts->add( 'hidebots', false, FormOptions::BOOL );
-               $this->opts->add( 'hidesysops', false, FormOptions::BOOL );
-
-               $this->opts->fetchValuesFromRequest( $this->getRequest() );
-
-               if ( $this->opts->getValue( 'hidebots' ) == 1 ) {
-                       $this->hideRights[] = 'bot';
-               }
-               if ( $this->opts->getValue( 'hidesysops' ) == 1 ) {
-                       $this->hideGroups[] = 'sysop';
-               }
-       }
-
-       function getIndexField() {
-               return 'rc_user_text';
-       }
-
-       function getQueryInfo() {
-               $dbr = wfGetDB( DB_SLAVE );
-               $conds = array( 'rc_user > 0' ); // Users - no anons
-               if( !$this->getUser()->isAllowed( 'hideuser' ) ) {
-                       $conds[] = 'ipb_deleted IS NULL OR ipb_deleted = 0'; // don't show hidden names
-               }
-               $conds[] = 'rc_log_type IS NULL OR rc_log_type != ' . $dbr->addQuotes( 'newusers' );
-               $conds[] = 'rc_timestamp >= ' . $dbr->addQuotes(
-                       $dbr->timestamp( wfTimestamp( TS_UNIX ) - $this->RCMaxAge*24*3600 ) );
-
-               if( $this->requestedUser != '' ) {
-                       $conds[] = 'rc_user_text >= ' . $dbr->addQuotes( $this->requestedUser );
-               }
-
-               return array(
-                       'tables' => array( 'recentchanges', 'ipblocks' ),
-                       'fields' => array(
-                               'user_name' => 'rc_user_text', // for Pager inheritance
-                               'rc_user_text', // for Pager
-                               'user_id' => 'rc_user',
-                               'recentedits' => 'COUNT(*)',
-                               'ipb_deleted' => 'MAX(ipb_deleted)'
-                       ),
-                       'options' => array(
-                               'GROUP BY' => array( 'rc_user_text', 'user_id' ),
-                               'USE INDEX' => array( 'recentchanges' => 'rc_user_text' )
-                       ),
-                       'join_conds' => array( // check for suppression blocks
-                               'ipblocks' => array( 'LEFT JOIN', array(
-                                       'rc_user=ipb_user',
-                                       'ipb_auto' => 0 # avoid duplicate blocks
-                               )),
-                       ),
-                       'conds' => $conds
-               );
-       }
-
-       function formatRow( $row ) {
-               $userName = $row->user_name;
-
-               $ulinks = Linker::userLink( $row->user_id, $userName );
-               $ulinks .= Linker::userToolLinks( $row->user_id, $userName );
-
-               $lang = $this->getLanguage();
-
-               $list = array();
-               $user = User::newFromId( $row->user_id );
-
-               // User right filter
-               foreach( $this->hideRights as $right ) {
-                       // Calling User::getRights() within the loop so that
-                       // if the hideRights() filter is empty, we don't have to
-                       // trigger the lazy-init of the big userrights array in the
-                       // User object
-                       if ( in_array( $right, $user->getRights() ) ) {
-                               return '';
-                       }
-               }
-
-               // User group filter
-               // Note: This is a different loop than for user rights,
-               // because we're reusing it to build the group links
-               // at the same time
-               foreach( $user->getGroups() as $group ) {
-                       if ( in_array( $group, $this->hideGroups ) ) {
-                               return '';
-                       }
-                       $list[] = self::buildGroupLink( $group, $userName );
-               }
-
-               $groups = $lang->commaList( $list );
-
-               $item = $lang->specialList( $ulinks, $groups );
-               if( $row->ipb_deleted ) {
-                       $item = "<span class=\"deleted\">$item</span>";
-               }
-               $count = $this->msg( 'activeusers-count' )->numParams( $row->recentedits )
-                       ->params( $userName )->numParams( $this->RCMaxAge )->escaped();
-               $blocked = !is_null( $row->ipb_deleted ) ? ' ' . $this->msg( 'listusers-blocked', $userName )->escaped() : '';
-
-               return Html::rawElement( 'li', array(), "{$item} [{$count}]{$blocked}" );
-       }
-
-       function getPageHeader() {
-               global $wgScript;
-
-               $self = $this->getTitle();
-               $limit = $this->mLimit ? Html::hidden( 'limit', $this->mLimit ) : '';
-
-               $out = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ); # Form tag
-               $out .= Xml::fieldset( $this->msg( 'activeusers' )->text() ) . "\n";
-               $out .= Html::hidden( 'title', $self->getPrefixedDBkey() ) . $limit . "\n";
-
-               $out .= Xml::inputLabel( $this->msg( 'activeusers-from' )->text(),
-                       'username', 'offset', 20, $this->requestedUser ) . '<br />';# Username field
-
-               $out .= Xml::checkLabel( $this->msg( 'activeusers-hidebots' )->text(),
-                       'hidebots', 'hidebots', $this->opts->getValue( 'hidebots' ) );
-
-               $out .= Xml::checkLabel( $this->msg( 'activeusers-hidesysops' )->text(),
-                       'hidesysops', 'hidesysops', $this->opts->getValue( 'hidesysops' ) ) . '<br />';
-
-               $out .= Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) . "\n";# Submit button and form bottom
-               $out .= Xml::closeElement( 'fieldset' );
-               $out .= Xml::closeElement( 'form' );
-
-               return $out;
-       }
-}
-
-/**
- * @ingroup SpecialPage
- */
-class SpecialActiveUsers extends SpecialPage {
-
-       /**
-        * Constructor
-        */
-       public function __construct() {
-               parent::__construct( 'Activeusers' );
-       }
-
-       /**
-        * Show the special page
-        *
-        * @param $par Mixed: parameter passed to the page or null
-        */
-       public function execute( $par ) {
-               global $wgActiveUserDays;
-
-               $this->setHeaders();
-               $this->outputHeader();
-
-               $out = $this->getOutput();
-               $out->wrapWikiMsg( "<div class='mw-activeusers-intro'>\n$1\n</div>",
-                       array( 'activeusers-intro', $this->getLanguage()->formatNum( $wgActiveUserDays ) ) );
-
-               $up = new ActiveUsersPager( $this->getContext(), null, $par );
-
-               # getBody() first to check, if empty
-               $usersbody = $up->getBody();
-
-               $out->addHTML( $up->getPageHeader() );
-               if ( $usersbody ) {
-                       $out->addHTML(
-                               $up->getNavigationBar() .
-                               Html::rawElement( 'ul', array(), $usersbody ) .
-                               $up->getNavigationBar()
-                       );
-               } else {
-                       $out->addWikiMsg( 'activeusers-noresult' );
-               }
-       }
-
-       protected function getGroupName() {
-               return 'users';
-       }
-}
index a60c8ef..855d409 100644 (file)
@@ -53,7 +53,7 @@ class SpecialAllmessages extends SpecialPage {
                $this->setHeaders();
 
                global $wgUseDatabaseMessages;
-               if( !$wgUseDatabaseMessages ) {
+               if ( !$wgUseDatabaseMessages ) {
                        $out->addWikiMsg( 'allmessagesnotsupportedDB' );
                        return;
                } else {
@@ -121,15 +121,15 @@ class AllmessagesTablePager extends TablePager {
                $request = $this->getRequest();
 
                $this->filter = $request->getVal( 'filter', 'all' );
-               if( $this->filter === 'all' ) {
+               if ( $this->filter === 'all' ) {
                        $this->custom = null; // So won't match in either case
                } else {
-                       $this->custom = ($this->filter == 'unmodified');
+                       $this->custom = ( $this->filter == 'unmodified' );
                }
 
                $prefix = $this->getLanguage()->ucfirst( $request->getVal( 'prefix', '' ) );
                $prefix = $prefix != '' ? Title::makeTitleSafe( NS_MEDIAWIKI, $request->getVal( 'prefix', null ) ) : null;
-               if( $prefix !== null ) {
+               if ( $prefix !== null ) {
                        $this->displayPrefix = $prefix->getDBkey();
                        $this->prefix = '/^' . preg_quote( $this->displayPrefix ) . '/i';
                } else {
@@ -139,7 +139,7 @@ class AllmessagesTablePager extends TablePager {
 
                // The suffix that may be needed for message names if we're in a
                // different language (eg [[MediaWiki:Foo/fr]]: $suffix = '/fr'
-               if( $this->foreign ) {
+               if ( $this->foreign ) {
                        $this->suffix = '/' . $this->langcode;
                } else {
                        $this->suffix = '';
@@ -159,36 +159,36 @@ class AllmessagesTablePager extends TablePager {
                        Xml::openElement( 'table', array( 'class' => 'mw-allmessages-table' ) ) . "\n" .
                        '<tr>
                                <td class="mw-label">' .
-                                       Xml::label( $this->msg( 'allmessages-prefix' )->text(), 'mw-allmessages-form-prefix' ) .
-                               "</td>\n
-                               <td class=\"mw-input\">" .
-                                       Xml::input( 'prefix', 20, str_replace( '_', ' ', $this->displayPrefix ), array( 'id' => 'mw-allmessages-form-prefix' ) ) .
-                               "</td>\n
+                       Xml::label( $this->msg( 'allmessages-prefix' )->text(), 'mw-allmessages-form-prefix' ) .
+                       "</td>\n
+                       <td class=\"mw-input\">" .
+                       Xml::input( 'prefix', 20, str_replace( '_', ' ', $this->displayPrefix ), array( 'id' => 'mw-allmessages-form-prefix' ) ) .
+                       "</td>\n
                        </tr>
                        <tr>\n
-                               <td class='mw-label'>" .
-                                       $this->msg( 'allmessages-filter' )->escaped() .
-                               "</td>\n
+                       <td class='mw-label'>" .
+                       $this->msg( 'allmessages-filter' )->escaped() .
+                       "</td>\n
                                <td class='mw-input'>" .
-                                       Xml::radioLabel( $this->msg( 'allmessages-filter-unmodified' )->text(),
-                                               'filter',
-                                               'unmodified',
-                                               'mw-allmessages-form-filter-unmodified',
-                                               ( $this->filter == 'unmodified' )
-                                       ) .
-                                       Xml::radioLabel( $this->msg( 'allmessages-filter-all' )->text(),
-                                               'filter',
-                                               'all',
-                                               'mw-allmessages-form-filter-all',
-                                               ( $this->filter == 'all' )
-                                       ) .
-                                       Xml::radioLabel( $this->msg( 'allmessages-filter-modified' )->text(),
-                                               'filter',
-                                               'modified',
-                                               'mw-allmessages-form-filter-modified',
-                                       ( $this->filter == 'modified' )
-                               ) .
-                               "</td>\n
+                       Xml::radioLabel( $this->msg( 'allmessages-filter-unmodified' )->text(),
+                               'filter',
+                               'unmodified',
+                               'mw-allmessages-form-filter-unmodified',
+                               ( $this->filter == 'unmodified' )
+                       ) .
+                       Xml::radioLabel( $this->msg( 'allmessages-filter-all' )->text(),
+                               'filter',
+                               'all',
+                               'mw-allmessages-form-filter-all',
+                               ( $this->filter == 'all' )
+                       ) .
+                       Xml::radioLabel( $this->msg( 'allmessages-filter-modified' )->text(),
+                               'filter',
+                               'modified',
+                               'mw-allmessages-form-filter-modified',
+                               ( $this->filter == 'modified' )
+                       ) .
+                       "</td>\n
                        </tr>
                        <tr>\n
                                <td class=\"mw-label\">" . $langSelect[0] . "</td>\n
@@ -197,16 +197,16 @@ class AllmessagesTablePager extends TablePager {
 
                        '<tr>
                                <td class="mw-label">' .
-                                       Xml::label( $this->msg( 'table_pager_limit_label' )->text(), 'mw-table_pager_limit_label' ) .
-                               '</td>
-                               <td class="mw-input">' .
-                                       $this->getLimitSelect() .
-                               '</td>
+                       Xml::label( $this->msg( 'table_pager_limit_label' )->text(), 'mw-table_pager_limit_label' ) .
+                       '</td>
+                       <td class="mw-input">' .
+                       $this->getLimitSelect() .
+                       '</td>
                        <tr>
                                <td></td>
                                <td>' .
-                                       Xml::submitButton( $this->msg( 'allmessages-filter-submit' )->text() ) .
-                               "</td>\n
+                       Xml::submitButton( $this->msg( 'allmessages-filter-submit' )->text() ) .
+                       "</td>\n
                        </tr>" .
 
                        Xml::closeElement( 'table' ) .
@@ -219,7 +219,7 @@ class AllmessagesTablePager extends TablePager {
        function getAllMessages( $descending ) {
                wfProfileIn( __METHOD__ );
                $messageNames = Language::getLocalisationCache()->getSubitemList( 'en', 'messages' );
-               if( $descending ) {
+               if ( $descending ) {
                        rsort( $messageNames );
                } else {
                        asort( $messageNames );
@@ -260,18 +260,19 @@ class AllmessagesTablePager extends TablePager {
 
                foreach ( $res as $s ) {
                        $exists = false;
-                       if( $foreign ) {
+                       if ( $foreign ) {
                                $title = explode( '/', $s->page_title );
-                               if( count( $title ) === 2 && $langcode == $title[1]
-                                       && isset( $xNames[$title[0]] ) ) {
+                               if ( count( $title ) === 2 && $langcode == $title[1]
+                                       && isset( $xNames[$title[0]] )
+                               ) {
                                        $exists = $title[0];
                                }
-                       } elseif( isset( $xNames[$s->page_title] ) ) {
+                       } elseif ( isset( $xNames[$s->page_title] ) ) {
                                $exists = $s->page_title;
                        }
-                       if( $exists && $s->page_namespace == NS_MEDIAWIKI ) {
+                       if ( $exists && $s->page_namespace == NS_MEDIAWIKI ) {
                                $pageFlags[$exists] = true;
-                       } elseif( $exists && $s->page_namespace == NS_MEDIAWIKI_TALK ) {
+                       } elseif ( $exists && $s->page_namespace == NS_MEDIAWIKI_TALK ) {
                                $talkFlags[$exists] = true;
                        }
                }
@@ -293,24 +294,25 @@ class AllmessagesTablePager extends TablePager {
                $statuses = self::getCustomisedStatuses( $messageNames, $this->langcode, $this->foreign );
 
                $count = 0;
-               foreach( $messageNames as $key ) {
+               foreach ( $messageNames as $key ) {
                        $customised = isset( $statuses['pages'][$key] );
-                       if( $customised !== $this->custom &&
+                       if ( $customised !== $this->custom &&
                                ( $descending && ( $key < $offset || !$offset ) || !$descending && $key > $offset ) &&
                                ( ( $this->prefix && preg_match( $this->prefix, $key ) ) || $this->prefix === false )
                        ) {
                                $actual = wfMessage( $key )->inLanguage( $this->langcode )->plain();
                                $default = wfMessage( $key )->inLanguage( $this->langcode )->useDatabase( false )->plain();
                                $result->result[] = array(
-                                       'am_title'      => $key,
-                                       'am_actual'     => $actual,
-                                       'am_default'    => $default,
+                                       'am_title' => $key,
+                                       'am_actual' => $actual,
+                                       'am_default' => $default,
                                        'am_customised' => $customised,
                                        'am_talk_exists' => isset( $statuses['talks'][$key] )
                                );
                                $count++;
                        }
-                       if( $count == $limit ) {
+
+                       if ( $count == $limit ) {
                                break;
                        }
                }
@@ -321,26 +323,26 @@ class AllmessagesTablePager extends TablePager {
                return Xml::openElement( 'table', array( 'class' => 'mw-datatable TablePager', 'id' => 'mw-allmessagestable' ) ) . "\n" .
                        "<thead><tr>
                                <th rowspan=\"2\">" .
-                                       $this->msg( 'allmessagesname' )->escaped() . "
+                       $this->msg( 'allmessagesname' )->escaped() . "
                                </th>
                                <th>" .
-                                       $this->msg( 'allmessagesdefault' )->escaped() .
-                               "</th>
+                       $this->msg( 'allmessagesdefault' )->escaped() .
+                       "</th>
                        </tr>\n
                        <tr>
                                <th>" .
-                                       $this->msg( 'allmessagescurrent' )->escaped() .
-                               "</th>
+                       $this->msg( 'allmessagescurrent' )->escaped() .
+                       "</th>
                        </tr></thead><tbody>\n";
        }
 
        function formatValue( $field, $value ) {
-               switch( $field ) {
+               switch ( $field ) {
                        case 'am_title' :
                                $title = Title::makeTitle( NS_MEDIAWIKI, $value . $this->suffix );
                                $talk = Title::makeTitle( NS_MEDIAWIKI_TALK, $value . $this->suffix );
 
-                               if( $this->mCurrentRow->am_customised ) {
+                               if ( $this->mCurrentRow->am_customised ) {
                                        $title = Linker::linkKnown( $title, $this->getLanguage()->lcfirst( $value ) );
                                } else {
                                        $title = Linker::link(
@@ -376,7 +378,7 @@ class AllmessagesTablePager extends TablePager {
                $s = parent::formatRow( $row );
 
                // But if there's a customised message, add that too.
-               if( $row->am_customised ) {
+               if ( $row->am_customised ) {
                        $s .= Xml::openElement( 'tr', $this->getRowAttrs( $row, true ) );
                        $formatted = strval( $this->formatValue( 'am_actual', $row->am_actual ) );
                        if ( $formatted == '' ) {
@@ -390,19 +392,19 @@ class AllmessagesTablePager extends TablePager {
 
        function getRowAttrs( $row, $isSecond = false ) {
                $arr = array();
-               if( $row->am_customised ) {
+               if ( $row->am_customised ) {
                        $arr['class'] = 'allmessages-customised';
                }
-               if( !$isSecond ) {
+               if ( !$isSecond ) {
                        $arr['id'] = Sanitizer::escapeId( 'msg_' . $this->getLanguage()->lcfirst( $row->am_title ) );
                }
                return $arr;
        }
 
        function getCellAttrs( $field, $value ) {
-               if( $this->mCurrentRow->am_customised && $field == 'am_title' ) {
+               if ( $this->mCurrentRow->am_customised && $field == 'am_title' ) {
                        return array( 'rowspan' => '2', 'class' => $field );
-               } elseif( $field == 'am_title' ) {
+               } elseif ( $field == 'am_title' ) {
                        return array( 'class' => $field );
                } else {
                        return array( 'lang' => $this->langcode, 'dir' => $this->lang->getDir(), 'class' => $field );
index f9cb5cd..942b767 100644 (file)
@@ -88,15 +88,15 @@ class SpecialAllpages extends IncludableSpecialPage {
                $namespaces = $wgContLang->getNamespaces();
 
                $out->setPageTitle(
-                       ( $namespace > 0 && in_array( $namespace, array_keys( $namespaces) ) ) ?
-                       $this->msg( 'allinnamespace', str_replace( '_', ' ', $namespaces[$namespace] ) ) :
-                       $this->msg( 'allarticles' )
+                       ( $namespace > 0 && in_array( $namespace, array_keys( $namespaces ) ) ) ?
+                               $this->msg( 'allinnamespace', str_replace( '_', ' ', $namespaces[$namespace] ) ) :
+                               $this->msg( 'allarticles' )
                );
                $out->addModuleStyles( 'mediawiki.special' );
 
-               if( $par !== null ) {
+               if ( $par !== null ) {
                        $this->showChunk( $namespace, $par, $to, $hideredirects );
-               } elseif( $from !== null && $to === null ) {
+               } elseif ( $from !== null && $to === null ) {
                        $this->showChunk( $namespace, $from, $to, $hideredirects );
                } else {
                        $this->showToplevel( $namespace, $from, $to, $hideredirects );
@@ -188,10 +188,13 @@ class SpecialAllpages extends IncludableSpecialPage {
                $from = ( $from && $from->isLocal() ) ? $from->getDBkey() : null;
                $to = ( $to && $to->isLocal() ) ? $to->getDBkey() : null;
 
-               if( isset( $from ) )
+               if ( isset( $from ) ) {
                        $where[] = 'page_title >= ' . $dbr->addQuotes( $from );
-               if( isset( $to ) )
+               }
+
+               if ( isset( $to ) ) {
                        $where[] = 'page_title <= ' . $dbr->addQuotes( $to );
+               }
 
                global $wgMemc;
                $key = wfMemcKey( 'allpages', 'ns', $namespace, sha1( $from ), sha1( $to ) );
@@ -201,7 +204,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                $maxPerSubpage = intval( $count / $this->maxLineCount );
                $maxPerSubpage = max( $maxPerSubpage, $this->maxPerPage );
 
-               if( !is_array( $lines ) ) {
+               if ( !is_array( $lines ) ) {
                        $options = array( 'LIMIT' => 1 );
                        $options['ORDER BY'] = 'page_title ASC';
                        $firstTitle = $dbr->selectField( 'page', 'page_title', $where, __METHOD__, $options );
@@ -210,7 +213,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                        $lines = array( $firstTitle );
                        # If we are going to show n rows, we need n+1 queries to find the relevant titles.
                        $done = false;
-                       while( !$done ) {
+                       while ( !$done ) {
                                // Fetch the last title of this chunk and the first of the next
                                $chunk = ( $lastTitle === false )
                                        ? array()
@@ -223,7 +226,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                                );
 
                                $s = $dbr->fetchObject( $res );
-                               if( $s ) {
+                               if ( $s ) {
                                        array_push( $lines, $s->page_title );
                                } else {
                                        // Final chunk, but ended prematurely. Go back and find the end.
@@ -233,8 +236,9 @@ class SpecialAllpages extends IncludableSpecialPage {
                                        array_push( $lines, $endTitle );
                                        $done = true;
                                }
+
                                $s = $res->fetchObject();
-                               if( $s ) {
+                               if ( $s ) {
                                        array_push( $lines, $s->page_title );
                                        $lastTitle = $s->page_title;
                                } else {
@@ -249,8 +253,8 @@ class SpecialAllpages extends IncludableSpecialPage {
 
                // If there are only two or less sections, don't even display them.
                // Instead, display the first section directly.
-               if( count( $lines ) <= 2 ) {
-                       if( !empty( $lines ) ) {
+               if ( count( $lines ) <= 2 ) {
+                       if ( !empty( $lines ) ) {
                                $this->showChunk( $namespace, $from, $to, $hideredirects );
                        } else {
                                $output->addHTML( $this->namespaceForm( $namespace, $from, $to, $hideredirects ) );
@@ -260,7 +264,7 @@ class SpecialAllpages extends IncludableSpecialPage {
 
                # At this point, $lines should contain an even number of elements.
                $out .= Xml::openElement( 'table', array( 'class' => 'allpageslist' ) );
-               while( count ( $lines ) > 0 ) {
+               while ( count( $lines ) > 0 ) {
                        $inpoint = array_shift( $lines );
                        $outpoint = array_shift( $lines );
                        $out .= $this->showline( $inpoint, $outpoint, $namespace, $hideredirects );
@@ -269,19 +273,19 @@ class SpecialAllpages extends IncludableSpecialPage {
                $nsForm = $this->namespaceForm( $namespace, $from, $to, $hideredirects );
 
                # Is there more?
-               if( $this->including() ) {
+               if ( $this->including() ) {
                        $out2 = '';
                } else {
-                       if( isset( $from ) || isset( $to ) ) {
-                               $out2 = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-form' ) ).
-                                               '<tr>
+                       if ( isset( $from ) || isset( $to ) ) {
+                               $out2 = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-form' ) ) .
+                                       '<tr>
                                                        <td>' .
-                                                               $nsForm .
-                                                       '</td>
+                                       $nsForm .
+                                       '</td>
                                                        <td class="mw-allpages-nav">' .
-                                                               Linker::link( $this->getTitle(), $this->msg( 'allpages' )->escaped(),
-                                                                       array(), array(), 'known' ) .
-                                                       "</td>
+                                       Linker::link( $this->getTitle(), $this->msg( 'allpages' )->escaped(),
+                                               array(), array(), 'known' ) .
+                                       "</td>
                                                </tr>" .
                                        Xml::closeElement( 'table' );
                        } else {
@@ -297,10 +301,10 @@ class SpecialAllpages extends IncludableSpecialPage {
         * @param string $inpoint lower limit of pagenames
         * @param string $outpoint upper limit of pagenames
         * @param $namespace Integer (Default NS_MAIN)
-        * @param bool $hideredirects dont show redirects (default FALSE)
+        * @param bool $hideRedirects don't show redirects. Default: false
         * @return string
         */
-       function showline( $inpoint, $outpoint, $namespace = NS_MAIN, $hideredirects ) {
+       function showline( $inpoint, $outpoint, $namespace = NS_MAIN, $hideRedirects = false ) {
                global $wgContLang;
                $inpointf = htmlspecialchars( str_replace( '_', ' ', $inpoint ) );
                $outpointf = htmlspecialchars( str_replace( '_', ' ', $outpoint ) );
@@ -308,15 +312,20 @@ class SpecialAllpages extends IncludableSpecialPage {
                $inpointf = $wgContLang->truncate( $inpointf, $this->maxPageLength );
                $outpointf = $wgContLang->truncate( $outpointf, $this->maxPageLength );
 
-               $queryparams = $namespace ? "namespace=$namespace&" : '';
+               $queryParams = array (
+                       'from' => $inpoint,
+                       'to' => $outpoint,
+               );
 
-               $queryhideredirects = array();
-               if ( $hideredirects ) {
-                       $queryhideredirects['hideredirects'] = 1;
+               if( $namespace ) {
+                       $queryParams['namespace'] = $namespace;
+               }
+               if ( $hideRedirects ) {
+                       $queryParams['hideredirects'] = 1;
                }
 
-               $special = $this->getTitle();
-               $link = htmlspecialchars( $special->getLocalUrl( $queryparams . 'from=' . urlencode( $inpoint ) . '&to=' . urlencode( $outpoint ), $queryhideredirects ) );
+               $link = htmlspecialchars(
+                       $this->getTitle()->getLocalURL( $queryParams ) );
 
                $out = $this->msg( 'alphaindexline' )->rawParams(
                        "<a href=\"$link\">$inpointf</a></td><td>",
@@ -360,7 +369,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                                $conds['page_is_redirect'] = 0;
                        }
 
-                       if( $toKey !== "" ) {
+                       if ( $toKey !== "" ) {
                                $conds[] = 'page_title <= ' . $dbr->addQuotes( $toKey );
                        }
 
@@ -369,33 +378,36 @@ class SpecialAllpages extends IncludableSpecialPage {
                                $conds,
                                __METHOD__,
                                array(
-                                       'ORDER BY'  => 'page_title',
-                                       'LIMIT'     => $this->maxPerPage + 1,
+                                       'ORDER BY' => 'page_title',
+                                       'LIMIT' => $this->maxPerPage + 1,
                                        'USE INDEX' => 'name_title',
                                )
                        );
 
-                       if( $res->numRows() > 0 ) {
+                       if ( $res->numRows() > 0 ) {
                                $out = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-chunk' ) );
-                               while( ( $n < $this->maxPerPage ) && ( $s = $res->fetchObject() ) ) {
+                               while ( ( $n < $this->maxPerPage ) && ( $s = $res->fetchObject() ) ) {
                                        $t = Title::newFromRow( $s );
-                                       if( $t ) {
+                                       if ( $t ) {
                                                $link = ( $s->page_is_redirect ? '<div class="allpagesredirect">' : '' ) .
                                                        Linker::link( $t ) .
-                                                       ($s->page_is_redirect ? '</div>' : '' );
+                                                       ( $s->page_is_redirect ? '</div>' : '' );
                                        } else {
                                                $link = '[[' . htmlspecialchars( $s->page_title ) . ']]';
                                        }
-                                       if( $n % 3 == 0 ) {
+
+                                       if ( $n % 3 == 0 ) {
                                                $out .= '<tr>';
                                        }
+
                                        $out .= "<td style=\"width:33%\">$link</td>";
                                        $n++;
-                                       if( $n % 3 == 0 ) {
+                                       if ( $n % 3 == 0 ) {
                                                $out .= "</tr>\n";
                                        }
                                }
-                               if( ($n % 3) != 0 ) {
+
+                               if ( ( $n % 3 ) != 0 ) {
                                        $out .= "</tr>\n";
                                }
                                $out .= Xml::closeElement( 'table' );
@@ -407,7 +419,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                if ( $this->including() ) {
                        $out2 = '';
                } else {
-                       if( $from == '' ) {
+                       if ( $from == '' ) {
                                // First chunk; no previous link.
                                $prevTitle = null;
                        } else {
@@ -424,20 +436,20 @@ class SpecialAllpages extends IncludableSpecialPage {
                                );
 
                                # Get first title of previous complete chunk
-                               if( $dbr->numrows( $res_prev ) >= $this->maxPerPage ) {
+                               if ( $dbr->numrows( $res_prev ) >= $this->maxPerPage ) {
                                        $pt = $dbr->fetchObject( $res_prev );
                                        $prevTitle = Title::makeTitle( $namespace, $pt->page_title );
                                } else {
                                        # The previous chunk is not complete, need to link to the very first title
                                        # available in the database
                                        $options = array( 'LIMIT' => 1 );
-                                       if ( ! $dbr->implicitOrderby() ) {
+                                       if ( !$dbr->implicitOrderby() ) {
                                                $options['ORDER BY'] = 'page_title';
                                        }
                                        $reallyFirstPage_title = $dbr->selectField( 'page', 'page_title',
                                                array( 'page_namespace' => $namespace ), __METHOD__, $options );
                                        # Show the previous link if it s not the current requested chunk
-                                       if( $from != $reallyFirstPage_title ) {
+                                       if ( $from != $reallyFirstPage_title ) {
                                                $prevTitle = Title::makeTitle( $namespace, $reallyFirstPage_title );
                                        } else {
                                                $prevTitle = null;
@@ -448,23 +460,25 @@ class SpecialAllpages extends IncludableSpecialPage {
                        $self = $this->getTitle();
 
                        $nsForm = $this->namespaceForm( $namespace, $from, $to, $hideredirects );
-                       $out2 = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-form' ) ).
-                                               '<tr>
+                       $out2 = Xml::openElement( 'table', array( 'class' => 'mw-allpages-table-form' ) ) .
+                               '<tr>
                                                        <td>' .
-                                                               $nsForm .
-                                                       '</td>
+                               $nsForm .
+                               '</td>
                                                        <td class="mw-allpages-nav">' .
-                                                               Linker::link( $self, $this->msg( 'allpages' )->escaped() );
+                               Linker::link( $self, $this->msg( 'allpages' )->escaped() );
 
                        # Do we put a previous link ?
-                       if( isset( $prevTitle ) && $pt = $prevTitle->getText() ) {
+                       if ( isset( $prevTitle ) && $pt = $prevTitle->getText() ) {
                                $query = array( 'from' => $prevTitle->getText() );
 
-                               if( $namespace )
+                               if ( $namespace ) {
                                        $query['namespace'] = $namespace;
+                               }
 
-                               if( $hideredirects )
+                               if ( $hideredirects ) {
                                        $query['hideredirects'] = $hideredirects;
+                               }
 
                                $prevLink = Linker::linkKnown(
                                        $self,
@@ -475,16 +489,18 @@ class SpecialAllpages extends IncludableSpecialPage {
                                $out2 = $this->getLanguage()->pipeList( array( $out2, $prevLink ) );
                        }
 
-                       if( $n == $this->maxPerPage && $s = $res->fetchObject() ) {
+                       if ( $n == $this->maxPerPage && $s = $res->fetchObject() ) {
                                # $s is the first link of the next chunk
                                $t = Title::makeTitle( $namespace, $s->page_title );
                                $query = array( 'from' => $t->getText() );
 
-                               if( $namespace )
+                               if ( $namespace ) {
                                        $query['namespace'] = $namespace;
+                               }
 
-                               if( $hideredirects )
+                               if ( $hideredirects ) {
                                        $query['hideredirects'] = $hideredirects;
+                               }
 
                                $nextLink = Linker::linkKnown(
                                        $self,
@@ -500,15 +516,21 @@ class SpecialAllpages extends IncludableSpecialPage {
                $output->addHTML( $out2 . $out );
 
                $links = array();
-               if ( isset( $prevLink ) ) $links[] = $prevLink;
-               if ( isset( $nextLink ) ) $links[] = $nextLink;
+               if ( isset( $prevLink ) ) {
+                       $links[] = $prevLink;
+               }
+
+               if ( isset( $nextLink ) ) {
+                       $links[] = $nextLink;
+               }
 
                if ( count( $links ) ) {
                        $output->addHTML(
                                Html::element( 'hr' ) .
-                               Html::rawElement( 'div', array( 'class' => 'mw-allpages-nav' ),
-                                       $this->getLanguage()->pipeList( $links )
-                               ) );
+                                       Html::rawElement( 'div', array( 'class' => 'mw-allpages-nav' ),
+                                               $this->getLanguage()->pipeList( $links )
+                                       )
+                       );
                }
 
        }
@@ -519,8 +541,10 @@ class SpecialAllpages extends IncludableSpecialPage {
         * @return array( int namespace, string dbkey, string pagename ) or NULL on error
         */
        protected function getNamespaceKeyAndText( $ns, $text ) {
-               if ( $text == '' )
-                       return array( $ns, '', '' ); # shortcut for common case
+               if ( $text == '' ) {
+                       # shortcut for common case
+                       return array( $ns, '', '' );
+               }
 
                $t = Title::makeTitleSafe( $ns, $text );
                if ( $t && $t->isLocal() ) {
index b0f333c..fafe75f 100644 (file)
@@ -43,12 +43,16 @@ class AncientPagesPage extends QueryPage {
        function getQueryInfo() {
                return array(
                        'tables' => array( 'page', 'revision' ),
-                       'fields' => array( 'namespace' => 'page_namespace',
-                                       'title' => 'page_title',
-                                       'value' => 'rev_timestamp' ),
-                       'conds' => array( 'page_namespace' => MWNamespace::getContentNamespaces(),
-                                       'page_is_redirect' => 0,
-                                       'page_latest=rev_id' )
+                       'fields' => array(
+                               'namespace' => 'page_namespace',
+                               'title' => 'page_title',
+                               'value' => 'rev_timestamp'
+                       ),
+                       'conds' => array(
+                               'page_namespace' => MWNamespace::getContentNamespaces(),
+                               'page_is_redirect' => 0,
+                               'page_latest=rev_id'
+                       )
                );
        }
 
index bfa2f95..e61f12b 100644 (file)
@@ -31,6 +31,7 @@ class SpecialBlankpage extends UnlistedSpecialPage {
        public function __construct() {
                parent::__construct( 'Blankpage' );
        }
+
        public function execute( $par ) {
                $this->setHeaders();
                $this->getOutput()->addWikiMsg( 'intentionallyblankpage' );
index 50fdbc2..53f7f4d 100644 (file)
@@ -110,10 +110,10 @@ class SpecialBlock extends FormSpecialPage {
                        $s = HTMLForm::formatErrors( $this->preErrors );
                        if ( $s ) {
                                $form->addHeaderText( Html::rawElement(
-                                               'div',
-                                               array( 'class' => 'error' ),
-                                               $s
-                                       ) );
+                                       'div',
+                                       array( 'class' => 'error' ),
+                                       $s
+                               ) );
                        }
                }
        }
@@ -241,8 +241,7 @@ class SpecialBlock extends FormSpecialPage {
                if ( $block instanceof Block && !$block->mAuto # The block exists and isn't an autoblock
                        && ( $this->type != Block::TYPE_RANGE # The block isn't a rangeblock
                                || $block->getTarget() == $this->target ) # or if it is, the range is what we're about to block
-                       )
-               {
+               ) {
                        $fields['HardBlock']['default'] = $block->isHardblock();
                        $fields['CreateAccount']['default'] = $block->prevents( 'createaccount' );
                        $fields['AutoBlock']['default'] = $block->isAutoblocking();
@@ -460,8 +459,8 @@ class SpecialBlock extends FormSpecialPage {
                $i = 0;
                $target = null;
 
-               while( true ) {
-                       switch( $i++ ) {
+               while ( true ) {
+                       switch ( $i++ ) {
                                case 0:
                                        # The HTMLForm will check wpTarget first and only if it doesn't get
                                        # a value use the default, which will be generated from the options
@@ -620,8 +619,8 @@ class SpecialBlock extends FormSpecialPage {
                        # but $data['target'] gets overriden by (non-normalized) request variable
                        # from previous request.
                        if ( $target === $performer->getName() &&
-                               ( $data['PreviousTarget'] !== $target || !$data['Confirm'] ) )
-                       {
+                               ( $data['PreviousTarget'] !== $target || !$data['Confirm'] )
+                       {
                                return array( 'ipb-blockingself' );
                        }
                } elseif ( $type == Block::TYPE_RANGE ) {
@@ -634,9 +633,9 @@ class SpecialBlock extends FormSpecialPage {
                        return array( 'badipaddress' );
                }
 
-               if ( ( strlen( $data['Expiry'] ) == 0) || ( strlen( $data['Expiry'] ) > 50 )
-                       || !self::parseExpiryInput( $data['Expiry'] ) )
-               {
+               if ( ( strlen( $data['Expiry'] ) == 0 ) || ( strlen( $data['Expiry'] ) > 50 )
+                       || !self::parseExpiryInput( $data['Expiry'] )
+               {
                        return array( 'ipb_expiry_invalid' );
                }
 
@@ -703,9 +702,9 @@ class SpecialBlock extends FormSpecialPage {
                        $reblockNotAllowed = ( array_key_exists( 'Reblock', $data ) && !$data['Reblock'] );
 
                        # Show form unless the user is already aware of this...
-                       if( $blockNotConfirmed || $reblockNotAllowed ) {
+                       if ( $blockNotConfirmed || $reblockNotAllowed ) {
                                return array( array( 'ipb_already_blocked', $block->getTarget() ) );
-                       # Otherwise, try to update the block...
+                               # Otherwise, try to update the block...
                        } else {
                                # This returns direct blocks before autoblocks/rangeblocks, since we should
                                # be sure the user is blocked by now it should work for our purposes
@@ -865,7 +864,7 @@ class SpecialBlock extends FormSpecialPage {
                                # User is trying to unblock themselves
                                if ( $performer->isAllowed( 'unblockself' ) ) {
                                        return true;
-                               # User blocked themselves and is now trying to reverse it
+                                       # User blocked themselves and is now trying to reverse it
                                } elseif ( $performer->blockedBy() === $performer->getName() ) {
                                        return true;
                                } else {
index e10df4f..eb25eaf 100644 (file)
@@ -55,10 +55,10 @@ class SpecialBlockList extends SpecialPage {
 
                $action = $request->getText( 'action' );
 
-               if( $action == 'unblock' || $action == 'submit' && $request->wasPosted() ) {
+               if ( $action == 'unblock' || $action == 'submit' && $request->wasPosted() ) {
                        # B/C @since 1.18: Unblock interface is now at Special:Unblock
                        $title = SpecialPage::getTitleFor( 'Unblock', $this->target );
-                       $out->redirect( $title->getFullUrl() );
+                       $out->redirect( $title->getFullURL() );
                        return;
                }
 
@@ -120,7 +120,7 @@ class SpecialBlockList extends SpecialPage {
                if ( $this->target !== '' ) {
                        list( $target, $type ) = Block::parseTarget( $this->target );
 
-                       switch( $type ) {
+                       switch ( $type ) {
                                case Block::TYPE_ID:
                                case Block::TYPE_AUTO:
                                        $conds['ipb_id'] = $target;
@@ -148,16 +148,16 @@ class SpecialBlockList extends SpecialPage {
                }
 
                # Apply filters
-               if( in_array( 'userblocks', $this->options ) ) {
+               if ( in_array( 'userblocks', $this->options ) ) {
                        $conds['ipb_user'] = 0;
                }
-               if( in_array( 'tempblocks', $this->options ) ) {
+               if ( in_array( 'tempblocks', $this->options ) ) {
                        $conds['ipb_expiry'] = 'infinity';
                }
-               if( in_array( 'addressblocks', $this->options ) ) {
+               if ( in_array( 'addressblocks', $this->options ) ) {
                        $conds[] = "ipb_user != 0 OR ipb_range_end > ipb_range_start";
                }
-               if( in_array( 'rangeblocks', $this->options ) ) {
+               if ( in_array( 'rangeblocks', $this->options ) ) {
                        $conds[] = "ipb_range_end = ipb_range_start";
                }
 
@@ -169,7 +169,7 @@ class SpecialBlockList extends SpecialPage {
 
                # Show additional header for the local block only when other blocks exists.
                # Not necessary in a standard installation without such extensions enabled
-               if( count( $otherBlockLink ) ) {
+               if ( count( $otherBlockLink ) ) {
                        $out->addHTML(
                                Html::element( 'h2', array(), $this->msg( 'ipblocklist-localblock' )->text() ) . "\n"
                        );
@@ -179,8 +179,8 @@ class SpecialBlockList extends SpecialPage {
                if ( $pager->getNumRows() ) {
                        $out->addHTML(
                                $pager->getNavigationBar() .
-                               $pager->getBody().
-                               $pager->getNavigationBar()
+                                       $pager->getBody() .
+                                       $pager->getNavigationBar()
                        );
 
                } elseif ( $this->target ) {
@@ -190,7 +190,7 @@ class SpecialBlockList extends SpecialPage {
                        $out->addWikiMsg( 'ipblocklist-empty' );
                }
 
-               if( count( $otherBlockLink ) ) {
+               if ( count( $otherBlockLink ) ) {
                        $out->addHTML(
                                Html::rawElement(
                                        'h2',
@@ -199,7 +199,7 @@ class SpecialBlockList extends SpecialPage {
                                ) . "\n"
                        );
                        $list = '';
-                       foreach( $otherBlockLink as $link ) {
+                       foreach ( $otherBlockLink as $link ) {
                                $list .= Html::rawElement( 'li', array(), $link ) . "\n";
                        }
                        $out->addHTML( Html::rawElement( 'ul', array( 'class' => 'mw-ipblocklist-otherblocks' ), $list ) . "\n" );
@@ -238,7 +238,7 @@ class BlockListPager extends TablePager {
                                'ipb_params' => 'blocklist-params',
                                'ipb_reason' => 'blocklist-reason',
                        );
-                       foreach( $headers as $key => $val ) {
+                       foreach ( $headers as $key => $val ) {
                                $headers[$key] = $this->msg( $val )->text();
                        }
                }
@@ -267,17 +267,17 @@ class BlockListPager extends TablePager {
 
                $formatted = '';
 
-               switch( $name ) {
+               switch ( $name ) {
                        case 'ipb_timestamp':
                                $formatted = $this->getLanguage()->userTimeAndDate( $value, $this->getUser() );
                                break;
 
                        case 'ipb_target':
-                               if( $row->ipb_auto ) {
+                               if ( $row->ipb_auto ) {
                                        $formatted = $this->msg( 'autoblockid', $row->ipb_id )->parse();
                                } else {
                                        list( $target, $type ) = Block::parseTarget( $row->ipb_address );
-                                       switch( $type ) {
+                                       switch ( $type ) {
                                                case Block::TYPE_USER:
                                                case Block::TYPE_IP:
                                                        $formatted = Linker::userLink( $target->getId(), $target );
@@ -295,9 +295,9 @@ class BlockListPager extends TablePager {
                                break;
 
                        case 'ipb_expiry':
-                               $formatted = $this->getLanguage()->formatExpiry( $value, /* User preference timezone */ true );
-                               if( $this->getUser()->isAllowed( 'block' ) ) {
-                                       if( $row->ipb_auto ) {
+                               $formatted = $this->getLanguage()->formatExpiry( $value, /* User preference timezone */true );
+                               if ( $this->getUser()->isAllowed( 'block' ) ) {
+                                       if ( $row->ipb_auto ) {
                                                $links[] = Linker::linkKnown(
                                                        SpecialPage::getTitleFor( 'Unblock' ),
                                                        $msg['unblocklink'],
@@ -441,7 +441,7 @@ class BlockListPager extends TablePager {
                }
 
                $ua = UserArray::newFromIDs( $userids );
-               foreach( $ua as $user ) {
+               foreach ( $ua as $user ) {
                        $name = str_replace( ' ', '_', $user->getName() );
                        $lb->add( NS_USER, $name );
                        $lb->add( NS_USER_TALK, $name );
index 85a3019..1e5b524 100644 (file)
@@ -39,7 +39,7 @@ class SpecialBlockme extends UnlistedSpecialPage {
                $this->outputHeader();
 
                $ip = $this->getRequest()->getIP();
-               if( !$wgBlockOpenProxies || $this->getRequest()->getText( 'ip' ) != md5( $ip . $wgProxyKey ) ) {
+               if ( !$wgBlockOpenProxies || $this->getRequest()->getText( 'ip' ) != md5( $ip . $wgProxyKey ) ) {
                        $this->getOutput()->addWikiMsg( 'proxyblocker-disabled' );
                        return;
                }
index bdbd77b..0774c44 100644 (file)
@@ -53,8 +53,8 @@ class SpecialBookSources extends SpecialPage {
                $this->outputHeader();
                $this->isbn = self::cleanIsbn( $isbn ? $isbn : $this->getRequest()->getText( 'isbn' ) );
                $this->getOutput()->addHTML( $this->makeForm() );
-               if( strlen( $this->isbn ) > 0 ) {
-                       if( !self::isValidISBN( $this->isbn ) ) {
+               if ( strlen( $this->isbn ) > 0 ) {
+                       if ( !self::isValidISBN( $this->isbn ) ) {
                                $this->getOutput()->wrapWikiMsg( "<div class=\"error\">\n$1\n</div>", 'booksources-invalid-isbn' );
                        }
                        $this->showList();
@@ -69,29 +69,29 @@ class SpecialBookSources extends SpecialPage {
        public static function isValidISBN( $isbn ) {
                $isbn = self::cleanIsbn( $isbn );
                $sum = 0;
-               if( strlen( $isbn ) == 13 ) {
-                       for( $i = 0; $i < 12; $i++ ) {
-                               if( $i % 2 == 0 ) {
+               if ( strlen( $isbn ) == 13 ) {
+                       for ( $i = 0; $i < 12; $i++ ) {
+                               if ( $i % 2 == 0 ) {
                                        $sum += $isbn[$i];
                                } else {
                                        $sum += 3 * $isbn[$i];
                                }
                        }
 
-                       $check = (10 - ($sum % 10)) % 10;
+                       $check = ( 10 - ( $sum % 10 ) ) % 10;
                        if ( $check == $isbn[12] ) {
                                return true;
                        }
-               } elseif( strlen( $isbn ) == 10 ) {
-                       for( $i = 0; $i < 9; $i++ ) {
-                               $sum += $isbn[$i] * ($i + 1);
+               } elseif ( strlen( $isbn ) == 10 ) {
+                       for ( $i = 0; $i < 9; $i++ ) {
+                               $sum += $isbn[$i] * ( $i + 1 );
                        }
 
                        $check = $sum % 11;
-                       if( $check == 10 ) {
+                       if ( $check == 10 ) {
                                $check = "X";
                        }
-                       if( $check == $isbn[9] ) {
+                       if ( $check == $isbn[9] ) {
                                return true;
                        }
                }
@@ -143,7 +143,7 @@ class SpecialBookSources extends SpecialPage {
                # Check for a local page such as Project:Book_sources and use that if available
                $page = $this->msg( 'booksources' )->inContentLanguage()->text();
                $title = Title::makeTitleSafe( NS_PROJECT, $page ); # Show list in content language
-               if( is_object( $title ) && $title->exists() ) {
+               if ( is_object( $title ) && $title->exists() ) {
                        $rev = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                        $content = $rev->getContent();
 
@@ -162,7 +162,7 @@ class SpecialBookSources extends SpecialPage {
                $this->getOutput()->addWikiMsg( 'booksources-text' );
                $this->getOutput()->addHTML( '<ul>' );
                $items = $wgContLang->getBookstoreList();
-               foreach( $items as $label => $url )
+               foreach ( $items as $label => $url )
                        $this->getOutput()->addHTML( $this->makeListItem( $label, $url ) );
                $this->getOutput()->addHTML( '</ul>' );
                return true;
index fac4123..e6fd58d 100644 (file)
@@ -88,7 +88,7 @@ class BrokenRedirectsPage extends QueryPage {
         * @return array
         */
        function getOrderFields() {
-               return array ( 'rd_namespace', 'rd_title', 'rd_from' );
+               return array( 'rd_namespace', 'rd_title', 'rd_from' );
        }
 
        /**
@@ -138,7 +138,7 @@ class BrokenRedirectsPage extends QueryPage {
 
                $out = $from . $this->msg( 'word-separator' )->escaped();
 
-               if( $this->getUser()->isAllowed( 'delete' ) ) {
+               if ( $this->getUser()->isAllowed( 'delete' ) ) {
                        $links[] = Linker::linkKnown(
                                $fromObj,
                                $this->msg( 'brokenredirects-delete' )->escaped(),
index 9040c64..f7256a4 100644 (file)
@@ -42,12 +42,12 @@ class SpecialCategories extends SpecialPage {
 
                $this->getOutput()->addHTML(
                        Html::openElement( 'div', array( 'class' => 'mw-spcontent' ) ) .
-                       $this->msg( 'categoriespagetext', $cap->getNumRows() )->parseAsBlock() .
-                       $cap->getStartForm( $from ) .
-                       $cap->getNavigationBar() .
-                       '<ul>' . $cap->getBody() . '</ul>' .
-                       $cap->getNavigationBar() .
-                       Html::closeElement( 'div' )
+                               $this->msg( 'categoriespagetext', $cap->getNumRows() )->parseAsBlock() .
+                               $cap->getStartForm( $from ) .
+                               $cap->getNavigationBar() .
+                               '<ul>' . $cap->getBody() . '</ul>' .
+                               $cap->getNavigationBar() .
+                               Html::closeElement( 'div' )
                );
        }
 
@@ -66,7 +66,7 @@ class CategoryPager extends AlphabeticPager {
        function __construct( IContextSource $context, $from ) {
                parent::__construct( $context );
                $from = str_replace( ' ', '_', $from );
-               if( $from !== '' ) {
+               if ( $from !== '' ) {
                        $from = Title::capitalize( $from, NS_CATEGORY );
                        $this->setOffset( $from );
                        $this->setIncludeOffset( true );
@@ -92,6 +92,7 @@ class CategoryPager extends AlphabeticPager {
                unset( $this->mDefaultQuery['from'] );
                return $this->mDefaultQuery;
        }
+
 #      protected function getOrderTypeMessages() {
 #              return array( 'abc' => 'special-categories-sort-abc',
 #                      'count' => 'special-categories-sort-count' );
@@ -126,13 +127,19 @@ class CategoryPager extends AlphabeticPager {
        public function getStartForm( $from ) {
                global $wgScript;
 
-               return
-                       Xml::tags( 'form', array( 'method' => 'get', 'action' => $wgScript ),
-                               Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
-                               Xml::fieldset( $this->msg( 'categories' )->text(),
-                                       Xml::inputLabel( $this->msg( 'categoriesfrom' )->text(),
+               return Xml::tags(
+                       'form',
+                       array( 'method' => 'get', 'action' => $wgScript ),
+                       Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
+                               Xml::fieldset(
+                                       $this->msg( 'categories' )->text(),
+                                       Xml::inputLabel(
+                                               $this->msg( 'categoriesfrom' )->text(),
                                                'from', 'from', 20, $from ) .
-                                       ' ' .
-                                       Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) ) );
+                                                       ' ' .
+                                                       Xml::submitButton( $this->msg( 'allpagessubmit' )->text()
+                                       )
+                               )
+               );
        }
 }
index 59a0257..2086fd3 100644 (file)
@@ -89,8 +89,8 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                $this->mNewEmail = $request->getVal( 'wpNewEmail' );
 
                if ( $request->wasPosted()
-                       && $user->matchEditToken( $request->getVal( 'token' ) ) )
-               {
+                       && $user->matchEditToken( $request->getVal( 'token' ) )
+               {
                        $info = $this->attemptChange( $user, $this->mPassword, $this->mNewEmail );
                        if ( $info === true ) {
                                $this->doReturnTo();
@@ -138,15 +138,15 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
 
                $this->getOutput()->addHTML(
                        Xml::fieldset( $this->msg( 'changeemail-header' )->text() ) .
-                       Xml::openElement( 'form',
-                               array(
-                                       'method' => 'post',
-                                       'action' => $this->getTitle()->getLocalUrl(),
-                                       'id' => 'mw-changeemail-form' ) ) . "\n" .
-                       Html::hidden( 'token', $user->getEditToken() ) . "\n" .
-                       Html::hidden( 'returnto', $this->getRequest()->getVal( 'returnto' ) ) . "\n" .
-                       $this->msg( 'changeemail-text' )->parseAsBlock() . "\n" .
-                       Xml::openElement( 'table', array( 'id' => 'mw-changeemail-table' ) ) . "\n"
+                               Xml::openElement( 'form',
+                                       array(
+                                               'method' => 'post',
+                                               'action' => $this->getTitle()->getLocalURL(),
+                                               'id' => 'mw-changeemail-form' ) ) . "\n" .
+                               Html::hidden( 'token', $user->getEditToken() ) . "\n" .
+                               Html::hidden( 'returnto', $this->getRequest()->getVal( 'returnto' ) ) . "\n" .
+                               $this->msg( 'changeemail-text' )->parseAsBlock() . "\n" .
+                               Xml::openElement( 'table', array( 'id' => 'mw-changeemail-table' ) ) . "\n"
                );
                $items = array(
                        array( 'wpName', 'username', 'text', $user->getName() ),
@@ -159,17 +159,17 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
 
                $this->getOutput()->addHTML(
                        $this->pretty( $items ) .
-                       "\n" .
-                       "<tr>\n" .
+                               "\n" .
+                               "<tr>\n" .
                                "<td></td>\n" .
                                '<td class="mw-input">' .
-                                       Xml::submitButton( $this->msg( 'changeemail-submit' )->text() ) .
-                                       Xml::submitButton( $this->msg( 'changeemail-cancel' )->text(), array( 'name' => 'wpCancel' ) ) .
+                               Xml::submitButton( $this->msg( 'changeemail-submit' )->text() ) .
+                               Xml::submitButton( $this->msg( 'changeemail-cancel' )->text(), array( 'name' => 'wpCancel' ) ) .
                                "</td>\n" .
-                       "</tr>\n" .
-                       Xml::closeElement( 'table' ) .
-                       Xml::closeElement( 'form' ) .
-                       Xml::closeElement( 'fieldset' ) . "\n"
+                               "</tr>\n" .
+                               Xml::closeElement( 'table' ) .
+                               Xml::closeElement( 'form' ) .
+                               Xml::closeElement( 'fieldset' ) . "\n"
                );
        }
 
@@ -181,7 +181,7 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                $out = '';
                foreach ( $fields as $list ) {
                        list( $name, $label, $type, $value ) = $list;
-                       if( $type == 'text' ) {
+                       if ( $type == 'text' ) {
                                $field = htmlspecialchars( $value );
                        } else {
                                $attribs = array( 'id' => $name );
@@ -241,8 +241,8 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                if ( !$status->isGood() ) {
                        $this->getOutput()->addHTML(
                                '<p class="error">' .
-                               $this->getOutput()->parseInline( $status->getWikiText( 'mailerror' ) ) .
-                               '</p>' );
+                                       $this->getOutput()->parseInline( $status->getWikiText( 'mailerror' ) ) .
+                                       '</p>' );
                        return false;
                }
 
index 73eb97f..95fbb0d 100644 (file)
@@ -52,46 +52,46 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                $this->mDomain = $request->getVal( 'wpDomain' );
 
                $user = $this->getUser();
-               if( !$request->wasPosted() && !$user->isLoggedIn() ) {
+               if ( !$request->wasPosted() && !$user->isLoggedIn() ) {
                        $this->error( $this->msg( 'resetpass-no-info' )->text() );
                        return;
                }
 
-               if( $request->wasPosted() && $request->getBool( 'wpCancel' ) ) {
+               if ( $request->wasPosted() && $request->getBool( 'wpCancel' ) ) {
                        $this->doReturnTo();
                        return;
                }
 
                $this->checkReadOnly();
 
-               if( $request->wasPosted() && $user->matchEditToken( $request->getVal( 'token' ) ) ) {
+               if ( $request->wasPosted() && $user->matchEditToken( $request->getVal( 'token' ) ) ) {
                        try {
                                $this->mDomain = $wgAuth->getDomain();
-                               if( !$wgAuth->allowPasswordChange() ) {
+                               if ( !$wgAuth->allowPasswordChange() ) {
                                        $this->error( $this->msg( 'resetpass_forbidden' )->text() );
                                        return;
                                }
 
                                $this->attemptReset( $this->mNewpass, $this->mRetype );
 
-                               if( $user->isLoggedIn() ) {
+                               if ( $user->isLoggedIn() ) {
                                        $this->doReturnTo();
                                } else {
                                        LoginForm::setLoginToken();
                                        $token = LoginForm::getLoginToken();
                                        $data = array(
-                                               'action'       => 'submitlogin',
-                                               'wpName'       => $this->mUserName,
-                                               'wpDomain'     => $this->mDomain,
+                                               'action' => 'submitlogin',
+                                               'wpName' => $this->mUserName,
+                                               'wpDomain' => $this->mDomain,
                                                'wpLoginToken' => $token,
-                                               'wpPassword'   => $request->getVal( 'wpNewPassword' ),
+                                               'wpPassword' => $request->getVal( 'wpNewPassword' ),
                                        ) + $request->getValues( 'wpRemember', 'returnto', 'returntoquery' );
                                        $login = new LoginForm( new FauxRequest( $data, true ) );
                                        $login->setContext( $this->getContext() );
                                        $login->execute( null );
                                }
                                return;
-                       } catch( PasswordError $e ) {
+                       } catch ( PasswordError $e ) {
                                $this->error( $e->getMessage() );
                        }
                }
@@ -127,12 +127,12 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                        $rememberMe = '<tr>' .
                                '<td></td>' .
                                '<td class="mw-input">' .
-                                       Xml::checkLabel(
-                                               $this->msg( 'remembermypassword' )->numParams( ceil( $wgCookieExpiration / ( 3600 * 24 ) ) )->text(),
-                                               'wpRemember', 'wpRemember',
-                                               $this->getRequest()->getCheck( 'wpRemember' ) ) .
+                               Xml::checkLabel(
+                                       $this->msg( 'remembermypassword' )->numParams( ceil( $wgCookieExpiration / ( 3600 * 24 ) ) )->text(),
+                                       'wpRemember', 'wpRemember',
+                                       $this->getRequest()->getCheck( 'wpRemember' ) ) .
                                '</td>' .
-                       '</tr>';
+                               '</tr>';
                        $submitMsg = 'resetpass_submit';
                        $oldpassMsg = 'resetpass-temp-password';
                } else {
@@ -142,11 +142,11 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                $extraFields = array();
                wfRunHooks( 'ChangePasswordForm', array( &$extraFields ) );
                $prettyFields = array(
-                                       array( 'wpName', 'username', 'text', $this->mUserName ),
-                                       array( 'wpPassword', $oldpassMsg, 'password', $this->mOldpass ),
-                                       array( 'wpNewPassword', 'newpassword', 'password', null ),
-                                       array( 'wpRetype', 'retypenew', 'password', null ),
-                               );
+                       array( 'wpName', 'username', 'text', $this->mUserName ),
+                       array( 'wpPassword', $oldpassMsg, 'password', $this->mOldpass ),
+                       array( 'wpNewPassword', 'newpassword', 'password', null ),
+                       array( 'wpRetype', 'retypenew', 'password', null ),
+               );
                $prettyFields = array_merge( $prettyFields, $extraFields );
                $hiddenFields = array(
                        'token' => $user->getEditToken(),
@@ -154,31 +154,31 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                        'wpDomain' => $this->mDomain,
                ) + $this->getRequest()->getValues( 'returnto', 'returntoquery' );
                $hiddenFieldsStr = '';
-               foreach( $hiddenFields as $fieldname => $fieldvalue ) {
+               foreach ( $hiddenFields as $fieldname => $fieldvalue ) {
                        $hiddenFieldsStr .= Html::hidden( $fieldname, $fieldvalue ) . "\n";
                }
                $this->getOutput()->addHTML(
                        Xml::fieldset( $this->msg( 'resetpass_header' )->text() ) .
-                       Xml::openElement( 'form',
-                               array(
-                                       'method' => 'post',
-                                       'action' => $this->getTitle()->getLocalUrl(),
-                                       'id' => 'mw-resetpass-form' ) ) . "\n" .
-                       $hiddenFieldsStr .
-                       $this->msg( 'resetpass_text' )->parseAsBlock() . "\n" .
-                       Xml::openElement( 'table', array( 'id' => 'mw-resetpass-table' ) ) . "\n" .
-                       $this->pretty( $prettyFields ) . "\n" .
-                       $rememberMe .
-                       "<tr>\n" .
+                               Xml::openElement( 'form',
+                                       array(
+                                               'method' => 'post',
+                                               'action' => $this->getTitle()->getLocalURL(),
+                                               'id' => 'mw-resetpass-form' ) ) . "\n" .
+                               $hiddenFieldsStr .
+                               $this->msg( 'resetpass_text' )->parseAsBlock() . "\n" .
+                               Xml::openElement( 'table', array( 'id' => 'mw-resetpass-table' ) ) . "\n" .
+                               $this->pretty( $prettyFields ) . "\n" .
+                               $rememberMe .
+                               "<tr>\n" .
                                "<td></td>\n" .
                                '<td class="mw-input">' .
-                                       Xml::submitButton( $this->msg( $submitMsg )->text() ) .
-                                       Xml::submitButton( $this->msg( 'resetpass-submit-cancel' )->text(), array( 'name' => 'wpCancel' ) ) .
+                               Xml::submitButton( $this->msg( $submitMsg )->text() ) .
+                               Xml::submitButton( $this->msg( 'resetpass-submit-cancel' )->text(), array( 'name' => 'wpCancel' ) ) .
                                "</td>\n" .
-                       "</tr>\n" .
-                       Xml::closeElement( 'table' ) .
-                       Xml::closeElement( 'form' ) .
-                       Xml::closeElement( 'fieldset' ) . "\n"
+                               "</tr>\n" .
+                               Xml::closeElement( 'table' ) .
+                               Xml::closeElement( 'form' ) .
+                               Xml::closeElement( 'fieldset' ) . "\n"
                );
        }
 
@@ -190,7 +190,7 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                $out = '';
                foreach ( $fields as $list ) {
                        list( $name, $label, $type, $value ) = $list;
-                       if( $type == 'text' ) {
+                       if ( $type == 'text' ) {
                                $field = htmlspecialchars( $value );
                        } else {
                                $attribs = array( 'id' => $name );
@@ -205,10 +205,13 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                        }
                        $out .= "<tr>\n";
                        $out .= "\t<td class='mw-label'>";
-                       if ( $type != 'text' )
+
+                       if ( $type != 'text' ) {
                                $out .= Xml::label( $this->msg( $label )->text(), $name );
-                       else
+                       } else {
                                $out .= $this->msg( $label )->escaped();
+                       }
+
                        $out .= "</td>\n";
                        $out .= "\t<td class='mw-input'>";
                        $out .= $field;
@@ -229,11 +232,11 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                        $user = User::newFromName( $this->mUserName );
                }
 
-               if( !$user || $user->isAnon() ) {
+               if ( !$user || $user->isAnon() ) {
                        throw new PasswordError( $this->msg( 'nosuchusershort', $this->mUserName )->text() );
                }
 
-               if( $newpass !== $retype ) {
+               if ( $newpass !== $retype ) {
                        wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'badretype' ) );
                        throw new PasswordError( $this->msg( 'badretype' )->text() );
                }
@@ -243,7 +246,7 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                        throw new PasswordError( $this->msg( 'login-throttled' )->text() );
                }
 
-               if( !$user->checkTemporaryPassword( $this->mOldpass ) && !$user->checkPassword( $this->mOldpass ) ) {
+               if ( !$user->checkTemporaryPassword( $this->mOldpass ) && !$user->checkPassword( $this->mOldpass ) ) {
                        wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'wrongpassword' ) );
                        throw new PasswordError( $this->msg( 'resetpass-wrong-oldpass' )->text() );
                }
@@ -257,7 +260,7 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                        $user->setPassword( $this->mNewpass );
                        wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'success' ) );
                        $this->mNewpass = $this->mOldpass = $this->mRetype = '';
-               } catch( PasswordError $e ) {
+               } catch ( PasswordError $e ) {
                        wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'error' ) );
                        throw new PasswordError( $e->getMessage() );
                }
index c3bd3fe..3b82326 100644 (file)
@@ -110,7 +110,7 @@ class SpecialComparePages extends SpecialPage {
                $rev1 = self::revOrTitle( $data['Revision1'], $data['Page1'] );
                $rev2 = self::revOrTitle( $data['Revision2'], $data['Page2'] );
 
-               if( $rev1 && $rev2 ) {
+               if ( $rev1 && $rev2 ) {
                        $revision = Revision::newFromId( $rev1 );
 
                        if ( $revision ) { // NOTE: $rev1 was already checked, should exist.
@@ -128,11 +128,11 @@ class SpecialComparePages extends SpecialPage {
        }
 
        public static function revOrTitle( $revision, $title ) {
-               if( $revision ) {
+               if ( $revision ) {
                        return $revision;
-               } elseif( $title ) {
+               } elseif ( $title ) {
                        $title = Title::newFromText( $title );
-                       if( $title instanceof Title ) {
+                       if ( $title instanceof Title ) {
                                return $title->getLatestRevID();
                        }
                }
index 078c386..0c98d37 100644 (file)
@@ -98,7 +98,7 @@ class EmailConfirmation extends UnlistedSpecialPage {
                                $out->wrapWikiMsg( "<div class=\"error mw-confirmemail-pending\">\n$1\n</div>", 'confirmemail_pending' );
                        }
                        $out->addWikiMsg( 'confirmemail_text' );
-                       $form = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalUrl() ) );
+                       $form = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalURL() ) );
                        $form .= Html::hidden( 'token', $user->getEditToken() );
                        $form .= Xml::submitButton( $this->msg( 'confirmemail_send' )->text() );
                        $form .= Xml::closeElement( 'form' );
index b118059..75983e8 100644 (file)
@@ -747,7 +747,7 @@ class ContribsPager extends ReverseChronologicalPager {
                        if ( !$this->associated ) {
                                return array( "page_namespace $eq_op $selectedNS" );
                        } else {
-                               $associatedNS = $this->mDb->addQuotes (
+                               $associatedNS = $this->mDb->addQuotes(
                                        MWNamespace::getAssociated( $this->namespace )
                                );
                                return array(
index b5ad589..163e5c6 100644 (file)
@@ -119,11 +119,11 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                                throw new ThrottledError;
                        case 'mailnologin':
                        case 'usermaildisabled':
-                               throw new  ErrorPageError( $error, "{$error}text" );
+                               throw new ErrorPageError( $error, "{$error}text" );
                        default:
                                # It's a hook error
                                list( $title, $msg, $params ) = $error;
-                               throw new  ErrorPageError( $title, $msg, $params );
+                               throw new ErrorPageError( $title, $msg, $params );
                }
                // Got a valid target user name? Else ask for one.
                $ret = self::getTarget( $this->mTarget );
index 7abfefe..ed3321e 100644 (file)
@@ -187,7 +187,7 @@ class SpecialExport extends SpecialPage {
                $out->addWikiMsg( 'exporttext' );
 
                $form = Xml::openElement( 'form', array( 'method' => 'post',
-                       'action' => $this->getTitle()->getLocalUrl( 'action=submit' ) ) );
+                       'action' => $this->getTitle()->getLocalURL( 'action=submit' ) ) );
                $form .= Xml::inputLabel( $this->msg( 'export-addcattext' )->text(), 'catname', 'catname', 40 ) . '&#160;';
                $form .= Xml::submitButton( $this->msg( 'export-addcat' )->text(), array( 'name' => 'addcat' ) ) . '<br />';
 
index 3fe64e6..cc5cd5b 100644 (file)
@@ -113,14 +113,14 @@ class FileDuplicateSearchPage extends QueryPage {
 
                # Create the input form
                $out->addHTML(
-                       Xml::openElement( 'form', array( 'id' => 'fileduplicatesearch', 'method' => 'get', 'action' => $wgScript ) ) .
-                       Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) .
-                       Xml::openElement( 'fieldset' ) .
-                       Xml::element( 'legend', null, $this->msg( 'fileduplicatesearch-legend' )->text() ) .
-                       Xml::inputLabel( $this->msg( 'fileduplicatesearch-filename' )->text(), 'filename', 'filename', 50, $this->filename ) . ' ' .
-                       Xml::submitButton( $this->msg( 'fileduplicatesearch-submit' )->text() ) .
-                       Xml::closeElement( 'fieldset' ) .
-                       Xml::closeElement( 'form' )
+                       Html::openElement( 'form', array( 'id' => 'fileduplicatesearch', 'method' => 'get', 'action' => $wgScript ) ) . "\n" .
+                       Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n" .
+                       Html::openElement( 'fieldset' ) . "\n" .
+                       Html::element( 'legend', null, $this->msg( 'fileduplicatesearch-legend' )->text() ) . "\n" .
+                       Xml::inputLabel( $this->msg( 'fileduplicatesearch-filename' )->text(), 'filename', 'filename', 50, $this->filename ) . "\n" .
+                       Xml::submitButton( $this->msg( 'fileduplicatesearch-submit' )->text() ) . "\n" .
+                       Html::closeElement( 'fieldset' ) . "\n" .
+                       Html::closeElement( 'form' )
                );
 
                if( $this->file ) {
index aa56041..fc6172f 100644 (file)
@@ -182,7 +182,7 @@ class SpecialImport extends SpecialPage {
        private function showForm() {
                global $wgImportSources, $wgExportMaxLinkDepth;
 
-               $action = $this->getTitle()->getLocalUrl( array( 'action' => 'submit' ) );
+               $action = $this->getTitle()->getLocalURL( array( 'action' => 'submit' ) );
                $user = $this->getUser();
                $out = $this->getOutput();
 
index d204d50..ab42549 100644 (file)
@@ -112,7 +112,7 @@ class SpecialJavaScriptTest extends SpecialPage {
                if( !in_array( $state, $validStates ) ) {
                        throw new MWException( __METHOD__
                                . ' given an invalid state. Must be one of "'
-                               . join( '", "', $validStates) . '".'
+                               . join( '", "', $validStates ) . '".'
                        );
                }
                return "<div id=\"mw-javascripttest-summary\" class=\"mw-javascripttest-$state\">$html</div>";
index ebb3021..eefc1b7 100644 (file)
@@ -419,7 +419,7 @@ class SpecialNewpages extends IncludableSpecialPage {
                $feed = new $wgFeedClasses[$type](
                        $this->feedTitle(),
                        $this->msg( 'tagline' )->text(),
-                       $this->getTitle()->getFullUrl()
+                       $this->getTitle()->getFullURL()
                );
 
                $pager = new NewPagesPager( $this, $this->opts );
index 8f8c981..dc6464a 100644 (file)
@@ -70,7 +70,7 @@ class SpecialPagesWithProp extends QueryPage {
                        ),
                ), $this->getContext() );
                $form->setMethod( 'get' );
-               $form->setAction( $this->getTitle()->getFullUrl() );
+               $form->setAction( $this->getTitle()->getFullURL() );
                $form->setSubmitCallback( array( $this, 'onSubmit' ) );
                $form->setWrapperLegend( $this->msg( 'pageswithprop-legend' ) );
                $form->addHeaderText( $this->msg( 'pageswithprop-text' )->parseAsBlock() );
index 90b0ac8..491fadc 100644 (file)
@@ -249,7 +249,7 @@ class SpecialPasswordReset extends FormSpecialPage {
                        $username,
                        $passwordBlock,
                        count( $passwords ),
-                       '<' . Title::newMainPage()->getCanonicalUrl() . '>',
+                       '<' . Title::newMainPage()->getCanonicalURL() . '>',
                        round( $wgNewPasswordExpiry / 86400 )
                );
 
index eb89bec..bc4f3bb 100644 (file)
@@ -83,6 +83,12 @@ class SpecialProtectedpages extends SpecialPage {
                }
 
                $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
+               if( !$title ) {
+                       return Html::rawElement( 'li', array(),
+                               Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
+                                       Linker::getInvalidTitleDescription( $this->getContext(), $row->page_namespace, $row->page_title ) ) ) . "\n";
+               }
+
                $link = Linker::link( $title );
 
                $description_items = array ();
@@ -202,16 +208,14 @@ class SpecialProtectedpages extends SpecialPage {
         * @return string Formatted HTML
         */
        protected function getExpiryCheck( $indefOnly ) {
-               return
-                       Xml::checkLabel( $this->msg( 'protectedpages-indef' )->text(), 'indefonly', 'indefonly', $indefOnly ) . "\n";
+               return Xml::checkLabel( $this->msg( 'protectedpages-indef' )->text(), 'indefonly', 'indefonly', $indefOnly ) . "\n";
        }
 
        /**
         * @return string Formatted HTML
         */
        protected function getCascadeCheck( $cascadeOnly ) {
-               return
-                       Xml::checkLabel( $this->msg( 'protectedpages-cascade' )->text(), 'cascadeonly', 'cascadeonly', $cascadeOnly ) . "\n";
+               return Xml::checkLabel( $this->msg( 'protectedpages-cascade' )->text(), 'cascadeonly', 'cascadeonly', $cascadeOnly ) . "\n";
        }
 
        /**
@@ -220,8 +224,7 @@ class SpecialProtectedpages extends SpecialPage {
        protected function getSizeLimit( $sizetype, $size ) {
                $max = $sizetype === 'max';
 
-               return
-                       Xml::radioLabel( $this->msg( 'minimum-size' )->text(), 'sizetype', 'min', 'wpmin', !$max ) .
+               return Xml::radioLabel( $this->msg( 'minimum-size' )->text(), 'sizetype', 'min', 'wpmin', !$max ) .
                        '&#160;' .
                        Xml::radioLabel( $this->msg( 'maximum-size' )->text(), 'sizetype', 'max', 'wpmax', $max ) .
                        '&#160;' .
index 6a94deb..a9d9cff 100644 (file)
@@ -81,6 +81,12 @@ class SpecialProtectedtitles extends SpecialPage {
                }
 
                $title = Title::makeTitleSafe( $row->pt_namespace, $row->pt_title );
+               if( !$title ) {
+                       return Html::rawElement( 'li', array(),
+                               Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
+                                       Linker::getInvalidTitleDescription( $this->getContext(), $row->pt_namespace, $row->pt_title ) ) ) . "\n";
+               }
+
                $link = Linker::link( $title );
 
                $description_items = array ();
@@ -176,8 +182,7 @@ class SpecialProtectedtitles extends SpecialPage {
                        $options[] = Xml::option( $text, $type, $selected );
                }
 
-               return
-                       Xml::label( $this->msg( 'restriction-level' )->text(), $this->IdLevel ) . '&#160;' .
+               return Xml::label( $this->msg( 'restriction-level' )->text(), $this->IdLevel ) . '&#160;' .
                        Xml::tags( 'select',
                                array( 'id' => $this->IdLevel, 'name' => $this->IdLevel ),
                                implode( "\n", $options ) );
@@ -200,7 +205,7 @@ class ProtectedTitlesPager extends AlphabeticPager {
                $this->mConds = $conds;
                $this->level = $level;
                $this->namespace = $namespace;
-               $this->size = intval($size);
+               $this->size = intval( $size );
                parent::__construct( $form->getContext() );
        }
 
index ba5a4ac..2b25b78 100644 (file)
@@ -72,7 +72,7 @@ class RandomPage extends SpecialPage {
                $redirectParam = $this->isRedirect() ? array( 'redirect' => 'no' ) : array();
                $query = array_merge( $this->getRequest()->getValues(), $redirectParam );
                unset( $query['title'] );
-               $this->getOutput()->redirect( $title->getFullUrl( $query ) );
+               $this->getOutput()->redirect( $title->getFullURL( $query ) );
        }
 
        /**
index 391c4a7..bdeb770 100644 (file)
@@ -56,7 +56,7 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                        $this->msg( 'recentchangeslinked-title', $this->getTargetTitle()->getPrefixedText() )
                                ->inContentLanguage()->text(),
                        $this->msg( 'recentchangeslinked-feed' )->inContentLanguage()->text(),
-                       $this->getTitle()->getFullUrl()
+                       $this->getTitle()->getFullURL()
                );
                return array( $feed, $feedObj );
        }
@@ -183,7 +183,7 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                                }
                        }
 
-                       if( $dbr->unionSupportsOrderAndLimit()) {
+                       if( $dbr->unionSupportsOrderAndLimit() ) {
                                $order = array( 'ORDER BY' => 'rc_timestamp DESC' );
                        } else {
                                $order = array();
@@ -198,7 +198,7 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                                $join_conds + array( $link_table => array( 'INNER JOIN', $subjoin ) )
                        );
 
-                       if( $dbr->unionSupportsOrderAndLimit())
+                       if( $dbr->unionSupportsOrderAndLimit() )
                                $query = $dbr->limitResult( $query, $limit );
 
                        $subsql[] = $query;
index 5a5f8ff..3a7399a 100644 (file)
@@ -312,7 +312,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        $this->getOutput()->addHTML(
                                Xml::openElement( 'form', array(
                                        'method' => 'POST',
-                                       'action' => $this->getTitle()->getLocalUrl(
+                                       'action' => $this->getTitle()->getLocalURL(
                                                'target=' . urlencode( $this->targetObj->getPrefixedDBkey() ) .
                                                '&file=' . urlencode( $archiveName ) .
                                                '&token=' . urlencode( $user->getEditToken( $archiveName ) ) )
@@ -393,7 +393,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                // Show form if the user can submit
                if( $this->mIsAllowed ) {
                        $out = Xml::openElement( 'form', array( 'method' => 'post',
-                                       'action' => $this->getTitle()->getLocalUrl( array( 'action' => 'submit' ) ),
+                                       'action' => $this->getTitle()->getLocalURL( array( 'action' => 'submit' ) ),
                                        'id' => 'mw-revdel-form-revisions' ) ) .
                                Xml::fieldset( $this->msg( 'revdelete-legend' )->text() ) .
                                $this->buildCheckBoxes() .
@@ -581,7 +581,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                foreach( $this->checks as $item ) {
                        list( /* message */, $name, $field ) = $item;
                        $val = $this->getRequest()->getInt( $name, 0 /* unchecked */ );
-                       if( $val < -1 || $val > 1) {
+                       if( $val < -1 || $val > 1 ) {
                                $val = -1; // -1 for existing value
                        }
                        $bitfield[$field] = $val;
index 6c40148..380e20e 100644 (file)
@@ -912,8 +912,7 @@ class SpecialSearch extends SpecialPage {
                        $hidden .= Html::hidden( $key, $value );
                }
                // Return final output
-               return
-                       Xml::openElement(
+               return Xml::openElement(
                                'fieldset',
                                array( 'id' => 'mw-searchoptions', 'style' => 'margin:0em;' )
                        ) .
@@ -1098,7 +1097,8 @@ class SpecialSearch extends SpecialPage {
                        'a',
                        array(
                                'href' => $this->getTitle()->getLocalURL( $stParams ),
-                               'title' => $tooltip),
+                               'title' => $tooltip
+                       ),
                        $label
                );
        }
index e036348..ed550a0 100644 (file)
@@ -1041,9 +1041,10 @@ class SpecialUndelete extends SpecialPage {
                $user = $this->getUser();
                $lang = $this->getLanguage();
                $rdel = Linker::getRevDeleteLink( $user, $rev, $this->mTargetObj );
-               if ( $rdel ) $rdel = " $rdel";
-               return
-                       '<div id="mw-diff-' . $prefix . 'title1"><strong>' .
+               if ( $rdel ) {
+                       $rdel = " $rdel";
+               }
+               return '<div id="mw-diff-' . $prefix . 'title1"><strong>' .
                                Linker::link(
                                        $targetPage,
                                        $this->msg(
index c7f122b..170c393 100644 (file)
@@ -87,7 +87,7 @@ class SpecialWatchlist extends SpecialPage {
                                        $mode = null;
                        }
                        $title = SpecialPage::getTitleFor( 'EditWatchlist', $mode );
-                       $output->redirect( $title->getLocalUrl() );
+                       $output->redirect( $title->getLocalURL() );
                        return;
                }
 
@@ -181,7 +181,7 @@ class SpecialWatchlist extends SpecialPage {
                        $request->wasPosted() )
                {
                        $user->clearAllNotifications();
-                       $output->redirect( $this->getTitle()->getFullUrl( $nondefaults ) );
+                       $output->redirect( $this->getTitle()->getFullURL( $nondefaults ) );
                        return;
                }
 
@@ -246,12 +246,12 @@ class SpecialWatchlist extends SpecialPage {
                # Show watchlist header
                $form .= $this->msg( 'watchlist-details' )->numParams( $nitems )->parse() . "\n";
 
-               if( $user->getOption( 'enotifwatchlistpages' ) && $wgEnotifWatchlist) {
+               if( $user->getOption( 'enotifwatchlistpages' ) && $wgEnotifWatchlist ) {
                        $form .= $this->msg( 'wlheader-enotif' )->parseAsBlock() . "\n";
                }
                if( $wgShowUpdatedMarker ) {
                        $form .= Xml::openElement( 'form', array( 'method' => 'post',
-                                               'action' => $this->getTitle()->getLocalUrl(),
+                                               'action' => $this->getTitle()->getLocalURL(),
                                                'id' => 'mw-watchlist-resetbutton' ) ) . "\n" .
                                        $this->msg( 'wlheader-showupdated' )->parse() .
                                        Xml::submitButton( $this->msg( 'enotif_reset' )->text(), array( 'name' => 'dummy' ) ) . "\n" .
@@ -341,7 +341,7 @@ class SpecialWatchlist extends SpecialPage {
                $form .= $wlInfo;
                $form .= $cutofflinks;
                $form .= $lang->pipeList( $links ) . "\n";
-               $form .= Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalUrl(), 'id' => 'mw-watchlist-form-namespaceselector' ) ) . "\n";
+               $form .= Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalURL(), 'id' => 'mw-watchlist-form-namespaceselector' ) ) . "\n";
                $form .= "<hr />\n<p>";
                $form .= Html::namespaceSelector(
                        array(
index cb3e985..8841af8 100644 (file)
@@ -170,21 +170,24 @@ class SpecialWhatLinksHere extends SpecialPage {
                        $options['ORDER BY'] = 'pl_from';
                        $plRes = $dbr->select( array( 'pagelinks', 'page', 'redirect' ), $fields,
                                $plConds, __METHOD__, $options,
-                               $joinConds);
+                               $joinConds
+                       );
                }
 
                if( !$hidetrans ) {
                        $options['ORDER BY'] = 'tl_from';
                        $tlRes = $dbr->select( array( 'templatelinks', 'page', 'redirect' ), $fields,
                                $tlConds, __METHOD__, $options,
-                               $joinConds);
+                               $joinConds
+                       );
                }
 
                if( !$hideimages ) {
                        $options['ORDER BY'] = 'il_from';
                        $ilRes = $dbr->select( array( 'imagelinks', 'page', 'redirect' ), $fields,
                                $ilConds, __METHOD__, $options,
-                               $joinConds);
+                               $joinConds
+                       );
                }
 
                if( ( !$fetchlinks || !$plRes->numRows() ) && ( $hidetrans || !$tlRes->numRows() ) && ( $hideimages || !$ilRes->numRows() ) ) {
index 3723740..329b1ad 100644 (file)
@@ -51,14 +51,14 @@ class WithoutInterwikiPage extends PageQueryPage {
                $prefix = $this->prefix;
                $t = $this->getTitle();
 
-               return Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ) .
-                       Xml::openElement( 'fieldset' ) .
-                       Xml::element( 'legend', null, $this->msg( 'withoutinterwiki-legend' )->text() ) .
-                       Html::hidden( 'title', $t->getPrefixedText() ) .
-                       Xml::inputLabel( $this->msg( 'allpagesprefix' )->text(), 'prefix', 'wiprefix', 20, $prefix ) . ' ' .
-                       Xml::submitButton( $this->msg( 'withoutinterwiki-submit' )->text() ) .
-                       Xml::closeElement( 'fieldset' ) .
-                       Xml::closeElement( 'form' );
+               return Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ) . "\n" .
+                       Html::openElement( 'fieldset' ) . "\n" .
+                       Html::element( 'legend', null, $this->msg( 'withoutinterwiki-legend' )->text() ) . "\n" .
+                       Html::hidden( 'title', $t->getPrefixedText() ) . "\n" .
+                       Xml::inputLabel( $this->msg( 'allpagesprefix' )->text(), 'prefix', 'wiprefix', 20, $prefix ) . "\n" .
+                       Xml::submitButton( $this->msg( 'withoutinterwiki-submit' )->text() ) . "\n" .
+                       Html::closeElement( 'fieldset' ) . "\n" .
+                       Html::closeElement( 'form' );
        }
 
        function sortDescending() {
index 2483e58..b0ec8b5 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 if ( !defined( 'MEDIAWIKI' ) ) {
-        die( "NoLocalSettings.php is not a valid MediaWiki entry point\n" );
+       die( "NoLocalSettings.php is not a valid MediaWiki entry point\n" );
 }
 
 if ( !isset( $wgVersion ) ) {
index 8381b4c..78c64e1 100644 (file)
@@ -70,17 +70,18 @@ abstract class UploadBase {
         * @return string
         */
        public function getVerificationErrorCode( $error ) {
-               $code_to_status = array(self::EMPTY_FILE => 'empty-file',
-                                                               self::FILE_TOO_LARGE => 'file-too-large',
-                                                               self::FILETYPE_MISSING => 'filetype-missing',
-                                                               self::FILETYPE_BADTYPE => 'filetype-banned',
-                                                               self::MIN_LENGTH_PARTNAME => 'filename-tooshort',
-                                                               self::ILLEGAL_FILENAME => 'illegal-filename',
-                                                               self::OVERWRITE_EXISTING_FILE => 'overwrite',
-                                                               self::VERIFICATION_ERROR => 'verification-error',
-                                                               self::HOOK_ABORTED => 'hookaborted',
-                                                               self::WINDOWS_NONASCII_FILENAME => 'windows-nonascii-filename',
-                                                               self::FILENAME_TOO_LONG => 'filename-toolong',
+               $code_to_status = array(
+                       self::EMPTY_FILE => 'empty-file',
+                       self::FILE_TOO_LARGE => 'file-too-large',
+                       self::FILETYPE_MISSING => 'filetype-missing',
+                       self::FILETYPE_BADTYPE => 'filetype-banned',
+                       self::MIN_LENGTH_PARTNAME => 'filename-tooshort',
+                       self::ILLEGAL_FILENAME => 'illegal-filename',
+                       self::OVERWRITE_EXISTING_FILE => 'overwrite',
+                       self::VERIFICATION_ERROR => 'verification-error',
+                       self::HOOK_ABORTED => 'hookaborted',
+                       self::WINDOWS_NONASCII_FILENAME => 'windows-nonascii-filename',
+                       self::FILENAME_TOO_LONG => 'filename-toolong',
                );
                if( isset( $code_to_status[$error] ) ) {
                        return $code_to_status[$error];
@@ -360,7 +361,7 @@ abstract class UploadBase {
                global $wgVerifyMimeType;
                wfProfileIn( __METHOD__ );
                if ( $wgVerifyMimeType ) {
-                       wfDebug ( "\n\nmime: <$mime> extension: <{$this->mFinalExtension}>\n\n" );
+                       wfDebug( "\n\nmime: <$mime> extension: <{$this->mFinalExtension}>\n\n" );
                        global $wgMimeTypeBlacklist;
                        if ( $this->checkFileExtension( $mime, $wgMimeTypeBlacklist ) ) {
                                wfProfileOut( __METHOD__ );
index e784e51..8144c34 100644 (file)
@@ -182,7 +182,7 @@ class UploadFromChunks extends UploadFromFile {
                // Get the offset before we add the chunk to the file system
                $preAppendOffset = $this->getOffset();
 
-               if ( $preAppendOffset + $chunkSize > $this->getMaxUploadSize()) {
+               if ( $preAppendOffset + $chunkSize > $this->getMaxUploadSize() ) {
                        $status = Status::newFatal( 'file-too-large' );
                } else {
                        // Make sure the client is uploading the correct chunk with a matching offset.
index 42883b5..57d456a 100644 (file)
@@ -3983,45 +3983,6 @@ class Language {
                }
        }
 
-       /**
-        * Get the ordered list of fallback languages, ending with the fallback
-        * language chain for the site language.
-        *
-        * @since 1.21
-        * @param $code string Language code
-        * @return array
-        */
-       public static function getFallbacksIncludingSiteLanguage( $code ) {
-               global $wgLanguageCode;
-
-               // Usually, we will only store a tiny number of fallback chains, so we
-               // keep them in static memory.
-               static $fallbackLanguageCache = array();
-               $cacheKey = "{$code}-{$wgLanguageCode}";
-
-               if ( !array_key_exists( $cacheKey, $fallbackLanguageCache ) ) {
-                       $fallbacks = self::getFallbacksFor( $code );
-
-                       // Take the final 'en' off of the array before splicing
-                       if ( end( $fallbacks ) === 'en' ) {
-                               array_pop( $fallbacks );
-                       }
-                       // Append the site's fallback chain
-                       $siteFallbacks = self::getFallbacksFor( $wgLanguageCode );
-
-                       // Eliminate any languages already included in the chain
-                       $siteFallbacks = array_intersect( array_diff( $siteFallbacks, $fallbacks ), $siteFallbacks );
-                       if ( $siteFallbacks ) {
-                               $fallbacks = array_merge( $fallbacks, $siteFallbacks );
-                       }
-                       if ( end( $fallbacks ) !== 'en' ) {
-                               $fallbacks[] = 'en';
-                       }
-                       $fallbackLanguageCache[$cacheKey] = $fallbacks;
-               }
-               return $fallbackLanguageCache[$cacheKey];
-       }
-
        /**
         * Get all messages for a given language
         * WARNING: this may take a long time. If you just need all message *keys*
index 43afe65..e36c085 100644 (file)
@@ -941,7 +941,7 @@ class LanguageConverter {
                $parsed[$key] = true;
 
                if ( $subpage === '' ) {
-                       $txt = MessageCache::singleton()->get( 'conversiontable', true, $code );
+                       $txt = MessageCache::singleton()->getMsgFromNamespace( $key, $code );
                } else {
                        $txt = false;
                        $title = Title::makeTitleSafe( NS_MEDIAWIKI, $key );
index fe5cdf8..14a5641 100644 (file)
@@ -168,7 +168,7 @@ class IuConverter extends LanguageConverter {
         */
        function autoConvert( $text, $toVariant = false ) {
                global $wgTitle;
-               if ( is_object( $wgTitle ) && $wgTitle->getNameSpace() == NS_FILE ) {
+               if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
                        $imagename = $wgTitle->getNsText();
                        if ( preg_match( "/^$imagename:/", $text ) ) return $text;
                }
index f6bbae7..d8a7e2c 100644 (file)
@@ -280,7 +280,7 @@ class KkConverter extends LanguageConverter {
         */
        function autoConvert( $text, $toVariant = false ) {
                global $wgTitle;
-               if ( is_object( $wgTitle ) && $wgTitle->getNameSpace() == NS_FILE ) {
+               if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
                        $imagename = $wgTitle->getNsText();
                        if ( preg_match( "/^$imagename:/", $text ) ) return $text;
                }
index 56a52cc..ef1b065 100644 (file)
@@ -188,7 +188,7 @@ class KuConverter extends LanguageConverter {
         */
        function autoConvert( $text, $toVariant = false ) {
                global $wgTitle;
-               if ( is_object( $wgTitle ) && $wgTitle->getNameSpace() == NS_FILE ) {
+               if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
                        $imagename = $wgTitle->getNsText();
                        if ( preg_match( "/^$imagename:/", $text ) ) return $text;
                }
index 5ddcfde..001ad08 100644 (file)
@@ -147,7 +147,7 @@ class ShiConverter extends LanguageConverter {
         */
        function autoConvert( $text, $toVariant = false ) {
                global $wgTitle;
-               if ( is_object( $wgTitle ) && $wgTitle->getNameSpace() == NS_FILE ) {
+               if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
                        $imagename = $wgTitle->getNsText();
                        if ( preg_match( "/^$imagename:/", $text ) ) return $text;
                }
index 55aec32..b29cfb8 100644 (file)
@@ -139,7 +139,7 @@ class SrConverter extends LanguageConverter {
         */
        function autoConvert( $text, $toVariant = false ) {
                global $wgTitle;
-               if ( is_object( $wgTitle ) && $wgTitle->getNameSpace() == NS_FILE ) {
+               if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
                        $imagename = $wgTitle->getNsText();
                        if ( preg_match( "/^$imagename:/", $text ) ) return $text;
                }
index 987385e..89eb33c 100644 (file)
@@ -432,6 +432,7 @@ $1',
 ܡܨܬ ܐܦܠܚܬ {{SITENAME}} ܐܝܟ ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ ܐܘ ܡܨܬ ܕ<span class='plainlinks'>[$1 ܬܥܘܠ]</span> ܒܚܘܫܒܢܐ ܥܝܢܗ ܐܘ ܐܝܟ ܡܦܠܚܢܐ ܐܚܪܢܐ.
 
 ܚܕ ܟܡܐ ܡܢ ܦܐܬܬ̈ܐ ܡܬܚܙܝܢ ܐܝܟ ܕܗܘ ܐܢܬ ܥܠܝܠܐ ܐܝܬܝܟ ܥܕܡܐ ܕܐܣܦܩܬ ܠܦܐܬܬ̈ܐ ܠܒܝܟܬ̈ܐ ܕܡܦܐܬܢܐ ܕܝܠܟ.",
+'welcomeuser' => 'ܒܫܝܢܐ $1!',
 'yourname' => 'ܫܡܐ ܕܡܦܠܚܢܐ:',
 'yourpassword' => 'ܡܠܬܐ ܕܥܠܠܐ:',
 'yourpasswordagain' => 'ܟܬܘܒ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܬܐ ܐܚܪܬܐ:',
@@ -873,6 +874,7 @@ $1',
 'recentchanges-label-newpage' => 'ܫܘܚܠܦܐ ܗܢܐ ܐܬܬܣܝܡ ܦܐܬܐ ܚܕܬܐ',
 'recentchanges-label-minor' => 'ܗܢܘ ܫܘܚܠܦܐ ܙܥܘܪܐ',
 'recentchanges-label-bot' => 'ܒܘܬ (bot) ܥܒܕ ܗܢܐ ܫܘܚܠܦܐ',
+'recentchanges-label-unpatrolled' => 'ܫܘܚܠܦܐ ܗܢܐ ܠܐ ܗܘ ܟܪܝܟܐ ܠܗܫܐ',
 'rcnotefrom' => "ܠܬܚܬ ܫܘܚܠܦ̈ܐ ܕܡܢ '''$2''' (ܥܕ '''$1''' ܡܬܚܙܝܢ̈ܐ).",
 'rclistfrom' => 'ܚܘܝ ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܡܢ $1',
 'rcshowhideminor' => '$1 ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ',
@@ -889,6 +891,8 @@ $1',
 'minoreditletter' => 'ܙ',
 'newpageletter' => 'ܚ',
 'boteditletter' => 'ܒ',
+'rc_categories_any' => 'ܐܝܢܐ ܕܗܘ',
+'rc-change-size-new' => '$1 {{PLURAL:$1|ܒܐܝܛ|ܒܐܝܛ̈ܐ}} ܒܬܪ ܫܘܚܠܦܐ',
 'newsectionsummary' => '/* $1 */ ܡܢܬܐ ܚܕܬܐ',
 'rc-enhanced-expand' => 'ܚܘܝ ܐܪ̈ܝܟܬܐ (ܒܥܐ ܠܟ JavaScript)',
 'rc-enhanced-hide' => 'ܛܫܝ ܐܪ̈ܝܟܬܐ',
@@ -951,6 +955,8 @@ $1',
 'upload_source_file' => ' (ܠܦܦܐ ܥܠ ܚܫܘܒܬܐ ܕܝܠܟ)',
 
 # Special:ListFiles
+'listfiles-summary' => 'ܦܐܬܐ ܕܝܠܢܝܬܐ ܗܕܐ ܬܓܠܚ ܟܠ ܠܦܦ̈ܐ ܡܣܩ̈ܐ.
+ܐܡܬܝ ܕܬܨܦܐ ܒܝܕ ܡܦܠܚܢܐ ܬܓܠܚ ܨܚܚܐ ܐܚܪܝܐ ܒܠܚܘܕ ܕܠܦܦ̈ܐ ܡܣܩ̈ܐ ܒܝܕ ܗܢܐ ܡܦܠܚܢܐ.',
 'listfiles_search_for' => 'ܒܨܝ ܥܠ ܫܡܐ ܕܡܝܕܝܐ:',
 'imgfile' => 'ܠܦܦܐ',
 'listfiles' => 'ܡܟܬܒܘܬܐ ܕܠܦܦ̈ܐ',
@@ -1039,6 +1045,11 @@ $1',
 'disambiguations' => 'ܦܐܬܬ̈ܐ ܐܣܝܪ̈ܬܐ ܒܦܐܬܬ̈ܐ ܕܬܘܚܡܐ ܐܚܪܢܐ',
 'disambiguationspage' => 'Template:ܬܘܚܡܐ ܐܚܪܢܐ',
 
+'pageswithprop' => 'ܦܐܬܬ̈ܐ ܥܡ ܕܝܠܝܬܐ ܕܦܐܬܐ',
+'pageswithprop-legend' => 'ܦܐܬܬ̈ܐ ܥܡ ܕܝܠܝܬܐ ܕܦܐܬܐ',
+'pageswithprop-prop' => 'ܫܡܐ ܕܕܝܠܝܬܐ',
+'pageswithprop-submit' => 'ܙܠ',
+
 'doubleredirects' => 'ܨܘܝܒ̈ܐ ܥܦܝܦ̈ܐ',
 'double-redirect-fixed-move' => '[[$1]] ܐܫܬܢܝܬ.
 ܗܫܐ ܐܝܬܝܗܝ  ܨܘܝܒܐ ܠ [[$2]].',
@@ -1168,14 +1179,6 @@ $1',
 'listusers-noresult' => 'ܠܐ ܐܫܬܟܚ ܡܦܠܚܢܐ ܚܕ.',
 'listusers-blocked' => '(ܚܪܝܡܐ)',
 
-# Special:ActiveUsers
-'activeusers' => 'ܡܟܬܒܘܬܐ ܕܗܕ̈ܡܐ ܙܪ̄ܝܙܐ',
-'activeusers-count' => '$1 {{PLURAL:$1|ܥܒܕܐ|ܥܒܕ̈ܐ}} ܒ {{PLURAL:$3|ܝܘܡܐ ܐܚܪܝܐ|$3 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ}}',
-'activeusers-from' => 'ܚܘܝ ܡܦܠܚܢ̈ܐ ܕܫܪܐ ܥܡ:',
-'activeusers-hidebots' => 'ܛܫܝ ܒܘܬ̈ܐ (bots)',
-'activeusers-hidesysops' => 'ܛܫܝ ܡܕܒܪ̈ܢܐ',
-'activeusers-noresult' => 'ܠܐ ܐܫܬܟܚ ܡܦܠܚܢ̈ܐ ܐܢܫ̈ܝܢ.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ܙܕ̈ܩܐ ܕܟܢܘܫܬܐ ܕܡܦܠܚܢ̈ܐ',
 'listgrouprights-group' => 'ܟܢܘܫܬܐ',
@@ -1426,6 +1429,9 @@ $1',
 'contribslink' => 'ܫܘܬܦܘ̈ܬܐ',
 'blocklogpage' => 'ܣܓܠܐ ܕܚܪܡܐ',
 'blocklogentry' => 'ܚܪܡ [[$1]] ܠܡܬܚܐ ܕ $2 $3',
+'blocklogtext' => 'ܗܢܘ ܣܓܠܐ ܕܥܡܠܝܬ̈ܐ ܕܚܪܡܐ ܘܫܩܠ ܚܪܡܐ.
+ܡܘܢܥ̈ܐ ܕܐܝ ܦܝ (IP) ܚܪ̈ܝܡܐ ܝܬܐܝܬ ܠܐ ܓܠܝܚܝܢ ܐܢܘܢ.
+ܚܙܝ [[Special:BlockList|ܡܟܬܒܘܬܐ ܕܚܪܡܐ ܕܐܝ ܦܝ (IP)]]ܠܚܙܝܐ ܕܥܡܠܝܬ̈ܐ ܕܚܪܡܐ ܬܘܦܥܠ̈ܐ ܗܫܐܝܬ.',
 'unblocklogentry' => 'ܫܩܠ ܚܪܡܐ ܡܢ $1',
 'block-log-flags-anononly' => 'ܡܦܠܚܢ̈ܐ ܠܐ ܝܕ̈ܝܥܐ ܒܠܚܘܕ',
 'block-log-flags-nocreate' => 'ܒܪܝܬܐ ܕܚܘ̈ܫܒܢܐ ܠܐ ܐܝܬܝܗ ܡܬܩܒܠܢܐ',
@@ -1796,7 +1802,11 @@ $1',
 'tag-filter' => 'ܡܨܦܝܢܝܬܐ ܕ[[Special:Tags|ܪܘܫܡܐ]]:',
 'tag-filter-submit' => 'ܡܨܦܝܢܝܬܐ',
 'tags-title' => 'ܪ̈ܘܫܡܐ',
+'tags-intro' => 'ܦܐܬܐ ܗܕܐ ܬܓܠܚ ܪ̈ܘܫܡܐ ܕܬܚܪܙܬܐ ܪܒܬ ܫܘܕܥ ܫܘܚܠܦܐ ܒܗ، ܘܣܘܟܠܝܗܝܢ.',
 'tags-tag' => 'ܫܡܐ ܕܪܘܫܡܐ',
+'tags-display-header' => 'ܡܬܓܠܝܢܘܬܐ ܒܡܟܬܒܘܬ̈ܐ ܕܫܘܚܠܦܐ',
+'tags-description-header' => 'ܫܘܡܗܐ ܓܡܝܪܐ ܕܣܘܟܠܐ',
+'tags-hitcount-header' => 'ܫܘܚܠܦ̈ܐ ܪ̈ܫܝܡܐ',
 'tags-edit' => 'ܫܚܠܦ',
 'tags-hitcount' => '$1 {{PLURAL:$1|ܫܘܚܠܦܐ|ܫܘܚܠܦ̈ܐ}}',
 
@@ -1815,17 +1825,17 @@ $1',
 'htmlform-selectorother-other' => 'ܐܚܪܢܐ',
 
 # New logging system
-'logentry-delete-delete' => '$1 ܫܦ ܦܐܬܐ ܕ $3',
-'logentry-move-move' => '$1 ܫܢܐ ܦܐܬܐ ܕ $3 ܠ $4',
-'logentry-move-move-noredirect' => '$1 ܫܢܐ ܦܐܬܐ ܕ $3 ܠ $4 ܕܠܐ ܫܒܩܐ ܦܐܬܐ ܕܨܘܝܒܐ',
-'logentry-move-move_redir' => '$1 ܫܢܐ ܦܐܬܐ ܕ $3 ܠ $4 ܕܐܝܬܘܗܝ ܦܐܬܐ ܕܨܘܝܒܐ',
-'logentry-move-move_redir-noredirect' => '$1 ܫܢܐ ܦܐܬܐ ܕ $3 ܠ $4 ܕܐܝܬܘܗܝ ܦܐܬܐ ܕܨܘܝܒܐ ܘܕܠܐ ܫܒܩܐ ܦܐܬܐ ܕܨܘܝܒܐ',
-'logentry-patrol-patrol' => '$1 ܫܘܕܥ ܬܢܝܬܐ $4 ܕܦܐܬܐ $3 ܟܪܝܟܬܐ',
-'logentry-patrol-patrol-auto' => '$1 ܝܬܐܝܬ ܫܘܕܥ ܬܢܝܬܐ $4 ܕܦܐܬܐ $3 ܟܪܝܟܬܐ',
-'logentry-newusers-newusers' => 'ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $1 ܐܬܬܟܝܢ',
-'logentry-newusers-create' => 'ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $1 ܐܬܬܟܝܢ',
-'logentry-newusers-create2' => 'ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $3 ܐܬܬܟܝܢ ܒܝܕ $1',
-'logentry-newusers-autocreate' => 'ܚܘܫܒܢܐ $1 ܐܬܒܪܝ ܝܬܐܝܬ',
+'logentry-delete-delete' => '$1 {{GENDER:$2|ܫܦ}} ܦܐܬܐ ܕ $3',
+'logentry-move-move' => '$1 {{GENDER:$2|ܫܢܐ}} ܦܐܬܐ ܕ $3 ܠ $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|ܫܢܐ}} ܦܐܬܐ ܕ $3 ܠ $4 ܘܠܐ ܫܒܩ ܦܐܬܐ ܕܨܘܝܒܐ',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|ܫܢܐ}} ܦܐܬܐ ܕ $3 ܠ $4 ܕܐܝܬܘܗܝ ܦܐܬܐ ܕܨܘܝܒܐ',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|ܫܢܐ}} ܦܐܬܐ ܕ $3 ܠ $4 ܕܐܝܬܘܗܝ ܦܐܬܐ ܕܨܘܝܒܐ ܘܠܐ ܫܒܩ ܦܐܬܐ ܕܨܘܝܒܐ',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|ܫܘܕܥ}} ܬܢܝܬܐ $4 ܕܦܐܬܐ $3 ܟܪܝܟܬܐ',
+'logentry-patrol-patrol-auto' => '$1 ܝܬܐܝܬ {{GENDER:$2|ܫܘܕܥ}} ܬܢܝܬܐ $4 ܕܦܐܬܐ $3 ܟܪܝܟܬܐ',
+'logentry-newusers-newusers' => 'ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $1 {{GENDER:$2|ܐܬܬܟܝܢ}}',
+'logentry-newusers-create' => 'ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $1 {{GENDER:$2|ܐܬܬܟܝܢ}}',
+'logentry-newusers-create2' => 'ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $3 {{GENDER:$2|ܐܬܬܟܝܢ}} ܒܝܕ $1',
+'logentry-newusers-autocreate' => 'ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $1 {{GENDER:$2|ܐܬܬܣܝܡ}} ܝܬܐܝܬ',
 'rightsnone' => '(ܠܐ ܡܕܡ)',
 
 # Feedback
index f66fa66..d32ee09 100644 (file)
@@ -2038,15 +2038,6 @@ Necesita polo menos un dominiu de primer nivel, como "*.org".<br />
 'listusers-noresult' => "Nun s'atoparon usuarios.",
 'listusers-blocked' => '(bloquiau)',
 
-# Special:ActiveUsers
-'activeusers' => "Llista d'usuarios activos",
-'activeusers-intro' => "Esta ye una llista d'usuarios que tuvieron alguna mena d'actividá hai menos de $1 {{PLURAL:$1|día|díes}}.",
-'activeusers-count' => '$1 {{PLURAL:$1|edición|ediciones}} {{PLURAL:$3|nel caberu día|nos caberos $3 díes}}',
-'activeusers-from' => 'Amosar usuarios principiando dende:',
-'activeusers-hidebots' => 'Anubrir bots',
-'activeusers-hidesysops' => 'Anubrir alministradores',
-'activeusers-noresult' => "Nun s'alcontraron usuarios.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Drechos de los grupos d'usuariu",
 'listgrouprights-summary' => "La siguiente ye una llista de grupos d'usuariu definíos nesta wiki, colos sos drechos d'accesu asociaos.
index 4a5a91d..06c0044 100644 (file)
@@ -567,8 +567,8 @@ $2',
 'blocked-mailpassword' => 'سیزین آی‌پی آدرسینیز دَییشیک وئرمه‌یه باغلانیب و سوءاستفاده قاباغی آلماق اوچون، رمزی یئنی‌دن اله گتیرمک ایمکانینا ایجازه‌نیز یوخدور.',
 'eauthentsent' => 'سیزین سئچیلمیش ایمیل آدرسینه، دوغرولاماق اوچون بیر ایمیل گؤندریلدی.
 هر یئنی بیر ایمیل گؤندرمک‌دن اؤنجه، بو حسابین دوغرودان سیزین اولدوغونو گؤسترمک اوچون، او ایمیل‌ده‌کی ایشلری گؤرمه‌لیسینیز.',
-'throttled-mailpassword' => 'سÙ\88Ù\86 {{PLURAL:$1|ساعات|$1 Ø³Ø§Ø¹Ø§Øª}}â\80\8cدا Ø³Û\8cزÙ\87 Ø¨Û\8cر Ø±Ù\85ز Û\8cادا Ø³Ø§Ù\84Ù\85ا گؤندریلیب‌دیر.
-سÙ\88ءاستÙ\81ادÙ\87 Ù\82اباغÛ\8cÙ\86 Ø¢Ù\84Ù\85اÙ\82 Ø§Ù\88Ú\86Ù\88Ù\86Ø\8c Ù\87ر {{PLURAL:$1|ساعات|$1 Ø³Ø§Ø¹Ø§Øª}}â\80\8cدا Û\8cاÙ\84Ù\86Û\8cز Ø¨Û\8cر Ø±Ù\85ز Û\8cادا Ø³Ø§Ù\84Ù\85ا گؤندریلر.',
+'throttled-mailpassword' => 'سÙ\88Ù\86 {{PLURAL:$1|ساعات|$1 Ø³Ø§Ø¹Ø§Øª}}â\80\8cدا Ø³Û\8cزÙ\87 Ø¨Û\8cر Ø±Ù\85ز Û\8cئÙ\86Û\8cÙ\84Ù\87â\80\8cÙ\85Ù\87 Ø§Û\8cÙ\85Û\8cÙ\84Û\8c گؤندریلیب‌دیر.
+سÙ\88ءاستÙ\81ادÙ\87 Ù\82اباغÛ\8cÙ\86 Ø¢Ù\84Ù\85اÙ\82 Ø§Ù\88Ú\86Ù\88Ù\86Ø\8c Ù\87ر {{PLURAL:$1|ساعات|$1 Ø³Ø§Ø¹Ø§Øª}}â\80\8cدا Û\8cاÙ\84Ù\86Û\8cز Ø¨Û\8cر Ø±Ù\85ز Û\8cئÙ\86Û\8cÙ\84Ù\87â\80\8cÙ\85Ù\87 Ø§Û\8cÙ\85Û\8cÙ\84Û\8c گؤندریلر.',
 'mailerror' => 'ایمیل گؤندرمه خطاسی: $1',
 'acct_creation_throttle_hit' => 'سیزین آی‌پی آدرسینیزی ایشلدن زیارتچیلر، سون گون‌ده {{PLURAL:$1|بیر حساب|$1 حساب}} یارادیبلار کی ان چون ایجازه وئریلن‌دیر.
 اونا باخاراق، بو آی‌پی آدرسی ایشلدن زیارتچیلر، بو زامان‌دا، داها آرتیق حساب یارادابیلمزلر.',
@@ -619,7 +619,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'رمزی یئنی‌له',
-'passwordreset-text' => 'حسابÛ\8cÙ\86Û\8cزا Ø¨Û\8cÙ\84Ú¯Û\8cÙ\84رÛ\8cÙ\86Ù\87 Ú¯Ø¤Ø±Ù\87 Û\8cادا Ø³Ø§Ù\84Ù\85ا Ø§Û\8cÙ\85Û\8cÙ\84Û\8c Ø¢Ù\84Ù\85اÙ\82 Ø§Ù\88Ú\86Ù\88Ù\86Ø\8c بو فورمو دولدورون.',
+'passwordreset-text' => 'رÙ\85زÛ\8cÙ\86Û\8cزÛ\8c Û\8cئÙ\86Û\8cÙ\84Ù\87â\80\8cÙ\85Ú© Ø§Ù\88Ú\86Ù\88Ù\86 بو فورمو دولدورون.',
 'passwordreset-legend' => 'رمزی یئنی‌له',
 'passwordreset-disabled' => 'بو ویکی‌ده رمزی یئنی‌له‌مک باغلانیب‌دیر.',
 'passwordreset-pretext' => '{{PLURAL:$1|آشاغیداکی وئری پارچالارینین بیرینی وئرین}}',
@@ -629,13 +629,13 @@ $2',
 'passwordreset-capture-help' => 'بو قوطویا علامت قویساز، (گئچیجی رمزی اولان) ایمیل ایستیفاده‌چی‌یه گؤندریلن کیمی بوردا سیزه گؤستریله‌جکدیر.',
 'passwordreset-email' => 'ایمیل آدرسی:',
 'passwordreset-emailtitle' => '{{SITENAME}}-ده حساب بیلگیلری',
-'passwordreset-emailtext-ip' => 'بیر کس (احتیمالاً سیز، $1 آی‌پی آدرسی‌له)، {{SITENAME}} ($4) سایتینداکی حسابینیز اوچون یادا سالما بیلگیلری ایسته‌ییب‌دیر. آشاغیداکی ایستیفاده‌چی {{PLURAL:$3|حسابی|حسابلاری}} بو ایمیل ایله ایلگی‌لی‌دیرلر:
+'passwordreset-emailtext-ip' => 'بیر کس (احتیمالاً سیز، $1 آی‌پی آدرسی‌له)، {{SITENAME}} ($4) سایتینداکی حسابینیز اوچون رمزی یئنیله‌مک ایسته‌ییب‌دیر. آشاغیداکی ایستیفاده‌چی {{PLURAL:$3|حسابی|حسابلاری}} بو ایمیل ایله ایلگی‌لی‌دیرلر:
 
 $2
 
 بو گئچیجی {{PLURAL:$3|رمز|رمزلر}}، {{PLURAL:$5|بیر گون|$5 گون}}‌ده {{PLURAL:$3|واختی|واختلاری}} قورتاراجاق‌دیر.
 سیز گرک ایندی سایتا گیریب و یئنی بیر رمز سئچه‌سینیز. باشقا آدام بو ایستَگی وئرمیش‌سه، یوخسا سیز اسکی رمزینیزی یادا گتیرمیشسینیزسه، و داها اونو چئویرمک ایسته‌میرسینیزسه، بو مئساژی سایماییب و اسکی رمزینیزی ایشلدمگه داوام ائده بیلرسینیز.',
-'passwordreset-emailtext-user' => '{{SITENAME}} سایتیندا، $1 ایستیفاده‌چی، سیزین اوردا ($4) حسابینیز بیلگیلری اوچون بیر یادا سالما ایستگی وئریب‌دیر. آشاغیداکی {{PLURAL:$3|ایستیفاده‌چی|ایستیفاده‌چیلر}} بو ایمیل ایله ایلگیلیدیرلر:
+'passwordreset-emailtext-user' => '{{SITENAME}} سایتیندا، $1 ایستیفاده‌چی، سیزین اوردا ($4) حسابینیزین رمزینی یئنیله‌مک ایستگی وئریب‌دیر. آشاغیداکی {{PLURAL:$3|ایستیفاده‌چی|ایستیفاده‌چیلر}} بو ایمیل ایله ایلگیلیدیرلر:
 
 $2
 
@@ -643,9 +643,9 @@ $2
 سیز گرک ایندی گیریب و بیر یئنی رمز سئچه‌سینیز. باشقا آدام بو ایستَگی وئرمیش‌سه، یوخسا سیز اسکی رمزینیزی یادا گتیرمیشسینیزسه، و داها اونو چئویرمک ایسته‌میرسینیزسه، بو مئساژی سایماییب و اسکی رمزینیزی ایشلدمگه داوام ائده بیلرسینیز.',
 'passwordreset-emailelement' => 'ایستیفاده‌چی آدی: $1
 گئچیجی رمز: $2',
-'passwordreset-emailsent' => 'بیر یادا سالما ایمیلی گؤندریلیب‌دیر.',
-'passwordreset-emailsent-capture' => 'آشاغیدا گؤستریلن کیمی بیر یادا سالما ایمیلی گؤندریلیب‌دیر.',
-'passwordreset-emailerror-capture' => 'آشاغیدا گؤستریلن کیمی بیر یادا سالما ایمیل یارادیلیب‌دیر، اما ایستیفاده‌چی‌یه گؤندرمگی باشاریلی اولمادی: $1',
+'passwordreset-emailsent' => 'بیر رمز یئنیله‌مه ایمیلی گؤندریلیب‌دیر.',
+'passwordreset-emailsent-capture' => 'آشاغیدا گؤستریلن کیمی بیر رمز یئنیله‌مه ایمیلی گؤندریلیب‌دیر.',
+'passwordreset-emailerror-capture' => 'آشاغیدا گؤستریلن کیمی بیر رمز یئنیله‌مه ایمیلی یارادیلیب‌دیر، اما ایستیفاده‌چی‌یه گؤندرمگی باشاریلی اولمادی: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'ایمیل آدرسینی دَییشدیر',
@@ -2030,15 +2030,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'listusers-noresult' => 'هئچ ایستیفاده‌چی تاپیلمادی.',
 'listusers-blocked' => '(باغلانیب)',
 
-# Special:ActiveUsers
-'activeusers' => 'چالیشان ایستیفاده‌چیلرین لیستی',
-'activeusers-intro' => 'بوردا سون {{PLURAL:$1|بیر|$1}} گون‌ده بیر ایشلر گؤرن ایستیفاده‌چیلرین لیستی گؤستریلیر.',
-'activeusers-count' => 'سون {{PLURAL:$3|گون|$3 گون}}‌ده، {{PLURAL:$1|$1}} چالیشما',
-'activeusers-from' => 'بوندان باشلایاراق ایستیفاده‌چیلری گؤستر:',
-'activeusers-hidebots' => 'بوتلاری گیزلت',
-'activeusers-hidesysops' => 'ایداره‌چیلری گیزلت',
-'activeusers-noresult' => 'هئچ ایستیفاده‌چی تاپیلمادی.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ایستیفاده‌چی قروپ حاقلاری',
 'listgrouprights-summary' => 'آشاغیدا، بو ویکی‌ده تانیلان ایستیفاده‌چی گروپلاری و اونلارین حاقلاری گؤستریلیر.
@@ -2875,7 +2866,7 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'pageinfo-robot-noindex' => 'ایندِکسله‌نه بیلمز',
 'pageinfo-views' => 'گؤسترمه صحیفه‌سی',
 'pageinfo-watchers' => 'صحیفه‌نین تاماشا‌چی سایی',
-'pageinfo-few-watchers' => '$1-دن آز {{PLURAL:$1|ایزله‌ین|ایزله‌ین}}',
+'pageinfo-few-watchers' => '$1-دن آز {{PLURAL:$1|ایزله‌ین}}',
 'pageinfo-redirects-name' => 'بو صحیفه‌یه یول‌لاندیرمالار',
 'pageinfo-subpages-name' => 'بو صحیفه‌نین آلت‌صحیفه‌لری',
 'pageinfo-subpages-value' => '$1 ({{PLURAL:$2|بیر|$2}} یول‌لاندیرما؛ {{PLURAL:$3|بیر|$3}} قِیری-یول‌لاندیرما)',
@@ -3706,10 +3697,10 @@ $5
 'sqlite-no-fts' => '$1 بوتون یازی آختارماماق‌لا',
 
 # New logging system
-'logentry-delete-delete' => '$1، $3 صحیفه‌سینی سیلدی',
-'logentry-delete-restore' => '$1، $3 صحیفه‌سینی قایتاردی',
-'logentry-delete-event' => '$1، $3-ده $5 سیاهی اولایینین {{PLURAL:$5|گؤرونوشونو|گؤرونوشلرینی}} دَییشدیردی: $4',
-'logentry-delete-revision' => '$1، $3 صحیفه‌سینده $5 نوسخه‌نین {{PLURAL:گؤرونوشونو|گؤرونوشلرینی}} دَییشدیردی: $4',
+'logentry-delete-delete' => '$1، $3 صحیفه‌سینی {{GENDER:$2|سیلدی}}',
+'logentry-delete-restore' => '$1، $3 صحیفه‌سینی {{GENDER:$2|قایتاردی}}',
+'logentry-delete-event' => '$1، $3-ده $5 سیاهی اولایینین {{PLURAL:$5|گؤرونوشونو|گؤرونوشلرینی}} {{GENDER:$2|دَییشدیردی}}: $4',
+'logentry-delete-revision' => '$1، $3 صحیفه‌سینده $5 نوسخه‌نین {{PLURAL:گؤرونوشونو|گؤرونوشلرینی}} {{GENDER:$2|دَییشدیردی}}: $4',
 'logentry-delete-event-legacy' => '$1، $3-ده سیاهی اولایلارینین گؤرونوشلرینی دَییشدیردی',
 'logentry-delete-revision-legacy' => '$1، $3 صحیفه‌سینده نوسخه‌لرین گؤرونوشلرینی دَییشدیردی',
 'logentry-suppress-delete' => '$1، $3 صحیفه‌سینی یاتیردی',
index 85246aa..03952be 100644 (file)
@@ -11,6 +11,7 @@
  * @author Comp1089
  * @author Haqmar
  * @author Kaganer
+ * @author Matma Rex
  * @author Reedy
  * @author Roustammr
  * @author Sagan
@@ -958,7 +959,7 @@ $3 белдергән сәбәп: ''$2''",
 'currentrev' => 'Ағымдағы версия',
 'currentrev-asof' => '$1, ағымдағы версия',
 'revisionasof' => '$1 версияһы',
-'revision-info' => '<div id="viewingold-warning" style="background: #FFBDBD; border: 1px solid #BB7979; color: #000000; margin: 1em 0 .5em; padding: .5em 1em; vertical-align: middle; font-weight: bold; font-family: Palatino Linotype, Microsoft Sans Serif, Arial Unicode MS, Droid Sans; clear: both;">Хәҙер һеҙ был биттең иҫке, <span id="mw-revision-name">$2</span> тарафынан <span id="mw-revision-date">$1</span> һаҡланған версияһын ҡарайһығыҙ. Уның <span class="plainlinks">[{{fullurl:{{FULLPAGENAME}}}} ағымдағы версиянан] айырмаһы булыуы мөмкин</span>.</div>',
+'revision-info' => 'Версия: $1; $2',
 'previousrevision' => '← Алдағы',
 'nextrevision' => 'Киләһе →',
 'currentrevisionlink' => 'Ағымдағы версия',
@@ -2075,15 +2076,6 @@ $1',
 'listusers-noresult' => 'Ҡатнашыусылар табылманы',
 'listusers-blocked' => '(бикләнгән)',
 
-# Special:ActiveUsers
-'activeusers' => 'Әүҙем ҡатнашыусылар исемлеге',
-'activeusers-intro' => 'Был — һуңғы $1 {{PLURAL:$1|көн}} эсендә ниҙер башҡарған ҡатнашыусылар исемлеге.',
-'activeusers-count' => 'һуңғы $3 {{PLURAL:$3|көн}} эсендә $1 {{PLURAL:$1|үҙгәртеү}}',
-'activeusers-from' => 'Ошондай хәрефтәрҙән башланған ҡатнашыусыларҙы күрһәтергә:',
-'activeusers-hidebots' => 'Боттарҙы йәшерергә',
-'activeusers-hidesysops' => 'Хәкимдәрҙе йәшерергә',
-'activeusers-noresult' => 'Ҡатнашыусылар табылманы',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ҡатнашыусылар төркөмө хоҡуҡтары',
 'listgrouprights-summary' => 'Түбәндә был вики-проектта билдәләнгән ҡатнашыусы төркөмдәре килтерелгән һәм уларҙың хоҡуҡтары күрһәтелгән.
index b80f1b7..83811f9 100644 (file)
@@ -2195,15 +2195,6 @@ $1',
 'listusers-noresult' => 'Удзельнікі ня знойдзеныя.',
 'listusers-blocked' => '({{GENDER:$1|заблякаваны|заблякаваная}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Сьпіс актыўных удзельнікаў',
-'activeusers-intro' => 'Гэта сьпіс удзельнікаў, якія былі актыўнымі на працягу $1 {{PLURAL:$1|апошняга дня|апошніх дзён|апошніх дзён}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|дзеяньне|дзеяньні|дзеяньняў}} за $3 {{PLURAL:$3|апошні дзень|апошнія дні|апошніх дзён}}',
-'activeusers-from' => 'Паказваць ўдзельнікаў, пачынаючы з:',
-'activeusers-hidebots' => 'Схаваць робатаў',
-'activeusers-hidesysops' => 'Схаваць адміністратараў',
-'activeusers-noresult' => 'Удзельнікі ня знойдзеныя.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Правы групаў удзельнікаў',
 'listgrouprights-summary' => 'Ніжэй пададзены сьпіс групаў удзельнікаў {{GRAMMAR:родны|{{SITENAME}}}}, разам зь іх правамі.
index 7eb9d06..d0022ab 100644 (file)
@@ -2082,15 +2082,6 @@ $1',
 'listusers-noresult' => 'Няма намерени потребители.',
 'listusers-blocked' => '(блокиран)',
 
-# Special:ActiveUsers
-'activeusers' => 'Списък на активните потребители',
-'activeusers-intro' => 'Това е списък на потребителите, които са демонстрирали някаква активност през {{PLURAL:$1|последния|последните}} $1 {{PLURAL:$1|ден|дни}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|действие|действия}} за {{PLURAL:$3|последния ден|последните $3 дни}}',
-'activeusers-from' => 'Показване на потребителите, започвайки от:',
-'activeusers-hidebots' => 'Скриване на ботовете',
-'activeusers-hidesysops' => 'Скриване на администраторите',
-'activeusers-noresult' => 'Няма намерени потребители.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права по потребителски групи',
 'listgrouprights-summary' => 'По-долу на тази страница е показан списък на групите потребители в това уики с асоциираните им права за достъп. Допълнителна информация за отделните права може да бъде намерена [[{{MediaWiki:Listgrouprights-helppage}}|тук]].',
index 23ea245..fd4c4ea 100644 (file)
@@ -150,7 +150,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Sungkupakan babakan taawasi dalam parubahan tahanyar',
 'tog-newpageshidepatrolled' => 'Sungkupakan tungkaran nang diitihi matan daptar tungkaran hanyar',
 'tog-extendwatchlist' => 'Singkaiakan daptar itihan hagan manampaiakan samunyaan parubahan, kada nang hanyar haja.',
-'tog-usenewrc' => 'Purukakan panampaian parubahan tahanyar tingkat tinggi (parlu ada JavaScript)',
+'tog-usenewrc' => 'Purukakan panampaian paubahan pahanyarnya tingkat tinggi (parlu ada JavaScript)',
 'tog-numberheadings' => 'Bari numur judul utumatis',
 'tog-showtoolbar' => 'Tampaiakan bilah-pakakas babak (parlu ada JavaScript)',
 'tog-editondblclick' => 'Babak tutungkaran wan klik ganda (parlu ada JavaScript)',
@@ -2023,15 +2023,6 @@ Protokol nang didukung: <code>$1</code> (jangan tambahakan dalam panggagaian Pia
 'listusers-noresult' => 'Kadada pamuruk tatamu.',
 'listusers-blocked' => '(diblukir)',
 
-# Special:ActiveUsers
-'activeusers' => 'Daptar pamuruk aktip',
-'activeusers-intro' => 'Ngini adalah sabuah daptar papamuruk sabuah bantuk kagiatan dalam tauncit $1 {{PLURAL:$1|hari|hahari}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|babak|babakan}} dalam tauncit {{PLURAL:$3|hari|$3 hahari}}',
-'activeusers-from' => 'Manampaiakan papamuruk mulai matan:',
-'activeusers-hidebots' => 'Sungkupakan bot',
-'activeusers-hidesysops' => 'Sungkupakan pambakal',
-'activeusers-noresult' => 'Kadada papamuruk tatamu.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Galambang hak pamuruk',
 'listgrouprights-summary' => 'Barikut adalah sabuah daptar matan galambang pamuruk nang ada di wiki ngini, lawan hak ungkai masing-masing.
index 001d6bf..783c7c6 100644 (file)
@@ -889,7 +889,7 @@ $3-এর দেয়া কারণ হল ''$2''",
 'last' => 'পূর্ববর্তী',
 'page_first' => 'প্রথম',
 'page_last' => 'শেষ',
-'histlegend' => 'পার্থক্য (Diff) নির্বাচন: যে সংস্করণগুলো তুলনা করতে চান, সেগুলো চিহ্নিত করে এন্টার বা নিচের বোতামটি টিপুন।<br />
+'histlegend' => 'পার্থক্য নির্বাচন: যে সংস্করণগুলো তুলনা করতে চান, সেগুলো চিহ্নিত করে এন্টার বা নিচের বোতামটি টিপুন।<br />
 নির্দেশিকা: (বর্তমান) = বর্তমান সংস্করণের সাথে পার্থক্য, (পূর্ববর্তী) =  পূর্বের সংস্করণের সাথে পার্থক্য, অ = অনুল্লেখ্য সম্পাদনা।',
 'history-fieldset-title' => 'ব্রাউজ ইতিহাস',
 'history-show-deleted' => 'শুধুমাত্র অপসারণ',
@@ -1984,15 +1984,6 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'listusers-noresult' => 'কোন ব্যবহারকারী খুঁজে পাওয়া যায়নি।',
 'listusers-blocked' => '(ব্লককৃত)',
 
-# Special:ActiveUsers
-'activeusers' => 'সক্রিয় ব্যবহারকারী তালিকা',
-'activeusers-intro' => 'এটি ব্যবহারকারী তালিকা যাদের $1 {{PLURAL:$1|দিনে|দিনে}} যেকোন কর্মকান্ড রয়েছে।',
-'activeusers-count' => 'গত {{PLURAL:$3|দিনে|$3 দিনে}} সর্বমোট {{PLURAL:$1|কর্মকাণ্ডের|কর্মকাণ্ডের}} সংখ্যা $1',
-'activeusers-from' => 'ব্যবহারকারী দেখাও যাদের নাম এই অক্ষর দিয়ে শুরু:',
-'activeusers-hidebots' => 'বট লুকাও',
-'activeusers-hidesysops' => 'প্রশাসক লুকাও',
-'activeusers-noresult' => 'কোনো ব্যবহারকারী পাওয়া যায়নি।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'দলগত ব্যবহারকারী অধিকার',
 'listgrouprights-summary' => 'এই উইকির ব্যবহারকারীদের একটি গ্রুপগুলোর তালিকা দেখানো হচ্ছে, সাথে গ্রুপের কার্যপরিধিও উল্লেখ করা হয়েছে।
@@ -2834,6 +2825,7 @@ $1',
 
 # Skin names
 'skinname-standard' => 'ক্লাসিক',
+'skinname-vector' => 'ভেক্টর',
 
 # Patrolling
 'markaspatrolleddiff' => 'পরীক্ষিত বলে চিহ্নিত করুন',
@@ -3594,14 +3586,15 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 # New logging system
 'logentry-delete-delete' => '$1 কর্তৃক $3 পাতাটি অপসারিত হয়েছে',
 'logentry-delete-restore' => '$1 কর্তৃক $3 পাতাটি {{GENDER:$2|ফিরিয়ে আনা}} হয়েছে',
-'logentry-delete-event' => '$1 {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহর}} ভিজিবিলিটি পরিবর্তন করেছেন $3: $4',
-'logentry-delete-revision' => '$1 {{PLURAL:$5|একটি সংস্করণের|$5 সংস্করণসমূহর}} ভিজিবিলিটি পরিবর্তন করেছেন $3: $4',
-'logentry-delete-event-legacy' => '$1 $3টায় লগ ইভেন্টসমূহরে ভিজিবিলিটি পরিবর্তন করেছেন',
-'logentry-delete-revision-legacy' => '$1 $3টায় সংস্করণসমূহরে ভিজিবিলিটি পরিবর্তন করেছেন',
-'logentry-suppress-event' => '$1 গোপনে {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহর}} ভিজিবিলিটি পরিবর্তন করেছেন $3: $4',
-'logentry-suppress-revision' => '$1 গোপনে {{PLURAL:$5|একটি সংস্করণের|$5 সংস্করণসমূহর}} ভিজিবিলিটি পরিবর্তন করেছেন $3: $4',
-'logentry-suppress-event-legacy' => '$1 গোপনে $3টায় লগ ইভেন্টসমূহরে ভিজিবিলিটি পরিবর্তন করেছেন',
-'logentry-suppress-revision-legacy' => '$1 গোপনে $3টায় সংস্করণসমূহরে ভিজিবিলিটি পরিবর্তন করেছেন',
+'logentry-delete-event' => '$1 {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহের}} ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4',
+'logentry-delete-revision' => '$1 {{PLURAL:$5|একটি সংস্করণের|$5 সংস্করণসমূহের}} ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4',
+'logentry-delete-event-legacy' => '$1 $3টায় লগ ইভেন্টসমূহের ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন',
+'logentry-delete-revision-legacy' => '$1 $3টায় সংস্করণসমূহের ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন',
+'logentry-suppress-delete' => '$1 কর্তৃক $3 পাতাটি {{GENDER:$2|ফিরিয়ে আনা}} হয়েছে',
+'logentry-suppress-event' => '$1 গোপনে {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহের}} ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4',
+'logentry-suppress-revision' => '$1 গোপনে {{PLURAL:$5|একটি সংস্করণের|$5 সংস্করণসমূহের}} ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4',
+'logentry-suppress-event-legacy' => '$1 গোপনে $3টায় লগ ইভেন্টসমূহের ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন',
+'logentry-suppress-revision-legacy' => '$1 গোপনে $3টায় সংস্করণসমূহের ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন',
 'revdelete-content-hid' => 'বিষয়বস্তু লুকায়িত',
 'revdelete-summary-hid' => 'সম্পাদনা সারাংশ লুকায়িত',
 'revdelete-uname-hid' => 'ব্যবহারকারী নাম লুকায়িত',
@@ -3610,17 +3603,18 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'revdelete-uname-unhid' => 'ব্যবহারকারী নাম প্রদর্শিত',
 'revdelete-restricted' => 'এই সীমাবদ্ধতা প্রশাসকের ক্ষেত্রে প্রয়োগ করো',
 'revdelete-unrestricted' => 'এই সীমাবদ্ধতা প্রশাসকের ক্ষেত্রে তুলে নাও',
-'logentry-move-move' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে স্থানান্তর করেছেন',
-'logentry-move-move-noredirect' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন',
-'logentry-move-move_redir' => '$1 à¦¬à§\8dযবহারà¦\95ারà§\80 $3 à¦ªà¦¾à¦¤à¦¾à¦\9fিà¦\95à§\87 $4 à¦¶à¦¿à¦°à§\8bনামà§\87 à¦ªà§\81নিরà§\8dনিরà§\8dদà§\87শনার à¦\93পর à¦¦à¦¿à¦¯à¦¼à§\87 à¦¸à§\8dথানানà§\8dতর করেছেন',
-'logentry-move-move_redir-noredirect' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনর্নির্দেশনার ওপর দিয়ে কোনো পুনর্নির্দেশনা ছাড়াই স্থানান্তর করেছেন',
+'logentry-move-move' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে {{GENDER:$2|স্থানান্তর}} করেছেন',
+'logentry-move-move-noredirect' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন',
+'logentry-move-move_redir' => '$1 à¦¬à§\8dযবহারà¦\95ারà§\80 $3 à¦ªà¦¾à¦¤à¦¾à¦\9fিà¦\95à§\87 $4 à¦¶à¦¿à¦°à§\8bনামà§\87 à¦ªà§\81নিরà§\8dনিরà§\8dদà§\87শনার à¦®à¦¾à¦§à§\8dযমà§\87 {{GENDER:$2|সà§\8dথানানà§\8dতর}} করেছেন',
+'logentry-move-move_redir-noredirect' => '$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন',
 'logentry-patrol-patrol' => '$1 ব্যবহারকারী $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন',
-'logentry-patrol-patrol-auto' => '$1 ব্যবহারকারী স্বয়ংক্রিয়ভাবে $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {GENDER:$2|চিহ্নিত}} করেছেন',
-'logentry-newusers-newusers' => '$1 ব্যবহারকারী অ্যাকাউন্টটি {GENDER:$2|তৈরি করা}} হয়েছে',
-'logentry-newusers-create' => '$1 অ্যাকাউন্টটি তৈরী করা হয়েছে',
-'logentry-newusers-create2' => '$1 ব্যবহারকারী $3 নামের অ্যাকাউন্টটি তৈরী করেছেন',
-'logentry-newusers-autocreate' => '$1 অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে তৈরি হয়েছে',
-'logentry-rights-rights' => '$1 ব্যবহারকারী, $3 এর দলগত সদস্যপদ $4 থেকে $5 এ পরিবর্তন করেছেন',
+'logentry-patrol-patrol-auto' => '$1 ব্যবহারকারী স্বয়ংক্রিয়ভাবে $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন',
+'logentry-newusers-newusers' => '$1 ব্যবহারকারী অ্যাকাউন্টটি {{GENDER:$2|তৈরি করা}} হয়েছে',
+'logentry-newusers-create' => '$1 অ্যাকাউন্টটি {{GENDER:$2|তৈরী করা}} হয়েছে',
+'logentry-newusers-create2' => '$1 ব্যবহারকারী $3 নামের অ্যাকাউন্টটি {{GENDER:$2|তৈরী}} করেছেন',
+'logentry-newusers-byemail' => '$1, $3 ব্যবহারকরী অ্যাকাউন্টটি {{GENDER:$2|তৈরী করেছেন}} এবং পাসওয়ার্ড ইমেইলের মাধ্যমে পাঠানো হয়েছে',
+'logentry-newusers-autocreate' => '$1 অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে {{GENDER:$2|তৈরি}} হয়েছে',
+'logentry-rights-rights' => '$1 ব্যবহারকারী, $3 এর দলগত সদস্যপদ $4 থেকে $5 এ {{GENDER:$2|পরিবর্তন}} করেছেন',
 'logentry-rights-autopromote' => '$1 সয়ংক্রিয়ভাবে $4 থেকে $5 এ {{GENDER:$2|উন্নীত}} হয়েছে',
 'rightsnone' => '(কিছু নাই)',
 
index 020c424..b02e536 100644 (file)
@@ -1938,6 +1938,12 @@ Potser voleu modificar-ne la descripció en la seva [$2 pàgina de descripció].
 És possible que hagin d'enllaçar a una altra pàgina més apropiada.<br />
 Una pàgina es tracta com de desambiguació si utilitza una plantilla que està enllaçada a [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Pàgines amb una propietat de pàgina',
+'pageswithprop-legend' => 'Pàgines amb una propietat de pàgina',
+'pageswithprop-text' => 'Aquesta pàgina llista les pàgines que utilitzen una propietat de pàgina en particular.',
+'pageswithprop-prop' => 'Nom de la propietat:',
+'pageswithprop-submit' => 'Vés',
+
 'doubleredirects' => 'Redireccions dobles',
 'doubleredirectstext' => 'Aquesta pàgina llista les pàgines que redirigeixen a altres pàgines de redirecció.
 Cada fila conté enllaços a la primera i segona redireccions, així com el destí de la segona redirecció, què generalment és la pàgina destí "real", a la què hauria d\'apuntar la primera redirecció.
@@ -2100,15 +2106,6 @@ Es necessita com a mínim un domini de primer nivell, per exemple "*.org".<br />
 'listusers-noresult' => "No s'han trobat coincidències de noms d'usuaris. Si us plau, busqueu també amb variacions per majúscules i minúscules.",
 'listusers-blocked' => '({{GENDER:$1|blocat|blocada}})',
 
-# Special:ActiveUsers
-'activeusers' => "Llista d'usuaris actius",
-'activeusers-intro' => "Aquí hi ha una llista d'usuaris que han tingut algun tipus d'activitat en {{PLURAL:$1|el darrer dia|els darrers $1 dies}}.",
-'activeusers-count' => '$1 {{PLURAL:$1|modificació|modificacions}} en {{PLURAL:$3|el darrer dia|els $3 darrers dies}}',
-'activeusers-from' => 'Mostra els usuaris començant per:',
-'activeusers-hidebots' => 'Amaga bots',
-'activeusers-hidesysops' => 'Amaga administradors',
-'activeusers-noresult' => "No s'han trobat usuaris.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Drets dels grups d'usuaris",
 'listgrouprights-summary' => "A continuació hi ha una llista dels grups d'usuaris definits en aquest wiki, així com dels seus drets d'accés associats.
@@ -2635,30 +2632,31 @@ Recordeu-vos de [[Special:UnlockDB|treure el bloqueig]] quan hàgiu acabat el ma
 'move-page' => 'Mou $1',
 'move-page-legend' => 'Reanomena la pàgina',
 'movepagetext' => "Amb el formulari següent reanomenareu una pàgina, movent tot el seu historial al nou nom.
-El títol anterior es convertirà en una redirecció al títol que hàgiu creat.
-Podeu actualitzar automàticament els enllaços a l'antic títol de la pàgina.
-Si no ho feu, assegureu-vos de verificar que no deixeu redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].
-Serà de la vostra responsabilitat verificar que els enllaços seguirien apuntant cap a on se suposa que ho han de fer.
+El títol anterior es convertirà en una pàgina de redirecció al nou títol.
+Podeu actualitzar automàticament les redireccions que apuntin al títol original.
+Si no ho feu, assegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].
+Serà de la vostra responsabilitat verificar que els enllaços segueixin apuntant cap a on se suposa que ho han de fer.
 
-Tingueu en compte que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou, a no ser que sigui una pàgina buida o una ''redirecció'' sense historial.
+Tingueu en compte que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou, a no ser que sigui una redirecció sense més historial.
 Això significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.
 
-'''ADVERTÈNCIA!'''
-Açò pot ser un canvi dràstic i inesperat en una pàgina que sigui popular; assegureu-vos d'entendre les conseqüències que comporta abans de seguir endavant.",
-'movepagetext-noredirectfixer' => "El títol anterior es convertirà en un redireccionament al nou títol. 
-
-Assegureu-vos de verificar els redireccionaments [[Special:DoubleRedirects|doble]]s i els [[Special:BrokenRedirects|trencat]]s.
+'''Atenció!'''
+Açò pot ser un canvi dràstic i inesperat en una pàgina que sigui popular; 
+assegureu-vos d'entendre les conseqüències que comporta abans de seguir endavant.",
+'movepagetext-noredirectfixer' => "Amb el formulari següent podeu reanomenar una pàgina movent tot el seu historial al nom nou.
+El títol anterior es convertirà en una pàgina de redirecció al nou títol. 
+Assegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].
+És responsabilitat vostra assegurar que els enllaços continuen apuntant cap a on se suposa que han d'anar. 
 
-Sigueu responsable de fer que els enllaços continuen apuntant cap a on se suposa que han d'anar. 
-
-Tingueu en compte que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou proposat, tret del cas que la pàgina és buida o no n'hi ha un historial de redireccionaments. 
-
-Això significa que si reanomeneu per equivocació una pàgina amb el seu nom anterior no ho podreu fer, ja que no es pot sobreescriure una pàgina existent.
+Tingueu en compte que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou, a no ser que sigui una redirecció i no tingui més historial. 
+Això significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.
  
-'''Avís:''' Això pot ser un canvi dràstic i inesperat per una pàgina popular; si us plau, assegureu-vos que sabeu el que feu abans de continuar.",
-'movepagetalktext' => "La pàgina de discussió associada, si existeix, serà traslladada automàticament '''tret dels següents casos''':
-* Ja hi existeix una pàgina de discussió no buida amb el nou nom, o si
-* la opció de davall es troba desactivada
+'''Atenció!''' 
+Això pot ser un canvi dràstic i inesperat per una pàgina popular; 
+assegureu-vos que sabeu el que feu abans de continuar.",
+'movepagetalktext' => "La pàgina de discussió associada també serà traslladada automàticament '''a no ser que''':
+* Ja existeix una pàgina de discussió no buida amb el nou nom, o
+* Desactiveu la opció de més avall.
 
 En aquests casos, haureu de traslladar o fusionar la pàgina manualment si ho desitgeu.",
 'movearticle' => 'Reanomena la pàgina',
index c2980ab..792b159 100644 (file)
@@ -169,8 +169,8 @@ $messages = array(
 'tog-previewontop' => 'پێشبینین بەرلە چوارچێوەی دەستکاری نیشان بدە‌',
 'tog-previewonfirst' => 'لە یەکەم دەستکاری دا پێشبینین نیشان بدە',
 'tog-nocache' => 'کاشکردنی پەڕەکانی وێبگەڕەکە لەکاربخە',
-'tog-enotifwatchlistpages' => 'ئÛ\8cÙ\85Û\95Û\8cÙ\84Ù\85 Ø¨Û\86 Ø¨Ù\86Û\8eرÛ\95 Ú©Ø§ØªÛ\8eÚ© Ù¾Û\95Ú\95Û\95Û\8cÛ\95Ú© Û\8cاÙ\86 Ù¾Û\95Ú\95Ú¯Û\95Û\8cÛ\95Ú© Ù\84Û\95 Ù\84Û\8cستÛ\8c Ú\86اÙ\88دÛ\8eÚ\95Û\8cÛ\8cÛ\95کاÙ\86Ù\85دا Ú¯Û\86Ú\95درا',
-'tog-enotifusertalkpages' => 'ئÛ\95Ú¯Û\95ر Ù¾Û\95Ú\95Û\95Û\8c Ù\88تÙ\88Ù\88Û\8eÚ\98ەکەم گۆڕدرا ئیمەیلم بۆ بنێرە',
+'tog-enotifwatchlistpages' => 'ئÛ\95Ú¯Û\95ر Ù¾Û\95Ú\95Û\95 Û\8cاÙ\86 Ù¾Û\95Ú\95Ú¯Û\95Û\8cÛ\95Ú© Ù\84Û\95 Ù¾Û\8eرستÛ\8c Ú\86اÙ\88دÛ\8eÛ\8cÛ\8cÛ\8cÛ\95کاÙ\86Ù\85دا Ú¯Û\86Ú\95درا Ø¦Û\8cÙ\85Û\95Û\8cÙ\84Ù\85 Ø¨Û\86 Ø¨Ù\86Û\8eرÛ\95',
+'tog-enotifusertalkpages' => 'ئÛ\95Ú¯Û\95ر Ù¾Û\95Ú\95Û\95Û\8c Ù\84Û\8eدÙ\88اÙ\86ەکەم گۆڕدرا ئیمەیلم بۆ بنێرە',
 'tog-enotifminoredits' => 'بۆ گۆڕانکارییە بچووکەکانی پەڕەکان و پەڕگەکانیش ئیمەیلم بۆ بنێرە',
 'tog-enotifrevealaddr' => 'ئەدرەسی ئیمەیلەکەم لە ئیمەیلە ئاگاداریدەرەکان دا نیشان بدە',
 'tog-shownumberswatching' => 'ژمارەی بەکارھێنەرە چاودێڕەکان نیشان بدە',
@@ -181,14 +181,14 @@ $messages = array(
 'tog-showjumplinks' => 'ڕێگە بدە بۆ بەستەرەکانی «{{int:jumpto}}»',
 'tog-uselivepreview' => 'لە پێشبینینی زیندوو کەڵک وەرگرە (جاڤاسکریپت پێویستە) (تاقیکاری‌)',
 'tog-forceeditsummary' => 'ئەگەر پوختەی دەستکاریم نەنووسی پێم بڵێ',
-'tog-watchlisthideown' => 'دÛ\95ستکارÛ\8cÛ\8cÛ\95کاÙ\86Ù\85 Ø¨Ø´Ø§Ø±Û\95Ù\88Û\95 Ù\84Û\95 Ù\84Û\8cستی چاودێری',
+'tog-watchlisthideown' => 'دÛ\95ستکارÛ\8cÛ\8cÛ\95کاÙ\86Ù\85 Ø¨Ø´Ø§Ø±Û\95Ù\88Û\95 Ù\84Û\95 Ù¾Û\8eرستی چاودێری',
 'tog-watchlisthidebots' => 'دەستکارییەکانی بات بشارەوە لە لیستی چاودێری',
 'tog-watchlisthideminor' => 'دەستکارییە بچووکەکان لە لیستی چاودێریدا بشارەوە',
 'tog-watchlisthideliu' => 'دەستکارییەکانی ئەو بەکارهێنەرانەی لە ژوورەوەن بشارەوە لە لیستی چاودێری',
 'tog-watchlisthideanons' => 'دەستکارییەکانی بەکارهێنەرانی نەناسراو بشارەوە لە لیستی چاودێری',
 'tog-watchlisthidepatrolled' => 'لە لیستی چاودێریەکان، دەستکاریە پارێزراوەکان داشارە',
-'tog-ccmeonemails' => 'کۆپییەکانی ئەو ئیمەیلانە کە بۆ بەکارھێنەرانی ترم ناردووە بۆ خۆشم بنێرە',
-'tog-diffonly' => 'ناوەڕۆکی پەڕە لەژێر جیاوازییەکان نیشان مەدە',
+'tog-ccmeonemails' => 'کۆپییەک لەو ئیمەیلانە کە بۆ بەکارھێنەرانی تر دەنێرم بۆ خۆشم بنێرە',
+'tog-diffonly' => 'ناوەرۆکی پەڕە لە ژێرەوەی جیاوازییەکاندا نیشان مەدە',
 'tog-showhiddencats' => 'ھاوپۆلە شاراوەکان نیشان بدە',
 'tog-noconvertlink' => 'لەکارخستنی ئاڵوگۆڕی سەرناوی بەستەر',
 'tog-norollbackdiff' => 'لە دوای گەڕاندنەوە جیاوازی نیشان مەدە',
@@ -363,7 +363,7 @@ $messages = array(
 'categorypage' => 'په‌ڕه‌ی هاوپۆل نیشانبده‌',
 'viewtalkpage' => 'بینینی لێدوان',
 'otherlanguages' => 'بە زمانەکانی تر',
-'redirectedfrom' => '(ڕەوانەکراوە لە $1 ەوە)',
+'redirectedfrom' => '(ڕەوانەکراوە لە $1ەوە)',
 'redirectpagesub' => 'پەڕەی ڕەوانەکردن',
 'lastmodifiedat' => 'ئەم پەڕەیە دواجار لە $2ی $1 نوێ کراوەتەوە.',
 'viewcount' => 'ئەم پەڕەیە {{PLURAL:$1|یەکجار|$1 جار}} بینراوە.',
@@ -1003,7 +1003,7 @@ $3 هۆکاری "$2" خستوەتەڕوو',
 ئێستا دەتوانی بیبینی؛ وردەکاری سەبارەت بەوە لە [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی سڕینەوە]دا دەست دەکەوێت.",
 'rev-suppressed-diff-view' => "یەکێک لە پێداچوونەوەکانی ئەم جیاوازییە '''بەرگری لێ‌کراوە'''.
 ئێستا دەتوانی بیبینی؛ وردەکاری سەبارەت بەوە لە [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری]دا دەست دەکەوێت.",
-'rev-delundel' => 'نیشانبدە/بشارەوە',
+'rev-delundel' => 'نیشان بدە/بشارەوە',
 'rev-showdeleted' => 'نیشان بدە',
 'revisiondelete' => 'سڕینەوە/ھێنانەوەی پێداچوونەوەکان',
 'revdelete-nooldid-title' => 'مەبەستی پێداچوونەوەی نادیار',
@@ -1160,7 +1160,7 @@ $1",
 'search-interwiki-more' => '(زیاتر)',
 'search-relatedarticle' => 'پەیوەست',
 'mwsuggest-disable' => 'پێشنیارەکانی گەڕان ناچالاک بکە',
-'searcheverything-enable' => 'لە ھەموو بۆشایی‌‌ناوەکان دا بگەڕێ',
+'searcheverything-enable' => 'لە ھەموو بۆشاییی ناوەکاندا بگەڕێ',
 'searchrelated' => 'پەیوەست',
 'searchall' => 'ھەموو',
 'showingresults' => "لە خوارەوە {{PLURAL:$1|'''یەک''' ئەنجام|'''$1''' ئەنجام}} نیشان دراوە، بە دەست پێ کردن لە ژمارەی '''$2'''ەوە.",
@@ -1257,7 +1257,7 @@ $1",
 'allowemail' => 'ڕێگە بدە بە بەکارھێنەرانی تر کە ئیمەیلم بۆ بنێرن',
 'prefs-searchoptions' => 'گەڕان',
 'prefs-namespaces' => 'بۆشایی‌ناوەکان',
-'defaultns' => 'ئÛ\95Ú¯Û\95رÙ\86ا Ù\84Û\95Ù\85 Ø¨Û\86شاÛ\8cÛ\8câ\80\8cناوانەدا بگەڕێ:',
+'defaultns' => 'دÛ\95Ù\86ا Ù\84Û\95Ù\85 Ø¨Û\86شاÛ\8cÛ\8cÛ\8c ناوانەدا بگەڕێ:',
 'default' => 'بنچینەیی',
 'prefs-files' => 'پەڕگەکان',
 'prefs-custom-css' => 'CSSی دڵخواز',
@@ -1386,7 +1386,7 @@ $1",
 'right-browsearchive' => 'گەڕانی پەڕە سڕاوەکان',
 'right-undelete' => 'هاوەردنەوەی لاپەڕەیەک',
 'right-suppressrevision' => 'چاوپێداخشان و هاردنوەی ئەو لاپەڕانەی لە بەڕێوبەران داشاردرابوو.',
-'right-suppressionlog' => 'دیتنی لۆگە ئەهلیەکان',
+'right-suppressionlog' => 'دیتنی لۆگە نھێنییەکان',
 'right-block' => 'بەربەستنی بەکارھێنەرانی تر لە دەستکاری کردن',
 'right-blockemail' => 'بەرگری بەکارهێنەرێک بکە لە ناردنی ئیمەیل',
 'right-hideuser' => 'بەربەست‌کردنی ناوێکی بەکارهێنەری، داشاردنی لە بەرچاوی هەموان',
@@ -1412,7 +1412,7 @@ $1",
 'right-userrights-interwiki' => 'دەستکاری مافەکانی بەکارهێنەریی بەکارهێنەران لە ویکی‌یەکانی دیکە‌دا',
 'right-siteadmin' => 'داخستن و کردنەوەی بنکەدراو',
 'right-override-export-depth' => 'هەناردنی لاپەڕەکان کە لاپەڕەکانی بەستەر پێ‌دراو تا قووڵایی 5 لەخۆ بگرێت',
-'right-sendemail' => 'ئەمەیل بنێرە بۆ بەکارھێنەرانی تر',
+'right-sendemail' => 'ناردنی ئیمەیل بۆ بەکارھێنەرانی تر',
 
 # Special:Log/newusers
 'newuserlogpage' => 'لۆگی دروستکردنی بەکارھێنەر',
@@ -1459,7 +1459,7 @@ $1",
 'action-sendemail' => 'ناردنی ئیمەیلەکان',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|گۆڕانکاری|گۆڕانکاری}}',
+'nchanges' => '$1 {{PLURAL:$1|گۆڕانکاری}}',
 'recentchanges' => 'دوایین گۆڕانکارییەکان',
 'recentchanges-legend' => 'ھەڵبژاردەکانی دوایین گۆڕانکارییەکان',
 'recentchanges-summary' => 'دوایین گۆڕانکارییەکانیی ویکی لەم پەڕەیەدا ببینە.',
@@ -1476,7 +1476,7 @@ $1",
 'rcshowhideliu' => 'بەکارھێنەرە تۆمارکراوەکان $1',
 'rcshowhideanons' => 'بەکارھێنەرە نەناسراوەکان $1',
 'rcshowhidepatr' => 'گۆرانکارییە چاودێریکراوەکان $1',
-'rcshowhidemine' => 'دەستکارییەکانی من $1',
+'rcshowhidemine' => 'دەستکارییەکانم $1',
 'rclinks' => 'دوایین $1 گۆڕانکاریی $2 ڕۆژی ڕابردوو نیشان بدە<br />$3',
 'diff' => 'جیاوازی',
 'hist' => 'مێژوو',
@@ -1485,8 +1485,8 @@ $1",
 'minoreditletter' => 'ب',
 'newpageletter' => 'ن',
 'boteditletter' => '.بۆت',
-'number_of_watching_users_pageview' => '[$1 چاودێر لەسەر {{PLURAL:$1|بەکارهێنەر|بەکارهێنەر}}]',
-'rc_categories' => 'بەرتەسک‌کردنەوە بە هاوپۆلەکان (به "|" جودای بکەوە‌)',
+'number_of_watching_users_pageview' => '[$1 چاودێر لەسەر {{PLURAL:$1|بەکارھێنەر}}]',
+'rc_categories' => 'بەرتەسک‌کردنەوە بە هاوپۆلەکان (به «|» جیای بکەوە‌)',
 'rc_categories_any' => 'هەرکام',
 'rc-change-size-new' => '$1 {{PLURAL:$1|بایت}} پاش گۆڕانکاری',
 'newsectionsummary' => '/* $1 */ بەشی نوێ',
@@ -1533,8 +1533,8 @@ $1",
 'uploadlogpagetext' => 'لەخوارەوە لیستی دوایین بارکراوەکان دەبینی.
 بۆ ئەوەی چاوێکیان لێ بکەی، [[Special:NewFiles|گالەری پەڕگە نوێکان]] ببینە.',
 'filename' => 'ناوی پەڕگە',
-'filedesc' => 'پوختە',
-'fileuploadsummary' => 'پوختە:',
+'filedesc' => 'کورتە',
+'fileuploadsummary' => 'کورتە:',
 'filereuploadsummary' => 'گۆرانکارییەکانی پەڕگە:',
 'filestatus' => 'بارودۆخی مافی لەبەرگرتنەوە:',
 'filesource' => 'سەرچاوە:',
@@ -1962,15 +1962,6 @@ $1',
 'listusers-noresult' => 'ھیچ بەکارھێنەرێک نەدۆزرایەوە.',
 'listusers-blocked' => '(بەربەست کراوە)',
 
-# Special:ActiveUsers
-'activeusers' => 'پێرستی بەکارھێنەرە چالاکەکان',
-'activeusers-intro' => 'ئەمە لیستێکی ئەو بەکارھێنەرانەیە کە لە  $1 {{PLURAL:$1|ڕۆژ|ڕۆژ}}ی ڕابردوودا بە جۆرێک چالاکییەکیان ھەبووە.',
-'activeusers-count' => '$1 {{PLURAL:$1|کردەوە}} لە دوایین {{PLURAL:$3|ڕۆژ|$3 ڕۆژ}}دا',
-'activeusers-from' => 'نیشاندانی بەکارھێنەران بە دەستپێکردن لە:',
-'activeusers-hidebots' => 'بۆتەکان بشارەوە',
-'activeusers-hidesysops' => 'بەڕێوبەران بشارەوە',
-'activeusers-noresult' => 'هیچ بەکارهێنەرێک نەدۆزرایەوە',
-
 # Special:ListGroupRights
 'listgrouprights' => 'مافەکانی گرووپی بەکارھێنەر',
 'listgrouprights-summary' => 'ئەمە لیستێکە لە گرووپەکانی بەکارهێنەر لەسەر ئەم ویکی‌یە، دەگەڵ مافەکانی دەست‌پێ‌گەیشتنی هاوپەیوەندیان.
@@ -1980,7 +1971,7 @@ $1',
 'listgrouprights-group' => 'گرووپ',
 'listgrouprights-rights' => 'مافەکان',
 'listgrouprights-helppage' => 'Help:مافەکانی گرووپ',
-'listgrouprights-members' => '(Ù\84Û\8cستی ئەندامەکان)',
+'listgrouprights-members' => '(Ù¾Û\8eرستی ئەندامەکان)',
 'listgrouprights-addgroup' => 'زیادکردنی {{PLURAL:$2|گرووپ|گرووپ}}: $1',
 'listgrouprights-removegroup' => 'لابردنی {{PLURAL:$2|گرووپ|گرووپ}}: $1',
 'listgrouprights-addgroup-all' => 'زیادکردنی هەموو گرووپەکان',
@@ -2052,7 +2043,7 @@ $1',
 'watchlistcontains' => 'لیستی چاودێڕییەکانت $1 {{PLURAL:$1|پەڕە|پەڕە}}ی تێدایە.',
 'iteminvalidname' => "ھەڵە لەگەڵ بابەتی '$1'، ناوی نادروست...",
 'wlnote' => "خوارەوە {{PLURAL:$1|دوایین گۆڕانکارییە|دوایین '''$1''' گۆڕانکارییە}} لە دوایین {{PLURAL:$2|کاتژمێر|'''$2''' کاتژمێر}}دا ھەتا $4 لە $3.",
-'wlshowlast' => 'دوایین $1 کاتژمێر  $2 ڕۆژی $3 نیشانبدە',
+'wlshowlast' => 'دوایین $1 کاتژمێر $2 ڕۆژی $3 نیشان بدە',
 'watchlist-options' => 'ھەڵبژاردەکانی لیستی چاودێری',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -2151,10 +2142,10 @@ $UNWATCHURL
 
 دوایین دەستکاری ئەم لاپەڕە [[User:$3|$3]] کردوویە ([[User talk:$3|وتووێژ]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "پوختەی دەستکاری \"''\$1''\" بوو.",
-'revertpage' => 'گەڕاندنەوەی دەستکارییەکانی [[Special:Contributions/$2|$2]] ([[User talk:$2|لێدوان]]) بۆ دوایین دەستکاریی [[User:$1|$1]]',
+'revertpage' => 'گەڕاندنەوەی دەستکارییەکانی [[Special:Contributions/$2|$2]] ([[User talk:$2|لێدوان]]) بۆ دوایین پێداچوونەوەی [[User:$1|$1]]',
 'revertpage-nouser' => 'دەستکارییەکانی (ناوی بەکارھێنەر سڕاوەتەوە) بۆ دوایین پێداچوونەوەی [[User:$1|$1]] گەڕێنراوە.',
 'rollback-success' => 'دەستکارییەکانی $1 وەرگێرایەوە؛<br />
-گۆڕدرا بۆ دوایین دەستکاریی $2.',
+گۆڕدرا بۆ دوایین پێداچوونەوەی $2.',
 
 # Edit tokens
 'sessionfailure' => 'لەوەدەچی کێشەیەک لە دانیشتنی چوونەژوورەوەت (login session)دا ببێت.
@@ -2305,7 +2296,7 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'ھەنووکە ئەم ناونیشانەی IPیە بەربەست کراوە.
 دوایین بابەتی لۆگی بەربەستن لە ژێرەوە ھاتووە:',
 'sp-contributions-search' => 'گەڕان بۆ بەشدارییەکان',
-'sp-contributions-username' => 'ناونیشانی ئای‌پی یان ناوی‌ بەکارھێنەری:',
+'sp-contributions-username' => 'ناونیشانی ئایپی یان ناوی‌ بەکارھێنەر:',
 'sp-contributions-toponly' => 'تەنیا ئەو دەستکارییانە نیشانبدە کە دوایین پیاچوونەوەن',
 'sp-contributions-submit' => 'بگەڕێ',
 
@@ -2337,7 +2328,7 @@ $1',
 'blockiptext' => 'لەم فۆرمەی خوارەوە دەتوانی بۆ بەربەست‌کردنی دەست‌پێ‌گەیشتنی نووسین لە ناونیشانێکی ئای‌پی تایبەت یا ناوی بەکارهێنەریەک، کەڵک وەرگریت.
 ئەمە تەنها دەبێ بۆ بەرگری لە خراپکاری بەکاربێت و ڕێکەوتنی هەبێ دەگەڵ [[{{MediaWiki:Policy-url}}|سیاسەتەکان]].
 لە خوارەوە هۆکارێک بە ڕوونی بنووسە (بۆ نموونە بە وردی ئەو لاپەڕانە و خراپکاری تێدا کراوە وەک، وەک بەڵگە، بنووسە).',
-'ipadressorusername' => 'ناونیشانی ئای‌پی یان ناوی‌ بەکارهێنەری:',
+'ipadressorusername' => 'ناونیشانی ئایپی یان ناوی‌ بەکارھێنەر:',
 'ipbexpiry' => 'بەسەرچوون:',
 'ipbreason' => 'هۆکار:',
 'ipbreasonotherlist' => 'هۆکاری تر',
@@ -2585,9 +2576,9 @@ $1',
 تکایە سەردانی [//www.mediawiki.org/wiki/Localisation ناوچەیی‌کردنی میدیاویکی] و [//translatewiki.net translatewiki.net] بکە ئەگەر دەتەوێ لە ناوچەیی‌کردنی میدیاویکی بە گشتی بەشداری بکەیت.',
 'allmessagesnotsupportedDB' => "ئەم لاپەڕە ناتوانی بەکاربێت لەبەر ئەوەی '''\$wgUseDatabaseMessages''' لەکار خستراوە.",
 'allmessages-filter-legend' => 'پاڵێو',
-'allmessages-filter-unmodified' => 'چاکسازی نەکراو',
+'allmessages-filter-unmodified' => 'نەگۆڕدراو',
 'allmessages-filter-all' => 'هەموو',
-'allmessages-filter-modified' => 'Ú\86اکسازÛ\8câ\80\8cÚ©راو',
+'allmessages-filter-modified' => 'Ú¯Û\86Ú\95دراو',
 'allmessages-prefix' => 'پاڵێو بە پێشگر:',
 'allmessages-language' => 'زمان:',
 'allmessages-filter-submit' => 'بڕۆ',
@@ -2722,7 +2713,7 @@ $1',
 'tooltip-watchlistedit-raw-submit' => 'نوێکردنەوەی لیستی چاودێری',
 'tooltip-recreate' => 'درووست‌کردنەوەی لاپەڕە ئەگەرچی سڕاوەتەوە',
 'tooltip-upload' => 'دەستپێکردنی بارکردن',
-'tooltip-rollback' => '«گەڕاندنەوە» بە یەک کرتە گۆڕانکاریی/گۆڕانکارییەکانی ئەم پەڕەیە دەگەڕێنێتەوە بۆ دواین بەشداربوو',
+'tooltip-rollback' => '«گەڕاندنەوە» بە یەک کرتە گۆڕانکاریی/گۆڕانکارییەکانی ئەم پەڕەیە دەگەڕێنێتەوە بۆ دوایین بەشداربوو',
 'tooltip-undo' => '«پووچەڵکردنەوە» ئەم گۆڕانکارییە دەگەڕێنێتەوە و فۆرمی دەستکاریکردن لە شێوەی پێشبینیندا دەکاتەوە. بەم جۆرە دەکرێ ھۆکارێک لە کورتەی دەستکاریدا بنووسرێ.',
 'tooltip-preferences-save' => 'هەڵبژاردنەکانت بپارێزە',
 'tooltip-summary' => 'پوختەیەکی کورتی تێبخە',
@@ -2766,7 +2757,7 @@ $1',
 'pageinfo-robot-noindex' => 'نەشیاو بۆ پێرستکردن',
 'pageinfo-views' => 'ژمارەی بینینەکان',
 'pageinfo-watchers' => 'ژمارەی چاودێرانی پەڕە',
-'pageinfo-few-watchers' => 'کەمتر لە $1 {{PLURAL:$1|چاوەدێر}}',
+'pageinfo-few-watchers' => 'کەمتر لە $1 {{PLURAL:$1|چاودێر}}',
 'pageinfo-redirects-name' => 'ڕەوانەکەرەکان بۆ ئەم پەڕەیە',
 'pageinfo-subpages-name' => 'ژێرپەڕەکانی ئەم پەڕەیە',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ڕەوانەکەر}}; $3 {{PLURAL:$3|ڕەوانەنەکەر}})',
@@ -2784,6 +2775,9 @@ $1',
 'pageinfo-contentpage' => 'ھەژمارکراو وەک پەڕەی بەناوەرۆک',
 'pageinfo-contentpage-yes' => 'بەڵێ',
 'pageinfo-protect-cascading-yes' => 'بەڵێ',
+'pageinfo-category-pages' => 'ژمارەی پەڕەکان',
+'pageinfo-category-subcats' => 'ژمارەی ژێرپەڕەکان',
+'pageinfo-category-files' => 'ژمارەی پەڕگەکان',
 
 # Skin names
 'skinname-standard' => 'کلاسیک',
index d9f70ce..07f90c6 100644 (file)
@@ -1740,7 +1740,7 @@ $3',
 # Upload
 'upload' => 'Načíst soubor',
 'uploadbtn' => 'Načíst soubor',
-'reuploaddesc' => 'Vrátit se k načtení.',
+'reuploaddesc' => 'Zrušit načítání a vrátit se do formuláře.',
 'upload-tryagain' => 'Uložit upravený popis souboru',
 'uploadnologin' => 'Nejste přihlášen(a)',
 'uploadnologintext' => 'Pro načtení souboru se musíte [[Special:UserLogin|přihlásit]].',
@@ -2288,15 +2288,6 @@ Povinná je přinejmenším doména nejvyššího řádu, např. „*.org“.<br
 'listusers-noresult' => 'Nenalezen žádný uživatel.',
 'listusers-blocked' => '({{GENDER:$1|zablokován|zablokována|zablokován}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Seznam aktivních uživatelů',
-'activeusers-intro' => 'Toto je seznam uživatelů, kteří byli nějak aktivní v {{plural:$1|posledním dni|posledních $1 dnech}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|akce|akce|akcí}} během {{PLURAL:$3|posledního dne|posledních $3 dnů}}',
-'activeusers-from' => 'Zobrazit uživatele počínaje od:',
-'activeusers-hidebots' => 'Skrýt roboty',
-'activeusers-hidesysops' => 'Skrýt správce',
-'activeusers-noresult' => 'Nenalezen žádný uživatel.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Práva skupin uživatelů',
 'listgrouprights-summary' => 'Toto je seznam uživatelských skupin definovaných na této wiki a&nbsp;jejich přístupových práv.
index ab81729..5e03840 100644 (file)
@@ -1463,8 +1463,8 @@ Mae'r wybodaeth hon ar gael i'r cyhoedd.",
 'rclinks' => 'Dangos y $1 newid diweddaraf yn ystod y(r) $2 diwrnod diwethaf<br />$3',
 'diff' => 'gwahan',
 'hist' => 'hanes',
-'hide' => 'Cuddio',
-'show' => 'Dangos',
+'hide' => 'Cuddier',
+'show' => 'Dangoser',
 'minoreditletter' => 'B',
 'newpageletter' => 'N',
 'boteditletter' => 'b',
@@ -2035,15 +2035,6 @@ Mae angen parth lefel-uchaf o leiaf, er enghraifft "*.org".<br />
 'listusers-noresult' => "Dim defnyddiwr i'w gael.",
 'listusers-blocked' => '(wedi ei flocio)',
 
-# Special:ActiveUsers
-'activeusers' => 'Rhestr defnyddwyr gweithgar',
-'activeusers-intro' => 'Dyma restr y defnyddwyr a fuont yn weithgar o fewn y {{PLURAL:$1|diwrnod|diwrnod|deuddydd|tridiau|$1 diwrnod|$1 diwrnod}} diwethaf.',
-'activeusers-count' => '$1 {{PLURAL:$1|golygiad|golygiad|olygiad|golygiad}} yn ystod y {{PLURAL:$3|diwrnod|diwrnod|deuddydd|tridiau|$3 diwrnod}} diwethaf',
-'activeusers-from' => "Rhestru'r defnyddwyr gan ddechrau gyda:",
-'activeusers-hidebots' => 'Cuddio botiau',
-'activeusers-hidesysops' => 'Cuddio gweinyddwyr',
-'activeusers-noresult' => "Dim defnyddwyr i'w cael.",
-
 # Special:ListGroupRights
 'listgrouprights' => 'Galluoedd grwpiau defnyddwyr',
 'listgrouprights-summary' => "Dyma restr o'r grwpiau defnyddwyr sydd i'w cael ar y wici hon, ynghyd â galluoedd aelodau'r gwahanol grwpiau. Cewch wybodaeth pellach am y gwahanol alluoedd ar y [[{{MediaWiki:Listgrouprights-helppage}}|dudalen gymorth]].",
@@ -3736,7 +3727,7 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'revdelete-unrestricted' => 'tynnwyd y cyfyngiadau ar allu gweinyddwyr i weld',
 'logentry-move-move' => 'Symudodd $1 y dudalen $3 i $4',
 'logentry-move-move-noredirect' => 'Symudodd $1 y dudalen $3 i $4 heb adael dolen ailgyfeirio',
-'logentry-move-move_redir' => 'Symudwyd y dudalen $3 i $4 gan $1 dros y ddolen ailgyfeirio',
+'logentry-move-move_redir' => '{{GENDER:$2|Symudwyd}} y dudalen $3 i $4 gan $1 dros y ddolen ailgyfeirio',
 'logentry-move-move_redir-noredirect' => 'Symudwyd y dudalen $3 i $4 gan $1 dros ddolen ailgyfeirio heb adael dolen ailgyfeirio newydd',
 'logentry-patrol-patrol' => "Rhoddodd $1 nod ar ddiwygiad $4 o'r dudalen $3 yn dynodi ei fod wedi derbyn ymweliad patrôl",
 'logentry-patrol-patrol-auto' => "Rhoddodd $1 nod yn awtomatig ar ddiwygiad $4 o'r dudalen $3 yn dynodi ei fod wedi derbyn ymweliad patrôl",
index 88ffe6f..70e3be8 100644 (file)
@@ -667,7 +667,7 @@ Du bør logge på og ændre din adgangskode straks efter du har modtaget e-maile
 'eauthentsent' => 'En bekræftelsesmail er sendt til den angivne e-mail-adresse.
 
 Før en e-mail kan modtages af andre brugere af {{SITENAME}}-mailfunktionen, skal adressen og dens tilhørsforhold til denne bruger bekræftes. Følg venligst anvisningerne i denne mail.',
-'throttled-mailpassword' => 'Indenfor {{PLURAL:$1|den sidste time|de sidste $1 timer}} er der allerede sendt et nyt password. For at forhindre misbrug af funktionen, kan der kun bestilles et nyt password en gang for hver {{PLURAL:$1|time|$1 timer}}.',
+'throttled-mailpassword' => 'Indenfor {{PLURAL:$1|den sidste time|de sidste $1 timer}} er der allerede sendt en ny adgangskode. For at forhindre misbrug af funktionen, kan der kun bestilles en ny adgangskode én gang for hver {{PLURAL:$1|time|$1 timer}}.',
 'mailerror' => 'Fejl ved afsendelse af e-mail: $1',
 'acct_creation_throttle_hit' => 'Besøgende med samme IP-adresse som dig har oprettet {{PLURAL:$1|en konto|$1 kontoer}} det sidste døgn, og det er ikke tilladt at oprette flere.
 Derfor kan besøgende ikke oprette flere kontoer fra denne IP-adresse i øjeblikket.',
@@ -717,7 +717,7 @@ Du har muligvis allerede skiftet din adgangskode eller anmodet om en ny midlerti
 
 # Special:PasswordReset
 'passwordreset' => 'Nulstil adgangskode',
-'passwordreset-text' => 'Udfyld denne formular for at modtage en påmindelse om dine kontooplysninger som e-mail.',
+'passwordreset-text' => 'Udfyld denne formular for at nulstille din adgangskode.',
 'passwordreset-legend' => 'Nulstil adgangskode',
 'passwordreset-disabled' => 'Nulstilling af kodeord er slået fra på denne wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Indtast en af de nedenstående oplysninger}}',
@@ -727,23 +727,23 @@ Du har muligvis allerede skiftet din adgangskode eller anmodet om en ny midlerti
 'passwordreset-capture-help' => 'Hvis du krydser dette felt af, vil emailen (med den midlertidige adgangskode) blive vist til dig i tillæg til at blive sendt til brugeren.',
 'passwordreset-email' => 'E-mail adresse:',
 'passwordreset-emailtitle' => 'Kontooplysninger på {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Nogen (sandsynligvis dig, fra IP-adressen $1) har anmodet om en påmindelse om dine kontooplysninger for {{SITENAME}} ($4). Følgende {{PLURAL:$3|brugerkonto|brugerkonti}} er associerede med denne e-mail-adresse:
+'passwordreset-emailtext-ip' => 'Nogen (sandsynligvis dig, fra IP-adressen $1) har anmodet om at få nulstillet din adgangskode til {{SITENAME}} ($4). {{PLURAL:$3|Den følgende brugerkonto er associeret|De følgende brugerkonti er associerede}} med denne e-mail-adresse:
 
 $2
 
 {{PLURAL:$3|Denne midlertidige adgangskode|Disse midlertidige adgangskoder}} vil udløbe om {{PLURAL:$5|en dag|$5 dage}}.
-Du bør logge på og vælge en ny adgangskode nu. Hvis en anden end dig har anmodet om denne påmindelse, eller hvis du er kommet i tanke om din oprindelig adgangskode og ikke længere ønsker at ændre den, kan du ignorere denne meddelelse og fortsætte med at bruge din gamle adgangskode.',
-'passwordreset-emailtext-user' => 'Brugeren $1 har anmodet om en påmindelse om dine kontooplysninger for {{SITENAME}} ($4). Følgende {{PLURAL:$3|brugerkonto|brugerkonti}} er associerede med denne e-mail-adresse:
+Du bør logge på og vælge en ny adgangskode nu. Hvis en anden end dig har gjort denne anmodning, eller hvis du er kommet i tanke om din oprindelig adgangskode og ikke længere ønsker at ændre den, kan du ignorere denne meddelelse og fortsætte med at bruge din gamle adgangskode.',
+'passwordreset-emailtext-user' => 'Brugeren $1 på {{SITENAME}} har anmodet om at få nulstillet din adgangskode til {{SITENAME}} ($4). {{PLURAL:$3|Den følgende brugerkonto er associeret|De følgende brugerkonti er associerede}} med denne e-mail-adresse:
 
 $2
 
 {{PLURAL:$3|Denne midlertidige adgangskode|Disse midlertidige adgangskoder}} vil udløbe om {{PLURAL:$5|en dag|$5 dage}}.
-Du bør logge på og vælge en ny adgangskode nu. Hvis en anden end dig har anmodet om denne påmindelse, eller hvis du er kommet i tanke om din oprindelig adgangskode og ikke længere ønsker at ændre den, kan du ignorere denne meddelelse og fortsætte med at bruge din gamle adgangskode.',
+Du bør logge på og vælge en ny adgangskode nu. Hvis en anden end dig har gjort denne anmodning, eller hvis du er kommet i tanke om din oprindelig adgangskode og ikke længere ønsker at ændre den, kan du ignorere denne meddelelse og fortsætte med at bruge din gamle adgangskode.',
 'passwordreset-emailelement' => 'Brugernavn: $1
 Midlertidig adgangskode: $2',
-'passwordreset-emailsent' => 'En påmindelse er blevet sendt som e-mail.',
-'passwordreset-emailsent-capture' => 'En påmindelsesemail, som vist nedenfor, er blevet sendt.',
-'passwordreset-emailerror-capture' => 'En påmindelsesemail, som vist nedenfor, blev genereret, men det lykkedes ikke at sende den til brugeren: $1',
+'passwordreset-emailsent' => 'En e-mail om nulstilling af adgangskode er blevet sendt.',
+'passwordreset-emailsent-capture' => 'En e-mail om nulstilling af adgangskode, som vist nedenfor, er blevet sendt.',
+'passwordreset-emailerror-capture' => 'En e-mail om nulstilling af adgangskode, som vist nedenfor, blev genereret, men det lykkedes ikke at sende den til brugeren: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Ændr email-adresse',
@@ -2122,15 +2122,6 @@ Der skal som minimum angives et topniveau-domæne som f. eks. "*.org".<br />
 'listusers-noresult' => 'Ingen bruger fundet.',
 'listusers-blocked' => '(blokeret)',
 
-# Special:ActiveUsers
-'activeusers' => 'Liste over aktive brugere',
-'activeusers-intro' => 'Dette er en liste over brugere, som har haft en eller anden form for aktivitet inden for {{PLURAL:$1|den|de}} seneste {{PLURAL:$1|dag|$1 dage}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|handling|handlinger}} i {{PLURAL:$3|det seneste døgn|de seneste $3 dage}}',
-'activeusers-from' => 'Vis brugere som starter med:',
-'activeusers-hidebots' => 'Skjul robotter',
-'activeusers-hidesysops' => 'Skjul administratorer',
-'activeusers-noresult' => 'Ingen brugere fundet.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Brugergrupperettigheder',
 'listgrouprights-summary' => 'Denne side viser de brugergrupper der er defineret på denne wiki og de enkelte gruppers rettigheder.
@@ -3803,12 +3794,12 @@ Billeder vises i fuld opløsning, og andre mediatyper vil blive aktiveret med de
 'sqlite-no-fts' => '$1 uden fuld-tekst søgnings support',
 
 # New logging system
-'logentry-delete-delete' => '$1 slettede siden $3',
-'logentry-delete-restore' => '$1 gendannede siden $3',
-'logentry-delete-event' => '$1 ændrede synligheden af {{PLURAL:$5|en loghændelse|$5 loghændelser}} for siden $3: $4',
-'logentry-delete-revision' => '$1 ændrede synligheden af {{PLURAL:$5|en version|$5 versioner}} af siden $3: $4',
-'logentry-delete-event-legacy' => '$1 ændrede synligheden af loghændelser for siden $3',
-'logentry-delete-revision-legacy' => '$1 ændrede synligheden af versioner af siden $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|slettede}} siden $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|gendannede}} siden $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|ændrede}} synligheden af {{PLURAL:$5|en loghændelse|$5 loghændelser}} for siden $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|ændrede}} synligheden af {{PLURAL:$5|en version|$5 versioner}} af siden $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|ændrede}} synligheden af loghændelser for siden $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|ændrede}} synligheden af versioner af siden $3',
 'logentry-suppress-delete' => '$1 skjulte hændelser for siden $3',
 'logentry-suppress-event' => '$1 ændrede hemmeligt synligheden af {{PLURAL:$5|en loghændelse|$5 loghændelser}} for siden $3: $4',
 'logentry-suppress-revision' => '$1 ændrede hemmeligt synligheden af {{PLURAL:$5|en version|$5 versioner}} af siden $3: $4',
@@ -3822,20 +3813,20 @@ Billeder vises i fuld opløsning, og andre mediatyper vil blive aktiveret med de
 'revdelete-uname-unhid' => 'brugernavnet er ikke længere skjult',
 'revdelete-restricted' => 'tilføjede begrænsninger for administratorer',
 'revdelete-unrestricted' => 'fjernede begrænsninger for administratorer',
-'logentry-move-move' => '$1 flyttede siden $3 til $4',
-'logentry-move-move-noredirect' => '$1 flyttede siden $3 til $4 uden at efterlade en omdirigering',
-'logentry-move-move_redir' => '$1 flyttede siden $3 til $4 hen over en omdirigering',
-'logentry-move-move_redir-noredirect' => '$1 flyttede siden $3 til $4 hen over en omdirigering og uden at efterlade en omdirigering',
-'logentry-patrol-patrol' => '$1 markerede version $4 af siden $3 som patruljeret',
-'logentry-patrol-patrol-auto' => '$1 markerede automatisk version $4 af siden $3 som patruljeret',
-'logentry-newusers-newusers' => 'Brugerkontoen $1 blev oprettet',
-'logentry-newusers-create' => 'Brugerkontoen $1 blev oprettet',
-'logentry-newusers-create2' => 'Brugerkontoen $3 blev oprettet af $1',
-'logentry-newusers-byemail' => 'Brugerkonto  $3  blev oprettet af  $1  og adgangskode er sendt via e-mail',
-'logentry-newusers-autocreate' => 'Kontoen $1 blev automatisk oprettet',
-'logentry-rights-rights' => '$1 ændrede gruppemedlemskabet for $3 fra $4 til $5',
-'logentry-rights-rights-legacy' => '$1 ændrede gruppemedlemskabet for $3',
-'logentry-rights-autopromote' => '$1 blev automatisk forfremmet fra $4 til $5',
+'logentry-move-move' => '$1 {{GENDER:$2|flyttede}} siden $3 til $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|flyttede}} siden $3 til $4 uden at efterlade en omdirigering',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|flyttede}} siden $3 til $4 hen over en omdirigering',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|flyttede}} siden $3 til $4 hen over en omdirigering og uden at efterlade en omdirigering',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|markerede}} version $4 af siden $3 som patruljeret',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|markerede automatisk}} version $4 af siden $3 som patruljeret',
+'logentry-newusers-newusers' => 'Brugerkontoen $1 blev {{GENDER:$2|oprettet}}',
+'logentry-newusers-create' => 'Brugerkontoen $1 blev {{GENDER:$2|oprettet}}',
+'logentry-newusers-create2' => 'Brugerkontoen $3 blev {{GENDER:$2|oprettet}} af $1',
+'logentry-newusers-byemail' => 'Brugerkontoen $3 blev {{GENDER:$2|oprettet}} af $1, og adgangskoden er sendt via e-mail',
+'logentry-newusers-autocreate' => 'Brugerkontoen $1 blev automatisk {{GENDER:$2|oprettet}}',
+'logentry-rights-rights' => '$1 {{GENDER:$2|ændrede}} gruppemedlemskabet for $3 fra $4 til $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|ændrede}} gruppemedlemskabet for $3',
+'logentry-rights-autopromote' => '$1 blev automatisk {{GENDER:$2|forfremmet}} fra $4 til $5',
 'rightsnone' => '(-)',
 
 # Feedback
index 9c58c96..b2cad3d 100644 (file)
@@ -2345,15 +2345,6 @@ Siehe auch die Liste der [[Special:WantedCategories|gewünschten Kategorien]].',
 'listusers-noresult' => 'Keinen Benutzer gefunden.',
 'listusers-blocked' => '(gesperrt)',
 
-# Special:ActiveUsers
-'activeusers' => 'Aktive Benutzer',
-'activeusers-intro' => 'Dies ist eine Liste von Benutzern, die innerhalb {{PLURAL:$1|des letzten Tages|der letzten $1 Tage}} Aktivitäten aufwiesen.',
-'activeusers-count' => '$1 {{PLURAL:$1|Aktion|Aktionen}} in den {{PLURAL:$3|letzten 24 Stunden|vergangenen $3 Tagen}}',
-'activeusers-from' => 'Zeige Benutzer ab:',
-'activeusers-hidebots' => 'Bots ausblenden',
-'activeusers-hidesysops' => 'Administratoren ausblenden',
-'activeusers-noresult' => 'Keine Benutzer gefunden.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Benutzergruppenrechte',
 'listgrouprights-summary' => 'Dies ist eine Liste der in diesem Wiki definierten Benutzergruppen und der damit verbundenen Rechte.
@@ -3329,10 +3320,10 @@ Durch das Herunterladen und Öffnen der Datei kann dein Computer beschädigt wer
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'seconds' => '{{PLURAL:$1|$1 Sekunde|$1 Sekunden}}',
 'minutes' => '{{PLURAL:$1|$1 Minute|$1 Minuten}}',
-'hours' => '{{PLURAL:$1|einer Stunde|$1 Stunden}}',
+'hours' => '{{PLURAL:$1|1 Stunde|$1 Stunden}}',
 'days' => '{{PLURAL:$1|$1 Tag|$1 Tage}}',
-'months' => '{{PLURAL:$1|Ein Monat|$1 Monate}}',
-'years' => '{{PLURAL:$1|Ein Jahr|$1 Jahre}}',
+'months' => '{{PLURAL:$1|1 Monat|$1 Monate}}',
+'years' => '{{PLURAL:$1|1 Jahr|$1 Jahre}}',
 'ago' => 'vor $1',
 'just-now' => 'Gerade eben',
 
index 0019ad1..3b125a8 100644 (file)
@@ -12,6 +12,7 @@
  * @author Belekvor
  * @author Erdemaslancan
  * @author George Animal
+ * @author Gorizon
  * @author Kaganer
  * @author Mirzali
  * @author Nemo bis
@@ -421,11 +422,11 @@ $messages = array(
 'pagecategories' => '{{PLURAL:$1|Kategoriye|Kategoriy}}',
 'category_header' => 'Pelê ke kategoriya "$1" derê',
 'subcategories' => 'Kategoriyê bınêni',
-'category-media-header' => 'Dosyeyê ke kategoriya da "$1" deyê',
+'category-media-header' => 'Dosyeyê ke kategoriya "$1" derê',
 'category-empty' => "''Ena kategoriye de hewna qet nuştey ya zi medya çıniyê.''",
 'hidden-categories' => '{{PLURAL:$1|Kategoriya nımıtiye|Kategoriyê nımıtey}}',
 'hidden-category-category' => 'Kategoriyê nımıtey',
-'category-subcat-count' => '{{PLURAL:$2|Na kategoriye de ena kategoriya bınêne esta.|Na kategoriye de $2 ra pêro pia, {{PLURAL:$1|ena kategoriya bınêne esta|enê $1 kategoriyê bınêni estê.}}, be $2 ra pêro pia.}}',
+'category-subcat-count' => '{{PLURAL:$2|Na kategoriye de ena kategoriya bınêne esta.|Na kategoriye de $2 ra pêro piya, {{PLURAL:$1|ena kategoriya bınêne esta|enê $1 kategoriyê bınêni estê.}}, be $2 ra pêro piya.}}',
 'category-subcat-count-limited' => 'Na kategoriye de {{PLURAL:$1|ena kategoriya bınêne esta|enê $1 kategoriyê bınêni estê}}.',
 'category-article-count' => '{{PLURAL:$2|Na kategoriye de teyna ena pele esta.|Na kategoriye de $2 ra pêro pia, {{PLURAL:$1|ena pele esta|enê $1 peli estê.}}, be $2 ra pêro pia}}',
 'category-article-count-limited' => '{{PLURAL:$1|Pela cêrêne|$1 Pelê cêrêni}} na kategoriye derê.',
@@ -445,7 +446,8 @@ $messages = array(
 'newwindow' => '(pençereyê newey de beno a)',
 'cancel' => 'Bıtexelne',
 'moredotdotdot' => 'Vêşi...',
-'mypage' => 'Per',
+'morenotlisted' => 'Vêşêri lista nêbi...',
+'mypage' => 'Pele',
 'mytalk' => 'Werênayış',
 'anontalk' => 'Pela werênayışê nê IPy',
 'navigation' => 'Geyrayış',
@@ -713,7 +715,7 @@ Sebeb: "\'\'$2\'\'".',
 Xızmetkarê  kılitkerdışi wa bewni ro enay wa çımra ravyarno: "$3".',
 'invalidtitle-knownnamespace' => 'Canemey "$2" u metnê "$3" xırabo',
 'invalidtitle-unknownnamespace' => 'Sernameye nêşınasiya yana amraiya canameyo  $1 u metno "$2" xırab',
-'exception-nologin' => 'Tı cı nêkewtê',
+'exception-nologin' => 'Şıma cıkewtış nêvıraşto',
 'exception-nologin-text' => 'Na pele ya zi nê karkerdışi rê nê wiki de cıkewtış icab keno.',
 
 # Virus scanner
@@ -729,7 +731,7 @@ Wexta ke verhafızayê cıgerayoxê şıma pak beno no benate de taye peli de he
 'welcomeuser' => 'Xeyr ameyê $1',
 'welcomecreation-msg' => 'Hesabê şıma abiyo.
 [[Special:Preferences|{{SITENAME}} vurnayişê tercihanê xo]], xo vir ra mekere.',
-'yourname' => 'Namey karberi',
+'yourname' => 'Nameyê karberi:',
 'yourpassword' => 'Parola',
 'yourpasswordagain' => 'Parola reyna bınusne:',
 'remembermypassword' => 'Parola mı nê cıgeyrayoği de bia xo viri (seba tewr zêde $1 {{PLURAL:$1|roce|rocan}})',
@@ -744,7 +746,7 @@ Wexta ke verhafızayê cıgerayoxê şıma pak beno no benate de taye peli de he
 'userloginnocreate' => 'Cı kewe',
 'logout' => 'Bıveciye',
 'userlogout' => 'Bıveciye',
-'notloggedin' => 'Hesab akerde niyo',
+'notloggedin' => 'Şıma cıkewtış nêvıraşto',
 'nologin' => "Hesabê şıma çıniyo? '''$1'''.",
 'nologinlink' => 'Yew hesab ake',
 'createaccount' => 'Hesab vıraze',
@@ -846,7 +848,7 @@ Bıne vındere u newe ra dest pê bıkere.',
 'passwordreset-legend' => 'Parola reset ke',
 'passwordreset-disabled' => 'Parola reset kerdış ena viki sera qefılneyayo.',
 'passwordreset-pretext' => '{{PLURAL:$1||Enê cerenan ra jeweri defiye de}}',
-'passwordreset-username' => 'Namey karberi:',
+'passwordreset-username' => 'Nameyê karberi:',
 'passwordreset-domain' => 'Domain:',
 'passwordreset-capture' => 'neticey e-postay bımocne?',
 'passwordreset-capture-help' => 'Şıma na dorek morkerê se, e-posta (idareten eposta ya) şıma rê yana karbera rê rışêno.',
@@ -878,6 +880,7 @@ Parola vêrdiye: $2',
 'changeemail-oldemail' => 'E-postay şımaya newki:',
 'changeemail-newemail' => 'E-posta adresiyo newe:',
 'changeemail-none' => '(Çıno)',
+'changeemail-password' => 'Parolaya şımaya {{SITENAME}}i:',
 'changeemail-submit' => 'E-postay xo bıvurne',
 'changeemail-cancel' => 'Bıtexelne',
 
@@ -1447,7 +1450,7 @@ Na game tepeya nêerziyena.',
 'prefs-emailconfirm-label' => 'Tesdiqiya E-posta:',
 'prefs-textboxsize' => 'Ebatê pencerey vurnayışi',
 'youremail' => 'E-Mail (mecbur niyo) *:',
-'username' => 'Namey karberi:',
+'username' => '{{GENDER:$1|Nameyê karberi}}:',
 'uid' => 'Namey karberi:',
 'prefs-memberingroups' => 'Ezayê {{PLURAL:$1|grube|gruban}}:',
 'prefs-memberingroups-type' => '$1',
@@ -1664,7 +1667,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'rcshowhideminor' => 'Vurnayışanê werdiyan $1',
 'rcshowhidebots' => 'Botan $1',
 'rcshowhideliu' => 'Karberanê qeydınan $1',
-'rcshowhideanons' => 'Karberanê anoniman $1',
+'rcshowhideanons' => 'Karberê bênamey $1',
 'rcshowhidepatr' => '$1 vurnayışê ke dewriya geyrayê',
 'rcshowhidemine' => 'Vurnayışanê mı $1',
 'rclinks' => 'Peyniya $2 rocan de $1 vurnayışan bımocne <br />$3',
@@ -1692,8 +1695,8 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'recentchangeslinked-toolbox' => 'Vurnayışê elaqeyıni',
 'recentchangeslinked-title' => 'vurnayışan ser "$1"',
 'recentchangeslinked-noresult' => 'Pelanê ke link biye ey vurnayîşî çino.',
-'recentchangeslinked-summary' => "Lista cêrêne, pela bêlikerdiye rê (ya zi karberanê kategoriya bêlikerdiye rê) pelanê gırêdaoğan de lista de vurnayışê peyênana.
-[[Special:Watchlist|Lista şımawa seyrkedışi de]] peli be nuşteyo '''qolınd''' bêli kerdê.",
+'recentchangeslinked-summary' => "Lista cêrêne, pela bêlikerdiye rê (ya zi karberanê kategoriya bêlikerdiye rê) pelanê gırêdayoğan de lista de vurnayışê peyênana.
+[[Special:Watchlist|Lista şımaya seyrkedışi de]] peli be nuşteyo '''qolınd''' bêli kerdê.",
 'recentchangeslinked-page' => 'Nameyê pele:',
 'recentchangeslinked-to' => 'Pelayan ke ena pela ri gire bi, ser ayi vurnayışi bımoc',
 
@@ -1702,7 +1705,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'uploadbtn' => 'Dosya bar ke',
 'reuploaddesc' => 'Barkerdışi iptal ke u peyser şo formê barkerdışi',
 'upload-tryagain' => 'Deskripyonê dosyayî ke vurîya ey qeyd bike',
-'uploadnologin' => 'Nicikewte',
+'uploadnologin' => 'Şıma cıkewtış nêvıraşto',
 'uploadnologintext' => 'Ti gani [[Special:UserLogin|cikewte]] biyo ke dosya bar bike.',
 'upload_directory_missing' => 'Direktorê dosyayê ($1)î biyo vînî u webserver de nieşkeno viraziye.',
 'upload_directory_read_only' => 'Direktorê dosyayê ($1)î webserver de nieşkeno binuse.',
@@ -2079,6 +2082,8 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 'disambiguationspage' => 'Template:Maneo bin',
 'disambiguations-text' => "Peleyê ke satır da sıteyên dı pelanê '''maneo bin'''i rê esteyina zeregri mocnenê. Nara satırda dıdın dı zi <br />tiya de [[MediaWiki:Disambiguationspage|Pelaya Maneo do bini ]] gani heme gıreyê şablonê ciya-manayan re gıre dayış icab keno.",
 
+'pageswithprop-submit' => 'Şo',
+
 'doubleredirects' => 'Hetenayışê dıletıni',
 'doubleredirectstext' => 'no pel pelê ray motışani liste keno.
 gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
@@ -2242,15 +2247,6 @@ Qeydeyê destegbiyayey: <code>$1</code> (qet yew qeydeyo hesabiyaye http:// ke n
 'listusers-noresult' => 'karber nêdiyayo/a.',
 'listusers-blocked' => '(blok biy)',
 
-# Special:ActiveUsers
-'activeusers' => 'Listey karberan de aktivan',
-'activeusers-intro' => 'Ena yew listeya karberê ke $1 {{PLURAL:$1|roc|rocan}} ra tepya iştiraq kerdo ênan mocneno.',
-'activeusers-count' => 'Karberi {{PLURAL:$3|roce peyni de|$3 roca peyni de}} $1 {{PLURAL:$1|vurnayış|vurnayışi}} kerdê',
-'activeusers-from' => 'Enê karberi ra tepya bımocne:',
-'activeusers-hidebots' => 'Botan bınımne',
-'activeusers-hidesysops' => 'İdarekerdoğan bınımne',
-'activeusers-noresult' => 'Karberi nêdiyayê.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'heqê grubê karberi',
 'listgrouprights-summary' => 'wikiya cêrın a ke tede grubê karberi nişane biyê, listeya heqê cıresayişê inan o.
@@ -2316,7 +2312,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 'watchlistfor2' => 'Qandê $1 ($2)',
 'nowatchlist' => 'listeya temaşa kerdıişê şıma de yew madde zi çina.',
 'watchlistanontext' => 'qey vurnayişê maddeya listeya temaşakerdişi $1.',
-'watchnologin' => 'Şıma de nêkewtê',
+'watchnologin' => 'Şıma cıkewtış nêvıraşto',
 'watchnologintext' => 'qey vurnayişê listeya temaşakerdışi [[Special:UserLogin|gani şıma hesab akeri]].',
 'addwatch' => 'Listeyê seyri deke',
 'addedwatchtext' => 'Ma pele "[[:$1]]" zerri [[Special:Watchlist|watchlist]]ê tı kerd de.
@@ -2511,7 +2507,7 @@ Tı eşkeno seviyeye kılit kerdışi bıvurno, feqat tı nıeşken "cascading p
 'restriction-edit' => 'Bıvurne',
 'restriction-move' => 'Berê',
 'restriction-create' => 'Vıraze',
-'restriction-upload' => 'Barke',
+'restriction-upload' => 'Bar ke',
 
 # Restriction levels
 'restriction-level-sysop' => 'pawıtışê tamamîye',
@@ -2591,12 +2587,12 @@ $1',
 'sp-contributions-newbies' => 'Tenya iştıraqanê karberanê neweyan bımocne',
 'sp-contributions-newbies-sub' => 'Qe hesebê newe',
 'sp-contributions-newbies-title' => 'Îştîrakê karberî ser hesabê neweyî',
-'sp-contributions-blocklog' => 'Qeydê kılit-kerdışi',
-'sp-contributions-deleted' => 'vurnayîşê karberî wedariyayê',
+'sp-contributions-blocklog' => 'Qeydê kılitkerdışi',
+'sp-contributions-deleted' => 'iştırakê karberiê esterıtey',
 'sp-contributions-uploads' => 'barkerdey',
 'sp-contributions-logs' => 'qeydi',
-'sp-contributions-talk' => 'mesac',
-'sp-contributions-userrights' => 'Îdarayê heqqanê karberan',
+'sp-contributions-talk' => 'werênayış',
+'sp-contributions-userrights' => 'İdareyê heqanê karberan',
 'sp-contributions-blocked-notice' => 'verniyê no/na karber/e geriyayo/a
 qê referansi qeydê vernigrewtışi cêr de eşkera biyo:',
 'sp-contributions-blocked-notice-anon' => 'Eno adresê IPi bloke biyo.
@@ -2702,8 +2698,8 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 'ipblocklist-empty' => 'Lista kılitkerdışi venga.',
 'ipblocklist-no-results' => 'Adresa IPya waştiye ya zi namey karberi kılit nêbiyo.',
 'blocklink' => 'kılit ke',
-'unblocklink' => 'bloqi hewad',
-'change-blocklink' => 'kılit-kerdışi bıvurne',
+'unblocklink' => 'a ke',
+'change-blocklink' => 'kılitkerdışi bıvurne',
 'contribslink' => 'iştıraqi',
 'emaillink' => 'e-poste bırışe',
 'autoblocker' => 'Şıma otomatikmen kılit biy, çıke adresa şımawa \'\'IP\'\'y terefê "[[User:$1|$1]]" gureniyena.
@@ -2808,7 +2804,7 @@ Ma tu ra rica keni, tı en verni dı qontrol bıki u bışıravi.",
 Oturse, tı gani peleyê mınaqeşeyê manually beri.",
 'movearticle' => 'Pele bere:',
 'moveuserpage-warning' => "'''Diqet:''' Ti eka yew pelê karberi beni. Diqet bike teyna pel beni feqat ena pele reyna nameyê newi \"nebeno''.",
-'movenologin' => 'Şıma de nêkewtê',
+'movenologin' => 'Şıma cıkewtış nêvıraşto',
 'movenologintext' => 'qey vurnayişê nameyê peli şıma gani qeyd kerde u cıkewteyê [[Special:UserLogin|sistemi]] bıbiy.',
 'movenotallowed' => 'desturê şıma çino, şıma pelan bıkırışi',
 'movenotallowedfile' => 'desturê şıma çino, şıma pelan bıkırışi',
@@ -2881,8 +2877,8 @@ ma vaci: qey pelê "[[{{MediaWiki:Mainpage}}]]i " [[{{#Special:Export}}/{{MediaW
 '''Not:''' pê no form teberdayişê verê (tarix) pelan battal biyo",
 'exportlistauthors' => 'zerre de qandê her pela listey iştiraxkara esto',
 'export-submit' => 'Teber de',
-'export-addcattext' => 'kategoriya cerıni ra maddeyan têare ker',
-'export-addcat' => 'têare ker',
+'export-addcattext' => 'Kategoriye ra pelan têare ke',
+'export-addcat' => 'Têare ke',
 'export-addnstext' => 'pelan cayê nameyan ra têare ker',
 'export-addns' => 'têare ker',
 'export-download' => 'yewna qaydeyi de qeydker',
@@ -2997,7 +2993,7 @@ dosyaya emaneti vindbiyo',
 'tooltip-pt-watchlist' => 'Lista pelanê ke to gırewtê seyrkerdış',
 'tooltip-pt-mycontris' => 'Yew lista iştıraqanê şıma',
 'tooltip-pt-login' => 'Mayê şıma ronıştış akerdışi rê dawet keme; labelê ronıştış mecburi niyo',
-'tooltip-pt-anonlogin' => 'Seba cıkewtışi şıma rê dewato; labelê, no zeruri niyo',
+'tooltip-pt-anonlogin' => 'Seba cıkewtışê şıma rê dewato; labelê, no zeruri niyo',
 'tooltip-pt-logout' => 'Bıveciye',
 'tooltip-ca-talk' => 'Zerrey pela sero werênayış',
 'tooltip-ca-edit' => 'Tı şenay na pele bıvurnê.
@@ -3118,7 +3114,8 @@ Tı eşkeno yew sebeb bınus.',
 'pageinfo-recent-authors' => 'Amarina nuştekaran pêro',
 'pageinfo-magic-words' => '{{PLURAL:$1|Çekuya|Çekuyê}} ($1) sihırini',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Kategoriye|Kategoriyan}} ($1) bınımne',
-'pageinfo-templates' => '{{PLURAL:$1|Şablon|Şabloni}} ($1) açarneyayê',
+'pageinfo-templates' => '{{PLURAL:$1|Şablono|Şablonê}} ke mocniyenê ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|1 Pele|$1 Pelan}} de bestiya pıra',
 'pageinfo-toolboxlink' => 'Melumatê pele',
 'pageinfo-redirectsto' => 'Beno hetê',
 'pageinfo-redirectsto-info' => 'melumat',
@@ -3127,6 +3124,10 @@ Tı eşkeno yew sebeb bınus.',
 'pageinfo-protect-cascading' => 'Sıtarkerdey tiya cı ra yenê war',
 'pageinfo-protect-cascading-yes' => 'Heya',
 'pageinfo-protect-cascading-from' => 'Sıtarkerdey cı ra yenê war',
+'pageinfo-category-info' => 'Şınasiya kategoriye',
+'pageinfo-category-pages' => 'Amarê pelan',
+'pageinfo-category-subcats' => 'Amarê bınkategoriyan',
+'pageinfo-category-files' => 'Amarê dosyeyan',
 
 # Skin names
 'skinname-standard' => 'Klasik',
@@ -4073,7 +4074,7 @@ Resımi be tam asayış mocniyayê, tipê dosyaê bini be programê cıyo elaqed
 'specialpages-group-highuse' => 'Peleyê ke vêşi karênê',
 'specialpages-group-pages' => 'listeyanê pelan',
 'specialpages-group-pagetools' => 'Haletê pelan',
-'specialpages-group-wiki' => 'Malumatê wiki u haceti',
+'specialpages-group-wiki' => 'Melumat u haceti',
 'specialpages-group-redirects' => 'Pela xasîyê ke heteneyayê',
 'specialpages-group-spam' => 'haletê spami',
 
@@ -4147,9 +4148,9 @@ Ena sita dı newke xırabiya teknik esta.',
 'logentry-delete-restore' => "Karber $1' pelay $3' peyser grot",
 'logentry-delete-event' => '$1 asaneyaışê {{PLURAL:$5|weqey roceke|$5 weqey rocekan}} kerdi het de $3: $4 vurna',
 'logentry-delete-revision' => '$1 $3: pela da $4 dı  {{PLURAL:$5|jew revizyon|$5 revizyon}} asayışê cı vurna',
-'logentry-delete-event-legacy' => '$1 Asayışê vurnayışê $3 dekerde de',
+'logentry-delete-event-legacy' => '$1 Asayışê {{GENDER:$2|vurnayışê}} $3 dekerde de',
 'logentry-delete-revision-legacy' => '$1 revizyonê pela da $3 asayışê cı vurna',
-'logentry-suppress-delete' => '$1  $3 rê pıloxneyê',
+'logentry-suppress-delete' => '$1 Pela $3 {{GENDER:$2|dewosiyayiye}}',
 'logentry-suppress-event' => '$1 asayışê  {{PLURAL:$5|weqey rocaka|$5 weqey rocekan}}  $3: $4 miyanıki vurna',
 'logentry-suppress-revision' => '$1 $3: pela da $4 dı  {{PLURAL:$5|jew revizyon|$5 revizyon}} asayışê cı xısusiye vurna',
 'logentry-suppress-event-legacy' => '$1 Asayışê vurnayışê ciyo xısusiyeta cı $3 dekerde de',
@@ -4162,16 +4163,16 @@ Ena sita dı newke xırabiya teknik esta.',
 'revdelete-uname-unhid' => 'namey karberi ne nımteyo',
 'revdelete-restricted' => 'verger (vergırewtış) ê ke qey xızmkaran biye',
 'revdelete-unrestricted' => 'verger (ver gırewtış) ê ke qey xızmkaran diyê wera (wedariyê)',
-'logentry-move-move' => "Karber $1' pelay $3' berd $4",
+'logentry-move-move' => '$1 pela $3 {{GENDER:$2|berde}} $4',
 'logentry-move-move-noredirect' => "$1'i pelay $3 raçarnayış neker dı u berd $4",
 'logentry-move-move_redir' => 'Hetenayışi sera pela $3 ra $1 {{GENDER:$2|berd}} pela $4',
 'logentry-move-move_redir-noredirect' => '$1 hetenayışê qeydê pela da  $3 ahulnê $4 sero hetenayış vıraşt',
 'logentry-patrol-patrol' => '$1 revizyonê pela da $4 $3 ke kontrol',
 'logentry-patrol-patrol-auto' => "$1 pelay $3'i rewizyon dê $4 ya kontrol ke",
-'logentry-newusers-newusers' => 'Hesabê karberi $1 vıraziya',
+'logentry-newusers-newusers' => 'Hesabê karberê $1 {{GENDER:$2|vıraziya}}',
 'logentry-newusers-create' => 'Hesabê karberi $1 vıraziya',
 'logentry-newusers-create2' => 'Hesabê karberi $1 terefê $3 ra vıraziya',
-'logentry-newusers-autocreate' => 'Hesabê $1 Otomatikmen vıraziya',
+'logentry-newusers-autocreate' => 'Hesabê karberi $1 otomatikmen {{GENDER:$2|vıraşt}}',
 'logentry-rights-rights' => '$1 qandê $3 rê ezayina grube $4 ra $5 vuriye',
 'logentry-rights-rights-legacy' => '$1 qandê $3 rê ezayina grube vuriye',
 'logentry-rights-autopromote' => '$1 otomatikmen $4 ra terfi bi ra $5',
index a7dafad..6b1f0a7 100644 (file)
@@ -444,7 +444,9 @@ $1',
 'revisionasof' => '$1ގެ ނުސްހާ',
 'previousrevision' => '→ ކުރީގެ ނުސްހާ',
 'nextrevision' => 'ފަހުގެ ނުސްހާ ←',
+'cur' => 'އެންމެ ފަހުގެ',
 'next' => 'ކުރިޔަށް',
+'last' => 'ފަރަޤު',
 'histfirst' => 'އެންމެ ކުރީގެ',
 'histlast' => 'އެންމެ ފަހުގެ',
 
@@ -455,6 +457,7 @@ $1',
 # Diffs
 'lineno' => 'ފޮޅުވަތް $1:',
 'compareselectedversions' => 'އިހުތިޔާރު ކުރެވިފައިވާ ނުސްހާތައް އަޅައިކިޔުއްވާ',
+'editundo' => 'ކުރީގެ ނުސްހާއަށް ބަދަލުކުރައްވާ',
 
 # Search results
 'searchresults' => 'ހޯދުމުގެ ނަތީޖާ',
@@ -630,15 +633,10 @@ $1',
 [[Special:UnusedCategories|Unused categories]] are not shown here.
 Also see [[Special:WantedCategories|wanted categories]].',
 
-# Special:ActiveUsers
-'activeusers' => 'ހަރަކާތްތެރި މެމްބަރުންގެ ލިސްޓު',
-'activeusers-hidebots' => 'ބޮޓް ފޮރުއްވާ',
-'activeusers-hidesysops' => 'އެޑްމިނިސްޓްރޭޓަރުން ފޮރުއްވާ',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(މެމްބަރުންގެ ލިސްޓު)',
 
-# E-mail user
+# Email user
 'emailuser' => 'މި މެންބަރަށް އީމޭލު ފޮނުއްވާ',
 
 # Watchlist
@@ -780,6 +778,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'tooltip-preview' => 'ބަދަލުތައް ދައްކަވާ، ރައްކާކުރެއްވުމުގެ ކުރިން މި ބޭނުންކުރައްވާ!',
 'tooltip-watch' => 'މިޞަފްޙާއަށް ނަޒަރުބަހައްޓަވާ',
 'tooltip-rollback' => '"ކުރީގެ ނުސްހާ އަކަށް ބަދަލުކުރައްވާ" އިން މި ޞަފްޙާއަށް އެންމެ ފަހުން އުނިއިތުރު ގެންނެވި މެމްބަރުގެ އުނިއިތުރު(އުނިއިތުރުތައް) ފޮހެލެވޭނެއެވެ.',
+'tooltip-undo' => '"ކުރީގެ ނުސްހާއަށް ބަދަލުކުރައްވާ" އިން މި ނުސްހާގެ ކުރީގައި އިން ނުސްހާއަށް ބަދަލުކޮށްދޭނެއެވެ. އަދި އުނިއިތުރުގެ ޚުލާސާ ލިޔުމުގެ ފުރުސަތު ދޭނެއެވެ.',
 'tooltip-summary' => 'ކުރު ޚުލާސާއެއް ލިޔުއްވާ',
 
 # Info page
@@ -824,7 +823,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'watchlistall2' => 'ހުރިހާ',
 'namespacesall' => 'ހުރިހާ',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'އީމޭލު އެޑްރެސް ޔަގީންކުރައްވާ',
 
 # action=purge
index 52082af..adac7e9 100644 (file)
@@ -372,7 +372,6 @@ $magicWords = array(
  * hook.
  */
 $specialPageAliases = array(
-       'Activeusers'               => array( 'ActiveUsers' ),
        'Allmessages'               => array( 'AllMessages' ),
        'Allpages'                  => array( 'AllPages' ),
        'Ancientpages'              => array( 'AncientPages' ),
@@ -2780,16 +2779,6 @@ Supported {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (defaults to http://
 'listusers-noresult' => 'No user found.',
 'listusers-blocked'  => '(blocked)',
 
-# Special:ActiveUsers
-'activeusers'            => 'Active users list',
-'activeusers-summary'    => '', # do not translate or duplicate this message to other languages
-'activeusers-intro'      => 'This is a list of users who had some kind of activity within the last $1 {{PLURAL:$1|day|days}}.',
-'activeusers-count'      => '$1 {{PLURAL:$1|action|actions}} in the last {{PLURAL:$3|day|$3 days}}',
-'activeusers-from'       => 'Display users starting at:',
-'activeusers-hidebots'   => 'Hide bots',
-'activeusers-hidesysops' => 'Hide administrators',
-'activeusers-noresult'   => 'No users found.',
-
 # Special:ListGroupRights
 'listgrouprights'                      => 'User group rights',
 'listgrouprights-summary'              => 'The following is a list of user groups defined on this wiki, with their associated access rights.
index 6c4fe19..b8affdc 100644 (file)
@@ -73,6 +73,7 @@
  * @author PoLuX124
  * @author Ralgis
  * @author Remember the dot
+ * @author Remux
  * @author Richard Wolf VI
  * @author Sanbec
  * @author Savh
@@ -842,8 +843,8 @@ Por favor, identifícate de nuevo tras recibirla.',
 'blocked-mailpassword' => 'Tu dirección IP está bloqueada, y no se te permite el uso de la función de recuperación de contraseñas para prevenir abusos.',
 'eauthentsent' => 'Se ha enviado un correo electrónico de confirmación a la dirección especificada.
 Antes de que se envíe cualquier otro correo a la cuenta tienes que seguir las instrucciones enviadas en el mensaje para así confirmar que la dirección te pertenece.',
-'throttled-mailpassword' => 'Ya se ha enviado un recordatorio de password en {{PLURAL:$1|la última hora|las últimas $1 horas}}.
-Para evitar los abusos, solo se enviará un recordatorio de password cada {{PLURAL:$1|hora|$1 horas}}.',
+'throttled-mailpassword' => 'Ya se ha enviado un recordatorio de contraseña en {{PLURAL:$1|la última hora|las últimas $1 horas}}.
+Para evitar los abusos, solo se enviará un recordatorio de contraseña cada {{PLURAL:$1|hora|$1 horas}}.',
 'mailerror' => 'Error al enviar correo: $1',
 'acct_creation_throttle_hit' => 'Los visitantes a este wiki usando tu dirección IP han creado {{PLURAL:$1|una cuenta|$1 cuentas}} en el último día, lo cual es lo máximo permitido en este periodo de tiempo.
 Como resultado, los visitantes usando esta dirección IP no pueden crear más cuentas en este momento.',
@@ -896,7 +897,7 @@ Puede que ya hayas cambiado la contraseña o que hayas pedido una temporal.',
 
 # Special:PasswordReset
 'passwordreset' => 'Restablecimiento de contraseña',
-'passwordreset-text' => 'Completa este formulario para recibir un recordatorio por correo electrónico de los detalles de tu cuenta.',
+'passwordreset-text' => 'Completa este formulario para restablecer la contraseña.',
 'passwordreset-legend' => 'Restablecer contraseña',
 'passwordreset-disabled' => 'Se ha desactivado el restablecimiento de contraseñas en este wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Introduce uno de los elementos de datos siguientes}}',
@@ -927,9 +928,9 @@ o recuerdas tu contraseña original, y no deseas cambiarla, puedes
 ignorar este mensaje y continuar usando tu contraseña anterior.',
 'passwordreset-emailelement' => 'Nombre de usuario: $1
 Contraseña temporal: $2',
-'passwordreset-emailsent' => 'Se ha enviado un correo electrónico de recordatorio.',
-'passwordreset-emailsent-capture' => 'Un recordatorio por correo electrónico ha sido enviado, que se muestra a continuación.',
-'passwordreset-emailerror-capture' => 'Un recordatorio por correo electrónico fue generado, que se muestra a continuación, pero el envío al usuario falló: $1',
+'passwordreset-emailsent' => 'Se ha enviado un correo electrónico para el restablecimiento de tu contraseña.',
+'passwordreset-emailsent-capture' => 'Se ha enviado un correo para el restablecimiento de la contraseña, el cual se muestra a continuación.',
+'passwordreset-emailerror-capture' => 'Un correo para el restablecimiento de contraseña fue generado, el cual se muestra a continuación, pero el envío al usuario falló: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Cambiar la dirección de correo electrónico',
@@ -2315,15 +2316,6 @@ Es necesario, por lo menos, un dominio de alto nivel, por ejemplo "*.org".<br />
 'listusers-noresult' => 'No se encontró al usuario.',
 'listusers-blocked' => '({{GENDER:$1|bloqueado|bloqueada}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Lista de usuarios activos',
-'activeusers-intro' => 'Esta es una lista de usuarios que han tenido alguna actividad en los últimos $1 {{PLURAL:$1|día|días}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|acción|acciones}} en los últimos {{PLURAL:$3|día|$3 días}}',
-'activeusers-from' => 'Mostrando a los usuarios empezando por:',
-'activeusers-hidebots' => 'Ocultar robots',
-'activeusers-hidesysops' => 'Ocultar administradores',
-'activeusers-noresult' => 'No se encontraron usuarios.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Permisos del grupo de usuarios',
 'listgrouprights-summary' => 'La siguiente es una lista de los grupos de usuario definidos en esta wiki y de sus privilegios de acceso asociados.
@@ -4040,9 +4032,9 @@ Este sitio está experimentando dificultades técnicas.',
 'sqlite-no-fts' => '$1 sin soporte para búsqueda de texto completo',
 
 # New logging system
-'logentry-delete-delete' => '$1 borró la página «$3»',
+'logentry-delete-delete' => '$1 página {{GENDER:$2|eliminada}} $3',
 'logentry-delete-restore' => '$1 restauró la página «$3»',
-'logentry-delete-event' => '$1 modificó la visibilidad de {{PLURAL:$5|un evento del registro|$5 eventos del registro}} en $3: $4',
+'logentry-delete-event' => '$1 {{GENDER:$2|modificó}} la visibilidad de {{PLURAL:$5|un evento del registro|$5 algunos eventos del registro}} en $3: $4',
 'logentry-delete-revision' => '$1 modificó la visibilidad de {{PLURAL:$5|una edición|$5 ediciones}} en la página $3: $4',
 'logentry-delete-event-legacy' => '$1 modificó la visibilidad de los eventos del registro en $3',
 'logentry-delete-revision-legacy' => '$1 modificó la visibilidad de las ediciones en la página $3',
index aadb5b5..f94b619 100644 (file)
@@ -761,8 +761,8 @@ Pärast parooli saamist logige palun sisse.',
 'blocked-mailpassword' => 'Sinu IP-aadressi jaoks on toimetamine blokeeritud, seetõttu ei saa sa kasutada ka parooli meeldetuletamise funktsiooni.',
 'eauthentsent' => 'Sisestatud e-posti aadressile on saadetud kinnituse e-kiri.
 Enne kui su kontole ükskõik milline muu e-kiri saadetakse, pead sa e-kirjas olevat juhist järgides kinnitama, et konto on tõepoolest sinu.',
-'throttled-mailpassword' => 'Parooli meeldetuletus lähetatud viimase {{PLURAL:$1|tunni|$1 tunni}} jooksul.
-Väärtarvitamise vältimiseks saadetakse {{PLURAL:$1|tunni|$1 tunni}} jooksul ainult üks meeldetuletus.',
+'throttled-mailpassword' => 'Parooli lähtestamise e-kiri saadetud viimase {{PLURAL:$1|tunni|$1 tunni}} jooksul.
+Väärtarvitamise vältimiseks saadetakse {{PLURAL:$1|tunni|$1 tunni}} jooksul ainult üks lähtestamise e-kiri.',
 'mailerror' => 'Viga kirja saatmisel: $1',
 'acct_creation_throttle_hit' => 'Selle viki külastajad, kes kasutavad sinu IP-aadressi, on viimase ööpäeva jooksul loonud {{PLURAL:$1|ühe konto|$1 kontot}}, mis on selles ajavahemikus ülemmääraks.
 Seetõttu ei saa seda IP-aadressi kasutades hetkel rohkem kontosid luua.',
@@ -801,7 +801,8 @@ Sisselogimise lõpetamiseks pead siia uue parooli sisestama:',
 'newpassword' => 'Uus parool:',
 'retypenew' => 'Sisesta uus parool uuesti:',
 'resetpass_submit' => 'Sisesta parool ja logi sisse',
-'resetpass_success' => 'Sinu parool on edukalt muudetud! Sisselogimine...',
+'resetpass_success' => 'Sinu parool on edukalt muudetud!
+Sisselogimine...',
 'resetpass_forbidden' => 'Paroole ei saa muuta',
 'resetpass-no-info' => 'Pead olema sisselogitud, et sellele lehele pääseda.',
 'resetpass-submit-loggedin' => 'Muuda parool',
@@ -812,7 +813,7 @@ Võib-olla oled juba edukalt muudnud oma salasõna või taotlenud uut ajutist sa
 
 # Special:PasswordReset
 'passwordreset' => 'Parooli lähtestamine',
-'passwordreset-text' => 'Täida see vorm, et saada e-kiri oma konto andmetega.',
+'passwordreset-text' => 'Täida see vorm, et oma parool lähtestada.',
 'passwordreset-legend' => 'Parooli lähtestamine',
 'passwordreset-disabled' => 'Selles vikis on paroolide lähtestamine keelatud.',
 'passwordreset-pretext' => '{{PLURAL:$1||Sisesta üks järgmistest andmeüksustest}}',
@@ -822,13 +823,13 @@ Võib-olla oled juba edukalt muudnud oma salasõna või taotlenud uut ajutist sa
 'passwordreset-capture-help' => 'Kui valid selle märkeruudu, näidatakse sulle ajutist parooli sisaldavat e-kirja, mis ühtlasi kasutajale saadetakse.',
 'passwordreset-email' => 'E-posti aadress:',
 'passwordreset-emailtitle' => '{{GRAMMAR:genitive|{{SITENAME}}}} konto andmed',
-'passwordreset-emailtext-ip' => 'Keegi, arvatavasti sina ise, IP-aadressilt $1 palus meelde tuletada sinu {{GRAMMAR:genitive|{{SITENAME}}}} ($4) konto üksikasjad. Selle e-posti aadressiga on seotud {{PLURAL:$3|järgmine konto|järgmised kontod}}:
+'passwordreset-emailtext-ip' => 'Keegi, arvatavasti sina ise, IP-aadressilt $1 palus lähtestada sinu {{GRAMMAR:genitive|{{SITENAME}}}} ($4) parooli. Selle e-posti aadressiga on seotud {{PLURAL:$3|järgmine konto|järgmised kontod}}:
 
 $2
 
 {{PLURAL:$3|See ajutine parool aegub|Need ajutised paroolid aeguvad}} {{PLURAL:$5|ühe|$5}} päeva pärast.
 Peaksid nüüd sisse logima ja uue parooli valima. Kui selle palve esitas keegi teine või kui sulle meenus su parool ja sa ei soovi seda enam muuta, võid teadet eirata ja jätkata vana parooli kasutamist.',
-'passwordreset-emailtext-user' => '{{GRAMMAR:genitive|{{SITENAME}}}} kasutaja $1 palus meelde tuletada sinu {{GRAMMAR:genitive|{{SITENAME}}}} ($4) konto üksikasjad. Selle e-posti aadressiga on seotud {{PLURAL:$3|järgmine konto|järgmised kontod}}:
+'passwordreset-emailtext-user' => '{{GRAMMAR:genitive|{{SITENAME}}}} kasutaja $1 palus lähtestada sinu {{GRAMMAR:genitive|{{SITENAME}}}} ($4) parooli. Selle e-posti aadressiga on seotud {{PLURAL:$3|järgmine konto|järgmised kontod}}:
 
 $2
 
@@ -836,9 +837,9 @@ $2
 Peaksid nüüd sisse logima ja uue parooli valima. Kui selle palve esitas keegi teine või kui sulle meenus su parool ja sa ei soovi seda enam muuta, võid teadet eirata ja jätkata vana parooli kasutamist.',
 'passwordreset-emailelement' => 'Kasutajanimi: $1
 Ajutine parool: $2',
-'passwordreset-emailsent' => 'Meeldetuletuskiri on saadetud.',
-'passwordreset-emailsent-capture' => 'E-kirjatsi on saadetud allpool näidatav meeldetuletus.',
-'passwordreset-emailerror-capture' => 'Koostati allpool näidatav meeldetuletus, aga selle e-kirjatsi kasutajale saatmine ebaõnnestus: $1',
+'passwordreset-emailsent' => 'Parooli lähtestamise e-kiri on saadetud.',
+'passwordreset-emailsent-capture' => 'E-kirjatsi on saadetud allpool näidatav parooli lähtestuskiri.',
+'passwordreset-emailerror-capture' => 'Koostati allpool näidatav parooli lähtestuskiri, aga selle e-kirjatsi kasutajale saatmine ebaõnnestus: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'E-posti aadressi muutmine',
@@ -870,7 +871,7 @@ Ajutine parool: $2',
 'media_sample' => 'Näidis.ogg',
 'media_tip' => 'Link failile',
 'sig_tip' => 'Sinu allkiri ajatempliga',
-'hr_tip' => 'Horisontaalkriips (kasuta säästlikult)',
+'hr_tip' => 'Rõhtkriips (kasuta liialdamata)',
 
 # Edit pages
 'summary' => 'Resümee:',
@@ -931,7 +932,7 @@ Võimalik, et see teisaldati või kustutati, sellal kui lehekülge vaatasid.',
 'loginreqtitle' => 'Vajalik on sisselogimine',
 'loginreqlink' => 'sisse logima',
 'loginreqpagetext' => 'Lehekülgede vaatamiseks pead $1.',
-'accmailtitle' => 'Parool saadetud.',
+'accmailtitle' => 'Parool saadetud',
 'accmailtext' => "Kasutajale '$1' genereeritud juhuslik parool saadeti aadressile $2.
 
 Seda parooli on võimalik muuta ''[[Special:ChangePassword|parooli muutmise lehel]]'' peale uuele kontole sisse logimist.",
@@ -1333,9 +1334,9 @@ Vahepeal saad otsimiseks Google'it kasutada.
 Pane tähele, et Google'is talletatud {{GRAMMAR:genitive|{{SITENAME}}}} sisu võib olla iganenud.",
 
 # Quickbar
-'qbsettings' => 'Kiirriba sätted',
-'qbsettings-none' => 'Ei_ole',
-'qbsettings-fixedleft' => 'Püsivalt_vasakul',
+'qbsettings' => 'Kiirriba',
+'qbsettings-none' => 'Puudub',
+'qbsettings-fixedleft' => 'Püsivalt vasakul',
 'qbsettings-fixedright' => 'Püsivalt paremal',
 'qbsettings-floatingleft' => 'Ujuvalt vasakul',
 'qbsettings-floatingright' => 'Ujuvalt paremal',
@@ -2196,15 +2197,6 @@ Toetatud {{PLURAL:$2|protokoll|protokollid}}: <code>$1</code> (määramata proto
 'listusers-noresult' => 'Kasutajat ei leitud.',
 'listusers-blocked' => '(blokeeritud)',
 
-# Special:ActiveUsers
-'activeusers' => 'Aktiivsete kasutajate nimekiri',
-'activeusers-intro' => 'See on loetelu kasutajatest, kes on viimase $1 {{PLURAL:$1|päev|päeva}} jooksul midagi teinud.',
-'activeusers-count' => '$1 {{PLURAL:$1|toiming|toimingut}} viimase {{PLURAL:$3|päeva|$3 päeva}} jooksul',
-'activeusers-from' => 'Näita kasutajaid alates:',
-'activeusers-hidebots' => 'Peida robotid',
-'activeusers-hidesysops' => 'Peida administraatorid',
-'activeusers-noresult' => 'Kasutajaid ei leidunud.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Kasutajarühma õigused',
 'listgrouprights-summary' => 'Siin on loetletud selle viki kasutajarühmad ja rühmaga seotud õigused.
@@ -2409,6 +2401,7 @@ Mine tagasi eelmisele leheküljele ja taaslaadi see, seejärel proovi uuesti.',
 'prot_1movedto2' => 'Lehekülg "[[$1]]" teisaldatud pealkirja "[[$2]]" alla',
 'protect-badnamespace-title' => 'Kaitstamatu nimeruum',
 'protect-badnamespace-text' => 'Selles nimeruumis olevaid lehekülgi ei saa kaitsta.',
+'protect-norestrictiontypes-title' => 'Kaitstamatu lehekülg',
 'protect-legend' => 'Kaitse kinnitamine',
 'protectcomment' => 'Põhjus:',
 'protectexpiry' => 'Aegub:',
@@ -3860,17 +3853,17 @@ Pilt kuvatakse algupärases suuruses, muu fail avatakse koheselt seostuva progra
 'sqlite-no-fts' => '$1 ilma täistekstiotsingu toeta',
 
 # New logging system
-'logentry-delete-delete' => '$1 kustutas lehekülje $3',
-'logentry-delete-restore' => '$1 taastas lehekülje $3',
-'logentry-delete-event' => '$1 muutis leheküljel $3 {{PLURAL:$5|ühe|$5}} logisündmuse nähtavust: $4',
-'logentry-delete-revision' => '$1 muutis leheküljel $3 {{PLURAL:$5|ühe|$5}} redaktsiooni nähtavust: $4',
-'logentry-delete-event-legacy' => '$1 muutis leheküljel $3 logisündmuste nähtavust',
-'logentry-delete-revision-legacy' => '$1 muutis leheküljel $3 redaktsioonide nähtavust',
-'logentry-suppress-delete' => '$1 varjas lehekülje $3',
-'logentry-suppress-event' => '$1 muutis salaja leheküljel $3 {{PLURAL:$5|ühe|$5}} logisündmuse nähtavust: $4',
-'logentry-suppress-revision' => '$1 muutis salaja leheküljel $3 {{PLURAL:$5|ühe|$5}} redaktsiooni nähtavust: $4',
-'logentry-suppress-event-legacy' => '$1 muutis salaja leheküljel $3 logisündmuste nähtavust',
-'logentry-suppress-revision-legacy' => '$1 muutis salaja leheküljel $3 redaktsioonide nähtavust',
+'logentry-delete-delete' => '$1 {{GENDER:$2|kustutas}} lehekülje $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|taastas}} lehekülje $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|muutis}} leheküljel $3 {{PLURAL:$5|ühe|$5}} logisündmuse nähtavust: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|muutis}} leheküljel $3 {{PLURAL:$5|ühe|$5}} redaktsiooni nähtavust: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|muutis}} leheküljel $3 logisündmuste nähtavust',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|muutis}} leheküljel $3 redaktsioonide nähtavust',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|varjas}} lehekülje $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2|muutis}} salaja leheküljel $3 {{PLURAL:$5|ühe|$5}} logisündmuse nähtavust: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|muutis}} salaja leheküljel $3 {{PLURAL:$5|ühe|$5}} redaktsiooni nähtavust: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|muutis}} salaja leheküljel $3 logisündmuste nähtavust',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|muutis}} salaja leheküljel $3 redaktsioonide nähtavust',
 'revdelete-content-hid' => 'peideti sisu',
 'revdelete-summary-hid' => 'peideti resümee',
 'revdelete-uname-hid' => 'peideti kasutajanimi',
@@ -3879,16 +3872,16 @@ Pilt kuvatakse algupärases suuruses, muu fail avatakse koheselt seostuva progra
 'revdelete-uname-unhid' => 'nähtavaks tehti kasutajanimi',
 'revdelete-restricted' => 'kehtestati piirangud administraatoritele',
 'revdelete-unrestricted' => 'eemaldati administraatoritelt piirangud',
-'logentry-move-move' => '$1 teisaldas lehekülje $3 pealkirja $4 alla',
-'logentry-move-move-noredirect' => '$1 teisaldas lehekülje $3 pealkirja $4 alla ümbersuunamist maha jätmata',
-'logentry-move-move_redir' => '$1 teisaldas lehekülje $3 ümbersuunamise $4 asemele',
-'logentry-move-move_redir-noredirect' => '$1 teisaldas lehekülje $3 ümbersuunamise $4 asemele ümbersuunamist maha jätmata',
-'logentry-patrol-patrol' => '$1 märkis lehekülje $3 redaktsiooni $4 kontrollituks',
-'logentry-patrol-patrol-auto' => '$1 märkis automaatselt lehekülje $3 redaktsiooni $4 kontrollituks',
-'logentry-newusers-newusers' => 'Loodud kasutajakonto $1',
-'logentry-newusers-create' => 'Loodud kasutajakonto $1',
-'logentry-newusers-create2' => '$1 lõi kasutajakonto $3',
-'logentry-newusers-autocreate' => 'Konto $1 loodi automaatselt',
+'logentry-move-move' => '$1 {{GENDER:$2|teisaldas}} lehekülje $3 pealkirja $4 alla',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|teisaldas}} lehekülje $3 pealkirja $4 alla ümbersuunamist maha jätmata',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|teisaldas}} lehekülje $3 ümbersuunamise $4 asemele',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|teisaldas}} lehekülje $3 ümbersuunamise $4 asemele ümbersuunamist maha jätmata',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|märkis}} lehekülje $3 redaktsiooni $4 kontrollituks',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|märkis}} automaatselt lehekülje $3 redaktsiooni $4 kontrollituks',
+'logentry-newusers-newusers' => '{{GENDER:$2|Loodud}} kasutajakonto $1',
+'logentry-newusers-create' => '{{GENDER:$2|Loodud}} kasutajakonto $1',
+'logentry-newusers-create2' => '$1 {{GENDER:$2|lõi}} kasutajakonto $3',
+'logentry-newusers-autocreate' => 'Konto $1 {{GENDER:$2|loodi}} automaatselt',
 'rightsnone' => '(puudub)',
 
 # Feedback
index 423d9db..f53dd2a 100644 (file)
@@ -1600,7 +1600,7 @@ $1",
 این کار بازگشت‌ناپذیر است.',
 'prefs-emailconfirm-label' => 'تأیید رایانامه:',
 'prefs-textboxsize' => 'اندازهٔ جعبهٔ ویرایش',
-'youremail' => 'راÛ\8cاÙ\86اÙ\85Ù\87:',
+'youremail' => 'اÛ\8cÙ\85Û\8cÙ\84 (اختÛ\8cارÛ\8c)*',
 'username' => '{{GENDER:$1|نام کاربری}}:',
 'uid' => 'شناسهٔ {{GENDER:$1|کاربری}}:',
 'prefs-memberingroups' => '{{GENDER:$2|عضو}} {{PLURAL:$1|گروه|گروه}}:',
@@ -2407,15 +2407,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'listusers-noresult' => 'هیچ کاربری یافت نشد.',
 'listusers-blocked' => '(بسته شده)',
 
-# Special:ActiveUsers
-'activeusers' => 'فهرست کاربران فعال',
-'activeusers-intro' => 'در زیر فهرستی از کاربرانی را می‌بینید که در $1 {{PLURAL:$1|روز|روز}} گذشته فعالیتی داشته‌اند.',
-'activeusers-count' => '$1 {{PLURAL:$1|فعالیت|فعالیت}} در {{PLURAL:$3|روز|$3 روز}} اخیر',
-'activeusers-from' => 'نمایش کاربران با آغاز از:',
-'activeusers-hidebots' => 'نهفتن ربات‌ها',
-'activeusers-hidesysops' => 'نهفتن مدیران',
-'activeusers-noresult' => 'کاربری پیدا نشد.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'اختیارات گروه‌های کاربری',
 'listgrouprights-summary' => 'فهرست زیر شامل گروه‌های کاربری تعریف شده در این ویکی و اختیارات داده شده به آن‌ها است.
@@ -2750,7 +2741,7 @@ $1',
 'mycontris' => 'مشارکت‌ها',
 'contribsub2' => 'برای $1 ($2)',
 'nocontribs' => 'هیچ تغییری با این مشخصات یافت نشد.',
-'uctop' => ' (بالا)',
+'uctop' => '(بالا)',
 'month' => 'در این ماه (و پیش از آن):',
 'year' => 'در این سال (و پیش از آن):',
 
index 745aca1..3fb172b 100644 (file)
@@ -2204,15 +2204,6 @@ Vaaditaan vähintään ylätason verkkotunnus, esimerkiksi "*.org".<br />
 'listusers-noresult' => 'Käyttäjiä ei löytynyt.',
 'listusers-blocked' => '(estetty)',
 
-# Special:ActiveUsers
-'activeusers' => 'Aktiivisten käyttäjien lista',
-'activeusers-intro' => 'Tämä on luettelo käyttäjistä, jotka ovat tehneet jotain viimeisen $1 {{PLURAL:$1|päivän}} sisällä.',
-'activeusers-count' => '$1 {{PLURAL:$1|toiminto|toimintoa}} viimeisen {{PLURAL:$3|päivän|$3 päivän}} aikana',
-'activeusers-from' => 'Näytä käyttäjät alkaen',
-'activeusers-hidebots' => 'Piilota botit',
-'activeusers-hidesysops' => 'Piilota ylläpitäjät',
-'activeusers-noresult' => 'Käyttäjiä ei löytynyt.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Käyttäjäryhmien oikeudet',
 'listgrouprights-summary' => 'Tämä lista sisältää tämän wikin käyttäjäryhmät sekä ryhmiin liitetyt käyttöoikeudet.
@@ -2474,9 +2465,8 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 Voit palauttaa versioita valikoivasti valitsemalla vain niiden versioiden valintalaatikot, jotka haluat palauttaa.",
 'undeleterevisions' => '{{PLURAL:$1|Versio|$1 versiota}} arkistoitu.',
 'undeletehistory' => 'Jos palautat sivun, kaikki versiot lisätään sivun historiaan. Jos uusi sivu samalla nimellä on luotu poistamisen jälkeen, palautetut versiot lisätään sen historiaan.',
-'undeleterevdel' => "Palautusta ei tehdä, jos sen seurauksena sivun uusin versio olisi osittain piilotettu. 
-Tässä tilanteessa älä valitse palautettavaksi näkyviin viimeisintä poistettua versiota tai poista version piilotus.<br />
-Tiedostoversioita, joihin sinulla ei ole katseluoikeutta (''häivytetyt versiot''), ei palauteta.",
+'undeleterevdel' => 'Palautusta ei tehdä, jos sen seurauksena sivun uusin versio olisi osittain piilotettu. 
+Tässä tilanteessa älä valitse palautettavaksi näkyviin viimeisintä poistettua versiota tai poista version piilotus.',
 'undeletehistorynoadmin' => 'Tämä sivu on poistettu. Syy sivun poistamiseen näkyy yhteenvedossa, jossa on myös tiedot, ketkä ovat muokanneet tätä sivua ennen poistamista. Sivujen varsinainen sisältö on vain ylläpitäjien luettavissa.',
 'undelete-revision' => 'Poistettu sivu $1 hetkellä $4 kello $5. Tekijä: $3.',
 'undeleterevision-missing' => 'Virheellinen tai puuttuva versio. Se on saatettu palauttaa tai poistaa arkistosta.',
index ed66796..4d334d2 100644 (file)
@@ -595,8 +595,8 @@ Vinarliga rita inn eftir at tú hevur fingið hana.',
 'blocked-mailpassword' => 'Tín IP adressa er stongd fyri at gera rættingar á síðum, og tí er tað ikki loyvt at brúka funkuna fyri endurskapan av loyniorði, hetta fyri at forða fyri misnýtslu.',
 'eauthentsent' => '↓ Ein váttanar t-postur er sendur til givna t-post bústaðin.
 Áðrenn aðrir teldupostar verða sendir til kontuna, mást tú fylgja leiðbeiningunum í t-postinum, fyri at vátta at kontoin veruliga er tín.',
-'throttled-mailpassword' => 'Ein teldupost við áminning um loyniorði er longu sendur fyri bert {{PLURAL:$1|tíma|$1 tímum}}.
-Fyri at fyribyrja misnýtslu, verður bert ein teldupostur við áminning um loyniorði sendur fyri hvønn/hvørjir {{PLURAL:$1|tíma|$1 tímar}}.',
+'throttled-mailpassword' => 'Ein teldupostur har loyniorðið verður nullstillað er longu sendur fyri bert {{PLURAL:$1|tíma|$1 tímum}} síðan.
+Fyri at fyribyrja misnýtslu, verður bert ein teldupostur við nullstillaðum loyniorði sendur fyri pr. {{PLURAL:$1|tíma|$1 tímar}}.',
 'mailerror' => 'Villa tá t-postur var sendur: $1',
 'acct_creation_throttle_hit' => 'Vitjandi á hesi wiki, sum nýta tína IP addressu, hava stovnað {{PLURAL:$1|1 kontu|$1 kontur}} seinastu dagarnar, sum er mest loyvda hetta tíðarskeið.
 Sum eitt úrslit av hesum, kunnu vitjandi sum brúka hesa IP adressuna ikki stovna fleiri kontur í løtuni.',
@@ -649,7 +649,7 @@ Møguliga hevur tú longu broytt títt loyniorð ella biðið um eitt nýtt fyri
 
 # Special:PasswordReset
 'passwordreset' => 'Nullstilla loyniorðið',
-'passwordreset-text' => 'Útfyll hetta skjalið fyri at fáa eina áminning við t-posti við tínum konto upplýsingum.',
+'passwordreset-text' => 'Útfyll hetta skjalið fyri at nullstilla títt loyniorð.',
 'passwordreset-legend' => 'Nulstilla loyniorðið',
 'passwordreset-disabled' => 'Tað ber ikki til at nullstilla loyniorðið á hesi wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Skriva ein av upplýsingunum niðanfyri}}',
@@ -679,8 +679,8 @@ umbønina, ella um tú ert komin í tankar um títt uppruna loyniorð, og tú ik
 ynskir at broyta tað, so kanst tú síggja burtur frá hesum boðum og halda fram at brúka títt gamla loyniorð.',
 'passwordreset-emailelement' => 'Brúkaranavn: $1
 Fyribils loyniorð: $2',
-'passwordreset-emailsent' => 'Ein áminningar teldupostur er blivin sendur.',
-'passwordreset-emailsent-capture' => 'Ein áminningar teldupostur er blivin sendur, sum víst niðanfyri.',
+'passwordreset-emailsent' => 'Ein teldupostur har tú kanst nullstillað loyniorðið er blivin sendur.',
+'passwordreset-emailsent-capture' => 'Ein teldupostur, har ið tú kanst nullstilla loyniorðið, er blivin sendur, sum víst niðanfyri.',
 'passwordreset-emailerror-capture' => 'Ein áminningar teldupostur var gjørdur, sum víst niðanfyri, men tað miseydnaðist at senda til brúkaran: $1',
 
 # Special:ChangeEmail
@@ -1737,11 +1737,6 @@ Sí eisini [[Special:WantedCategories|ynsktir bólkar]].',
 'listusers-submit' => 'Sýna',
 'listusers-noresult' => 'Ongin brúkari var funnin.',
 
-# Special:ActiveUsers
-'activeusers-hidebots' => 'Fjal bottar',
-'activeusers-hidesysops' => 'Fjal umboðsstjórar (administratorar)',
-'activeusers-noresult' => 'Ongir brúkarar funnir.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Brúkara bólka rættindi',
 'listgrouprights-summary' => 'Henda síða vísir ein lista av brúkarabólkum, sum eru útgreinaðir á hesi wiki og rættindini hjá teimum einstøku bólkunum.
index 839696b..66243f0 100644 (file)
@@ -2321,15 +2321,6 @@ Ils nécessitent au moins un domaine de niveau supérieur, par exemple « *.org
 'listusers-noresult' => 'Aucun utilisateur trouvé. Vérifiez aussi les variantes de casse.',
 'listusers-blocked' => '(bloqué{{GENDER:$1||e|(e)}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Liste des utilisateurs actifs',
-'activeusers-intro' => 'Ceci est une liste des utilisateurs qui ont exercé une quelconque activité au cours {{PLURAL:$1|de la dernière journée|des $1 derniers jours}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|action|actions}} lors {{PLURAL:$3|du dernier jour|des $3 derniers jours}}',
-'activeusers-from' => 'Afficher les utilisateurs depuis :',
-'activeusers-hidebots' => 'Masquer les robots',
-'activeusers-hidesysops' => 'Masquer les administrateurs',
-'activeusers-noresult' => 'Aucun utilisateur trouvé.',
-
 # Special:ListGroupRights
 'listgrouprights' => "Droits des groupes d'utilisateurs",
 'listgrouprights-summary' => "Cette page contient une liste des groupes définis sur ce wiki ainsi que les droits d'accès qui leur sont associés.
index 997c21a..0b0f09a 100644 (file)
@@ -2311,15 +2311,6 @@ Ils ant fôta de por lo muens un domêno de nivél de dessus, per ègzemplo « *
 'listusers-noresult' => 'Nion utilisator trovâ.',
 'listusers-blocked' => '(blocâ{{GENDER:$1||ye|(ye)}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Lista des utilisators actifs',
-'activeusers-intro' => 'O est na lista des utilisators qu’ant ègzèrciê un’activitât la quinta que seye pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}.',
-'activeusers-count' => '$1 accion{{PLURAL:$1||s}} pendent {{PLURAL:$3|lo jorn passâ|los $3 jorns passâs}}',
-'activeusers-from' => 'Fâre vêre los utilisators dês :',
-'activeusers-hidebots' => 'Cachiér los robots',
-'activeusers-hidesysops' => 'Cachiér los administrators',
-'activeusers-noresult' => 'Nion utilisator trovâ.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Drêts de les tropes d’utilisators',
 'listgrouprights-summary' => 'Vê-que na lista de les tropes d’utilisators dèfenies sur ceti vouiqui et pués los sins drêts d’accès.
index 5b4e3d9..fb05013 100644 (file)
@@ -603,7 +603,7 @@ Por favor, comuníquello a un [[Special:ListUsers/sysop|administrador]] tomando
 'filedeleteerror' => 'Non se deu borrado o ficheiro "$1".',
 'directorycreateerror' => 'Non se puido crear o directorio "$1".',
 'filenotfound' => 'Non se deu atopado o ficheiro "$1".',
-'fileexistserror' => 'Resultou imposíbel escribir no ficheiro "$1": O ficheiro xa existe.',
+'fileexistserror' => 'Non se pode escribir no ficheiro "$1": O ficheiro xa existe.',
 'unexpected' => 'Valor inesperado: "$1"="$2".',
 'formerror' => 'Erro: Non se pode enviar o formulario.',
 'badarticleerror' => 'Non pode efectuarse esa acción nesta páxina.',
@@ -1226,7 +1226,7 @@ Asegúrese de que esta modificación da páxina mantén a continuidade históric
 'mergehistory-box' => 'Fusionar as revisións de dúas páxinas:',
 'mergehistory-from' => 'Páxina de orixe:',
 'mergehistory-into' => 'Páxina de destino:',
-'mergehistory-list' => 'Historial de edicións fusionábeis',
+'mergehistory-list' => 'Historial de edicións fusionables',
 'mergehistory-merge' => 'As revisións seguintes de [[:$1]] pódense fusionar con [[:$2]]. Use a columna de botóns de selección para fusionar só as revisións creadasen e antes da hora indicada. Teña en conta que se usa as ligazóns de navegación a columna limparase.',
 'mergehistory-go' => 'Mostrar as edicións que se poden fusionar',
 'mergehistory-submit' => 'Fusionar as revisións',
@@ -2226,15 +2226,6 @@ Cómpre, polo menos, un dominio de nivel superior; por exemplo, "*.org".<br />
 'listusers-noresult' => 'Non se atopou ningún usuario.',
 'listusers-blocked' => '(bloqueado)',
 
-# Special:ActiveUsers
-'activeusers' => 'Lista de usuarios activos',
-'activeusers-intro' => 'Esta é unha lista cos usuarios que tiveron algún tipo de actividade {{PLURAL:$1|no último día|nos últimos $1 días}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|acción|accións}} {{PLURAL:$3|no último día|nos últimos $3 días}}',
-'activeusers-from' => 'Mostrar os usuarios que comecen por:',
-'activeusers-hidebots' => 'Agochar os bots',
-'activeusers-hidesysops' => 'Agochar os administradores',
-'activeusers-noresult' => 'Non se atopou ningún usuario.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Dereitos dun usuario segundo o seu grupo',
 'listgrouprights-summary' => 'A seguinte lista mostra os grupos de usuario definidos neste wiki, cos seus dereitos de acceso asociados.
@@ -2624,10 +2615,10 @@ Explique a razón específica do bloqueo (por exemplo, citando as páxinas concr
 ** Inserir información falsa
 ** Eliminar o contido de páxinas
 ** Ligazóns lixo a sitios externos
-** Inserir textos sen sentido ou inintelixíbeis
+** Inserir textos sen sentido ou inintelixibles
 ** Comportamento intimidatorio/acoso
 ** Abuso de múltiples contas de usuario
-** Nome de usuario inaceptábel',
+** Nome de usuario inaceptable',
 'ipb-hardblock' => 'Impedir que usuarios rexistrados editen desde este enderezo IP',
 'ipbcreateaccount' => 'Previr a creación de contas',
 'ipbemailban' => 'Impedir que o usuario envíe correos electrónicos',
@@ -2761,7 +2752,7 @@ Lembre [[Special:UnlockDB|eliminar o bloqueo]] unha vez completado o seu manteme
 O título vello vaise converter nunha páxina de redirección ao novo título.
 Pode actualizar automaticamente as redireccións que van dar ao título orixinal.
 Se escolle non facelo, asegúrese de verificar que non hai redireccións [[Special:DoubleRedirects|dobres]] ou [[Special:BrokenRedirects|crebadas]].
-Vostede é responsábel de asegurarse de que as ligazóns continúan a apuntar cara a onde se supón que deberían.
+Vostede é responsable de asegurarse de que as ligazóns continúan a apuntar cara a onde se supón que deberían.
 
 Teña en conta que a páxina '''non''' será trasladada se xa existe unha páxina co novo título, a menos que esta última sexa unha redirección e non teña historial de edicións.
 Isto significa que pode volver renomear unha páxina ao seu nome antigo se comete un erro, e que non pode sobrescribir unha páxina que xa existe.
@@ -2772,7 +2763,7 @@ por favor, asegúrese de que entende as consecuencias disto antes de proseguir."
 'movepagetext-noredirectfixer' => "Ao usar o formulario inferior vai cambiar o nome da páxina, movendo todo o seu historial ao novo nome.
 O título vello vaise converter nunha páxina de redirección ao novo título.
 Asegúrese de verificar que non hai redireccións [[Special:DoubleRedirects|dobres]] ou [[Special:BrokenRedirects|crebadas]].
-Vostede é responsábel de asegurarse de que as ligazóns continúan a apuntar cara a onde se supón que deberían.
+Vostede é responsable de asegurarse de que as ligazóns continúan a apuntar cara a onde se supón que deberían.
 
 Teña en conta que a páxina '''non''' será trasladada se xa existe unha páxina co novo título, a menos que esta última sexa unha redirección e non teña historial de edicións.
 Isto significa que pode volver renomear unha páxina ao seu nome antigo se comete un erro, e que non pode sobrescribir unha páxina que xa existe.
index a1e453c..d13f90e 100644 (file)
@@ -832,7 +832,7 @@ $2',
 עליכם להיכנס לאתר ולשנות את סיסמתכם בהקדם האפשרי. אם מישהו אחר ביקש סיסמה חדשה זו או אם נזכרתם בסיסמתכם
 ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמתכם הישנה.',
 'noemail' => 'לא רשומה כתובת דואר אלקטרוני עבור המשתמש "$1".',
-'noemailcreate' => 'עליכם לספק כתובת דואר אלקטרוני תקינה',
+'noemailcreate' => 'עליכם לספק כתובת דואר אלקטרוני תקינה.',
 'passwordsent' => 'סיסמה חדשה נשלחה לכתובת הדואר האלקטרוני הרשומה עבור "$1".
 אנא היכנסו חזרה לאתר אחרי שתקבלו אותה.',
 'blocked-mailpassword' => 'כתובת ה־IP שלכם חסומה מעריכה, ולפיכך אינכם מורשים להשתמש באפשרות שחזור הסיסמה כדי למנוע ניצול לרעה של התכונה.',
@@ -2318,15 +2318,6 @@ $1',
 'listusers-noresult' => 'לא נמצאו משתמשים.',
 'listusers-blocked' => '(חסום)',
 
-# Special:ActiveUsers
-'activeusers' => 'רשימת משתמשים פעילים',
-'activeusers-intro' => 'זוהי רשימת המשתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ביומיים האחרונים|ב־$1 הימים האחרונים}}.',
-'activeusers-count' => '{{PLURAL:$1|פעולה אחת|$1 פעולות}} ב{{PLURAL:$3|יום האחרון|יומיים האחרונים|־$3 הימים האחרונים}}',
-'activeusers-from' => 'הצגת משתמשים החל מ:',
-'activeusers-hidebots' => 'הסתרת בוטים',
-'activeusers-hidesysops' => 'הסתרת מפעילי מערכת',
-'activeusers-noresult' => 'לא נמצאו משתמשים.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'רשימת הרשאות לקבוצה',
 'listgrouprights-summary' => 'זוהי רשימה של קבוצות המשתמש המוגדרות באתר זה, עם ההרשאות של כל אחת.
index 765c9ae..f1bc100 100644 (file)
@@ -2213,15 +2213,6 @@ Podržani {{PLURAL:$2|protokol|protokoli}}: <code>$1</code> (default je http://
 'listusers-noresult' => 'Nema takvih suradnika.',
 'listusers-blocked' => '(blokiran)',
 
-# Special:ActiveUsers
-'activeusers' => 'Popis aktivnih suradnika',
-'activeusers-intro' => 'Ovo je popis suradnika koji su napravili neku aktivnost u {{PLURAL:$1|zadnji $1 dan|zadnja $1 dana|zadnjih $1 dana}}.',
-'activeusers-count' => '{{PLURAL:$1|nedavna $1 izmjena|nedavne $1 izmjene|nedavnih $1 izmjena}} u {{PLURAL:$3|posljednji $3 dan|posljednja $3 dana|posljednjih $3 dana}}',
-'activeusers-from' => 'Prikaži suradnike počevši od:',
-'activeusers-hidebots' => 'Sakrij botove',
-'activeusers-hidesysops' => 'Sakrij administratore',
-'activeusers-noresult' => 'Niti jedan suradnik nije nađen.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Prava suradničkih skupina',
 'listgrouprights-summary' => 'Ovo je popis suradničkih skupina određenih na ovoj wiki, s njihovim pripadajućim pravima.
index 0214e82..2bc316d 100644 (file)
@@ -630,8 +630,8 @@ Per favor aperi session de novo post reciper lo.',
 'blocked-mailpassword' => 'Tu adresse IP es blocate de facer modificationes, e pro impedir le abuso, le uso del function pro recuperar contrasignos es equalmente blocate.',
 'eauthentsent' => 'Un e-mail de confirmation ha essite inviate al adresse de e-mail specificate.
 Pro poter reciper altere e-mail a iste conto, tu debe sequer le instructiones in iste e-mail pro confirmar que le conto es realmente tue.',
-'throttled-mailpassword' => 'Un rememoration del contrasigno ha jam essite inviate intra le ultime {{PLURAL:$1|hora|$1 horas}}.
-Pro prevenir le abuso, solmente un rememoration de contrasigno essera inviate per {{PLURAL:$1|hora|$1 horas}}.',
+'throttled-mailpassword' => 'Un message pro le reinitialisation del contrasigno ha jam essite inviate intra le ultime {{PLURAL:$1|hora|$1 horas}}.
+Pro prevenir le abuso, solmente un message pro le reinitialisation del contrasigno essera inviate per {{PLURAL:$1|hora|$1 horas}}.',
 'mailerror' => 'Error de inviar e-mail: $1',
 'acct_creation_throttle_hit' => 'Le visitatores de iste wiki usante tu adresse IP ha create {{PLURAL:$1|1 conto|$1 contos}} durante le ultime die, e isto es le maximo permittite in iste periodo de tempore.
 A causa de isto, le visitatores usante iste adresse IP non pote crear nove contos al momento.',
@@ -684,7 +684,7 @@ Es possibile que tu ha ja cambiate tu contrasigno o requestate un nove contrasig
 
 # Special:PasswordReset
 'passwordreset' => 'Reinitialisar contrasigno',
-'passwordreset-text' => 'Complete iste formulario pro reciper un rememoration in e-mail del datos de tu conto.',
+'passwordreset-text' => 'Completa iste formulario pro reinitialisar tu contrasigno.',
 'passwordreset-legend' => 'Reinitialisar contrasigno',
 'passwordreset-disabled' => 'Le reinitialisation de contrasignos ha essite disactivate in iste wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Entra un del elementos de datos hic infra}}',
@@ -694,8 +694,8 @@ Es possibile que tu ha ja cambiate tu contrasigno o requestate un nove contrasig
 'passwordreset-capture-help' => 'Si tu marca iste quadrato, le e-mail (con le contrasigno temporari) non solmente essera inviate al usator, ma anque monstrate a te.',
 'passwordreset-email' => 'Adresse de e-mail:',
 'passwordreset-emailtitle' => 'Detalios del conto in {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Un persona (probabilemente tu, ab le adresse IP $1) requestava un rememoration del
-detalios de tu conto in {{SITENAME}} ($4). Le {{PLURAL:$3|conto|contos}} de usator sequente es
+'passwordreset-emailtext-ip' => 'Un persona (probabilemente tu, ab le adresse IP $1) requestava le reinitialisation de tu
+contrasigno de {{SITENAME}} ($4). Le {{PLURAL:$3|conto|contos}} de usator sequente es
 associate con iste adresse de e-mail:
 
 $2
@@ -2136,15 +2136,6 @@ Isto necessita specificar al minus le dominio de nivello superior, per exemplo "
 'listusers-noresult' => 'Nulle usator trovate.',
 'listusers-blocked' => '(blocate)',
 
-# Special:ActiveUsers
-'activeusers' => 'Lista de usatores active',
-'activeusers-intro' => 'Isto es un lista de usatores que habeva alcun typo de activitate intra le ultime $1 {{PLURAL:$1|die|dies}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|action|actiones}} in le ultime {{PLURAL:$3|die|$3 dies}}',
-'activeusers-from' => 'Presentar usatores a partir de:',
-'activeusers-hidebots' => 'Celar bots',
-'activeusers-hidesysops' => 'Celar administratores',
-'activeusers-noresult' => 'Nulle usator trovate.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Derectos del gruppos de usatores',
 'listgrouprights-summary' => 'Lo sequente es un lista de gruppos de usatores definite in iste wiki, con lor derectos de accesso associate.
index b8f27d7..864ce5c 100644 (file)
@@ -447,19 +447,19 @@ $messages = array(
 'dec' => 'Des',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategori|Kategori}}',
+'pagecategories' => '{{PLURAL:$1|Kategori}}',
 'category_header' => 'Halaman dalam kategori "$1"',
 'subcategories' => 'Subkategori',
 'category-media-header' => 'Media dalam kategori "$1"',
 'category-empty' => "''Saat ini, tidak terdapat halaman ataupun media dalam kategori ini.''",
-'hidden-categories' => '{{PLURAL:$1|Kategori tersembunyi|Kategori tersembunyi}}',
+'hidden-categories' => '{{PLURAL:$1|Kategori tersembunyi}}',
 'hidden-category-category' => 'Kategori tersembunyi',
-'category-subcat-count' => '{{PLURAL:$2|Kategori ini hanya memiliki satu subkategori berikut.|Kategori ini memiliki {{PLURAL:$1|subkategori|$1 subkategori}} berikut, dari total $2.}}',
-'category-subcat-count-limited' => 'Kategori ini memiliki {{PLURAL:$1|subkategori|$1 subkategori}} berikut.',
-'category-article-count' => '{{PLURAL:$2|Kategori ini hanya memiliki satu halaman berikut.|Kategori ini memiliki {{PLURAL:$1|halaman|$1 halaman}}, dari total $2.}}',
-'category-article-count-limited' => 'Kategori ini memiliki {{PLURAL:$1|satu halaman|$1 halaman}} berikut.',
-'category-file-count' => '{{PLURAL:$2|Kategori ini hanya memiliki satu berkas berikut.|Kategori ini memiliki {{PLURAL:$1|berkas|$1 berkas}} berikut, dari total $2.}}',
-'category-file-count-limited' => 'Kategori ini memiliki {{PLURAL:$1|berkas|$1 berkas}} berikut.',
+'category-subcat-count' => '{{PLURAL:$2|Kategori ini memiliki {{PLURAL:$1|$1 subkategori}} berikut, dari total $2.}}',
+'category-subcat-count-limited' => 'Kategori ini memiliki {{PLURAL:$1|$1 subkategori}} berikut.',
+'category-article-count' => '{{PLURAL:$2|Kategori ini memiliki {{PLURAL:$1|$1 halaman}}, dari total $2.}}',
+'category-article-count-limited' => 'Kategori ini memiliki {{PLURAL:$1|$1 halaman}} berikut.',
+'category-file-count' => '{{PLURAL:$2|Kategori ini memiliki {{PLURAL:$1|$1 berkas}} berikut, dari total $2.}}',
+'category-file-count-limited' => 'Kategori ini memiliki {{PLURAL:$1|$1 berkas}} berikut.',
 'listingcontinuesabbrev' => 'samb.',
 'index-category' => 'Halaman yang diindeks',
 'noindex-category' => 'Halaman yang tidak diindeks',
@@ -516,7 +516,7 @@ $messages = array(
 'searchbutton' => 'Cari',
 'go' => 'Tuju ke',
 'searcharticle' => 'Tuju ke',
-'history' => 'Halaman riwayat',
+'history' => 'Riwayat halaman',
 'history_short' => 'Versi terdahulu',
 'updatedmarker' => 'diubah sejak kunjungan terakhir saya',
 'printableversion' => 'Versi cetak',
@@ -529,8 +529,8 @@ $messages = array(
 'create-this-page' => 'Buat halaman ini',
 'delete' => 'Hapus',
 'deletethispage' => 'Hapus halaman ini',
-'undelete_short' => 'Batal hapus $1 {{PLURAL:$1|suntingan|suntingan}}',
-'viewdeleted_short' => 'Lihat {{PLURAL:$1|satu suntingan|$1 suntingan}} yang dihapus',
+'undelete_short' => 'Batal hapus {{PLURAL:$1|$1 suntingan}}',
+'viewdeleted_short' => 'Lihat {{PLURAL:$1|$1 suntingan}} yang dihapus',
 'protect' => 'Lindungi',
 'protect_change' => 'ubah',
 'protectthispage' => 'Lindungi halaman ini',
@@ -558,7 +558,7 @@ $messages = array(
 'redirectedfrom' => '(Dialihkan dari $1)',
 'redirectpagesub' => 'Halaman pengalihan',
 'lastmodifiedat' => 'Halaman ini terakhir diubah pada $2, $1.',
-'viewcount' => 'Halaman ini telah diakses sebanyak {{PLURAL:$1|satu kali|$1 kali}}.<br />',
+'viewcount' => 'Halaman ini telah diakses sebanyak {{PLURAL:$1|$1 kali}}.<br />',
 'protectedpage' => 'Halaman yang dilindungi',
 'jumpto' => 'Langsung ke:',
 'jumptonavigation' => 'navigasi',
@@ -594,7 +594,7 @@ $1',
 
 'badaccess' => 'Kesalahan hak akses',
 'badaccess-group0' => 'Anda tidak diizinkan untuk melakukan tindakan yang Anda minta.',
-'badaccess-groups' => 'Tindakan yang Anda minta dibatasi untuk pengguna dalam {{PLURAL:$2|kelompok|salah satu dari kelompok}}: $1.',
+'badaccess-groups' => 'Tindakan yang Anda minta dibatasi untuk pengguna dalam {{PLURAL:$2|kelompok}}: $1.',
 
 'versionrequired' => 'Dibutuhkan MediaWiki versi $1',
 'versionrequiredtext' => 'MediaWiki versi $1 dibutuhkan untuk menggunakan halaman ini. Lihat [[Special:Version|halaman versi]]',
@@ -607,11 +607,11 @@ $1',
 'youhavenewmessages' => 'Anda mempunyai $1 ($2).',
 'newmessageslink' => 'pesan baru',
 'newmessagesdifflink' => 'perubahan terakhir',
-'youhavenewmessagesfromusers' => 'Anda memiliki $1 dari {{PLURAL:$3||}}pengguna lain ($2).',
+'youhavenewmessagesfromusers' => 'Anda memiliki $1 dari {{PLURAL:$3|$3 pengguna lain}} ($2).',
 'youhavenewmessagesmanyusers' => 'Anda memiliki $1 dari pengguna lain ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1||}}pesan baru',
-'newmessagesdifflinkplural' => '{{PLURAL:$1||}}perubahan terakhir',
-'youhavenewmessagesmulti' => 'Anda mendapat beberapa pesan baru pada $1',
+'newmessageslinkplural' => '{{PLURAL:$1|pesan baru}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|perubahan}} terakhir',
+'youhavenewmessagesmulti' => 'Anda mendapat pesan baru pada $1',
 'editsection' => 'sunting',
 'editsection-brackets' => '[$1]',
 'editold' => 'sunting',
@@ -626,7 +626,7 @@ $1',
 'collapsible-expand' => 'Kembangkan',
 'thisisdeleted' => 'Lihat atau kembalikan $1?',
 'viewdeleted' => 'Lihat $1?',
-'restorelink' => '$1 {{PLURAL:$1|suntingan|suntingan}} yang telah dihapus',
+'restorelink' => '{{PLURAL:$1|$1 suntingan}} yang telah dihapus',
 'feedlinks' => 'Umpan:',
 'feed-invalid' => 'Tipe permintaan umpan tidak tepat.',
 'feed-unavailable' => 'Umpan sindikasi tidak tersedia',
@@ -654,7 +654,7 @@ $1',
 
 # Main script and global functions
 'nosuchaction' => 'Tidak ada tindakan tersebut',
-'nosuchactiontext' => 'Tindakan yang diminta oleh URL tersebut tidak valid. Anda mungkin salah mengetikkan URL, atau mengikuti suatu pranala yang tak betul. Hal ini juga mungkin mengindikasikan suatu bug pada perangkat lunak yang digunakan oleh {{SITENAME}}.',
+'nosuchactiontext' => 'Tindakan yang diminta oleh URL tersebut tidak valid. Anda mungkin salah mengetikkan URL, atau mengikuti suatu pranala yang tak benar. Hal ini juga mungkin mengindikasikan suatu bug pada perangkat lunak yang digunakan oleh {{SITENAME}}.',
 'nosuchspecialpage' => 'Tidak ada halaman istimewa tersebut',
 'nospecialpagetext' => '<strong>Anda meminta halaman istimewa yang tidak sah.</strong>
 
@@ -811,8 +811,8 @@ Silakan masuk log kembali setelah menerima surel tersebut.',
 'blocked-mailpassword' => 'Alamat IP Anda diblokir dari penyuntingan dan karenanya tidak diizinkan menggunakan fungsi pengingat kata sandi untuk mencegah penyalahgunaan.',
 'eauthentsent' => 'Sebuah surel untuk konfirmasi telah dikirim ke alamat surel.
 Anda harus mengikuti instruksi di dalam surel tersebut untuk melakukan konfirmasi bahwa alamat tersebut adalah benar kepunyaan Anda. {{SITENAME}} tidak akan mengaktifkan fitur surel jika langkah ini belum dilakukan.',
-'throttled-mailpassword' => 'Suatu pengingat kata sandi telah dikirimkan dalam {{PLURAL:$1|jam|$1 jam}} terakhir.
-Untuk menghindari penyalahgunaan, hanya satu kata sandi yang akan dikirimkan setiap {{PLURAL:$1|jam|$1 jam}}.',
+'throttled-mailpassword' => 'Suatu pengingat kata sandi telah dikirimkan dalam {{PLURAL:$1|$1 jam}} terakhir.
+Untuk menghindari penyalahgunaan, hanya satu kata sandi yang akan dikirimkan setiap {{PLURAL:$1|$1 jam}}.',
 'mailerror' => 'Kesalahan dalam mengirimkan surel: $1',
 'acct_creation_throttle_hit' => 'Pengunjung wiki ini dengan alamat IP yang sama dengan Anda telah membuat {{PLURAL:$1|1 akun|$1 akun}} dalam satu hari terakhir, hingga jumlah maksimum yang diijinkan.
 Karenanya, pengunjung dengan alamat IP ini tidak dapat lagi membuat akun lain untuk sementara.',
@@ -862,7 +862,7 @@ Anda mungkin telah berhasil mengganti kata sandi Anda atau telah meminta kata sa
 
 # Special:PasswordReset
 'passwordreset' => 'Setel ulang sandi',
-'passwordreset-text' => 'Lengkapi formulir ini untuk menerima surel pengingat detail akun Anda.',
+'passwordreset-text' => 'Lengkapi formulir ini untuk menyetel ulang kata sandi.',
 'passwordreset-legend' => 'Setel ulang sandi',
 'passwordreset-disabled' => 'Penyetelan ulang sandi telah dimatikan di wiki ini.',
 'passwordreset-pretext' => '{{PLURAL:$1||Masukkan salah satu data di bawah ini}}',
@@ -878,7 +878,7 @@ terkait dengan alamat surel ini:
 
 $2
 
-{{PLURAL:$3|Sandi sementara|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|satu hari|$5 hari}}.
+{{PLURAL:$3|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|$5 hari}}.
 Anda harus masuk dan memilih sandi baru sekarang. Jika orang lain membuat
 permintaan ini atau jika Anda ingat sandi asli dan tidak lagi
 ingin mengubahnya, Anda dapat mengabaikan pesan ini dan terus menggunakan sandi lama.',
@@ -887,15 +887,15 @@ ingin mengubahnya, Anda dapat mengabaikan pesan ini dan terus menggunakan sandi
 
 $2
 
-{{PLURAL:$3|Sandi sementara|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|satu hari|$5 hari}}.
+{{PLURAL:$3|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|$5 hari}}.
 Anda harus masuk dan memilih sandi baru sekarang. Jika orang lain membuat
 permintaan ini atau jika Anda ingat sandi asli dan tidak lagi
 ingin mengubahnya, Anda dapat mengabaikan pesan ini dan terus menggunakan sandi lama.',
 'passwordreset-emailelement' => 'Nama pengguna: $1
 Sandi sementara: $2',
-'passwordreset-emailsent' => 'Surel pengingat telah dikirimkan.',
-'passwordreset-emailsent-capture' => 'Surel pengingat, yang ditampilkan di bawah, telah dikirim.',
-'passwordreset-emailerror-capture' => 'Surel pengingat, yang ditampilkan di bawah, telah dihasilkan, tetapi gagal mengirimkannya ke pengguna: $1',
+'passwordreset-emailsent' => 'Surel setel ulang kata sandi telah dikirimkan.',
+'passwordreset-emailsent-capture' => 'Surel setel ulang kata sandi telah dikirim, yang ditampilkan di bawah.',
+'passwordreset-emailerror-capture' => 'Surel setel ulang kata sandi telah dihasilkan, yang ditampilkan di bawah, tetapi gagal mengirimkannya ke pengguna: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Ubah alamat surel',
@@ -2282,15 +2282,6 @@ Perlu sedikitnya satu domain tingkat atas, misalnya "*.org".<br />
 'listusers-noresult' => 'Pengguna tidak ditemukan.',
 'listusers-blocked' => '(diblokir)',
 
-# Special:ActiveUsers
-'activeusers' => 'Daftar pengguna aktif',
-'activeusers-intro' => 'Berikut adalah daftar pengguna yang memiliki suatu bentuk aktivitas selama paling tidak $1 {{PLURAL:$1|hari|hari}} terakhir.',
-'activeusers-count' => '$1 {{PLURAL:$1|aktivitas|aktivitas}} dalam {{PLURAL:$3|1 hari|$3 hari}} terakhir',
-'activeusers-from' => 'Tampilkan pengguna mulai dari:',
-'activeusers-hidebots' => 'Sembunyikan bot',
-'activeusers-hidesysops' => 'Sembunyikan pengurus',
-'activeusers-noresult' => 'Pengguna tidak ditemukan.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Daftar kelompok pengguna',
 'listgrouprights-summary' => 'Berikut adalah daftar kelompok pengguna yang terdapat di wiki ini, dengan daftar hak akses mereka masing-masing. Informasi lebih lanjut mengenai hak masing-masing dapat ditemukan di [[{{MediaWiki:Listgrouprights-helppage}}|halaman bantuan hak pengguna]].',
@@ -2746,9 +2737,9 @@ Alasan yang diberikan untuk pemblokiran $1 adalah: "$2"',
 'blocklog-showsuppresslog' => 'Pengguna ini telah diblokir dan disembunyikan sebelumnya. Log supresi disediakan di bawah untuk referensi:',
 'blocklogentry' => 'memblokir [[$1]] dengan waktu kedaluwarsa $2 $3',
 'reblock-logentry' => 'mengubah pemblokiran [[$1]] dengan waktu kedaluwarsa $2 $3',
-'blocklogtext' => 'Di bawah ko adolah log panyakek jo pambukaan sakek pado pangguno.
-Alamaik IP nan kanai sakek sacaro otomatis indak nampak dalam dafta ko.
-Lihek [[Special:BlockList|dafta panyakek]] untuak kasado pangguno nan koni kanai sakek.',
+'blocklogtext' => 'Di bawah ini adalah log pemblokiran dan pembukaan blokir terhadap pengguna.
+Alamat IP yang diblokir secara otomatis tidak terdapat di dalam daftar ini.
+Lihat [[Special:BlockList|daftar pemblokiran]] untuk semua pengguna yang saat ini diblokir.',
 'unblocklogentry' => 'menghilangkan blokir "$1"',
 'block-log-flags-anononly' => 'hanya pengguna anonim',
 'block-log-flags-nocreate' => 'pembuatan akun dimatikan',
@@ -4137,17 +4128,17 @@ Gambar ditampilkan dalam resolusi penuh dan tipe lain berkas akan dibuka langsun
 'sqlite-no-fts' => '$1 tanpa dukungan pencarian teks lengkap',
 
 # New logging system
-'logentry-delete-delete' => '$1 menghapus halaman $3',
-'logentry-delete-restore' => '$1 mengembalikan halaman $3',
-'logentry-delete-event' => '$1 mengubah ketertampilan {{PLURAL:$5||}} $5  log peristiwa di $3: $4',
-'logentry-delete-revision' => '$1 mengubah ketertampilan {{PLURAL:$5||}} $5  revisi di halaman $3: $4',
-'logentry-delete-event-legacy' => '$1 mengubah ketertampilan log peristiwa pada $3',
-'logentry-delete-revision-legacy' => '$1 mengubah ketertampilan revisi pada halaman $3',
-'logentry-suppress-delete' => '$1 mensupresi halaman $3',
-'logentry-suppress-event' => '$1 secara diam-diam mengubah ketertampilan  {{PLURAL:$5||}} $5  log peristiwa di $3: $4',
-'logentry-suppress-revision' => '$1 diam-diam mengubah ketertampilan {{PLURAL:$5||}} $5 revisi di halaman $3: $4',
-'logentry-suppress-event-legacy' => '$1 diam-diam mengubah ketertampilan log peristiwa pada $3',
-'logentry-suppress-revision-legacy' => '$1 diam-diam mengubah ketertampilan revisi pada halaman $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|menghapus}} halaman $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|mengembalikan}} halaman $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|mengubah}} tampilan {{PLURAL:$5|$5 log peristiwa}} di $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|mengubah}} tampilan {{PLURAL:$5|$5  revisi}} di halaman $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|mengubah}} tampilan log peristiwa pada $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|mengubah}} tampilan revisi pada halaman $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|menimpa}} halaman $3',
+'logentry-suppress-event' => '$1 secara diam-diam {{GENDER:$2|mengubah}} tampilan  {{PLURAL:$5|$5 log peristiwa}} di $3: $4',
+'logentry-suppress-revision' => '$1 diam-diam {{GENDER:$2|mengubah}} tampilan {{PLURAL:$5|$5 revisi}} di halaman $3: $4',
+'logentry-suppress-event-legacy' => '$1 diam-diam {{GENDER:$2|mengubah}} tampilan log peristiwa pada $3',
+'logentry-suppress-revision-legacy' => '$1 diam-diam {{GENDER:$2|mengubah}} tampilan revisi pada halaman $3',
 'revdelete-content-hid' => 'konten disembunyikan',
 'revdelete-summary-hid' => 'ringkasan suntingan disembunyikan',
 'revdelete-uname-hid' => 'nama pengguna disembunyikan',
@@ -4156,20 +4147,20 @@ Gambar ditampilkan dalam resolusi penuh dan tipe lain berkas akan dibuka langsun
 'revdelete-uname-unhid' => 'nama pengguna tidak disembunyikan',
 'revdelete-restricted' => 'akses telah dibatasi untuk opsis',
 'revdelete-unrestricted' => 'pembatasan akses opsis dihapuskan',
-'logentry-move-move' => '$1 memindahkan halaman $3 ke $4',
-'logentry-move-move-noredirect' => '$1 memindahkan halaman $3 ke $4 tanpa membuat pengalihan',
-'logentry-move-move_redir' => '$1 memindahkan halaman $3 ke $4 menimpa pengalihan lama',
-'logentry-move-move_redir-noredirect' => '$1 memindahkan halaman $3 ke $4 menimpa pengalihan lama tanpa membuat pengalihan',
-'logentry-patrol-patrol' => '$1 menandai revisi $4 dari halaman $3 terpatroli',
-'logentry-patrol-patrol-auto' => '$1 secara otomatis menandai revisi $4 dari halaman $3 terpatroli',
-'logentry-newusers-newusers' => 'Akun pengguna $1 telah dibuat',
-'logentry-newusers-create' => '$1 membuat akun pengguna',
-'logentry-newusers-create2' => '$1 membuat akun pengguna $3',
-'logentry-newusers-byemail' => 'Akun pengguna  $3  diciptakan oleh  $1  dan password dikirim melalui surel',
-'logentry-newusers-autocreate' => 'Akun $1 dibuat secara otomatis',
-'logentry-rights-rights' => '$1 mengubah keanggotaan grup $3 dari $4 menjadi $5',
-'logentry-rights-rights-legacy' => '$1 mengubah keanggotaan grup $3',
-'logentry-rights-autopromote' => '$1 secara otomatis dipromosikan dari $4 menjadi $5',
+'logentry-move-move' => '$1 {{GENDER:$2|memindahkan}} halaman $3 ke $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|memindahkan}} halaman $3 ke $4 tanpa membuat pengalihan',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|memindahkan}} halaman $3 ke $4 menimpa pengalihan lama',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|memindahkan}} halaman $3 ke $4 menimpa pengalihan lama tanpa membuat pengalihan',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|menandai}} revisi $4 dari halaman $3 terpatroli',
+'logentry-patrol-patrol-auto' => '$1 otomatis {{GENDER:$2|menandai}} revisi $4 dari halaman $3 terpatroli',
+'logentry-newusers-newusers' => 'Akun pengguna $1 telah {{GENDER:$2|dibuat}}',
+'logentry-newusers-create' => '$1 {{GENDER:$2|membuat}} akun pengguna',
+'logentry-newusers-create2' => '$1 {{GENDER:$2|membuat}} akun pengguna $3',
+'logentry-newusers-byemail' => 'Akun pengguna  $3  {{GENDER:$2|dibuat}} oleh  $1  dan password dikirim melalui surel',
+'logentry-newusers-autocreate' => 'Akun $1 {{GENDER:$2|dibuat}} secara otomatis',
+'logentry-rights-rights' => '$1 {{GENDER:$2|mengubah}} keanggotaan grup $3 dari $4 menjadi $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|mengubah}} keanggotaan grup $3',
+'logentry-rights-autopromote' => '$1 secara otomatis {{GENDER:$2|dipromosikan}} dari $4 menjadi $5',
 'rightsnone' => '(tidak ada)',
 
 # Feedback
index 9a96023..3258d5c 100644 (file)
@@ -538,11 +538,11 @@ Awan ti esurat a naipatulod para kadagiti sumaganad a langa.',
 'invalidemailaddress' => 'Ti esurat a pagtaengam ket saan a maawat ngamin ket kasla adda ti saan a napudno a nakabuklan.
 Pangngaasi nga ikkam ti nasayaat a nakabuklan a pagtaengan wenno ikkatem amin dagiti naikabil mo.',
 'cannotchangeemail' => 'Dagiti pakabilangan nga esurat a pagtaengan ket saan a mabaliwan ditoy a wiki.',
-'emaildisabled' => 'Daytoy a pagsaaadan ket saan a makaipatuod kadagiti e-surat.',
+'emaildisabled' => 'Daytoy a pagsaaadan ket saan a makaipatulod kadagiti esurat.',
 'accountcreated' => 'Naaramiden ti pakabilangan',
 'accountcreatedtext' => 'Ti pakabilangan ti agar-aramat para iti  $1 ket naaramiden.',
 'createaccount-title' => 'Panagaramid iti pakabilangan para iti {{SITENAME}}',
-'createaccount-text' => 'Adda nagaramid ti pakabilangan para iti e-surat a pagtaengam idiay {{SITENAME}} ($4) nga agnagan  ti "$2", iti kontrasenias a "$3".
+'createaccount-text' => 'Adda nagaramid ti pakabilangan para iti esurat a pagtaengam idiay {{SITENAME}} ($4) nga agnagan  ti "$2", iti kontrasenias a "$3".
 Nasken a sumrekka ken sukatam ti kontraseniasmo tattan.
 
 Mabalinmo ti saan a mangikaskaso ti daytoy a mensahe, no biddut a naaramid daytoy a pakabilangan.',
@@ -587,7 +587,7 @@ Mabalin a nagballigi ti panagsukatmo ti kontrasenias wenno nagkiddaw ti baro a t
 'passwordreset-username' => 'Nagan ti agar-aramat:',
 'passwordreset-domain' => 'Pagturayan:',
 'passwordreset-capture' => 'Kitaem ti nagbanagan ti esurat?',
-'passwordreset-capture-help' => 'No markaam daytoy a kahon, ti e-surat (nga adda ti temporario a kontrasenias) ket maipakita kenka ken maipatulod iti agar-aramat.',
+'passwordreset-capture-help' => 'No markaam daytoy a kahon, ti esurat (nga adda ti temporario a kontrasenias) ket maipakita kenka ken maipatulod iti agar-aramat.',
 'passwordreset-email' => 'Esurat a pagtaengan:',
 'passwordreset-emailtitle' => 'Salaysay ti pakabilangan iti {{SITENAME}}',
 'passwordreset-emailtext-ip' => 'Adda (baka sika, ti naggapuan ti IP a pagtaengan $1) a nagkiddaw ti maysa a panangidisso manen ti kontrasenias para iti {{SITNAME}} ($4) . {{PLURAL:$3|Ti |Dagiti}} sumaganad a pakabilangan ti agar-aramat ket
@@ -596,9 +596,9 @@ nakairaman iti daytoy nga esurat a pagtaengan:
 $2
 
 {{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso  {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
-Sumrekka kuman ta agpili ka ti baro a kontrasenias mo tattan. No adda met sabali a nagaramid daytoy a 
-panagkiddaw, wenno malagip mo ti dati a kontrasenias mo, ket saan mo a kayaten a sukatan, saan mo nga ikaskaso daytoy a mensahe ken 
-agtuloy ka nga agusar ti daan a kontrasenias.',
+Sumrekka kuman ta agpilika ti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a 
+panagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ket saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken 
+agtuloyka nga agusar ti daan a kontrasenias.',
 'passwordreset-emailtext-user' => 'Daytoy nga  agar-aramat $1 iti {{SITENAME}} ket nagkiddaw ti maysa a panangidisso manen ti bukodmo a kontrasenias para iti {{SITENAME}}
 ($4) .  {{PLURAL:$3|Ti|Dagiti}} sumaganad a pakabilanagn ti agar-aramat ket
 nakairaman iti daytoy nga esurat a pagtaengan:
@@ -677,7 +677,7 @@ Ti rason ket ''$2''.
 
 Mabalinmo a kontaken ni $1 wenno sabali pay nga [[{{MediaWiki:Grouppage-sysop}}|administrador]] no kayatmo a maipalawag daytoy a panag-serra.
 Dimo mabalin nga aramaten ti ramit nga esuratan daytoy nga agar-aramat malaksid no adda napudno nga esurat a pagtaengan a naipan iti [[Special:Preferences|pakabilangan ti kaykayatmo]] ken no saanka a naparitan nga agaramat iti daytoy.
-Ti agdama nga IP a pagtaengam ket $3, ti naserraan nga ID ket #$5. Pangngaasim nga iramanmo nga ited ti ania man wenno agpada kadagitoy iti ania man a panagsaludsodmo.",
+Ti agdama nga IP a pagtaengam ket $3, ti naserraan nga ID ket #$5. Pangngaasim nga iramanmo nga ited ti aniaman wenno agpada kadagitoy iti aniaman a panagsaludsodmo.",
 'autoblockedtext' => 'Ti IP a pagtaengam ket na-automatiko a naserraan ngamin ket inusar ti sabali nga agar-aramat, a sinerraan ni $1.
 Ti rason nga inted ket:
 
@@ -702,7 +702,7 @@ Pangngaasim nga ikabil ken ipapudnom ti esuratmo idiay [[Special:Preferences|kay
 Mabalin a naiyalis wenno naikkat bayat idi kitkitaem ti panid.',
 'loginreqtitle' => 'Masapul ti sumrek',
 'loginreqlink' => 'sumrek',
-'loginreqpagetext' => 'Nasken a $1 ka tapno makakitaka kadagiti sabsabali a pampanid.',
+'loginreqpagetext' => 'Naskenka a $1 tapno makakitaka kadagiti sabsabali a pampanid.',
 'accmailtitle' => 'Naipatuloden ti kontrasenias.',
 'accmailtext' => "Ti kontrasenias para ken ni [[User talk:$1|$1]] ket naipatuloden ken ni $2.
 
@@ -722,9 +722,9 @@ Mabalinmo ti [[Special:Search/{{PAGENAME}}|agsapul iti kastoy a titulo ti panid]
 wenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} urnosem daytoy a panid].',
 'noarticletext-nopermission' => 'Awan ti agdama  a linaon daytoy a panid.
 Mabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk para iti titulo ti daytoy a panid]] kadagiti dadduma a panid, wenno <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan]</span>, ngem awan ti pammalubosmo a mangpartuat ti daytoy a panid.',
-'missing-revision' => 'Ti panagbalbaliw ti #$1 tipanid a nanaganan ti "{{PAGENAME}}" ket awan.
+'missing-revision' => 'Ti panagbalbaliw ti #$1 iti daytoy a panid a nanaganan ti "{{PAGENAME}}" ket awan.
 
-Daytoy ket kadawyan a gapuanan babaen ti samaganad a panilpo ti baak a pakasaritaan iti maysa a panid a naikkaten.
+Daytoy ket kadawyan a gapuanan babaen ti sumaganad a panilpo ti baak a pakasaritaan iti maysa a naikkaten a panid.
 Dagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].',
 'userpage-userdoesnotexist' => 'Ti pakabilangan ti agar-aramat "$1" ket saan a nakarehistro. 
 Pangngaasi a kitaem no kayatmo ti agaramid/urnosen daytoy a panid.',
@@ -854,8 +854,8 @@ Adda koman basbasit ngem $2 {{PLURAL:$2|a panagtawtawag|kadagiti panagtawtawag}}
 'post-expand-template-inclusion-warning' => "'''Ballaag:''' Dakkel unay ti nairaman a kadakkel ti plantilia.
 Adda dagiti plantilia a saanto a mairaman.",
 'post-expand-template-inclusion-category' => 'Pampanid nga ayan ti plantilia a  nagsobra ti kadakkel ti rukod a nairaman',
-'post-expand-template-argument-warning' => "'''Ballaag:''' Daytoy a panid ket aglaon ti saan a basbasit ngem maysa a panagpalawag a plantilia a dakkel unay ti panagpadakkel na.
-Dagitoy a panagpalawag  ket naikkaten.",
+'post-expand-template-argument-warning' => "'''Ballaag:''' Daytoy a panid ket aglaon ti saan a basbasit ngem maysa a panangipalawag ti plantilia a dakkel unay ti panagpadakkelna.
+Dagitoy a panangipalawag ket naikkaten.",
 'post-expand-template-argument-category' => 'Dagiti panid a naglaon ti naikkat a plantilia kadagiti kasinnungat',
 'parser-template-loop-warning' => 'Adda nasarakan a silo ti plantilia: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Ti kinauneg ti panagdullit ti plantilia ket nagpatingga ti napalabes ($1)',
@@ -1162,7 +1162,7 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 'prefs-resetpass' => 'Sukatan ti kontrasenias',
 'prefs-changeemail' => 'Sukatan ti esurat a pagtaengan',
 'prefs-setemail' => 'Ikabil ti esurat a pagtaengan',
-'prefs-email' => 'Pagpilian ti e-surat',
+'prefs-email' => 'Pagpilian ti esurat',
 'prefs-rendering' => 'Tabas',
 'saveprefs' => 'Idulin',
 'resetprefs' => 'Dalusan dagiti saan a naidulin a sinuksukatan',
@@ -1345,7 +1345,7 @@ Ti esurat a pagtaengam ket saan a maipakita kadagiti agar-aramat nga agkontak ke
 'right-hideuser' => 'Serraan ti maysa a nagan ti agar-aramat, ilemmeng manipud ti publiko',
 'right-ipblock-exempt' => 'Labsan dagiti IP a serra, dagiti automatiko a serra ken dagiti nasakup a serra.',
 'right-proxyunbannable' => 'Labsan dagiti automatiko a serra dagiti proxie',
-'right-unblockself' => 'Ikkaten ti panaka-serra kaniada',
+'right-unblockself' => 'Ikkaten ti pannaka-serra kaniada',
 'right-protect' => 'Sukatan dagiti lessaad ti salaknib ken dagiti panid a nasalakniban ti panag-urnos',
 'right-editprotected' => 'Urnosen dagiti nasalakniban a panid (nga awan ti sariap a salaknib")',
 'right-editinterface' => 'Urnosen ti "interface" ti agar-aramat',
@@ -2018,15 +2018,6 @@ Masapul ti kangatuan a pagturayan, a kaspagarigan "*.org".<br />
 'listusers-noresult' => 'Awan ti nasarakan nga agar-aramat.',
 'listusers-blocked' => '(naserraan)',
 
-# Special:ActiveUsers
-'activeusers' => 'Listaan dagiti nasiglat nga agar-aramat',
-'activeusers-intro' => 'Daytoy ti listaan dagiti agar-aramat nga adda inararamidda kadagiti napalabas a $1 {{PLURAL:$1|nga aldaw|nga alaldaw}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|a tignay|tigtignay}} idi kalpasan ti {{PLURAL:$3|nga aldaw|$3 nga alaldaw}}',
-'activeusers-from' => 'Iparang dagiti agar-aramat a mangrugi iti:',
-'activeusers-hidebots' => 'Ilemmeng dagiti bot',
-'activeusers-hidesysops' => 'Ilemmeng dagiti administrador',
-'activeusers-noresult' => 'Awan ti nasarakan nga agar-aramat.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Dagiti karbengan ti grupo ti agar-aramat',
 'listgrouprights-summary' => 'Dagiti sumaganad a listaan ti bunggoy ti agar-aramat a naipalawag iti daytoy a wiki, a nairaman dagiti karbengan ti panagserrekda.
index 19c2042..c663628 100644 (file)
@@ -2193,15 +2193,6 @@ Vedi anche le [[Special:WantedCategories|categorie richieste]].',
 'listusers-noresult' => 'Nessun utente risponde ai criteri impostati.',
 'listusers-blocked' => '(bloccato)',
 
-# Special:ActiveUsers
-'activeusers' => 'Elenco degli utenti attivi',
-'activeusers-intro' => 'Questo è un elenco di utenti che hanno avuto qualche tipo di attività da $1 {{PLURAL:$1|giorno|giorni}} a questa parte.',
-'activeusers-count' => "$1 {{PLURAL:$1|azione|azioni}} {{PLURAL:$3|nell'ultimo giorno|negli ultimi $3 giorni}}",
-'activeusers-from' => 'Mostra gli utenti a partire da:',
-'activeusers-hidebots' => 'Nascondi i bot',
-'activeusers-hidesysops' => 'Nascondi gli amministratori',
-'activeusers-noresult' => 'Nessun utente risponde ai criteri impostati.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Diritti del gruppo utente',
 'listgrouprights-summary' => "Di seguito sono elencati i gruppi utente definiti per questo sito, con i diritti d'accesso loro associati.
@@ -3838,7 +3829,7 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 
 # Special:BlankPage
 'blankpage' => 'Pagina vuota',
-'intentionallyblankpage' => 'Questa pagina è lasciata volutamente vuota ed è usata per benchmark, ecc.',
+'intentionallyblankpage' => 'Questa pagina è lasciata volutamente vuota.',
 
 # External image whitelist
 'external_image_whitelist' => " #Lasciare questa riga esattamente com'è<pre>
index 1afc66c..fe96f9c 100644 (file)
@@ -2380,15 +2380,6 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'listusers-noresult' => '利用者が見つかりませんでした。',
 'listusers-blocked' => '(ブロック中)',
 
-# Special:ActiveUsers
-'activeusers' => '活動中の利用者一覧',
-'activeusers-intro' => 'これは過去 $1 {{PLURAL:$1|日|日間}}に何らかの活動をした利用者の一覧です。',
-'activeusers-count' => '過去 {{PLURAL:$3|1 日|$3 日間}}に $1 {{PLURAL:$1|回の操作}}',
-'activeusers-from' => '最初に表示する利用者:',
-'activeusers-hidebots' => 'ボットを隠す',
-'activeusers-hidesysops' => '管理者を隠す',
-'activeusers-noresult' => '利用者が見つかりませんでした。',
-
 # Special:ListGroupRights
 'listgrouprights' => '利用者グループの権限',
 'listgrouprights-summary' => '以下は、このウィキに登録されている利用者グループと、それぞれに割り当てられている権限の一覧です。
@@ -2617,7 +2608,7 @@ $2による直前の版へ変更されました。',
 ページ「'''$1'''」の現在の状態は以下の通りです:",
 'protect-cascadeon' => 'このページは現在、カスケード保護が有効になっている以下の{{PLURAL:$1|ページ|ページ群}}から読み込まれているため、保護されています。
 このページの保護レベルを変更できますが、カスケード保護には影響しません。',
-'protect-default' => 'ã\81\99ã\81¹ã\81¦ã\81®å\88©ç\94¨è\80\85ã\82\92許可',
+'protect-default' => 'ã\81\99ã\81¹ã\81¦ã\81®å\88©ç\94¨è\80\85ã\81«許可',
 'protect-fallback' => '「$1」権限を持つ利用者のみに許可',
 'protect-level-autoconfirmed' => '自動承認された利用者のみに許可',
 'protect-level-sysop' => '管理者のみに許可',
@@ -2808,7 +2799,7 @@ $1',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]]をブロックしました。<br />
 [[Special:BlockList|ブロックの一覧]]を参照してください。',
 'ipb-blockingself' => '自分自身をブロックしようとしています! 本当に実行しますか?',
-'ipb-confirmhideuser' => '秘匿が有効になっている利用者をブロックしようとしています。実行すると、すべてのリストやログでこの利用者名が表示されません。本当に実行しますか?',
+'ipb-confirmhideuser' => '秘匿が有効になっている利用者をブロックしようとしています。実行すると、すべての一覧や記録項目で利用者名が表示されません。本当に実行しますか?',
 'ipb-edit-dropdown' => 'ブロック理由を編集',
 'ipb-unblock-addr' => '$1のブロックを解除',
 'ipb-unblock' => '利用者またはIPアドレスのブロックを解除',
@@ -3058,7 +3049,7 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 # Thumbnails
 'thumbnail-more' => '拡大',
 'filemissing' => 'ファイルがありません',
-'thumbnail_error' => 'サムネイルの作成中にエラーが発生しました: $1',
+'thumbnail_error' => 'サムネイルの作成エラー: $1',
 'djvu_page_error' => 'DjVuページが範囲外です',
 'djvu_no_xml' => 'DjVuファイルのXMLデータを取得できません',
 'thumbnail-temp-create' => '一時的なサムネイルファイルを作成できません',
@@ -4253,7 +4244,7 @@ MediaWikiは、有用であることを期待して配布されていますが
 # Database error messages
 'dberr-header' => 'このウィキには問題があります',
 'dberr-problems' => '申し訳ありません!
-このウェブサイトに技術的な問題が発生しています。',
+このウェブサイトに技術的な障害が発生しています。',
 'dberr-again' => '数分間待った後、もう一度読み込んでください。',
 'dberr-info' => '(データベースサーバー $1 に接続できませんでした)',
 'dberr-usegoogle' => '元に戻るまで、Googleを利用して検索できます。',
index d012011..239d55d 100644 (file)
@@ -659,9 +659,8 @@ $2',
 'eauthentsent' => 'დამადასტურებელი შეტყობინება გაიგზავნა თქვენს მიერ მითითებულ ელ. ფოსტის მისამართზე.
 სანამ ნებისმიერი სხვა შეტყობინება გაიგზავნებოდეს თქვენს ანგარიშზე, გთხოვთ მიჰყვეთ ელ.
 ფოსტაში მითითებულ ინსტრუქციებს, რათა დაადასტუროთ რომ ანგარიში ნამდვილად თქვენია.',
-'throttled-mailpassword' => 'პაროლის შეხსენება უკვე გაგზავნილია ბოლო $1 საათის განმავლობაში.
-ბოროტად გამოყენების თავიდან აცილებისთვის, მხოლოდ ერთი შეხსენება იგზავნება ყოველ
-$1 საათში.',
+'throttled-mailpassword' => 'პაროლის შეხსენება უკვე გაგზავნილია ბოლო {{PLURAL:$1|საათის|$1 საათის}} განმავლობაში.
+ბოროტად გამოყენების თავიდან აცილებისთვის, მხოლოდ ერთი შეხსენება იგზავნება ყოველ {{PLURAL:$1|საათში|$1 საათში}}.',
 'mailerror' => 'შეცდომა ფოსტის გაგზავნაში: $1',
 'acct_creation_throttle_hit' => '24 საათის განმავლობაში თქვენი IP-მისამართითან {{PLURAL:$1|შეიქმნა $1 ანგარიში|შეიქმნა $1 ანგარიშები|შეიქმნა $1 ანგარიშის}}, რაც არის აკრძალული დროის ამ მონაკვეთისთის.
 აქედან გამომდინარე თქვენი IP-მისამართის მქონე მომხმარებლები ვეღარ შექმნიან ანგარიშები.',
@@ -711,7 +710,7 @@ $1 საათში.',
 
 # Special:PasswordReset
 'passwordreset' => 'პაროლის აღდგენა',
-'passwordreset-text' => 'á\83¨á\83\94á\83\90á\83\95á\83¡á\83\94á\83\97 á\83\94á\83¡ á\83¤á\83\9dá\83 á\83\9bá\83\90, á\83 á\83\90á\83\97á\83\90 á\83\94á\83\9a\83¤á\83\9dá\83¡á\83¢á\83\98á\83\97 á\83\9bá\83\98á\83\98á\83¦á\83\9dá\83\97 á\83¨á\83\94á\83®á\83¡á\83\94á\83\9cá\83\94á\83\91á\83\90 á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83\90á\83\9cá\83\92á\83\90á\83 á\83\98á\83¨á\83\98á\83¡ á\83\9eá\83\90á\83 á\83\90á\83\9bá\83\94á\83¢á\83 á\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83¡á\83\90á\83®á\83\94á\83\91.',
+'passwordreset-text' => 'á\83¨á\83\94á\83\90á\83\95á\83¡á\83\94á\83\97 á\83\94á\83¡ á\83¤á\83\9dá\83 á\83\9bá\83\90, á\83 á\83\90á\83\97á\83\90 á\83\99á\83\95á\83\9aá\83\90á\83\95 á\83\93á\83\90á\83\90á\83§á\83\94á\83\9cá\83\9dá\83\97 á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98.',
 'passwordreset-legend' => 'პაროლის აღდგენა',
 'passwordreset-disabled' => 'ამ ვიკიში პაროლის კვლავ დაყენების ფუნქცია გამორთულია.',
 'passwordreset-pretext' => '{{PLURAL:$1||შეიყვანეთ ქვემოთ მოცემულ მონაცემთა ერთ-ერთი ნაწილი.}}',
@@ -722,32 +721,32 @@ $1 საათში.',
 'passwordreset-email' => 'ელ. ფოსტის მისამართი:',
 'passwordreset-emailtitle' => 'ანგარიშის მონაცემები {{SITENAME}}-თვის',
 'passwordreset-emailtext-ip' => 'ვიღაცამ (შესაძლოა თქვენ, ამ IP-მისამართიდან $1) მოითხოვა თქვენი 
\83\90á\83\9cá\83\92á\83\90á\83 á\83\98á\83¨á\83\98á\83¡ á\83\93á\83\94á\83¢á\83\90á\83\9aá\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83®á\83¡á\83\94á\83\9cá\83\94á\83\91á\83\90 {{SITENAME}}-á\83\97á\83\95á\83\98á\83¡ ($4).
\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83\97á\83\90á\83\95á\83\98á\83\93á\83\90á\83\9c á\83\93á\83\90á\83§á\83\94á\83\9cá\83\94á\83\91á\83\90 á\83¡á\83\90á\83\98á\83¢á\83\98á\83¡á\83\90á\83\97á\83\95á\83\98á\83¡ {{SITENAME}} ($4).
 {{PLURAL:$3|შემდეგი ანგარიში მიბმულია|შემდეგი ანგარიშები მიბმულია}} ამ ელ.ფოსტის მისამართზე:
 
 $2
 
-{{PLURAL:$3|ეს დროებითი პაროლი|ეს დროებითი პაროლები}} იმოქმედებს {{PLURAL:$5|$5 დღე}}.
+{{PLURAL:$3|ეს დროებითი პაროლი|ეს დროებითი პაროლები}} იმოქმედებს {{PLURAL:$5|ერთი დღე|$5 დღე}}.
 თქვენ უნდა შეხვიდეთ სისტემაში და აირჩიოთ ახალი პაროლი.
 თუ თქვენ არ გაგიკეთებიათ აღნიშნული მოთხოვნა, ან გაიხსენეთ თქვენი პაროლი
 და აღარ გსურთ მისი შეცვლა, მაშინ შეგიძლიათ იგნორირება გაუკეთოთ ამ შეტყობინებას
 და გააგრძელოთ თქვენი ძველი პაროლის გამოყენება.',
 'passwordreset-emailtext-user' => 'მომხმარებელმა $1 პროექტიდან {{SITENAME}} მოითხოვა თქვენი 
\83\90á\83\9cá\83\92á\83\90á\83 á\83\98á\83¨á\83\98á\83¡ á\83\93á\83\94á\83¢á\83\90á\83\9aá\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83®á\83¡á\83\94á\83\9cá\83\94á\83\91á\83\90 {{SITENAME}}-á\83\97á\83\95á\83\98á\83¡ ($4).
\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83\97á\83\90á\83\95á\83\98á\83\93á\83\90á\83\9c á\83\93á\83\90á\83§á\83\94á\83\9cá\83\94á\83\91á\83\90 á\83¡á\83\90á\83\98á\83¢á\83\98á\83¡á\83\90á\83\97á\83\95á\83\98á\83¡ {{SITENAME}} ($4).
 {{PLURAL:$3|შემდეგი ანგარიში მიბმულია|შემდეგი ანგარიშები მიბმულია}} ამ ელ.ფოსტის მისამართზე:
 
 $2
 
-{{PLURAL:$3|ეს დროებითი პაროლი|ეს დროებითი პაროლები}} იმოქმედებს {{PLURAL:$5|$5 დღე}}.
+{{PLURAL:$3|ეს დროებითი პაროლი|ეს დროებითი პაროლები}} იმოქმედებს {{PLURAL:$5|ერთი დღე|$5 დღე}}.
 თქვენ უნდა შეხვიდეთ სისტემაში და აირჩიოთ ახალი პაროლი.
 თუ თქვენ არ გაგიკეთებიათ აღნიშნული მოთხოვნა, ან გაიხსენეთ თქვენი პაროლი
 და აღარ გსურთ მისი შეცვლა, მაშინ შეგიძლიათ იგნორირება გაუკეთოთ ამ შეტყობინებას
 და გააგრძელოთ თქვენი ძველი პაროლის გამოყენება.',
 'passwordreset-emailelement' => 'მომხმარებლის სახელი: $1
 დროებითი პაროლი: $2',
-'passwordreset-emailsent' => 'á\83¨á\83\94á\83¡á\83\90á\83®á\83¡ენებელი ელ.ფოსტა გაიგზავნა.',
-'passwordreset-emailsent-capture' => 'á\83¥á\83\95á\83\94á\83\9bá\83\9dá\83\97 á\83\9cá\83\90á\83©á\83\95á\83\94á\83\9cá\83\94á\83\91á\83\98 á\83¨á\83\94á\83¡á\83\90á\83®á\83¡ენებელი წერილი გაიგზავნა.',
-'passwordreset-emailerror-capture' => 'á\83¥á\83\95á\83\94á\83\9bá\83\9dá\83\97 á\83\9bá\83\9dá\83ªá\83\94á\83\9bá\83£á\83\9aá\83\98á\83\90 á\83¨á\83\94á\83¥á\83\9bá\83\9cá\83\98á\83\9aá\83\98 á\83¨á\83\94á\83¡á\83\90á\83®á\83¡ენებელი წერილი, რომლის გაგზავნაც ვერ მოხერხდა: $1 გამო',
+'passwordreset-emailsent' => 'á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83\97á\83\90á\83\95á\83\98á\83\93á\83\90á\83\9c á\83\93á\83\90á\83¡á\83\90á\83§ენებელი ელ.ფოსტა გაიგზავნა.',
+'passwordreset-emailsent-capture' => 'á\83¥á\83\95á\83\94á\83\9bá\83\9dá\83\97 á\83\9cá\83\90á\83©á\83\95á\83\94á\83\9cá\83\94á\83\91á\83\98 á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83\97á\83\90á\83\95á\83\98á\83\93á\83\90á\83\9c á\83\93á\83\90á\83¡á\83\90á\83§ენებელი წერილი გაიგზავნა.',
+'passwordreset-emailerror-capture' => 'á\83¥á\83\95á\83\94á\83\9bá\83\9dá\83\97 á\83\9bá\83\9dá\83ªá\83\94á\83\9bá\83£á\83\9aá\83\98á\83\90 á\83¨á\83\94á\83¥á\83\9bá\83\9cá\83\98á\83\9aá\83\98 á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83\93á\83\90á\83¡á\83\90á\83§ენებელი წერილი, რომლის გაგზავნაც ვერ მოხერხდა: $1 გამო',
 
 # Special:ChangeEmail
 'changeemail' => 'ელ-ფოსტის მისამართის შეცვლა',
@@ -1961,6 +1960,9 @@ $1',
 ამის ნაცვლად, სავარაუდოდ, ისისნი უნდა მიუთითებდნენ შესაბამის კონკრეტულ სტატიაზე.<br />
 გვერდი ითვლება მრავამნიშვნელოვნად, თუ მასში განთავსებულია თარგი, რომლის სახელიც მითითებულია გვერდზე [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'გვერდები განსაზღვრული თვისებით',
+'pageswithprop-legend' => 'გვერდები განსაზღვრული თვისებით',
+'pageswithprop-text' => 'აქ მოცემულია გვერდები, რომელთაც ხელით განესაზღვრათ გარკვეული თვისებები.',
 'pageswithprop-prop' => 'თვისების სახელი:',
 'pageswithprop-submit' => 'მიდი',
 
@@ -2129,15 +2131,6 @@ $1',
 'listusers-noresult' => 'მომხმარებელი ვერ ვიპოვეთ.',
 'listusers-blocked' => '(დაბლოკილია)',
 
-# Special:ActiveUsers
-'activeusers' => 'აქტიურ მომხმარებელთა სია',
-'activeusers-intro' => 'ეს არის მომხმარებელთა სია, რომელთაც აქვს წვლილი უკანასკნელი $1 {{PLURAL:$1|დღის|დღის}} განმავლობაში.',
-'activeusers-count' => '$1 {{PLURAL:$1|მოქმედება|მოქმედება}} {{PLURAL:$3|დღის|$3 დღის}} განმავლობაში.',
-'activeusers-from' => 'მომხმარებელთა ჩვენება, დაწყებული:',
-'activeusers-hidebots' => 'რობოტების დამალვა',
-'activeusers-hidesysops' => 'ადმინისტრატორების დამალვა',
-'activeusers-noresult' => 'მომხმარებლები არ არიან ნაპოვნი.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'მომხმარებელთა ჯგუფების უფლებები',
 'listgrouprights-summary' => 'ქვემოთ წარმოდგენილია ამ ვიკიში გარკვეულ ჯგუფთა სია და მათი უფლებები.
@@ -3921,17 +3914,17 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'sqlite-no-fts' => '$1 სრული ტექსტის ძიების მხარდაჭერის გარეშე',
 
 # New logging system
-'logentry-delete-delete' => 'მომხმარებელმა $1 წაშალა გვერდი: „$3“',
-'logentry-delete-restore' => '$1 აღადგინა გვერდი $3',
-'logentry-delete-event' => '$1 შეცვალა {{PLURAL:$5|ჟურნალის ჩანაწერის|$5 ჟურნალის ჩანაწერების}} ხილვადობა $3-ზე: $4',
-'logentry-delete-revision' => '$1 შეცვალა {{PLURAL:$5|$5 ვერსიის|$5 ვერსიის}} ხილვადობა გვერდისათვის $3: $4',
-'logentry-delete-event-legacy' => '$1 შეცვალა ჩანაწერების ჟურნალის ხილვადობა $3-ზე',
-'logentry-delete-revision-legacy' => '$1 შეცვალა რედაქტირების კომენტარი გვერდზე $3',
-'logentry-suppress-delete' => '$1 ჩაახშო $3 გვერდი',
-'logentry-suppress-event' => '$1 ფარულად შეცვალა {{PLURAL:$5|ჟურნალის ჩანაწერის|$5 ჟურნალის ჩანაწერების}} ხილვადობა $3-ზე: $4',
-'logentry-suppress-revision' => '$1 ფარულად შეცვალა {{PLURAL:$5|$5 ვერსიის|$5 ვერსიის}} ხილვადობა $3 გვერდზე: $4',
-'logentry-suppress-event-legacy' => '$1 ფარულად შეცვალა $3 ჩანაწერების ჟურნალის ხილვადობა',
-'logentry-suppress-revision-legacy' => '$1 ფარულად შეცვალა ვერსიის ხილვადობა $3 გვერდზე',
+'logentry-delete-delete' => 'მომხმარებელმა $1 {{GENDER:$2|წაშალა}} გვერდი: „$3“',
+'logentry-delete-restore' => 'მომხმარებელმა $1 {{GENDER:$2|აღადგინა}} გვერდი $3',
+'logentry-delete-event' => 'მომხმარებელმა $1 {{GENDER:$2|შეცვალა}} {{PLURAL:$5|ჟურნალის ჩანაწერის|$5 ჟურნალის ჩანაწერების}} ხილვადობა $3-ზე: $4',
+'logentry-delete-revision' => 'მომხმარებელმა $1 {{GENDER:$2|შეცვალა}} {{PLURAL:$5|$5 ვერსიის|$5 ვერსიის}} ხილვადობა გვერდისათვის $3: $4',
+'logentry-delete-event-legacy' => 'მომხმარებელმა $1 {{GENDER:$2|შეცვალა}} ჩანაწერების ჟურნალის ხილვადობა $3-ზე',
+'logentry-delete-revision-legacy' => 'მომხმარებელმა $1 {{GENDER:$2|შეცვალა}} რედაქტირების კომენტარი გვერდზე $3',
+'logentry-suppress-delete' => 'მომხმარებელმა $1 {{GENDER:$2|ჩაახშო}} $3 გვერდი',
+'logentry-suppress-event' => 'მომხმარებელმა $1 ფარულად {{GENDER:$2|შეცვალა}} {{PLURAL:$5|ჟურნალის ჩანაწერის|$5 ჟურნალის ჩანაწერების}} ხილვადობა $3-ზე: $4',
+'logentry-suppress-revision' => 'მომხმარებელმა $1 ფარულად {{GENDER:$2|შეცვალა}} {{PLURAL:$5|$5 ვერსიის|$5 ვერსიის}} ხილვადობა $3 გვერდზე: $4',
+'logentry-suppress-event-legacy' => 'მომხმარებელმა $1 ფარულად {{GENDER:$2|შეცვალა}} $3 ჩანაწერების ჟურნალის ხილვადობა',
+'logentry-suppress-revision-legacy' => 'მომხმარებელმა $1 ფარულად {{GENDER:$2|შეცვალა}} ვერსიის ხილვადობა $3 გვერდზე',
 'revdelete-content-hid' => 'შინაარსი დამალულია',
 'revdelete-summary-hid' => 'რედაქტირების აღწერა დამალულია',
 'revdelete-uname-hid' => 'მომხმარებლის სახელი დაფარულია',
@@ -3940,20 +3933,20 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'revdelete-uname-unhid' => 'მომხმარებლის სახელი გახსნილია',
 'revdelete-restricted' => 'შეზღუდვა ადმინისტრატორთათვის',
 'revdelete-unrestricted' => 'ადმინისტრატორთათვის შეზღუდვები მოხსნილია',
-'logentry-move-move' => 'მომხმარებელმა $1 გვერდი „$3“ გადაიტანა გვერდზე „$4“',
-'logentry-move-move-noredirect' => 'მომხმარებელმა $1 გვერდი „$3“ გადაიტანა გვერდზე „$4“ გადამისამართების დატოვების გარეშე',
-'logentry-move-move_redir' => 'მომხმარებელმა $1 გვერდი „$3“ გადაიტანა გვერდზე „$4“ გადამისამართებაზე',
-'logentry-move-move_redir-noredirect' => '$1 გადაიტანა გვერდი $3 $4-ში გადამისამართების დატოვების გარეშე',
-'logentry-patrol-patrol' => '$1 გააკეთა გვერდის „$3“ $4 ვერსიის პატრულირება',
-'logentry-patrol-patrol-auto' => '$1 ავტომატურად გააკეთა გვერდის „$3“ $4 ვერსიის პატრულირება',
-'logentry-newusers-newusers' => 'მომხმარებლის ანგარიში $1 შექმნილია',
-'logentry-newusers-create' => 'შეიქმნა მომხმარებლის ანგარიში $1',
-'logentry-newusers-create2' => 'მომხმარებლის ანგარიში $3 შექმნა მომხმარებელმა $1',
-'logentry-newusers-byemail' => 'მომხმარებლის ანგარიში $3 შექმნა მომხმარებელმა $1 და პაროლი გაგზავნა ელ. ფოსტით',
-'logentry-newusers-autocreate' => 'ავტომატურად შეიქმნა მომხმარებლის ანგარიში $1',
-'logentry-rights-rights' => '$1 შეცვალა ჯგუფის წევრობა $3-თვის $4-დან $5-ზე',
-'logentry-rights-rights-legacy' => '$1 შეცვალა ჯგუფის წევრობა $3-თვის',
-'logentry-rights-autopromote' => '$1 ავტომატურად იქნა გადაყვანილი $4–დან $5–ში',
+'logentry-move-move' => 'მომხმარებელმა $1 გვერდი „$3“ {{GENDER:$2|გადაიტანა}} გვერდზე „$4“',
+'logentry-move-move-noredirect' => 'მომხმარებელმა $1 გვერდი „$3“ {{GENDER:$2|გადაიტანა}} გვერდზე „$4“ გადამისამართების დატოვების გარეშე',
+'logentry-move-move_redir' => 'მომხმარებელმა $1 გვერდი „$3“ {{GENDER:$2|გადაიტანა}} გვერდზე „$4“ გადამისამართებაზე',
+'logentry-move-move_redir-noredirect' => 'მომხმარებელმა $1 {{GENDER:$2|გადაიტანა}} გვერდი $3 $4-ში გადამისამართების დატოვების გარეშე',
+'logentry-patrol-patrol' => 'მომხმარებელმა $1 {{GENDER:$2|გააკეთა}} გვერდის „$3“ $4 ვერსიის პატრულირება',
+'logentry-patrol-patrol-auto' => 'მომხმარებელმა $1 ავტომატურად {{GENDER:$2|გააკეთა}} გვერდის „$3“ $4 ვერსიის პატრულირება',
+'logentry-newusers-newusers' => 'მომხმარებლის ანგარიში $1 {{GENDER:$2|შექმნილია}}',
+'logentry-newusers-create' => '{{GENDER:$2|შეიქმნა}} მომხმარებლის ანგარიში $1',
+'logentry-newusers-create2' => 'მომხმარებლის ანგარიში $3 {{GENDER:$2|შექმნა}} მომხმარებელმა $1',
+'logentry-newusers-byemail' => 'მომხმარებლის ანგარიში $3 {{GENDER:$2|შექმნა}} მომხმარებელმა $1 და პაროლი გაგზავნა ელ. ფოსტით',
+'logentry-newusers-autocreate' => 'ავტომატურად {{GENDER:$2|შეიქმნა}} მომხმარებლის ანგარიში $1',
+'logentry-rights-rights' => 'მომხმარებელმა $1 {{GENDER:$2|შეცვალა}} ჯგუფის წევრობა $3-თვის $4-დან $5-ზე',
+'logentry-rights-rights-legacy' => 'მომხმარებელმა $1 {{GENDER:$2|შეცვალა}} ჯგუფის წევრობა $3-თვის',
+'logentry-rights-autopromote' => 'მომხმარებელი $1 ავტომატურად იქნა {{GENDER:$2|გადაყვანილი}} $4–დან $5–ში',
 'rightsnone' => '(არცერთი)',
 
 # Feedback
@@ -4029,4 +4022,7 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'duration-centuries' => '$1 {{PLURAL:$1|საუკუნე|საუკუნე}}',
 'duration-millennia' => '$1 {{PLURAL:$1|ათასწლეული|ათასწლეული}}',
 
+# Image rotation
+'rotate-comment' => 'სურათი მოტრიალებულია $1 {{PLURAL:$1|გრადუსით|გრადუსით}} საათის ისრის მიმართულებით',
+
 );
index cc838e4..3d6afa0 100644 (file)
@@ -752,9 +752,9 @@ $2',
 'eauthentsent' => 'អ៊ីមែល​សម្រាប់​ផ្ទៀងផ្ទាត់​បញ្ជាក់ត្រូវបានផ្ញើទៅ​អាសយដ្ឋានអ៊ីមែល​ដែលបានចុះត្រាហើយ។
 
 មុននឹងមាន​អ៊ីមែលផ្សេងមួយទៀត​ត្រូវផ្ញើទៅ​គណនីនេះ អ្នកត្រូវតែ​ធ្វើតាមសេចក្តីណែនាំ​ក្នុងអ៊ីមែល​នោះ ដើម្បីបញ្ជាក់ថា​គណនីបច្ចុប្បន្ន​ពិតជា​របស់អ្នកពិតប្រាកដមែន។',
-'throttled-mailpassword' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9aá\9f\86á\9e\9bá\9e¹á\9e\80ពាក្យសម្ងាត់ត្រូវបានផ្ញើទៅឱ្យអ្នកតាំងពី{{PLURAL:$1|មួយម៉ោង|$1ម៉ោង}}មុននេះហើយ។
+'throttled-mailpassword' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aពាក្យសម្ងាត់ត្រូវបានផ្ញើទៅឱ្យអ្នកតាំងពី{{PLURAL:$1|មួយម៉ោង|$1ម៉ោង}}មុននេះហើយ។
 
\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\94á\9e\84á\9f\92á\9e\80á\9e¶á\9e\9aá\9e¢á\9f\86á\9e\96á\9e¾á\9e\94á\9f\86á\9e\96á\9e¶á\9e\93 á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9aá\9f\86á\9e\9bá\9e¹á\9e\80ពាក្យសម្ងាត់តែមួយគត់នឹងត្រូវបាន​ផ្ញើក្នុងរយៈពេល{{PLURAL:$1|មួយម៉ោង|$1ម៉ោង}}។',
\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\94á\9e\84á\9f\92á\9e\80á\9e¶á\9e\9aá\9e¢á\9f\86á\9e\96á\9e¾á\9e\94á\9f\86á\9e\96á\9e¶á\9e\93 á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aពាក្យសម្ងាត់តែមួយគត់នឹងត្រូវបាន​ផ្ញើក្នុងរយៈពេល{{PLURAL:$1|មួយម៉ោង|$1ម៉ោង}}។',
 'mailerror' => 'បញ្ហាក្នុងការផ្ញើអ៊ីមែល៖ $1',
 'acct_creation_throttle_hit' => 'អ្នកទស្សនា​វិគី​នេះ​ដោយ​ប្រើប្រាស់​អាសយដ្ឋានIPរបស់​អ្នក​ បានបង្កើត{{PLURAL:$1|គណនីមួយ|គណនីចំនួន$1}}នៅ​ថ្ងៃ​ចុងក្រោយ។ ចំនួននេះ​ជា​ចំនួន​អតិបរមារ​ដែល​ត្រូវ​បាន​អនុញ្ញាត​សម្រាប់​រយៈពេល​នេះ​។
 
@@ -2182,15 +2182,6 @@ $1',
 'listusers-noresult' => 'រកមិនឃើញអ្នកប្រើប្រាស់នេះទេ។',
 'listusers-blocked' => '(ស្ថិតក្រោមការហាមឃាត់)',
 
-# Special:ActiveUsers
-'activeusers' => 'បញ្ជីរាយនាមអ្នកប្រើប្រាស់សកម្ម',
-'activeusers-intro' => 'នេះជាបញ្ជីរាយនាមអ្នកប្រើប្រាស់ដែលមានសកម្មភាពក្នុងរូបភាពណាមួយក្នុងរយៈពេល $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}}ចុងក្រោយ។',
-'activeusers-count' => '{{PLURAL:$1|សកម្មភាព|សកម្មភាព}}ចំនួន$1 ក្នុងរយៈពេល{{PLURAL:$3|១ថ្ងៃ|$3 ថ្ងៃ}}ចុងក្រោយ',
-'activeusers-from' => 'បង្ហាញអត្តនាមផ្ដើមដោយ៖',
-'activeusers-hidebots' => 'លាក់រូបយន្ត',
-'activeusers-hidesysops' => 'លាក់អភិបាល',
-'activeusers-noresult' => 'អ្នកប្រើប្រាស់​រកមិនឃើញ​។​',
-
 # Special:ListGroupRights
 'listgrouprights' => 'សិទ្ធិនិងក្រុមអ្នកប្រើប្រាស់',
 'listgrouprights-summary' => 'ខាងក្រោមនេះជាបញ្ជីរាយឈ្មោះក្រុមអ្នកប្រើប្រាស់ដែលបានកំណត់ជាមួយនឹងសិទ្ធិរបស់គេនៅលើវិគីនេះ។ មាន[[{{MediaWiki:Listgrouprights-helppage}}|ព័ត៌មានបន្ថែម]] អំពីសិទ្ធិផ្ទាល់ខ្លួន។',
index a175268..d4937e4 100644 (file)
@@ -1438,10 +1438,6 @@ $2',
 'listusers-submit' => 'ತೋರು',
 'listusers-noresult' => 'ಯಾವ ಬಳಕೆದಾರರೂ ಸಿಗಲಿಲ್ಲ.',
 
-# Special:ActiveUsers
-'activeusers' => 'ಸಕ್ರಿಯ ಸದಸ್ಯರ ಪಟ್ಟಿ',
-'activeusers-noresult' => 'ಯಾವ ಬಳಕೆದಾರರೂ ಸಿಗಲಿಲ್ಲ.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ಬಳಕೆದಾರ ಗುಂಪು ಹಕ್ಕುಗಳು',
 'listgrouprights-summary' => 'ಈ ವಿಕಿಯಲ್ಲಿ ಪ್ರಚಲಿತವಾಗಿರುವ ಬಳಕೆದಾರ ಗುಂಪುಗಳು ಮತ್ತು ಆ ಗುಂಪುಗಳಿಗೆ ಅನ್ವಯಿಸುವ ಹಕ್ಕುಗಳು ಈ ಕೆಳಗಿನಂತಿದೆ.',
index 61cb9ce..81108e7 100644 (file)
@@ -2340,15 +2340,6 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'listusers-noresult' => '해당 사용자가 없습니다.',
 'listusers-blocked' => '(차단됨)',
 
-# Special:ActiveUsers
-'activeusers' => '활동적인 사용자 목록',
-'activeusers-intro' => '다음은 최근 $1{{PLURAL:$1|일}} 동안 활동한 사용자의 목록입니다.',
-'activeusers-count' => '최근 {{PLURAL:$3|$3일}} 사이의 {{PLURAL:$1|활동}} $1회',
-'activeusers-from' => '다음으로 시작하는 사용자를 보기:',
-'activeusers-hidebots' => '봇을 숨기기',
-'activeusers-hidesysops' => '관리자를 숨기기',
-'activeusers-noresult' => '사용자가 없습니다.',
-
 # Special:ListGroupRights
 'listgrouprights' => '사용자 권한 목록',
 'listgrouprights-summary' => '다음은 이 위키에서 설정된 사용자 권한 그룹의 목록입니다.
index 46d4361..58716fb 100644 (file)
@@ -1914,15 +1914,6 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'listusers-noresult' => 'Къошулуучула табылмадыла.',
 'listusers-blocked' => '(блокга салыныбды)',
 
-# Special:ActiveUsers
-'activeusers' => 'Актив къошулуучуланы тизмеси',
-'activeusers-intro' => 'Бу, ахыр $1 {{PLURAL:$1|кюнде|кюнде}} къаллайда болсун ишлетме кёргюзген къошлуучуланы тизмесиди.',
-'activeusers-count' => 'Ахыр {{PLURAL:$3|кюнде|$3 кюнде}} $1 {{PLURAL:$1|тюрлендириу|тюрлендириу}}',
-'activeusers-from' => 'Бу бла башланнган къошлуучуланы кёргюз:',
-'activeusers-hidebots' => 'Ботланы джашыр',
-'activeusers-hidesysops' => 'Администраторланы джашыр',
-'activeusers-noresult' => 'Къошлуучу табылмады.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Къошулуучуланы къауумуну хакълары',
 'listgrouprights-summary' => 'Тюбюндеги бу викиде танылгъан къошулуучу къауумланы эмда аланы хакъларыны тизмеси.
index 5a5cc2b..d249c2d 100644 (file)
@@ -732,7 +732,7 @@ Ene schöne Jroß vun {{GRAMMAR:Dat|{{SITENAME}}}}.
 'passwordsent' => 'E neu Passwood es aan de E-Mail Adress vun däm Metmaacher „$1“ ungerwähs. Meld dich domet aan, wann De et häs. Dat ahle Passwood bliev erhalde un kann och noch jebruch wääde, bes dat De Dich et eetste Mol met däm Neue enjelogg häs.',
 'blocked-mailpassword' => 'Ding IP Adress es blockeet.',
 'eauthentsent' => 'En <i lang="en">e-mail</i> es jetz ungerwähs aan di Adress, die en de Enstellunge steiht. Ih dat <i lang="en">e-mails</i> üvver {{GRAMMAR:Genitiv iere male|{{SITENAME}}}} <i lang="en">e-mail</i>-Knopp verscheck wääde künne, muss de <i lang="en">e-mail</i>-Adress eets ens bestätich woode sin. Wat mer doför maache moß, steiht en dä <i lang="en">e-mail</i> dren, die jrad avjescheck woode es.',
-'throttled-mailpassword' => 'En Erennerung för di Passwood es ungerwähs. Domet ene fiese Möpp keine Dress fabrizeet, passeet dat hüchstens eimol en {{PLURAL:$1|der Stund|$1 Stunde|nidd ens eine Stund}}.',
+'throttled-mailpassword' => 'En Erennerung för di Passwood es alld ongerwähs, un mieh wi eimol en {{PLURAL:$1|der Schtond|$1 Schtonde|nidd ens ener Schtond}} dommer kein schecke.',
 'mailerror' => 'Fähler beim E-Mail Verschecke: $1.',
 'acct_creation_throttle_hit' => '<b>Schad.</b>
 Besöker fun däm Wiki heh han övver de IP-Addräß, övver di De jraad aam
@@ -791,7 +791,7 @@ Do häs Der enzwesche e neuZweschepasswood jehollt.',
 
 # Special:PasswordReset
 'passwordreset' => 'Et Paßwoot zeröck säze',
-'passwordreset-text' => 'Donn dat Fommulaa heh ußfölle, öm en <i lang="en">e-mail</i> ze krijje, woh jät övver der Zohjang heh obb et Wiki för Desch dren shteiht.',
+'passwordreset-text' => 'Donn dat Fommulaa heh ußfölle, öm e neu Paßwoot faßzelääje.',
 'passwordreset-legend' => 'Et Paßwoot zeröck säze',
 'passwordreset-disabled' => 'Et Paßwoot zeröck ze säze es heh em Wiki afjeschalldt.',
 'passwordreset-pretext' => '{{PLURAL:$1||Jiff ein vun dä Saache heh dronger enn|}}',
@@ -801,8 +801,8 @@ Do häs Der enzwesche e neuZweschepasswood jehollt.',
 'passwordreset-capture-help' => 'Wann De heh e Krüzje määß, kriß de di <i lang="en">e-mail</i> met däm neue Paßwoot aanjezeish, ußer dat dä Metmaacher se och zohjescheck kritt.',
 'passwordreset-email' => 'De Adräß för de <i lang="en">e-mail</i>:',
 'passwordreset-emailtitle' => 'Einzelheite för der Zohjang op {{GRAMMAR:Akkusativ|{{SITENAME}}}}',
-'passwordreset-emailtext-ip' => 'Do künns et sällver jewääse sin, öhnswää hät vun dä Adräß $1 en Internet öm
-en e-mail jefrooch, met Daate övver Dinge Zohjäng op {{GRAMMAR:Akkusativ|{{SITENAME}}}}
+'passwordreset-emailtext-ip' => 'Do künns et sällver jewääse sin, öhnswää em Internet hät vun dä IP-Adräß $1 öm
+e neu Paßwoot jefrooch, för Dinge Zohjäng op {{GRAMMAR:Akkusativ|{{SITENAME}}}}
 $4
 Heh {{PLURAL:$3|dä Metmaacher hät|di Metmaacher han|hät keine Metmaacher}} Ding e-mail Addräß:
 
@@ -813,8 +813,8 @@ Donn Desch jäz enlogge, un e neu Paßwoot faßlääje. Wann ene Andere wi
 Do dat heh aanjestüßße hät, udder wann De Desch widder aan Ding Paßwoot
 entsenne kanns, un et nimmieh ändere wells, udder es suwwisu weiß, dann
 moß De jäz jaa nix donn, un kanns Ding Paßwoot wigger bruche.',
-'passwordreset-emailtext-user' => 'Dä Metmaacher $1 vun {{GRAMMAR:Dativ|{{SITENAME}}}} hät öm en e-mail jefrooch,
-met Daate övver Dinge Zohjäng op {{GRAMMAR:Akkusativ|{{SITENAME}}}}
+'passwordreset-emailtext-user' => 'Dä Metmaacher $1 vun {{GRAMMAR:Dativ|{{SITENAME}}}} hät öm e neu Paßwoot jefrooch,
+r Dinge Zohjäng op {{GRAMMAR:Akkusativ|{{SITENAME}}}}
 $4
 Heh {{PLURAL:$3|dä Metmaacher hät|di Metmaacher han|hät keine Metmaacher}} Ding e-mail Addräß:
 
@@ -827,9 +827,9 @@ entsenne kanns, un et nimmieh ändere wells, udder es suwwisu weiß, dann
 moß De jäz jaa nix donn, un kanns Ding Paßwoot wigger bruche.',
 'passwordreset-emailelement' => 'Metmaacher Name: $1
 Eijmohl-Paßwoot: $2',
-'passwordreset-emailsent' => 'En <i lang="en">e-mail</i> met Aanjaabe zom Zohjang heh es verscheck.',
-'passwordreset-emailsent-capture' => 'En <i lang="en">e-mail</i> es verscheck. Heh dronger kanns De se lässe.',
-'passwordreset-emailerror-capture' => 'En <i lang="en">e-mail</i> sullt verscheck wääde. Heh dronger kanns De se lässe. Dat Verschecke hät ävver nit jeflup, wääje: $1.',
+'passwordreset-emailsent' => 'En <i lang="en">e-mail</i> met Aanjaabe zom neue Paßwoot för der Zohjang heh es verscheck.',
+'passwordreset-emailsent-capture' => 'En <i lang="en">e-mail</i> met Aanjaabe zom neue Paßwoot för der Zohjang heh es verscheck woode. Heh dronger kanns De se lässe.',
+'passwordreset-emailerror-capture' => 'En <i lang="en">e-mail</i> met Aanjaabe zom neue Paßwoot för der Zohjang heh sullt verscheck wääde, ävver dat Verschecke hät nit jeflup: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Donn Ding Address för de <i lang="en">e-mail</i> ändere',
@@ -1051,10 +1051,10 @@ oder fottjeschmesse wääde. Wann Der dat nit rääch es, schriev nix. Et es och
 Dä Tex, dä De heh jescheck häs, dä es {{PLURAL:$1|ein|$1|kei}} Kilobyte jruuß.
 Dat {{PLURAL:$2|es mieh wie ei|sin mieh wie $2|es kei}} Kilobyte. Dat künne mer nit speichere!",
 'readonlywarning' => "'''Opjepass:'''
-De Daatebank es jesperrt woode, wo Do ald am Ändere wors.
+De Daatebank es jesperrt woode, wo Do ald am Ändere wohs.
 Dä.
-Jetz kanns De Ding Änderunge nit mieh avspeichere.
-Dun se bei Dir om Rechner fasshalde un versök et späder noch ens.
+Jetz kanns De Ding Änderunge nit mieh faßhallde lohße.
+Dun se bei Dir om Rechner faßhalde un versöhg et schpäder noch ens.
 
 Nävvebei, dä Datenbank-Köbes hät för et Sperre och ene Jrund aanjejovve: $1",
 'protectedpagewarning' => "'''Opjepass: Die Sigg heh es jäje Veränderunge jeschötz. Nor de Wiki-Köbesse künne se ändere.'''
@@ -2324,15 +2324,6 @@ De Brauserprotokolle, di mer beim Söke aanjäjovve kann, sin: <code>$1</code>,
 'listusers-noresult' => 'Keine Metmaacher jefonge.',
 'listusers-blocked' => '(jespert)',
 
-# Special:ActiveUsers
-'activeusers' => 'Leß met de aktiive Metmaacher',
-'activeusers-intro' => 'Dat heh es en Leß met dä Metmaacher, di {{PLURAL:$1|zick jäßtere|en de läzde $1 Dääsch|hück}} ööhnsjät jemaat han.',
-'activeusers-count' => '{{PLURAL:$1|ein Änderung|$1 Änderunge|kein Änderunge}} {{PLURAL:$3|aam lezde Daach|en de lezte $3 Dääsch|hück}}',
-'activeusers-from' => 'Donn de Metmaacher zeije aff:',
-'activeusers-hidebots' => 'De Bots fott lohße',
-'activeusers-hidesysops' => 'De Wiki_Köbesse fott lohße',
-'activeusers-noresult' => 'Kein Metmaacher jefonge.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Metmaacher-Jruppe-Rääschte',
 'listgrouprights-summary' => 'Hee kütt de Liss met dä Medmaacher-Jruppe, di dat Wiki hee kennt, un denne ier Rääschte.
@@ -2397,7 +2388,7 @@ Alles klor?',
 'usermessage-editor' => 'Name vum Metmaacher för de Täxte un Nohreshte vum Wiki ze beärbeide',
 
 # Watchlist
-'watchlist' => 'ming Oppassliss',
+'watchlist' => 'ming Oppaßleß',
 'mywatchlist' => 'Oppaßleß',
 'watchlistfor2' => 'För dä $1 $2',
 'nowatchlist' => 'En Ding Oppassliss es nix dren.',
@@ -2405,12 +2396,8 @@ Alles klor?',
 'watchnologin' => 'Nit enjelogg',
 'watchnologintext' => 'Öm Ding Oppassliss ze ändere, mööts de ald [[Special:UserLogin|enjelogg]] sin.',
 'addwatch' => 'En de Oppassliss don',
-'addedwatchtext' => "Die Sigg „[[:$1]]“ es jetz en Dinge [[Special:Watchlist|Oppaßleß]].
-Av jetz, wann die Sigg verändert weed, oder ehr Klaafsigg, dann weed dat en de
-Oppassliss jezeich. Dä Endrach för die Sigg kütt en  '''Fettschreff''' en de
-„[[Special:RecentChanges|Neuste Änderunge]]“, domet De dä do och flöck fengs.
-Wann de dä widder loss wääde wells us Dinger Oppaßleß,
-dann klick op „Nimieh drop oppasse“ wann De die Sigg om Schirm häs.",
+'addedwatchtext' => 'Die Sigg „[[:$1]]“ es jetz en Dinge [[Special:Watchlist|Oppaßleß]].
+Wann di Sigg udder ier Klaafsigg verändert weed, kütt dat af jäz heh en di Oppaßleß.',
 'removewatch' => 'Us de Oppassliss nämme',
 'removedwatchtext' => 'Die Sigg „[[:$1]]“ es jetz us de [[Special:Watchlist|Oppassliss]] erusjenomme.',
 'watch' => 'Drop Oppasse',
@@ -2561,8 +2548,8 @@ Di Sigg '''„$1“:''' es jetz jrad:",
 'protect-cascadeon' => 'Die Sigg es en enne Schotz-Kaskad. Se es enjebonge en {{PLURAL:$1|die Sigg|$1 Sigge|kein Sigg}}, die per Kaskade-Schotz jeschötz {{PLURAL:$1|es|sin|es}}. Do kanns dä Schotz för die Sigg heh ändere, ävver di Kaskad blief bestonn. Dat heh sin die Sigge en dä Kaskad:',
 'protect-default' => 'Jeede Metmaacher eraan lohße',
 'protect-fallback' => 'Do weet dat Rääsch „$1“ jebruch.',
-'protect-level-autoconfirmed' => 'Donn neu Metmaacher un namelose Metmaacher nit dranlooße',
-'protect-level-sysop' => 'Nor de Wiki-Köbesse dranlooße',
+'protect-level-autoconfirmed' => 'Bloß de automattesch beschtääteschte Metmaacher dranlooße',
+'protect-level-sysop' => 'Bloß de Wiki-Köbesse dranlooße',
 'protect-summary-cascade' => 'met Schotz-Kaskad',
 'protect-expiring' => 'bes öm $3 Uhr (UTC) aam $2',
 'protect-expiring-local' => 'löüf uß: $1',
@@ -2864,21 +2851,21 @@ un verzäll dänne vun däm ärrje Risiko för de Secherheit fun dänne ehr Rä
 'move-page' => 'De Sigg „$1“ ömnenne',
 'move-page-legend' => 'Sigg Ömnenne',
 'movepagetext' => "Heh kanns De en Sigg ömnenne.
-Domet kritt die Sigg ene neue Name, un all vörherije Versione vun dä Sigg och.
-Unger däm ahle Tittel weed automatisch en Ömleitung op dä neue Tittel enjedrage.
+Domet kritt di Sigg ene neue Name, un all vörherije Versione vun dä Sigg och.
+Unger däm ahle Tittel weed automatisch en Ömleidong op dä neue Tittel enjedrare.
 
-Do kannß dat Höksche setze domet Ömleidonge automattesch aanjepaß wääde, di op dä ahle Tittel zeije — dat weet ävver nur allmählesch pö a pö hengerher jemaat.
-Links op dä ahle Tittel blieve ävver wie se wore, wann De dat Höksche nit setz.
-Dat heiß, dann moß De selver nohluure, ov do jetz [[Special:DoubleRedirects|dubbelde Ömleidunge]] udder [[Special:BrokenRedirects|kapodde Ömleidunge]] bei eruskumme.
+Do kannß dat Höksche säze domet Ömleidonge automattesch aanjepaß wääde, di op dä ahle Tittel zeije — dat weet ävver nur allmählesch pö a pö hengerher jemaat.
+Links op dä ahle Tittel blieve ävver wi se wore, wann De dat Höksche nit säz.
+Dat heiß, dann moß De selver nohluure, of do jäz [[Special:DoubleRedirects|dubbelde Ömleidonge]] udder [[Special:BrokenRedirects|kapodde Ömleiduoge]] bei eruskumme.
 Wann De en Sigg ömnenne deis, häs Do och doför ze sorje, dat de betroffene Links do henjonn, wo se hen jonn solle.
-Alsu holl Der de Liss „Wat noh heh link“ fun dä Sigg heh un jangk se dorch!
+Alsu holl Der de Liss „Wat noh heh link“ fun dä Sigg heh un jangk se dorsch!
 
-De Sigg weed '''nit''' ömjenannt, wann et met däm neue Name ald en Sigg jitt, '''ußer''' et es nix drop, oder et es en Ömleitung un se es noch nie jeändert woode.
-Esu kam_mer en Sigg jlich widder zeröck ömnenne, wam_mer sich bem Ömnenne verdonn hät, un mer kann och kein Sigge kapottmaache, wo ald jet drop steiht.
+De Sigg weed '''nit''' ömjenannt, wann et met däm neue Name ald en Sigg jitt, '''ußer''' et es en Ömleidong un se es noch nie jeändert woode.
+Esu kam_mer en Sigg jlich widder zeröck ömbenänne, wam_mer sich bem Ömbenänne verdonn hät, un mer kann och kein Sigge kapottmaache, wo ald jet drop schteiht.
 
 '''Oppjepass!'''
-Wat beim Ömnenne erus kütt, künnt en opfällije un villeich stürende Änderung aam Wiki sin, besönders bei öff jebruchte Sigge.
-Alsu bes secher, dat De versteihs, wat De heh am maache bes, ih dat De et mähs!",
+Wat beim Ömnenne erus kütt, künnt en opfällije un villeisch stüürende Änderong aam Wiki sin, besönders bei öff jebruchte Sigge.
+Alsu bes secher, dat De verschteihs, wat De heh am maache bes, ih dat De et mähs!",
 'movepagetext-noredirectfixer' => "Heh kanns De en Sigg ömnenne.
 Domet kritt die Sigg ene neue Name, un all vörherije Versione vun dä Sigg och.
 Unger däm ahle Tittel weed automatisch en Ömleitung op dä neue Tittel enjedrage.
@@ -4076,7 +4063,7 @@ Die Datei weed jlich aanjezeig, odder med däm paßende Projramm op jemaat.",
 'specialpages-group-highuse' => 'Öff jebruch…',
 'specialpages-group-pages' => 'Siggeliste',
 'specialpages-group-pagetools' => 'Werrekzüch för Sigge',
-'specialpages-group-wiki' => 'Werrekzüch un Date vum Systeem',
+'specialpages-group-wiki' => 'Werrekzüch un Daate vum Syßteem',
 'specialpages-group-redirects' => '{{int:nstab-special}}e, die ömleite, söke, un finge',
 'specialpages-group-spam' => 'Werrekzüch jäje SPÄM',
 
@@ -4147,17 +4134,17 @@ die De häs han welle. Se künnt jet ällder un nit mieh aktoäll sin.',
 'sqlite-no-fts' => 'Version $1 (kann ävver nit en janze Täxte söhke)',
 
 # New logging system
-'logentry-delete-delete' => ' $1 hät di Sigg „$3“ fottjeschmeße.',
-'logentry-delete-restore' => 'Dä $1 hät di vörmohls fottjeschmeße Sigg „$3“ wider zeröck jehollt..',
-'logentry-delete-event' => 'Dä $1 hät för {{PLURAL:$5|eine Logboochendraach|$5 Logboochendrääsh|keine Logboochendraach}}  vun dä Sigg „$3“ $4.',
-'logentry-delete-revision' => 'Dä $1 hät för {{PLURAL:$5|ein Version|$5 Versione|kein Version}}  vun dä Sigg „$3“ $4.',
-'logentry-delete-event-legacy' => 'Dä $1 hät de Seeschbakeit vun Enndrääje en Logbööscher vun dä Sigg „$3“ verändert.',
-'logentry-delete-revision-legacy' => 'Dä $1 hät de Seeschbakeit ällder Väsjohne vun dä Sigg „$3“ verändert.',
-'logentry-suppress-delete' => ' $1 hät di Sigg „$3“ ongerdröck.',
-'logentry-suppress-event' => 'Dä $1 hät heimlesh för {{PLURAL:$5|eine Logboochendraach|$5 Logboochendrääsh|keine Logboochendraach}}  vun dä Sigg „$3“ $4.',
-'logentry-suppress-revision' => 'Dä $1 hät heimlesh för {{PLURAL:$5|ein Version|$5 Versione|kein Version}}  vun dä Sigg „$3“ $4.',
-'logentry-suppress-event-legacy' => 'Dä $1 hät de Seeschbakeit vun Enndrääje en Logbööscher vun dä Sigg „$3“ heimlesch verändert.',
-'logentry-suppress-revision-legacy' => 'Dä $1 hät de Seeschbakeit ällder Väsjohne vun dä Sigg „$3“ heimlesch verändert.',
+'logentry-delete-delete' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Sigg „$3“ fottjeschmeße.',
+'logentry-delete-restore' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di vörmohls fottjeschmeße Sigg „$3“ wider zeröck jehollt.',
+'logentry-delete-event' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät för {{PLURAL:$5|eine Logboochendraach|$5 Logboochendrääsh|keine Logboochendraach}} vun dä Sigg „$3“ $4.',
+'logentry-delete-revision' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät för {{PLURAL:$5|ein Version|$5 Versione|kein Version}} vun dä Sigg „$3“ $4.',
+'logentry-delete-event-legacy' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de Seeschbakeit vun Enndrääje en de Logbööscher vun dä Sigg „$3“ verändert.',
+'logentry-delete-revision-legacy' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de Seeschbakeit vun älldere Väsjohne vun dä Sigg „$3“ verändert.',
+'logentry-suppress-delete' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Sigg „$3“ ongerdröck.',
+'logentry-suppress-event' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät heimlesh för {{PLURAL:$5|eine Logboochendraach|$5 Logboochendrääsh|keine Logboochendraach}} en dä Sigg „$3“ $4.',
+'logentry-suppress-revision' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät heimlesch för {{PLURAL:$5|ein Version|$5 Versione|kein Version}} vun dä Sigg „$3“ $4.',
+'logentry-suppress-event-legacy' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de Seeschbakeit vun Enndrääje en dä Logbööscher op dä Sigg „$3“ heimlesch verändert.',
+'logentry-suppress-revision-legacy' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de Seeschbakeit vun älldere Väsjohne vun dä Sigg „$3“ heimlesch verändert.',
 'revdelete-content-hid' => 'der Enhalt verstoche',
 'revdelete-summary-hid' => 'dat Fäld „{{int:summary}}“ vershtoche',
 'revdelete-uname-hid' => 'der Name vum Metmaacher verstoche',
@@ -4166,16 +4153,16 @@ die De häs han welle. Se künnt jet ällder un nit mieh aktoäll sin.',
 'revdelete-uname-unhid' => 'der Name vum Metmaacher öffentlesh jemaat',
 'revdelete-restricted' => ', och för de Wiki-Köbesse',
 'revdelete-unrestricted' => ', och för de Wiki-Köbesse',
-'logentry-move-move' => ' $1 hätt di Sigg „$3“ en „$4“ ömjenannt.',
-'logentry-move-move-noredirect' => ' $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei kein Ömleidong aanjelaat.',
-'logentry-move-move_redir' => 'Dä $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei en ahle Ömleingungssigg fottjeschmeße.',
-'logentry-move-move_redir-noredirect' => 'Dä $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei en ahle Ömleidongssigg fottjeschmeße un kein neue Ömliedongssig aanjelaat.',
-'logentry-patrol-patrol' => ' $1 hät di Version $4 vun dä Sigg „$3“ nohjeloort.',
-'logentry-patrol-patrol-auto' => ' $1 hät di Version $4 vun dä Sigg „$3“ automattesch nohjeloort.',
+'logentry-move-move' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt.',
+'logentry-move-move-noredirect' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei kein Ömleidong aanjelaat.',
+'logentry-move-move_redir' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei en ahle Ömleindongßsigg fottjeschmeße.',
+'logentry-move-move_redir-noredirect' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei en ahle Ömleidongßsigg fottjeschmeße un kein neue Ömleidongßsig aanjelaat.',
+'logentry-patrol-patrol' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Version $4 vun dä Sigg „$3“ nohjeloort.',
+'logentry-patrol-patrol-auto' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Version $4 vun dä Sigg „$3“ automattesch nohjeloort.',
 'logentry-newusers-newusers' => 'Dä neue Metmaacher $1 wood aanjelaat.',
-'logentry-newusers-create' => 'Dä neue Metmaacher $1 wood aanjelaat.',
-'logentry-newusers-create2' => 'Dä $1 hät dä $3 als ene neue Metmaacher aanjelaat.',
-'logentry-newusers-autocreate' => 'Dä $1 wood automattesch als Metmaacher aanjelaat.',
+'logentry-newusers-create' => '{{GENDER:$4|Dä neue Metmaacher|De neue Metmaacherėn|Dä neue Metmaacher|De neue Metmaacherėn|Dä neue Metmaacher}} $1 wood aanjelaat.',
+'logentry-newusers-create2' => '{{GENDER:$4|Dä|Dat|Dä Metmaacher|De|Dat}} $3 wood {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} $1 aanjelaat.',
+'logentry-newusers-autocreate' => '{{GENDER:$4|Dä|Dat|Dä Metmaacher|De|Dat}} $1 wood automattesch {{GENDER:$4|als Metmaacher|als Metmaacher||als Metmaacher|als Metmaacher}} aanjelaat.',
 'logentry-rights-rights' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät däm Metmaacher „$3“ sing Jroppe-Räächde vun „$4“ op „$5“ ömjestallt.',
 'logentry-rights-rights-legacy' => '{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 hät däm Metmaacher $3 sing Räääschte-Jroppe verändert.',
 'logentry-rights-autopromote' => '{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 wood automattesch vum $4 zom $5 jemaat.',
index 1b1a99d..df5ce65 100644 (file)
@@ -821,7 +821,7 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-legend' => 'Vebijartinên lêgerrînê',
 'searchmenu-exists' => "'''Rûpeleke bi navê \"[[:\$1]]\" li ser vê wîkiyê heye.'''",
-'searchmenu-new' => 'Rûpela "[[:$1]]" li ser vê derê çêke!',
+'searchmenu-new' => 'Rûpela "[[:$1]]" çêke!',
 'searchhelp-url' => 'Help:Alîkarî',
 'searchprofile-articles' => 'Rûpelên naverokê',
 'searchprofile-project' => 'Rûpelên alîkariyê û projeyê',
@@ -1351,12 +1351,6 @@ Li [[Special:WantedCategories|kategoriyên xwestî]] binêre.',
 'listusers-noresult' => 'Bikarhêner nehate dîtin.',
 'listusers-blocked' => '(hate astengkirin)',
 
-# Special:ActiveUsers
-'activeusers' => 'Lîsteya bikarhênerên çalak',
-'activeusers-hidebots' => "Bot'an veşêre",
-'activeusers-hidesysops' => 'Rêveberan veşêre',
-'activeusers-noresult' => 'Tu bikarhêner nehate dîtin.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Mafên koma bikarhêner',
 'listgrouprights-group' => 'Kom',
@@ -1601,7 +1595,7 @@ Ji bo jêbirinan û çêkirinên nû, ji kerema xwe li [[{{ns:special}}:Log/dele
 'whatlinkshere-hideredirs' => 'Beralîkirinan $1',
 'whatlinkshere-hidetrans' => 'Naverokan $1',
 'whatlinkshere-hidelinks' => 'Girêdanan $1',
-'whatlinkshere-hideimages' => '$1 lînkên wêneyan',
+'whatlinkshere-hideimages' => 'Girêdanên wêneyan $1',
 'whatlinkshere-filters' => 'Parzûn',
 
 # Block/unblock
@@ -1620,10 +1614,10 @@ Sedemekê binivîse!",
 'ipbreasonotherlist' => 'Sedemeke din',
 'ipbreason-dropdown' => '*Sedemên astengkirinê
 ** vandalîzm
-** agahiya şaş kire gotarekê
+** agahiya şaş dikire gotarekê
 ** naveroka rûpelekê vala kir
 ** girêdanên xerab tevlî rûpelan dikir
-** tiştên tewş dikir gotaran
+** tiştên tewş tevlî gotaran dikir
 ** heqaretkirin
 ** pir hesab bikaranîn
 ** navekî ku nayê pejirandin',
@@ -1743,6 +1737,7 @@ da bikarî navê wê rûpelê biguherînî.',
 'movepage-page-unmoved' => 'Rûpela $1 nikanî çûba ciha $2.',
 'movelogpage' => 'guhertina nav',
 'movelogpagetext' => 'Li jêr lîsteyek ji rûpelan ku navê wan hatiye guherandin heye.',
+'movenosubpage' => 'Binrûpelên vê rûpelê tune ne.',
 'movereason' => 'Sedem',
 'revertmove' => 'şûnde vegerîne',
 'delete_and_move' => 'Jêbibe û nav biguherîne',
@@ -1874,6 +1869,8 @@ Ji ber ku girêdaneke derve di wê rûpelê de heye ev pirsgirêk pêk hat.',
 'pageinfo-redirectsto-info' => 'agahî',
 'pageinfo-contentpage-yes' => 'Erê',
 'pageinfo-protect-cascading-yes' => 'Erê',
+'pageinfo-category-pages' => 'hejmara rûpelan',
+'pageinfo-category-subcats' => 'Hejmara binkategoriyan',
 
 # Patrolling
 'markaspatrolleddiff' => 'Wek serrastkirî nîşan bide',
@@ -2115,11 +2112,13 @@ Ji kerema xwe zanibe ku tu bi rastî dixwazî vê rûpelê dîsa çêkî.",
 'specialpages-group-users' => 'Bikarhêner û maf',
 'specialpages-group-pages' => 'Lîstên rûpelan',
 'specialpages-group-pagetools' => 'Amûrên rûpelê',
+'specialpages-group-wiki' => 'Dane û amûr',
 
 # Special:BlankPage
 'blankpage' => 'Rûpela vala',
 
 # Special:Tags
+'tag-filter' => 'Parzûna [[Special:Tags|nîşankirinê]]:',
 'tag-filter-submit' => 'Parzûn',
 'tags-title' => 'Nîşankirin',
 'tags-tag' => 'Tag name',
index d7a4bdb..860610d 100644 (file)
@@ -399,7 +399,7 @@ $messages = array(
 'otherlanguages' => 'An anere Sproochen',
 'redirectedfrom' => '(Virugeleet vu(n) $1)',
 'redirectpagesub' => 'Viruleedungssäit',
-'lastmodifiedat' => "Dës Säit gouf den $1 ëm $2 Auer fir d'lescht geännert.",
+'lastmodifiedat' => "Dës Säit gouf de(n) $1 ëm $2 Auer fir d'lescht geännert.",
 'viewcount' => 'Dës Säit gouf bis elo {{PLURAL:$1|emol|$1-mol}} ofgefrot.',
 'protectedpage' => 'Gespaarte Säit',
 'jumpto' => 'Wiesselen op:',
@@ -728,7 +728,7 @@ Vläicht hutt Dir Äert Passwuert scho geännert oder en neit temporäert Passwu
 'passwordreset-capture-help' => 'Wann Dir dës Këscht ukräizt, gëtt de Mail (mam temporäre Passwuert) Iech gewisen an dem Benotzer geschéckt.',
 'passwordreset-email' => 'E-Mailadress:',
 'passwordreset-emailtitle' => 'Detailer vum Benotzerkont op{{SITENAME}}',
-'passwordreset-emailtext-ip' => "Iergendee mat der IP-Adress $1, wahrscheinlech Dir selwer, huet eng Erënnerung fir Är Benotzerkonteninformatiounen op {{SITENAME}} gefrot ($4). {{PLURAL:$3|De Benotzerkont ass|D'Benutzerkonte si}} mat dëser E-Mail-Adress verbonn:
+'passwordreset-emailtext-ip' => "Iergendee mat der IP-Adress $1, wahrscheinlech Dir selwer, huet d'Zrécksetze vun Ärem Passwuert op {{SITENAME}} gefrot ($4). {{PLURAL:$3|De Benotzerkont ass|D'Benutzerkonte si}} mat dëser E-Mail-Adress verbonn:
 
 $2
 
@@ -1106,7 +1106,7 @@ Dir hutt keen Zougang dozou.',
 'revdelete-no-change' => "'''Opgepasst:''' D'Element vum $2 ëm $1 Auer huet schonn déi ugefrote Sichtbarkeetsastellung.",
 'revdelete-concurrent-change' => "Feeler beim Ännere vum Element vum $1 ëm $2 Auer: säit Statut schéngt geännert ginn ze si während Dir vericht hutt et z'änneren.
 Kuckt w.e.g. an de Logbicher no.",
-'revdelete-only-restricted' => 'Feler beim verstoppe vum Objet vum $2, $1: Dir kënnt keng Objete virun den Administrateure verstoppen ouni och eng vun den aneren Optiounen vum weisen erauszesichen.',
+'revdelete-only-restricted' => 'Feeler beim verstoppe vum Element vum $2, $1: Dir kënnt keng Elementer virun den Administrateure verstoppen ouni och eng vun den aneren Optiounen vum weisen erauszesichen.',
 'revdelete-reason-dropdown' => "* Generell Läschgrënn
 ** Verletzung vun den Droits d'Auteur
 ** Net ubruechte perséinlech Informatioun
@@ -2097,15 +2097,6 @@ Et muss mindestens en Top-Level-Domaine ugi ginn, wéi z. Bsp. ".org".<br />
 'listusers-noresult' => 'Kee Benotzer fonnt.',
 'listusers-blocked' => '(gespaart)',
 
-# Special:ActiveUsers
-'activeusers' => 'Lëscht vun den aktive Benotzer',
-'activeusers-intro' => 'Dëst ass eng Lëscht vun de Benotzer déi op iergend eng Manéier an de leschten $1 {{PLURAL:$1|Dag|Deeg}} aktiv waren.',
-'activeusers-count' => '$1 {{PLURAL:$1|Aktioun|Aktiounen}} {{PLURAL:$3|gëschter|an de leschten $3 Deeg}}',
-'activeusers-from' => 'Benotzer weisen, ugefaang bäi:',
-'activeusers-hidebots' => 'Botte verstoppen',
-'activeusers-hidesysops' => 'Administrateure verstoppen',
-'activeusers-noresult' => 'Keng Benotzer fonnt.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechter vun de Benotzergruppen',
 'listgrouprights-summary' => 'Dëst ass eng Lëscht vun den op dëser Wiki definéierte Benotzergruppen an den domat verbonnene Rechter.
@@ -3582,7 +3573,7 @@ Dëse Confirmatiouns-Code leeft den $4 of.',
 'table_pager_first' => 'Éischt Säit',
 'table_pager_last' => 'Lescht Säit',
 'table_pager_limit' => '$1 Objete pro Säit weisen',
-'table_pager_limit_label' => 'Objete pro Säit:',
+'table_pager_limit_label' => 'Elementer pro Säit:',
 'table_pager_limit_submit' => 'Lass',
 'table_pager_empty' => 'Keng Resultater',
 
@@ -3773,9 +3764,9 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 # New logging system
 'logentry-delete-delete' => "$1 {{GENDER:$2|huet}} d'Säit $3 geläscht",
 'logentry-delete-restore' => "$1 {{GENDER:$2|huet}} d'Säit $3 restauréiert",
-'logentry-delete-event' => "$1 huet d'Visibilitéit vun {{PLURAL:$5|engem Evenement|$5 Evenementer}} am Logbuch op $3:$4 geännert",
-'logentry-delete-event-legacy' => "$1 huet d'Visibilitéit vun Elementer am Log op $3 geännert",
-'logentry-delete-revision-legacy' => "$1 huet d'Visibilitéit vu Versioune vun der Säit $3 geännert",
+'logentry-delete-event' => "$1 huet d'Visibilitéit vun {{PLURAL:$5|engem Evenement|$5 Evenementer}} am Logbuch op $3:$4 {{GENDER:$2|geännert}}",
+'logentry-delete-event-legacy' => "$1 huet d'Visibilitéit vun Elementer am Log op $3 {{GENDER:$2|geännert}}",
+'logentry-delete-revision-legacy' => "$1 huet d'Visibilitéit vu Versioune vun der Säit $3 {{GENDER:$2|geännert}}",
 'logentry-suppress-delete' => "$1 {{GENDER:$2|huet}} d'Säit $3 ewechgeholl",
 'logentry-suppress-event-legacy' => "$1 {{GENDER:$2|huet}} diskret d'Visibilitéit vun Elementer am Log op $3 geännert",
 'logentry-suppress-revision-legacy' => "$1 huet diskret d'Visibilitéit vu Versioune vun der Säit $3 geännert",
index f49b17b..22fc7e3 100644 (file)
@@ -163,7 +163,7 @@ $messages = array(
 'vector-action-unprotect' => 'Хуьн дегишарун',
 'vector-simplesearch-preference' => 'Гегьенш жагъурунин рикIел гъун кутун (кьилди "Вектор" акунар патал)',
 'vector-view-create' => 'Туькlуьрун',
-'vector-view-edit' => 'Дуьзар хъувун',
+'vector-view-edit' => 'Дуьзарин',
 'vector-view-history' => 'Тарихдиз килигун',
 'vector-view-view' => 'Кlелун',
 'vector-view-viewsource' => 'Чешме къалурун',
@@ -295,12 +295,12 @@ $messages = array(
 # General errors
 'error' => 'Гъалатl',
 'databaseerror' => 'Ганайбурун базадин гъалатI',
-'missing-article' => 'Малуматрин базада, квез герек авай "$1" $2 тIвар алай ччиндин текст жагъанвач
+'missing-article' => 'Малуматрин базада, квез герек авай "$1" $2 тӀвар алай ччиндин текст жагъанвач
 
-Ихьтин гьал адет яз алуднавай ччинин масакIавилерин тарихдиз цlуру  рекьяй элячlайла арадал къвезва.
+Ихьтин гьал адет яз алуднавай ччинин масакӀавилерин тарихдиз цӀуру рекьяй элячӀайла арадал къвезва.
 
-Себеб ам туштlа, виридалайни мумкин тирди куьне программада гъалатl жугъурун я
-Тавакъу ийида, URL  къалурна адакай   [[Special:ListUsers/sysop|администратордиз]] хабар це.',
+Себеб ам туштӀа, виридалайни мумкин тирди куьне программада гъалатӀ жугъурун я
+Тавакъу ийида, URL къалурна адакай [[Special:ListUsers/sysop|администратордиз]] хабар це.',
 'missingarticle-rev' => '(жуьре#: $1)',
 'internalerror' => 'КЪенепатан гъалатI',
 'internalerror_info' => 'КЪенепатан гъалатI $1',
@@ -315,7 +315,7 @@ $messages = array(
 'actionthrottled' => 'Фадвилин сергьятар',
 
 # Virus scanner
-'virus-scanfailed' => 'Сканди гъалатl (кулег$1)',
+'virus-scanfailed' => 'Сканди гъалатӀ (кулег$1)',
 'virus-unknownscanner' => 'Малумтушир антивирус',
 
 # Login and logout pages
@@ -327,7 +327,7 @@ $messages = array(
 'login' => 'Гьахьун',
 'nav-login-createaccount' => 'Гьахьун/аккаунт туькlуьрун',
 'loginprompt' => 'Системадиз гьахьун патал "куки" -яр куькlуьрна кIанзава',
-'userlogin' => 'ГЬахьун/аккаунт туькlуьрун',
+'userlogin' => 'Гьахьун/аккаунт туькӀуьрун',
 'userloginnocreate' => 'Гьахьун',
 'logout' => 'ЭкъечIун',
 'userlogout' => 'ЭкъечIун',
@@ -340,7 +340,7 @@ $messages = array(
 'userlogin-resetlink' => 'Гьахьунин куьлуь-шуьлуьяр рикlел алатнани?',
 'createaccountmail' => 'Э-чар галаз',
 'createaccountreason' => 'Себеб:',
-'loginerror' => 'ГЬахьунин гъалатI',
+'loginerror' => 'Гьахьунин гъалатӀ',
 'createaccounterror' => 'И аккаунт туькIуьриз мумкин ттуш: $1',
 'loginsuccesstitle' => 'Агалкьунралди гьахьун',
 'wrongpasswordempty' => 'Тавакъу ийида, ичIи тушир парол ттур.',
@@ -866,7 +866,7 @@ $messages = array(
 'disambiguationspage' => 'Template:гзафманавал',
 
 'brokenredirects-edit' => 'дегишарун',
-'brokenredirects-delete' => 'кÑ\8aакÑ\8aудун',
+'brokenredirects-delete' => 'алудун',
 
 'withoutinterwiki-submit' => 'КЪалурун',
 
@@ -880,7 +880,7 @@ $messages = array(
 'protectedpages' => 'Хвенвай ччинар',
 'listusers' => 'Уртахрин сиягь',
 'usercreated' => '{{GENDER:$3|Created}} идав $1 идал $2',
-'newpages' => 'ЦIийи ччинар',
+'newpages' => 'ЦӀийи ччинар',
 'newpages-username' => 'Иштиракчидин тlвар',
 'ancientpages' => 'виридалайни цIуру ччинар',
 'move' => 'ТIвар эхцигун',
index 9b439ce..6f91fe0 100644 (file)
@@ -617,7 +617,7 @@ Nepamirškite pakeisti savo [[Special:Preferences|{{SITENAME}} nustatymų]].',
 'gotaccount' => "Jau turite paskyrą? '''$1'''.",
 'gotaccountlink' => 'Prisijunkite',
 'userlogin-resetlink' => 'Pamiršote savo prisijungimo duomenis?',
-'createaccountmail' => 'el. paštu',
+'createaccountmail' => 'Naudokite laikiną atsitiktinį slaptažodį ir nusiųskite jį į elektroninį paštą, nurodytą žemiau.',
 'createaccountreason' => 'Priežastis:',
 'badretype' => 'Įvesti slaptažodžiai nesutampa.',
 'userexists' => 'Įvestasis naudotojo vardas jau naudojamas.
@@ -662,6 +662,7 @@ Prašome prisijungti vėl, kai jūs jį gausite.',
 'eauthentsent' => 'Patvirtinimo laiškas buvo nusiųstas į paskirtąjį el. pašto adresą.
 Prieš išsiunčiant kitą laišką į jūsų dėžutę, jūs turite vykdyti nurodymus laiške, kad patvirtintumėte, kad dėžutė tikrai yra jūsų.',
 'throttled-mailpassword' => 'Slaptažodžio priminimas jau buvo išsiųstas, per {{PLURAL:$1|$1 paskutinę valandą|$1 paskutines valandas|$1 paskutinių valandų}}.
+
 Norint apsisaugoti nuo piktnaudžiavimo, slaptažodžio priminimas gali būti išsiųstas tik kas {{PLURAL:$1|$1 valandą|$1 valandas|$1 valandų}}.',
 'mailerror' => 'Klaida siunčiant paštą: $1',
 'acct_creation_throttle_hit' => 'Šio projekto lankytojai, naudojantys jūsų IP adresą, sukūrė {{PLURAL:$1|$1 paskyrą|$1 paskyras|$1 paskyrų}} per paskutiniąją dieną, o tai yra didžiausias leidžiamas kiekis per šį laiko tarpą.
@@ -714,7 +715,7 @@ Jūs galbūt jau sėkmingai pakeitėte savo slaptažodį ar gavote naują laikin
 
 # Special:PasswordReset
 'passwordreset' => 'Atstatyti slaptažodį',
-'passwordreset-text' => 'Užpildykite šią formą, norėdami gauti el priminimas jūsų sąskaitos informaciją.',
+'passwordreset-text' => 'Užpildykite šią formą, norėdami atkurti savo slaptažodį.',
 'passwordreset-legend' => 'Atstatyti slaptažodį',
 'passwordreset-disabled' => 'Slaptažodžių atstatymai šiame wikyje išjungti.',
 'passwordreset-pretext' => '{{PLURAL:$1| | Langelyje parašykite vieną duomenų vienetų žemiau}}',
@@ -724,8 +725,15 @@ Jūs galbūt jau sėkmingai pakeitėte savo slaptažodį ar gavote naują laikin
 'passwordreset-capture-help' => 'Jei jūs čia pažymėsite, tai e-mail laiškas (su laikinuoju slaptažodžiu) bus parodytas jums prieš išsiunčiant jį naudotojui.',
 'passwordreset-email' => 'E-pašto adresas:',
 'passwordreset-emailtitle' => 'Paskyros informacija apie {{sitename}}',
-'passwordreset-emailtext-ip' => 'Kažkas (tikriausiai jūs, IP adresu $1 ) paprašė informacijos priminimas jūsų! N! sąskaitą {{sitename}} ( $4 ). Šis vartotojas {{PLURAL:$3| sąskaita | sąskaitas}} N!! N!, susijusių su šiuo e-pašto adresą!: N!! $2 ! N! N! {{PLURAL:$3| Šis laikinas slaptažodis | Šie laikini slaptažodžiai}} baigsis {{PLURAL:$5| vieną dieną | $5 dienų}} slaptažodis.! N! Jūs turėtumėte prisijungti ir pasirinkti naują. Jei kažkas padarė tai! N! prašymu, arba jūs prisiminėte savo pirminį slaptažodį, ir jums nebereikia! N! nori ją pakeisti, galite ignoruoti šį pranešimą ir toliau naudotis savo senuoju! N! slaptažodį.',
-'passwordreset-emailtext-user' => 'Vartotojo $1 d. {{sitename}} prašoma informacija priminimas jūsų sąskaitos {{sitename}}! N! ( $4 ). Šis vartotojas {{PLURAL:$3| sąskaita | sąskaitas}}, susijusių su šiuo e-pašto adresą:! N! N! $2 ! N! N! {{PLURAL:$3| Šis laikinas slaptažodis | Šie laikini slaptažodžiai }} baigsis {{PLURAL:$5| vieną dieną | $5 dienų}} slaptažodis.! N! Jūs turėtumėte prisijungti ir pasirinkti naują. Jei kažkas padarė tai! N! prašymu, arba jūs prisiminėte savo pirminį slaptažodį, ir jums nebereikia! N! nori ją pakeisti, galite ignoruoti šį pranešimą ir toliau naudotis savo senuoju! N! slaptažodį.',
+'passwordreset-emailtext-ip' => 'Kažkas (tikriausiai jūs, IP adresu $1) paprašė priminti jūsų slaptažodį svetainėje {{SITENAME}} ($4). Šio naudotojo {PLURAL:$3|paskyra|paskyros}} yra susietos su šiuo elektroninio pašto adresu $2
+
+{{PLURAL:$3|Šis laikinas slaptažodis |Šie laikini slaptažodžiai}} baigsis po {{PLURAL:$5|vienos dienos| $5 dienų}}. 
+
+Jūs turėtumėte prisijungti ir pasirinkti naują slaptažodį. Jei kažkas kitas padarė šį prašymą arba jūs prisiminėte savo pirminį slaptažodį, ir jums nebereikia jo pakeisti, galite ignoruoti šį pranešimą ir toliau naudotis savo senuoju slaptažodžiu.',
+'passwordreset-emailtext-user' => 'Naudotojas $1 svetainėje {{SITENAME}} sukūrė užklausą slaptažodžio priminimui svetainėje {{SITENAME}}
+($4). Šio naudotojo {{PLURAL:$3|paskyra|paskyros}} susieto su šiuo elektroniniu paštu $2. 
+
+{{PLURAL:$3|Šis laikinas slaptažodis|Šie laikini slaptažodžiai}} baigs galioti po {{PLURAL:$5|vienos dienos|$5 dienų}}. Jūs turėtumėte prisijungti ir pasirinkti naują slaptažodį. Jei kažkas padarė tai be jūsų žinios arba jūs prisiminėte savo pirminį slaptažodį, ir jūs nebenorite jo pakeisti, galite ignoruoti šį pranešimą ir toliau naudotis savo senuoju slaptažodžiu.',
 'passwordreset-emailelement' => 'Naudotojo vardas: $1
 Laikinas slaptažodis: $2',
 'passwordreset-emailsent' => 'Priminimo laiškas buvo išsiųstas.',
@@ -2060,15 +2068,6 @@ Palaikomi protokolai: <code>$1</code> (nei vieno iš jų nenurodykite paieškoje
 'listusers-noresult' => 'Nerasta jokių naudotojų.',
 'listusers-blocked' => '(užblokuotas)',
 
-# Special:ActiveUsers
-'activeusers' => 'Aktyvių naudotojų sąrašas',
-'activeusers-intro' => 'Tai naudotojų sąrašas, kurie ką nors padarė per $1 {{PLURAL:$1|paskutinę dieną|paskutines dienas|paskutinių dienų}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|keitimas|keitimai|keitimų}} per $3 {{PLURAL:$3|paskutinę dieną|paskutines dienas|paskutinių dienų}}',
-'activeusers-from' => 'Rodyti naudotojus, pradedant:',
-'activeusers-hidebots' => 'Slėpti robotus',
-'activeusers-hidesysops' => 'Slėpti administratorius',
-'activeusers-noresult' => 'Nerasta jokių naudotojų.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Naudotojų grupių teisės',
 'listgrouprights-summary' => 'Žemiau pateiktas naudotojų grupių, apibrėžtų šioje wiki, ir su jomis susijusių teisių sąrašas.
index 30c4628..3fd581a 100644 (file)
@@ -27,17 +27,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Hlawm thupui ding-hmeh hmangin hlawm siamţhat theihna awmtir rawh (JavaScript a ngai)',
 'tog-showtoc' => 'A chhunga thu awm te tilang rawh (thupui 3 aia tam phêk tan)',
 'tog-rememberpassword' => 'He ka rangpuifannaah hian min hre reng rawh (a rei berah ni $1  {{PLURAL:$1}})',
-'tog-watchcreations' => 'Ka phêk siamte ka ralvèn zing-ah telh rawh',
+'tog-watchcreations' => 'Ka phêk siamte leh ka taksa hlankaite ka ralvèn zing-ah telh rawh',
 'tog-watchdefault' => 'Ka phêk siamţhatte ka ralvèn zing-ah telh rawh',
-'tog-watchmoves' => 'Ka phêk sawnte ka ralvèn zing-ah telh rawh',
-'tog-watchdeletion' => 'Ka phêk nuaibo apiang ka ralvèn zingah telh rawh',
+'tog-watchmoves' => 'Ka phêk leh taksa sawnte ka ralvèn zing-ah telh rawh',
+'tog-watchdeletion' => 'Ka phêk leh taksa nuaibo apiang ka ralvèn zingah telh rawh',
 'tog-minordefault' => "Siamţhat tawh phawt chu 'tenau'-ah dah vek rawh",
 'tog-previewontop' => 'Siamţhatna bawm hmaah endikna dah rawh',
 'tog-previewonfirst' => 'Siamţhat vawi khatnaah endikna tilang rawh',
 'tog-nocache' => 'Fanna-in phêk a cache tur veng rawh',
-'tog-enotifwatchlistpages' => 'Ka ralvèn zinga phêk pakhat tihdanglam a nih apiangin e-lehkha min thawn rawh',
+'tog-enotifwatchlistpages' => 'Ka ralvèn zinga phêk emaw taksa pakhat tihdanglam a nih apiangin e-lehkha min thawn rawh',
 'tog-enotifusertalkpages' => 'Ka hmangtu-sawihona phêk tihdanglam a nihin e-lehkha min thawn rawh',
-'tog-enotifminoredits' => 'Phêk siamţhat tenauah pawh e-lehkha min thawn tho rawh',
+'tog-enotifminoredits' => 'Phêk leh taksa siamţhat tenauah pawh e-lehkha min thawn tho rawh',
 'tog-enotifrevealaddr' => 'Hriattirna email zingah ka email address pho lang rawh',
 'tog-shownumberswatching' => 'Ralvèngtu zât tilang rawh',
 'tog-oldsig' => 'Khàrna hming hman mék:',
@@ -60,7 +60,7 @@ $messages = array(
 
 'underline-always' => 'Ziah/ngei ngei',
 'underline-never' => 'Ngai lo',
-'underline-default' => 'Rängpuifanna duhdàn',
+'underline-default' => 'Vun leh rängpuifanna duhdàn',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Siamţhatna hmun hawrawp pian',
@@ -145,8 +145,9 @@ $messages = array(
 'newwindow' => '(Tukverh tharah a inhawng ang)',
 'cancel' => 'Sûtna',
 'moredotdotdot' => 'Chhunzawmna...',
-'mypage' => 'Ka phêk',
-'mytalk' => 'Ka sawihona',
+'morenotlisted' => 'Tarlan loh dang...',
+'mypage' => 'Phêk',
+'mytalk' => 'Sawihona',
 'anontalk' => 'He chenhmun-IP tana sawihona',
 'navigation' => 'Fanzauna',
 'and' => '&#32;leh',
@@ -168,7 +169,7 @@ $messages = array(
 'vector-action-protect' => 'Venhimna',
 'vector-action-undelete' => 'Lak kir lehna',
 'vector-action-unprotect' => 'Venhimna dinhmun tidanglam rawh',
-'vector-simplesearch-preference' => 'Sawn awlsam lehzualna rawtna awmtir rawh (Vektawr vun tan chauh)',
+'vector-simplesearch-preference' => 'Zawn awlsam lehzualna rawtna awmtir rawh (Vektawr vun tan chauh)',
 'vector-view-create' => 'Siamna',
 'vector-view-edit' => 'Siamţhatna',
 'vector-view-history' => 'Hunhlui-chanchin',
@@ -178,6 +179,7 @@ $messages = array(
 'namespaces' => 'Hminghmun',
 'variants' => 'Zedang',
 
+'navigation-heading' => 'Fankualna',
 'errorpagetitle' => 'Dik lo',
 'returnto' => '$1 phekah kir leh rawh.',
 'tagline' => '{{SITENAME}} aṭangin',
@@ -371,10 +373,10 @@ Thil zawn: $2',
 'viewsource-title' => '$1 hnar en rawh',
 'actionthrottled' => 'Thiltih upbeh a ni.',
 'actionthrottledtext' => 'Thu dukdak lo ven nan hun rei lo te chhunga vawi tam tak tih nawn phal loh a ni, i thiltih ngai i tihnawn ngun tawh lutuk avangin dan beh hrih i ni. Nakin deuhvah tum chhin leh rawh.',
-'protectedpagetext' => 'He phêk hi khawih danglam theih loh nan venhim hrih a ni.',
+'protectedpagetext' => 'He phêk hi khawih danglam theih emaw tihchingpen theih loh nana venhim hrih a ni.',
 'viewsourcetext' => 'A hnar i lachhawngin i en thei ang:',
 'viewyourtext' => "'''I siamţhatte''' chu he phêkah hian i enin i lachhawng thei ang.",
-'protectedinterface' => 'He phêk hian khawlthluak tan hmangtu-ţawng a phuhru a, hman khawloh a nih loh nan venhim hrih a ni.',
+'protectedinterface' => 'He phêk hian khawlthluak tan hmangtu-ţawng a phuhru a, hman khawloh a nih loh nan venhim hrih a ni. Lehlinna tidanglam tur emaw belh tur chuan [//translatewiki.net/ translatewiki.net], MediaWiki lehzauna hmachhawp hi i hmang dawn nia.',
 'sqlhidden' => '(SQL zawhna thuhrûk hrih a ni)',
 'cascadeprotected' => 'He phêk hi siam danglam phal a ni hrih lo, a chhan chu {{PLURAL:$1|he phêk|hêng phêk}}, "a huhova venhim" tih hmanga ven chhunga awm a nih vang a ni: 
 $2',
@@ -385,6 +387,7 @@ $2',
 'titleprotected' => 'He phêk hi hmangtu [[User:$1|$1]] siam phalsak a ni lo. A chhan hetah: "\'\'$2\'\'" hian pêk a ni.',
 'invalidtitle-knownnamespace' => 'Hming pawm loh hminghmun "$2"-a "$3" tih thu chuang.',
 'invalidtitle-unknownnamespace' => 'Hming pawm loh leh hminghmun zât hriat loh $1-a thu chuang "$2"',
+'exception-nologin' => 'I la lût lo',
 
 # Virus scanner
 'virus-badscanner' => "Inremdan dikhlel: Hrik thiantu hriat loh: ''$1''",
@@ -510,6 +513,7 @@ Thurûk lailâwk: $2',
 'changeemail-oldemail' => 'Tùna i e-chenhmun:',
 'changeemail-newemail' => 'E-chenhmun thar:',
 'changeemail-none' => '(pakhat mah)',
+'changeemail-password' => 'I {{SITENAME}} thurûk:',
 'changeemail-submit' => 'E-chenhmun thlâk rawh',
 'changeemail-cancel' => 'Sûtna',
 
@@ -571,7 +575,7 @@ Tihsual palh thilthua heta lo lût i nih chuan i rangpuifanna-a '''letna''' fei
 Phêk dangah [[Special:Search/{{PAGENAME}}| he phêk hming hi i zawng]] thei ang, a nih loh pawhin a laichin 
 <span class="plainlinks">[{{fullurl:{{#Special:Log}} | page={{FULLPAGENAMEE}}}} chanchin-ziak dang i zawng thei ang]; a nih loh chuan [{{fullurl:{{FULLPAGENAME}}|action=edit}} he phêk hi i siamţha thei ang] </span>.',
 'noarticletext-nopermission' => 'He phêkah hian thu a la awm hrih lo.
-He phêk hming hi hmun dangah i [[Special:Search/{{PAGENAME}}|zawng]] thei ang, a nih loh pawhin <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}-a a laichin chanchin dang] i zawng thei bawk ang. </span>',
+He phêk hming hi hmun dangah i [[Special:Search/{{PAGENAME}}|zawng]] thei ang, a nih loh pawhin <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}-a a laichin chanchin dang] i zawng thei bawk ang,</span> mahsé hë phêk siam phalna hi i nei lo tlat thung.',
 'userpage-userdoesnotexist' => 'Hmangtu siangchan "$1" hi hriat a ni lo.
 He phêk hi siam/siamţhat emaw i duh chuan enfiah rawh.',
 'userpage-userdoesnotexist-view' => 'Hmangtu siangchan "$1" hi hriat a ni lo.',
@@ -579,6 +583,7 @@ He phêk hi siam/siamţhat emaw i duh chuan enfiah rawh.',
 I rawn atan a danbeh chhinchhiahna kan han tarlang a ni e:',
 'usercssyoucanpreview' => "'''Rawlrûk:''' I CSS fiah tùrin i dahţhat hmain \"{{int:showpreview}}\" hmehkhep hi hmang rawh.",
 'userjsyoucanpreview' => "'''Rawlrûk:''' I JavaScript thar fiah tùrin i dahţhat hmain \"{{int:showpreview}}\" hmehkhep hi hmang rawh.",
+'updated' => '(Bithuam fel a ni)',
 'note' => "'''Hriat tùr:'''",
 'previewnote' => "'''Heihi endikna chauh a ni tih hrereng ang che.'''
 I tihdanglamna dahţhat a la ni lo!",
@@ -626,6 +631,13 @@ Nuaibo a ni tawh a nih hmèl.',
 'edit-already-exists' => 'Phêk thar siam theih a ni lo.
 A awm tawh sa.',
 'defaultmessagetext' => 'Thuthawn tùr ziahsa',
+'invalid-content-data' => 'Kentel phal loh thil',
+
+# Content models
+'content-model-wikitext' => 'wikithü',
+'content-model-text' => 'thutluang',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''Vaukhanna:''' Siamsa telh a lian leh lutuk.
@@ -634,6 +646,12 @@ Siamsa ţhenkhat hmaih a ni ang.",
 'post-expand-template-argument-warning' => "'''Vaukhanna:''' He phekah hian siamsa kawng kaihparh theih lenzawng nei lian leh lutuk pakhat tal a awm a ni.
 Heng kawngte hi hmaih mai tur.",
 'post-expand-template-argument-category' => 'Siamsa kawng hmaih awmna phekte',
+'parser-template-loop-warning' => 'Siamsa inthawnkual a awm tlat: [[$1]]',
+'language-converter-depth-warning' => 'Ṭawng lehna thûkzawng pèl ($1)',
+'node-count-exceeded-category' => 'Tihbawk theih chin pèl phêkte',
+'node-count-exceeded-warning' => 'Suihbawl theih chin pèl phêkte',
+'expansion-depth-exceeded-category' => 'Tihchiam theih chin pèl phêkte',
+'expansion-depth-exceeded-warning' => 'Tihchiam theih chin phêkin a pèl',
 
 # History pages
 'viewpagelogs' => 'He phêk chanchin hi en rawh',
@@ -1351,12 +1369,6 @@ Hetah hian [[Special:UnusedCategories|pawl hman lohho]] pholan tel a ni lo.
 'listusers-noresult' => 'Hmangtu an awm lo.',
 'listusers-blocked' => '(danbeh)',
 
-# Special:ActiveUsers
-'activeusers' => 'Hmangtu hlun tlarna',
-'activeusers-hidebots' => 'Khawlmi thupna',
-'activeusers-hidesysops' => 'Roreltu thupna',
-'activeusers-noresult' => 'Hmangtu awm lo.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Hmangtu pawl dikna-chanvote',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">Dikna-chanvo phalsak</span>
index 45cb9d0..90ebad7 100644 (file)
@@ -1727,14 +1727,6 @@ Skatīt arī [[Special:WantedCategories|''sarkanās'' kategorijas]].",
 'listusers-noresult' => 'Neviens lietotājs nav atrasts.',
 'listusers-blocked' => '(bloķēts)',
 
-# Special:ActiveUsers
-'activeusers' => 'Aktīvo lietotāju saraksts',
-'activeusers-intro' => 'Šis ir lietotāju saraksts, kas veikuši kādu darbību {{PLURAL:daudzskaitlī:$1|pēdējā|pēdējās}} $1 {{PLURAL:daudzskaitlī:$1|dienā|dienās}}.',
-'activeusers-from' => 'Parādīt lietotājus sākot ar:',
-'activeusers-hidebots' => 'Paslēpt botus',
-'activeusers-hidesysops' => 'Paslēpt administratorus',
-'activeusers-noresult' => 'Neviens lietotājs nav atrasts.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Lietotāju grupu tiesības',
 'listgrouprights-summary' => 'Šis ir šajā wiki definēto lietotāju grupu uskaitījums, kopā ar tām atbilstošajām piekļuves tiesībām.
index 97adada..adcf9c3 100644 (file)
@@ -1828,9 +1828,9 @@ $1",
 'tmp-write-error' => 'Грешка при запис на привремената податотека.',
 'large-file' => 'Се препорачува податотеките да не бидат поголеми од $1; оваа податотека е $2.',
 'largefileserver' => 'Големината на оваа податотека е поголема од максимално дозволената големина од серверот.',
-'emptyfile' => 'Ð\9fодаÑ\82оÑ\82екаÑ\82а Ñ\88Ñ\82о Ñ\98а Ð¿Ð¾Ð´Ð¸Ð³Ð½Ð°Ð²Ñ\82е Ð¸Ð·Ð³Ð»ÐµÐ´Ð° Ð´ÐµÐºÐ° Ðµ Ð¿Ñ\80азна.
-Ова може да е поради грешка во името на податотеката.
\92е Ð¼Ð¾Ð»Ð¸Ð¼Ðµ Ð¿Ñ\80овеÑ\80еÑ\82е Ð´Ð°Ð»Ð¸ Ð½Ð°Ð²Ð¸Ñ\81Ñ\82ина Ñ\81акаÑ\82е Ð´Ð° Ñ\98а Ð¿Ð¾Ð´Ð¸Ð³Ð½ÐµÑ\82е Ð¾Ð²Ð°а податотека.',
+'emptyfile' => 'Податотеката што ја подигнавте е празна.
+Ова може да се должи на грешка во нејзиното име.
\9fÑ\80овеÑ\80еÑ\82е Ð´Ð°Ð»Ð¸ Ð½Ð°Ð²Ð¸Ñ\81Ñ\82ина Ñ\81акаÑ\82е Ð´Ð° Ñ\98а Ð¿Ð¾Ð´Ð¸Ð³Ð½ÐµÑ\82е Ð²Ð°ÐºÐ²Ð°Ñ\82а податотека.',
 'windows-nonascii-filename' => 'Опслужувачот не поддржува податотечни имиња со специјални знаци.',
 'fileexists' => 'Податотека со ова име веќе постои, проверете <strong>[[:$1]]</strong> ако не сте сигурни дали сакате да го промените.
 [[$1|thumb]]',
@@ -2337,15 +2337,6 @@ $1',
 'listusers-noresult' => 'Не е пронајден корисник.',
 'listusers-blocked' => '(блокиран)',
 
-# Special:ActiveUsers
-'activeusers' => 'Список на активни корисници',
-'activeusers-intro' => 'Ова е список на корисници кои биле на некој начин активни во последните $1 {{PLURAL:$1|ден|дена}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|дејство|дејства}} {{PLURAL:$3|денес|во последните $3 дена}}',
-'activeusers-from' => 'Прикажи корисници почнувајќи од:',
-'activeusers-hidebots' => 'Скриј ботови',
-'activeusers-hidesysops' => 'Скриј администратори',
-'activeusers-noresult' => 'Нема пронајдено корисници.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права на кориснички групи',
 'listgrouprights-summary' => 'Следи список на кориснички групи утврдени на ова вики, заедно со нивните придружни права на пристап.
index 83a8cc4..712ccff 100644 (file)
@@ -2246,15 +2246,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'listusers-noresult' => 'ഈ സംഘത്തിൽ ഉൾപ്പെടുന്ന ഉപയോക്താക്കൾ ആരും ഇല്ല.',
 'listusers-blocked' => '(തടയപ്പെട്ടു)',
 
-# Special:ActiveUsers
-'activeusers' => 'സജീവ ഉപയോക്താക്കളുടെ പട്ടിക',
-'activeusers-intro' => 'ഇത് കഴിഞ്ഞ {{PLURAL:$1|ദിവസം|$1 ദിവസങ്ങളിൽ}} ഏതെങ്കിലും വിധത്തിലുള്ള പ്രവർത്തനങ്ങൾ ചെയ്ത ഉപയോക്താക്കളുടെ പട്ടികയാണ്.',
-'activeusers-count' => 'കഴിഞ്ഞ {{PLURAL:$3|ഒരു ദിവസം|$3 ദിവസങ്ങളിൽ}} {{PLURAL:$1|ഒരു പ്രവൃത്തി|$1 പ്രവൃത്തികൾ}}',
-'activeusers-from' => 'ഇങ്ങനെ തുടങ്ങുന്ന ഉപയോക്താക്കളെ കാട്ടുക:',
-'activeusers-hidebots' => 'യന്ത്രങ്ങളെ മറയ്ക്കുക',
-'activeusers-hidesysops' => 'കാര്യനിർവാഹകരെ മറയ്ക്കുക',
-'activeusers-noresult' => 'ഉപയോക്താക്കളില്ല',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ഉപയോക്തൃവിഭാഗത്തിന്റെ അവകാശങ്ങൾ',
 'listgrouprights-summary' => 'ഈ വിക്കിയിൽ നിർവ്വചിക്കപ്പെട്ടിരിക്കുന്ന ഉപയോക്തൃസംഘങ്ങളെയും, ആ സംഘങ്ങൾക്ക് പ്രാപ്തമായിട്ടുള്ള അവകാശങ്ങളേയും താഴെ കുറിച്ചിരിക്കുന്നു.
@@ -3855,7 +3846,7 @@ $5
 
 ഈ പ്രോഗ്രാമിനൊപ്പം [{{SERVER}}{{SCRIPTPATH}}/COPYING ഗ്നു സാർവ്വജനിക അനുവാദപത്രത്തിന്റെ ഒരു പകർപ്പ്] താങ്കൾക്ക് ലഭിച്ചിരിക്കും; ഇല്ലെങ്കിൽ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA എന്ന വിലാസത്തിലെഴുതുക അല്ലെങ്കിൽ [//www.gnu.org/licenses/old-licenses/gpl-2.0.html അനുവാദപത്രം ഓൺലൈനായി വായിക്കുക].',
 'version-software' => 'ഇൻസ്റ്റോൾ ചെയ്ത സോഫ്റ്റ്‌വെയർ',
-'version-software-product' => 'à´¸àµ\8bà´«àµ\8dà´±àµ\8dà´±àµ\8dâ\80\8cà´µàµ\86യർ à´\89à´²àµ\8dà´ªàµ\8dപനàµ\8dà´¨à´\82',
+'version-software-product' => 'സോഫ്റ്റ്‌വെയർ ഉല്പന്നം',
 'version-software-version' => 'വിവരണം',
 'version-entrypoints' => 'പ്രവേശനസ്ഥാന യു.ആർ.എല്ലുകൾ',
 'version-entrypoints-header-entrypoint' => 'പ്രവേശനസ്ഥാനം',
index 1cd2025..b0ae88e 100644 (file)
@@ -1089,7 +1089,7 @@ Xiquitta $2 ic yancuīc tlapololiztli.',
 'protectexpiry' => 'Tlamiliztli:',
 'protect_expiry_invalid' => 'Ahcualli tlamiliztli cāhuitl.',
 'protect-default' => 'Ticmācāhuaz mochintin in tlatequitiltilīltin',
-'protect-fallback' => 'Tiquihuīquilia tlahuelītiliztli "$1"',
+'protect-fallback' => 'Zan momācāhuazqueh tlatequitiltilīltin in tēmācāhualiztica «$1»',
 'protect-level-autoconfirmed' => 'Tiquinquīxtīz yancuīc tlatequitiltilīltin īhuan in ahmo ōmocalacqueh',
 'protect-level-sysop' => 'Zan tētlamahmacanih',
 'protect-expiring' => 'motlamīz $1 (UTC)',
index 092f063..7257f69 100644 (file)
@@ -2256,15 +2256,6 @@ Det kreves at det oppgis minst et toppnivådomene, for eksempel «*.org».<br />
 'listusers-noresult' => 'Ingen brukere funnet.',
 'listusers-blocked' => '(konto blokkert)',
 
-# Special:ActiveUsers
-'activeusers' => 'Liste over aktive brukere',
-'activeusers-intro' => 'Dette er en liste over brukere som har hatt en eller annen form for aktivitet innenfor {{PLURAL:$1|den siste dagen|de siste dagene}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|endring|endringer}} {{PLURAL:$3|det siste døgnet|de siste $3 dagene}}',
-'activeusers-from' => 'Vis brukere fra og med:',
-'activeusers-hidebots' => 'Skjul roboter',
-'activeusers-hidesysops' => 'Skjul administratorer',
-'activeusers-noresult' => 'Ingen brukere funnet.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rettigheter for brukergrupper',
 'listgrouprights-summary' => 'Følgende er en liste over brukergrupper som er definert på denne wikien, og hvilke rettigheter de har.
index d155c76..d7a5a18 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Geitost
+ * @author Joachim Mos
  * @author Kaganer
  * @author Purodha
  * @author Slomox
@@ -710,9 +711,14 @@ Villicht hest du dien Passwoord al ännert oder noch wedder en nee temporär Pas
 # Special:PasswordReset
 'passwordreset' => 'Passwoord torüchsetten',
 'passwordreset-legend' => 'Passwoord torüchsetten',
+'passwordreset-username' => 'Brukernaam:',
+'passwordreset-domain' => 'Domään',
+'passwordreset-email' => 'E-Mail-Adress:',
 
 # Special:ChangeEmail
 'changeemail' => 'E-Mail-Adress ännern',
+'changeemail-newemail' => 'Nee E-Mail-Adress:',
+'changeemail-cancel' => 'Afbreken',
 
 # Edit page toolbar
 'bold_sample' => 'Fetten Text',
@@ -892,6 +898,11 @@ Schient so, as wenn se wegdaan worrn is.',
 'edit-no-change' => 'Dien Ännern is nich afspiekert worrn, denn dor hett sik nix an’n Text ännert.',
 'edit-already-exists' => 'Kunn keen ne’e Sied opstellen, dat gifft ehr al.',
 
+# Content models
+'content-model-wikitext' => 'Wikitext',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Wohrschau: Disse Sied bruukt to veel opwännige Parserfunkschonen.
 
@@ -1502,6 +1513,7 @@ Wenn du ehr liekers hoochladen wullt, gah trüch un laad de Datei ünner en anne
 'sourceurl' => 'Born-URL:',
 'destfilename' => 'Dateinaam, so as dat hier spiekert warrn schall:',
 'upload-maxfilesize' => 'Maximale Dateigrött: $1',
+'upload-description' => 'Dateibeschrieven',
 'watchthisupload' => 'Op disse Datei oppassen',
 'filewasdeleted' => 'En Datei mit dissen Naam hett dat al mal geven un is denn wegsmeten worrn. Kiek doch toeerst in dat $1 na, ehrdat du de Datei afspiekerst.',
 'filename-bad-prefix' => "De Naam vun de Datei fangt mit '''„$1“''' an. Dat is normalerwies en Naam, den de Datei automaatsch vun de Digitalkamera kriggt. De Naam beschrievt de Datei nich un seggt dor ok nix över ut. Söök di doch en Naam för de Datei ut, de ok wat över den Inholt seggt.",
@@ -1637,6 +1649,7 @@ Denk dor an, natokieken, wat nich noch annere Sieden na de Vörlagen wiest, ehrd
 'statistics-header-edits' => 'Änner-Statistik',
 'statistics-header-views' => 'Siedenweddergaav-Statistik',
 'statistics-header-users' => 'Brukerstatistik',
+'statistics-header-hooks' => 'Annere Statistiken',
 'statistics-articles' => 'Inholtssieden',
 'statistics-pages' => 'Sieden',
 'statistics-pages-desc' => 'All Sieden in dit Wiki, tohoop mit all Diskuschoonssieden, Redirects usw.',
@@ -1654,6 +1667,8 @@ Denk dor an, natokieken, wat nich noch annere Sieden na de Vörlagen wiest, ehrd
 'disambiguationspage' => 'Template:Mehrdüdig_Begreep',
 'disambiguations-text' => 'Disse Sieden wist na Sieden för mehrdüdige Begrepen. Se schöölt lever op de Sieden wiesen, de egentlich meent sünd.<br />Ene Siet warrt as Siet för en mehrdüdigen Begreep ansehn, wenn [[MediaWiki:Disambiguationspage]] na ehr wiest.<br />Lenken ut annere Naamrüüm sünd nich mit in de List.',
 
+'pageswithprop-submit' => 'Los',
+
 'doubleredirects' => 'Dubbelte Wiederleiden',
 'doubleredirectstext' => '<b>Wohrscho:</b> Disse List kann „falsche Positive“ bargen.
 Dat passeert denn, wenn en Wiederleiden blangen de Wiederleiden-Verwies noch mehr Text mit annere Verwiesen hett.
@@ -1799,15 +1814,6 @@ Kiek ok bi de [[Special:WantedCategories|wünschten Kategorien]].',
 'listusers-noresult' => 'Keen Bruker funnen.',
 'listusers-blocked' => '(sperrt)',
 
-# Special:ActiveUsers
-'activeusers' => 'Aktive Brukers',
-'activeusers-intro' => 'Dit is en List von Brukers, de {{PLURAL:$1|den verleden Dag|de verleden $1 Daag}} aktiv wesen sünd.',
-'activeusers-count' => '$1 {{PLURAL:$1|Ännern|Ännern}} {{PLURAL:$3|den verleden Dag|in de verleden $3 Daag}}',
-'activeusers-from' => 'Brukers wiesen vanaf:',
-'activeusers-hidebots' => 'Bots nich wiesen',
-'activeusers-hidesysops' => 'Administraters nich wiesen',
-'activeusers-noresult' => 'Keen Brukers funnen.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Brukergruppen-Rechten',
 'listgrouprights-summary' => 'Dit is en List vun de Brukergruppen, de in dit Wiki defineert sünd, un de Rechten, de dor mit verbunnen sünd.
@@ -1831,6 +1837,8 @@ Mehr Informatschonen över enkelte Rechten staht ünner [[{{MediaWiki:Listgroupr
 'mailnologin' => 'Du büst nich anmellt.',
 'mailnologintext' => 'Du musst [[Special:UserLogin|anmellt wesen]] un in diene [[Special:Preferences|Instellungen]] en güllige E-Mail-Adress hebben, dat du annere Brukers E-Mails tostüren kannst.',
 'emailuser' => 'E-Mail an dissen Bruker',
+'emailuser-title-target' => 'Email düss {{GENDER:$1|user}}',
+'emailuser-title-notarget' => 'E-Mail an Bruker',
 'emailpage' => 'E-Mail an Bruker',
 'emailpagetext' => 'Du kannst dissen Bruker mit dit Formular en E-Mail tostüren. As Afsenner warrt de E-Mail-Adress ut dien [[Special:Preferences|Instellen]] indragen, dat de Bruker di antern kann.',
 'usermailererror' => 'Dat Mail-Objekt hett en Fehler trüchgeven:',
@@ -1841,6 +1849,8 @@ Mehr Informatschonen över enkelte Rechten staht ünner [[{{MediaWiki:Listgroupr
 'noemailtext' => 'Disse Bruker hett kene güllige E-Mail-Adress angeven.',
 'nowikiemailtitle' => 'E-Mails sünd nich verlöövt',
 'nowikiemailtext' => 'Disse Bruker will vun annere Brukers keen E-Mails tostüürt kriegen.',
+'emailusername' => 'Brukernaam:',
+'emailusernamesubmit' => 'Wedder',
 'email-legend' => 'en annern Bruker op {{SITENAME}} en E-Mail tostüren',
 'emailfrom' => 'Vun:',
 'emailto' => 'An:',
@@ -2126,6 +2136,9 @@ De jüngste Indrag in dat Sperr-Logbook wart ünnen wiest:',
 'whatlinkshere-filters' => 'Filters',
 
 # Block/unblock
+'autoblockid' => 'Autoblock #$1',
+'block' => 'Bruker blocken',
+'unblock' => 'Bruker freegeven',
 'blockip' => 'IP-Adress blocken',
 'blockip-title' => 'Bruker sperren',
 'blockip-legend' => 'Bruker blocken',
@@ -2167,6 +2180,7 @@ Op de [[Special:BlockList|IP-Blocklist]] is en List vun alle Blocks to finnen.',
 'ipusubmit' => 'Disse Sperr opheven',
 'unblocked' => '[[User:$1|$1]] freegeven',
 'unblocked-id' => 'Sperr $1 freegeven',
+'blocklist' => 'Sparrte Brukers',
 'ipblocklist' => 'Sparrte Brukers',
 'ipblocklist-legend' => 'Blockten Bruker finnen',
 'ipblocklist-submit' => 'Söken',
@@ -2337,6 +2351,8 @@ Wenn du blot de aktuelle hebben wist, kannst du ok en Lenk bruken, to’n Bispee
 'allmessagescurrent' => 'Text nu',
 'allmessagestext' => 'Dit is de List vun de Systemnarichten, de dat in den MediaWiki-Naamruum gifft.',
 'allmessagesnotsupportedDB' => '{{ns:special}}:Allmessages is nich ünnerstütt, vun wegen dat wgUseDatabaseMessages utstellt is.',
+'allmessages-filter-all' => 'All',
+'allmessages-language' => 'Spraak:',
 'allmessages-filter-submit' => 'Los',
 
 # Thumbnails
@@ -2474,10 +2490,12 @@ All Transwiki-Import-Akschonen staht later ok in dat [[Special:Log/import|Import
 # Attribution
 'anonymous' => '{{PLURAL:$1|Anonym Bruker|Anonyme Brukers}} vun {{SITENAME}}',
 'siteuser' => '{{SITENAME}}-Bruker $1',
+'anonuser' => '{{SITENAME}} anonym  Bruker user $1',
 'lastmodifiedatby' => 'Disse Siet weer dat letzte Maal $2, $1 vun $3 ännert.',
 'othercontribs' => 'Grünnt op Arbeid vun $1.',
 'others' => 'annere',
 'siteusers' => '{{SITENAME}}-{{PLURAL:$2|Bruker|Brukers}} $1',
+'anonusers' => '{{SITENAME}} anonym {{PLURAL:$2|user|users}} $1',
 'creditspage' => 'Sieten-Autoren',
 'nocredits' => 'Dor is keen Autorenlist för disse Siet verfögbor.',
 
@@ -2489,6 +2507,16 @@ All Transwiki-Import-Akschonen staht later ok in dat [[Special:Log/import|Import
 'spam_reverting' => 'Trüchdreiht na de letzte Version ahn Lenken na $1.',
 'spam_blanking' => 'All Versionen harrn Lenken na $1, rein maakt.',
 
+# Info page
+'pageinfo-title' => 'Informatschoon för "$1"',
+'pageinfo-article-id' => 'Sied-ID',
+'pageinfo-redirectsto-info' => 'Info',
+'pageinfo-contentpage-yes' => 'Jo',
+'pageinfo-protect-cascading-yes' => 'Jo',
+'pageinfo-category-info' => 'Kategorieinformatschoon',
+'pageinfo-category-pages' => 'Tall vun Sied',
+'pageinfo-category-subcats' => 'TAll vun Ünnerkategorien',
+
 # Skin names
 'skinname-standard' => 'Klassik',
 'skinname-nostalgia' => 'Nostalgie',
@@ -2536,6 +2564,7 @@ $1',
 'file-nohires' => 'Gifft dat Bild nich grötter.',
 'svg-long-desc' => 'SVG-Datei, Utgangsgrött: $1 × $2 Pixel, Dateigrött: $3',
 'show-big-image' => 'Dat Bild wat grötter',
+'show-big-image-size' => '$1 × $2 Pixels',
 'file-info-gif-looped' => 'löppt as Slööp',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|Bild|Biller}}',
 'file-info-png-looped' => 'löppt as Slööp',
@@ -2694,6 +2723,10 @@ Wiedere warrt standardmatig nich anwiest:
 'exif-gpsareainformation' => 'Naam vun dat GPS-Rebeet',
 'exif-gpsdatestamp' => 'GPS-Datum',
 'exif-gpsdifferential' => 'GPS-Differentialkorrektur',
+'exif-source' => 'Born',
+'exif-writer' => 'Schriever',
+'exif-languagecode' => 'Spraak',
+'exif-iimcategory' => 'Kategorie',
 
 # EXIF attributes
 'exif-compression-1' => 'Unkomprimeert',
@@ -2843,6 +2876,18 @@ Wiedere warrt standardmatig nich anwiest:
 'exif-gpsdirection-t' => 'Wohre Richtung',
 'exif-gpsdirection-m' => 'Magneetsch Richtung',
 
+'exif-dc-publisher' => 'Verleger',
+
+'exif-iimcategory-clj' => 'Kriminalität un Recht',
+'exif-iimcategory-edu' => 'Uptucht',
+'exif-iimcategory-hth' => 'Gesundheit',
+'exif-iimcategory-lab' => 'Arbeit',
+'exif-iimcategory-pol' => 'Politik',
+'exif-iimcategory-rel' => 'Religion un Gloov',
+'exif-iimcategory-sci' => 'Wetenschap un Technologie',
+'exif-iimcategory-spo' => 'Sport',
+'exif-iimcategory-wea' => 'Wedder',
+
 # External editor support
 'edit-externally' => 'Änner disse Datei mit en extern Programm',
 'edit-externally-help' => '(Lees de [//www.mediawiki.org/wiki/Manual:External_editors Installatschoonshelp] wenn du dor mehr to weten wullt)',
@@ -2901,6 +2946,12 @@ Wist du de Siet würklich nee anleggen?",
 'confirm-purge-top' => 'Den Cache vun disse Siet leddig maken?',
 'confirm-purge-bottom' => 'Maakt den Cache vun en Sied leddig un sorgt dor för dat de aktuelle Version wiest warrt.',
 
+# action=watch/unwatch
+'confirm-watch-button' => 'Jo',
+'confirm-watch-top' => 'Disse Siet to de Oppasslist hentofögen',
+'confirm-unwatch-button' => 'Jo',
+'confirm-unwatch-top' => 'Disse Siet vun de Oppasslist löschen',
+
 # Multipage image navigation
 'imgmultipageprev' => '← vörige Siet',
 'imgmultipagenext' => 'nächste Siet →',
@@ -2961,6 +3012,9 @@ Du kannst ok de [[Special:EditWatchlist|normale Sied to’n Ännern]] bruken.',
 'watchlisttools-edit' => 'Oppasslist ankieken un ännern',
 'watchlisttools-raw' => 'Oppasslist as Textlist ännern',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskusschoon]])',
+
 # Core parser functions
 'unknown_extension_tag' => 'Unbekannt Extension-Tag „$1“',
 'duplicate-defaultsort' => 'Wohrschau: De DEFAULTSORTKEY „$2“ överschrifft den vörher bruukten Slötel „$1“.',
@@ -2986,6 +3040,7 @@ Du kannst ok de [[Special:EditWatchlist|normale Sied to’n Ännern]] bruken.',
 'version-software' => 'Installeerte Software',
 'version-software-product' => 'Produkt',
 'version-software-version' => 'Version',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Dateipadd',
index e9f518f..2899f3b 100644 (file)
@@ -2361,15 +2361,6 @@ Heeft tenminste een topleveldomein nodig, zoals bijvoorbeeld "*.org".<br />
 'listusers-noresult' => 'Geen gebruiker gevonden.',
 'listusers-blocked' => '(geblokkeerd)',
 
-# Special:ActiveUsers
-'activeusers' => 'Aanwezige gebruikers',
-'activeusers-intro' => 'Dit is een lijst met gebruikers die enige activiteit hebben laten zien in de afgelopen {{PLURAL:$1|dag|$1 dagen}}.',
-'activeusers-count' => '$1 recente {{PLURAL:$1|handeling|handelingen}} in de {{PLURAL:$3|afgelopen dag|laatste $3 dagen}}',
-'activeusers-from' => 'Gebruikers worden weergegeven vanaf:',
-'activeusers-hidebots' => 'Bots verbergen',
-'activeusers-hidesysops' => 'Beheerders verbergen',
-'activeusers-noresult' => 'Geen actieve gebruikers gevonden.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechten van gebruikersgroepen',
 'listgrouprights-summary' => 'Op deze pagina staan de gebruikersgroepen in deze wiki beschreven, met hun bijbehorende rechten.
index 62483f9..74db847 100644 (file)
@@ -2210,15 +2210,6 @@ Det er påkravt med eit toppnivådomene, til dømes «*.org».<br />
 'listusers-noresult' => 'Ingen brukarnamn vart funne.',
 'listusers-blocked' => '(konto blokkert)',
 
-# Special:ActiveUsers
-'activeusers' => 'Liste over aktive brukarar',
-'activeusers-intro' => 'Dette er ei liste over brukarar som har hatt ei eller anna form for aktivitet innanfor {{PLURAL:$1|den siste dagen|dei siste dagane}}.',
-'activeusers-count' => '{{PLURAL:$1|Éi handling|$1 handlingar}} {{PLURAL:$3|det siste døgeret|dei siste $3 døgra}}',
-'activeusers-from' => 'Vis brukarar frå og med:',
-'activeusers-hidebots' => 'Skjul botar',
-'activeusers-hidesysops' => 'Skjul administratorar',
-'activeusers-noresult' => 'Ingen brukarar funne.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rettar for brukargrupper',
 'listgrouprights-summary' => 'Detter ei liste som viser brukargruppene som er definerte på wikien, og kva rettar dei har. Det kan finnast [[{{MediaWiki:Listgrouprights-helppage}}|meir informasjon]]  om dei ulike rettane.',
@@ -2525,7 +2516,7 @@ $1',
 'tooltip-invert' => 'Hak av boksen for å gøyma endringar på sider i det valde namnerommet (og det tilknytte namnerommet om det er haka av)',
 'namespace_association' => 'Tilknytt namnerom',
 'tooltip-namespace_association' => 'Hak av boksen for at diskusjonssida eller emnenamnerommet knytt til det valde namnerommet skal vera med òg',
-'blanknamespace' => '(Hovud)',
+'blanknamespace' => '(hovud)',
 
 # Contributions
 'contributions' => '{{GENDER:$1|Brukarbidrag}}',
@@ -3916,7 +3907,7 @@ Bilete vert viste i full oppløysing, andre filtypar vert starta direkte i dei t
 'logentry-newusers-create' => 'Brukarkontoen $1 vart oppretta',
 'logentry-newusers-create2' => 'Brukarkontoen $3 vart oppretta av $1',
 'logentry-newusers-byemail' => 'Brukarkontoen $3 vart oppretta av $1 og passord vart sendt med e-post',
-'logentry-newusers-autocreate' => 'Kontoen $1 vart oppretta av seg sjølv',
+'logentry-newusers-autocreate' => 'Brukarkontoen $1 vart {{GENDER:$2|oppretta}} av seg sjølv',
 'logentry-rights-rights' => '$1 endra gruppemedlemskap for $3 frå $4 til $5',
 'logentry-rights-rights-legacy' => '$1 endra gruppemedlemskap for $3',
 'logentry-rights-autopromote' => '$1 vart automatisk forfremja frå $4 til $5',
index 9c35059..ff44208 100644 (file)
@@ -2226,15 +2226,6 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'listusers-noresult' => 'ଜଣେ ବି ସଭ୍ୟ ମିଳିଲେ ନାହିଁ ।',
 'listusers-blocked' => '(ଅଟକାଯାଇଥିବା)',
 
-# Special:ActiveUsers
-'activeusers' => 'ସଚଳ ସଭ୍ୟଙ୍କ ତାଲିକା',
-'activeusers-intro' => 'ବିଗତ $1 {{PLURAL:$1|ଦିନ|ଦିନ}} ଭିତରେ କିଛି ପ୍ରକାରର କାମ କରିଥିବା ସଭ୍ୟମାନଙ୍କର ତାଲିକା ।',
-'activeusers-count' => 'ବିଗତ {{PLURAL:$3|ଦିନ|$3 ଦିନରେ}}ରେ $1ଟି {{PLURAL:$1|ସମ୍ପାଦନା|ସମ୍ପାଦନାଗୁଡିକ}}',
-'activeusers-from' => 'ଏହି ନାମରେ ଆରମ୍ଭ ହେଉଥିବା ସଭ୍ୟମାନଙ୍କୁ ଦେଖାଇବେ:',
-'activeusers-hidebots' => 'ଆପେଆପେ ଚାଳିତ ସଭ୍ୟମାନଙ୍କୁ ଲୁଚାନ୍ତୁ',
-'activeusers-hidesysops' => 'ପରିଚାଳକମାନଙ୍କୁ ଲୁଚାଇବେ',
-'activeusers-noresult' => 'ଜଣେ ବି ସଭ୍ୟ ମିଳିଲେ ନାହିଁ ।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ସଭ୍ୟ ଗୋଠ ଅଧିକାରସମୂହ',
 'listgrouprights-summary' => 'ତଳେ ଉଇକି ସ୍ଥିର କରାଯାଇଥିବା ଏକ ଏକ ବ୍ୟବହାରକାରୀ ଗୋଠର ତାଲିକା ଦିଆଯାଇଛି, ସେଥିରେ ସେମାନଙ୍କ ବ୍ୟବହାର ଅଧିକାର ବାବଦରେ ମଧ୍ୟ ଦିଆଯାଇଛି ।
index e5e57aa..e7c7f5b 100644 (file)
@@ -782,7 +782,7 @@ Po otrzymaniu go zaloguj się ponownie.',
 'eauthentsent' => 'Potwierdzenie zostało wysłane na adres e‐mail.
 Zanim jakiekolwiek inne wiadomości zostaną wysłane na ten adres, należy wykonać zawarte w mailu instrukcje. Potwierdzisz w ten sposób, że ten adres e‐mail należy do Ciebie.',
 'throttled-mailpassword' => 'Przypomnienie hasła zostało już wysłane w ciągu {{PLURAL:$1|ostatniej godziny|ostatnich $1 godzin}}.
-W celu powstrzymania nadużyć możliwość wysyłania przypomnień została ograniczona do jednego na {{PLURAL:$1|godzinę|$1 godziny|$1 godzin}}.',
+Aby zapobiec nadużyciom nadużyć możliwość wysyłania przypomnień została ograniczona do jednego na {{PLURAL:$1|godzinę|$1 godziny|$1 godzin}}.',
 'mailerror' => 'W trakcie wysyłania wiadomości e‐mail wystąpił błąd: $1',
 'acct_creation_throttle_hit' => 'Z adresu IP, z którego korzystasz {{PLURAL:$1|ktoś już utworzył dziś konto|utworzono dziś $1 konta|utworzono dziś $1 kont}}, co jest maksymalną dopuszczalną liczbą w tym czasie.
 W związku z tym, osoby korzystające z tego adresu IP w chwili obecnej nie mogą założyć kolejnego.',
@@ -2096,6 +2096,8 @@ Strona uznawana jest za ujednoznaczniającą, jeśli zawiera szablon linkowany p
 'pageswithprop' => 'Strony z właściwościami',
 'pageswithprop-legend' => 'Strony z właściwościami',
 'pageswithprop-text' => 'Ta strona zawiera listę stron korzystających z właściwości.',
+'pageswithprop-prop' => 'Nazwa właściwości:',
+'pageswithprop-submit' => 'Pokaż',
 
 'doubleredirects' => 'Podwójne przekierowania',
 'doubleredirectstext' => 'Lista zawiera strony z przekierowaniami do stron, które przekierowują do innej strony.
@@ -2259,15 +2261,6 @@ Wymaga podania co najmniej domeny najwyższego poziomu np. „*.org”.<br />
 'listusers-noresult' => 'Nie znaleziono żadnego użytkownika.',
 'listusers-blocked' => '({{GENDER:$1|zablokowany|zablokowana|zablokowany}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Lista aktywnych użytkowników',
-'activeusers-intro' => 'Poniżej znajduje się lista użytkowników, którzy byli aktywni w ciągu {{PLURAL:$1|ostatniego dnia|ostatnich $1 dni}}.',
-'activeusers-count' => 'w ciągu {{PLURAL:$3|ostatniego dnia|ostatnich $3 dni}} {{GENDER:$2|wykonał|wykonała|wykonał}} $1 {{PLURAL:$1|edycję|edycje|edycji}}',
-'activeusers-from' => 'Pokaż użytkowników zaczynając od',
-'activeusers-hidebots' => 'Ukryj boty',
-'activeusers-hidesysops' => 'Ukryj administratorów',
-'activeusers-noresult' => 'Nie odnaleziono żadnego użytkownika.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Uprawnienia grup użytkowników',
 'listgrouprights-summary' => 'Poniżej znajduje się spis zdefiniowanych na tej wiki grup użytkowników, z wyszczególnieniem przydzielonych im uprawnień.
@@ -4071,7 +4064,7 @@ Grafiki są pokazywane w pełnej rozdzielczości. Inne typy plików są otwieran
 'logentry-newusers-create' => 'Konto użytkownika $1 zostało utworzone',
 'logentry-newusers-create2' => 'Konto użytkownika $3 zostało utworzone przez użytkownika $1',
 'logentry-newusers-byemail' => 'Konto $3 zostało utworzone przez użytkownika $1, hasło wysłano e-mailem',
-'logentry-newusers-autocreate' => '$1 automatycznie tworzy konto użytkownika',
+'logentry-newusers-autocreate' => '$1 automatycznie {{GENDER:$2|utworzył|utworzyła|utworzył}} konto użytkownika',
 'logentry-rights-rights' => '$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup ($4 → $5)',
 'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup',
 'logentry-rights-autopromote' => '$1 automatycznie {{GENDER:$2|zmienił|zmieniła}} przynależność ($4 → $5)',
index 21aa249..c51fe22 100644 (file)
@@ -2277,15 +2277,6 @@ Veja também as [[Special:WantedCategories|categorias desejadas]].',
 'listusers-noresult' => 'Não foram encontrados utilizadores.',
 'listusers-blocked' => '(bloqueado)',
 
-# Special:ActiveUsers
-'activeusers' => 'Utilizadores activos',
-'activeusers-intro' => 'Esta é uma lista dos utilizadores com qualquer tipo de actividade {{PLURAL:$1|no último dia|nos últimos $1 dias}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|ação|ações}} {{PLURAL:$3|no último dia|nos últimos $3 dias}}',
-'activeusers-from' => 'Mostrar utilizadores começando por:',
-'activeusers-hidebots' => 'Esconder robôs',
-'activeusers-hidesysops' => 'Esconder administradores',
-'activeusers-noresult' => 'Nenhum utilizador encontrado.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Privilégios dos grupos de utilizadores',
 'listgrouprights-summary' => 'A seguinte lista contém os grupos de utilizadores definidos nesta wiki, com os respectivos privilégios de acesso.
index 14f8b25..6644cf9 100644 (file)
@@ -458,9 +458,8 @@ See also:
 * {{msg-mw|Accesskey-n-help}}
 * {{msg-mw|Tooltip-n-help}}
 {{Identical|Help}}',
-'search' => 'Noun. Text of menu section shown on every page of the wiki above the search form.
-
-Also used as title of [[Special:Search]] page in [[Special:SpecialPages]].
+'search' => '{{doc-special|Search}}
+Noun. Text of menu section shown on every page of the wiki above the search form.
 
 See also:
 * {{msg-mw|Search}}
@@ -550,6 +549,9 @@ See also:
 {{Identical|Talk}}',
 'specialpage' => '{{Identical|Special page}}',
 'personaltools' => 'Heading for a group of links to your user page, talk page, preferences, watchlist, and contributions. This heading is visible in the sidebar in some skins. For an example, see [{{canonicalurl:Main_Page|useskin=simple}} Main Page using simple skin].',
+'postcomment' => 'Used as link text.
+
+The link points to the talk page and has the parameters "action=edit&section=new".',
 'articlepage' => "'Content page' is used for NS_MAIN and any other non-standard namespace and this message is only used in skins Nostalgia, Cologneblue and Standard in the bottomLinks part.
 
 {{Identical|Content page}}",
@@ -1072,6 +1074,7 @@ See also:
 * {{msg-mw|Tooltip-pt-logout}}
 {{Identical|Log out}}',
 'userlogout' => '{{Doc-actionlink}}
+{{doc-special|UserLogout|unlisted=1}}
 {{Identical|Log out}}',
 'notloggedin' => 'This message is displayed in the standard skin when not logged in. The message is placed above the login link in the top right corner of pages.
 
@@ -1080,7 +1083,10 @@ See also:
 * $1 - a link to the account creation form, and the text of it is {{msg-mw|Nologinlink}}',
 'nologinlink' => 'Text of the link to the account creation form. Before that link, the message {{msg-mw|Nologin}} appears.
 {{Identical|Create an account}}',
-'createaccount' => 'The title of [[Special:CreateAccount]], where users can register a new account. Used on [[Special:SpecialPages]] and on the submit button in the form where you register a new account.
+'createaccount' => '{{doc-special|CreateAccount}}
+The special page enables users to register a new account.
+
+Used on the submit button in the form where you register a new account.
 
 It is also used on the top of the page for logged out users, where it appears next to {{msg-mw|login}}, so consider making them similar.
 {{Identical|Create account}}',
@@ -1116,8 +1122,10 @@ Parameters:
 'nosuchusershort' => "Displayed when trying to log in with a non-existant username. This message is only shown when you can't create an account, otherwise the message {{msg-mw|nosuchusershort}} is displayed.",
 'nouserspecified' => 'Used as error message when username to fetch is not specified.',
 'login-userblocked' => 'This message supports GENDER, username is available in $1.',
-'wrongpassword' => 'Used as error message when the provided password is wrong.',
-'wrongpasswordempty' => 'Error message displayed when entering a blank password',
+'wrongpassword' => 'Used as error message when the provided password is wrong.
+{{Identical|Please try again}}',
+'wrongpasswordempty' => 'Error message displayed when entering a blank password.
+{{Identical|Please try again}}',
 'passwordtooshort' => 'This message is shown at
 
 * [[Special:Preferences]]
@@ -1138,7 +1146,7 @@ $1 is the minimum number of characters in the password.',
 
 Parameters:
 * $1 is a user name. This parameter can be used with GENDER.',
-'noemailcreate' => 'Error message.',
+'noemailcreate' => 'Used as error message in [[Special:UserLogin]].',
 'passwordsent' => '* $1 - username',
 'blocked-mailpassword' => 'Used as error message in password recovery.',
 'eauthentsent' => "This message appears after entering an e-mail address in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}, then clicking on '{{int:saveprefs}}'.",
@@ -1342,7 +1350,8 @@ See also:
 See also:
 * {{msg-mw|Savearticle}}
 * {{msg-mw|Accesskey-save}}
-* {{msg-mw|Tooltip-save}}',
+* {{msg-mw|Tooltip-save}}
+{{Identical|Save page}}',
 'preview' => 'The title of the Preview page shown after clicking the "Show preview" button in the edit page. Since this is a heading, it should probably be translated as a noun and not as a verb.
 
 {{Identical|Preview}}',
@@ -1755,7 +1764,8 @@ Used in History and [[Special:Contributions]].',
 It is followed by the message {{msg-mw|Viewprevnext}}.',
 'histlast' => 'This is part of the navigation message on the top and bottom of Page History pages which are lists of things in date order, e.g. [{{canonicalurl:Support|action=history}} Page History of Support].
 
-It is followed by the message {{msg-mw|Viewprevnext}}.',
+It is followed by the message {{msg-mw|Viewprevnext}}.
+{{Identical|Latest}}',
 'historysize' => '* $1 - byte count',
 'historyempty' => 'Text in page history for empty page revisions
 
@@ -1805,7 +1815,8 @@ See [{{canonicalurl:x|feed=atom&action=history}} example].',
 'rev-showdeleted' => 'Link in page history for oversight (see also {{msg-mw|rev-delundel}})
 {{Identical|Show}}',
 'revisiondelete' => '{{RevisionDelete}}
-It is the page title of [[Special:RevisionDelete]].',
+
+{{doc-special|RevisionDelete|unlisted=1}}',
 'revdelete-nooldid-title' => '{{RevisionDelete}}',
 'revdelete-nooldid-text' => '{{RevisionDelete}}',
 'revdelete-nologtype-title' => 'See also:
@@ -1999,6 +2010,7 @@ Title of the suppression log. Shown in the drop down menu at [[Special:log]] and
 'suppressionlogtext' => 'Description text of the suppression log. Shown at top of [[Special:log/suppress]].',
 
 # History merging
+'mergehistory' => '{{doc-special|MergeHistory}}',
 'mergehistory-header' => 'Used as header for Merge form in [[Special:MergeHistory]].
 
 See also:
@@ -2101,6 +2113,7 @@ A revision row in the merge history page. Parameters:
 
 # Merge log
 'mergelog' => '{{doc-logpage}}
+
 This is the name of a log of merge actions done on [[Special:MergeHistory]]. This special page and this log is not enabled by default.',
 'pagemerge-logentry' => "This log message is used in a merge log entry.
 
@@ -2687,7 +2700,8 @@ If you are in that group, you have (by default) the '''right \"autoconfirmed\"''
 If someone with this right (bots by default) edits a user talk page and marks it as minor (requires {{msg-mw|right-minoredit}}), the user will not get a notification "You have new messages".',
 'right-apihighlimits' => '{{doc-right|apihighlimits}}',
 'right-writeapi' => '{{doc-right|writeapi}}',
-'right-delete' => '{{doc-right|delete}}',
+'right-delete' => '{{doc-right|delete}}
+{{Identical|Delete page}}',
 'right-bigdelete' => '{{doc-right|bigdelete}}',
 'right-deletelogentry' => '{{doc-right|deletelogentry}}
 This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
@@ -2779,6 +2793,7 @@ Part of the "Newuserlog" extension. It is both the title of [[Special:Log/newuse
 
 # User rights log
 'rightslog' => '{{doc-logpage}}
+
 In [[Special:Log]]',
 'rightslogtext' => 'Text in [[Special:Log/rights]].',
 
@@ -2913,15 +2928,25 @@ Does not work under $wgMiserMode ([[mwr:48986|r48986]]).',
 'rc-old-title' => 'Text that shows the original title of a page, $1 is the original title text',
 
 # Recent changes linked
-'recentchangeslinked' => 'Title of [[Special:RecentChangesLinked]] and display name of page on [[Special:SpecialPages]].
-
+'recentchangeslinked' => '{{doc-special|RecentChangesLinked}}
 See also:
 * {{msg-mw|Recentchangeslinked}}
 * {{msg-mw|Accesskey-t-recentchangeslinked}}
 * {{msg-mw|Tooltip-t-recentchangeslinked}}',
-'recentchangeslinked-feed' => 'Title of [[Special:RecentChangesLinked]] and display name of page on [[Special:SpecialPages]].',
-'recentchangeslinked-toolbox' => 'Title of [[Special:RecentChangesLinked]] and display name of page on [[Special:SpecialPages]].',
-'recentchangeslinked-title' => 'Message used as title and page header on [[Special:RecentChangesLinked]] (needs an argument like "/Main Page"). Related changes are all recent change to pages that are linked from \'\'this page\'\'. "$1" is the name of the page for which related changes are shown.',
+'recentchangeslinked-feed' => 'Used in the feed object.
+
+This message follows the message {{msg-mw|Recentchangeslinked-title}}.',
+'recentchangeslinked-toolbox' => 'Used as link text, and also used as link text in the common toolbox.
+
+These links point to [[Special:RecentChangesLinked]].',
+'recentchangeslinked-title' => "Message used as title and page header on [[Special:RecentChangesLinked]] (needs an argument like \"/Main Page\").
+
+Related changes are all recent change to pages that are linked from ''this page''.
+
+This message is followed by {{msg-mw|Recentchangeslinked-feed}}.
+
+Parameters:
+* \$1 - the name of the page for which related changes are shown",
 'recentchangeslinked-noresult' => 'Used in [[Special:RecentChangesLinked]], when there are no changes.',
 'recentchangeslinked-summary' => 'Summary of [[Special:RecentChangesLinked]].',
 'recentchangeslinked-page' => '{{Identical|Page name}}',
@@ -2974,6 +2999,7 @@ Text displayed when uploading a file using [[Special:Upload]].",
 'upload-preferred' => 'Used in [[Special:Upload]].',
 'upload-prohibited' => 'Used in [[Special:Upload]].',
 'uploadlogpage' => '{{doc-logpage}}
+
 Page title of [[Special:Log/upload]].',
 'uploadlogpagetext' => 'Appears on top of [[Special:Log/upload]].',
 'filename' => '{{Identical|Filename}}',
@@ -3005,6 +3031,7 @@ See also:
 * {{msg-mw|upload-tryagain|Submit button text}}
 * {{msg-mw|reuploaddesc|button text}}',
 'ignorewarnings' => 'In [[Special:Upload]]',
+'minlength1' => 'Used as error message in [[Special:Upload]].',
 'illegalfilename' => '* $1 - filename',
 'filename-toolong' => 'Error message when uploading a file with a filename longer than the hard-coded limit of 240 bytes. This limit will never change and is hard-coded in the message.
 
@@ -3756,6 +3783,7 @@ $1 is the name of the shared repository. On wikimedia sites, $1 is {{msg-mw|shar
 * $3 is a hour
 * $4 is an URL and must follow square bracket: [$4
 {{Identical|Revert}}',
+'filerevert-badversion' => 'Used as error message.',
 
 # File deletion
 'filedelete' => 'Used as page title. Parameters:
@@ -3811,18 +3839,20 @@ See also:
 {{Identical|Download}}',
 
 # Unwatched pages
-'unwatchedpages' => 'Name of special page displayed in [[Special:SpecialPages]] for admins',
+'unwatchedpages' => '{{doc-special|UnwatchedPages}}',
 
 # List redirects
-'listredirects' => 'Name of special page displayed in [[Special:SpecialPages]].',
+'listredirects' => '{{doc-special|ListRedirects}}',
 
 # Unused templates
-'unusedtemplates' => 'Name of special page displayed in [[Special:SpecialPages]].',
+'unusedtemplates' => '{{doc-special|UnusedTemplates}}',
 'unusedtemplatestext' => 'Shown on top of [[Special:Unusedtemplates]]',
+'unusedtemplateswlh' => 'Used as link text in [[Special:UnusedTemplates]].
 
-# Random page
-'randompage' => 'Name of special page displayed in [[Special:SpecialPages]].
+The link points to the "What links here" page.',
 
+# Random page
+'randompage' => '{{doc-special|RandomPage}}
 See also:
 * {{msg-mw|Randompage}}
 * {{msg-mw|Accesskey-n-randompage}}
@@ -3832,12 +3862,11 @@ See also:
 * $2 - number of namespaces',
 
 # Random redirect
-'randomredirect' => 'Name of special page displayed in [[Special:SpecialPages]].',
+'randomredirect' => '{{doc-special|RandomRedirect}}',
 'randomredirect-nopages' => '* $1 - namespace name',
 
 # Statistics
-'statistics' => 'Name of special page displayed in [[Special:SpecialPages]].
-
+'statistics' => '{{doc-special|Statistics}}
 {{Identical|Statistics}}',
 'statistics-header-pages' => 'Used in [[Special:Statistics]]',
 'statistics-header-edits' => 'Used in [[Special:Statistics]]',
@@ -3859,6 +3888,7 @@ Possible alternatives to the word 'content' are 'subject matter' or 'wiki subjec
 'statistics-edits' => 'Used in [[Special:Statistics]]',
 'statistics-edits-average' => 'Used in [[Special:Statistics]]',
 'statistics-views-total' => 'Used in [[Special:Statistics]]',
+'statistics-views-total-desc' => 'This message follows the message {{msg-mw|statistics-views-total}}, in [[Special:Statistics]].',
 'statistics-views-peredit' => 'Used in [[Special:Statistics]]',
 'statistics-users' => '{{doc-important|Do not translate "Special:ListUsers"}}
 Used in [[Special:Statistics]].',
@@ -3867,7 +3897,7 @@ Used in [[Special:Statistics]].',
 * \$1 - Value of <code>\$wgRCMaxAge</code> in days",
 'statistics-mostpopular' => 'Used in [[Special:Statistics]]',
 
-'disambiguations' => 'Name of a special page displayed in [[Special:SpecialPages]].',
+'disambiguations' => '{{doc-special|Disambiguations}}',
 'disambiguationspage' => 'This message is the name of the template used for marking disambiguation pages. It is used by [[Special:Disambiguations]] to find all pages which link to disambiguation pages.
 
 {{doc-important|Don\'t translate the "Template:" part!}}',
@@ -3876,7 +3906,7 @@ This block of text is shown on [[:Special:Disambiguations]].
 
 \'\'\'Background information:\'\'\' Beyond telling about links going to disambiguation pages, that they are generally bad, it should explain which pages in the article namespace are seen as disambiguations: [[MediaWiki:Disambiguationspage]] usually holds a list of disambiguation templates of the local wiki. Pages linking to one of them (by transclusion) will count as disambiguation pages. Pages linking to these disambiguation pages, instead to the disambiguated article itself, are listed on [[:Special:Disambiguations]].',
 
-'pageswithprop' => 'Title for [[Special:PagesWithProp]].
+'pageswithprop' => '{{doc-special|PagesWithProp}}
 {{Identical|Page with page property}}',
 'pageswithprop-legend' => 'Legend for the input form on [[Special:PagesWithProp]].
 {{Identical|Page with page property}}',
@@ -3886,13 +3916,13 @@ This block of text is shown on [[:Special:Disambiguations]].
 'pageswithprop-submit' => 'Label for the submit button on [[Special:PagesWithProp]].
 {{Identical|Go}}',
 
-'doubleredirects' => 'Name of [[Special:DoubleRedirects]] displayed in [[Special:SpecialPages]]',
+'doubleredirects' => '{{doc-special|DoubleRedirects}}',
 'doubleredirectstext' => 'Shown on top of [[Special:Doubleredirects]]',
 'double-redirect-fixed-move' => 'This is the message in the log when the software (under the username {{msg|double-redirect-fixer}}) updates the redirects after a page move. See also {{msg|fix-double-redirects}}.',
 'double-redirect-fixed-maintenance' => 'This is the message in the log when the software (under the username {{msg-mw|double-redirect-fixer}}) updates the redirects after running maintenance/fixDoubleRedirects.php. Compare with {{msg-mw|double-redirect-fixed-move}}.',
 'double-redirect-fixer' => "This is the '''username''' of the user who updates the double redirects after a page move. A user is created with this username, so it is perhaps better to not change this message too often. See also {{msg|double-redirect-fixed-move}} and {{msg|fix-double-redirects}}.",
 
-'brokenredirects' => 'Name of [[Special:BrokenRedirects]] displayed in [[Special:SpecialPages]]',
+'brokenredirects' => '{{doc-special|BrokenRedirects}}',
 'brokenredirectstext' => 'Shown on top of [[Special:BrokenRedirects]].',
 'brokenredirects-edit' => 'Link in [[Special:BrokenRedirects]]
 
@@ -3901,12 +3931,12 @@ This block of text is shown on [[:Special:Disambiguations]].
 
 {{Identical|Delete}}',
 
-'withoutinterwiki' => 'The title of the special page [[Special:WithoutInterwiki]].',
+'withoutinterwiki' => '{{doc-special|WithoutInterwiki}}',
 'withoutinterwiki-summary' => 'Summary of [[Special:WithoutInterwiki]].',
 'withoutinterwiki-legend' => 'Used on [[Special:WithoutInterwiki]] as title of fieldset.',
 'withoutinterwiki-submit' => '{{Identical|Show}}',
 
-'fewestrevisions' => 'Name of a special page displayed in [[Special:SpecialPages]].',
+'fewestrevisions' => '{{doc-special|FewestRevisions}}',
 
 # Miscellaneous special pages
 'nbytes' => 'Message used on the history page of a wiki page. Each version of a page consist of a number of bytes. $1 is the number of bytes that the page uses. Uses plural as configured for a language based on $1.',
@@ -3920,45 +3950,47 @@ This block of text is shown on [[:Special:Disambiguations]].
 'nimagelinks' => 'Used on [[Special:MostLinkedFiles]] to indicate how often a specific file is used.',
 'ntransclusions' => 'Used on [[Special:MostLinkedTemplates]] to indicate how often a template is in use.',
 'specialpage-empty' => 'Used on a special page when there is no data. For example on [[Special:Unusedimages]] when all images are used.',
-'lonelypages' => 'Name of [[Special:LonelyPages]] displayed in [[Special:SpecialPages]]',
+'lonelypages' => '{{doc-special|LonelyPages}}',
 'lonelypagestext' => 'Text displayed in [[Special:LonelyPages]]',
-'uncategorizedpages' => 'Name of a special page displayed in [[Special:SpecialPages]].',
-'uncategorizedcategories' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'uncategorizedimages' => 'The title of the special page [[Special:UncategorizedImages]].',
-'uncategorizedtemplates' => 'The title of the special page [[Special:UncategorizedTemplates]].',
-'unusedcategories' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'unusedimages' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'popularpages' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'wantedcategories' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'wantedpages' => 'Name of special page displayed in [[Special:SpecialPages]]',
+'uncategorizedpages' => '{{doc-special|UncategorizedPages}}',
+'uncategorizedcategories' => '{{doc-special|UncategorizedCategories}}',
+'uncategorizedimages' => '{{doc-special|UncategorizedImages}}',
+'uncategorizedtemplates' => '{{doc-special|UncategorizedTemplates}}',
+'unusedcategories' => '{{doc-special|UnusedCategories}}',
+'unusedimages' => '{{doc-special|UnusedImages}}',
+'popularpages' => '{{doc-special|PopularPages}}',
+'wantedcategories' => '{{doc-special|WantedCategories}}',
+'wantedpages' => '{{doc-special|WantedPages}}',
 'wantedpages-badtitle' => "Error message shown when [[Special:WantedPages]] is listing a page with a title that shouldn't exist.
 
 $1 is a page title",
-'wantedfiles' => 'Name of special page displayed in [[Special:SpecialPages]] and title of [[Special:WantedFiles]].',
+'wantedfiles' => '{{doc-special|WantedFiles}}',
 'wantedfiletext-cat' => 'Message displayed at top of [[special:WantedFiles]]. $1 contains the name of the tracking category for broken files (Including Category prefix). {{msg-mw|wantedfiletext-nocat}} is used if the tracking category is disabled.',
 'wantedfiletext-nocat' => 'Message displayed at top of [[special:WantedFiles]] when broken file tracking category is disabled. See {{msg-mw|wantedfiletext-cat}}.',
-'wantedtemplates' => 'The page name of [[Special:WantedTemplates]].',
-'mostlinked' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'mostlinkedcategories' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'mostlinkedtemplates' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'mostcategories' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'mostimages' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'mostinterwikis' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'mostrevisions' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'prefixindex' => 'The page title of [[Special:PrefixIndex]]. When the user limits the list to a certain namespace, {{msg-mw|allinnamespace}} is used instead.',
+'wantedtemplates' => '{{doc-special|WantedTemplates}}',
+'mostlinked' => '{{doc-special|MostLinked}}',
+'mostlinkedcategories' => '{{doc-special|MostLinkedCategories}}',
+'mostlinkedtemplates' => '{{doc-special|MostLinkedTemplates}}',
+'mostcategories' => '{{doc-special|MostCategories}}',
+'mostimages' => '{{doc-special|MostImages}}',
+'mostinterwikis' => '{{doc-special|MostInterwikis}}',
+'mostrevisions' => '{{doc-special|MostRevisions}}',
+'prefixindex' => '{{doc-special|PrefixIndex}}
+When the user limits the list to a certain namespace, {{msg-mw|allinnamespace}} is used instead.',
 'prefixindex-namespace' => 'The page title of [[Special:PrefixIndex]] limited to a specific namespace. Similar to {{msg-mw|allinnamespace}}. $1 is the name of the namespace',
-'shortpages' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'longpages' => 'Name of special page displayed in [[Special:SpecialPages]]',
-'deadendpages' => 'Name of special page displayed in [[Special:SpecialPages]]',
+'shortpages' => '{{doc-special|ShortPages}}',
+'longpages' => '{{doc-special|LongPages}}',
+'deadendpages' => '{{doc-special|DeadendPages}}',
 'deadendpagestext' => 'Introductory text for [[Special:DeadendPages]]',
-'protectedpages' => 'Name of special page displayed in [[Special:SpecialPages]]',
+'protectedpages' => '{{doc-special|ProtectedPages}}',
 'protectedpages-indef' => 'Option in [[Special:ProtectedPages]]',
 'protectedpages-cascade' => 'Option in [[Special:ProtectedPages]]',
 'protectedpagestext' => 'Shown on top of [[Special:ProtectedPages]]',
-'protectedtitles' => 'Name of special page displayed in [[Special:SpecialPages]]',
+'protectedpagesempty' => 'Used in [[Special:ProtectedPages]], when there are no protected pages with the specified parameters.',
+'protectedtitles' => '{{doc-special|ProtectedTitles}}',
 'protectedtitlestext' => 'Shown on top of list of titles on [[Special:ProtectedTitles]]. If the list is empty the message [[MediaWiki:Protectedtitlesempty]] appears instead of this. See the [[mw:Project:Protected_titles|help page on MediaWiki]] for more information.',
 'protectedtitlesempty' => 'Used on [[Special:ProtectedTitles]]. This text appears if the list of protected titles is empty. See the [[mw:Project:Protected_titles|help page on MediaWiki]] for more information.',
-'listusers' => 'Name of special page displayed in [[Special:SpecialPages]]',
+'listusers' => '{{doc-special|ListUsers}}',
 'listusers-editsonly' => 'Option in [[Special:ListUsers]].',
 'listusers-creationsort' => 'Option in [[Special:ListUsers]].',
 'usereditcount' => 'Shown behind every username on [[Special:ListUsers]].',
@@ -3966,10 +3998,11 @@ $1 is a page title",
 * $1 - a date
 * $2 - a time
 * $3 - the name of the user, for use in GENDER',
-'newpages' => 'Name of special page displayed in [[Special:SpecialPages]]
+'newpages' => '{{doc-special|NewPages}}
 {{Identical|New page}}',
 'newpages-username' => '{{Identical|Username}}',
-'ancientpages' => 'The page title of [[Special:Ancientpages]]. [[mw:Manual:Interface/Special pages title|mw manual]]',
+'ancientpages' => '{{doc-special|AncientPages}}
+See [[mw:Manual:Interface/Special pages title|manual]].',
 'move' => 'Name of Move tab. Should be in the imperative mood.
 
 See also:
@@ -3979,6 +4012,7 @@ See also:
 {{Identical|Move}}',
 'movethispage' => '{{Identical|Move this page}}',
 'unusedimagestext' => 'Header message of [[Special:UnusedFiles]]',
+'unusedcategoriestext' => 'Used as page header in [[Special:UnusedCategories]].',
 'notargettitle' => 'Used as title of error message.
 
 See also:
@@ -4010,8 +4044,7 @@ See also:
 'querypage-disabled' => "On special pages that use expensive database queries but are not cacheable, this message is displayed when 'miser mode' is on (i.e. no expensive queries allowed).",
 
 # Book sources
-'booksources' => 'Name of special page displayed in [[Special:SpecialPages]]
-
+'booksources' => '{{doc-special|BookSources}}
 See also:
 * {{msg-mw|Booksources|title}}
 * {{msg-mw|Booksources-text|text}}',
@@ -4032,17 +4065,19 @@ See also:
 # Special:Log
 'specialloguserlabel' => 'Used in [[Special:Log]] as a label for an input field with which the log can be filtered for entries describing actions \'\'performed\'\' by the specified user.  "Carried out" and "done" are possible alternatives for "performed".',
 'speciallogtitlelabel' => 'Used in [[Special:Log]] as a label for an input field with which the log can be filtered.  This filter selects for pages or users on which a log action was performed.',
-'log' => 'Name of special page displayed in [[Special:SpecialPages]]',
+'log' => '{{doc-special|Log}}',
 'all-logs-page' => '{{doc-logpage}}
 Title of [[Special:Log]].',
 'alllogstext' => 'Header of [[Special:Log]]',
+'logempty' => 'Used as warning when there are no items to show.',
 'log-title-wildcard' => '* Appears in: [[Special:Log]]
 * Description: A check box to enable prefix search option',
 'showhideselectedlogentries' => 'Text of the button which brings up the [[mw:RevisionDelete|RevisionDelete]] menu on [[Special:Log]].',
 
 # Special:AllPages
-'allpages' => 'First part of the navigation bar for the special page [[Special:AllPages]] and [[Special:PrefixIndex]]. The other parts are {{msg-mw|Prevpage}} and {{msg-mw|Nextpage}}.
-
+'allpages' => '{{doc-special|AllPages}}
+First part of the navigation bar for the special page [[Special:AllPages]] and [[Special:PrefixIndex]].
+The other parts are {{msg-mw|Prevpage}} and {{msg-mw|Nextpage}}.
 {{Identical|All pages}}',
 'alphaindexline' => 'Used on [[Special:AllPages]] if the main namespace contains more than 960 pages. Indicates the page range displayed behind the link. "from page $1 to page $2". $1 is the source page name. $1 is the target page name.',
 'nextpage' => 'Third part of the navigation bar for the special page [[Special:AllPages]] and [[Special:PrefixIndex]]. $1 is a page title. The other parts are {{msg-mw|Allpages}} and {{msg-mw|Prevpage}}.
@@ -4072,6 +4107,7 @@ Title of [[Special:Log]].',
 
 {{Identical|Go}}',
 'allpagesprefix' => "Used for the label of the input box of [[Special:PrefixIndex]]. On this page you can either write 'Name of namespace:string from which to begin display in alphabetical order' in the top box, or you can choose a namespace in the bottom box and put 'string from which to begin display in alphabetical order' in the top box. The result will be the same.",
+'allpagesbadtitle' => 'Used in [[Special:AllPages]], [[Special:PrefixIndex]] and [[Special:RecentChangesLinked]].',
 'allpages-bad-ns' => '* $1 - namespace name',
 'allpages-hide-redirects' => 'Label for a checkbox. If the checkbox is checked redirects will not be shown in the list. Used in [[Special:PrefixIndex]] and [[Special:Allpages]].',
 
@@ -4088,7 +4124,21 @@ Title of [[Special:Log]].',
 Text displayed in [[Special:Categories]].
 
 In order to translate ''Unused categories'' and ''wanted categories'' see {{msg|unusedcategories}} and {{msg|wantedcategories}}.",
-'special-categories-sort-count' => 'This message is used on [[Special:Categories]] to sort the list by the number of members in the categories.',
+'categoriesfrom' => 'Used as label for the input box in [[Special:Categories]].
+
+This message follows the fieldset label {{msg-mw|categories}}, and is followed by the input box.',
+'special-categories-sort-count' => 'Commented out at this time.
+
+This message is used on [[Special:Categories]] to sort the list by the number of members in the categories.
+
+See also:
+* {{msg-mw|Special-categories-sort-abc}}',
+'special-categories-sort-abc' => 'Commented out at this time.
+
+This message is used on [[Special:Categories]] to sort the list by the category name.
+
+See also:
+* {{msg-mw|Special-categories-sort-count}}',
 
 # Special:DeletedContributions
 'deletedcontributions' => 'The message is shown as a link on user contributions page (like [[Special:Contributions/User]]) to the corresponding [[Special:DeletedContributions]] page.
@@ -4131,36 +4181,6 @@ You can apparently use 'URL' instead of 'hostname'.",
 'listusers-blocked' => 'Used on [[Special:ActiveUsers]] when a user has been blocked.
 * $1 is a user name for use with GENDER (optional)',
 
-# Special:ActiveUsers
-'activeusers' => 'Title of [[Special:ActiveUsers]]',
-'activeusers-intro' => 'Used as introduction in [[Special:ActiveUsers]]. Parameters:
-* $1 - number of days (<code>$wgActiveUserDays</code>)',
-'activeusers-count' => "Used in [[Special:ActiveUsers]] to show the active user's recent action count in brackets ([]).
-* $1 is the number of recent actions
-* $2 is the user's name for use with GENDER (optional)
-* $3 is the maximum number of days of the RecentChangesList",
-'activeusers-from' => 'Used as label for checkbox in the form on [[Special:ActiveUsers]].
-
-identical with {{msg-mw|listusersfrom}}
-
-See also:
-* {{msg-mw|activeusers|legend for the form}}
-* {{msg-mw|activeusers-hidebots|label for checkbox}}
-* {{msg-mw|activeusers-hidesysops|label for checkbox}}',
-'activeusers-hidebots' => 'Used as label for checkbox in the form on [[Special:ActiveUsers]].
-
-See also:
-* {{msg-mw|activeusers|legend for the form}}
-* {{msg-mw|activeusers-from|label for input box}}
-* {{msg-mw|activeusers-hidesysops|label for checkbox}}',
-'activeusers-hidesysops' => 'Used as label for checkbox in the form on [[Special:ActiveUsers]].
-
-See also:
-* {{msg-mw|activeusers|legend for the form}}
-* {{msg-mw|activeusers-from|label for input box}}
-* {{msg-mw|activeusers-hidebots|label for checkbox}}',
-'activeusers-noresult' => 'identical with {{msg-mw|listusers-noresult}}',
-
 # Special:ListGroupRights
 'listgrouprights' => 'The name of the special page [[Special:ListGroupRights]].',
 'listgrouprights-summary' => 'The description used on [[Special:ListGroupRights]].',
@@ -4216,9 +4236,11 @@ See also:
 * {{msg-mw|Emailuser}}
 * {{msg-mw|Accesskey-t-emailuser}}
 * {{msg-mw|Tooltip-t-emailuser}}',
-'emailuser-title-target' => 'Title of [[Special:EmailUser|special page]] when a user was given to e-mail. Parameters:
-* $1 is a plain text username, used for GENDER.',
-'emailuser-title-notarget' => 'Title of [[Special:EmailUser|special page]] when no user given to e-mail yet',
+'emailuser-title-target' => '{{doc-special|EmailUser|unlisted=1}}
+Used when a user was given to e-mail. Parameters:
+* $1 - a plain text username, used for GENDER.',
+'emailuser-title-notarget' => '{{doc-special|EmailUser|unlisted=1}}
+Used when no user given to e-mail yet.',
 'emailpage' => "Title of special page [[Special:EmailUser]], when it is the destination of the sidebar link {{msg-mw|Emailuser}} on a user's page.",
 'emailpagetext' => 'This is the text that is displayed above the e-mail form on [[Special:EmailUser]].
 
@@ -4282,11 +4304,25 @@ Parameters:
 {{Identical|For $1}}',
 'nowatchlist' => 'Displayed when there is no pages in the watchlist.',
 'watchlistanontext' => '* $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
-'watchnologin' => '{{Identical|Not logged in}}',
-'addwatch' => 'Link to a dialog box, displayed at the end of the list of categories at the foot of each page.',
+'watchnologin' => 'Used as error page title.
+
+The error message for this title is:
+* {{msg-mw|Watchnologintext}}
+{{Identical|Not logged in}}',
+'watchnologintext' => 'Used as error message.
+
+The title for this error is {{msg-mw|Watchnologin}}.',
+'addwatch' => 'Link to a dialog box, displayed at the end of the list of categories at the foot of each page.
+
+See also:
+* {{msg-mw|Removewatch}}',
 'addedwatchtext' => 'Explanation shown when clicking on the {{msg-mw|watch}} tab.
 
 See also {{msg-mw|addedwatch}}.',
+'removewatch' => 'Link to a dialog box, displayed at the end of the list of categories at the foot of each page.
+
+See also:
+* {{msg-mw|Addwatch}}',
 'removedwatchtext' => "After a page has been removed from a user's watchlist by clicking the {{msg|unwatch}} tab at the top of an article, this message appears just below the title of the article. $1 is the title of the article. See also {{msg|removedwatch}} and {{msg|addedwatchtext}}.",
 'watch' => '{{doc-actionlink}}
 Name of the Watch tab. Should be in the imperative mood.
@@ -4455,6 +4491,8 @@ Possible value for $CHANGEDORCREATED in the following messages:
 * {{msg|enotif_body}}',
 
 # Delete
+'deletepage' => 'Used as Submit button text.
+{{Identical|Delete page}}',
 'confirm' => 'Submit button text for protection confirmation
 
 {{Identical|Confirm}}',
@@ -4480,8 +4518,8 @@ See also:
 * $1 is a page that was deleted
 * $2 is {{msg-mw|deletionlog}}',
 'dellogpage' => '{{doc-logpage}}
-The name of the deletion log. Used as heading on [[Special:Log/delete]] and in the drop down menu for selecting logs on [[Special:Log]].
 
+The name of the deletion log. Used as heading on [[Special:Log/delete]] and in the drop down menu for selecting logs on [[Special:Log]].
 {{Identical|Deletion log}}',
 'dellogpagetext' => 'Text in [[Special:Log/delete]].',
 'deletionlog' => 'This message is used to link to the deletion log:
@@ -4567,6 +4605,7 @@ The title for this error message is {{msg-mw|Sessionfailure-title}}.',
 
 # Protect
 'protectlogpage' => '{{doc-logpage}}
+
 Title of [[Special:Log/protect]].',
 'protectlogtext' => 'Text in [[Special:Log/protect]].',
 'protectedarticle' => 'Text describing an action on [[Special:Log]]. $1 is a page title.',
@@ -4621,14 +4660,18 @@ Also used in [[Special:ProtectedPages]] when a page is cascade protected. See ex
 See also:
 *{{msg-mw|Restriction-level-sysop}}
 *{{msg-mw|Restriction-level-autoconfirmed}}',
-'protect-expiring' => 'Used in page history, and in [[Special:Protectedtitles]], [[Special:Protectedpages]], and extension FlaggedRevs.
-* $1 is a date and time
-* $2 is a date (optional)
-* $3 is a time (optional)
-
+'protect-expiring' => 'Used as expiry text in page history, and in [[Special:Protectedtitles]], [[Special:Protectedpages]], and extension FlaggedRevs.
+* $1 - a date and time
+* $2 - a date (optional)
+* $3 - a time (optional)
+If the expiry is indefinite, {{msg-mw|protect-expiry-indefinite}} is used.
 {{Identical|Expires $1 (UTC)}}',
 'protect-expiring-local' => '$1 is a timestamp like "22:51, 23 July 2011 (UTC)" depending on the wiki content language.',
+'protect-expiry-indefinite' => 'Used as expiry text in page history, and in [[Special:Protectedtitles]], [[Special:Protectedpages]], and extension FlaggedRevs.
+
+If the expiry is definite, {{msg-mw|protect-expiring}} is used.',
 'protect-cascade' => 'See [[meta:Protect]] for more information.',
+'protect-cantedit' => 'Used as error message when changing the protection levels of the page.',
 'protect-othertime' => 'Used on the page protection form as label for the following input field (text)
 {{Identical|Other time}}',
 'protect-othertime-op' => 'Used on the page protection form in the drop down menu
@@ -4691,8 +4734,7 @@ See also:
 *{{msg-mw|Restriction-level-autoconfirmed}}",
 
 # Undelete
-'undelete' => 'Name of special page for admins as displayed in [[Special:SpecialPages]].
-
+'undelete' => '{{doc-special|Undelete}}
 See also:
 * {{msg-mw|Undelete}}
 * {{msg-mw|Accesskey-ca-undelete}}
@@ -4734,6 +4776,7 @@ Parameters:
 * $5 - time of the revision
 Example:
 * Deleted revision of [[Main Page]] (as of {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, at {{CURRENTTIME}}) by [[User:Username|Username]]:',
+'undeleterevision-missing' => 'Used as warning when undeleting the revision.',
 'undelete-nodiff' => 'Used in [[Special:Undelete]].',
 'undeletebtn' => 'Shown on [[Special:Undelete]] as button caption and on [[Special:Log/delete|deletion log]] after each entry (for sysops).
 
@@ -5010,8 +5053,8 @@ See also:
 # Block/unblock
 'autoblockid' => 'Used as name of autoblock, instead of autoblocked IPs. Parameters:
 * $1 - autoblock ID',
-'block' => 'Name of the special page on [[Special:SpecialPages]]',
-'unblock' => 'Name of the special page on [[Special:SpecialPages]]',
+'block' => '{{doc-special|Block}}',
+'unblock' => '{{doc-special|Unblock}}',
 'blockip' => 'The title of the special page [[Special:BlockIP]].
 
 {{Identical|Block user}}',
@@ -5019,6 +5062,12 @@ See also:
 'blockip-legend' => 'Legend/Header for the fieldset around the input form of [[Special:Block]].
 
 {{Identical|Block user}}',
+'blockiptext' => 'Used in the {{msg-mw|Blockip}} form in [[Special:Block]].
+
+This message may follow the message {{msg-mw|Ipb-otherblocks-header}} and other block messages.
+
+See also:
+* {{msg-mw|Unblockiptext}}',
 'ipadressorusername' => '{{Identical|IP address or username}}',
 'ipbexpiry' => '{{Identical|Expiry}}',
 'ipbreason' => 'Label of the block reason dropdown in [[Special:BlockIP]] and the unblock reason textfield in [{{fullurl:Special:IPBlockList|action=unblock}} Special:IPBlockList?action=unblock].
@@ -5100,13 +5149,33 @@ The title (subject) for this message is {{msg-mw|Blockipsuccesssub}}.
 
 Parameters:
 * $1 - username, can be used for GENDER',
+'ipb-blockingself' => 'Used as confirmation message in [[Special:Block]].
+
+See also:
+* {{msg-mw|Ipb-confirmhideuser}}',
+'ipb-confirmhideuser' => 'Used as confirmation message in [[Special:Block]].
+
+See also:
+* {{msg-mw|Ipb-blockingself}}',
 'ipb-edit-dropdown' => 'Shown beneath the user block form on the right side. It is a link to {{msg-mw|Ipbreason-dropdown|notext=1}}.
 
 See also:
 * {{msg-mw|Delete-edit-reasonlist}}
 * {{msg-mw|Protect-edit-reasonlist}}',
-'ipb-unblock-addr' => 'Used in [[Special:Block]].
-* $1 - target username',
+'ipb-unblock-addr' => 'Used as page title in [[Special:Block]], if the target user is specified.
+
+Parameters:
+* $1 - target username
+
+See also:
+* {{msg-mw|Ipb-unblock}}',
+'ipb-unblock' => 'Used as page title in [[Special:Block]], if the target user is not specified.
+
+See also:
+* {{msg-mw|Ipb-unblock-addr}}',
+'ipb-blocklist' => 'Used as link text in [[Special:Block]].
+
+The link points to Specil:BlockList.',
 'ipb-blocklist-contribs' => 'Used in [[Special:Block]].
 * $1 - target username',
 'unblockip' => 'Used as legend for the form in [[Special:Unblock]].',
@@ -5131,6 +5200,7 @@ See also:
 See also:
 * {{msg-mw|Unblocked}}
 * {{msg-mw|Unblocked-range}}',
+'blocklist' => '{{doc-special|BlockList}}',
 'ipblocklist' => 'Title of [[Special:Ipblocklist]].',
 'ipblocklist-legend' => 'Used as legend of the form in [[Special:BlockList]].
 
@@ -5216,7 +5286,14 @@ See also {{msg-mw|Block-log-flags-nousertalk}}.
 Part of the log entry of user block in [[Special:BlockList]].
 
 {{Related|Blocklist}}',
-'ipblocklist-empty' => 'Shown on page [[Special:Blocklist]], if no blocks are to be shown.',
+'ipblocklist-empty' => 'Used in [[Special:BlockList]], if the target is not specified.
+
+See also:
+* {{msg-mw|Ipblocklist-no-results}}',
+'ipblocklist-no-results' => 'Used in [[Special:BlockList]], if the target is specified.
+
+See also:
+* {{msg-mw|Ipblocklist-empty}}',
 'blocklink' => "Display name for a link that, when selected, leads to a form where a user can be blocked. Used in page history and recent changes pages. Example: \"''UserName (Talk | contribs | '''block''')''\".
 
 Used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
@@ -5241,7 +5318,8 @@ See also:
 * {{msg-mw|sp-contributions-uploads}}
 * {{msg-mw|sp-contributions-logs}}
 * {{msg-mw|sp-contributions-deleted}}
-* {{msg-mw|sp-contributions-userrights}}',
+* {{msg-mw|sp-contributions-userrights}}
+{{Identical|Unblock}}',
 'change-blocklink' => 'Used to name the link on [[Special:Log]].
 
 Also used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].
@@ -5315,7 +5393,9 @@ See also:
 * {{msg-mw|Range block disabled}}
 * {{msg-mw|Ip range invalid}}
 * {{msg-mw|Ip range toolarge}}',
+'ipb_expiry_invalid' => 'Used as error message in [[Special:Block]].',
 'ipb_expiry_temp' => 'Warning message displayed on [[Special:BlockIP]] if the option "hide username" is selected but the expiry time is not infinite.',
+'ipb_hide_invalid' => 'Used as error message in [[Special:Block]].',
 'ipb_already_blocked' => '{{Identical|$1 is already blocked}}',
 'ipb-needreblock' => 'Used in [[Special:Block]].
 * $1 - target username',
@@ -5338,7 +5418,8 @@ See also:
 * {{msg-mw|Range block disabled}}
 * {{msg-mw|Ip range invalid}}
 * {{msg-mw|Ip range toolarge}}',
-'blockme' => 'The page title of [[Special:Blockme]], a feature which is disabled by default.',
+'blockme' => '{{doc-special|BlockMe|unlisted=1}}
+This feature is disabled by default.',
 'proxyblocker' => 'Used in [[Special:BlockMe]].
 
 See also:
@@ -5644,6 +5725,7 @@ See also:
 * $2 - new page title',
 'movepage-max-pages' => 'PROBABLY (A GUESS): when moving a page, you can select an option of moving its subpages, but there is a maximum that can be moved automatically.',
 'movelogpage' => '{{doc-logpage}}
+
 Title of [[Special:Log/move]]. Used as heading on that page, and in the dropdown menu on log pages.',
 'movelogpagetext' => "Text on the special page 'Move log'.",
 'movesubpage' => "This is a section header on [[Special:MovePage]], below is a list of subpages.
@@ -5842,6 +5924,7 @@ The reason $1 is one of the following messages:
 * {{msg-mw|Thumbnail-dest-create}}
 * {{msg-mw|Thumbnail dest directory}}
 * {{msg-mw|Thumbnail invalid params}}
+* {{msg-mw|Thumbnail image-missing}}
 * {{msg-mw|Djvu no xml}}
 * {{msg-mw|Djvu page error}}
 * {{msg-mw|Svg-long-error}}
@@ -6664,7 +6747,9 @@ Used as link text, linked to '{{int:Prefixindex}}' page ([[Special:PrefixIndex]]
 'pageinfo-firsttime' => 'The date and time the page was created.',
 'pageinfo-lastuser' => 'The last user who edited the page.',
 'pageinfo-lasttime' => 'The date and time the page was last edited.',
-'pageinfo-edits' => 'The total number of times the page has been edited.',
+'pageinfo-edits' => 'Used as label in info page. See [{{canonicalurl:Support|action=info}} example].
+
+This message is followed by the total number of times the page has been edited.',
 'pageinfo-authors' => 'The total number of users who have edited the page.',
 'pageinfo-recent-edits' => 'The number of times the page has been edited recently. $1 is a localised duration (e.g. 9 days).',
 'pageinfo-recent-authors' => 'The number of users who have edited the page recently.',
@@ -7031,6 +7116,7 @@ Varient Option for wikis with variants conversion enabled.',
 # Metadata
 'metadata' => 'The title of a section on an image description page, with information and data about the image. For example of message in use see [[commons:File:Titan-crystal_bar.JPG|Commons]].
 {{Identical|Metadata}}',
+'metadata-help' => 'This message is followed by a table with metadata.',
 'metadata-expand' => 'On an image description page, there is mostly a table containing data (metadata) about the image. The most important data are shown, but if you click on this link, you can see more data and information. For the link to hide back the less important data, see {{msg-mw|Metadata-collapse}}.',
 'metadata-collapse' => 'On an image description page, there is mostly a table containing data (metadata) about the image. The most important data are shown, but if you click on the link {{msg-mw|Metadata-expand}}, you can see more data and information. This message is for the link to hide back the less important data.',
 'metadata-fields' => '{{doc-important|Do not translate list items, only translate the text! So leave "<code>* make</code>" and the other items exactly as they are.}}
@@ -7215,11 +7301,7 @@ See [[w:Metering_mode|Wikipedia article]] on metering mode.
 'exif-flash' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 See this [[w:en:Flash_(photography)|Wikipedia article]] for an explanation of the term.
-
-See also:
-* {{msg-mw|Exif-flash}}
-* {{msg-mw|Exif-flash-fired-0}}
-* {{msg-mw|Exif-flash-fired-1}}
+{{Related|Exif-flash}}
 {{Identical|Flash}}',
 'exif-focallength' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
@@ -7422,7 +7504,9 @@ This is taken from IPTC-iim 2:135 and XMP's dc:language.
 {{Identical|Category}}',
 'exif-iimsupplementalcategory' => 'Supplemental categories. Like {{msg-mw|exif-iimcategory}} but for categories beyond the main one.',
 'exif-datetimeexpires' => 'Date after which not to use the image (media). This is often used in news situations were certain things (like forecasts) should not be used after a specified date.',
-'exif-datetimereleased' => 'Earliest date the image (media) can be used. See 2:30 of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf',
+'exif-datetimereleased' => 'Earliest date the image (media) can be used.
+
+See 2:30 of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf',
 'exif-originaltransmissionref' => 'This is basically a job id. This could help an individual keep track of for what reason the image was created. See Job Id on page 19 of http://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata-201007_1.pdf',
 'exif-identifier' => 'A formal identifier for the image. Often this is a URL.',
 'exif-lens' => 'Description of lens used. This is taken from aux:Lens XMP property. See http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart2.pdf',
@@ -7500,6 +7584,18 @@ Lempel-Ziv & Welch algorithm',
 'exif-photometricinterpretation-2' => '{{optional}}',
 'exif-photometricinterpretation-6' => '{{optional}}',
 
+'exif-unknowndate' => 'Used if the Exif date and time is "<code>0000:00:00 00:00:00</code>".
+
+Related Exif attributes:
+* {{msg-mw|Exif-datetime}}
+* {{msg-mw|Exif-datetimeoriginal}}
+* {{msg-mw|Exif-datetimedigitized}}
+* {{msg-mw|Exif-datetimereleased}}
+* {{msg-mw|Exif-datetimeexpires}}
+* {{msg-mw|Exif-gpsdatestamp}}
+* {{msg-mw|Exif-dc-date}}
+* {{msg-mw|Exif-datetimemetadata}}',
+
 'exif-orientation-1' => '0th row: top; 0th column: left
 {{Related|Exif-orientation}}
 {{Identical|Normal}}',
@@ -7626,55 +7722,28 @@ See also:
 'exif-lightsource-255' => '{{Related|Exif-lightsource}}',
 
 # Flash modes
-'exif-flash-fired-0' => 'See also:
-* {{msg-mw|Exif-flash}}
-* {{msg-mw|Exif-flash-fired-0}}
-* {{msg-mw|Exif-flash-fired-1}}',
-'exif-flash-fired-1' => 'See also:
-* {{msg-mw|Exif-flash}}
-* {{msg-mw|Exif-flash-fired-0}}
-* {{msg-mw|Exif-flash-fired-1}}',
+'exif-flash-fired-0' => '{{Related|Exif-flash}}',
+'exif-flash-fired-1' => '{{Related|Exif-flash}}',
 'exif-flash-return-0' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 "Strobe" and "flash" mean the same here.
-
-See also:
-* {{msg-mw|Exif-flash-return-0}}
-* {{msg-mw|Exif-flash-return-2}}
-* {{msg-mw|Exif-flash-return-3}}',
+{{Related|Exif-flash}}',
 'exif-flash-return-2' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 "Strobe" and "flash" mean the same here.
-
-See also:
-* {{msg-mw|Exif-flash-return-0}}
-* {{msg-mw|Exif-flash-return-2}}
-* {{msg-mw|Exif-flash-return-3}}',
+{{Related|Exif-flash}}',
 'exif-flash-return-3' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
 
 "Strobe" and "flash" mean the same here.
-
-See also:
-* {{msg-mw|Exif-flash-return-0}}
-* {{msg-mw|Exif-flash-return-2}}
-* {{msg-mw|Exif-flash-return-3}}',
+{{Related|Exif-flash}}',
 'exif-flash-mode-1' => 'This is when you have chosen that your camera must use a flash for this picture.
-
-See also:
-* {{msg-mw|Exif-flash-mode-1}}
-* {{msg-mw|Exif-flash-mode-2}}
-* {{msg-mw|Exif-flash-mode-3}}',
+{{Related|Exif-flash}}',
 'exif-flash-mode-2' => "This is when you have chosen that your camera must ''not'' use a flash for this picture.
-
-See also:
-* {{msg-mw|Exif-flash-mode-1}}
-* {{msg-mw|Exif-flash-mode-2}}
-* {{msg-mw|Exif-flash-mode-3}}",
-'exif-flash-mode-3' => 'See also:
-* {{msg-mw|Exif-flash-mode-1}}
-* {{msg-mw|Exif-flash-mode-2}}
-* {{msg-mw|Exif-flash-mode-3}}',
-'exif-flash-function-1' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].',
+{{Related|Exif-flash}}",
+'exif-flash-mode-3' => '{{Related|Exif-flash}}',
+'exif-flash-function-1' => 'Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].
+{{Related|Exif-flash}}',
+'exif-flash-redeye-1' => '{{Related|Exif-flash}}',
 
 'exif-focalplaneresolutionunit-2' => 'See also:
 * {{msg-mw|Exif-focalplaneresolutionunit}}',
@@ -8333,8 +8402,7 @@ Parameters:
 'duplicate-defaultsort' => 'See definition of [[w:Sorting|sort key]] on Wikipedia.',
 
 # Special:Version
-'version' => 'Name of special page displayed in [[Special:SpecialPages]]
-
+'version' => '{{doc-special|Version}}
 {{Identical|Version}}',
 'version-extensions' => 'Header on [[Special:Version]].',
 'version-specialpages' => 'Part of [[Special:Version]].
@@ -8418,7 +8486,8 @@ $1 is the name of the requested file.',
 * $1 - file name',
 
 # Special:SpecialPages
-'specialpages' => 'Display name of link to [[Special:SpecialPages]] shown on all pages in the toolbox, as well as the page title and header of [[Special:SpecialPages]].
+'specialpages' => '{{doc-special|SpecialPages|unlisted=1}}
+Display name of link to [[Special:SpecialPages]] shown on all pages in the toolbox.
 
 See also:
 * {{msg-mw|Specialpages}}
@@ -8426,22 +8495,22 @@ See also:
 * {{msg-mw|Tooltip-t-specialpages}}
 {{Identical|Special page}}',
 'specialpages-note' => 'Footer note for the [[Special:SpecialPages]] page',
-'specialpages-group-maintenance' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
-'specialpages-group-other' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
-'specialpages-group-login' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
-'specialpages-group-changes' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
-'specialpages-group-media' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
-'specialpages-group-users' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
-'specialpages-group-highuse' => 'Section heading in the list of [[Special:SpecialPages|Special pages]].',
-'specialpages-group-pages' => 'Used on [[Special:SpecialPages]]. Title of the special pages group, containing pages like [[Special:AllPages]], [[Special:PrefixIndex]], [[Special:Categories]], [[Special:Disambiguations]], etc.',
-'specialpages-group-pagetools' => 'Title of the special pages group containing special pages like [[Special:MovePage]], [[Special:Undelete]], [[Special:WhatLinksHere]], [[Special:Export]] etc.',
-'specialpages-group-wiki' => 'Title of the special pages group, containing special pages like [[Special:Version]], [[Special:Statistics]], [[Special:LockDB]], etc.',
-'specialpages-group-redirects' => 'Title of the special pages group, containing special pages that redirect to another location, like [[Special:Randompage]], [[Special:Mypage]], [[Special:Mytalk]], etc.',
-'specialpages-group-spam' => 'Title of the special pages group, containing special pages like (...), etc.',
+'specialpages-group-maintenance' => '{{doc-special-group|like=[[Special:DoubleRedirects]], [[Special:LonelyPages]] and [[Special:WantedPages]]}}',
+'specialpages-group-other' => '{{doc-special-group|like=[[Special:AdminLinks]] and [[Special:BookSources]]}}',
+'specialpages-group-login' => '{{doc-special-group|like=[[Special:UserLogin]]}}',
+'specialpages-group-changes' => '{{doc-special-group|like=[[Special:Log]], [[Special:NewPages]] and [[Special:RecentChanges]]}}',
+'specialpages-group-media' => '{{doc-special-group|like=[[Special:FilePath]], [[Special:MIMESearch]] and [[Special:Upload]]}}',
+'specialpages-group-users' => '{{doc-special-group|like=[[Special:ActiveUsers]], [[Special:Contributions]] and [[Special:ListGroupRights]]}}',
+'specialpages-group-highuse' => '{{doc-special-group|like=[[Special:MostCategories]], [[Special:MostLinked]] and [[Special:MostRevisions]]}}',
+'specialpages-group-pages' => '{{doc-special-group|like=[[Special:AllPages]], [[Special:PrefixIndex]], [[Special:Categories]], 
+[[Special:Disambiguations]], etc}}',
+'specialpages-group-pagetools' => '{{doc-special-group|like=[[Special:MovePage]], [[Special:Undelete]], [[Special:WhatLinksHere]], [[Special:Export]] etc}}',
+'specialpages-group-wiki' => '{{doc-special-group|like=[[Special:Version]], [[Special:Statistics]], [[Special:LockDB]], etc}}',
+'specialpages-group-redirects' => '{{doc-special-group|that=redirect to another location|like=[[Special:Randompage]], [[Special:Mypage]], [[Special:Mytalk]], etc}}',
+'specialpages-group-spam' => '{{doc-special-group}}',
 
 # Special:BlankPage
-'blankpage' => 'Used as page title in [[Special:BlankPage]].
-
+'blankpage' => '{{doc-special|BlankPage|unlisted=1}}
 See also:
 * {{msg-mw|Intentionallyblankpage|text}}',
 'intentionallyblankpage' => 'Text displayed in [[Special:BlankPage]].
@@ -8580,17 +8649,17 @@ Parameters:
 * $1 - version',
 
 # New logging system
-'logentry-delete-delete' => '{{Logentry}}',
-'logentry-delete-restore' => '{{Logentry}}',
-'logentry-delete-event' => '{{Logentry}}
+'logentry-delete-delete' => '{{Logentry|[[Special:Log/delete]]}}',
+'logentry-delete-restore' => '{{Logentry|[[Special:Log/delete]]}}',
+'logentry-delete-event' => '{{Logentry|[[Special:Log/delete]]}}
 {{Logentryparam}}
-* $3 is the name of the log page inside parenthesis',
-'logentry-delete-revision' => '{{Logentry}}
+* $3 - the name of the log page inside parenthesis',
+'logentry-delete-revision' => '{{Logentry|[[Special:Log/delete]]}}
 {{Logentryparam}}
-* $5 is the number of affected revisions of the page $3.',
-'logentry-delete-event-legacy' => '{{Logentry}}
-$3 is the name of the log page inside parenthesis',
-'logentry-delete-revision-legacy' => '{{Logentry}}',
+* $5 - the number of affected revisions of the page $3.',
+'logentry-delete-event-legacy' => '{{Logentry|[[Special:Log/delete]]}}
+* $3 - the name of the log page inside parenthesis',
+'logentry-delete-revision-legacy' => '{{Logentry|[[Special:Log/delete]]}}',
 'logentry-suppress-delete' => "{{Logentry}}
 
 'Hid' is a possible alternative to 'suppressed' in this message.",
@@ -8599,7 +8668,7 @@ $3 is the name of the log page inside parenthesis',
 $3 is the name of the log page inside parenthesis',
 'logentry-suppress-revision' => '{{Logentry}}
 {{Logentryparam}}
-* $5 is the number of affected revisions of the page $3.',
+* $5 - the number of affected revisions of the page $3.',
 'logentry-suppress-event-legacy' => '{{Logentry}}
 $3 is the name of the log page inside parenthesis',
 'logentry-suppress-revision-legacy' => '{{Logentry}}',
@@ -8643,52 +8712,51 @@ $3 is the name of the log page inside parenthesis',
 * {{msg-mw|logentry-delete-revision}}
 * {{msg-mw|logentry-suppress-event}}
 * {{msg-mw|logentry-suppress-event}}',
-'logentry-move-move' => '{{Logentry}}
+'logentry-move-move' => '{{Logentry|[[Special:Log/move]]}}
 Parameter $4, the target page, is also not visible to parser functions.',
-'logentry-move-move-noredirect' => '{{Logentry}}
+'logentry-move-move-noredirect' => '{{Logentry|[[Special:Log/move]]}}
 Parameter $4, the target page, is also not visible to parser functions.',
-'logentry-move-move_redir' => '{{Logentry}}
+'logentry-move-move_redir' => '{{Logentry|[[Special:Log/move]]}}
 Parameter $4, the target page, is also not visible to parser functions.',
-'logentry-move-move_redir-noredirect' => '{{Logentry}}
+'logentry-move-move_redir-noredirect' => '{{Logentry|[[Special:Log/move]]}}
 Parameter $4, the target page, is also not visible to parser functions.',
-'logentry-patrol-patrol' => '{{Logentry}}
-* $4 is a formatted revision number, maybe linked to the diff.',
-'logentry-patrol-patrol-auto' => '{{Logentry}}
-* $4 is a formatted revision number, maybe linked to the diff.
+'logentry-patrol-patrol' => '{{Logentry|[[Special:Log/patrol]]}}
+* $4 - a formatted revision number, maybe linked to the diff.',
+'logentry-patrol-patrol-auto' => '{{Logentry|[[Special:Log/patrol]]}}
+* $4 - a formatted revision number, maybe linked to the diff.
 "Automatically" refers to users with autopatrol right who mark revisions automatically patrolled when editing.',
-'logentry-newusers-newusers' => 'Parameters:
-* $1 - user name',
-'logentry-newusers-create' => '{{Logentry}}
+'logentry-newusers-newusers' => '{{Logentry|[[Special:Log/newusers]]}}',
+'logentry-newusers-create' => '{{Logentry|[[Special:Log/newusers]]}}
 
 $4 is the gender of the target user.',
-'logentry-newusers-create2' => '{{Logentry}}
+'logentry-newusers-create2' => '{{Logentry|[[Special:Log/newusers]]}}
 
 $4 is the name of the user that was created.',
-'logentry-newusers-byemail' => '{{Logentry}}
+'logentry-newusers-byemail' => '{{Logentry|[[Special:Log/newusers]]}}
 
 $4 is the name of the user that was created.',
-'logentry-newusers-autocreate' => '{{Logentry}}
+'logentry-newusers-autocreate' => '{{Logentry|[[Special:Log/newusers]]}}
 
 $4 is the gender of the target user.',
-'logentry-rights-rights' => '*$1 - username
-*$2 - (see below)
-*$3 - username
-*$4 - list of user groups or {{msg-mw|Rightsnone}}
-*$5 - list of user groups or {{msg-mw|Rightsnone}}
+'logentry-rights-rights' => '* $1 - username
+* $2 - (see below)
+* $3 - username
+* $4 - list of user groups or {{msg-mw|Rightsnone}}
+* $5 - list of user groups or {{msg-mw|Rightsnone}}
 ----
-{{Logentry}}',
-'logentry-rights-rights-legacy' => '*$1 - username
-*$2 - (see below)
-*$3 - username
+{{Logentry|[[Special:Log/rights]]}}',
+'logentry-rights-rights-legacy' => '* $1 - username
+* $2 - (see below)
+* $3 - username
 ----
-{{Logentry}}',
-'logentry-rights-autopromote' => '*$1 - username
-*$2 - (see below)
-*$3 - (see below)
-*$4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}
-*$5 - comma separated list of new user groups
+{{Logentry|[[Special:Log/rights]]}}',
+'logentry-rights-autopromote' => '* $1 - username
+* $2 - (see below)
+* $3 - (see below)
+* $4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}
+* $5 - comma separated list of new user groups
 ----
-{{Logentry}}',
+{{Logentry|[[Special:Log/rights]]}}',
 'rightsnone' => 'Default rights for registered users.
 
 {{Identical|None}}',
index 17fcdef..2fc25b2 100644 (file)
@@ -535,7 +535,7 @@ $1",
 'newmessageslinkplural' => '{{PLURAL:$1|Musuq willaymi|Musuq willaykunam}}',
 'newmessagesdifflinkplural' => 'qayna {{PLURAL:$1|hukchasqapi|hukchasqakunapi}} wakin kaynin',
 'youhavenewmessagesmulti' => 'Musuq willaykunam qhawanayki kachkan $1-pi',
-'editsection' => 'allichay',
+'editsection' => "llamk'apuy",
 'editold' => "llamk'apuy",
 'viewsourceold' => 'pukyu qillqata qhaway',
 'editlink' => "llamk'apuy",
@@ -738,7 +738,7 @@ Huk runa kay willayta mañakurqaptinqa icha yaykuna rimaykita hukchayta manaña
 Ama hina kaspa, chaskispaykiqa ruraqpa sutiykita nispa musuqmanta yaykuy.',
 'blocked-mailpassword' => "IP tiyayniykiqa hark'asqam, chayrayku manam saqillanchu yaykuna rimata musuqmanta chaskiyta, millay rurayta hark'anapaq.",
 'eauthentsent' => 'Takyachina e-chaskiqa qusqayki e-chaski imamaytaman kachamusqam. Manaraq huk e-chaskikuna kachamusqa kaptinqa, ñawpaqta e-chaskipi kamachisqakunata qatinaykim tiyan, chiqap e-chaski imamaytaykita takyachinaykipaq.',
-'throttled-mailpassword' => "Huk yaykuna rima yuyachinañam qayna {{PLURAL:$1|huk ura|$1 ura}} mit'api kachamusqam. {{PLURAL:$1|Huk ura|$1 ura}} mit'apiqa hukllam yaykuna rima yuyachina kachasqa kachun millay rurayta hark'anapaq.",
+'throttled-mailpassword' => "Huk yaykuna rima kutichinapaq yuyachina qayna {{PLURAL:$1|huk ura|$1 ura}} mit'api kachamusqañam. {{PLURAL:$1|Huk ura|$1 ura}} mit'apiqa hukllam yaykuna rima yuyachina kachasqa kachun millay rurayta hark'anapaq.",
 'mailerror' => 'E-chaskita kachaspa pantasqa: $1',
 'acct_creation_throttle_hit' => "Qampa IP huchhaykiyuq kachkaq ruraqkunaqa kay wikita watukuspa ñaqha 24 urapi {{PLURAL:$1|rakiqunaykim|$1 rakiqunaykim}} kamarirqanña. Manam atinkichikchu astawan kichayta huklla p'unchawpi chay IP huchhallayuq kaspa.",
 'emailauthenticated' => "E-chaski imamaytaykiqa $2 p'unchawpi, $3 pachapi chiqapchasqañam.",
@@ -785,7 +785,7 @@ Yaykuna rimaykitaqa aypalla hukcharqunkiñachá icha huk mit'alla yaykuna rimata
 
 # Special:PasswordReset
 'passwordreset' => 'Yaykuna rimata kutichiy',
-'passwordreset-text' => "Kay hunt'ana p'anqata hunt'ay, rakiqunaykipaq willakunayuq e-chaskita chaskinaykipaq.",
+'passwordreset-text' => "Kay hunt'ana p'anqata hunt'ay, yaykuna rimaykita kutichinaykipaq.",
 'passwordreset-legend' => 'Yaykuna rimata kutichiy',
 'passwordreset-disabled' => 'Kay wikipiqa yaykuna rimata manam kutichiyta atinkichu.',
 'passwordreset-pretext' => '{{PLURAL:$1||Qatiqpi kaq willa rakikunamanta huktam yaykuchiy}}',
@@ -796,7 +796,7 @@ Yaykuna rimaykitaqa aypalla hukcharqunkiñachá icha huk mit'alla yaykuna rimata
 'passwordreset-email' => 'E-chaski imamayta:',
 'passwordreset-emailtitle' => '{{SITENAME}}-paq rakiqunamanta willakuna',
 'passwordreset-emailtext-ip' => "Pipas (qamchiki, $1 IP huchhayuq tiyaymanta) {{SITENAME}}-paq ($4)
-rakiqunaykipaq willakunayuq yuyachinatam mañakurqan. Kay qatiq ruraqpa {{PLURAL:$3|rakiqunanmi|rakiqunankunam}}
+rakiqunaykipaq yaykuna rimata kutichinatam mañakurqan. Kay qatiq ruraqpa {{PLURAL:$3|rakiqunanmi|rakiqunankunam}}
 kay e-chaski imamaytayuq kachkan:
 
 $2
@@ -806,7 +806,7 @@ Yaykuspayki musuq yaykuna rimaykitam akllankiman. Pi wakiykipas kayta mañakurqa
 icha qam ñawpaq yaykuna rimaykita yuyaspayki manaña wakinchayta munaspaykiqa,
 kay willayta mana qhawaspa mana imatapas ruraspa ñawpaq yaykuna rimaykiwanmi llamk'ayta atinki.",
 'passwordreset-emailtext-user' => "{{SITENAME}}-pi kaq $1 sutiyuq ruraqqa {{SITENAME}}-paq ($4)
-rakiqunaykipaq willakunayuq yuyachinatam mañakurqan. Kay qatiq ruraqpa {{PLURAL:$3|rakiqunanmi|rakiqunankunam}}
+rakiqunaykipaq yaykuna rimata kutichinatam mañakurqan. Kay qatiq ruraqpa {{PLURAL:$3|rakiqunanmi|rakiqunankunam}}
 kay e-chaski imamaytayuq kachkan:
 
 $2
@@ -817,9 +817,9 @@ icha qam ñawpaq yaykuna rimaykita yuyaspayki manaña wakinchayta munaspaykiqa,
 kay willayta mana qhawaspa mana imatapas ruraspa ñawpaq yaykuna rimaykiwanmi llamk'ayta atinki.",
 'passwordreset-emailelement' => "Ruraqpa sutin: $1
 Mit'alla yaykuna rima: $2",
-'passwordreset-emailsent' => 'Yuyachina e-chaskiqa kachasqañam.',
-'passwordreset-emailsent-capture' => 'Yuyachina e-chaskiqa kachasqañam, kay qatiqpi rikunki.',
-'passwordreset-emailerror-capture' => 'Yuyachina e-chaskiqa rurasqa karqan, imatachus kay qatiqpi rikunki, ichataq kachasqa kaptin pantasqam tukurqan: $1',
+'passwordreset-emailsent' => 'Yaykuna rimata kutichina e-chaskiqa kachasqañam.',
+'passwordreset-emailsent-capture' => 'Yaykuna rimata kutichina e-chaskiqa kachasqañam, kay qatiqpi rikunki.',
+'passwordreset-emailerror-capture' => 'Yaykuna rimata kutichina e-chaskiqa rurasqa karqan, imatachus kay qatiqpi rikunki, ichataq kachasqa kaptin pantasqam tukurqan: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'E-chaski imamaytata wakinchay',
@@ -2155,15 +2155,6 @@ Q\'imichisqa tantari {{PLURAL:$2|qillqa|qillqakuna}}: <code>$1</code> (mana mayq
 'listusers-noresult' => 'Ruraqqa manam tarisqachu.',
 'listusers-blocked' => "(hark'asqa)",
 
-# Special:ActiveUsers
-'activeusers' => "Llamk'achkaq ruraqkuna",
-'activeusers-intro' => "Kay qatiqpiqa ruraqkunatam rikunki, qhipaq $1 {{PLURAL:$1|p'unchawpi|p'unchawkunapi}} kay wikipi imatapas ruraq.",
-'activeusers-count' => "$1 {{PLURAL:$1|llamk'apusqa|llamk'apusqakuna}} ñaqha {{PLURAL:$3|p'unchawpi|$3 p'unchawkunapi}}",
-'activeusers-from' => 'Ruraqkunata rikuchiy, kaywan qallarispa:',
-'activeusers-hidebots' => 'Rurana antachakunata pakay',
-'activeusers-hidesysops' => 'Kamachiqkunata pakay',
-'activeusers-noresult' => 'Ruraqkunataqa manam tarinichu.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Ruraq huñup hayñinkuna',
 'listgrouprights-summary' => "Kay qatiq sutisuyupiqa kay wikipi sut'ichasqa ruraq huñukunatam, kikinpa chayamuna hayñinkunatawan rikunki.
@@ -3081,7 +3072,7 @@ Payta rurachiyqa antañiqiqniykita llikaykitapas waqllinqachá.",
 'file-info-gif-looped' => 'muyupayachisqa',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|inchu|inchukuna}}',
 'file-info-png-looped' => 'muyupayachisqa',
-'file-info-png-repeat' => '$1 {{PLURAL:$1|kuti|kuti}} pukllasqa',
+'file-info-png-repeat' => '$1 {{PLURAL:$1|kuti}} pukllasqa',
 'file-info-png-frames' => '$1 {{PLURAL:$1|inchu|inchukuna}}',
 'file-no-thumb-animation' => "'''Paqtataq: Saywachasqa allwiyaraykuqa, kay willañiqimanta rikch'achakuna manam kuyuchisqa kanqachu.'''",
 'file-no-thumb-animation-gif' => "'''Paqtataq: Saywachasqa allwiyaraykuqa, kay rikch'a hina k'awchi huyakuyuq GIF rikch'akunamanta rikch'achakuna manam kuyuchisqa kanqachu.'''",
@@ -3813,17 +3804,17 @@ Rikchakunatataq hunt'a ch'irkukupim rikunki. Huk willañiqi llayakunaqa tantapus
 'sqlite-no-fts' => "$1 mana hunt'a qillqa maskana yanapawan",
 
 # New logging system
-'logentry-delete-delete' => "$1 sutiyuq ruraqqa $3 nisqa p'anqatam qullun",
-'logentry-delete-restore' => "$1 sutiyuq ruraqqa $3 nisqa p'anqatam qullusqamanta paqarichin",
-'logentry-delete-event' => "$1 sutiyuq ruraqqa {{PLURAL:$5|huk hallch'ay|$5 hallch'ay}} ruraypa rikunalla kayninta wakinchan $3 p'anqapi: $4",
-'logentry-delete-revision' => "$1 sutiyuq ruraqqa {{PLURAL:$5|huk musuqchasqap|$5 musuqchasqap}} rikunalla kayninta wakinchan $3 p'anqapi: $4",
-'logentry-delete-event-legacy' => "$1 sutiyuq ruraqqa hallch'ay ruraykunap rikunalla kayninta wakinchan $3 p'anqapi",
-'logentry-delete-revision-legacy' => "$1 sutiyuq ruraqqa musuqchasqakunap rikunalla kayninta wakinchan $3 p'anqapi",
-'logentry-suppress-delete' => "$1 sutiyuq ruraqqa $3 nisqa p'anqatam ñit'ipan",
-'logentry-suppress-event' => "$1 sutiyuq ruraqqa {{PLURAL:$5|huk hallch'ay|$5 hallch'ay}} ruraypa rikunalla kayninta pakalla wakinchan $3 p'anqapi: $4",
-'logentry-suppress-revision' => "$1 sutiyuq ruraqqa {{PLURAL:$5|huk musuqchasqap|$5 musuqchasqap}} rikunalla kayninta pakalla wakinchan $3 p'anqapi: $4",
-'logentry-suppress-event-legacy' => "$1 sutiyuq ruraqqa hallch'ay ruraykunap rikunalla kayninta pakalla wakinchan $3 p'anqapi",
-'logentry-suppress-revision-legacy' => "$1 sutiyuq ruraqqa musuqchasqakunap rikunalla kayninta pakalla wakinchan $3 p'anqapi",
+'logentry-delete-delete' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa $3 nisqa p'anqatam qullun",
+'logentry-delete-restore' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa $3 nisqa p'anqatam qullusqamanta paqarichin",
+'logentry-delete-event' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa {{PLURAL:$5|huk hallch'ay|$5 hallch'ay}} ruraypa rikunalla kayninta wakinchan $3 p'anqapi: $4",
+'logentry-delete-revision' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa {{PLURAL:$5|huk musuqchasqap|$5 musuqchasqap}} rikunalla kayninta wakinchan $3 p'anqapi: $4",
+'logentry-delete-event-legacy' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa hallch'ay ruraykunap rikunalla kayninta wakinchan $3 p'anqapi",
+'logentry-delete-revision-legacy' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa musuqchasqakunap rikunalla kayninta wakinchan $3 p'anqapi",
+'logentry-suppress-delete' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa $3 nisqa p'anqatam ñit'ipan",
+'logentry-suppress-event' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa {{PLURAL:$5|huk hallch'ay|$5 hallch'ay}} ruraypa rikunalla kayninta pakalla wakinchan $3 p'anqapi: $4",
+'logentry-suppress-revision' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa {{PLURAL:$5|huk musuqchasqap|$5 musuqchasqap}} rikunalla kayninta pakalla wakinchan $3 p'anqapi: $4",
+'logentry-suppress-event-legacy' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa hallch'ay ruraykunap rikunalla kayninta pakalla wakinchan $3 p'anqapi",
+'logentry-suppress-revision-legacy' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa musuqchasqakunap rikunalla kayninta pakalla wakinchan $3 p'anqapi",
 'revdelete-content-hid' => 'samiq pakasqa',
 'revdelete-summary-hid' => "llamk'apuypa pisichaynin pakasqa",
 'revdelete-uname-hid' => 'ruraqpa sutin pakasqa',
@@ -3832,17 +3823,20 @@ Rikchakunatataq hunt'a ch'irkukupim rikunki. Huk willañiqi llayakunaqa tantapus
 'revdelete-uname-unhid' => 'ruraqpa sutin rikuchisqa',
 'revdelete-restricted' => "kamachiqkunaman llamk'achisqa saywachanakuna",
 'revdelete-unrestricted' => 'kamachiqkunamanta qichusqa saywachanakuna',
-'logentry-move-move' => "$1 sutiyuq ruraqqa p'anqatam astan $3-manta $4-man",
-'logentry-move-move-noredirect' => "$1 sutiyuq ruraqqa p'anqatam astan $3-manta $4-man mana pusapunata saqispa",
-'logentry-move-move_redir' => "$1 sutiyuq ruraqqa p'anqatam astan $3-manta $4-man pusapunata huknachaspa",
-'logentry-move-move_redir-noredirect' => "$1 sutiyuq ruraqqa p'anqatam astan $3-manta $4-man pusapunata huknachaspa mana pusapunata saqispa",
-'logentry-patrol-patrol' => "$1 sutiyuq ruraqqa $3 nisqa p'anqamanta $4 musuqchasqatam patrullasqa nispa sananchan",
-'logentry-patrol-patrol-auto' => "$1 sutiyuq ruraqqa $3 nisqa p'anqamanta $4 musuqchasqatam kikinmanta patrullasqa nispa sananchan",
-'logentry-newusers-newusers' => '$1 sutiyuq rakiquna kamarisqañam',
-'logentry-newusers-create' => '$1 sutiyuq rakiquna kamarisqañam',
-'logentry-newusers-create2' => '$1 sutiyuq ruraqqa $3 sutiyuq rakiqunatam kamarirqanñam',
-'logentry-newusers-byemail' => '$3 sutiyuq rakiqunataqa $1 kamarirqañam, yaykuna rimataq kachasqañam.',
-'logentry-newusers-autocreate' => '$1 sutiyuq rakiqunaqa kikinmanta kamarisqam',
+'logentry-move-move' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa p'anqatam astan $3-manta $4-man",
+'logentry-move-move-noredirect' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa p'anqatam astan $3-manta $4-man mana pusapunata saqispa",
+'logentry-move-move_redir' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa p'anqatam astan $3-manta $4-man pusapunata huknachaspa",
+'logentry-move-move_redir-noredirect' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa p'anqatam astan $3-manta $4-man pusapunata huknachaspa mana pusapunata saqispa",
+'logentry-patrol-patrol' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa $3 nisqa p'anqamanta $4 musuqchasqatam patrullasqa nispa sananchan",
+'logentry-patrol-patrol-auto' => "{{GENDER:$2|}}$1 sutiyuq ruraqqa $3 nisqa p'anqamanta $4 musuqchasqatam kikinmanta patrullasqa nispa sananchan",
+'logentry-newusers-newusers' => '{{GENDER:$2|}}$1 sutiyuq rakiquna kamarisqañam',
+'logentry-newusers-create' => '{{GENDER:$2|}}$1 sutiyuq rakiquna kamarisqañam',
+'logentry-newusers-create2' => '{{GENDER:$2|}}$1 sutiyuq ruraqqa $3 sutiyuq rakiqunatam kamarirqanñam',
+'logentry-newusers-byemail' => '$3 sutiyuq rakiqunataqa $1 {{GENDER:$2|kamarirqañam}}, yaykuna rimataq kachasqañam.',
+'logentry-newusers-autocreate' => '{{GENDER:$2|}}$1 sutiyuq rakiqunaqa kikinmanta kamarisqam',
+'logentry-rights-rights' => '{{GENDER:$2|}}$1 sutiyuq ruraqqa $3-pa huñuman kapuyninta hukchan $4-manta $5-man',
+'logentry-rights-rights-legacy' => '{{GENDER:$2|}}$1 sutiyuq ruraqqa $3-pa huñuman kapuyninta hukchan',
+'logentry-rights-autopromote' => '{{GENDER:$2|}}$1 sutiyuq ruraqqa kikinmantam ñawparikun $4-manta $5-man',
 'rightsnone' => '(-)',
 
 # Feedback
index 5aacdd2..3cf144d 100644 (file)
@@ -2253,15 +2253,6 @@ Necesită cel puțin un domeniu de nivel superior, cum ar fi „*.org”.<br />
 'listusers-noresult' => 'Nici un utilizator găsit.',
 'listusers-blocked' => '(blocat{{GENDER:$1||ă|}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Listă utilizatori activi',
-'activeusers-intro' => 'Aceasta este o listă cu utilizatorii care au avut orice fel de activitate în {{PLURAL:$1|ultima zi|ultimele $1 zile}}.',
-'activeusers-count' => '{{PLURAL:$1|o acțiune|$1 acțiuni|$1 de acțiuni}} în {{PLURAL:$3|ultima zi|ultimele $3 zile|ultimele $3 de zile}}',
-'activeusers-from' => 'Afișează utilizatori începând cu:',
-'activeusers-hidebots' => 'Ascunde roboții',
-'activeusers-hidesysops' => 'Ascunde administratorii',
-'activeusers-noresult' => 'Niciun utilizator găsit.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Permisiuni grupuri de utilizatori',
 'listgrouprights-summary' => 'Mai jos se află o listă a grupurilor de utilizatori definite în acest wiki, împreună cu permisiunile de acces asociate.
index 12057d0..8e90166 100644 (file)
@@ -2034,15 +2034,6 @@ Onne abbesogne almene de \'nu dominie de levèlle ierte, pe esembie "*.org". <br
 'listusers-noresult' => 'Nisciune utende acchiete.',
 'listusers-blocked' => '(bloccate)',
 
-# Special:ActiveUsers
-'activeusers' => "Liste de l'utinde attive",
-'activeusers-intro' => "Queste jè 'n'elenghe de utinde ca avene fatte certe tipe de attività fine a l'urteme $1 {{PLURAL:$1|sciurne|sciurne}}.",
-'activeusers-count' => "$1 {{PLURAL:$1|cangiamende|cangiaminde}} jndr'à l'urteme {{PLURAL:$3|sciurne}}",
-'activeusers-from' => "Fà vedè l'utinde partenne da:",
-'activeusers-hidebots' => 'Scunne le bot',
-'activeusers-hidesysops' => 'Scunne le amministrature',
-'activeusers-noresult' => 'Nisciune utende acchiate.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Deritte de le gruppe utinde',
 'listgrouprights-summary' => "'A liste ca ste vide ète 'na liste de le gruppe utinde ccreiate sus a sta Uicchi, cu le lore deritte d'accesse associate.
index 95b30c3..c389c14 100644 (file)
@@ -525,7 +525,7 @@ $messages = array(
 'category-subcat-count-limited' => 'В этой категории {{PLURAL:$1|$1 подкатегория|$1 подкатегории|$1 подкатегорий}}.',
 'category-article-count' => '{{#ifeq:$2|1|Эта категория содержит только следующую страницу.|Эта категория содержит следующ{{PLURAL:$1|ую $1 страницу|ие $1 страницы|ие $1 страниц}} из $2.}}',
 'category-article-count-limited' => 'В этой категории {{PLURAL:$1|$1 страница|$1 страницы|$1 страниц}}.',
-'category-file-count' => '{{PLURAL:$2|Эта категория содержит только один файл.|В этой категории {{PLURAL:$1|показан $1 файл|показано $1 файла|показано $1 файлов}} из $2 {{PLURAL:$2|имеющейся|имеющихся}}.}}',
+'category-file-count' => '{{#ifeq:$2|1|Эта категория содержит только один файл.|Следующ{{PLURAL:$1|ий $1 файл|ие $1 файла|ие $1 файлов}} из $2 имеющ{{PLURAL:$2|его|их}}ся принадлеж{{PLURAL: ит|ат}} к этой категории.}}',
 'category-file-count-limited' => 'В этой категории {{PLURAL:$1|$1 файл|$1 файла|$1 файлов}}.',
 'listingcontinuesabbrev' => '(продолжение)',
 'index-category' => 'Индексируемые страницы',
@@ -884,7 +884,7 @@ $2',
 'blocked-mailpassword' => 'Редактирование с вашего IP-адреса запрещено, поэтому заблокирована и функция восстановления пароля.',
 'eauthentsent' => 'На указанный адрес электронной почты отправлено письмо. 
 Следуйте изложенным там инструкциям для подтверждения того, что этот адрес действительно принадлежит вам.',
-'throttled-mailpassword' => 'Функция напоминания пароля уже использовалась в течение {{PLURAL:$1|последнего $1 часа|последних $1 часов|последних $1 часов}} .
+'throttled-mailpassword' => 'Функция напоминания пароля уже использовалась в течение {{PLURAL:$1|последнего часа|последних $1 часов}}.
 Для предотвращения злоупотреблений, разрешено запрашивать не более одного напоминания за $1 {{PLURAL:$1|час|часа|часов}}.',
 'mailerror' => 'Ошибка при отправке почты: $1',
 'acct_creation_throttle_hit' => 'За сутки с вашего IP-адреса {{PLURAL:$1|была создана $1 учётная запись участника|было создано $1 учётных записей участников|было создано $1 учётных записей участников}}, что является пределом для данного отрезка времени.
@@ -937,7 +937,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'Сброс пароля',
-'passwordreset-text' => 'Ð\97аполниÑ\82е Ñ\8dÑ\82Ñ\83 Ñ\84оÑ\80мÑ\83, Ñ\87Ñ\82обÑ\8b Ð¿Ð¾Ð»Ñ\83Ñ\87иÑ\82Ñ\8c Ð² Ð¿Ð¸Ñ\81Ñ\8cме Ð½Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ðµ Ð¾ Ð¿Ð°Ñ\80амеÑ\82Ñ\80аÑ\85 Ð\92аÑ\88ей Ñ\83Ñ\87Ñ\91Ñ\82ной Ð·Ð°Ð¿Ð¸Ñ\81и.',
+'passwordreset-text' => 'ЧÑ\82обÑ\8b Ñ\81бÑ\80оÑ\81иÑ\82Ñ\8c Ñ\81вой Ð¿Ð°Ñ\80олÑ\8c, Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ\82е Ñ\8dÑ\82Ñ\83 Ñ\84оÑ\80мÑ\83.',
 'passwordreset-legend' => 'Сбросить пароль',
 'passwordreset-disabled' => 'Сбросы пароля отключены на этой вики.',
 'passwordreset-pretext' => '{{PLURAL:$1||Введите одну из частей данных, показанных ниже}}',
@@ -947,33 +947,29 @@ $2',
 'passwordreset-capture-help' => 'Если вы установите данную отметку, то вам будет показано письмо с временным паролем, отправляемое участнику.',
 'passwordreset-email' => 'Адрес электронной почты:',
 'passwordreset-emailtitle' => 'Сведения об учётной записи {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Кто-то (возможно, вы, с IP-адреса $1) запросил напоминание о вашей
-учётной записи в проекте {{SITENAME}} ($4).
-{{PLURAL:$3|Следующая учётная запись связана|Следующие учётные записи связаны}} с этим адресом электронной почты:
+'passwordreset-emailtext-ip' => 'Кто-то (возможно, вы, с IP-адреса $1) запросил сброс пароля к вашей учётной записи в проекте {{SITENAME}} ($4).
+С этим адресом электронной почты {{PLURAL:$3|связана следующая учётная запись|связаны следующие учётные записи}}:
 
 $2
 
 {{PLURAL:$3|Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дня|$5 дней}}.
-Вы должны представиться системе и выбрать новый пароль.
-Если вы не делали этого запроса или вспомнили свой исходный пароль
-и не желаете его менять, то можете проигнорировать это сообщение
-и продолжить использовать свой старый пароль.',
-'passwordreset-emailtext-user' => 'Участник $1 из проекта {{SITENAME}} запросил напоминание о вашей
-учётной записи в проекте {{SITENAME}} ($4).
-{{PLURAL:$3|Следующая учётная запись связана|Следующие учётные записи связаны}} с этим адресом электронной почты:
+Вы должны представиться системе и выбрать новый пароль. 
+Если вы не делали этого запроса, или вспомнили свой исходный пароль и не желаете его менять, 
+то можете проигнорировать это сообщение и продолжить использовать свой старый пароль.',
+'passwordreset-emailtext-user' => 'Участник $1 из проекта {{SITENAME}} запросил сброс пароля для вашей учётной записи в проекте {{SITENAME}} ($4).
+С этим адресом электронной почты {{PLURAL:$3|связана следующая учётная запись|связаны следующие учётные записи}}:
 
 $2
 
 {{PLURAL:$3|Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дня|$5 дней}}.
 Вы должны представиться системе и выбрать новый пароль.
-Если вы не делали этого запроса или вспомнили свой исходный пароль
-и не желаете его менять, то можете проигнорировать это сообщение
-и продолжить использовать свой старый пароль.',
+Если вы не делали этого запроса или вспомнили свой исходный пароль и не желаете его менять, 
+то можете проигнорировать это сообщение и продолжить использовать свой старый пароль.',
 'passwordreset-emailelement' => 'Имя участника: $1
 Временный пароль: $2',
-'passwordreset-emailsent' => 'Ð\9fо Ñ\8dлекÑ\82Ñ\80онной Ð¿Ð¾Ñ\87Ñ\82е Ð±Ñ\8bло Ð¾Ñ\82пÑ\80авлено Ð½Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ðµ.',
-'passwordreset-emailsent-capture' => 'Ð\9dиже Ð¿Ñ\80иведено Ð¾Ñ\82пÑ\80авленное Ð¿Ð¸Ñ\81Ñ\8cмо-напоминание.',
-'passwordreset-emailerror-capture' => 'Ð\9dиже Ð¿Ñ\80иведено Ñ\81озданное Ð¿Ð¸Ñ\81Ñ\8cмо-напоминание, ÐµÐ³Ð¾ Ð¾Ñ\82пÑ\80авка Ð½Ðµ Ñ\83далаÑ\81Ñ\8c Ð¿Ð¾ причине: $1',
+'passwordreset-emailsent' => 'Ð\9eÑ\82пÑ\80авлено Ñ\8dлекÑ\82Ñ\80онное Ð¿Ð¸Ñ\81Ñ\8cмо Ñ\81 Ð¸Ð½Ñ\84оÑ\80маÑ\86ией Ð¾ Ñ\81бÑ\80оÑ\81е Ð¿Ð°Ñ\80олÑ\8f.',
+'passwordreset-emailsent-capture' => 'Ð\9eÑ\82пÑ\80авлено Ñ\8dлекÑ\82Ñ\80онное Ð¿Ð¸Ñ\81Ñ\8cмо Ñ\81 Ð¸Ð½Ñ\84оÑ\80маÑ\86ией Ð¾ Ñ\81бÑ\80оÑ\81е Ð¿Ð°Ñ\80олÑ\8f, Ñ\82екÑ\81Ñ\82 ÐºÐ¾Ñ\82оÑ\80ого Ð¼Ð¾Ð¶Ð½Ð¾ Ñ\83видеÑ\82Ñ\8c Ð½Ð¸Ð¶е.',
+'passwordreset-emailerror-capture' => 'Ð\91Ñ\8bло Ñ\81оздано Ñ\8dлекÑ\82Ñ\80онное Ð¿Ð¸Ñ\81Ñ\8cмо Ñ\81 Ð¸Ð½Ñ\84оÑ\80маÑ\86ией Ð¾ Ñ\81бÑ\80оÑ\81е Ð¿Ð°Ñ\80олÑ\8f, Ñ\82екÑ\81Ñ\82 ÐºÐ¾Ñ\82оÑ\80ого Ð¼Ð¾Ð¶Ð½Ð¾ Ñ\83видеÑ\82Ñ\8c Ð½Ð¸Ð¶Ðµ. Ð\9eднако ÐµÐ³Ð¾ Ð½Ðµ Ñ\83далоÑ\81Ñ\8c Ð¾Ñ\82пÑ\80авиÑ\82Ñ\8c Ð¿Ð¾ Ñ\81ледÑ\83Ñ\8eÑ\89ей причине: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Изменить адрес электронной почты',
@@ -2364,15 +2360,6 @@ $1',
 'listusers-noresult' => 'Не найдено участников.',
 'listusers-blocked' => '(заблокирован{{GENDER:$1||а}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Список активных участников',
-'activeusers-intro' => 'Это список участников, совершавших какие-либо действия за {{PLURAL:$1|последний $1 день|последние $1 дня|последние $1 дней}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|правка|правки|правок}} за {{PLURAL:$3|$3 последний день|последние $3 дня|последние $3 дней}}',
-'activeusers-from' => 'Показать участников, начиная с:',
-'activeusers-hidebots' => 'Скрыть ботов',
-'activeusers-hidesysops' => 'Скрыть администраторов',
-'activeusers-noresult' => 'Не найдено участников.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права групп участников',
 'listgrouprights-summary' => 'Ниже представлен список определённых в этой вики групп участников, указаны соответствующие им права доступа.
@@ -4182,16 +4169,16 @@ MediaWiki распространяется в надежде, что она бу
 
 # New logging system
 'logentry-delete-delete' => '$1 {{GENDER:$2|удалил|удалила}} страницу $3',
-'logentry-delete-restore' => '$1 {{GENDER:$1|восстановил|восстановила}} страницу $3',
-'logentry-delete-event' => '$1 {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 записи|$5 записей}} журнала на $3: $4',
-'logentry-delete-revision' => '$1 {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 версии|$5 версий}} на странице $3: $4',
-'logentry-delete-event-legacy' => '$1 {{GENDER:$1|изменил|изменила}} видимость записей журнала $3',
-'logentry-delete-revision-legacy' => '$1 {{GENDER:$1|изменил|изменила}} видимость версий на странице $3',
-'logentry-suppress-delete' => '$1 {{GENDER:$1|подавил|подавила}} страницу $3',
-'logentry-suppress-event' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 записи|$5 записей}} журнала на $3: $4',
-'logentry-suppress-revision' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 версии|$5 версий}} на странице $3: $4',
-'logentry-suppress-event-legacy' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость записей журнала $3',
-'logentry-suppress-revision-legacy' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость версий на странице $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|восстановил|восстановила}} страницу $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|изменил|изменила}} видимость {{PLURAL:$5|$5 записи|$5 записей}} журнала на $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|изменил|изменила}} видимость {{PLURAL:$5|$5 версии|$5 версий}} на странице $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|изменил|изменила}} видимость записей журнала $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|изменил|изменила}} видимость версий на странице $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|подавил|подавила}} страницу $3',
+'logentry-suppress-event' => '$1 скрытно {{GENDER:$2|изменил|изменила}} видимость {{PLURAL:$5|$5 записи|$5 записей}} журнала на $3: $4',
+'logentry-suppress-revision' => '$1 скрытно {{GENDER:$2|изменил|изменила}} видимость {{PLURAL:$5|$5 версии|$5 версий}} на странице $3: $4',
+'logentry-suppress-event-legacy' => '$1 скрытно {{GENDER:$2|изменил|изменила}} видимость записей журнала $3',
+'logentry-suppress-revision-legacy' => '$1 скрытно {{GENDER:$2|изменил|изменила}} видимость версий на странице $3',
 'revdelete-content-hid' => 'содержание скрыто',
 'revdelete-summary-hid' => 'описание правки скрыто',
 'revdelete-uname-hid' => 'имя участника скрыто',
@@ -4200,19 +4187,19 @@ MediaWiki распространяется в надежде, что она бу
 'revdelete-uname-unhid' => 'имя участника раскрыто',
 'revdelete-restricted' => 'ограничения применяются к администраторам',
 'revdelete-unrestricted' => 'ограничения сняты для администраторов',
-'logentry-move-move' => '$1 {{GENDER:$1|переименовал|переименовала}} страницу $3 в $4',
-'logentry-move-move-noredirect' => '$1 {{GENDER:$1|переименовал|переименовала}} страницу $3 в $4 без оставления перенаправления',
-'logentry-move-move_redir' => '$1 {{GENDER:$1|переименовал|переименовала}} страницу $3 в $4 поверх перенаправления',
-'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$1|переименовал|переименовала}} страницу $3 в $4 поверх перенаправления и без оставления перенаправления',
-'logentry-patrol-patrol' => '$1 {{GENDER:$1|отпатрулировал|отпатрулировала}} версию $4 страницы $3',
-'logentry-patrol-patrol-auto' => '$1 автоматически {{GENDER:$1|отпатрулировал|отпатрулировала}} версию $4 страницы $3',
-'logentry-newusers-newusers' => 'Создана учётная запись $1',
-'logentry-newusers-create' => 'Создана учётная запись $1',
+'logentry-move-move' => '$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4 без оставления перенаправления',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4 поверх перенаправления',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4 поверх перенаправления и без оставления перенаправления',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|отпатрулировал|отпатрулировала}} версию $4 страницы $3',
+'logentry-patrol-patrol-auto' => '$1 автоматически {{GENDER:$2|отпатрулировал|отпатрулировала}} версию $4 страницы $3',
+'logentry-newusers-newusers' => '{{GENDER:$2|Участник создал|Участница создала}} учётную запись $1',
+'logentry-newusers-create' => '{{GENDER:$2|Участник создал|Участница создала}} учётную запись $1',
 'logentry-newusers-create2' => '$1 {{GENDER:$2|создал|создала}} учётную запись $3',
 'logentry-newusers-byemail' => '$1 {{GENDER:$2|создал|создала}} учётную запись $3 и пароль был отправлен по электронной почте',
-'logentry-newusers-autocreate' => 'Автоматически создана учётная запись $1',
-'logentry-rights-rights' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3 с $4 на $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3',
+'logentry-newusers-autocreate' => 'Автоматически создана учётная запись {{GENDER:$2|участника|участницы}} $1',
+'logentry-rights-rights' => '$1 {{GENDER:$2|изменил|изменила}} членство в группах для $3 с $4 на $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|изменил|изменила}} членство в группах для $3',
 'logentry-rights-autopromote' => '$1 был{{GENDER:$2||а}} автоматически переведен{{GENDER:$2||а}} из $4 в $5',
 'rightsnone' => '(нет)',
 
@@ -4290,6 +4277,6 @@ MediaWiki распространяется в надежде, что она бу
 'duration-millennia' => '$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}',
 
 # Image rotation
-'rotate-comment' => 'Изображение повернуто на $1 градус{{PLURAL:$1||а|ов}} по часовой стрелке',
+'rotate-comment' => 'Изображение повёрнуто на $1 градус{{PLURAL:$1||а|ов}} по часовой стрелке',
 
 );
index 06b5763..aef85ce 100644 (file)
@@ -2167,15 +2167,6 @@ Zahtevana je vsaj najvišja domena, na primer »*.org«.<br />
 'listusers-noresult' => 'Ni najdenih uporabnikov.',
 'listusers-blocked' => '(blokiran)',
 
-# Special:ActiveUsers
-'activeusers' => 'Seznam aktivnih uporabnikov',
-'activeusers-intro' => 'Seznam uporabnikov, ki so bili kakor koli aktivni v {{PLURAL:$1|zadnjem $1 dnevu|zadnjih $1 dneh}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|dejanje|dejanji|dejanja|dejanj}} v {{PLURAL:$3|preteklem dnevu|preteklih $3 dneh}}',
-'activeusers-from' => 'Prikaži uporabnike začenši z:',
-'activeusers-hidebots' => 'Skrij bote',
-'activeusers-hidesysops' => 'Skrij administratorje',
-'activeusers-noresult' => 'Noben uporabnik ni bil najden.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Pravice uporabniških skupin',
 'listgrouprights-summary' => 'Tu je na razpolago seznam uporabniških skupin na tem wikiju z navedbo dodeljenih pravic dostopa.
index 1a9216a..72743f9 100644 (file)
@@ -626,8 +626,8 @@ Fadlan markale isku day. Hadii aysan weli shaqaynin, ka bax ee markale soo gudag
 '''Hadii wax ka bedlkaan uu yahay mid xaq ah, fadlan markale isku day. Hadii aysan weli shaqaynin, is kuday inaad  ka baxdo ee markale soo gudagal.'''",
 'editing' => 'Waxaad badalaysaa $1',
 'creating' => 'Sameyta $1',
-'editingsection' => 'Waxaa wax ka badaleysaa $1 (qeyb yar)',
-'editingcomment' => 'Waxaa wax ka badaleysaa $1 (qeyb yar)',
+'editingsection' => 'Waxaad wax ka bedelaysaa $1 (qeyb yar)',
+'editingcomment' => 'Waxaad wax ka bedelaysaa $1 (qeyb yar)',
 'editconflict' => 'Isku dhac badalaadka: $1',
 'yourtext' => 'Qoraalkaaga',
 'editingold' => "'''DIGNIIN: Waxaad wax ka bedeli rabtaa boggan caddadkiisa duqoobay.
index 3b2b042..8058926 100644 (file)
@@ -556,7 +556,7 @@ $messages = array(
 'vector-view-edit' => 'Уреди',
 'vector-view-history' => 'Историја',
 'vector-view-view' => 'Читај',
-'vector-view-viewsource' => 'Изворник',
+'vector-view-viewsource' => 'Изворни код',
 'actions' => 'Радње',
 'namespaces' => 'Именски простори',
 'variants' => 'Варијанте',
@@ -670,7 +670,7 @@ $1',
 'editsection' => 'уреди',
 'editsection-brackets' => '[$1]',
 'editold' => 'уреди',
-'viewsourceold' => 'изворник',
+'viewsourceold' => 'изворни код',
 'editlink' => 'уреди',
 'viewsourcelink' => 'Извор',
 'editsectionhint' => 'Уредите одељак „$1“',
@@ -774,7 +774,7 @@ $1',
 'wrong_wfQuery_params' => 'Неисправни параметри за wfQuery()<br />
 Функција: $1<br />
 Упит: $2',
-'viewsource' => 'Изворник',
+'viewsource' => 'Изворни код',
 'viewsource-title' => 'Приказ извора странице $1',
 'actionthrottled' => 'Радња је успорена',
 'actionthrottledtext' => 'У циљу борбе против непожељних порука, ограничене су вам измене у одређеном времену, а управо сте прешли то ограничење. Покушајте поново за неколико минута.',
@@ -2385,15 +2385,6 @@ $1',
 'listusers-noresult' => 'Корисник није пронађен.',
 'listusers-blocked' => '({{GENDER:$1|блокиран|блокирана|блокиран}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Списак активних корисника',
-'activeusers-intro' => 'Ово је списак корисника који су били активни {{PLURAL:$1|претходни дан|у последња $1 дана|у последњих $1 дана}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|измена|измене|измена}} {{PLURAL:$3|претходни дан|у последња $3 дана|у последњих $3 дана}}',
-'activeusers-from' => 'Прикажи кориснике почев од:',
-'activeusers-hidebots' => 'Сакриј ботове',
-'activeusers-hidesysops' => 'Сакриј администраторе',
-'activeusers-noresult' => 'Корисник није пронађен.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права корисничких група',
 'listgrouprights-summary' => 'Следи списак корисничких група на овом викију, заједно с правима приступа.
index e6ce2c8..c82505d 100644 (file)
@@ -2265,15 +2265,6 @@ Det krävs åtminstone en toppdomän, t.ex. "*.org".<br />
 'listusers-noresult' => 'Ingen användare hittades.',
 'listusers-blocked' => '(blockerad)',
 
-# Special:ActiveUsers
-'activeusers' => 'Lista över aktiva användare',
-'activeusers-intro' => 'Detta är en lista på användare som har haft någon form av aktivitet inom de senaste $1 {{PLURAL:$1|dygnet|dygnen}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|handling|handlingar}} {{PLURAL:$3|det senaste dygnet|de senaste $3 dygnen}}',
-'activeusers-from' => 'Visa användare från och med:',
-'activeusers-hidebots' => 'Göm botar',
-'activeusers-hidesysops' => 'Dölj administratörer',
-'activeusers-noresult' => 'Inga användare funna.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Behörigheter för användargrupper',
 'listgrouprights-summary' => 'Följande lista visar vilka användargrupper som är definierade på den här wikin och vilka behörigheter grupperna har.
index 2a7c956..30279d0 100644 (file)
@@ -1915,15 +1915,6 @@ Itifaki zinazoungwa mkono: <code>$1</code> (usiongeza hizi unapotafuta).',
 'listusers-noresult' => 'Mtumiaji hakupatikana.',
 'listusers-blocked' => '(imezuiwa)',
 
-# Special:ActiveUsers
-'activeusers' => 'Orodha ya watumiaji hai',
-'activeusers-intro' => 'Hii ni orodha ya watumiaji walioshughulika jambo fulani ndani ya siku $1 {{PLURAL:$1|iliyopita|zilizopita}}.',
-'activeusers-count' => '{{PLURAL:$1|haririo|maharirio}} $1 katika siku $3 {{PLURAL:$3|iliyopita|zilizopita}}',
-'activeusers-from' => 'Onyesha watumiaji kuanzia:',
-'activeusers-hidebots' => 'Ficha boti',
-'activeusers-hidesysops' => 'Ficha wakabidhi',
-'activeusers-noresult' => 'Watumiaji hawakupatikana.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Wezo za kundi za watumiaji',
 'listgrouprights-summary' => 'Inafuata orodha ya kundi za watumiaji wa wiki hii, pamoja na maelezo ya wezo zao za kushughulika mambo.
@@ -2243,7 +2234,7 @@ Rejea kumbukumbu ya uzuio ya mwisho inayoandikwa chini:',
 'whatlinkshere-hideredirs' => '$1 maelekezo',
 'whatlinkshere-hidetrans' => '$1 majumuisho',
 'whatlinkshere-hidelinks' => '$1 viungo',
-'whatlinkshere-hideimages' => 'viungo $1 vya faili',
+'whatlinkshere-hideimages' => 'Viungo vya faili $1',
 'whatlinkshere-filters' => 'Machujio',
 
 # Block/unblock
index 2fae26a..0926774 100644 (file)
@@ -1936,15 +1936,6 @@ $1',
 'listusers-noresult' => 'ஒரு பயனரும் இல்லை.',
 'listusers-blocked' => '(தடை செய்யப்பட்டுள்ளது)',
 
-# Special:ActiveUsers
-'activeusers' => 'தொடர்பங்களிப்பாளர்களின் பட்டியல்',
-'activeusers-intro' => 'கடைசி $1 {{PLURAL:$1|நாள்|நாட்கள்}} ஏதேனும் செயலை செய்த பயனர்களின் பட்டியல் இது.',
-'activeusers-count' => '$1 {{PLURAL:$1|திருத்தம்|திருத்தங்கள்}} கடைசி {{PLURAL:$3|நாள்|$3 நாட்கள்}}',
-'activeusers-from' => 'பின்வரும் எழுத்துடன் தொடங்கும் பயனர்களைக் காட்டு:',
-'activeusers-hidebots' => 'தானியங்கிகளை மறை',
-'activeusers-hidesysops' => 'நிர்வாகிகளை மறை',
-'activeusers-noresult' => 'எந்தவொரு பயனர்களும் காணப்படவில்லை.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'பயனர் குழு உரிமைகள்',
 'listgrouprights-key' => '<span class="listgrouprights-granted">உரிமை வழங்கப்பட்டது</span>
index 7dbcac1..7dd1250 100644 (file)
@@ -1808,6 +1808,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'disambiguationspage' => 'Template:అయోమయ నివృత్తి',
 'disambiguations-text' => "కింది పేజీలు '''అయోమయ నివృత్తి''' పేజీకి లింకవుతున్నాయి. కానీ అవి సంబంధిత పేజీకి నేరుగా లింకు అవాలి. <br /> [[MediaWiki:Disambiguationspage]] నుంది లింకు ఉన్న మూసను వాడే పేజీని అయోమయ నివృత్తి పేజీగా భావిస్తారు.",
 
+'pageswithprop-submit' => 'వెళ్ళు',
+
 'doubleredirects' => 'జంట దారిమార్పులు',
 'doubleredirectstext' => 'ఇతర దారిమార్పు పుటలకి తీసుకెళ్ళే దారిమార్పులని ఈ పుట చూపిస్తుంది.
 ప్రతీ వరుసలో మొదటి మరియు రెండవ దారిమార్పులకు లంకెలు, ఆలానే రెండవ దారిమార్పు పుట యొక్క లక్ష్యం ఉన్నాయి. సాధారణంగా ఈ రెండవ దారిమార్పు యొక్క లక్ష్యమే "అసలైనది", అదే మొదటి దారిమార్పు యొక్క లక్ష్యంగా ఉండాలి.
@@ -1962,15 +1964,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'listusers-noresult' => 'వాడుకరి దొరకలేదు.',
 'listusers-blocked' => '(నిరోధించారు)',
 
-# Special:ActiveUsers
-'activeusers' => 'క్రియాశీల వాడుకరుల జాబితా',
-'activeusers-intro' => 'ఇది గత $1 {{PLURAL:$1|రోజులో|రోజులలో}} ఏదైనా కార్యకలాపం చేసిన వాడుకరుల జాబితా.',
-'activeusers-count' => 'గడచిన {{PLURAL:$3|ఒక రోజు|$3 రోజుల}}లో $1 {{PLURAL:$1|మార్పు|మార్పులు}}',
-'activeusers-from' => 'వాడుకరులను ఇక్కడ నుండి చూపించు:',
-'activeusers-hidebots' => 'బాట్లను దాచు',
-'activeusers-hidesysops' => 'నిర్వాహకులను దాచు',
-'activeusers-noresult' => 'వాడుకరులెవరూ లేరు.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'వాడుకరి గుంపుల హక్కులు',
 'listgrouprights-summary' => 'కింది జాబితాలో ఈ వికీలో నిర్వచించిన వాడుకరి గుంపులు, వాటికి సంబంధించిన హక్కులు ఉన్నాయి.
@@ -2026,7 +2019,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'usermessage-editor' => 'వ్యవస్థ సందేశకులు',
 
 # Watchlist
-'watchlist' => 'నా à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితా',
+'watchlist' => 'వీక్షణ జాబితా',
 'mywatchlist' => 'వీక్షణ జాబితా',
 'watchlistfor2' => '$1 కొరకు $2',
 'nowatchlist' => 'మీ వీక్షణ జాబితా ఖాళీగా ఉంది.',
@@ -2750,6 +2743,8 @@ $UNWATCHURL కి వెళ్ళండి.
 'pageinfo-toolboxlink' => 'పేజీ సమాచారం',
 'pageinfo-contentpage-yes' => 'అవును',
 'pageinfo-protect-cascading-yes' => 'అవును',
+'pageinfo-category-info' => 'వర్గపు సమాచారం',
+'pageinfo-category-pages' => 'పేజీల సంఖ్య',
 
 # Skin names
 'skinname-standard' => 'సంప్రదాయ',
index 4104810..60926e3 100644 (file)
@@ -630,10 +630,6 @@ Ita-nia mudansa la armazenadu seidauk!",
 # Special:ListUsers
 'listusers-submit' => 'Hatudu',
 
-# Special:ActiveUsers
-'activeusers-hidebots' => 'Subar bot sira',
-'activeusers-hidesysops' => 'Subar administradór sira',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Grupu',
 'listgrouprights-rights' => 'Priviléjiu',
index dd7fd4a..ee840eb 100644 (file)
@@ -2047,15 +2047,6 @@ $1',
 'listusers-noresult' => 'ไม่พบผู้ใช้',
 'listusers-blocked' => '(ถูกบล็อก)',
 
-# Special:ActiveUsers
-'activeusers' => 'รายการผู้ใช้ที่มีความเคลื่อนไหว',
-'activeusers-intro' => 'นี่คือรายการผู้ใช้ที่มีกิจกรรมใด ๆ ในช่วง $1 วันที่ผ่านมา',
-'activeusers-count' => '{{PLURAL:$1|ปฏิบัติการล่าสุด|ปฏิบัติการล่าสุด $1 รายการ}} ในช่วง $3 วันที่ผ่านมา',
-'activeusers-from' => 'แสดงผู้ใช้เริ่มจาก:',
-'activeusers-hidebots' => 'ซ่อนบอต',
-'activeusers-hidesysops' => 'ซ่อนผู้ดูแลระบบ',
-'activeusers-noresult' => 'ไม่พบผู้ใช้',
-
 # Special:ListGroupRights
 'listgrouprights' => 'สิทธิกลุ่มผู้ใช้',
 'listgrouprights-summary' => 'ด้านล่างเป็นรายการกลุ่มผู้ใช้ที่นิยามบนวิกินี้ และสิทธิการเข้าถึงที่เกี่ยวข้อง
@@ -2879,7 +2870,7 @@ $1',
 'spamprotectiontitle' => 'ตัวกรองป้องกันสแปม',
 'spamprotectiontext' => 'ข้อความที่คุณต้องการบันทึกถูกตัวกรองสแปมบล็อก
 อาจเกิดจากลิงก์ไปยังเว็บไซต์ภายนอกที่ถูกขึ้นบัญชีดำ',
-'spamprotectionmatch' => 'à¸\82à¹\89อà¸\84วามà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\81ระà¸\95ุà¹\89à¸\99ให้ตัวกรองสแปมของเราทำงาน: $1',
+'spamprotectionmatch' => 'à¸\82à¹\89อà¸\84วามà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\97ำให้ตัวกรองสแปมของเราทำงาน: $1',
 'spambot_username' => 'กวาดล้างมีเดียวิกิสแปม',
 'spam_reverting' => 'ย้อนกลับไปรุ่นก่อนหน้าที่ไม่มีลิงก์ไปยังเว็บ $1',
 'spam_blanking' => 'รุ่นการปรับปรุงทุกรุ่นประกอบไปด้วยลิงก์ไปยังเว็บ $1 (ทำหน้าว่าง)',
@@ -3342,24 +3333,24 @@ $1',
 เปิดใช้งานปุ่มด้านล่างเพื่อส่งเมลยืนยันไปยังที่อยู่ของคุณ
 เมลจะรวมลิงก์ซึ่งมีรหัส
 โหลดลิงก์ในเบราว์เซอร์ของคุณเพื่อยืนยันว่าที่อยู่อีเมลของคุณสมเหตุสมผล',
-'confirmemail_pending' => 'รหัสยืà¸\99ยัà¸\99à¸\96ูà¸\81อีà¹\80มลà¹\84à¸\9bหาคุณแล้ว 
-à¸\96à¹\89าà¸\84ุà¸\93à¹\80à¸\9eิà¹\88à¸\87สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aี à¸\84ุà¸\93อาà¸\88อยาà¸\81รอสัà¸\81à¸\84รูà¹\88à¹\83หà¹\89สà¹\88à¸\87à¹\84à¸\9bà¸\96ึà¸\87à¸\81à¹\88อà¸\99à¸\9eยายามà¸\82อรหัสà¹\83หมà¹\88',
+'confirmemail_pending' => 'รหัสยืà¸\99ยัà¸\99à¹\84à¸\94à¹\89สà¹\88à¸\87à¹\84à¸\9bยัà¸\87อีà¹\80มลà¸\82อà¸\87คุณแล้ว 
+à¸\96à¹\89าà¸\84ุà¸\93à¹\80à¸\9eิà¹\88à¸\87สรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aี à¸\84ุà¸\93อาà¸\88à¸\95à¹\89อà¸\87รอสัà¸\81à¸\84รูà¹\88à¹\83หà¹\89รหัสสà¹\88à¸\87à¹\84à¸\9bà¸\96ึà¸\87à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\84ุà¸\93 à¹\81à¸\97à¸\99à¸\97ีà¹\88à¸\88ะà¸\82อรหัสยืà¸\99ยัà¸\99à¹\83หมà¹\88à¸\97ัà¸\99à¸\97ี',
 'confirmemail_send' => 'ส่งรหัสยืนยันทางอีเมล',
 'confirmemail_sent' => 'ส่งอีเมลยืนยันแล้ว',
 'confirmemail_oncreate' => 'รหัสยืนยันถูกส่งไปยังที่อยู่อีเมลของคุณ
 รหัสนี้ไม่กำหนดให้ต้องล็อกอิน แต่คุณต้องระบุรหัสก่อนเปิดใช้งานคุณลักษณะที่อาศัยอีเมลทั้งหมดในวิกินี้',
-'confirmemail_sendfailed' => '{{SITENAME}} ไม่สามารถส่งเมลยืนยันได้
-à¹\82à¸\9bรà¸\94à¸\95รวà¸\88สอà¸\9aà¸\97ีà¹\88อยูà¹\88อีà¹\80มลวà¹\88าà¹\84มà¹\88มีอัà¸\81à¸\82ระà¸\97ีà¹\88à¹\84มà¹\88สมà¹\80หà¸\95ุสมà¸\9cล
+'confirmemail_sendfailed' => '{{SITENAME}}ไม่สามารถส่งอีเมลยืนยันได้
+à¹\82à¸\9bรà¸\94à¸\95รวà¸\88สอà¸\9aà¸\97ีà¹\88อยูà¹\88อีà¹\80มลวà¹\88าà¹\84มà¹\88มีอัà¸\81à¸\82ระà¸\97ีà¹\88à¹\84มà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87
 
 ข้อความตีกลับ: $1',
 'confirmemail_invalid' => 'รหัสยืนยันไม่ถูกต้อง 
 รหัสอาจหมดอายุแล้ว',
-'confirmemail_needlogin' => 'ต้อง $1 เพื่อยืนยันที่อยู่อีเมลของคุณ',
+'confirmemail_needlogin' => 'à¸\84ุà¸\93à¸\95à¹\89อà¸\87 $1 à¹\80à¸\9eืà¹\88อยืà¸\99ยัà¸\99à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\82อà¸\87à¸\84ุà¸\93',
 'confirmemail_success' => 'อีเมลคุณได้รับการยืนยันแล้ว
 คุณอาจ[[Special:UserLogin|ล็อกอิน]]ตอนนี้และสนุกกับการแก้ไขวิกิ',
 'confirmemail_loggedin' => 'อีเมลคุณได้รับการยืนยันแล้ว',
 'confirmemail_error' => 'เกิดปัญหาขณะบันทึกการยืนยันของคุณ',
-'confirmemail_subject' => 'การยืนยันที่อยู่อีเมล {{SITENAME}}',
+'confirmemail_subject' => 'การยืนยันที่อยู่อีเมลของ{{SITENAME}}',
 'confirmemail_body' => 'ใครบางคน ซึ่งอาจจะเป็นคุณ จากหมายเลขไอพี $1 ได้ลงทะเบียนในชื่อ "$2" โดยใช้อีเมลนี้ที่ {{SITENAME}}
 
 เพื่อยืนยันว่าบัญชีผู้ใช้นี้เป็นของคุณอย่างแน่อน และใช้งานฟีเจอร์ส่งอีเมลหาผู้ใช้บน {{SITENAME}} กดลิงก์นี้ในเว็บเบราวเซอร์ของคุณ:
index 9084776..d025c83 100644 (file)
@@ -1386,7 +1386,7 @@ $1",
 'shown-title' => 'Показувати $1 {{PLURAL:$1|запис|записи|записів}} на сторінці',
 'viewprevnext' => 'Переглянути ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-legend' => 'Параметри пошуку',
-'searchmenu-exists' => "'''У цій вікі є сторінка з назвою «[[$1]]»'''",
+'searchmenu-exists' => "'''У цій вікі є сторінка з назвою «[[:$1]]»'''",
 'searchmenu-new' => "'''Створити сторінку «[[:$1]]» у цій вікі!'''",
 'searchhelp-url' => 'Help:Довідка',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Показати сторінки з цим префіксом]]',
@@ -1460,7 +1460,7 @@ $1",
 'prefs-watchlist-days-max' => 'Максимум $1 {{PLURAL:$1|день|дні|днів}}',
 'prefs-watchlist-edits' => 'Кількість редагувань для відображення у розширеному списку спостереження:',
 'prefs-watchlist-edits-max' => 'Максимально: 1000',
-'prefs-watchlist-token' => 'Ð\9fознаÑ\87ка списку спостереження:',
+'prefs-watchlist-token' => 'Ð\9cÑ\96Ñ\82ка списку спостереження:',
 'prefs-misc' => 'Інші налаштування',
 'prefs-resetpass' => 'Змінити пароль',
 'prefs-changeemail' => 'Змінити адресу електронної пошти',
@@ -2334,15 +2334,6 @@ $1',
 'listusers-noresult' => 'Не знайдено користувачів.',
 'listusers-blocked' => '({{GENDER:$1|заблокований|заблокована|заблокований}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Список активних користувачів',
-'activeusers-intro' => 'Це список користувачів, які здійснювали які-небудь дії за {{PLURAL:$1|останній $1 день|останні $1 дні|останні $1 днів}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|дія|дії|дій}} за {{PLURAL:$3|останній $3 день|останні $3 дні|останні $3 днів}}',
-'activeusers-from' => 'Показувати користувачів, починаючи з:',
-'activeusers-hidebots' => 'Приховати ботів',
-'activeusers-hidesysops' => 'Приховати адміністраторів',
-'activeusers-noresult' => 'Не знайдено користувачів.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права груп користувачів',
 'listgrouprights-summary' => 'Нижче наведений список груп користувачів у цій вікі і права для кожної групи.
index 668fca2..65066ab 100644 (file)
@@ -406,7 +406,7 @@ $1',
 'nstab-user' => 'Foydalanuvchi sahifasi',
 'nstab-media' => 'Media sahifasi',
 'nstab-special' => 'Maxsus sahifa',
-'nstab-project' => 'Loyiha sahifasi',
+'nstab-project' => 'Loyiha haqida',
 'nstab-image' => 'Fayl',
 'nstab-mediawiki' => 'Xabar',
 'nstab-template' => 'Andoza',
@@ -1128,13 +1128,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-noresult' => 'Foydalanuvchilar topilmadi.',
 'listusers-blocked' => '(chetlashtirilgan)',
 
-# Special:ActiveUsers
-'activeusers' => 'Faol foydalanuvchilar roʻyxati',
-'activeusers-from' => 'Quyidagidan boshlanuvchi foydalanuvchilarni koʻrsatish:',
-'activeusers-hidebots' => 'Botlarni yashirish',
-'activeusers-hidesysops' => 'Maʼmurlarni yashirish',
-'activeusers-noresult' => 'Foydalanuvchilar topilmadi.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Foydalanuvchilar guruhi huquqlari',
 'listgrouprights-group' => 'Guruh',
index 2847cfe..0f956fc 100644 (file)
@@ -2232,15 +2232,6 @@ Xem thêm [[Special:WantedCategories|thể loại cần thiết]].',
 'listusers-noresult' => 'Không thấy thành viên.',
 'listusers-blocked' => '(bị cấm)',
 
-# Special:ActiveUsers
-'activeusers' => 'Danh sách thành viên tích cực',
-'activeusers-intro' => 'Dánh sách này liệt kê các thành viên đã hoạt động cách nào đó trong $1 ngày qua.',
-'activeusers-count' => '$1 tác vụ trong {{PLURAL:$3|ngày|$3 ngày}} qua',
-'activeusers-from' => 'Hiển thị thành viên bắt đầu từ:',
-'activeusers-hidebots' => 'Ẩn robot',
-'activeusers-hidesysops' => 'Ẩn bảo quản viên',
-'activeusers-noresult' => 'Không thấy thành viên.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Nhóm thành viên',
 'listgrouprights-summary' => 'Dưới đây là danh sách nhóm thành viên được định nghĩa tại wiki này, với mức độ truy cập của từng nhóm.
index c52243f..cd26458 100644 (file)
@@ -233,6 +233,7 @@ $messages = array(
 'namespaces' => "Mga ngaran-lat'ang",
 'variants' => 'Mga pagkadirudilain',
 
+'navigation-heading' => 'Menu hit nabigasyon',
 'errorpagetitle' => 'Sayop',
 'returnto' => 'Balik ngadto ha $1.',
 'tagline' => 'Tikang ha {{SITENAME}}',
@@ -353,6 +354,7 @@ $1',
 'restorelink' => '{{PLURAL:$1|usa nga ginpara nga pagliwat|$1 ka ginpara nga mga pagliwat}}',
 'feedlinks' => 'Igsulod:',
 'feed-invalid' => 'Inbalido nga pagpapaabot',
+'feed-unavailable' => 'Waray mga syndication feed',
 'site-rss-feed' => '$1 RSS nga feed',
 'site-atom-feed' => '$1 Atom nga feed',
 'page-rss-feed' => '"$1" RSS nga feed',
@@ -400,6 +402,9 @@ Nagbalik hin sayop an database nga "$3: $4"',
 'laggedslavemode' => 'Pahimatngon: It pakli bangin waray mga kabag-ohan nga bag-o.',
 'readonly' => 'Gintrankahan an database',
 'enterlockreason' => 'Pagbutang hin rason para han pagtrangka, upod hin banabana kon san-o kukuha-on an pagtrangka',
+'readonlytext' => 'An database in nakatrangka yana ha bag-o nga mga entrada ngan iba nga mga modipikasyon, tungod siguro ha routine database maintenance, kahuman ini in mabalik ha normal.
+
+An magdudumara nga nagtrangka hini in naghatag hini nga kasayoran: $1',
 'missing-article' => 'Ini nga database in waray nakaagi han teksto han pakli nga dapat mabilngan, nga ginngaranan nga "$1" $2.
 
 Ini in agsob hinungdan han pagsunod han kadaan nga kaibhan o sumpay han kaagi ngadto ha pakli nga ginpara.
@@ -461,11 +466,17 @@ An magdudurmara nga nagtrangka hini in naghatag hini nga eksplenasyon: "$3".',
 'exception-nologin-text' => 'Ini nga pakli o pagbuhat in nagkikinahanglan nga ikaw in mag-log-in ha dinhi nga wiki.',
 
 # Virus scanner
+'virus-badscanner' => "Maraot nga configuration: Waray kasabti nga virus scanner: ''$1''",
 'virus-scanfailed' => 'Pakyas an pag-scan (kodigo $1)',
 'virus-unknownscanner' => 'diri-nasasabtan nga antivirus:',
 
 # Login and logout pages
+'logouttext' => "'''Nakalog-out kana.'''
+
+Puydi ka magpadayon paggamit hin {{SITENAME}} nga diri magpapakilala, o puydi ka gihapon <span class='plainlinks'>[$1 mag-log in utro]</span> ha parehas o iba nga gumaramit.",
 'welcomeuser' => '¡Uswag ngan Dayon, $1!',
+'welcomecreation-msg' => 'An im akawnt in nahimo na.
+Ayaw kalimti pagbalyo han imo [[Special:Preferences|{{SITENAME}} preperensya]].',
 'yourname' => 'Agnay hit gumaramit:',
 'yourpassword' => 'Tigaman-pagsulod:',
 'yourpasswordagain' => 'Utroha pagbutang an tigaman-han-pagsakob:',
@@ -496,6 +507,7 @@ Alayon pagpili hin lain nga ngaran.',
 'createaccounterror' => 'Diri makakahimo hin akawnt: $1',
 'nocookieslogin' => '{{SITENAME}} in nagkikinahanglan hin mga kuki para makapagpalog-in hin mga gumaramit.  An im mga kuki in diri nagana.
 Alayon paganaha hira ngan utro liwat.',
+'noname' => 'Waray ka nakahatag hin maupay nga agnay-hit-gumaramit.',
 'loginsuccesstitle' => 'Malinamposon an pagsulod',
 'loginsuccess' => "'''Ikaw in nakalog-in ha {{SITENAME}} komo \"\$1\".'''",
 'nosuchuser' => 'Waray gumaramit an may-ada ngaran nga "$1".
@@ -552,8 +564,9 @@ Ikaw in naglalog-in yana...',
 
 # Special:PasswordReset
 'passwordreset' => 'igreset an tigaman-hit-pagsulod',
-'passwordreset-text' => 'Kompletoha ini nga porma para makakarawat hin email hin pahinumdom han detalye han akawnt.',
+'passwordreset-text' => 'Kumpletoha ini nga porma para makareset han imo password.',
 'passwordreset-legend' => 'igreset an tigaman-hit-pagsulod',
+'passwordreset-disabled' => 'Waray ginpaandar an password reset hini nga wiki.',
 'passwordreset-username' => 'Agnay hiton gumaramit:',
 'passwordreset-domain' => 'Dominyo:',
 'passwordreset-capture' => 'Kikitaon mo an resulta nga e-mail?',
@@ -561,9 +574,9 @@ Ikaw in naglalog-in yana...',
 'passwordreset-emailtitle' => 'Mga detalye han akawnt ha {{SITENAME}}',
 'passwordreset-emailelement' => 'Agnay han gumaramit: $1
 Temporaryo nga tigaman han pagsakob: $2',
-'passwordreset-emailsent' => 'Ginpadara hin usa ka pahinumdom nga e-mail.',
-'passwordreset-emailsent-capture' => 'Mayda pahinumdom nga ginpadangat ha im e-mail, kun diin ini in ginpapakita ha ubos.',
-'passwordreset-emailerror-capture' => 'Mayda pahinumdom nga e-mail han nahimo, kun diin ini in ginpapakita ha ubos, pero pakyas an pagpadangat ngada ha gumaramit: $1',
+'passwordreset-emailsent' => 'Ginpadangat an password reset email.',
+'passwordreset-emailsent-capture' => 'Ginpadangat an password reset email, nga ginpakita ha ubos.',
+'passwordreset-emailerror-capture' => 'Ginhimo an password reset email, kun diin nakikita ha ubos, pero pakyas an pagpadara: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Igliwan an e-mail address',
@@ -573,6 +586,7 @@ Temporaryo nga tigaman han pagsakob: $2',
 'changeemail-oldemail' => 'Yana nga e-mail address:',
 'changeemail-newemail' => 'Bag-o nga e-mail address:',
 'changeemail-none' => '(waray)',
+'changeemail-password' => 'An imo {{SITENAME}} password:',
 'changeemail-submit' => 'Igbalyo an e-mail',
 'changeemail-cancel' => 'Pasagdi',
 
@@ -893,10 +907,12 @@ Ginpapasabot nga an sulod han mga panudlok han {{SITENAME}} in bangin daan an.',
 'prefs-namespaces' => "Ngaran-lat'ang",
 'default' => 'aada-nga-daan',
 'prefs-files' => 'Mga paypay',
+'prefs-emailconfirm-label' => 'Kompirmasyon han email:',
+'prefs-textboxsize' => 'Kadako han editing window',
 'youremail' => 'E-mail:',
 'username' => '{{HENERO:$1|Agnay hit gumaramit}}:',
 'uid' => 'ID hit {{HENERO:$1|Gumaramit}}:',
-'prefs-memberingroups' => 'Api han {{PLURAL:$1| nga hugpo|nga mga hugpo}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Api}} han {{PLURAL:$1|grupo|mga grupo}}:',
 'prefs-registration' => 'Oras han pagrehistro:',
 'yourrealname' => 'Tinuod nga ngaran:',
 'yourlanguage' => 'Yinaknan:',
@@ -908,6 +924,8 @@ Dapat diri malabaw ha $1 {{PLURAL:$1|agi|mga agi}} nga kahilaba.',
 'gender-male' => 'Lalaki',
 'gender-female' => 'Babaye',
 'email' => 'E-mail',
+'prefs-help-realname' => 'Opsyonal an tinuod nga ngaran.
+Kun pilion mo nga ihatag, ini in gagamiton ha paghatag hin atribusyon ha imo mga buhat.',
 'prefs-help-email' => "Diri pinipirit it pagbutang hin E-mail address, pero kinahanglan ini para hin pag-utro hin tigaman-hit-pagsulod (''password''), ngan kun mangalimot ka hit imo tigaman-hit-pagsulod.",
 'prefs-help-email-others' => 'Puydi mo pilion nga it iba in makakontak ha imo gamit an e-mail pinaagi han sumpay ha imo gumaramit o hiruhimangraw nga pakli.
 An imo e-mail address in diri makikit-an kun an iba nga mga gumaramit in makontak ha imo.',
@@ -1093,7 +1111,7 @@ Mga pakli ha [[Special:Watchlist|imo angay timan-an]] in naka-'''bold'''.",
 
 An taramdan han pagpara ngan pagbalhin para hini nga pakli in ginhahatag para han imo kamurayaw:",
 'upload-permitted' => 'Gintutugotan nga mga klase han paypay: $1.',
-'upload-preferred' => 'Mas karugag nga mga tipo hin paypay: %1.',
+'upload-preferred' => 'Karuyag nga mga tipo hin paypay: $1.',
 'upload-prohibited' => 'Gindidire nga mga klase han paypay: $1.',
 'uploadlog' => 'Talaan hin ginkarga-pasaka',
 'uploadlogpage' => 'Talaan han mga ginkarga-paigbaw',
@@ -1113,6 +1131,7 @@ An taramdan han pagpara ngan pagbalhin para hini nga pakli in ginhahatag para ha
 'filename-tooshort' => 'An ngaran han fayl in halipot hin duro.',
 'filetype-banned' => 'Ini nga klase nga paypay in gindidire.',
 'illegal-filename' => 'An ngaran han fayl in diri gintutugutan.',
+'overwrite' => 'It pagsapaw han aada nga paypay in diri gintutugotan.',
 'unknown-error' => 'Nahitabo an waray kasasabti nga sayop.',
 'tmp-create-error' => 'Diri makakahimo hin temporaryo nga paypay.',
 'tmp-write-error' => 'Sayop ha pagsurat hin temporaryo nga paypay.',
@@ -1177,6 +1196,8 @@ $1',
 'lockmanager-fail-acquirelock' => 'Diri nakakakarawat hin trangka para hit "$1".',
 'lockmanager-fail-openlock' => 'Diri nakakaabre han nakatrangka nga paypay para hit "$1".',
 'lockmanager-fail-releaselock' => 'Diri nakakabul-iw han trangka para hit "$1".',
+'lockmanager-fail-svr-acquire' => 'Diri nakakakarawat in mga trangka ha serbidor $1.',
+'lockmanager-fail-svr-release' => 'Diri nakakabul-iw in mga trangka ha serbidor $1.',
 
 # ZipDirectoryReader
 'zip-wrong-format' => 'An espisipikado nga paypay in diri naka ZIP nga paypay.',
@@ -1189,6 +1210,9 @@ $1',
 'img-auth-nofile' => 'Waray ngada an paypay nga "$1".',
 
 # HTTP errors
+'http-read-error' => 'HTTP maysayop ha pagbasa.',
+'http-timed-out' => 'Naubosan hin oras ha pagpaalayon ha HTTP.',
+'http-curl-error' => 'May sayop ha pagkuha hin URL: $1',
 'http-host-unreachable' => 'Diri nakakaabot ha URL.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1409,12 +1433,6 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'listusers-noresult' => 'Waray gumaramit nga nahiagian.',
 'listusers-blocked' => '(ginpugngan)',
 
-# Special:ActiveUsers
-'activeusers' => 'Taramdan hin mga gumaramit nga nanggigios',
-'activeusers-hidebots' => 'Igtago an mga bot',
-'activeusers-hidesysops' => 'Igtago an mga magdudumara',
-'activeusers-noresult' => 'Waray gumaramit nga nahiagian.',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Hugpo',
 'listgrouprights-rights' => 'Mga katungod',
@@ -1424,8 +1442,13 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'listgrouprights-removegroup' => 'Tanggala {{PLURAL:$2|hugpo|mga hugpo}}: $1',
 'listgrouprights-addgroup-all' => 'Igdugang ngatanan nga mga hugpo',
 'listgrouprights-removegroup-all' => 'Igtanggal ngatanan nga mga hugpo',
+'listgrouprights-addgroup-self' => 'Igdugang an {{PLURAL:$2|grupo|mga grupo}} ha kalugaringon nga akawnt: $1',
+'listgrouprights-removegroup-self' => 'Igtanggal an {{PLURAL:$2|grupo|mga grupo}} tikang ha kalugaringon nga akawnt: $1',
+'listgrouprights-addgroup-self-all' => 'Igdugang an ngatanan nga mga grupo ha kalugaringon nga akawnt',
+'listgrouprights-removegroup-self-all' => 'Igtanggal an ngatanan nga mga grupo tikang ha kalugaringon nga akawnt',
 
 # Email user
+'mailnologin' => 'Waray kakadtoan nga address',
 'emailuser' => 'Ig-e-mail ini nga gumaramit',
 'emailuser-title-target' => 'Ig-E-mail ini nga {{HENERO:$1|gumaramit}}',
 'emailuser-title-notarget' => 'Gumaramit han e-mail',
@@ -1455,10 +1478,13 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'watchlistfor2' => 'Para ha $1 $2',
 'watchnologin' => 'Diri nakalog-in',
 'addwatch' => 'Igdugang an listahan hit binabantayan',
+'removewatch' => 'Tanggala tikang ha listahan han binabantayan',
 'watch' => 'Bantayi',
 'watchthispage' => 'Bantayi ini nga pakli',
 'unwatch' => 'Pabay-i an pagbantay',
 'unwatchthispage' => 'Undangi pagbantay',
+'notanarticle' => 'Diri uska unod nga pakli',
+'notvisiblerev' => 'An urhi nga pagliwat han iba nga gumaramit in ginpara',
 'watchlist-details' => '{{PLURAL:$1|$1 nga pakli|$1 nga mga pakli}} nga aada ha imo talaan nga binabantayan, diri lakip an mga hiruhimangraw-nga-pakli.',
 'wlshowlast' => 'Igpakita an katapusan nga $1 nga mga oras $2 nga mga adlaw $3',
 'watchlist-options' => 'Mga pirilian han talaan han binabantayan',
@@ -1469,6 +1495,11 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 
 'enotif_reset' => 'Markahi an ngatanan nga mga pakli nga ginbisita na',
 'enotif_impersonal_salutation' => 'gumaramit han {{SITENAME}}',
+'enotif_subject_deleted' => 'An {{SITENAME}} pakli nga $1 in {{GENDER:$2|ginpara}} ni $2',
+'enotif_subject_created' => 'An {{SITENAME}} pakli nga $1 in {{GENDER:$2|ginhimo}} ni $2',
+'enotif_subject_moved' => 'An {{SITENAME}} pakli nga $1 in {{GENDER:$2|ginbalhin}} ni $2',
+'enotif_subject_restored' => 'An {{SITENAME}} pakli nga $1 in {{GENDER:$2|ginbalik}} ni $2',
+'enotif_subject_changed' => '{{SITENAME}} page $1 has been {{GENDER:$2|ginbal-iw}} by $2',
 'enotif_anon_editor' => 'waray magpakilala nga gumaramit $1',
 'created' => 'nahimo',
 'changed' => 'naliwanan',
@@ -1504,6 +1535,9 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'rollbacklink' => 'libot-pabalik',
 'rollbackfailed' => 'Diri malinamposon an paglibot-pabalik',
 
+# Edit tokens
+'sessionfailure-title' => 'Pakyas an sesyon',
+
 # Protect
 'protectlogpage' => 'Talaan han pinasaliporan',
 'protectedarticle' => 'pinasaliporan "[[$1]]"',
@@ -1867,6 +1901,10 @@ Makikit-an nimo an ginkuhaaan',
 'pageinfo-contentpage' => 'Ginlakip komo uska unod nga pakli',
 'pageinfo-contentpage-yes' => 'Oo',
 'pageinfo-protect-cascading-yes' => 'Oo',
+'pageinfo-category-info' => 'Impormasyon han kaarangay',
+'pageinfo-category-pages' => 'Ihap han mga pakli',
+'pageinfo-category-subcats' => 'Ihap han mga ubos-kaarangay',
+'pageinfo-category-files' => 'Ihap han mga paypay',
 
 # Patrolling
 'markaspatrolleddiff' => 'Igmarka komo ginpatrolya na',
@@ -2219,11 +2257,13 @@ An iba in daan nakatago.
 'specialpages-group-maintenance' => 'Mga sumat han pagmintinar',
 'specialpages-group-other' => 'Mga iba nga pinaurog nga pakli',
 'specialpages-group-login' => 'Magpalista nga masakob / paghimo hin bag-o nga akawnt',
+'specialpages-group-changes' => 'Mga kababag-o pala ngan mga log',
+'specialpages-group-media' => 'Sumat media ngan mga ginkarga-pasaka',
 'specialpages-group-users' => 'Mga gumaramit ngan mga katungod',
 'specialpages-group-highuse' => 'Mga pakli nga damo nagamit',
 'specialpages-group-pages' => 'Talaan hin mga pakli',
 'specialpages-group-pagetools' => 'Mga higamit han pakli',
-'specialpages-group-wiki' => 'Datos ngan mga higamit han Wiki',
+'specialpages-group-wiki' => 'Datos ngan mga higamit',
 'specialpages-group-redirects' => 'Ginreredirek an mga pakli nga pinaurog',
 'specialpages-group-spam' => 'Mga higamit han spam',
 
@@ -2258,6 +2298,8 @@ An iba in daan nakatago.
 
 # Database error messages
 'dberr-header' => 'Ini nga wiki mayda problema',
+'dberr-problems' => 'Pasayloi!
+Ini nga sityo in nageeksperyensya hin mga pagkuri teknikal.',
 
 # HTML forms
 'htmlform-submit' => 'Isumite',
index b039767..f0ad26c 100644 (file)
@@ -2083,15 +2083,6 @@ $1",
 'listusers-noresult' => 'קיין באניצער נישט געטראפֿן.',
 'listusers-blocked' => '(בלאקירט)',
 
-# Special:ActiveUsers
-'activeusers' => 'ליסטע פֿון אַקטיווע באַניצער',
-'activeusers-intro' => 'דאָס איז א ליסטע פֿון באַניצער וואָס זענען געווען אַקטיוו אינערהאָלב  $1 {{PLURAL:$1|דעם לעצטן טאָג|די לעצטע $1 טעג}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|פעולה|פעולות}} אין  {{PLURAL:$3|דעם לעצטן טאָג|די לעצטע $3 טעג}}',
-'activeusers-from' => 'ווײַזן באַניצער אָנהייבנדיג פון:',
-'activeusers-hidebots' => 'באַהאַלטן באטן',
-'activeusers-hidesysops' => 'באַהאַלטן סיסאפן',
-'activeusers-noresult' => 'קיין באניצער נישט געטראפֿן.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'באַניצער גרופע רעכטן',
 'listgrouprights-summary' => "פֿאלגנד איז א רשימה פֿון באַניצער גרופעס דעפֿינירט אויף דער דאָזיקער וויקי, מיט זײַערע אַסאציאירטע צוטריט רעכטן.
index be84b22..a99d9b4 100644 (file)
@@ -859,7 +859,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => '重置密码',
-'passwordreset-text' => '完成该表格以接收你账户信息的邮件提醒。',
+'passwordreset-text' => '完成该表格以重设你的密码。',
 'passwordreset-legend' => '重置密码',
 'passwordreset-disabled' => '此wiki已经禁用密码重置。',
 'passwordreset-pretext' => '{{PLURAL:$1||输入下面的数据项之一}}',
@@ -869,21 +869,21 @@ $2',
 'passwordreset-capture-help' => '如果您选中此框,电子邮件(包括临时密码)将显示,并发送给用户。',
 'passwordreset-email' => '电子邮件地址:',
 'passwordreset-emailtitle' => '在 {{SITENAME}} 的帐户详细信息',
-'passwordreset-emailtext-ip' => '有人通过IP地址 $1 (可能是您)请求获取 {{SITENAME}} ($4)上相关账户的密码提示。{{PLURAL:$3|以下账户|此账户}}与该电子邮件地址关联:
+'passwordreset-emailtext-ip' => '有人通过IP地址$1(可能是您请求重设{{SITENAME}}($4)上相关账户的密码。{{PLURAL:$3|以下账户|此账户}}与该电子邮件地址关联:
 
 $2
 
-{{PLURAL:$3|这个|这个}}临时密码将会在{{PLURAL:$5|一天|$5 天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。',
-'passwordreset-emailtext-user' => '用户 $1 请求获取 {{SITENAME}} ($4)上您的账户的密码提示。{{PLURAL:$3|以下账户|此账户}}与该电子邮件地址关联:
+这个临时密码将会在{{PLURAL:$5|一天|$5天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。',
+'passwordreset-emailtext-user' => '用户$1请求重设{{SITENAME}}($4)上您的账户的密码。{{PLURAL:$3|以下账户|此账户}}与该电子邮件地址关联:
 
 $2
 
-{{PLURAL:$3|这个|这个}}临时密码将会在{{PLURAL:$5|一天|$5 天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。',
+这个临时密码将会在{{PLURAL:$5|一天|$5天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。',
 'passwordreset-emailelement' => '用户名:$1
 临时密码:$2',
 'passwordreset-emailsent' => '密码重置邮件已发送。',
-'passwordreset-emailsent-capture' => '提醒电子邮件已发送,并在下面显示。',
-'passwordreset-emailerror-capture' => '生成的提醒电子邮件如下所示,但发送失败:$1',
+'passwordreset-emailsent-capture' => '密码重设电子邮件已发送,并在下面显示。',
+'passwordreset-emailerror-capture' => '生成的密码重设电子邮件如下所示,但发送失败:$1',
 
 # Special:ChangeEmail
 'changeemail' => '更改电子邮件地址',
@@ -2185,15 +2185,6 @@ $1',
 'listusers-noresult' => '找不到用户。',
 'listusers-blocked' => '(已封禁)',
 
-# Special:ActiveUsers
-'activeusers' => '活跃用户列表',
-'activeusers-intro' => '这个列表列出了最近$1天进行过操作的用户。',
-'activeusers-count' => '最近$3天内有$1次编辑',
-'activeusers-from' => '显示用户开始于:',
-'activeusers-hidebots' => '隐藏机器人',
-'activeusers-hidesysops' => '隐藏管理员',
-'activeusers-noresult' => '找不到用户。',
-
 # Special:ListGroupRights
 'listgrouprights' => '用户组权限',
 'listgrouprights-summary' => '以下面是一个在这个维基中所定义出来的用户权限列表,以及它们的访问权。
@@ -3914,14 +3905,14 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'logentry-delete-delete' => '$1删除页面$3',
 'logentry-delete-restore' => '$1恢复页面$3',
 'logentry-delete-event' => '$1已更改$3中$5项日志的可见性:$4',
-'logentry-delete-revision' => '$1已更改$3中{{PLURAL:$5|$5个历史版本|$5个历史版本}}的可见性:$4',
-'logentry-delete-event-legacy' => '$1已更改$3中日志的可见性',
-'logentry-delete-revision-legacy' => '$1已更改$3中历史版本的可见性',
-'logentry-suppress-delete' => '$1已隐藏页面$3',
-'logentry-suppress-event' => '$1已不可见地更改$3中{{PLURAL:$5|$5项日志|$5项日志}}的可见性:$4',
-'logentry-suppress-revision' => '$1已不可见地更改$3中{{PLURAL:$5|$5个历史版本|$5个历史版本}}的可见性:$4',
-'logentry-suppress-event-legacy' => '$1已不可见地更改$3中日志的可见性',
-'logentry-suppress-revision-legacy' => '$1已不可见地更改$3中历史版本的可见性',
+'logentry-delete-revision' => '$1{{GENDER:$2|已更改}}$3中{{PLURAL:$5|$5个历史版本|$5个历史版本}}的可见性:$4',
+'logentry-delete-event-legacy' => '$1{{GENDER:$2|已更改}}$3中日志的可见性',
+'logentry-delete-revision-legacy' => '$1{{GENDER:$2|已更改}}$3中历史版本的可见性',
+'logentry-suppress-delete' => '$1{{GENDER:$2|已隐藏}}页面$3',
+'logentry-suppress-event' => '$1已不可见地{{GENDER:$2|更改}}$3中{{PLURAL:$5|$5项日志|$5项日志}}的可见性:$4',
+'logentry-suppress-revision' => '$1已不可见地{{GENDER:$2|更改}}$3中{{PLURAL:$5|$5个历史版本|$5个历史版本}}的可见性:$4',
+'logentry-suppress-event-legacy' => '$1已不可见地{{GENDER:$2|更改}}$3中日志的可见性',
+'logentry-suppress-revision-legacy' => '!$1已不可见地{{GENDER:$2|更改}}$3中历史版本的可见性',
 'revdelete-content-hid' => '隐藏内容',
 'revdelete-summary-hid' => '隐藏编辑摘要',
 'revdelete-uname-hid' => '隐藏用户名',
@@ -3934,13 +3925,13 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'logentry-move-move-noredirect' => '$1移动$3页面至$4,不留重定向',
 'logentry-move-move_redir' => '$1移动页面$3至$4覆盖重定向',
 'logentry-move-move_redir-noredirect' => '$1通过重定向移动$3页面至$4,不留重定向',
-'logentry-patrol-patrol' => '$1标记页面$3的版本$4为已巡查',
-'logentry-patrol-patrol-auto' => '$1自动标记页面$3的版本$4为已巡查',
-'logentry-newusers-newusers' => '已创建用户帐户 $1',
-'logentry-newusers-create' => '创建用户帐户 $1',
+'logentry-patrol-patrol' => '$1{{GENDER:$2|标记}}页面$3的版本$4为已巡查',
+'logentry-patrol-patrol-auto' => '$1自动{{GENDER:$2|标记}}页面$3的版本$4为已巡查',
+'logentry-newusers-newusers' => '已{{GENDER:$2|创建}}用户帐户$1',
+'logentry-newusers-create' => '{{GENDER:$2|创建}}用户帐户$1',
 'logentry-newusers-create2' => '创建用户帐户 $3 由 $1',
 'logentry-newusers-byemail' => '$1创建用户$3,并且密码已通过电子邮件发送',
-'logentry-newusers-autocreate' => '帐户$1已被自动地创建',
+'logentry-newusers-autocreate' => '用户帐户$1已被自动{{GENDER:$2|创建}}',
 'logentry-rights-rights' => '$1将$3的用户组从$4改为$5',
 'logentry-rights-rights-legacy' => '$1更改$3的用户组',
 'logentry-rights-autopromote' => '$1的用户组已自动从$4改为$5',
index 45ec98c..feff219 100644 (file)
@@ -2152,15 +2152,6 @@ Template:消除歧義',
 'listusers-noresult' => '找不到用戶。',
 'listusers-blocked' => '(已封禁)',
 
-# Special:ActiveUsers
-'activeusers' => '活躍用戶列表',
-'activeusers-intro' => '這個是在最近$1天之內有一些動作的用戶列表。',
-'activeusers-count' => '最近$3天內有$1次編輯',
-'activeusers-from' => '顯示用戶開始於:',
-'activeusers-hidebots' => '隱藏機器人',
-'activeusers-hidesysops' => '隱藏管理員',
-'activeusers-noresult' => '找不到用戶。',
-
 # Special:ListGroupRights
 'listgrouprights' => '用戶群組權限',
 'listgrouprights-summary' => '以下面是一個在這個wiki中定義出來的用戶權限清單,以及它們的存取權。
index 08aae29..7dfbec1 100644 (file)
@@ -63,11 +63,11 @@ class DumpLinks extends Maintenance {
                                        $this->output( "\n" );
                                }
                                $page = Title::makeTitle( $row->page_namespace, $row->page_title );
-                               $this->output( $page->getPrefixedUrl() );
+                               $this->output( $page->getPrefixedURL() );
                                $lastPage = $row->page_id;
                        }
                        $link = Title::makeTitle( $row->pl_namespace, $row->pl_title );
-                       $this->output( " " . $link->getPrefixedUrl() );
+                       $this->output( " " . $link->getPrefixedURL() );
                }
                if ( isset( $lastPage ) )
                        $this->output( "\n" );
index e05e154..1eecfe4 100644 (file)
@@ -50,7 +50,7 @@ class DumpSisterSites extends Maintenance {
 
                foreach ( $result as $row ) {
                        $title = Title::makeTitle( $row->page_namespace, $row->page_title );
-                       $url = $title->getFullUrl();
+                       $url = $title->getFullURL();
                        $text = $title->getPrefixedText();
                        $this->output( "$url $text\n" );
                }
index 84e4021..83cc088 100644 (file)
@@ -3,6 +3,22 @@
 # - https://github.com/senchalabs/jsduck/wiki/Custom-tags
 require 'jsduck/meta_tag'
 
+class SourceTag < JsDuck::MetaTag
+  def initialize
+    # This defines the name of the @tag
+    @name = 'source'
+  end
+
+  # Generate HTML output for this tag.
+  # One can make use of the #format method to easily support
+  # Markdown and {@link} tags inside the contents of the tag.
+  #
+  # @param tags All matches of this tag on one class.
+  def to_html(tags)
+    '<h3 class="pa">Source</h3>' + tags.map {|tag| format(tag) }.join("\n")
+  end
+end
+
 class ContextTag < JsDuck::MetaTag
   def initialize
     @name = 'context'
index 4a8ba8c..c29c91c 100644 (file)
        {
                "name": "jQuery",
                "groups": [
-                       {
-                               "name": "Core",
-                               "classes": ["jQuery", "jQuery.Event", "jQuery.Promise", "jQuery.Deferred", "jQuery.jqXHR"]
-                       },
                        {
                                "name": "Plugins",
                                "classes": ["jQuery.plugin.*"]
                ]
        },
        {
-               "name": "Misc",
+               "name": "Upstream",
                "groups": [
                        {
-                               "name": "Native",
+                               "name": "jQuery",
+                               "classes": ["jQuery", "jQuery.Event", "jQuery.Callbacks", "jQuery.Promise", "jQuery.Deferred", "jQuery.jqXHR", "QUnit"]
+                       },
+                       {
+                               "name": "JavaScript",
                                "classes": ["Array", "Boolean", "Date", "Function", "Number", "Object", "RegExp", "String"]
                        }
                ]
index 8ab102f..7910ec8 100644 (file)
@@ -1,26 +1,43 @@
 /**
  * @class jQuery
+ * @source <http://api.jquery.com/>
  */
 
 /**
  * @method ajax
+ * @source <http://api.jquery.com/jQuery.ajax/>
  * @return {jqXHR}
  */
 
 /**
  * @class jQuery.Event
+ * @source <http://api.jquery.com/Types/#Event>
+ */
+
+/**
+ * @class jQuery.Callbacks
+ * @source <http://api.jquery.com/jQuery.Callbacks/>
  */
 
 /**
  * @class jQuery.Promise
+ * @source <http://api.jquery.com/Types/#Promise>
  */
 
 /**
  * @class jQuery.Deferred
  * @mixins jQuery.Promise
+ * @source <http://api.jquery.com/jQuery.Deferred/>
  */
 
 /**
  * @class jQuery.jqXHR
+ * @source <http://api.jquery.com/Types/#jqXHR>
  * @alternateClassName jqXHR
  */
+
+
+/**
+ * @class QUnit
+ * @source <http://api.qunitjs.com/>
+ */
index 66cc1dc..5eb8c5c 100644 (file)
@@ -188,7 +188,6 @@ $wgIgnoredMessages = array(
        'fewestrevisions-summary',
        'upload-summary',
        'wantedtemplates-summary',
-       'activeusers-summary',
        'search-summary',
        'editpage-head-copy-warn',
        'editpage-tos-summary',
index 7c16df6..077b7fd 100644 (file)
@@ -1845,17 +1845,6 @@ $wgMessageStructure = array(
                'listusers-noresult',
                'listusers-blocked',
        ),
-       'activeusers' => array(
-               'activeusers',
-               'activeusers-summary',
-               'activeusers-intro',
-               'activeusers-count',
-               'activeusers-from',
-               'activeusers-hidebots',
-               'activeusers-hidesysops',
-               'activeusers-submit',
-               'activeusers-noresult',
-       ),
        'listgrouprights' => array(
                'listgrouprights',
                'listgrouprights-summary',
@@ -3953,7 +3942,6 @@ XHTML id names.",
        'deletedcontribs'     => 'Special:DeletedContributions',
        'linksearch'          => 'Special:LinkSearch',
        'listusers'           => 'Special:ListUsers',
-       'activeusers'         => 'Special:ActiveUsers',
        'newuserlog'          => 'Special:Log/newusers',
        'listgrouprights'     => 'Special:ListGroupRights',
        'emailuser'           => 'Email user',
index b72c417..fb66db0 100644 (file)
@@ -63,7 +63,7 @@ class PurgeList extends Maintenance {
                        } elseif ( $page !== '' ) {
                                $title = Title::newFromText( $page );
                                if ( $title ) {
-                                       $url = $title->getInternalUrl();
+                                       $url = $title->getInternalURL();
                                        $this->output( "$url\n" );
                                        $urls[] = $url;
                                        if ( $this->getOption( 'purge' ) ) {
@@ -88,7 +88,7 @@ class PurgeList extends Maintenance {
                        $conds = array( 'page_namespace' => $namespace );
                }
                while ( true ) {
-                       $res = $dbr->select( 'page', 
+                       $res = $dbr->select( 'page',
                                array( 'page_id', 'page_namespace', 'page_title' ),
                                $conds + array( 'page_id > ' . $dbr->addQuotes( $startId ) ),
                                __METHOD__,
@@ -104,7 +104,7 @@ class PurgeList extends Maintenance {
                        $urls = array();
                        foreach ( $res as $row ) {
                                $title = Title::makeTitle( $row->page_namespace, $row->page_title );
-                               $url = $title->getInternalUrl();
+                               $url = $title->getInternalURL();
                                $urls[] = $url;
                                $startId = $row->page_id;
                        }
index b1be714..abe8335 100644 (file)
@@ -82,10 +82,11 @@ class RunJobs extends Maintenance {
                        $this->runJobsLog( "Executed $count periodic queue task(s)." );
                }
 
+               $flags = JobQueueGroup::USE_CACHE | JobQueueGroup::USE_PRIORITY;
                $lastTime = time();
                do {
                        $job = ( $type === false )
-                               ? $group->pop( JobQueueGroup::TYPE_DEFAULT, JobQueueGroup::USE_CACHE )
+                               ? $group->pop( JobQueueGroup::TYPE_DEFAULT, $flags )
                                : $group->pop( $type ); // job from a single queue
                        if ( $job ) { // found a job
                                ++$jobsRun;
index e7359b2..dbbdab9 100644 (file)
@@ -48,6 +48,7 @@ class ShowSiteStats extends Maintenance {
                        'ss_good_articles' => 'Number of articles',
                        'ss_total_pages' => 'Total pages',
                        'ss_users' => 'Number of users',
+                       'ss_active_users' => 'Active users',
                        'ss_images' => 'Number of images',
                );
 
index 4de5291..8bba1fc 100644 (file)
                 * @return {boolean} return.done.isCategory Whether the category exists.
                 */
                isCategory: function ( title, ok, err ) {
-                       var d = $.Deferred();
+                       var d = $.Deferred(),
+                               apiPromise;
                        // Backwards compatibility (< MW 1.20)
                        d.done( ok );
                        d.fail( err );
 
-                       this.get( {
+                       apiPromise = this.get( {
                                        prop: 'categoryinfo',
                                        titles: title.toString()
                                } )
@@ -36,7 +37,7 @@
                                })
                                .fail( d.reject );
 
-                       return d.promise();
+                       return d.promise( { abort: apiPromise.abort } );
                },
 
                /**
                 * @return {String[]} return.done.categories Matched categories
                 */
                getCategoriesByPrefix: function ( prefix, ok, err ) {
-                       var d = $.Deferred();
+                       var d = $.Deferred(),
+                               apiPromise;
                        // Backwards compatibility (< MW 1.20)
                        d.done( ok );
                        d.fail( err );
 
                        // Fetch with allpages to only get categories that have a corresponding description page.
-                       this.get( {
+                       apiPromise = this.get( {
                                        list: 'allpages',
                                        apprefix: prefix,
                                        apnamespace: mw.config.get('wgNamespaceIds').category
@@ -72,7 +74,7 @@
                                })
                                .fail( d.reject );
 
-                       return d.promise();
+                       return d.promise( { abort: apiPromise.abort } );
                },
 
 
                 *  if title was not found.
                 */
                getCategories: function ( title, ok, err, async ) {
-                       var d = $.Deferred();
+                       var d = $.Deferred(),
+                               apiPromise;
                        // Backwards compatibility (< MW 1.20)
                        d.done( ok );
                        d.fail( err );
 
-                       this.get( {
+                       apiPromise = this.get( {
                                        prop: 'categories',
                                        titles: title.toString()
                                }, {
                                                } );
                                        }
                                        d.resolve( ret );
-                               })
+                               } )
                                .fail( d.reject );
 
-                       return d.promise();
+                       return d.promise( { abort: apiPromise.abort } );
                }
 
        } );
index 3c775ad..2cd1b92 100644 (file)
                 * @return {string} return.done.token Received token.
                 */
                getEditToken: function ( ok, err ) {
-                       var d = $.Deferred();
+                       var d = $.Deferred(),
+                               apiPromise;
                        // Backwards compatibility (< MW 1.20)
                        d.done( ok );
                        d.fail( err );
 
-                       this.get( {
+                       apiPromise = this.get( {
                                        action: 'tokens',
                                        type: 'edit'
                                }, {
@@ -87,7 +88,7 @@
                                })
                                .fail( d.reject );
 
-                       return d.promise();
+                       return d.promise( { abort: apiPromise.abort } );
                },
 
                /**
index cf7443f..142c454 100644 (file)
                 */
                ajax: function ( parameters, ajaxOptions ) {
                        var token,
-                               apiDeferred = $.Deferred();
+                               apiDeferred = $.Deferred(),
+                               xhr;
 
                        parameters = $.extend( {}, this.defaults.parameters, parameters );
                        ajaxOptions = $.extend( {}, this.defaults.ajax, ajaxOptions );
                        }
 
                        // Make the AJAX request
-                       $.ajax( ajaxOptions )
+                       xhr = $.ajax( ajaxOptions )
                                // If AJAX fails, reject API call with error code 'http'
                                // and details in second argument.
                                .fail( function ( xhr, textStatus, exception ) {
                                } );
 
                        // Return the Promise
-                       return apiDeferred.promise().fail( function ( code, details ) {
+                       return apiDeferred.promise( { abort: xhr.abort } ).fail( function ( code, details ) {
                                mw.log( 'mw.Api error: ', code, details );
-                       });
+                       } );
                }
 
        };
index ea0388c..4044655 100644 (file)
                 * @return {string} return.done.data Parsed HTML of `wikitext`.
                 */
                parse: function ( wikitext, ok, err ) {
-                       var d = $.Deferred();
+                       var d = $.Deferred(),
+                               apiPromise;
                        // Backwards compatibility (< MW 1.20)
                        d.done( ok );
                        d.fail( err );
 
-                       this.get( {
+                       apiPromise = this.get( {
                                        action: 'parse',
                                        text: wikitext
                                } )
@@ -31,7 +32,7 @@
                                } )
                                .fail( d.reject );
 
-                       return d.promise();
+                       return d.promise( { abort: apiPromise.abort } );
                }
        } );
 
index c86a90a..e2be5c7 100644 (file)
@@ -19,7 +19,9 @@
         * @return {string} return.done.watch.message Parsed HTML of the confirmational interface message
         */
        function doWatchInternal( page, ok, err, addParams ) {
-               var params, d = $.Deferred();
+               var params,
+                       d = $.Deferred(),
+                       apiPromise;
                // Backwards compatibility (< MW 1.20)
                d.done( ok );
                d.fail( err );
                        $.extend( params, addParams );
                }
 
-               this.post( params )
+               apiPromise = this.post( params )
                        .done( function ( data ) {
                                d.resolve( data.watch );
                        } )
                        .fail( d.reject );
 
-               return d.promise();
+               return d.promise( { abort: apiPromise.abort } );
        }
 
        $.extend( mw.Api.prototype, {
index 2ceb3ea..d1cb41d 100644 (file)
@@ -487,7 +487,13 @@ var mw = ( function ( $, undefined ) {
                                                // TODO: Use requestAnimationFrame in the future which will
                                                // perform even better by not injecting styles while the browser
                                                // is paiting.
-                                               setTimeout( addEmbeddedCSS );
+                                               setTimeout( function () {
+                                                       // Can't pass addEmbeddedCSS to setTimeout directly because Firefox
+                                                       // (below version 13) has the non-standard behaviour of passing a
+                                                       // numerical "lateness" value as first argument to this callback
+                                                       // http://benalman.com/news/2009/07/the-mysterious-firefox-settime/
+                                                       addEmbeddedCSS();
+                                               } );
                                                return;
                                        }
 
index 4cbc093..4b236b4 100644 (file)
@@ -319,7 +319,7 @@ input.searchButton {
        position: absolute;
        left: 0;
        top: 0;
-       z-index: 0;
+       z-index: 3;
 }
 #p-personal {
        width: 100%;
index 32b8154..3d34f34 100644 (file)
@@ -869,18 +869,36 @@ class ParserTest {
                $this->uploadDir = $this->setupUploadDir();
                $user = User::createNew( 'WikiSysop' );
                $image = wfLocalFile( Title::makeTitle( NS_FILE, 'Foobar.jpg' ) );
+               # note that the size/width/height/bits/etc of the file
+               # are actually set by inspecting the file itself; the arguments
+               # to recordUpload2 have no effect.  That said, we try to make things
+               # match up so it is less confusing to readers of the code & tests.
                $image->recordUpload2( '', 'Upload of some lame file', 'Some lame file', array(
-                       'size' => 12345,
+                       'size' => 7881,
                        'width' => 1941,
                        'height' => 220,
-                       'bits' => 24,
+                       'bits' => 8,
                        'media_type' => MEDIATYPE_BITMAP,
                        'mime' => 'image/jpeg',
                        'metadata' => serialize( array() ),
-                       'sha1' => wfBaseConvert( '', 16, 36, 31 ),
+                       'sha1' => wfBaseConvert( '1', 16, 36, 31 ),
                        'fileExists' => true
                ), $this->db->timestamp( '20010115123500' ), $user );
 
+               $image = wfLocalFile( Title::makeTitle( NS_FILE, 'Thumb.png' ) );
+               # again, note that size/width/height below are ignored; see above.
+               $image->recordUpload2( '', 'Upload of some lame thumbnail', 'Some lame thumbnail', array(
+                       'size' => 22589,
+                       'width' => 135,
+                       'height' => 135,
+                       'bits' => 8,
+                       'media_type' => MEDIATYPE_BITMAP,
+                       'mime' => 'image/png',
+                       'metadata' => serialize( array() ),
+                       'sha1' => wfBaseConvert( '2', 16, 36, 31 ),
+                       'fileExists' => true
+               ), $this->db->timestamp( '20130225203040' ), $user );
+
                # This image will be blacklisted in [[MediaWiki:Bad image list]]
                $image = wfLocalFile( Title::makeTitle( NS_FILE, 'Bad.jpg' ) );
                $image->recordUpload2( '', 'zomgnotcensored', 'Borderline image', array(
@@ -891,7 +909,7 @@ class ParserTest {
                        'media_type' => MEDIATYPE_BITMAP,
                        'mime' => 'image/jpeg',
                        'metadata' => serialize( array() ),
-                       'sha1' => wfBaseConvert( '', 16, 36, 31 ),
+                       'sha1' => wfBaseConvert( '3', 16, 36, 31 ),
                        'fileExists' => true
                ), $this->db->timestamp( '20010115123500' ), $user );
        }
@@ -960,6 +978,8 @@ class ParserTest {
 
                wfMkdirParents( $dir . '/3/3a', null, __METHOD__ );
                copy( "$IP/skins/monobook/headbg.jpg", "$dir/3/3a/Foobar.jpg" );
+               wfMkdirParents( $dir . '/e/ea', null, __METHOD__ );
+               copy( "$IP/skins/monobook/wiki.png", "$dir/e/ea/Thumb.png" );
                wfMkdirParents( $dir . '/0/09', null, __METHOD__ );
                copy( "$IP/skins/monobook/headbg.jpg", "$dir/0/09/Bad.jpg" );
 
@@ -1008,6 +1028,8 @@ class ParserTest {
                                "$dir/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg",
                                "$dir/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg",
 
+                               "$dir/e/ea/Thumb.png",
+
                                "$dir/0/09/Bad.jpg",
 
                                "$dir/math/f/a/5/fa50b8b616463173474302ca3e63586b.png",
@@ -1024,6 +1046,9 @@ class ParserTest {
                                "$dir/thumb/3/3a",
                                "$dir/thumb/3",
 
+                               "$dir/e/ea",
+                               "$dir/e",
+
                                "$dir/0/09/",
                                "$dir/0/",
                                "$dir/thumb",
index e28074e..d3bd6a5 100644 (file)
@@ -4782,7 +4782,7 @@ Magic Word: {{NUMBEROFFILES}}
 !! input
 {{NUMBEROFFILES}}
 !! result
-<p>2
+<p>3
 </p>
 !! end
 
@@ -7151,6 +7151,8 @@ Image with link parameter (URL target) and unnamed parameter
 
 !! test
 Thumbnail image with link parameter
+!! options
+php
 !! input
 [[Image:foobar.jpg|thumb|link=http://example.com/|Title]]
 !! result
@@ -7158,6 +7160,61 @@ Thumbnail image with link parameter
 
 !! end
 
+!! test
+Manually-specified thumbnail image
+!! options
+php
+!! input
+[[Image:Foobar.jpg|thumb=Thumb.png|Title]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/File:Foobar.jpg"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>
+
+!! end
+
+!! test
+Manually-specified thumbnail image with explicit link to wiki page
+!! options
+php
+!! input
+[[Image:Foobar.jpg|thumb=Thumb.png|link=Main Page|Title]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>
+
+!! end
+
+!! test
+Manually-specified thumbnail image with explicit link to url
+!! options
+php
+!! input
+[[Image:Foobar.jpg|thumb=Thumb.png|link=http://example.com|Title]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="http://example.com"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>
+
+!! end
+
+!! test
+Manually-specified thumbnail image with explicit no link
+!! options
+php
+!! input
+[[Image:Foobar.jpg|thumb=Thumb.png|link=|Title]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:137px;"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" />  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>
+
+!! end
+
+!! test
+Manually-specified thumbnail image with explicit link and alt text
+!! options
+php
+!! input
+[[Image:Foobar.jpg|thumb=Thumb.png|link=Main Page|alt=alttext|Title]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="alttext" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Title</div></div></div>
+
+!! end
+
 !! test
 Image with frame and link
 !! input
@@ -9580,7 +9637,7 @@ Fuzz testing: image with bogus manual thumbnail
 !!input
 [[Image:foobar.jpg|thumbnail= ]]
 !!result
-<div class="thumb tright"><div class="thumbinner" style="width:1943px;">Error creating thumbnail:   <div class="thumbcaption"></div></div></div>
+<div class="thumb tright"><div class="thumbinner" style="width:182px;">Error creating thumbnail:   <div class="thumbcaption"></div></div></div>
 
 !!end
 
@@ -14060,6 +14117,26 @@ parsoid
 
 !! end
 
+!! test
+Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
+!! options
+parsoid
+!! input
+{{}}
+!! result
+{{}}
+!! end
+
+!! test
+Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
+!! options
+parsoid
+!! input
+}}{{
+!! result
+}}{{
+!! end
+
 !!test
 Accept empty td cell attribute
 !!input
index 7d95b07..ecc8ad1 100644 (file)
@@ -438,7 +438,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * even if using different parameters.
         *
         * @param DatabaseBase $db The database connection
-        * @param String  $prefix The prefix to use for the new table set (aka schema).
+        * @param String $prefix The prefix to use for the new table set (aka schema).
         *
         * @throws MWException if the database table prefix is already $prefix
         */
diff --git a/tests/phpunit/includes/JsonTest.php b/tests/phpunit/includes/JsonTest.php
deleted file mode 100644 (file)
index 96a2ead..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-class JsonTest extends MediaWikiTestCase {
-
-       function testPhpBug46944Test() {
-               $this->assertNotEquals(
-                       '\ud840\udc00',
-                       strtolower( FormatJson::encode( "\xf0\xa0\x80\x80" ) ),
-                       'Test encoding an broken json_encode character (U+20000)'
-               );
-
-       }
-
-       function testDecodeVarTypes() {
-               $this->assertInternalType(
-                       'object',
-                       FormatJson::decode( '{"Name": "Cheeso", "Rank": 7}' ),
-                       'Default to object'
-               );
-
-               $this->assertInternalType(
-                       'array',
-                       FormatJson::decode( '{"Name": "Cheeso", "Rank": 7}', true ),
-                       'Optional array'
-               );
-       }
-}
index d4d93b0..ab93b2b 100644 (file)
@@ -85,7 +85,7 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
                $wgUser->mFrom = 'defaults';
                $wgUser->mOptionsLoaded = true;
                // The user's data is ignored because the variant is set in the URL.
-               $wgUser->setOption( 'variant', 'tg-latn' ); 
+               $wgUser->setOption( 'variant', 'tg-latn' );
                $this->assertEquals( 'tg', $this->lc->getPreferredVariant() );
        }
 
index 2259187..9e50b4c 100644 (file)
@@ -151,18 +151,20 @@ class PathRouterTest extends MediaWikiTestCase {
                $router->add( array( 'qwerty' => "/qwerty/$1" ), array( 'qwerty' => '$key' ) );
                $router->add( "/$2/$1", array( 'restricted-to-y' => '$2' ), array( '$2' => 'y' ) );
 
-               foreach ( array(
-                                       '/Foo' => array( 'title' => 'Foo' ),
-                                       '/Bar' => array( 'ping' => 'pong' ),
-                                       '/Baz' => array( 'marco' => 'polo' ),
-                                       '/asdf-foo' => array( 'title' => 'qwerty-foo' ),
-                                       '/qwerty-bar' => array( 'title' => 'asdf-bar' ),
-                                       '/a/Foo' => array( 'title' => 'Foo' ),
-                                       '/asdf/Foo' => array( 'title' => 'Foo' ),
-                                       '/qwerty/Foo' => array( 'title' => 'Foo', 'qwerty' => 'qwerty' ),
-                                       '/baz/Foo' => array( 'title' => 'Foo', 'unrestricted' => 'baz' ),
-                                       '/y/Foo' => array( 'title' => 'Foo', 'restricted-to-y' => 'y' ),
-                               ) as $path => $result ) {
+               foreach (
+                       array(
+                               '/Foo' => array( 'title' => 'Foo' ),
+                               '/Bar' => array( 'ping' => 'pong' ),
+                               '/Baz' => array( 'marco' => 'polo' ),
+                               '/asdf-foo' => array( 'title' => 'qwerty-foo' ),
+                               '/qwerty-bar' => array( 'title' => 'asdf-bar' ),
+                               '/a/Foo' => array( 'title' => 'Foo' ),
+                               '/asdf/Foo' => array( 'title' => 'Foo' ),
+                               '/qwerty/Foo' => array( 'title' => 'Foo', 'qwerty' => 'qwerty' ),
+                               '/baz/Foo' => array( 'title' => 'Foo', 'unrestricted' => 'baz' ),
+                               '/y/Foo' => array( 'title' => 'Foo', 'restricted-to-y' => 'y' ),
+                       ) as $path => $result
+               ) {
                        $this->assertEquals( $router->parse( $path ), $result );
                }
        }
index a54a57e..0530b44 100644 (file)
@@ -29,7 +29,7 @@ class StringUtilsTest extends MediaWikiTestCase {
         */
        function testIsUtf8WithPhpFallbackImplementation( $expected, $string ) {
                $this->assertEquals( $expected,
-                       StringUtils::isUtf8( $string, /** disable mbstring: */ true ),
+                       StringUtils::isUtf8( $string, /** disable mbstring: */true ),
                        'Testing string "' . $this->escaped( $string ) . '" with pure PHP implementation'
                );
        }
@@ -116,7 +116,7 @@ class StringUtilsTest extends MediaWikiTestCase {
                        array( $FAIL, "\xff" ),
                        array( $FAIL, "\xfe\xfe\xff\xff" ),
 
-                       /**
+                       /*
                        # The PHP implementation does not handle characters
                        # being represented in a form which is too long :(
 
@@ -133,7 +133,7 @@ class StringUtilsTest extends MediaWikiTestCase {
                        array( $FAIL, "\xf0\x8F\xbf\xbf" ),
                        array( $FAIL, "\xf8\x87\xbf\xbf" ),
                        array( $FAIL, "\xfc\x83\xbf\xbf\xbf\xbf" ),
-                       **/
+                       */
 
                        # non characters
                        array( $PASS, "\xef\xbf\xbe" ),
index cff8a2f..970862b 100644 (file)
@@ -38,7 +38,7 @@ class TitleTest extends MediaWikiTestCase {
        function testBug31100FixSpecialName( $text, $expectedParam ) {
                $title = Title::newFromText( $text );
                $fixed = $title->fixSpecialName();
-               $stuff = explode( '/', $fixed->getDbKey(), 2 );
+               $stuff = explode( '/', $fixed->getDBkey(), 2 );
                if ( count( $stuff ) == 2 ) {
                        $par = $stuff[1];
                } else {
index 94082e5..696b145 100644 (file)
@@ -65,8 +65,7 @@ class ApiCreateAccountTest extends ApiTestCase {
                        'action' => 'login',
                        'lgname' => 'Apitestnew',
                        'lgpassword' => $password,
-                       )
-               );
+               ) );
 
                $result = $ret[0];
                $this->assertNotInternalType( 'bool', $result );
@@ -76,12 +75,14 @@ class ApiCreateAccountTest extends ApiTestCase {
                $this->assertEquals( 'NeedToken', $a );
                $token = $result['login']['token'];
 
-               $ret = $this->doApiRequest( array(
-                       'action' => 'login',
-                       'lgtoken' => $token,
-                       'lgname' => 'Apitestnew',
-                       'lgpassword' => $password,
-                       ), $ret[2]
+               $ret = $this->doApiRequest(
+                       array(
+                               'action' => 'login',
+                               'lgtoken' => $token,
+                               'lgname' => 'Apitestnew',
+                               'lgpassword' => $password,
+                       ),
+                       $ret[2]
                );
 
                $result = $ret[0];
@@ -92,9 +93,11 @@ class ApiCreateAccountTest extends ApiTestCase {
                $this->assertEquals( 'Success', $a );
 
                // log out to destroy the session
-               $ret = $this->doApiRequest( array(
-                       'action' => 'logout',
-                       ), $ret[2]
+               $ret = $this->doApiRequest(
+                       array(
+                               'action' => 'logout',
+                       ),
+                       $ret[2]
                );
                $this->assertEquals( array(), $ret[0] );
        }
index 2277028..e278fd0 100644 (file)
@@ -81,8 +81,7 @@ class ApiTest extends ApiTestCase {
                        "action" => "login",
                        "lgname" => $user->username,
                        "lgpassword" => "bad",
-                       )
-               );
+               ) );
 
                $result = $ret[0];
 
@@ -136,7 +135,7 @@ class ApiTest extends ApiTestCase {
                $token = $result["login"]["token"];
 
                $ret = $this->doApiRequest(
-                       array(
+                       array(
                                "action" => "login",
                                "lgtoken" => $token,
                                "lgname" => $user->username,
index 6d4e371..30ec6c3 100644 (file)
@@ -67,7 +67,10 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
                                'title' => 'AQBT-All',
                                'links' => array(
                                        array( 'ns' => 0, 'title' => 'AQBT-Links' ),
-       ) ) ) ) );
+                               )
+                       )
+               ) )
+       );
 
        private static $templates = array(
                array( 'prop' => 'templates', 'titles' => 'AQBT-All' ),
@@ -78,7 +81,10 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
                                'title' => 'AQBT-All',
                                'templates' => array(
                                        array( 'ns' => 10, 'title' => 'Template:AQBT-T' ),
-       ) ) ) ) );
+                               )
+                       )
+               ) )
+       );
 
        private static $categories = array(
                array( 'prop' => 'categories', 'titles' => 'AQBT-All' ),
@@ -89,7 +95,10 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
                                'title' => 'AQBT-All',
                                'categories' => array(
                                        array( 'ns' => 14, 'title' => 'Category:AQBT-Cat' ),
-       ) ) ) ) );
+                               )
+                       )
+               ) )
+       );
 
        private static $allpages = array(
                array( 'list' => 'allpages', 'apprefix' => 'AQBT-' ),
@@ -98,7 +107,8 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
                        array( 'pageid' => 2, 'ns' => 0, 'title' => 'AQBT-Categories' ),
                        array( 'pageid' => 3, 'ns' => 0, 'title' => 'AQBT-Links' ),
                        array( 'pageid' => 4, 'ns' => 0, 'title' => 'AQBT-Templates' ),
-       ) ) );
+               ) )
+       );
 
        private static $alllinks = array(
                array( 'list' => 'alllinks', 'alprefix' => 'AQBT-' ),
@@ -107,40 +117,46 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
                        array( 'ns' => 0, 'title' => 'AQBT-Categories' ),
                        array( 'ns' => 0, 'title' => 'AQBT-Links' ),
                        array( 'ns' => 0, 'title' => 'AQBT-Templates' ),
-       ) ) );
+               ) )
+       );
 
        private static $alltransclusions = array(
                array( 'list' => 'alltransclusions', 'atprefix' => 'AQBT-' ),
                array( 'alltransclusions' => array(
                        array( 'ns' => 10, 'title' => 'Template:AQBT-T' ),
                        array( 'ns' => 10, 'title' => 'Template:AQBT-T' ),
-       ) ) );
+               ) )
+       );
 
        private static $allcategories = array(
                array( 'list' => 'allcategories', 'acprefix' => 'AQBT-' ),
                array( 'allcategories' => array(
                        array( '*' => 'AQBT-Cat' ),
-       ) ) );
+               ) )
+       );
 
        private static $backlinks = array(
                array( 'list' => 'backlinks', 'bltitle' => 'AQBT-Links' ),
                array( 'backlinks' => array(
                        array( 'pageid' => 1, 'ns' => 0, 'title' => 'AQBT-All' ),
-       ) ) );
+               ) )
+       );
 
        private static $embeddedin = array(
                array( 'list' => 'embeddedin', 'eititle' => 'Template:AQBT-T' ),
                array( 'embeddedin' => array(
                        array( 'pageid' => 1, 'ns' => 0, 'title' => 'AQBT-All' ),
                        array( 'pageid' => 4, 'ns' => 0, 'title' => 'AQBT-Templates' ),
-       ) ) );
+               ) )
+       );
 
        private static $categorymembers = array(
                array( 'list' => 'categorymembers', 'cmtitle' => 'Category:AQBT-Cat' ),
                array( 'categorymembers' => array(
                        array( 'pageid' => 1, 'ns' => 0, 'title' => 'AQBT-All' ),
                        array( 'pageid' => 2, 'ns' => 0, 'title' => 'AQBT-Categories' ),
-       ) ) );
+               ) )
+       );
 
        private static $generatorAllpages = array(
                array( 'generator' => 'allpages', 'gapprefix' => 'AQBT-' ),
@@ -161,7 +177,8 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
                                'pageid' => 4,
                                'ns' => 0,
                                'title' => 'AQBT-Templates' ),
-       ) ) );
+               ) )
+       );
 
        private static $generatorLinks = array(
                array( 'generator' => 'links', 'titles' => 'AQBT-Links' ),
@@ -178,14 +195,17 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
                                'pageid' => 4,
                                'ns' => 0,
                                'title' => 'AQBT-Templates' ),
-       ) ) );
+               ) )
+       );
 
        private static $generatorLinksPropLinks = array(
                array( 'prop' => 'links' ),
                array( 'pages' => array(
                        '1' => array( 'links' => array(
                                array( 'ns' => 0, 'title' => 'AQBT-Links' ),
-       ) ) ) ) );
+                       ) )
+               ) )
+       );
 
        private static $generatorLinksPropTemplates = array(
                array( 'prop' => 'templates' ),
@@ -194,7 +214,8 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
                                array( 'ns' => 10, 'title' => 'Template:AQBT-T' ) ) ),
                        '4' => array( 'templates' => array(
                                array( 'ns' => 10, 'title' => 'Template:AQBT-T' ) ) ),
-               ) ) );
+               ) )
+       );
 
        /**
         * Test basic props
index 0a3ac1d..c68065d 100644 (file)
@@ -48,7 +48,7 @@ class ApiQueryContinue2Test extends ApiQueryContinueTestBase {
         */
        public function testA() {
                $this->mVerbose = false;
-               $mk = function( $g, $p, $gDir ) {
+               $mk = function ( $g, $p, $gDir ) {
                        return array(
                                'generator' => 'allpages',
                                'gapprefix' => 'AQCT73462-',
@@ -59,10 +59,10 @@ class ApiQueryContinue2Test extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 1 prop + 1 list
-               $data = $this->query( $mk(99,99,true), 1, 'g1p', false );
-               $this->checkC( $data, $mk(1,1,true), 6, 'g1p-11t' );
-               $this->checkC( $data, $mk(2,2,true), 3, 'g1p-22t' );
-               $this->checkC( $data, $mk(1,1,false), 6, 'g1p-11f' );
-               $this->checkC( $data, $mk(2,2,false), 3, 'g1p-22f' );
+               $data = $this->query( $mk( 99, 99, true ), 1, 'g1p', false );
+               $this->checkC( $data, $mk( 1, 1, true ), 6, 'g1p-11t' );
+               $this->checkC( $data, $mk( 2, 2, true ), 3, 'g1p-22t' );
+               $this->checkC( $data, $mk( 1, 1, false ), 6, 'g1p-11f' );
+               $this->checkC( $data, $mk( 2, 2, false ), 3, 'g1p-22f' );
        }
 }
index cb8f181..33f4663 100644 (file)
@@ -58,21 +58,21 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
         */
        public function test1List() {
                $this->mVerbose = false;
-               $mk = function( $l ) {
+               $mk = function ( $l ) {
                        return array(
                                'list' => 'allpages',
                                'apprefix' => 'AQCT-',
                                'aplimit' => "$l",
                        );
                };
-               $data = $this->query( $mk(99), 1, '1L', false );
+               $data = $this->query( $mk( 99 ), 1, '1L', false );
 
                // 1 list
-               $this->checkC( $data, $mk(1), 5, '1L-1' );
-               $this->checkC( $data, $mk(2), 3, '1L-2' );
-               $this->checkC( $data, $mk(3), 2, '1L-3' );
-               $this->checkC( $data, $mk(4), 2, '1L-4' );
-               $this->checkC( $data, $mk(5), 1, '1L-5' );
+               $this->checkC( $data, $mk( 1 ), 5, '1L-1' );
+               $this->checkC( $data, $mk( 2 ), 3, '1L-2' );
+               $this->checkC( $data, $mk( 3 ), 2, '1L-3' );
+               $this->checkC( $data, $mk( 4 ), 2, '1L-4' );
+               $this->checkC( $data, $mk( 5 ), 1, '1L-5' );
        }
 
        /**
@@ -81,7 +81,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
         */
        public function test2Lists() {
                $this->mVerbose = false;
-               $mk = function( $l1, $l2 ) {
+               $mk = function ( $l1, $l2 ) {
                        return array(
                                'list' => 'allpages|alltransclusions',
                                'apprefix' => 'AQCT-',
@@ -92,12 +92,12 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // 2 lists
-               $data = $this->query( $mk(99,99), 1, '2L', false );
-               $this->checkC( $data, $mk(1,1), 5, '2L-11' );
-               $this->checkC( $data, $mk(2,2), 3, '2L-22' );
-               $this->checkC( $data, $mk(3,3), 2, '2L-33' );
-               $this->checkC( $data, $mk(4,4), 2, '2L-44' );
-               $this->checkC( $data, $mk(5,5), 1, '2L-55' );
+               $data = $this->query( $mk( 99, 99 ), 1, '2L', false );
+               $this->checkC( $data, $mk( 1, 1 ), 5, '2L-11' );
+               $this->checkC( $data, $mk( 2, 2 ), 3, '2L-22' );
+               $this->checkC( $data, $mk( 3, 3 ), 2, '2L-33' );
+               $this->checkC( $data, $mk( 4, 4 ), 2, '2L-44' );
+               $this->checkC( $data, $mk( 5, 5 ), 1, '2L-55' );
        }
 
        /**
@@ -106,7 +106,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
         */
        public function testGen1Prop() {
                $this->mVerbose = false;
-               $mk = function( $g, $p ) {
+               $mk = function ( $g, $p ) {
                        return array(
                                'generator' => 'allpages',
                                'gapprefix' => 'AQCT-',
@@ -116,12 +116,12 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 1 prop
-               $data = $this->query( $mk(99,99), 1, 'G1P', false );
-               $this->checkC( $data, $mk(1,1), 11, 'G1P-11' );
-               $this->checkC( $data, $mk(2,2), 6, 'G1P-22' );
-               $this->checkC( $data, $mk(3,3), 4, 'G1P-33' );
-               $this->checkC( $data, $mk(4,4), 3, 'G1P-44' );
-               $this->checkC( $data, $mk(5,5), 2, 'G1P-55' );
+               $data = $this->query( $mk( 99, 99 ), 1, 'G1P', false );
+               $this->checkC( $data, $mk( 1, 1 ), 11, 'G1P-11' );
+               $this->checkC( $data, $mk( 2, 2 ), 6, 'G1P-22' );
+               $this->checkC( $data, $mk( 3, 3 ), 4, 'G1P-33' );
+               $this->checkC( $data, $mk( 4, 4 ), 3, 'G1P-44' );
+               $this->checkC( $data, $mk( 5, 5 ), 2, 'G1P-55' );
        }
 
        /**
@@ -130,7 +130,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
         */
        public function testGen2Prop() {
                $this->mVerbose = false;
-               $mk = function( $g, $p1, $p2 ) {
+               $mk = function ( $g, $p1, $p2 ) {
                        return array(
                                'generator' => 'allpages',
                                'gapprefix' => 'AQCT-',
@@ -141,17 +141,17 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 2 props
-               $data = $this->query( $mk(99,99,99), 1, 'G2P', false );
-               $this->checkC( $data, $mk(1,1,1), 16, 'G2P-111' );
-               $this->checkC( $data, $mk(2,2,2), 9, 'G2P-222' );
-               $this->checkC( $data, $mk(3,3,3), 6, 'G2P-333' );
-               $this->checkC( $data, $mk(4,4,4), 4, 'G2P-444' );
-               $this->checkC( $data, $mk(5,5,5), 2, 'G2P-555' );
-               $this->checkC( $data, $mk(5,1,1), 10, 'G2P-511' );
-               $this->checkC( $data, $mk(4,2,2), 7, 'G2P-422' );
-               $this->checkC( $data, $mk(2,3,3), 7, 'G2P-233' );
-               $this->checkC( $data, $mk(2,4,4), 5, 'G2P-244' );
-               $this->checkC( $data, $mk(1,5,5), 5, 'G2P-155' );
+               $data = $this->query( $mk( 99, 99, 99 ), 1, 'G2P', false );
+               $this->checkC( $data, $mk( 1, 1, 1 ), 16, 'G2P-111' );
+               $this->checkC( $data, $mk( 2, 2, 2 ), 9, 'G2P-222' );
+               $this->checkC( $data, $mk( 3, 3, 3 ), 6, 'G2P-333' );
+               $this->checkC( $data, $mk( 4, 4, 4 ), 4, 'G2P-444' );
+               $this->checkC( $data, $mk( 5, 5, 5 ), 2, 'G2P-555' );
+               $this->checkC( $data, $mk( 5, 1, 1 ), 10, 'G2P-511' );
+               $this->checkC( $data, $mk( 4, 2, 2 ), 7, 'G2P-422' );
+               $this->checkC( $data, $mk( 2, 3, 3 ), 7, 'G2P-233' );
+               $this->checkC( $data, $mk( 2, 4, 4 ), 5, 'G2P-244' );
+               $this->checkC( $data, $mk( 1, 5, 5 ), 5, 'G2P-155' );
        }
 
        /**
@@ -160,7 +160,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
         */
        public function testGen1Prop1List() {
                $this->mVerbose = false;
-               $mk = function( $g, $p, $l ) {
+               $mk = function ( $g, $p, $l ) {
                        return array(
                                'generator' => 'allpages',
                                'gapprefix' => 'AQCT-',
@@ -174,24 +174,24 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 1 prop + 1 list
-               $data = $this->query( $mk(99,99,99), 1, 'G1P1L', false );
-               $this->checkC( $data, $mk(1,1,1), 11, 'G1P1L-111' );
-               $this->checkC( $data, $mk(2,2,2), 6, 'G1P1L-222' );
-               $this->checkC( $data, $mk(3,3,3), 4, 'G1P1L-333' );
-               $this->checkC( $data, $mk(4,4,4), 3, 'G1P1L-444' );
-               $this->checkC( $data, $mk(5,5,5), 2, 'G1P1L-555' );
-               $this->checkC( $data, $mk(5,5,1), 4, 'G1P1L-551' );
-               $this->checkC( $data, $mk(5,5,2), 2, 'G1P1L-552' );
+               $data = $this->query( $mk( 99, 99, 99 ), 1, 'G1P1L', false );
+               $this->checkC( $data, $mk( 1, 1, 1 ), 11, 'G1P1L-111' );
+               $this->checkC( $data, $mk( 2, 2, 2 ), 6, 'G1P1L-222' );
+               $this->checkC( $data, $mk( 3, 3, 3 ), 4, 'G1P1L-333' );
+               $this->checkC( $data, $mk( 4, 4, 4 ), 3, 'G1P1L-444' );
+               $this->checkC( $data, $mk( 5, 5, 5 ), 2, 'G1P1L-555' );
+               $this->checkC( $data, $mk( 5, 5, 1 ), 4, 'G1P1L-551' );
+               $this->checkC( $data, $mk( 5, 5, 2 ), 2, 'G1P1L-552' );
        }
 
        /**
         * Test smart continue - generator=allpages, prop=links|templates,
-        *                                         list=alllinks|alltransclusions, meta=siteinfo
+        *                       list=alllinks|alltransclusions, meta=siteinfo
         * @medium
         */
        public function testGen2Prop2List1Meta() {
                $this->mVerbose = false;
-               $mk = function( $g, $p1, $p2, $l1, $l2 ) {
+               $mk = function ( $g, $p1, $p2, $l1, $l2 ) {
                        return array(
                                'generator' => 'allpages',
                                'gapprefix' => 'AQCT-',
@@ -211,16 +211,16 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 1 prop + 1 list
-               $data = $this->query( $mk(99,99,99,99,99), 1, 'G2P2L1M', false );
-               $this->checkC( $data, $mk(1,1,1,1,1), 16, 'G2P2L1M-11111' );
-               $this->checkC( $data, $mk(2,2,2,2,2), 9, 'G2P2L1M-22222' );
-               $this->checkC( $data, $mk(3,3,3,3,3), 6, 'G2P2L1M-33333' );
-               $this->checkC( $data, $mk(4,4,4,4,4), 4, 'G2P2L1M-44444' );
-               $this->checkC( $data, $mk(5,5,5,5,5), 2, 'G2P2L1M-55555' );
-               $this->checkC( $data, $mk(5,5,5,1,1), 4, 'G2P2L1M-55511' );
-               $this->checkC( $data, $mk(5,5,5,2,2), 2, 'G2P2L1M-55522' );
-               $this->checkC( $data, $mk(5,1,1,5,5), 10, 'G2P2L1M-51155' );
-               $this->checkC( $data, $mk(5,2,2,5,5), 5, 'G2P2L1M-52255' );
+               $data = $this->query( $mk( 99, 99, 99, 99, 99 ), 1, 'G2P2L1M', false );
+               $this->checkC( $data, $mk( 1, 1, 1, 1, 1 ), 16, 'G2P2L1M-11111' );
+               $this->checkC( $data, $mk( 2, 2, 2, 2, 2 ), 9, 'G2P2L1M-22222' );
+               $this->checkC( $data, $mk( 3, 3, 3, 3, 3 ), 6, 'G2P2L1M-33333' );
+               $this->checkC( $data, $mk( 4, 4, 4, 4, 4 ), 4, 'G2P2L1M-44444' );
+               $this->checkC( $data, $mk( 5, 5, 5, 5, 5 ), 2, 'G2P2L1M-55555' );
+               $this->checkC( $data, $mk( 5, 5, 5, 1, 1 ), 4, 'G2P2L1M-55511' );
+               $this->checkC( $data, $mk( 5, 5, 5, 2, 2 ), 2, 'G2P2L1M-55522' );
+               $this->checkC( $data, $mk( 5, 1, 1, 5, 5 ), 10, 'G2P2L1M-51155' );
+               $this->checkC( $data, $mk( 5, 2, 2, 5, 5 ), 5, 'G2P2L1M-52255' );
        }
 
        /**
@@ -229,7 +229,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
         */
        public function testSameGenAndProp() {
                $this->mVerbose = false;
-               $mk = function( $g, $gDir, $p, $pDir ) {
+               $mk = function ( $g, $gDir, $p, $pDir ) {
                        return array(
                                'titles' => 'AQCT-1',
                                'generator' => 'templates',
@@ -241,31 +241,31 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 1 prop
-               $data = $this->query( $mk(99,true,99,true), 1, 'G=P', false );
+               $data = $this->query( $mk( 99, true, 99, true ), 1, 'G=P', false );
 
-               $this->checkC( $data, $mk(1,true,1,true), 4, 'G=P-1t1t' );
-               $this->checkC( $data, $mk(2,true,2,true), 2, 'G=P-2t2t' );
-               $this->checkC( $data, $mk(3,true,3,true), 2, 'G=P-3t3t' );
-               $this->checkC( $data, $mk(1,true,3,true), 4, 'G=P-1t3t' );
-               $this->checkC( $data, $mk(3,true,1,true), 2, 'G=P-3t1t' );
+               $this->checkC( $data, $mk( 1, true, 1, true ), 4, 'G=P-1t1t' );
+               $this->checkC( $data, $mk( 2, true, 2, true ), 2, 'G=P-2t2t' );
+               $this->checkC( $data, $mk( 3, true, 3, true ), 2, 'G=P-3t3t' );
+               $this->checkC( $data, $mk( 1, true, 3, true ), 4, 'G=P-1t3t' );
+               $this->checkC( $data, $mk( 3, true, 1, true ), 2, 'G=P-3t1t' );
 
-               $this->checkC( $data, $mk(1,true,1,false), 4, 'G=P-1t1f' );
-               $this->checkC( $data, $mk(2,true,2,false), 2, 'G=P-2t2f' );
-               $this->checkC( $data, $mk(3,true,3,false), 2, 'G=P-3t3f' );
-               $this->checkC( $data, $mk(1,true,3,false), 4, 'G=P-1t3f' );
-               $this->checkC( $data, $mk(3,true,1,false), 2, 'G=P-3t1f' );
+               $this->checkC( $data, $mk( 1, true, 1, false ), 4, 'G=P-1t1f' );
+               $this->checkC( $data, $mk( 2, true, 2, false ), 2, 'G=P-2t2f' );
+               $this->checkC( $data, $mk( 3, true, 3, false ), 2, 'G=P-3t3f' );
+               $this->checkC( $data, $mk( 1, true, 3, false ), 4, 'G=P-1t3f' );
+               $this->checkC( $data, $mk( 3, true, 1, false ), 2, 'G=P-3t1f' );
 
-               $this->checkC( $data, $mk(1,false,1,true), 4, 'G=P-1f1t' );
-               $this->checkC( $data, $mk(2,false,2,true), 2, 'G=P-2f2t' );
-               $this->checkC( $data, $mk(3,false,3,true), 2, 'G=P-3f3t' );
-               $this->checkC( $data, $mk(1,false,3,true), 4, 'G=P-1f3t' );
-               $this->checkC( $data, $mk(3,false,1,true), 2, 'G=P-3f1t' );
+               $this->checkC( $data, $mk( 1, false, 1, true ), 4, 'G=P-1f1t' );
+               $this->checkC( $data, $mk( 2, false, 2, true ), 2, 'G=P-2f2t' );
+               $this->checkC( $data, $mk( 3, false, 3, true ), 2, 'G=P-3f3t' );
+               $this->checkC( $data, $mk( 1, false, 3, true ), 4, 'G=P-1f3t' );
+               $this->checkC( $data, $mk( 3, false, 1, true ), 2, 'G=P-3f1t' );
 
-               $this->checkC( $data, $mk(1,false,1,false), 4, 'G=P-1f1f' );
-               $this->checkC( $data, $mk(2,false,2,false), 2, 'G=P-2f2f' );
-               $this->checkC( $data, $mk(3,false,3,false), 2, 'G=P-3f3f' );
-               $this->checkC( $data, $mk(1,false,3,false), 4, 'G=P-1f3f' );
-               $this->checkC( $data, $mk(3,false,1,false), 2, 'G=P-3f1f' );
+               $this->checkC( $data, $mk( 1, false, 1, false ), 4, 'G=P-1f1f' );
+               $this->checkC( $data, $mk( 2, false, 2, false ), 2, 'G=P-2f2f' );
+               $this->checkC( $data, $mk( 3, false, 3, false ), 2, 'G=P-3f3f' );
+               $this->checkC( $data, $mk( 1, false, 3, false ), 4, 'G=P-1f3f' );
+               $this->checkC( $data, $mk( 3, false, 1, false ), 2, 'G=P-3f1f' );
        }
 
        /**
@@ -274,7 +274,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
         */
        public function testSameGenList() {
                $this->mVerbose = false;
-               $mk = function( $g, $gDir, $l, $pDir ) {
+               $mk = function ( $g, $gDir, $l, $pDir ) {
                        return array(
                                'generator' => 'allpages',
                                'gapprefix' => 'AQCT-',
@@ -287,27 +287,27 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
                        );
                };
                // generator + 1 list
-               $data = $this->query( $mk(99,true,99,true), 1, 'G=L', false );
+               $data = $this->query( $mk( 99, true, 99, true ), 1, 'G=L', false );
 
-               $this->checkC( $data, $mk(1,true,1,true), 5, 'G=L-1t1t' );
-               $this->checkC( $data, $mk(2,true,2,true), 3, 'G=L-2t2t' );
-               $this->checkC( $data, $mk(3,true,3,true), 2, 'G=L-3t3t' );
-               $this->checkC( $data, $mk(1,true,3,true), 5, 'G=L-1t3t' );
-               $this->checkC( $data, $mk(3,true,1,true), 5, 'G=L-3t1t' );
-               $this->checkC( $data, $mk(1,true,1,false), 5, 'G=L-1t1f' );
-               $this->checkC( $data, $mk(2,true,2,false), 3, 'G=L-2t2f' );
-               $this->checkC( $data, $mk(3,true,3,false), 2, 'G=L-3t3f' );
-               $this->checkC( $data, $mk(1,true,3,false), 5, 'G=L-1t3f' );
-               $this->checkC( $data, $mk(3,true,1,false), 5, 'G=L-3t1f' );
-               $this->checkC( $data, $mk(1,false,1,true), 5, 'G=L-1f1t' );
-               $this->checkC( $data, $mk(2,false,2,true), 3, 'G=L-2f2t' );
-               $this->checkC( $data, $mk(3,false,3,true), 2, 'G=L-3f3t' );
-               $this->checkC( $data, $mk(1,false,3,true), 5, 'G=L-1f3t' );
-               $this->checkC( $data, $mk(3,false,1,true), 5, 'G=L-3f1t' );
-               $this->checkC( $data, $mk(1,false,1,false), 5, 'G=L-1f1f' );
-               $this->checkC( $data, $mk(2,false,2,false), 3, 'G=L-2f2f' );
-               $this->checkC( $data, $mk(3,false,3,false), 2, 'G=L-3f3f' );
-               $this->checkC( $data, $mk(1,false,3,false), 5, 'G=L-1f3f' );
-               $this->checkC( $data, $mk(3,false,1,false), 5, 'G=L-3f1f' );
+               $this->checkC( $data, $mk( 1, true, 1, true ), 5, 'G=L-1t1t' );
+               $this->checkC( $data, $mk( 2, true, 2, true ), 3, 'G=L-2t2t' );
+               $this->checkC( $data, $mk( 3, true, 3, true ), 2, 'G=L-3t3t' );
+               $this->checkC( $data, $mk( 1, true, 3, true ), 5, 'G=L-1t3t' );
+               $this->checkC( $data, $mk( 3, true, 1, true ), 5, 'G=L-3t1t' );
+               $this->checkC( $data, $mk( 1, true, 1, false ), 5, 'G=L-1t1f' );
+               $this->checkC( $data, $mk( 2, true, 2, false ), 3, 'G=L-2t2f' );
+               $this->checkC( $data, $mk( 3, true, 3, false ), 2, 'G=L-3t3f' );
+               $this->checkC( $data, $mk( 1, true, 3, false ), 5, 'G=L-1t3f' );
+               $this->checkC( $data, $mk( 3, true, 1, false ), 5, 'G=L-3t1f' );
+               $this->checkC( $data, $mk( 1, false, 1, true ), 5, 'G=L-1f1t' );
+               $this->checkC( $data, $mk( 2, false, 2, true ), 3, 'G=L-2f2t' );
+               $this->checkC( $data, $mk( 3, false, 3, true ), 2, 'G=L-3f3t' );
+               $this->checkC( $data, $mk( 1, false, 3, true ), 5, 'G=L-1f3t' );
+               $this->checkC( $data, $mk( 3, false, 1, true ), 5, 'G=L-3f1t' );
+               $this->checkC( $data, $mk( 1, false, 1, false ), 5, 'G=L-1f1f' );
+               $this->checkC( $data, $mk( 2, false, 2, false ), 3, 'G=L-2f2f' );
+               $this->checkC( $data, $mk( 3, false, 3, false ), 2, 'G=L-3f3f' );
+               $this->checkC( $data, $mk( 1, false, 3, false ), 5, 'G=L-1f3f' );
+               $this->checkC( $data, $mk( 3, false, 1, false ), 5, 'G=L-3f1f' );
        }
 }
index 4717479..e0a84e1 100644 (file)
@@ -36,7 +36,7 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
        /**
         * Run query() and compare against expected values
         */
-       protected function checkC( $expected, $params, $expectedCount, $id, $continue = true  ) {
+       protected function checkC( $expected, $params, $expectedCount, $id, $continue = true ) {
                $result = $this->query( $params, $expectedCount, $id, $continue );
                $this->assertResult( $expected, $result, $id );
        }
@@ -52,7 +52,7 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
         */
        protected function query( $params, $expectedCount, $id, $useContinue = true ) {
                if ( isset( $params['action'] ) ) {
-                       $this->assertEquals( 'query', $params['action'], 'Invalid query action');
+                       $this->assertEquals( 'query', $params['action'], 'Invalid query action' );
                } else {
                        $params['action'] = 'query';
                }
@@ -64,7 +64,7 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
                $continue = array();
                do {
                        $request = array_merge( $params, $continue );
-                       uksort( $request, function( $a, $b ) {
+                       uksort( $request, function ( $a, $b ) {
                                // put 'continue' params at the end - lazy method
                                $a = strpos( $a, 'continue' ) !== false ? 'zzz ' . $a : $a;
                                $b = strpos( $b, 'continue' ) !== false ? 'zzz ' . $b : $b;
@@ -74,7 +74,7 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
                        //$reqStr = str_replace( '&', ' & ', $reqStr );
                        $this->assertLessThan( $expectedCount, $count, "$id more data: $reqStr" );
                        if ( $this->mVerbose ) {
-                               print ("$id (#$count): $reqStr\n");
+                               print ( "$id (#$count): $reqStr\n" );
                        }
                        try {
                                $data = $this->doApiRequest( $request );
@@ -107,48 +107,52 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
                        } elseif ( !$useContinue ) {
                                $this->assertFalse( 'Non-smart query must be requested all at once' );
                        }
-               } while( true );
+               } while ( true );
        }
 
        private function printResult( $data ) {
                $q = $data['query'];
                $print = array();
-               if (isset($q['pages'])) {
-                       foreach ($q['pages'] as $p) {
+               if ( isset( $q['pages'] ) ) {
+                       foreach ( $q['pages'] as $p ) {
                                $m = $p['title'];
-                               if (isset($p['links'])) {
-                                       $m .= '/[' . implode(',', array_map(
-                                               function ($v) {
+                               if ( isset( $p['links'] ) ) {
+                                       $m .= '/[' . implode( ',', array_map(
+                                               function ( $v ) {
                                                        return $v['title'];
                                                },
-                                               $p['links'])) . ']';
+                                               $p['links'] ) ) . ']';
                                }
-                               if (isset($p['categories'])) {
-                                       $m .= '/(' . implode(',', array_map(
-                                               function ($v) {
-                                                       return str_replace('Category:', '', $v['title']);
+                               if ( isset( $p['categories'] ) ) {
+                                       $m .= '/(' . implode( ',', array_map(
+                                               function ( $v ) {
+                                                       return str_replace( 'Category:', '', $v['title'] );
                                                },
-                                               $p['categories'])) . ')';
+                                               $p['categories'] ) ) . ')';
                                }
                                $print[] = $m;
                        }
                }
-               if (isset($q['allcategories'])) {
-                       $print[] = '*Cats/(' . implode(',', array_map(
-                               function ($v) { return $v['*']; },
-                               $q['allcategories'])) . ')';
+               if ( isset( $q['allcategories'] ) ) {
+                       $print[] = '*Cats/(' . implode( ',', array_map(
+                               function ( $v ) {
+                                       return $v['*'];
+                               },
+                               $q['allcategories'] ) ) . ')';
                }
                self::GetItems( $q, 'allpages', 'Pages', $print );
                self::GetItems( $q, 'alllinks', 'Links', $print );
                self::GetItems( $q, 'alltransclusions', 'Trnscl', $print );
-               print(' ' . implode('  ', $print) . "\n");
+               print( ' ' . implode( '  ', $print ) . "\n" );
        }
 
        private static function GetItems( $q, $moduleName, $name, &$print ) {
-               if (isset($q[$moduleName])) {
-                       $print[] = "*$name/[" . implode(',',
-                               array_map( function ($v) { return $v['title']; },
-                                               $q[$moduleName])) . ']';
+               if ( isset( $q[$moduleName] ) ) {
+                       $print[] = "*$name/[" . implode( ',',
+                               array_map( function ( $v ) {
+                                               return $v['title'];
+                                       },
+                                       $q[$moduleName] ) ) . ']';
                }
        }
 
@@ -164,12 +168,12 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
                        $this->assertEquals( $results, $newResult, 'Repeated result must be the same as before' );
                } else {
                        $sort = null;
-                       foreach( $newResult as $key => $value ) {
+                       foreach ( $newResult as $key => $value ) {
                                if ( !$numericIds && $sort === null ) {
                                        if ( !is_array( $value ) ) {
                                                $sort = false;
                                        } elseif ( array_key_exists( 'title', $value ) ) {
-                                               $sort = function( $a, $b ) {
+                                               $sort = function ( $a, $b ) {
                                                        return strcmp( $a['title'], $b['title'] );
                                                };
                                        } else {
index 7b9f8ed..3d96beb 100644 (file)
@@ -43,7 +43,7 @@ STR;
        protected function merge( /*...*/ ) {
                $request = array();
                $expected = array();
-               foreach ( func_get_args() as $v ) {
+               foreach ( func_get_args() as $v ) {
                        list( $req, $exp ) = $this->validateRequestExpectedPair( $v );
                        $request = array_merge_recursive( $request, $req );
                        $this->mergeExpected( $expected, $exp );
@@ -57,7 +57,7 @@ STR;
         */
        private function validateRequestExpectedPair( $v ) {
                $this->assertType( 'array', $v, self::PARAM_ASSERT );
-               $this->assertEquals( 2, count($v), self::PARAM_ASSERT );
+               $this->assertEquals( 2, count( $v ), self::PARAM_ASSERT );
                $this->assertArrayHasKey( 0, $v, self::PARAM_ASSERT );
                $this->assertArrayHasKey( 1, $v, self::PARAM_ASSERT );
                $this->assertType( 'array', $v[0], self::PARAM_ASSERT );
@@ -71,7 +71,7 @@ STR;
        private function mergeExpected( &$all, $item ) {
                foreach ( $item as $k => $v ) {
                        if ( array_key_exists( $k, $all ) ) {
-                               if ( is_array ( $all[$k] ) ) {
+                               if ( is_array( $all[$k] ) ) {
                                        $this->mergeExpected( $all[$k], $v );
                                } else {
                                        $this->assertEquals( $all[$k], $v );
diff --git a/tests/phpunit/includes/cache/MessageCacheTest.php b/tests/phpunit/includes/cache/MessageCacheTest.php
deleted file mode 100644 (file)
index eda06d4..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-
-/**
- * @group Database
- * @group Cache
- */
-class MessageCacheTest extends MediaWikiLangTestCase {
-
-       protected function setUp() {
-               parent::setUp();
-               MessageCache::singleton()->enable();
-       }
-
-       function addDBData() {
-               // be sure english messages under $key, not $key/en
-               $this->setMwGlobals( array(
-                       'wgLanguageCode' => 'en',
-                       'wgContLang' => Language::factory( 'en' ),
-               ) );
-
-               // Set up messages and fallbacks ab -> ru -> en
-               $this->makePage( 'FallbackLanguageTest-Full', 'ab' );
-               $this->makePage( 'FallbackLanguageTest-Full', 'ru' );
-               $this->makePage( 'FallbackLanguageTest-Full', 'en' );
-
-               // Fallbacks where ab does not exist
-               $this->makePage( 'FallbackLanguageTest-Partial', 'ru' );
-               $this->makePage( 'FallbackLanguageTest-Partial', 'en' );
-
-               // Fallback to english
-               $this->makePage( 'FallbackLanguageTest-English', 'en' );
-
-               // Full key tests -- always want russian
-               $this->makePage( 'MessageCacheTest-FullKeyTest', 'ab' );
-               $this->makePage( 'MessageCacheTest-FullKeyTest', 'ru' );
-       }
-
-       /**
-        * Helper function for addDBData -- adds a simple page to the database
-        *
-        * @param string $title Title of page to be created
-        * @param string $lang  Language and content of the created page
-        */
-       protected function makePage( $title, $lang ) {
-               global $wgContLang;
-
-               $title = Title::newFromText(
-                       ($lang == $wgContLang->getCode()) ? $title : "$title/$lang",
-                       NS_MEDIAWIKI
-               );
-               $wikiPage = new WikiPage( $title );
-               $content = ContentHandler::makeContent( $lang, $title );
-               $wikiPage->doEditContent( $content, "$lang translation test case" );
-       }
-
-       /**
-        * Test message fallbacks, bug #1495
-        *
-        * @dataProvider provideMessagesForFallback
-        */
-       function testMessageFallbacks( $message, $lang, $expectedContent ) {
-               $result = MessageCache::singleton()->get( $message, true, $lang );
-               $this->assertEquals( $expectedContent, $result, "Message fallback failed." );
-       }
-
-       public static function provideMessagesForFallback() {
-               return array(
-                       array( 'FallbackLanguageTest-Full', 'ab', 'ab' ),
-                       array( 'FallbackLanguageTest-Partial', 'ab', 'ru' ),
-                       array( 'FallbackLanguageTest-English', 'ab', 'en' ),
-                       array( 'FallbackLanguageTest-None', 'ab', false ),
-               );
-       }
-
-       /**
-        * There's a fallback case where the message key is given as fully qualified -- this
-        * should ignore the passed $lang and use the language from the key
-        *
-        * @dataProvider provideMessagesForFullKeys
-        */
-       function testFullKeyBehaviour( $message, $lang, $expectedContent ) {
-               $result = MessageCache::singleton()->get( $message, true, $lang, true );
-               $this->assertEquals( $expectedContent, $result, "Full key message fallback failed." );
-       }
-
-       public static function provideMessagesForFullKeys() {
-               return array(
-                       array( 'MessageCacheTest-FullKeyTest/ru', 'ru', 'ru' ),
-                       array( 'MessageCacheTest-FullKeyTest/ru', 'ab', 'ru' ),
-                       array( 'MessageCacheTest-FullKeyTest/ru/foo', 'ru', false ),
-               );
-       }
-
-}
index ac8dcef..67d4fde 100644 (file)
@@ -257,8 +257,7 @@ class ContentHandlerTest extends MediaWikiTestCase {
                } catch ( MWException $ex ) {
                        if ( !$shouldFail ) {
                                $this->fail( "ContentHandler::makeContent failed unexpectedly: " . $ex->getMessage() );
-                       }
-                       else {
+                       } else {
                                // dummy, so we don't get the "test did not perform any assertions" message.
                                $this->assertTrue( true );
                        }
index cacaaa3..39611cb 100644 (file)
@@ -36,7 +36,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        }
                } else {
                        $this->singleBackend = new FSFileBackend( array(
-                               'name'        => 'localtesting',
+                               'name' => 'localtesting',
                                'lockManager' => 'fsLockManager',
                                #'parallelize' => 'implicit',
                                'containerPaths' => array(
@@ -45,23 +45,23 @@ class FileBackendTest extends MediaWikiTestCase {
                        ) );
                }
                $this->multiBackend = new FileBackendMultiWrite( array(
-                       'name'        => 'localtesting',
+                       'name' => 'localtesting',
                        'lockManager' => 'fsLockManager',
                        'parallelize' => 'implicit',
-                       'backends'    => array(
+                       'backends' => array(
                                array(
-                                       'name'          => 'localmultitesting1',
-                                       'class'         => 'FSFileBackend',
-                                       'lockManager'   => 'nullLockManager',
+                                       'name' => 'localmultitesting1',
+                                       'class' => 'FSFileBackend',
+                                       'lockManager' => 'nullLockManager',
                                        'containerPaths' => array(
                                                'unittest-cont1' => "{$tmpPrefix}-localtestingmulti1-cont1",
                                                'unittest-cont2' => "{$tmpPrefix}-localtestingmulti1-cont2" ),
                                        'isMultiMaster' => false
                                ),
                                array(
-                                       'name'          => 'localmultitesting2',
-                                       'class'         => 'FSFileBackend',
-                                       'lockManager'   => 'nullLockManager',
+                                       'name' => 'localmultitesting2',
+                                       'class' => 'FSFileBackend',
+                                       'lockManager' => 'nullLockManager',
                                        'containerPaths' => array(
                                                'unittest-cont1' => "{$tmpPrefix}-localtestingmulti2-cont1",
                                                'unittest-cont2' => "{$tmpPrefix}-localtestingmulti2-cont2" ),
@@ -817,32 +817,66 @@ class FileBackendTest extends MediaWikiTestCase {
                        "$base/unittest-cont1/e/fileB.a",
                        "$base/unittest-cont1/e/fileC.a"
                );
-               $ops = array();
+               $createOps = array();
                $purgeOps = array();
                foreach ( $files as $path ) {
                        $status = $this->prepare( array( 'dir' => dirname( $path ) ) );
                        $this->assertGoodStatus( $status,
                                "Preparing $path succeeded without warnings ($backendName)." );
-                       $ops[] = array( 'op' => 'create', 'dst' => $path, 'content' => mt_rand(0, 50000) );
+                       $createOps[] = array( 'op' => 'create', 'dst' => $path, 'content' => mt_rand( 0, 50000 ) );
+                       $copyOps[] = array( 'op' => 'copy', 'src' => $path, 'dst' => "$path-2" );
+                       $moveOps[] = array( 'op' => 'move', 'src' => "$path-2", 'dst' => "$path-3" );
                        $purgeOps[] = array( 'op' => 'delete', 'src' => $path );
+                       $purgeOps[] = array( 'op' => 'delete', 'src' => "$path-3" );
                }
                $purgeOps[] = array( 'op' => 'null' );
-               $status = $this->backend->doQuickOperations( $ops );
-               $this->assertGoodStatus( $status,
-                       "Creation of source files succeeded ($backendName)." );
 
+               $this->assertGoodStatus(
+                       $this->backend->doQuickOperations( $createOps ),
+                       "Creation of source files succeeded ($backendName)." );
                foreach ( $files as $file ) {
                        $this->assertTrue( $this->backend->fileExists( array( 'src' => $file ) ),
                                "File $file exists." );
                }
 
-               $status = $this->backend->doQuickOperations( $purgeOps );
-               $this->assertGoodStatus( $status,
-                       "Quick deletion of source files succeeded ($backendName)." );
+               $this->assertGoodStatus(
+                       $this->backend->doQuickOperations( $copyOps ),
+                       "Quick copy of source files succeeded ($backendName)." );
+               foreach ( $files as $file ) {
+                       $this->assertTrue( $this->backend->fileExists( array( 'src' => "$file-2" ) ),
+                               "File $file-2 exists." );
+               }
 
+               $this->assertGoodStatus(
+                       $this->backend->doQuickOperations( $moveOps ),
+                       "Quick move of source files succeeded ($backendName)." );
+               foreach ( $files as $file ) {
+                       $this->assertTrue( $this->backend->fileExists( array( 'src' => "$file-3" ) ),
+                               "File $file-3 move in." );
+                       $this->assertFalse( $this->backend->fileExists( array( 'src' => "$file-2" ) ),
+                               "File $file-2 moved away." );
+               }
+
+               $this->assertGoodStatus(
+                       $this->backend->quickCopy( array( 'src' => $files[0], 'dst' => $files[0] ) ),
+                       "Copy of file {$files[0]} over itself succeeded ($backendName)." );
+               $this->assertTrue( $this->backend->fileExists( array( 'src' => $files[0] ) ),
+                       "File {$files[0]} still exists." );
+
+               $this->assertGoodStatus(
+                       $this->backend->quickMove( array( 'src' => $files[0], 'dst' => $files[0] ) ),
+                       "Move of file {$files[0]} over itself succeeded ($backendName)." );
+               $this->assertTrue( $this->backend->fileExists( array( 'src' => $files[0] ) ),
+                       "File {$files[0]} still exists." );
+
+               $this->assertGoodStatus(
+                       $this->backend->doQuickOperations( $purgeOps ),
+                       "Quick deletion of source files succeeded ($backendName)." );
                foreach ( $files as $file ) {
                        $this->assertFalse( $this->backend->fileExists( array( 'src' => $file ) ),
                                "File $file purged." );
+                       $this->assertFalse( $this->backend->fileExists( array( 'src' => "$file-3" ) ),
+                               "File $file-3 purged." );
                }
        }
 
@@ -873,8 +907,8 @@ class FileBackendTest extends MediaWikiTestCase {
                foreach ( $srcs as $i => $source ) {
                        $this->prepare( array( 'dir' => dirname( $source ) ) );
                        $ops[] = array(
-                               'op'      => 'create', // operation
-                               'dst'     => $source, // source
+                               'op' => 'create', // operation
+                               'dst' => $source, // source
                                'content' => $srcsContent[$i]
                        );
                        $expContent .= $srcsContent[$i];
@@ -1834,7 +1868,9 @@ class FileBackendTest extends MediaWikiTestCase {
                }
 
                $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/not/exists" ) );
-               foreach ( $iter as $iter ) {} // no errors
+               foreach ( $iter as $iter ) {
+                       // no errors
+               }
        }
 
        public function testGetDirectoryList() {
@@ -2031,7 +2067,10 @@ class FileBackendTest extends MediaWikiTestCase {
                }
 
                $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/not/exists" ) );
-               foreach ( $iter as $file ) {} // no errors
+               foreach ( $iter as $file ) {
+                       // no errors
+               }
+
                $items = is_array( $iter ) ? $iter : iterator_to_array( $iter );
                $this->assertEquals( array(), $items, "Directory listing is empty." );
 
@@ -2071,7 +2110,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        "subdir2/subdir/sub/120-px-file.txt",
                );
 
-               for ( $i=0; $i<25; $i++ ) {
+               for ( $i = 0; $i < 25; $i++ ) {
                        $status = $this->backend->lockFiles( $paths, LockManager::LOCK_EX );
                        $this->assertEquals( print_r( array(), true ), print_r( $status->errors, true ),
                                "Locking of files succeeded ($backendName) ($i)." );
index 7d4b2bb..a905f06 100644 (file)
@@ -43,7 +43,7 @@ class JobQueueTest extends MediaWikiTestCase {
                foreach ( $variants as $q => $settings ) {
                        try {
                                $this->$q = JobQueue::factory( $settings + $baseConfig );
-                               if ( ! ( $this->$q instanceof JobQueueDB ) ) {
+                               if ( !( $this->$q instanceof JobQueueDB ) ) {
                                        $this->$q->setTestingPrefix( 'unittests-' . wfRandomString( 32 ) );
                                }
                        } catch ( MWException $e ) {}; // unsupported? (@TODO: what if it was another error?)
@@ -52,10 +52,12 @@ class JobQueueTest extends MediaWikiTestCase {
 
        protected function tearDown() {
                parent::tearDown();
-               foreach ( array(
-                       'queueRand', 'queueRandTTL', 'queueTimestamp', 'queueTimestampTTL',
-                       'queueFifo', 'queueFifoTTL'
-               ) as $q ) {
+               foreach (
+                       array(
+                               'queueRand', 'queueRandTTL', 'queueTimestamp', 'queueTimestampTTL',
+                               'queueFifo', 'queueFifoTTL'
+                       ) as $q
+               ) {
                        if ( $this->$q ) {
                                do {
                                        $job = $this->$q->pop();
@@ -153,15 +155,16 @@ class JobQueueTest extends MediaWikiTestCase {
                        $this->markTestSkipped( $desc );
                }
 
-
                $this->assertTrue( $queue->isEmpty(), "Queue is empty ($desc)" );
 
                $queue->flushCaches();
                $this->assertEquals( 0, $queue->getSize(), "Queue is empty ($desc)" );
                $this->assertEquals( 0, $queue->getAcquiredCount(), "Queue is empty ($desc)" );
 
-               $this->assertTrue( $queue->batchPush(
-                               array( $this->newDedupedJob(), $this->newDedupedJob(), $this->newDedupedJob() ) ),
+               $this->assertTrue(
+                       $queue->batchPush(
+                               array( $this->newDedupedJob(), $this->newDedupedJob(), $this->newDedupedJob() )
+                       ),
                        "Push worked ($desc)" );
 
                $this->assertFalse( $queue->isEmpty(), "Queue is not empty ($desc)" );
@@ -170,9 +173,12 @@ class JobQueueTest extends MediaWikiTestCase {
                $this->assertEquals( 1, $queue->getSize(), "Queue size is correct ($desc)" );
                $this->assertEquals( 0, $queue->getAcquiredCount(), "No jobs active ($desc)" );
 
-               $this->assertTrue( $queue->batchPush(
-                               array( $this->newDedupedJob(), $this->newDedupedJob(), $this->newDedupedJob() ) ),
-                       "Push worked ($desc)" );
+               $this->assertTrue(
+                       $queue->batchPush(
+                               array( $this->newDedupedJob(), $this->newDedupedJob(), $this->newDedupedJob() )
+                       ),
+                       "Push worked ($desc)"
+               );
 
                $this->assertFalse( $queue->isEmpty(), "Queue is not empty ($desc)" );
 
@@ -206,7 +212,6 @@ class JobQueueTest extends MediaWikiTestCase {
                        $this->markTestSkipped( $desc );
                }
 
-
                $this->assertTrue( $queue->isEmpty(), "Queue is empty ($desc)" );
 
                $queue->flushCaches();
@@ -260,7 +265,6 @@ class JobQueueTest extends MediaWikiTestCase {
                        $this->markTestSkipped( $desc );
                }
 
-
                $this->assertTrue( $queue->isEmpty(), "Queue is empty ($desc)" );
 
                $queue->flushCaches();
diff --git a/tests/phpunit/includes/json/FormatJsonTest.php b/tests/phpunit/includes/json/FormatJsonTest.php
new file mode 100644 (file)
index 0000000..9e25e18
--- /dev/null
@@ -0,0 +1,161 @@
+<?php
+
+class FormatJsonTest extends MediaWikiTestCase {
+
+       public function testEncoderPrettyPrinting() {
+               $obj = array(
+                       'emptyObject' => new stdClass,
+                       'emptyArray' => array(),
+                       'string' => 'foobar',
+                       'filledArray' => array(
+                               array(
+                                       123,
+                                       456,
+                               ),
+                               '"7":["8",{"9":"10"}]',
+                       ),
+               );
+
+               // 4 space indent, no trailing whitespace, no trailing linefeed
+               $json = '{
+    "emptyObject": {
+
+    },
+    "emptyArray": [
+
+    ],
+    "string": "foobar",
+    "filledArray": [
+        [
+            123,
+            456
+        ],
+        "\"7\":[\"8\",{\"9\":\"10\"}]"
+    ]
+}';
+
+               $json = str_replace( "\r", '', $json ); // Windows compat
+               $this->assertSame( $json, FormatJson::encode( $obj, true ) );
+       }
+
+       public static function provideEncodeDefault() {
+               return self::getEncodeTestCases( array() );
+       }
+
+       /**
+        * @dataProvider provideEncodeDefault
+        */
+       public function testEncodeDefault( $from, $to ) {
+               $this->assertSame( $to, FormatJson::encode( $from ) );
+       }
+
+       public static function provideEncodeUtf8() {
+               return self::getEncodeTestCases( array( 'unicode' ) );
+       }
+
+       /**
+        * @dataProvider provideEncodeUtf8
+        */
+       public function testEncodeUtf8( $from, $to ) {
+               $this->assertSame( $to, FormatJson::encode( $from, false, FormatJson::UTF8_OK ) );
+       }
+
+       public static function provideEncodeXmlMeta() {
+               return self::getEncodeTestCases( array( 'xmlmeta' ) );
+       }
+
+       /**
+        * @dataProvider provideEncodeXmlMeta
+        */
+       public function testEncodeXmlMeta( $from, $to ) {
+               $this->assertSame( $to, FormatJson::encode( $from, false, FormatJson::XMLMETA_OK ) );
+       }
+
+       public static function provideEncodeAllOk() {
+               return self::getEncodeTestCases( array( 'unicode', 'xmlmeta' ) );
+       }
+
+       /**
+        * @dataProvider provideEncodeAllOk
+        */
+       public function testEncodeAllOk( $from, $to ) {
+               $this->assertSame( $to, FormatJson::encode( $from, false, FormatJson::ALL_OK ) );
+       }
+
+       public function testEncodePhpBug46944() {
+               $this->assertNotEquals(
+                       '\ud840\udc00',
+                       strtolower( FormatJson::encode( "\xf0\xa0\x80\x80" ) ),
+                       'Test encoding an broken json_encode character (U+20000)'
+               );
+
+       }
+
+       public function testDecodeReturnType() {
+               $this->assertInternalType(
+                       'object',
+                       FormatJson::decode( '{"Name": "Cheeso", "Rank": 7}' ),
+                       'Default to object'
+               );
+
+               $this->assertInternalType(
+                       'array',
+                       FormatJson::decode( '{"Name": "Cheeso", "Rank": 7}', true ),
+                       'Optional array'
+               );
+       }
+
+       /**
+        * Generate a set of test cases for a particular combination of encoder options.
+        *
+        * @param array $unescapedGroups List of character groups to leave unescaped
+        * @return array: Arrays of unencoded strings and corresponding encoded strings
+        */
+       private static function getEncodeTestCases( array $unescapedGroups ) {
+               $groups = array(
+                       'always' => array(
+                               // Forward slash (always unescaped)
+                               '/' => '/',
+
+                               // Control characters
+                               "\0" => '\u0000',
+                               "\x08" => '\b',
+                               "\t" => '\t',
+                               "\n" => '\n',
+                               "\r" => '\r',
+                               "\f" => '\f',
+                               "\x1f" => '\u001f', // representative example
+
+                               // Double quotes
+                               '"' => '\"',
+
+                               // Backslashes
+                               '\\' => '\\\\',
+                               '\\\\' => '\\\\\\\\',
+                               '\\u00e9' => '\\\u00e9', // security check for Unicode unescaping
+
+                               // Line terminators
+                               "\xe2\x80\xa8" => '\u2028',
+                               "\xe2\x80\xa9" => '\u2029',
+                       ),
+                       'unicode' => array(
+                               "\xc3\xa9" => '\u00e9',
+                               "\xf0\x9d\x92\x9e" => '\ud835\udc9e', // U+1D49E, outside the BMP
+                       ),
+                       'xmlmeta' => array(
+                               '<' => '\u003C', // JSON_HEX_TAG uses uppercase hex digits
+                               '>' => '\u003E',
+                               '&' => '\u0026',
+                       ),
+               );
+
+               $cases = array();
+               foreach ( $groups as $name => $rules ) {
+                       $leaveUnescaped = in_array( $name, $unescapedGroups );
+                       foreach ( $rules as $from => $to ) {
+                               $cases[] = array( $from, '"' . ( $leaveUnescaped ? $from : $to ) . '"' );
+                       }
+               }
+               return $cases;
+       }
+}
diff --git a/tests/phpunit/includes/json/ServicesJsonTest.php b/tests/phpunit/includes/json/ServicesJsonTest.php
deleted file mode 100644 (file)
index 5051830..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-/* 
- * Test cases for our Services_Json library. Requires PHP json support as well,
- * so we can compare output
- */
-class ServicesJsonTest extends MediaWikiTestCase {
-       /**
-        * Test to make sure core json_encode() and our Services_Json()->encode()
-        * produce the same output
-        *
-        * @dataProvider provideValuesToEncode
-        */
-       public function testJsonEncode( $input, $desc ) {
-               if ( !function_exists( 'json_encode' ) ) {
-                       $this->markTestIncomplete( 'No PHP json support, unable to test' );
-                       return;
-               } elseif ( strtolower( json_encode( "\xf0\xa0\x80\x80" ) ) != '"\ud840\udc00"' ) {
-                       $this->markTestIncomplete( 'Have buggy PHP json support, unable to test' );
-                       return;
-               } else {
-                       $jsonObj = new Services_JSON();
-                       $this->assertEquals(
-                               $jsonObj->encode( $input ),
-                               json_encode( $input ),
-                               $desc
-                       );
-               }
-       }
-
-       /**
-        * Test to make sure core json_decode() and our Services_Json()->decode()
-        * produce the same output
-        *
-        * @dataProvider provideValuesToDecode
-        */
-       public function testJsonDecode( $input, $desc ) {
-               if ( !function_exists( 'json_decode' ) ) {
-                       $this->markTestIncomplete( 'No PHP json support, unable to test' );
-                       return;
-               } else {
-                       $jsonObj = new Services_JSON();
-                       $this->assertEquals(
-                               $jsonObj->decode( $input ),
-                               json_decode( $input ),
-                               $desc
-                       );
-               }
-       }
-
-       public static function provideValuesToEncode() {
-               $obj = new stdClass();
-               $obj->property = 'value';
-               $obj->property2 = null;
-               $obj->property3 = 1.234;
-               return array(
-                       array( 1, 'basic integer' ),
-                       array( -1, 'negative integer' ),
-                       array( 1.1, 'basic float' ),
-                       array( true, 'basic bool true' ),
-                       array( false, 'basic bool false' ),
-                       array( 'some string', 'basic string test' ),
-                       array( "some string\nwith newline", 'newline string test' ),
-                       array( '♥ü', 'unicode string test' ),
-                       array( array( 'some', 'string', 'values' ), 'basic array of strings' ),
-                       array( array( 'key1' => 'val1', 'key2' => 'val2' ), 'array with string keys' ),
-                       array( array( 1 => 'val1', 3 => 'val2', '2' => 'val3' ), 'out of order numbered array test' ),
-                       array( array(), 'empty array test' ),
-                       array( $obj, 'basic object test' ),
-                       array( new stdClass, 'empty object test' ),
-                       array( null, 'null test' ),
-               );
-       }
-
-       public static function provideValuesToDecode() {
-               return array(
-                       array( '1', 'basic integer' ),
-                       array( '-1', 'negative integer' ),
-                       array( '1.1', 'basic float' ),
-                       array( '1.1e1', 'scientific float' ),
-                       array( 'true', 'basic bool true' ),
-                       array( 'false', 'basic bool false' ),
-                       array( '"some string"', 'basic string test' ),
-                       array( '"some string\nwith newline"', 'newline string test' ),
-                       array( '"♥ü"', 'unicode character string test' ),
-                       array( '"\u2665"', 'unicode \\u string test' ),
-                       array( '["some","string","values"]', 'basic array of strings' ),
-                       array( '[]', 'empty array test' ),
-                       array( '{"key":"value"}', 'Basic key => value test' ),
-                       array( '{}', 'empty object test' ),
-                       array( 'null', 'null test' ),
-               );
-       }
-}
index 99ec05d..68efd86 100644 (file)
  *
  * @ingroup UtfNormal
  * @group Large
+ *
+ * We ignore code coverage for this test suite until they are rewritten
+ * to use data providers (bug 46561).
+ * @codeCoverageIgnore
  */
 class CleanUpTest extends MediaWikiTestCase {
        /** @todo document */
index 5732beb..77311b9 100644 (file)
@@ -187,6 +187,10 @@ class NewParserTest extends MediaWikiTestCase {
                # We will upload the actual files later. Note that if anything causes LocalFile::load()
                # to be triggered before then, it will break via maybeUpgrade() setting the fileExists
                # member to false and storing it in cache.
+               # note that the size/width/height/bits/etc of the file
+               # are actually set by inspecting the file itself; the arguments
+               # to recordUpload2 have no effect.  That said, we try to make things
+               # match up so it is less confusing to readers of the code & tests.
                $image = wfLocalFile( Title::makeTitle( NS_FILE, 'Foobar.jpg' ) );
                if ( !$this->db->selectField( 'image', '1', array( 'img_name' => $image->getName() ) ) ) {
                        $image->recordUpload2(
@@ -194,19 +198,39 @@ class NewParserTest extends MediaWikiTestCase {
                                'Upload of some lame file',
                                'Some lame file',
                                array(
-                                       'size' => 12345,
+                                       'size' => 7881,
                                        'width' => 1941,
                                        'height' => 220,
-                                       'bits' => 24,
+                                       'bits' => 8,
                                        'media_type' => MEDIATYPE_BITMAP,
                                        'mime' => 'image/jpeg',
                                        'metadata' => serialize( array() ),
-                                       'sha1' => wfBaseConvert( '', 16, 36, 31 ),
+                                       'sha1' => wfBaseConvert( '1', 16, 36, 31 ),
                                        'fileExists' => true ),
                                $this->db->timestamp( '20010115123500' ), $user
                        );
                }
 
+               $image = wfLocalFile( Title::makeTitle( NS_FILE, 'Thumb.png' ) );
+               if ( !$this->db->selectField( 'image', '1', array( 'img_name' => $image->getName() ) ) ) {
+                       $image->recordUpload2(
+                               '', // archive name
+                               'Upload of some lame thumbnail',
+                               'Some lame thumbnail',
+                               array(
+                                       'size' => 22589,
+                                       'width' => 135,
+                                       'height' => 135,
+                                       'bits' => 8,
+                                       'media_type' => MEDIATYPE_BITMAP,
+                                       'mime' => 'image/png',
+                                       'metadata' => serialize( array() ),
+                                       'sha1' => wfBaseConvert( '2', 16, 36, 31 ),
+                                       'fileExists' => true ),
+                               $this->db->timestamp( '20130225203040' ), $user
+                       );
+               }
+
                # This image will be blacklisted in [[MediaWiki:Bad image list]]
                $image = wfLocalFile( Title::makeTitle( NS_FILE, 'Bad.jpg' ) );
                if ( !$this->db->selectField( 'image', '1', array( 'img_name' => $image->getName() ) ) ) {
@@ -222,7 +246,7 @@ class NewParserTest extends MediaWikiTestCase {
                                        'media_type' => MEDIATYPE_BITMAP,
                                        'mime' => 'image/jpeg',
                                        'metadata' => serialize( array() ),
-                                       'sha1' => wfBaseConvert( '', 16, 36, 31 ),
+                                       'sha1' => wfBaseConvert( '3', 16, 36, 31 ),
                                        'fileExists' => true ),
                                $this->db->timestamp( '20010115123500' ), $user
                        );
@@ -429,6 +453,10 @@ class NewParserTest extends MediaWikiTestCase {
                $backend->store( array(
                        'src' => "$IP/skins/monobook/headbg.jpg", 'dst' => "$base/local-public/3/3a/Foobar.jpg"
                ) );
+               $backend->prepare( array( 'dir' => "$base/local-public/e/ea" ) );
+               $backend->store( array(
+                       'src' => "$IP/skins/monobook/wiki.png", 'dst' => "$base/local-public/e/ea/Thumb.png"
+               ) );
                $backend->prepare( array( 'dir' => "$base/local-public/0/09" ) );
                $backend->store( array(
                        'src' => "$IP/skins/monobook/headbg.jpg", 'dst' => "$base/local-public/0/09/Bad.jpg"
@@ -478,8 +506,9 @@ class NewParserTest extends MediaWikiTestCase {
                                "$base/local-thumb/3/3a/Foobar.jpg/70px-Foobar.jpg",
                                "$base/local-thumb/3/3a/Foobar.jpg/960px-Foobar.jpg",
 
+                               "$base/local-public/e/ea/Thumb.png",
+
                                "$base/local-public/0/09/Bad.jpg",
-                               "$base/local-thumb/0/09/Bad.jpg",
 
                                "$base/local-public/math/f/a/5/fa50b8b616463173474302ca3e63586b.png",
                        )
index 8bc908d..3fcc0e5 100644 (file)
@@ -34,7 +34,7 @@ class LanguageBe_taraskTest extends LanguageClassesTestCase {
 
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms =  array( 'one', 'few', 'many', 'other' );
+               $forms = array( 'one', 'few', 'many', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
@@ -44,7 +44,7 @@ class LanguageBe_taraskTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'one', 1 ),
                        array( 'many', 11 ),
                        array( 'one', 91 ),
@@ -61,7 +61,7 @@ class LanguageBe_taraskTest extends LanguageClassesTestCase {
 
        /** @dataProvider providePluralTwoForms */
        function testPluralTwoForms( $result, $value ) {
-               $forms =  array( 'one', 'other' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
index 06374d4..93ee0f0 100644 (file)
@@ -19,7 +19,7 @@ class LanguageCsTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'few', 2 ),
index a368371..562d6d9 100644 (file)
@@ -9,7 +9,7 @@
 class LanguageCuTest extends LanguageClassesTestCase {
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms =  array( 'one', 'two', 'few', 'other' );
+               $forms = array( 'one', 'two', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
@@ -19,7 +19,7 @@ class LanguageCuTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
index 221a498..435da4f 100644 (file)
@@ -19,7 +19,7 @@ class LanguageCyTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'zero', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
index da7cf12..73c4800 100644 (file)
@@ -19,7 +19,7 @@ class LanguageGaTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
index 4ff97ea..edf8e50 100644 (file)
@@ -14,7 +14,7 @@ class LanguageGdTest extends LanguageClassesTestCase {
        }
 
        public static function providerPlural() {
-               return array (
+               return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
@@ -33,15 +33,15 @@ class LanguageGdTest extends LanguageClassesTestCase {
        }
 
        public static function providerPluralExplicit() {
-               return array (
-                               array( 'other', 0 ),
-                               array( 'one', 1 ),
-                               array( 'two', 2 ),
-                               array( 'Form11', 11 ),
-                               array( 'Form12', 12 ),
-                               array( 'few', 3 ),
-                               array( 'few', 19 ),
-                               array( 'other', 200 ),
+               return array(
+                       array( 'other', 0 ),
+                       array( 'one', 1 ),
+                       array( 'two', 2 ),
+                       array( 'Form11', 11 ),
+                       array( 'Form12', 12 ),
+                       array( 'few', 3 ),
+                       array( 'few', 19 ),
+                       array( 'other', 200 ),
                );
        }
 }
index ef95c5f..71c0160 100644 (file)
@@ -11,7 +11,7 @@ class LanguageGvTest extends LanguageClassesTestCase {
        function testPlural( $result, $value ) {
                // This is not compatible with CLDR plural rules http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#gv
                // What does this mean? Is there a hard-coded override for gv somewhere? -Ryan Kaldari 2013-01-28
-               $forms =  array( 'Form 1', 'Form 2', 'Form 3', 'Form 4' );
+               $forms = array( 'Form 1', 'Form 2', 'Form 3', 'Form 4' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
@@ -22,7 +22,7 @@ class LanguageGvTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'Form 4', 0 ),
                        array( 'Form 2', 1 ),
                        array( 'Form 3', 2 ),
index 7849349..a8524bb 100644 (file)
@@ -43,7 +43,7 @@ class LanguageHeTest extends LanguageClassesTestCase {
        }
 
        public static function provideTwoPluralForms() {
-               return array (
+               return array(
                        array( 'other', 0 ), // Zero - plural
                        array( 'one', 1 ), // Singular
                        array( 'other', 2 ), // No third form provided, use it as plural
@@ -54,7 +54,7 @@ class LanguageHeTest extends LanguageClassesTestCase {
        }
 
        public static function provideThreePluralForms() {
-               return array (
+               return array(
                        array( 'other', 0 ), // Zero - plural
                        array( 'one', 1 ), // Singular
                        array( 'two', 2 ), // Dual
@@ -65,7 +65,7 @@ class LanguageHeTest extends LanguageClassesTestCase {
        }
 
        public static function provideFourPluralForms() {
-               return array (
+               return array(
                        array( 'other', 0 ), // Zero - plural
                        array( 'one', 1 ), // Singular
                        array( 'two', 2 ), // Dual
@@ -83,31 +83,31 @@ class LanguageHeTest extends LanguageClassesTestCase {
        // The comments in the beginning of the line help avoid RTL problems
        // with text editors.
        public static function provideGrammar() {
-               return array (
+               return array(
                        array(
-                               /* result */ 'וויקיפדיה',
-                               /* word   */ 'ויקיפדיה',
-                               /* case   */ 'תחילית',
+                               /* result */'וויקיפדיה',
+                               /* word   */'ויקיפדיה',
+                               /* case   */'תחילית',
                        ),
                        array(
-                               /* result */ 'וולפגנג',
-                               /* word   */ 'וולפגנג',
-                               /* case   */ 'prefixed',
+                               /* result */'וולפגנג',
+                               /* word   */'וולפגנג',
+                               /* case   */'prefixed',
                        ),
                        array(
-                               /* result */ 'קובץ',
-                               /* word   */ 'הקובץ',
-                               /* case   */ 'תחילית',
+                               /* result */'קובץ',
+                               /* word   */'הקובץ',
+                               /* case   */'תחילית',
                        ),
                        array(
-                               /* result */ '־Wikipedia',
-                               /* word   */ 'Wikipedia',
-                               /* case   */ 'תחילית',
+                               /* result */'־Wikipedia',
+                               /* word   */'Wikipedia',
+                               /* case   */'תחילית',
                        ),
                        array(
-                               /* result */ '־1995',
-                               /* word   */ '1995',
-                               /* case   */ 'תחילית',
+                               /* result */'־1995',
+                               /* word   */'1995',
+                               /* case   */'תחילית',
                        ),
                );
        }
index badfd11..7516bac 100644 (file)
@@ -19,7 +19,7 @@ class LanguageHrTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'many', 0 ),
                        array( 'one', 1 ),
                        array( 'few', 2 ),
index f520b7e..1abc375 100644 (file)
@@ -20,7 +20,7 @@ class LanguageHyTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 2 ),
index e863490..291c59b 100644 (file)
@@ -19,7 +19,7 @@ class LanguageKshTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'zero', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 2 ),
index 45f083b..e5a10b5 100644 (file)
@@ -9,7 +9,7 @@
 class LanguageLtTest extends LanguageClassesTestCase {
        /** @dataProvider providePlural */
        function testPlural( $result, $value ) {
-               $forms =  array( 'one', 'few', 'other' );
+               $forms = array( 'one', 'few', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
@@ -19,7 +19,7 @@ class LanguageLtTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'few', 2 ),
@@ -36,13 +36,13 @@ class LanguageLtTest extends LanguageClassesTestCase {
 
        /** @dataProvider providePluralTwoForms */
        function testOneFewPlural( $result, $value ) {
-               $forms =  array( 'one', 'other' );
+               $forms = array( 'one', 'other' );
                // This fails for 21, but not sure why.
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
        public static function providePluralTwoForms() {
-               return array (
+               return array(
                        array( 'one', 1 ),
                        array( 'other', 2 ),
                        array( 'other', 15 ),
index 3ff9589..368ac8c 100644 (file)
@@ -19,7 +19,7 @@ class LanguageLvTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'zero', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 11 ),
index 4ff2e3e..0ae533d 100644 (file)
@@ -19,7 +19,7 @@ class LanguageMkTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 11 ),
index 3ffa4e7..3b162b7 100644 (file)
@@ -19,11 +19,11 @@ class LanguageMoTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
-                       array( 'few',   0 ),
-                       array( 'one',   1 ),
-                       array( 'few',   2 ),
-                       array( 'few',   19 ),
+               return array(
+                       array( 'few', 0 ),
+                       array( 'one', 1 ),
+                       array( 'few', 2 ),
+                       array( 'few', 19 ),
                        array( 'other', 20 ),
                        array( 'other', 99 ),
                        array( 'other', 100 ),
index 350aa08..12af2e8 100644 (file)
@@ -19,13 +19,13 @@ class LanguageMtTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
-                       array( 'few',   0 ),
-                       array( 'one',   1 ),
-                       array( 'few',   2 ),
-                       array( 'few',   10 ),
-                       array( 'many',  11 ),
-                       array( 'many',  19 ),
+               return array(
+                       array( 'few', 0 ),
+                       array( 'one', 1 ),
+                       array( 'few', 2 ),
+                       array( 'few', 10 ),
+                       array( 'many', 11 ),
+                       array( 'many', 19 ),
                        array( 'other', 20 ),
                        array( 'other', 99 ),
                        array( 'other', 100 ),
@@ -46,23 +46,23 @@ class LanguageMtTest extends LanguageClassesTestCase {
        }
 
        public static function providerPluralTwoForms() {
-               return array (
-                       array( 'other',  0 ),
-                       array( 'one',   1 ),
-                       array( 'other',  2 ),
-                       array( 'other',  10 ),
-                       array( 'other',  11 ),
-                       array( 'other',  19 ),
-                       array( 'other',  20 ),
-                       array( 'other',  99 ),
-                       array( 'other',  100 ),
-                       array( 'other',  101 ),
-                       array( 'other',  102 ),
-                       array( 'other',  110 ),
-                       array( 'other',  111 ),
-                       array( 'other',  119 ),
-                       array( 'other',  120 ),
-                       array( 'other',  201 ),
+               return array(
+                       array( 'other', 0 ),
+                       array( 'one', 1 ),
+                       array( 'other', 2 ),
+                       array( 'other', 10 ),
+                       array( 'other', 11 ),
+                       array( 'other', 19 ),
+                       array( 'other', 20 ),
+                       array( 'other', 99 ),
+                       array( 'other', 100 ),
+                       array( 'other', 101 ),
+                       array( 'other', 102 ),
+                       array( 'other', 110 ),
+                       array( 'other', 111 ),
+                       array( 'other', 119 ),
+                       array( 'other', 120 ),
+                       array( 'other', 201 ),
                );
        }
 }
index 059de44..1d62567 100644 (file)
@@ -19,9 +19,9 @@ class LanguageNsoTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
-                       array( 'one',  0 ),
-                       array( 'one',  1 ),
+               return array(
+                       array( 'one', 0 ),
+                       array( 'one', 1 ),
                        array( 'other', 2 ),
                );
        }
index 837fc3a..9ec2a88 100644 (file)
@@ -19,23 +19,23 @@ class LanguagePlTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
-                       array( 'many',  0 ),
-                       array( 'one',   1 ),
-                       array( 'few',   2 ),
-                       array( 'few',   3 ),
-                       array( 'few',   4 ),
-                       array( 'many',  5 ),
-                       array( 'many',  9 ),
-                       array( 'many',  10 ),
-                       array( 'many',  11 ),
-                       array( 'many',  21 ),
-                       array( 'few',   22 ),
-                       array( 'few',   23 ),
-                       array( 'few',   24 ),
-                       array( 'many',  25 ),
-                       array( 'many',  200 ),
-                       array( 'many',  201 ),
+               return array(
+                       array( 'many', 0 ),
+                       array( 'one', 1 ),
+                       array( 'few', 2 ),
+                       array( 'few', 3 ),
+                       array( 'few', 4 ),
+                       array( 'many', 5 ),
+                       array( 'many', 9 ),
+                       array( 'many', 10 ),
+                       array( 'many', 11 ),
+                       array( 'many', 21 ),
+                       array( 'few', 22 ),
+                       array( 'few', 23 ),
+                       array( 'few', 24 ),
+                       array( 'many', 25 ),
+                       array( 'many', 200 ),
+                       array( 'many', 201 ),
                );
        }
 
@@ -46,23 +46,23 @@ class LanguagePlTest extends LanguageClassesTestCase {
        }
 
        public static function providerPluralTwoForms() {
-               return array (
-                       array( 'other',  0 ),
-                       array( 'one',   1 ),
-                       array( 'other',  2 ),
-                       array( 'other',  3 ),
-                       array( 'other',  4 ),
-                       array( 'other',  5 ),
-                       array( 'other',  9 ),
-                       array( 'other',  10 ),
-                       array( 'other',  11 ),
-                       array( 'other',  21 ),
-                       array( 'other',  22 ),
-                       array( 'other',  23 ),
-                       array( 'other',  24 ),
-                       array( 'other',  25 ),
-                       array( 'other',  200 ),
-                       array( 'other',  201 ),
+               return array(
+                       array( 'other', 0 ),
+                       array( 'one', 1 ),
+                       array( 'other', 2 ),
+                       array( 'other', 3 ),
+                       array( 'other', 4 ),
+                       array( 'other', 5 ),
+                       array( 'other', 9 ),
+                       array( 'other', 10 ),
+                       array( 'other', 11 ),
+                       array( 'other', 21 ),
+                       array( 'other', 22 ),
+                       array( 'other', 23 ),
+                       array( 'other', 24 ),
+                       array( 'other', 25 ),
+                       array( 'other', 200 ),
+                       array( 'other', 201 ),
                );
        }
 }
index 70324f5..919a744 100644 (file)
@@ -19,11 +19,11 @@ class LanguageRoTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
-                       array( 'few',   0 ),
-                       array( 'one',   1 ),
-                       array( 'few',   2 ),
-                       array( 'few',   19 ),
+               return array(
+                       array( 'few', 0 ),
+                       array( 'one', 1 ),
+                       array( 'few', 2 ),
+                       array( 'few', 19 ),
                        array( 'other', 20 ),
                        array( 'other', 99 ),
                        array( 'other', 100 ),
index ccfda20..bfd5074 100644 (file)
@@ -20,7 +20,7 @@ class LanguageRuTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'one', 1 ),
                        array( 'many', 11 ),
                        array( 'one', 91 ),
@@ -37,7 +37,7 @@ class LanguageRuTest extends LanguageClassesTestCase {
 
        /** @dataProvider providePluralTwoForms */
        function testPluralTwoForms( $result, $value ) {
-               $forms =  array( 'one', 'other' );
+               $forms = array( 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
index 9b9297c..70efa3b 100644 (file)
@@ -19,7 +19,7 @@ class LanguageSeTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
@@ -34,7 +34,7 @@ class LanguageSeTest extends LanguageClassesTestCase {
        }
 
        public static function providerPluralTwoForms() {
-               return array (
+               return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 2 ),
index 8dd18ea..9f34db5 100644 (file)
@@ -19,9 +19,9 @@ class LanguageShTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'many', 0 ),
-                       array( 'one',  1 ),
+                       array( 'one', 1 ),
                        array( 'few', 2 ),
                        array( 'few', 4 ),
                        array( 'many', 5 ),
index da09b56..3f32c66 100644 (file)
@@ -20,7 +20,7 @@ class LanguageSkTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'few', 2 ),
index 8329791..84c2e01 100644 (file)
@@ -20,12 +20,12 @@ class LanguageSlTest extends LanguageClassesTestCase {
        }
 
        public static function providerPlural() {
-               return array (
-                       array( 'other',  0 ),
-                       array( 'one',   1 ),
-                       array( 'two',   2 ),
-                       array( 'few',   3 ),
-                       array( 'few',   4 ),
+               return array(
+                       array( 'other', 0 ),
+                       array( 'one', 1 ),
+                       array( 'two', 2 ),
+                       array( 'few', 3 ),
+                       array( 'few', 4 ),
                        array( 'other', 5 ),
                        array( 'other', 99 ),
                        array( 'other', 100 ),
index 2eb8113..5819831 100644 (file)
@@ -19,7 +19,7 @@ class LanguageSmaTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'two', 2 ),
@@ -34,7 +34,7 @@ class LanguageSmaTest extends LanguageClassesTestCase {
        }
 
        public static function providerPluralTwoForms() {
-               return array (
+               return array(
                        array( 'other', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 2 ),
index 05e8875..11d00f3 100644 (file)
@@ -122,7 +122,7 @@ class LanguageSrTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'one', 1 ),
                        array( 'many', 11 ),
                        array( 'one', 91 ),
@@ -207,8 +207,8 @@ class LanguageSrTest extends LanguageClassesTestCase {
                return $this->getLang()
                        ->mConverter
                        ->convertTo(
-                       $text, $variant
-               );
+                               $text, $variant
+                       );
        }
 
        function convertToCyrillic( $text ) {
index b2cc4c3..36446c4 100644 (file)
@@ -19,9 +19,9 @@ class LanguageTiTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
-                       array( 'one',  0 ),
-                       array( 'one',  1 ),
+               return array(
+                       array( 'one', 0 ),
+                       array( 'one', 1 ),
                        array( 'other', 2 ),
                );
        }
index 0299653..422ad43 100644 (file)
@@ -19,9 +19,9 @@ class LanguageTlTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
-                       array( 'one',  0 ),
-                       array( 'one',  1 ),
+               return array(
+                       array( 'one', 0 ),
+                       array( 'one', 1 ),
                        array( 'other', 2 ),
                );
        }
index 66cd183..3180d30 100644 (file)
@@ -20,7 +20,7 @@ class LanguageUkTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
+               return array(
                        array( 'one', 1 ),
                        array( 'many', 11 ),
                        array( 'one', 91 ),
index 813222d..ffa3375 100644 (file)
@@ -19,9 +19,9 @@ class LanguageWaTest extends LanguageClassesTestCase {
        }
 
        public static function providePlural() {
-               return array (
-                       array( 'one',  0 ),
-                       array( 'one',  1 ),
+               return array(
+                       array( 'one', 0 ),
+                       array( 'one', 1 ),
                        array( 'other', 2 ),
                );
        }
index 2ec0744..2a1ebc3 100755 (executable)
@@ -50,8 +50,11 @@ class PHPUnitMaintClass extends Maintenance {
 
                // Bug 44192 Do not attempt to send a real e-mail
                Hooks::clear( 'AlternateUserMailer' );
-               Hooks::register( 'AlternateUserMailer',
-                       function() { return false; }
+               Hooks::register(
+                       'AlternateUserMailer',
+                       function () {
+                               return false;
+                       }
                );
        }
 
index 279932f..876876b 100644 (file)
@@ -116,13 +116,13 @@ class SideBarTest extends MediaWikiLangTestCase {
                                # ** Baz|Fred
                                array(
                                        'text' => 'Fred',
-                                       'href' => Title::newFromText( 'Baz' )->getLocalUrl(),
+                                       'href' => Title::newFromText( 'Baz' )->getLocalURL(),
                                        'id' => 'n-Fred',
                                        'active' => null,
                                ),
                                array(
                                        'text' => 'title-to-display',
-                                       'href' => Title::newFromText( 'page-to-go-to' )->getLocalUrl(),
+                                       'href' => Title::newFromText( 'page-to-go-to' )->getLocalURL(),
                                        'id' => 'n-title-to-display',
                                        'active' => null,
                                ),
index 28d38ab..3200e0b 100644 (file)
@@ -16,9 +16,10 @@ class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite {
        }
 
        protected function setUp() {
-               global $wgParser, $wgParserConf, $IP, $messageMemc, $wgMemc,
-                       $wgUser, $wgLang, $wgOut, $wgRequest, $wgStyleDirectory, $wgEnableParserCache,
-                       $wgNamespaceAliases, $wgNamespaceProtection, $parserMemc;
+               global $wgParser, $wgParserConf, $IP, $messageMemc, $wgMemc, $wgUser,
+                       $wgLang, $wgOut, $wgRequest, $wgStyleDirectory,
+                       $wgEnableParserCache, $wgNamespaceAliases, $wgNamespaceProtection,
+                       $parserMemc;
 
                $tmpGlobals = array();
 
index 7ff392a..f6eff77 100644 (file)
@@ -24,6 +24,7 @@
  */
 header( 'Content-Type: text/javascript; charset=utf-8' );
 
+require_once __DIR__ . '/../../../includes/json/FormatJson.php';
 require_once __DIR__ . '/../../../includes/Xml.php';
 
 $moduleImplementations = array(
@@ -50,7 +51,7 @@ if ( isset( $_GET['modules'] ) ) {
                if ( isset( $moduleImplementations[$module] ) ) {
                        $response .= $moduleImplementations[$module];
                } else {
-                       $response .= Xml::encodeJsCall( 'mw.loader.state', array( $module, 'missing' ) );
+                       $response .= Xml::encodeJsCall( 'mw.loader.state', array( $module, 'missing' ), true );
                }
        }
 }
index 4b8ee0d..a6f729b 100644 (file)
@@ -55,8 +55,9 @@
 
        /**
         * CompletenessTest
+        *
+        * Adds toggle checkbox to header
         */
-       // Adds toggle checkbox to header
        QUnit.config.urlConfig.push( {
                id: 'completenesstest',
                label: 'Run CompletenessTest',
@@ -95,8 +96,9 @@
 
        /**
         * Test environment recommended for all QUnit test modules
+        *
+        * Whether to log environment changes to the console
         */
-        // Whether to log environment changes to the console
        QUnit.config.urlConfig.push( 'mwlogenv' );
 
        /**
index ce03b69..5fe2394 100644 (file)
 
                        var start = opt.before.start,
                                end = opt.before.end;
-                       if ( window.opera ) {
-                               // Compensate for Opera's craziness converting \n to \r\n and counting that as two chars
-                               var newLinesBefore = opt.before.text.substring( 0, start ).split( '\n' ).length - 1,
-                                       newLinesInside = opt.before.text.substring( start, end ).split( '\n' ).length - 1;
-                               start += newLinesBefore;
-                               end += newLinesBefore + newLinesInside;
-                       }
 
                        var options = $.extend( {}, opt.replace ); // Clone opt.replace
                        options.selectionStart = start;