Merge "Fixes to RedisBagOStuff"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 3 Dec 2013 20:48:20 +0000 (20:48 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 3 Dec 2013 20:48:20 +0000 (20:48 +0000)
604 files changed:
.gitignore
RELEASE-NOTES-1.23
docs/hooks.txt
includes/Article.php
includes/AutoLoader.php
includes/Block.php
includes/ChangeTags.php
includes/Collation.php
includes/Cookie.php
includes/DefaultSettings.php
includes/EditPage.php
includes/Exception.php
includes/Export.php
includes/GitInfo.php
includes/GlobalFunctions.php
includes/HTMLForm.php
includes/Html.php
includes/HtmlFormatter.php
includes/HttpFunctions.php
includes/ImagePage.php
includes/LinkFilter.php
includes/Linker.php
includes/MimeMagic.php
includes/OutputPage.php
includes/Pager.php
includes/Preferences.php
includes/Revision.php
includes/Setup.php
includes/Skin.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/SpecialPageFactory.php
includes/Status.php
includes/StreamFile.php
includes/Title.php
includes/User.php
includes/UserMailer.php
includes/WebRequest.php
includes/Wiki.php
includes/Xml.php
includes/actions/HistoryAction.php
includes/api/ApiFeedContributions.php
includes/api/ApiMain.php
includes/api/ApiParse.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryFileRepoInfo.php
includes/api/ApiQueryRecentChanges.php
includes/cache/BacklinkCache.php
includes/cache/FileCacheBase.php
includes/cache/LinkCache.php
includes/cache/LocalisationCache.php
includes/cache/MapCacheLRU.php [new file with mode: 0644]
includes/cache/UserCache.php
includes/changes/EnhancedChangesList.php
includes/content/TextContentHandler.php
includes/db/Database.php
includes/db/DatabaseMysqlBase.php
includes/db/DatabaseOracle.php
includes/deferred/LinksUpdate.php
includes/diff/DifferenceEngine.php
includes/externalstore/ExternalStore.php
includes/externalstore/ExternalStoreDB.php
includes/externalstore/ExternalStoreMedium.php
includes/externalstore/ExternalStoreMwstore.php
includes/filebackend/FSFile.php
includes/filebackend/FSFileBackend.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendGroup.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/FileBackendStore.php
includes/filebackend/FileOp.php
includes/filebackend/FileOpBatch.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/TempFSFile.php
includes/filebackend/filejournal/DBFileJournal.php
includes/filebackend/filejournal/FileJournal.php
includes/filebackend/lockmanager/DBLockManager.php
includes/filebackend/lockmanager/FSLockManager.php
includes/filebackend/lockmanager/LSLockManager.php
includes/filebackend/lockmanager/LockManager.php
includes/filebackend/lockmanager/LockManagerGroup.php
includes/filebackend/lockmanager/MemcLockManager.php
includes/filebackend/lockmanager/QuorumLockManager.php
includes/filebackend/lockmanager/RedisLockManager.php
includes/filebackend/lockmanager/ScopedLock.php
includes/filerepo/FSRepo.php
includes/filerepo/FileRepo.php
includes/filerepo/FileRepoStatus.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/ForeignDBRepo.php
includes/filerepo/ForeignDBViaLBRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/NullRepo.php
includes/filerepo/RepoGroup.php
includes/filerepo/file/ArchivedFile.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignAPIFile.php
includes/filerepo/file/ForeignDBFile.php
includes/filerepo/file/LocalFile.php
includes/filerepo/file/OldLocalFile.php
includes/filerepo/file/UnregisteredLocalFile.php
includes/gallery/ImageGalleryBase.php
includes/gallery/NolinesImageGallery.php
includes/gallery/PackedImageGallery.php
includes/gallery/PackedOverlayImageGallery.php
includes/gallery/TraditionalImageGallery.php
includes/installer/Installer.i18n.php
includes/installer/Installer.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MysqlInstaller.php
includes/installer/MysqlUpdater.php
includes/installer/OracleInstaller.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerOutput.php
includes/interwiki/Interwiki.php
includes/job/Job.php
includes/job/JobQueue.php
includes/job/JobQueueDB.php
includes/job/JobQueueFederated.php
includes/job/JobQueueGroup.php
includes/job/JobQueueRedis.php
includes/job/aggregator/JobQueueAggregator.php
includes/job/aggregator/JobQueueAggregatorMemc.php
includes/job/aggregator/JobQueueAggregatorRedis.php
includes/job/jobs/AssembleUploadChunksJob.php
includes/job/jobs/DoubleRedirectJob.php
includes/job/jobs/DuplicateJob.php
includes/job/jobs/EmaillingJob.php
includes/job/jobs/EnotifNotifyJob.php
includes/job/jobs/HTMLCacheUpdateJob.php
includes/job/jobs/NullJob.php
includes/job/jobs/PublishStashedFileJob.php
includes/job/jobs/RefreshLinksJob.php
includes/job/jobs/RefreshLinksJob2.php [new file with mode: 0644]
includes/job/jobs/UploadFromUrlJob.php
includes/job/utils/BacklinkJobUtils.php [new file with mode: 0644]
includes/json/FormatJson.php
includes/libs/CSSMin.php
includes/logging/DeleteLogFormatter.php
includes/logging/LogEntry.php
includes/logging/LogEventsList.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/logging/LogPager.php
includes/logging/MoveLogFormatter.php
includes/logging/NewUsersLogFormatter.php
includes/logging/PatrolLog.php
includes/logging/PatrolLogFormatter.php
includes/logging/RightsLogFormatter.php
includes/media/Bitmap.php
includes/media/BitmapMetadataHandler.php
includes/media/Exif.php
includes/media/ExifBitmap.php
includes/media/FormatMetadata.php
includes/media/GIFMetadataExtractor.php
includes/media/IPTC.php
includes/media/ImageHandler.php
includes/media/MediaHandler.php
includes/media/SVGMetadataExtractor.php
includes/media/XCF.php
includes/media/XMP.php
includes/media/XMPInfo.php
includes/objectcache/MemcachedClient.php
includes/objectcache/SqlBagOStuff.php
includes/parser/CacheTime.php
includes/parser/CoreParserFunctions.php
includes/parser/LinkHolderArray.php
includes/parser/Parser.php
includes/parser/ParserOptions.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/profiler/Profiler.php
includes/profiler/ProfilerSimpleUDP.php
includes/rcfeed/JSONRCFeedFormatter.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderUserGroupsModule.php
includes/resourceloader/ResourceLoaderUserModule.php
includes/resourceloader/ResourceLoaderUserOptionsModule.php
includes/resourceloader/ResourceLoaderUserTokensModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/revisiondelete/RevisionDeleter.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialContributions.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialExpandTemplates.php [new file with mode: 0644]
includes/specials/SpecialImport.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialRandomInCategory.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialWatchlist.php
includes/templates/NoLocalSettings.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/upload/UploadBase.php
index.php
languages/Language.php
languages/LanguageConverter.php
languages/classes/LanguageBe_tarask.php
languages/classes/LanguageBs.php
languages/classes/LanguageDsb.php
languages/classes/LanguageGv.php
languages/classes/LanguageHr.php
languages/classes/LanguageHsb.php
languages/classes/LanguageKk_cyrl.php
languages/classes/LanguageKsh.php
languages/classes/LanguageOs.php
languages/classes/LanguageSr.php
languages/classes/LanguageSr_ec.php
languages/classes/LanguageSr_el.php
languages/classes/LanguageTr.php
languages/classes/LanguageTyv.php
languages/classes/LanguageUk.php
languages/messages/MessagesAce.php
languages/messages/MessagesAeb.php
languages/messages/MessagesAf.php
languages/messages/MessagesAk.php
languages/messages/MessagesAln.php
languages/messages/MessagesAm.php
languages/messages/MessagesAn.php
languages/messages/MessagesAng.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesArn.php
languages/messages/MessagesAry.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesAst.php
languages/messages/MessagesAvk.php
languages/messages/MessagesAz.php
languages/messages/MessagesAzb.php
languages/messages/MessagesBa.php
languages/messages/MessagesBar.php
languages/messages/MessagesBcc.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBho.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBn.php
languages/messages/MessagesBo.php
languages/messages/MessagesBpy.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesCa.php
languages/messages/MessagesCdo.php
languages/messages/MessagesCe.php
languages/messages/MessagesCeb.php
languages/messages/MessagesCh.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCps.php
languages/messages/MessagesCrh_cyrl.php
languages/messages/MessagesCrh_latn.php
languages/messages/MessagesCs.php
languages/messages/MessagesCsb.php
languages/messages/MessagesCu.php
languages/messages/MessagesCv.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesDtp.php
languages/messages/MessagesDv.php
languages/messages/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesExt.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFo.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesFrr.php
languages/messages/MessagesFur.php
languages/messages/MessagesFy.php
languages/messages/MessagesGa.php
languages/messages/MessagesGag.php
languages/messages/MessagesGan_hans.php
languages/messages/MessagesGan_hant.php
languages/messages/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesGom_latn.php
languages/messages/MessagesGrc.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesGv.php
languages/messages/MessagesHak.php
languages/messages/MessagesHaw.php
languages/messages/MessagesHe.php
languages/messages/MessagesHi.php
languages/messages/MessagesHif_latn.php
languages/messages/MessagesHil.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHt.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIe.php
languages/messages/MessagesIg.php
languages/messages/MessagesIlo.php
languages/messages/MessagesInh.php
languages/messages/MessagesIo.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesJam.php
languages/messages/MessagesJv.php
languages/messages/MessagesKa.php
languages/messages/MessagesKaa.php
languages/messages/MessagesKab.php
languages/messages/MessagesKbd_cyrl.php
languages/messages/MessagesKhw.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKk_arab.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKm.php
languages/messages/MessagesKn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKoi.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesKw.php
languages/messages/MessagesKy.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLez.php
languages/messages/MessagesLfn.php
languages/messages/MessagesLg.php
languages/messages/MessagesLi.php
languages/messages/MessagesLij.php
languages/messages/MessagesLiv.php
languages/messages/MessagesLmo.php
languages/messages/MessagesLo.php
languages/messages/MessagesLoz.php
languages/messages/MessagesLrc.php
languages/messages/MessagesLt.php
languages/messages/MessagesLtg.php
languages/messages/MessagesLus.php
languages/messages/MessagesLv.php
languages/messages/MessagesLzh.php
languages/messages/MessagesMai.php
languages/messages/MessagesMap_bms.php
languages/messages/MessagesMdf.php
languages/messages/MessagesMg.php
languages/messages/MessagesMhr.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMn.php
languages/messages/MessagesMr.php
languages/messages/MessagesMs.php
languages/messages/MessagesMt.php
languages/messages/MessagesMwl.php
languages/messages/MessagesMy.php
languages/messages/MessagesMyv.php
languages/messages/MessagesMzn.php
languages/messages/MessagesNah.php
languages/messages/MessagesNan.php
languages/messages/MessagesNap.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNe.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesNso.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPam.php
languages/messages/MessagesPcd.php
languages/messages/MessagesPdc.php
languages/messages/MessagesPfl.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPnb.php
languages/messages/MessagesPnt.php
languages/messages/MessagesPrg.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesQu.php
languages/messages/MessagesQug.php
languages/messages/MessagesRm.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesSa.php
languages/messages/MessagesSah.php
languages/messages/MessagesSat.php
languages/messages/MessagesSc.php
languages/messages/MessagesScn.php
languages/messages/MessagesSco.php
languages/messages/MessagesSd.php
languages/messages/MessagesSdc.php
languages/messages/MessagesSe.php
languages/messages/MessagesSgs.php
languages/messages/MessagesSh.php
languages/messages/MessagesShi.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSli.php
languages/messages/MessagesSo.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesSrn.php
languages/messages/MessagesStq.php
languages/messages/MessagesSu.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesSzl.php
languages/messages/MessagesTa.php
languages/messages/MessagesTcy.php
languages/messages/MessagesTe.php
languages/messages/MessagesTet.php
languages/messages/MessagesTg_cyrl.php
languages/messages/MessagesTg_latn.php
languages/messages/MessagesTh.php
languages/messages/MessagesTk.php
languages/messages/MessagesTl.php
languages/messages/MessagesTly.php
languages/messages/MessagesTo.php
languages/messages/MessagesTr.php
languages/messages/MessagesTru.php
languages/messages/MessagesTs.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesTt_latn.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUg_arab.php
languages/messages/MessagesUk.php
languages/messages/MessagesUr.php
languages/messages/MessagesUz.php
languages/messages/MessagesVec.php
languages/messages/MessagesVep.php
languages/messages/MessagesVi.php
languages/messages/MessagesVmf.php
languages/messages/MessagesVo.php
languages/messages/MessagesVot.php
languages/messages/MessagesVro.php
languages/messages/MessagesWa.php
languages/messages/MessagesWar.php
languages/messages/MessagesWo.php
languages/messages/MessagesWuu.php
languages/messages/MessagesXal.php
languages/messages/MessagesXmf.php
languages/messages/MessagesYi.php
languages/messages/MessagesYo.php
languages/messages/MessagesYue.php
languages/messages/MessagesZea.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
languages/messages/MessagesZh_tw.php
languages/utils/CLDRPluralRuleEvaluator.php
maintenance/Maintenance.php
maintenance/backupTextPass.inc
maintenance/cdb.php
maintenance/copyFileBackend.php
maintenance/dictionary/mediawiki.dic
maintenance/doMaintenance.php
maintenance/dumpTextPass.php
maintenance/dumpUploads.php
maintenance/findHooks.php
maintenance/fuzz-tester.php [deleted file]
maintenance/generateSitemap.php
maintenance/importTextFile.php
maintenance/language/StatOutputs.php
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/locking/LockServerDaemon.php
maintenance/mctest.php
maintenance/moveBatch.php
maintenance/nextJobDB.php
maintenance/parse.php
maintenance/pruneFileCache.php
maintenance/reassignEdits.php
maintenance/rebuildImages.php
maintenance/refreshImageMetadata.php
maintenance/runBatchedQuery.php
maintenance/showCacheStats.php
maintenance/storage/checkStorage.php
maintenance/storage/compressOld.php
maintenance/storage/fixBug20757.php
maintenance/storage/testCompression.php
maintenance/storage/trackBlobs.php
maintenance/update.php
maintenance/updateCollation.php
maintenance/userDupes.inc
maintenance/userOptions.inc
maintenance/userOptions.php
resources/Resources.php
resources/jquery/jquery.makeCollapsible.css
resources/jquery/jquery.makeCollapsible.js
resources/jquery/jquery.placeholder.js
resources/jquery/jquery.spinner.js
resources/mediawiki.page/mediawiki.page.image.pagination.js
resources/mediawiki.special/mediawiki.special.changeslist.css
resources/mediawiki.special/mediawiki.special.createAccount.js
resources/mediawiki.special/mediawiki.special.userLogin.css
resources/mediawiki.ui/components/default/buttons.less
resources/mediawiki.ui/mixins/forms.less
resources/mediawiki/mediawiki.Title.js
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.util.js
skins/.gitignore [new file with mode: 0644]
skins/CologneBlue.php
skins/MonoBook.php
skins/common/commonPrint.css
skins/common/shared.css
skins/modern/print.css
skins/vector/collapsibleTabs.js
tests/phpunit/MediaWikiPHPUnitCommand.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/data/cssmin/green.gif [new file with mode: 0644]
tests/phpunit/data/cssmin/large.png [new file with mode: 0644]
tests/phpunit/data/cssmin/red.gif [new file with mode: 0644]
tests/phpunit/data/xmp/gps.result.php
tests/phpunit/includes/DiffHistoryBlobTest.php
tests/phpunit/includes/EditPageTest.php
tests/phpunit/includes/ExceptionTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/LinkFilterTest.php [new file with mode: 0644]
tests/phpunit/includes/PathRouterTest.php
tests/phpunit/includes/PreferencesTest.php
tests/phpunit/includes/ResourceLoaderModuleTest.php [new file with mode: 0644]
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/RevisionStorageTest_ContentHandlerUseDB.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/SpecialPageTest.php
tests/phpunit/includes/StatusTest.php
tests/phpunit/includes/TitleMethodsTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/api/ApiOptionsTest.php
tests/phpunit/includes/api/ApiTestCaseUpload.php
tests/phpunit/includes/api/ApiUploadTest.php
tests/phpunit/includes/api/RandomImageGenerator.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/content/ContentHandlerTest.php
tests/phpunit/includes/content/WikitextContentHandlerTest.php
tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
tests/phpunit/includes/debug/MWDebugTest.php
tests/phpunit/includes/diff/DifferenceEngineTest.php
tests/phpunit/includes/jobqueue/RefreshLinksPartitionTest.php [new file with mode: 0644]
tests/phpunit/includes/libs/CSSMinTest.php
tests/phpunit/includes/media/ExifRotationTest.php
tests/phpunit/includes/media/ExifTest.php
tests/phpunit/includes/media/JpegMetadataExtractorTest.php
tests/phpunit/includes/media/JpegTest.php
tests/phpunit/includes/media/PNGMetadataExtractorTest.php
tests/phpunit/includes/media/SVGTest.php
tests/phpunit/includes/parser/TidyTest.php
tests/phpunit/includes/specials/SpecialSearchTest.php
tests/phpunit/includes/upload/UploadBaseTest.php
tests/phpunit/includes/utils/ZipDirectoryReaderTest.php
tests/phpunit/languages/LanguageBe_taraskTest.php
tests/phpunit/languages/LanguageSrTest.php
tests/phpunit/languages/LanguageTest.php
tests/phpunit/languages/LanguageUkTest.php
tests/phpunit/languages/LanguageUzTest.php
tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php
tests/phpunit/maintenance/DumpTestCase.php
tests/phpunit/maintenance/MaintenanceTest.php
tests/phpunit/maintenance/backupPrefetchTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/maintenance/backup_LogTest.php
tests/phpunit/maintenance/backup_PageTest.php
tests/phpunit/maintenance/fetchTextTest.php
tests/phpunit/skins/SideBarTest.php
tests/phpunit/structure/ResourcesTest.php
tests/qunit/QUnitTestResources.php
tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js
tests/qunit/suites/resources/jquery/jquery.placeholder.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/testHelpers.inc
thumb.php

index 9c0c3b6..76d220a 100644 (file)
@@ -62,3 +62,5 @@ Thumbs.db
 /favicon.ico
 /static*
 /tags
+/.htaccess
+/.htpasswd
index 47a6369..cf1678e 100644 (file)
@@ -49,20 +49,21 @@ production.
   when the email address is already confirmed. Also, consistently use
   "confirmed", rather than "authenticated", when messaging whether or not the
   user has confirmed an email address.
-* (bug 19415) action=render no longer shows section edit links. This affects
-  behavior of several other features where (bogus) section edit links will
-  disappear, such as file description pages loaded via $wgUseInstantCommons or
-  pages transcluded cross-wiki via $wgEnableScaryTranscluding.
 * (bug 56912) Show correct link color on cached result of Special:DeadendPages.
 * Classes TitleListDependency and TitleDependency have been removed, as they
   have been found unused in core and extensions for a long time.
 * (bug 57098) SpecialPasswordReset now obeys returnto parameter
+* (bug 37812) ResourceLoader will notice when a module's definition changes and
+  recompile it accordingly.
 
 === API changes in 1.23 ===
 * (bug 54884) action=parse&prop=categories now indicates hidden and missing
   categories.
 * action=query&meta=filerepoinfo now returns additional information for each
   repo.
+* EditPage::spamPage() was deprecated since 1.17 and has been removed.
+* action=parse&prop=languageshtml was deprecated in 1.18 and will be removed in
+  MediaWiki 1.24.
 
 === Languages updated in 1.23===
 
@@ -85,6 +86,8 @@ changes to languages because of Bugzilla reports.
 * The global variable $wgArticle has been removed after a lengthy deprecation.
 * The global functions addButton and insertTags (for mw.toolbar.addButton and
   mw.toolbar.insertTags) now emits mw.log.warn when accessed.
+* User::getPageRenderingHash() was deprecated since 1.17 and has been removed.
+* The ExpandTemplates extension has been moved into MediaWiki core.
 
 == Compatibility ==
 
index 30b9b72..15387f8 100644 (file)
@@ -898,7 +898,7 @@ $oldid: oldid (int) being viewed
 'DoEditSectionLink': Override the HTML generated for section edit links
 $skin: Skin object rendering the UI
 $title: Title object for the title being linked to (may not be the same as
-  $wgTitle, if the section is included from a template)
+  the page title, if the section is included from a template)
 $section: The designation of the section being pointed to, to be included in
   the link, like "&section=$section"
 $tooltip: The default tooltip.  Escape before using.
@@ -1369,7 +1369,7 @@ $context: IContextSource object
 &$pageInfo: Array of information
 
 'InitializeArticleMaybeRedirect': MediaWiki check to see if title is a redirect.
-$title: Title object ($wgTitle)
+$title: Title object for the current page
 $request: WebRequest
 $ignoreRedirect: boolean to skip redirect check
 $target: Title/string of redirect target
@@ -1624,7 +1624,7 @@ something completely different, after the basic globals have been set up, but
 before ordinary actions take place.
 $output: $wgOut
 $article: Article on which the action will be performed
-$title: $wgTitle
+$title: Title on which the action will be performed
 $user: $wgUser
 $request: $wgRequest
 $mediaWiki: The $mediawiki object
@@ -2248,7 +2248,7 @@ $special: the special page object
   name/URL parameters. Each key maps to an associative array with a 'msg'
   (message key) and a 'default' value.
 
-'SpecialPage_initList': Called when setting up SpecialPage::$mList, use this
+'SpecialPage_initList': Called when setting up SpecialPageFactory::$list, use this
 hook to remove a core special page.
 $list: list (array) of core special pages
 
index 854f7f1..821c32e 100644 (file)
@@ -1478,7 +1478,6 @@ class Article implements Page {
         */
        public function render() {
                $this->getContext()->getOutput()->setArticleBodyOnly( true );
-               $this->getContext()->getOutput()->enableSectionEditLinks( false );
                $this->view();
        }
 
@@ -1553,8 +1552,8 @@ class Article implements Page {
                }
 
                if ( $request->wasPosted() && $user->matchEditToken( $request->getVal( 'wpEditToken' ),
-                       array( 'delete', $this->getTitle()->getPrefixedText() ) ) )
-               {
+                       array( 'delete', $this->getTitle()->getPrefixedText() ) )
+               {
                        # Flag to hide all contents of the archived revisions
                        $suppress = $request->getVal( 'wpSuppress' ) && $user->isAllowed( 'suppressrevision' );
 
index 1770e04..6ee62e0 100644 (file)
@@ -390,6 +390,7 @@ $wgAutoloadLocalClasses = array(
        'HTMLFileCache' => 'includes/cache/HTMLFileCache.php',
        'LinkBatch' => 'includes/cache/LinkBatch.php',
        'LinkCache' => 'includes/cache/LinkCache.php',
+       'MapCacheLRU' => 'includes/cache/MapCacheLRU.php',
        'MessageCache' => 'includes/cache/MessageCache.php',
        'ObjectFileCache' => 'includes/cache/ObjectFileCache.php',
        'ProcessCacheLRU' => 'includes/cache/ProcessCacheLRU.php',
@@ -657,11 +658,14 @@ $wgAutoloadLocalClasses = array(
        'HTMLCacheUpdateJob' => 'includes/job/jobs/HTMLCacheUpdateJob.php',
        'NullJob' => 'includes/job/jobs/NullJob.php',
        'RefreshLinksJob' => 'includes/job/jobs/RefreshLinksJob.php',
-       'RefreshLinksJob2' => 'includes/job/jobs/RefreshLinksJob.php',
+       'RefreshLinksJob2' => 'includes/job/jobs/RefreshLinksJob2.php',
        'UploadFromUrlJob' => 'includes/job/jobs/UploadFromUrlJob.php',
        'AssembleUploadChunksJob' => 'includes/job/jobs/AssembleUploadChunksJob.php',
        'PublishStashedFileJob' => 'includes/job/jobs/PublishStashedFileJob.php',
 
+       # includes/job/utils
+       'BacklinkJobUtils' => 'includes/job/utils/BacklinkJobUtils.php',
+
        # includes/json
        'FormatJson' => 'includes/json/FormatJson.php',
 
@@ -958,6 +962,7 @@ $wgAutoloadLocalClasses = array(
        'SpecialContributions' => 'includes/specials/SpecialContributions.php',
        'SpecialEditWatchlist' => 'includes/specials/SpecialEditWatchlist.php',
        'SpecialEmailUser' => 'includes/specials/SpecialEmailuser.php',
+       'SpecialExpandTemplates' => 'includes/specials/SpecialExpandTemplates.php',
        'SpecialExport' => 'includes/specials/SpecialExport.php',
        'SpecialFilepath' => 'includes/specials/SpecialFilepath.php',
        'SpecialImport' => 'includes/specials/SpecialImport.php',
index 34b89e7..8673a3d 100644 (file)
@@ -63,8 +63,8 @@ class Block {
         */
        function __construct( $address = '', $user = 0, $by = 0, $reason = '',
                $timestamp = 0, $auto = 0, $expiry = '', $anonOnly = 0, $createAccount = 0, $enableAutoblock = 0,
-               $hideName = 0, $blockEmail = 0, $allowUsertalk = 0, $byText = '' )
-       {
+               $hideName = 0, $blockEmail = 0, $allowUsertalk = 0, $byText = ''
+       {
                if ( $timestamp === 0 ) {
                        $timestamp = wfTimestampNow();
                }
@@ -1083,7 +1083,6 @@ class Block {
                return null;
        }
 
-
        /**
         * Get all blocks that match any IP from an array of IP addresses
         *
index fd94bea..53f2955 100644 (file)
@@ -184,17 +184,19 @@ class ChangeTags {
 
                // Figure out which conditions can be done.
                if ( in_array( 'recentchanges', $tables ) ) {
-                       $join_cond = 'rc_id';
+                       $join_cond = 'ct_rc_id=rc_id';
                } elseif ( in_array( 'logging', $tables ) ) {
-                       $join_cond = 'log_id';
+                       $join_cond = 'ct_log_id=log_id';
                } elseif ( in_array( 'revision', $tables ) ) {
-                       $join_cond = 'rev_id';
+                       $join_cond = 'ct_rev_id=rev_id';
+               } elseif ( in_array( 'archive', $tables ) ) {
+                       $join_cond = 'ct_rev_id=ar_rev_id';
                } else {
                        throw new MWException( 'Unable to determine appropriate JOIN condition for tagging.' );
                }
 
                $fields['ts_tags'] = wfGetDB( DB_SLAVE )->buildGroupConcatField(
-                       ',', 'change_tag', 'ct_tag', "ct_$join_cond=$join_cond"
+                       ',', 'change_tag', 'ct_tag', $join_cond
                );
 
                if ( $wgUseTagFilter && $filter_tag ) {
@@ -202,7 +204,7 @@ class ChangeTags {
                        // Add an INNER JOIN on change_tag
 
                        $tables[] = 'change_tag';
-                       $join_conds['change_tag'] = array( 'INNER JOIN', "ct_$join_cond=$join_cond" );
+                       $join_conds['change_tag'] = array( 'INNER JOIN', $join_cond );
                        $conds['ct_tag'] = $filter_tag;
                }
        }
index b0252c7..ac2187c 100644 (file)
@@ -319,9 +319,7 @@ class IcuCollation extends Collation {
 
                // Check for CJK
                $firstChar = mb_substr( $string, 0, 1, 'UTF-8' );
-               if ( ord( $firstChar ) > 0x7f
-                       && self::isCjk( utf8ToCodepoint( $firstChar ) ) )
-               {
+               if ( ord( $firstChar ) > 0x7f && self::isCjk( utf8ToCodepoint( $firstChar ) ) ) {
                        return $firstChar;
                }
 
index ecf4667..e0a11a2 100644 (file)
@@ -131,8 +131,14 @@ class Cookie {
                        }
 
                        if ( substr( $domain, 0, 1 ) == '.'
-                               && substr_compare( $originDomain, $domain, -strlen( $domain ),
-                                                                  strlen( $domain ), true ) != 0 ) {
+                               && substr_compare(
+                                       $originDomain,
+                                       $domain,
+                                       -strlen( $domain ),
+                                       strlen( $domain ),
+                                       true
+                               ) != 0
+                       ) {
                                return false;
                        }
                }
@@ -167,8 +173,15 @@ class Cookie {
                if ( $domain == $this->domain
                        || ( strlen( $domain ) > strlen( $this->domain )
                                && substr( $this->domain, 0, 1 ) == '.'
-                               && substr_compare( $domain, $this->domain, -strlen( $this->domain ),
-                                                                       strlen( $this->domain ), true ) == 0 ) ) {
+                               && substr_compare(
+                                       $domain,
+                                       $this->domain,
+                                       -strlen( $this->domain ),
+                                       strlen( $this->domain ),
+                                       true
+                               ) == 0
+                       )
+               ) {
                        return true;
                }
 
index fbf838c..3102384 100644 (file)
@@ -1798,7 +1798,7 @@ $wgCompressRevisions = false;
  *
  * CAUTION: Access to database might lead to code execution
  */
-$wgExternalStores = false;
+$wgExternalStores = array();
 
 /**
  * An array of external MySQL servers.
@@ -2134,7 +2134,7 @@ $wgStyleVersion = '303';
 /**
  * This will cache static pages for non-logged-in users to reduce
  * database traffic on public sites.
- * Must set $wgShowIPinHeader = false
+ * Automatically sets $wgShowIPinHeader = false
  * ResourceLoader requests to default language and skins are cached
  * as well as single module requests.
  */
@@ -3811,13 +3811,16 @@ $wgNoFollowNsExceptions = array();
  * (or any subdomains) will not be set to rel="nofollow" regardless of the
  * value of $wgNoFollowLinks.  For instance:
  *
- * $wgNoFollowDomainExceptions = array( 'en.wikipedia.org', 'wiktionary.org' );
+ * $wgNoFollowDomainExceptions = array( 'en.wikipedia.org', 'wiktionary.org',
+ * 'mediawiki.org' );
  *
  * This would add rel="nofollow" to links to de.wikipedia.org, but not
  * en.wikipedia.org, wiktionary.org, en.wiktionary.org, us.en.wikipedia.org,
  * etc.
+ *
+ * Defaults to mediawiki.org for the links included in the software by default.
  */
-$wgNoFollowDomainExceptions = array();
+$wgNoFollowDomainExceptions = array( 'mediawiki.org' );
 
 /**
  * Allow DISPLAYTITLE to change title display
@@ -5037,7 +5040,7 @@ $wgProfilePerHost = false;
  * Host for UDP profiler.
  *
  * The host should be running a daemon which can be obtained from MediaWiki
- * Git at: 
+ * Git at:
  * http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile
  */
 $wgUDPProfilerHost = '127.0.0.1';
@@ -6054,7 +6057,7 @@ $wgHooks = array();
  */
 $wgJobClasses = array(
        'refreshLinks' => 'RefreshLinksJob',
-       'refreshLinks2' => 'RefreshLinksJob2',
+       'refreshLinks2' => 'RefreshLinksJob2', // b/c
        'htmlCacheUpdate' => 'HTMLCacheUpdateJob',
        'sendMail' => 'EmaillingJob',
        'enotifNotify' => 'EnotifNotifyJob',
@@ -6539,6 +6542,7 @@ $wgDebugAPI = false;
  * @todo Describe each of the variables, group them and add examples
  */
 $wgAPIModules = array();
+$wgAPIFormatModules = array();
 $wgAPIMetaModules = array();
 $wgAPIPropModules = array();
 $wgAPIListModules = array();
index be350cb..c0e7ed2 100644 (file)
@@ -457,9 +457,9 @@ class EditPage {
                # Ignore some permissions errors when a user is just previewing/viewing diffs
                $remove = array();
                foreach ( $permErrors as $error ) {
-                       if ( ( $this->preview || $this->diff ) &&
-                               ( $error[0] == 'blockedtext' || $error[0] == 'autoblockedtext' ) )
-                       {
+                       if ( ( $this->preview || $this->diff )
+                               && ( $error[0] == 'blockedtext' || $error[0] == 'autoblockedtext' )
+                       {
                                $remove[] = $error;
                        }
                }
@@ -567,10 +567,10 @@ class EditPage {
                } elseif ( ( $wgRequest->getVal( 'preload' ) !== null || $this->mTitle->exists() ) && $wgUser->getOption( 'previewonfirst' ) ) {
                        // Standard preference behavior
                        return true;
-               } elseif ( !$this->mTitle->exists() &&
-                       isset( $wgPreviewOnOpenNamespaces[$this->mTitle->getNamespace()] ) &&
-                       $wgPreviewOnOpenNamespaces[$this->mTitle->getNamespace()] )
-               {
+               } elseif ( !$this->mTitle->exists()
+                       && isset( $wgPreviewOnOpenNamespaces[$this->mTitle->getNamespace()] )
+                       && $wgPreviewOnOpenNamespaces[$this->mTitle->getNamespace()]
+               {
                        // Categories are special
                        return true;
                } else {
@@ -728,9 +728,9 @@ class EditPage {
                        $this->watchthis = $request->getCheck( 'wpWatchthis' );
 
                        # Don't force edit summaries when a user is editing their own user or talk page
-                       if ( ( $this->mTitle->mNamespace == NS_USER || $this->mTitle->mNamespace == NS_USER_TALK ) &&
-                               $this->mTitle->getText() == $wgUser->getName() )
-                       {
+                       if ( ( $this->mTitle->mNamespace == NS_USER || $this->mTitle->mNamespace == NS_USER_TALK )
+                               && $this->mTitle->getText() == $wgUser->getName()
+                       {
                                $this->allowBlankSummary = true;
                        } else {
                                $this->allowBlankSummary = $request->getBool( 'wpIgnoreBlankSummary' ) || !$wgUser->getOption( 'forceeditsummary' );
@@ -1792,9 +1792,9 @@ class EditPage {
                        // Show the edit conflict page for certain recognized errors from doEdit(),
                        // but don't show it for errors from extension hooks
                        $errors = $doEditStatus->getErrorsArray();
-                       if ( in_array( $errors[0][0], array( 'edit-gone-missing', 'edit-conflict',
-                               'edit-already-exists' ) ) )
-                       {
+                       if ( in_array( $errors[0][0],
+                                       array( 'edit-gone-missing', 'edit-conflict', 'edit-already-exists' ) )
+                       {
                                $this->isConflict = true;
                                // Destroys data doEdit() put in $status->value but who cares
                                $doEditStatus->value = self::AS_END;
@@ -3643,29 +3643,6 @@ HTML
                $wgOut->returnToMain( false, $this->mTitle );
        }
 
-       /**
-        * Produce the stock "your edit contains spam" page
-        *
-        * @param string|bool $match Text which triggered one or more filters
-        * @deprecated since 1.17 Use method spamPageWithContent() instead
-        */
-       static function spamPage( $match = false ) {
-               wfDeprecated( __METHOD__, '1.17' );
-
-               global $wgOut, $wgTitle;
-
-               $wgOut->prepareErrorPage( wfMessage( 'spamprotectiontitle' ) );
-
-               $wgOut->addHTML( '<div id="spamprotected">' );
-               $wgOut->addWikiMsg( 'spamprotectiontext' );
-               if ( $match ) {
-                       $wgOut->addWikiMsg( 'spamprotectionmatch', wfEscapeWikiText( $match ) );
-               }
-               $wgOut->addHTML( '</div>' );
-
-               $wgOut->returnToMain( false, $wgTitle );
-       }
-
        /**
         * Show "your edit contains spam" page with your diff and text
         *
index 008be15..4548345 100644 (file)
@@ -619,9 +619,9 @@ class MWExceptionHandler {
 
                                if ( $wgShowExceptionDetails ) {
                                        $message .= 'Original exception: ' . self::getLogMessage( $e ) .
-                                                "\nBacktrace:\n" . self::getRedactedTraceAsString( $e ) .
-                                                "\n\nException caught inside exception handler: " . self::getLogMessage( $e2 ) .
-                                                "\nBacktrace:\n" . self::getRedactedTraceAsString( $e2 );
+                                               "\nBacktrace:\n" . self::getRedactedTraceAsString( $e ) .
+                                               "\n\nException caught inside exception handler: " . self::getLogMessage( $e2 ) .
+                                               "\nBacktrace:\n" . self::getRedactedTraceAsString( $e2 );
                                } else {
                                        $message .= "Exception caught inside exception handler.\n\n" .
                                                "Set \$wgShowExceptionDetails = true; at the bottom of LocalSettings.php " .
index 98de4c0..b4a507d 100644 (file)
@@ -503,7 +503,8 @@ class XmlDumpWriter {
                        'xmlns'              => "http://www.mediawiki.org/xml/export-$ver/",
                        'xmlns:xsi'          => "http://www.w3.org/2001/XMLSchema-instance",
                        'xsi:schemaLocation' => "http://www.mediawiki.org/xml/export-$ver/ " .
-                                               "http://www.mediawiki.org/xml/export-$ver.xsd", #TODO: how do we get a new version up there?
+                               #TODO: how do we get a new version up there?
+                               "http://www.mediawiki.org/xml/export-$ver.xsd",
                        'version'            => $ver,
                        'xml:lang'           => $wgLanguageCode ),
                        null ) .
@@ -604,7 +605,7 @@ class XmlDumpWriter {
                if ( $row->page_is_redirect ) {
                        $page = WikiPage::factory( $title );
                        $redirect = $page->getRedirectTarget();
-                       if ( $redirect instanceOf Title && $redirect->isValidRedirectTarget() ) {
+                       if ( $redirect instanceof Title && $redirect->isValidRedirectTarget() ) {
                                $out .= '    ' . Xml::element( 'redirect', array( 'title' => self::canonicalTitle( $redirect ) ) ) . "\n";
                        }
                }
index f49f9be..e0bd5cd 100644 (file)
@@ -143,8 +143,7 @@ class GitInfo {
                } else {
                        return (int)$commitDate;
                }
-
-        }
+       }
 
        /**
         * Return the name of the current branch, or HEAD if not found
index 57877a2..819b076 100644 (file)
@@ -508,7 +508,6 @@ function wfExpandUrl( $url, $defaultProto = PROTO_CURRENT ) {
                }
        }
 
-
        // Analyze $serverUrl to obtain its protocol
        $bits = wfParseUrl( $serverUrl );
        $serverHasProto = $bits && $bits['scheme'] != '';
@@ -966,8 +965,8 @@ function wfIsDebugRawPage() {
                || (
                        isset( $_SERVER['SCRIPT_NAME'] )
                        && substr( $_SERVER['SCRIPT_NAME'], -8 ) == 'load.php'
-               ) )
-       {
+               )
+       {
                $cache = true;
        } else {
                $cache = false;
@@ -1464,9 +1463,9 @@ function wfMsgForContent( $key ) {
        $args = func_get_args();
        array_shift( $args );
        $forcontent = true;
-       if ( is_array( $wgForceUIMsgAsContentMsg ) &&
-               in_array( $key, $wgForceUIMsgAsContentMsg ) )
-       {
+       if ( is_array( $wgForceUIMsgAsContentMsg )
+               && in_array( $key, $wgForceUIMsgAsContentMsg )
+       {
                $forcontent = false;
        }
        return wfMsgReal( $key, $args, true, $forcontent );
@@ -1487,9 +1486,9 @@ function wfMsgForContentNoTrans( $key ) {
        $args = func_get_args();
        array_shift( $args );
        $forcontent = true;
-       if ( is_array( $wgForceUIMsgAsContentMsg ) &&
-               in_array( $key, $wgForceUIMsgAsContentMsg ) )
-       {
+       if ( is_array( $wgForceUIMsgAsContentMsg )
+               && in_array( $key, $wgForceUIMsgAsContentMsg )
+       {
                $forcontent = false;
        }
        return wfMsgReal( $key, $args, true, $forcontent, false );
@@ -1994,11 +1993,11 @@ function wfClientAcceptsGzip( $force = false ) {
                        # @todo FIXME: We may want to blacklist some broken browsers
                        $m = array();
                        if ( preg_match(
-                               '/\bgzip(?:;(q)=([0-9]+(?:\.[0-9]+)))?\b/',
-                               $_SERVER['HTTP_ACCEPT_ENCODING'],
-                               $m )
-                       )
-                       {
+                                       '/\bgzip(?:;(q)=([0-9]+(?:\.[0-9]+)))?\b/',
+                                       $_SERVER['HTTP_ACCEPT_ENCODING'],
+                                       $m
+                               )
+                       {
                                if ( isset( $m[2] ) && ( $m[1] == 'q' ) && ( $m[2] == 0 ) ) {
                                        $result = false;
                                        return $result;
@@ -2771,11 +2770,11 @@ function wfShellExecDisabled() {
  * @param array $environ optional environment variables which should be
  *                 added to the executed command environment.
  * @param array $limits optional array with limits(filesize, memory, time, walltime)
- *                 this overwrites the global wgShellMax* limits.
+ *                 this overwrites the global wgMaxShell* limits.
  * @param array $options Array of options:
- *    - duplicateStderr: Set this to true to duplicate stderr to stdout, 
+ *    - duplicateStderr: Set this to true to duplicate stderr to stdout,
  *      including errors from limit.sh
- *      
+ *
  * @return string collected stdout as a string
  */
 function wfShellExec( $cmd, &$retval = null, $environ = array(),
@@ -2878,9 +2877,9 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
        $logMsg = false;
 
        // According to the documentation, it is possible for stream_select()
-       // to fail due to EINTR. I haven't managed to induce this in testing 
-       // despite sending various signals. If it did happen, the error 
-       // message would take the form: 
+       // to fail due to EINTR. I haven't managed to induce this in testing
+       // despite sending various signals. If it did happen, the error
+       // message would take the form:
        //
        // stream_select(): unable to select [4]: Interrupted system call (max_fd=5)
        //
@@ -3514,7 +3513,6 @@ function wfResetSessionID() {
        wfRunHooks( 'ResetSessionID', array( $oldSessionId, $newSessionId ) );
 }
 
-
 /**
  * Initialise php session
  *
index b60146a..385663a 100644 (file)
@@ -655,8 +655,7 @@ class HTMLForm extends ContextSource {
                        . $this->getBody()
                        . $this->getHiddenFields()
                        . $this->getButtons()
-                       . $this->mFooter
-               ;
+                       . $this->mFooter;
 
                $html = $this->wrapForm( $html );
 
@@ -745,7 +744,7 @@ class HTMLForm extends ContextSource {
                        $attribs['class'] = array( 'mw-htmlform-submit' );
 
                        if ( $this->isVForm() ) {
-                               // mw-ui-block is necessary because the buttons aren't necessarily in an 
+                               // mw-ui-block is necessary because the buttons aren't necessarily in an
                                // immediate child div of the vform.
                                array_push( $attribs['class'], 'mw-ui-button', 'mw-ui-big', 'mw-ui-primary', 'mw-ui-block' );
                        }
index 932f753..0eb6474 100644 (file)
@@ -449,8 +449,8 @@ class Html {
                        // numbers to be entered in 'type="number"' fields, allow
                        // the special case 'step="any"'.
 
-                       if ( in_array( $key, array( 'max', 'min', 'pattern', 'required' ) ) ||
-                                $key === 'step' && $value !== 'any' ) {
+                       if ( in_array( $key, array( 'max', 'min', 'pattern', 'required' ) )
+                               || $key === 'step' && $value !== 'any' ) {
                                continue;
                        }
 
@@ -664,7 +664,7 @@ class Html {
        }
 
        /**
-        * Convenience function to produce an "<input>" element.
+        * Convenience function to produce a <textarea> element.
         *
         * This supports leaving out the cols= and rows= which Xml requires and are
         * required by HTML4/XHTML but not required by HTML5.
index 248a76f..c06fbbc 100644 (file)
@@ -306,14 +306,10 @@ class HtmlFormatter {
                } elseif ( strpos( $selector, '#' ) === 0 ) {
                        $type = 'ID';
                        $rawName = substr( $selector, 1 );
-               } elseif ( strpos( $selector, '.' ) !== 0 &&
-                       strpos( $selector, '.' ) !== false )
-               {
+               } elseif ( strpos( $selector, '.' ) !== 0 && strpos( $selector, '.' ) !== false ) {
                        $type = 'TAG_CLASS';
                        $rawName = $selector;
-               } elseif ( strpos( $selector, '[' ) === false
-                       && strpos( $selector, ']' ) === false )
-               {
+               } elseif ( strpos( $selector, '[' ) === false && strpos( $selector, ']' ) === false ) {
                        $type = 'TAG';
                        $rawName = $selector;
                } else {
index 78c2ac7..da08aa2 100644 (file)
@@ -842,8 +842,8 @@ class PhpHttpRequest extends MWHttpRequest {
                        $this->postData = wfArrayToCgi( $this->postData );
                }
 
-               if ( $this->parsedUrl['scheme'] != 'http' &&
-                        $this->parsedUrl['scheme'] != 'https' ) {
+               if ( $this->parsedUrl['scheme'] != 'http'
+                       && $this->parsedUrl['scheme'] != 'https' ) {
                        $this->status->fatal( 'http-invalid-scheme', $this->parsedUrl['scheme'] );
                }
 
index 4ea1712..b2a53cd 100644 (file)
@@ -377,8 +377,8 @@ class ImagePage extends Article {
                                                // since that is added to the message separately, so
                                                // it can be denoted as the current size being shown.
                                                if ( $size[0] <= $width_orig && $size[1] <= $height_orig
-                                                       && $size[0] != $width && $size[1] != $height )
-                                               {
+                                                       && $size[0] != $width && $size[1] != $height
+                                               {
                                                        $sizeLink = $this->makeSizeLink( $params, $size[0], $size[1] );
                                                        if ( $sizeLink ) {
                                                                $otherSizes[] = $sizeLink;
@@ -1203,8 +1203,8 @@ class ImageHistoryList extends ContextSource {
                $lang = $this->getLanguage();
                $user = $this->getUser();
                if ( $file->allowInlineDisplay() && $file->userCan( File::DELETED_FILE, $user )
-                       && !$file->isDeleted( File::DELETED_FILE ) )
-               {
+                       && !$file->isDeleted( File::DELETED_FILE )
+               {
                        $params = array(
                                'width' => '120',
                                'height' => '120',
index d552c69..48d5cd8 100644 (file)
@@ -84,16 +84,28 @@ class LinkFilter {
         *
         * Asterisks in any other location are considered invalid.
         *
-        * @param string $filterEntry domainparts
-        * @param $prot        String: protocol
+        * This function does the same as wfMakeUrlIndexes(), except it also takes care
+        * of adding wildcards
+        *
+        * @param String $filterEntry domainparts
+        * @param String $protocol protocol (default http://)
         * @return Array to be passed to DatabaseBase::buildLike() or false on error
         */
-       public static function makeLikeArray( $filterEntry, $prot = 'http://' ) {
+       public static function makeLikeArray( $filterEntry, $protocol = 'http://' ) {
                $db = wfGetDB( DB_MASTER );
-               if ( substr( $filterEntry, 0, 2 ) == '*.' ) {
+
+               $target = $protocol . $filterEntry;
+               $bits = wfParseUrl( $target );
+
+               if ( $bits == false ) {
+                       // Unknown protocol?
+                       return false;
+               }
+
+               if ( substr( $bits['host'], 0, 2 ) == '*.' ) {
                        $subdomains = true;
-                       $filterEntry = substr( $filterEntry, 2 );
-                       if ( $filterEntry == '' ) {
+                       $bits['host'] = substr( $bits['host'], 2 );
+                       if ( $bits['host'] == '' ) {
                                // We don't want to make a clause that will match everything,
                                // that could be dangerous
                                return false;
@@ -101,52 +113,63 @@ class LinkFilter {
                } else {
                        $subdomains = false;
                }
-               // No stray asterisks, that could cause confusion
-               // It's not simple or efficient to handle it properly so we don't
-               // handle it at all.
-               if ( strpos( $filterEntry, '*' ) !== false ) {
-                       return false;
-               }
-               $slash = strpos( $filterEntry, '/' );
-               if ( $slash !== false ) {
-                       $path = substr( $filterEntry, $slash );
-                       $host = substr( $filterEntry, 0, $slash );
-               } else {
-                       $path = '/';
-                       $host = $filterEntry;
-               }
+
                // Reverse the labels in the hostname, convert to lower case
                // For emails reverse domainpart only
-               if ( $prot == 'mailto:' && strpos( $host, '@' ) ) {
+               if ( $bits['scheme'] === 'mailto' && strpos( $bits['host'], '@' ) ) {
                        // complete email address
-                       $mailparts = explode( '@', $host );
+                       $mailparts = explode( '@', $bits['host'] );
                        $domainpart = strtolower( implode( '.', array_reverse( explode( '.', $mailparts[1] ) ) ) );
-                       $host = $domainpart . '@' . $mailparts[0];
-                       $like = array( "$prot$host", $db->anyString() );
-               } elseif ( $prot == 'mailto:' ) {
-                       // domainpart of email address only. do not add '.'
-                       $host = strtolower( implode( '.', array_reverse( explode( '.', $host ) ) ) );
-                       $like = array( "$prot$host", $db->anyString() );
+                       $bits['host'] = $domainpart . '@' . $mailparts[0];
+               } elseif ( $bits['scheme'] === 'mailto' ) {
+                       // domainpart of email address only, do not add '.'
+                       $bits['host'] = strtolower( implode( '.', array_reverse( explode( '.', $bits['host'] ) ) ) );
                } else {
-                       $host = strtolower( implode( '.', array_reverse( explode( '.', $host ) ) ) );
-                       if ( substr( $host, -1, 1 ) !== '.' ) {
-                               $host .= '.';
+                       $bits['host'] = strtolower( implode( '.', array_reverse( explode( '.', $bits['host'] ) ) ) );
+                       if ( substr( $bits['host'], -1, 1 ) !== '.' ) {
+                               $bits['host'] .= '.';
                        }
-                       $like = array( "$prot$host" );
+               }
 
-                       if ( $subdomains ) {
-                               $like[] = $db->anyString();
-                       }
-                       if ( !$subdomains || $path !== '/' ) {
-                               $like[] = $path;
-                               $like[] = $db->anyString();
+               $like[] = $bits['scheme'] . $bits['delimiter'] . $bits['host'];
+
+               if ( $subdomains ) {
+                       $like[] = $db->anyString();
+               }
+
+               if ( isset( $bits['port'] ) ) {
+                       $like[] = ':' . $bits['port'];
+               }
+               if ( isset( $bits['path'] ) ) {
+                       $like[] = $bits['path'];
+               } elseif ( !$subdomains ) {
+                       $like[] = '/';
+               }
+               if ( isset( $bits['query'] ) ) {
+                       $like[] = '?' . $bits['query'];
+               }
+               if ( isset( $bits['fragment'] ) ) {
+                       $like[] = '#' . $bits['fragment'];
+               }
+
+               // Check for stray asterisks: asterisk only allowed at the start of the domain
+               foreach ( $like as $likepart ) {
+                       if ( !( $likepart instanceof LikeMatch ) && strpos( $likepart, '*' ) !== false ) {
+                               return false;
                        }
                }
+
+               if ( !( $like[count( $like ) - 1] instanceof LikeMatch ) ) {
+                       // Add wildcard at the end if there isn't one already
+                       $like[] = $db->anyString();
+               }
+
                return $like;
        }
 
        /**
-        * Filters an array returned by makeLikeArray(), removing everything past first pattern placeholder.
+        * Filters an array returned by makeLikeArray(), removing everything past first
+        * pattern placeholder.
         *
         * @param array $arr array to filter
         * @return array filtered array
index 895f0f2..7c6bbc6 100644 (file)
@@ -264,8 +264,8 @@ class Linker {
         */
        public static function linkKnown(
                $target, $html = null, $customAttribs = array(),
-               $query = array(), $options = array( 'known', 'noclasses' ) )
-       {
+               $query = array(), $options = array( 'known', 'noclasses' )
+       {
                return self::link( $target, $html, $customAttribs, $query, $options );
        }
 
@@ -562,8 +562,8 @@ class Linker {
         * @return String: HTML for an image, with links, wrappers, etc.
         */
        public static function makeImageLink( /*Parser*/ $parser, Title $title, $file, $frameParams = array(),
-               $handlerParams = array(), $time = false, $query = "", $widthOption = null )
-       {
+               $handlerParams = array(), $time = false, $query = "", $widthOption = null
+       {
                $res = null;
                $dummy = new DummyLinker;
                if ( !wfRunHooks( 'ImageBeforeProduceHTML', array( &$dummy, &$title,
@@ -681,8 +681,7 @@ class Linker {
                                'valign' => isset( $fp['valign'] ) ? $fp['valign'] : false,
                                'img-class' => $fp['class'] );
                        if ( isset( $fp['border'] ) ) {
-                               // TODO: BUG? Both values are identical
-                               $params['img-class'] .= ( $params['img-class'] !== '' ) ? ' thumbborder' : 'thumbborder';
+                               $params['img-class'] .= ( $params['img-class'] !== '' ? ' ' : '' ) . 'thumbborder';
                        }
                        $params = self::getImageLinkMTOParams( $fp, $query, $parser ) + $params;
 
@@ -750,8 +749,8 @@ class Linker {
         * @return mixed
         */
        public static function makeThumbLinkObj( Title $title, $file, $label = '', $alt,
-               $align = 'right', $params = array(), $framed = false, $manualthumb = "" )
-       {
+               $align = 'right', $params = array(), $framed = false, $manualthumb = ""
+       {
                $frameParams = array(
                        'alt' => $alt,
                        'caption' => $label,
@@ -776,8 +775,8 @@ class Linker {
         * @return mixed
         */
        public static function makeThumbLink2( Title $title, $file, $frameParams = array(),
-               $handlerParams = array(), $time = false, $query = "" )
-       {
+               $handlerParams = array(), $time = false, $query = ""
+       {
                global $wgStylePath, $wgContLang;
                $exists = $file && $file->exists();
 
@@ -850,10 +849,10 @@ class Linker {
                if ( $page ) {
                        $url = wfAppendQuery( $url, array( 'page' => $page ) );
                }
-               if ( $manualthumb &&
-                    !isset( $fp['link-title'] ) &&
-                    !isset( $fp['link-url'] ) &&
-                    !isset( $fp['no-link'] ) ) {
+               if ( $manualthumb
+                       && !isset( $fp['link-title'] )
+                       && !isset( $fp['link-url'] )
+                       && !isset( $fp['no-link'] ) ) {
                        $fp['link-url'] = $url;
                }
 
@@ -871,7 +870,7 @@ class Linker {
                        $params = array(
                                'alt' => $fp['alt'],
                                'title' => $fp['title'],
-                               'img-class' => ( isset( $fp['class'] ) && $fp['class'] !== '' ) ? $fp['class'] . ' thumbimage' : 'thumbimage'
+                               'img-class' => ( isset( $fp['class'] ) && $fp['class'] !== '' ? $fp['class'] . ' ' : '' ) . 'thumbimage'
                        );
                        $params = self::getImageLinkMTOParams( $fp, $query ) + $params;
                        $s .= $thumb->toHtml( $params );
@@ -1471,8 +1470,8 @@ class Linker {
                        $target = Title::newFromText( $linkTarget );
                        if ( $target ) {
                                if ( $target->getText() == '' && $target->getInterwiki() === ''
-                                       && !self::$commentLocal && self::$commentContextTitle )
-                               {
+                                       && !self::$commentLocal && self::$commentContextTitle
+                               {
                                        $newTarget = clone ( self::$commentContextTitle );
                                        $newTarget->setFragment( '#' . $target->getFragment() );
                                        $target = $newTarget;
index 8220e92..f5c28ab 100644 (file)
@@ -167,7 +167,7 @@ class MimeMagic {
 
        /** The singleton instance
         */
-       private static $instance;
+       private static $instance = null;
 
        /** Initializes the MimeMagic object. This is called by MimeMagic::singleton().
         *
@@ -336,7 +336,7 @@ class MimeMagic {
         * Get an instance of this class
         * @return MimeMagic
         */
-       public static function &singleton() {
+       public static function singleton() {
                if ( self::$instance === null ) {
                        self::$instance = new MimeMagic;
                }
index 5ffb802..a0d7e30 100644 (file)
@@ -256,15 +256,10 @@ class OutputPage extends ContextSource {
        private $mTarget = null;
 
        /**
-        * @var bool: Whether parser output should contain table of contents
+        * @var bool: Whether output should contain table of contents
         */
        private $mEnableTOC = true;
 
-       /**
-        * @var bool: Whether parser output should contain section edit links
-        */
-       private $mEnableSectionEditLinks = true;
-
        /**
         * Constructor for OutputPage. This should not be called directly.
         * Instead a new RequestContext should be created and it will implicitly create
@@ -452,8 +447,8 @@ class OutputPage extends ContextSource {
                        if ( $module instanceof ResourceLoaderModule
                                && $module->getOrigin() <= $this->getAllowedModules( $type )
                                && ( is_null( $position ) || $module->getPosition() == $position )
-                               && ( !$this->mTarget || in_array( $this->mTarget, $module->getTargets() ) ) )
-                       {
+                               && ( !$this->mTarget || in_array( $this->mTarget, $module->getTargets() ) )
+                       {
                                $filteredModules[] = $val;
                        }
                }
@@ -896,7 +891,10 @@ class OutputPage extends ContextSource {
                $this->mPagetitle = $nameWithTags;
 
                # change "<i>foo&amp;bar</i>" to "foo&bar"
-               $this->setHTMLTitle( $this->msg( 'pagetitle' )->rawParams( Sanitizer::stripAllTags( $nameWithTags ) ) );
+               $this->setHTMLTitle(
+                       $this->msg( 'pagetitle' )->rawParams( Sanitizer::stripAllTags( $nameWithTags ) )
+                               ->inContentLanguage()
+               );
        }
 
        /**
@@ -1617,7 +1615,6 @@ class OutputPage extends ContextSource {
        function addParserOutput( &$parserOutput ) {
                $this->addParserOutputNoText( $parserOutput );
                $parserOutput->setTOCEnabled( $this->mEnableTOC );
-               $parserOutput->setEditSectionTokens( $this->mEnableSectionEditLinks );
                $text = $parserOutput->getText();
                wfRunHooks( 'OutputPageBeforeHTML', array( &$this, &$text ) );
                $this->addHTML( $text );
@@ -1629,10 +1626,7 @@ class OutputPage extends ContextSource {
         * @param $template QuickTemplate
         */
        public function addTemplate( &$template ) {
-               ob_start();
-               $template->execute();
-               $this->addHTML( ob_get_contents() );
-               ob_end_clean();
+               $this->addHTML( $template->getHTML() );
        }
 
        /**
@@ -2497,7 +2491,7 @@ $templates
                $ret = Html::htmlHeader( array( 'lang' => $this->getLanguage()->getHtmlCode(), 'dir' => $userdir, 'class' => 'client-nojs' ) );
 
                if ( $this->getHTMLTitle() == '' ) {
-                       $this->setHTMLTitle( $this->msg( 'pagetitle', $this->getPageTitle() ) );
+                       $this->setHTMLTitle( $this->msg( 'pagetitle', $this->getPageTitle() )->inContentLanguage() );
                }
 
                $openHead = Html::openElement( 'head' );
@@ -3681,21 +3675,4 @@ $templates
        public function isTOCEnabled() {
                return $this->mEnableTOC;
        }
-
-       /**
-        * Enables/disables section edit links, doesn't override __NOEDITSECTION__
-        * @param bool $flag
-        * @since 1.23
-        */
-       public function enableSectionEditLinks( $flag = true ) {
-               $this->mEnableSectionEditLinks = $flag;
-       }
-
-       /**
-        * @return bool
-        * @since 1.23
-        */
-       public function sectionEditLinksEnabled() {
-               return $this->mEnableSectionEditLinks;
-       }
 }
index 4a14c7e..28d2839 100644 (file)
@@ -267,6 +267,15 @@ abstract class IndexPager extends ContextSource implements Pager {
                }
        }
 
+       /**
+        * Get the current limit
+        *
+        * @return int
+        */
+       function getLimit() {
+               return $this->mLimit;
+       }
+
        /**
         * Set whether a row matching exactly the offset should be also included
         * in the result or not. By default this is not the case, but when the
index c9caf4f..d498770 100644 (file)
@@ -682,8 +682,8 @@ class Preferences {
                        $minDiff = $tz[1];
                        $tzSetting = sprintf( '%+03d:%02d', floor( $minDiff / 60 ), abs( $minDiff ) % 60 );
                } elseif ( count( $tz ) > 1 && $tz[0] == 'ZoneInfo' &&
-                       !in_array( $tzOffset, HTMLFormField::flattenOptions( $tzOptions ) ) )
-               {
+                       !in_array( $tzOffset, HTMLFormField::flattenOptions( $tzOptions ) )
+               {
                        # Timezone offset can vary with DST
                        $userTZ = timezone_open( $tz[2] );
                        if ( $userTZ !== false ) {
index 4446173..6ab3df4 100644 (file)
@@ -1311,8 +1311,8 @@ class Revision implements IDBAccessObject {
 
                global $wgLegacyEncoding;
                if ( $text !== false && $wgLegacyEncoding
-                       && !in_array( 'utf-8', $flags ) && !in_array( 'utf8', $flags ) )
-               {
+                       && !in_array( 'utf-8', $flags ) && !in_array( 'utf8', $flags )
+               {
                        # Old revisions kept around in a legacy encoding?
                        # Upconvert on demand.
                        # ("utf8" checked for compatibility with some broken
@@ -1453,14 +1453,14 @@ class Revision implements IDBAccessObject {
                                $t = $title->getPrefixedDBkey();
 
                                throw new MWException( "Can't save non-default content model with \$wgContentHandlerUseDB disabled: "
-                                                                               . "model is $model , default for $t is $defaultModel" );
+                                       . "model is $model, default for $t is $defaultModel" );
                        }
 
                        if ( $this->getContentFormat() != $defaultFormat ) {
                                $t = $title->getPrefixedDBkey();
 
                                throw new MWException( "Can't use non-default content format with \$wgContentHandlerUseDB disabled: "
-                                                                               . "format is $format, default for $t is $defaultFormat" );
+                                       . "format is $format, default for $t is $defaultFormat" );
                        }
                }
 
index 2e083d8..f75ee29 100644 (file)
@@ -102,10 +102,10 @@ if ( isset( $wgFileStore['deleted']['directory'] ) ) {
        $wgDeletedDirectory = $wgFileStore['deleted']['directory'];
 }
 
-if ( isset( $wgFooterIcons['copyright'] ) &&
-       isset( $wgFooterIcons['copyright']['copyright'] ) &&
-       $wgFooterIcons['copyright']['copyright'] === array() )
-{
+if ( isset( $wgFooterIcons['copyright'] )
+       && isset( $wgFooterIcons['copyright']['copyright'] )
+       && $wgFooterIcons['copyright']['copyright'] === array()
+{
        if ( isset( $wgCopyrightIcon ) && $wgCopyrightIcon ) {
                $wgFooterIcons['copyright']['copyright'] = $wgCopyrightIcon;
        } elseif ( $wgRightsIcon || $wgRightsText ) {
@@ -119,10 +119,10 @@ if ( isset( $wgFooterIcons['copyright'] ) &&
        }
 }
 
-if ( isset( $wgFooterIcons['poweredby'] ) &&
-       isset( $wgFooterIcons['poweredby']['mediawiki'] ) &&
-       $wgFooterIcons['poweredby']['mediawiki']['src'] === null )
-{
+if ( isset( $wgFooterIcons['poweredby'] )
+       && isset( $wgFooterIcons['poweredby']['mediawiki'] )
+       && $wgFooterIcons['poweredby']['mediawiki']['src'] === null
+{
        $wgFooterIcons['poweredby']['mediawiki']['src'] = "$wgStylePath/common/images/poweredby_mediawiki_88x31.png";
 }
 
@@ -293,7 +293,6 @@ if ( $wgMetaNamespace === false ) {
        $wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
 }
 
-
 // Default value is either the suhosin limit or -1 for unlimited
 if ( $wgResourceLoaderMaxQueryLength === false ) {
        $maxValueLength = ini_get( 'suhosin.get.max_value_length' );
index a71bafc..750f319 100644 (file)
@@ -1394,8 +1394,8 @@ abstract class Skin extends ContextSource {
                                // Singular if no revision -> diff link will show latest change only in any case
                                $plural = false;
                        }
-                       $plural = $plural ? 2 : 1;
-                       // 2 signifies "more than one revision". We don't know how many, and even if we did,
+                       $plural = $plural ? 999 : 1;
+                       // 999 signifies "more than one revision". We don't know how many, and even if we did,
                        // the number of revisions or authors is not necessarily the same as the number of
                        // "messages".
                        $newMessagesLink = Linker::linkKnown(
index 014d514..dde3f37 100644 (file)
@@ -130,51 +130,63 @@ class SkinTemplate extends Skin {
         */
        public function getLanguages() {
                global $wgHideInterlanguageLinks;
-               $out = $this->getOutput();
+               if ( $wgHideInterlanguageLinks ) {
+                       return array();
+               }
+
                $userLang = $this->getLanguage();
+               $languageLinks = array();
 
-               # Language links
-               $language_urls = array();
-
-               if ( !$wgHideInterlanguageLinks ) {
-                       foreach ( $out->getLanguageLinks() as $languageLinkText ) {
-                               $languageLinkParts = explode( ':', $languageLinkText, 2 );
-                               $class = 'interwiki-' . $languageLinkParts[0];
-                               unset( $languageLinkParts );
-                               $languageLinkTitle = Title::newFromText( $languageLinkText );
-                               if ( $languageLinkTitle ) {
-                                       $ilInterwikiCode = $languageLinkTitle->getInterwiki();
-                                       $ilLangName = Language::fetchLanguageName( $ilInterwikiCode );
-
-                                       if ( strval( $ilLangName ) === '' ) {
-                                               $ilLangName = $languageLinkText;
-                                       } else {
-                                               $ilLangName = $this->formatLanguageName( $ilLangName );
-                                       }
+               foreach ( $this->getOutput()->getLanguageLinks() as $languageLinkText ) {
+                       $languageLinkParts = explode( ':', $languageLinkText, 2 );
+                       $class = 'interlanguage-link interwiki-' . $languageLinkParts[0];
+                       unset( $languageLinkParts );
 
-                                       // CLDR extension or similar is required to localize the language name;
-                                       // otherwise we'll end up with the autonym again.
-                                       $ilLangLocalName = Language::fetchLanguageName( $ilInterwikiCode, $userLang->getCode() );
+                       $languageLinkTitle = Title::newFromText( $languageLinkText );
+                       if ( $languageLinkTitle ) {
+                               $ilInterwikiCode = $languageLinkTitle->getInterwiki();
+                               $ilLangName = Language::fetchLanguageName( $ilInterwikiCode );
 
-                                       if ( $languageLinkTitle->getText() === '' ) {
-                                               $ilTitle = wfMessage( 'interlanguage-link-title-langonly', $ilLangLocalName )->text();
-                                       } else {
-                                               $ilTitle = wfMessage( 'interlanguage-link-title', $languageLinkTitle->getText(),
-                                                       $ilLangLocalName )->text();
-                                       }
+                               if ( strval( $ilLangName ) === '' ) {
+                                       $ilLangName = $languageLinkText;
+                               } else {
+                                       $ilLangName = $this->formatLanguageName( $ilLangName );
+                               }
 
-                                       $language_urls[] = array(
-                                               'href' => $languageLinkTitle->getFullURL(),
-                                               'text' => $ilLangName,
-                                               'title' => $ilTitle,
-                                               'class' => $class,
-                                               'lang' => wfBCP47( $ilInterwikiCode ),
-                                               'hreflang' => wfBCP47( $ilInterwikiCode ),
-                                       );
+                               // CLDR extension or similar is required to localize the language name;
+                               // otherwise we'll end up with the autonym again.
+                               $ilLangLocalName = Language::fetchLanguageName(
+                                       $ilInterwikiCode,
+                                       $userLang->getCode()
+                               );
+
+                               $languageLinkTitleText = $languageLinkTitle->getText();
+                               if ( $languageLinkTitleText === '' ) {
+                                       $ilTitle = wfMessage(
+                                               'interlanguage-link-title-langonly',
+                                               $ilLangLocalName
+                                       )->text();
+                               } else {
+                                       $ilTitle = wfMessage(
+                                               'interlanguage-link-title',
+                                               $languageLinkTitleText,
+                                               $ilLangLocalName
+                                       )->text();
                                }
+
+                               $ilInterwikiCodeBCP47 = wfBCP47( $ilInterwikiCode );
+                               $languageLinks[] = array(
+                                       'href' => $languageLinkTitle->getFullURL(),
+                                       'text' => $ilLangName,
+                                       'title' => $ilTitle,
+                                       'class' => $class,
+                                       'lang' => $ilInterwikiCodeBCP47,
+                                       'hreflang' => $ilInterwikiCodeBCP47,
+                               );
                        }
                }
-               return $language_urls;
+
+               return $languageLinks;
        }
 
        protected function setupTemplateForOutput() {
@@ -1457,6 +1469,20 @@ abstract class QuickTemplate {
        public function getSkin() {
                return $this->data['skin'];
        }
+
+       /**
+        * Fetch the output of a QuickTemplate and return it
+        *
+        * @since 1.23
+        * @return String
+        */
+       public function getHTML() {
+               ob_start();
+               $this->execute();
+               $html = ob_get_contents();
+               ob_end_clean();
+               return $html;
+       }
 }
 
 /**
index 9fb39da..f70a6dc 100644 (file)
@@ -1460,7 +1460,6 @@ class SpecialAllMyUploads extends RedirectSpecialPage {
        }
 }
 
-
 /**
  * Redirect from Special:PermanentLink/### to index.php?oldid=###
  */
index 1ede0c1..30eb129 100644 (file)
@@ -37,7 +37,7 @@
  * and bails out if not.
  *
  * To add a core special page, use the similar static list in
- * SpecialPage::$mList. To remove a core static special page at runtime, use
+ * SpecialPageFactory::$list. To remove a core static special page at runtime, use
  * a SpecialPage_initList hook.
  *
  * @ingroup SpecialPage
@@ -48,7 +48,7 @@ class SpecialPageFactory {
        /**
         * List of special page names to the subclass of SpecialPage which handles them.
         */
-       private static $mList = array(
+       private static $list = array(
                // Maintenance Reports
                'BrokenRedirects'           => 'BrokenRedirectsPage',
                'Deadendpages'              => 'DeadendpagesPage',
@@ -149,6 +149,7 @@ class SpecialPageFactory {
                'Undelete'                  => 'SpecialUndelete',
                'Whatlinkshere'             => 'SpecialWhatlinkshere',
                'MergeHistory'              => 'SpecialMergeHistory',
+               'ExpandTemplates'           => 'SpecialExpandTemplates',
 
                // Other
                'Booksources'               => 'SpecialBookSources',
@@ -169,11 +170,10 @@ class SpecialPageFactory {
                'Userlogout'                => 'SpecialUserlogout',
        );
 
-       private static $mAliases;
+       private static $aliases;
 
        /**
-        * Initialise the special page list
-        * This must be called before accessing SpecialPage::$mList
+        * Get the special page list
         *
         * @return array
         */
@@ -182,43 +182,43 @@ class SpecialPageFactory {
                global $wgDisableCounters, $wgDisableInternalSearch, $wgEmailAuthentication;
                global $wgEnableEmail, $wgEnableJavaScriptTest;
 
-               if ( !is_object( self::$mList ) ) {
+               if ( !is_object( self::$list ) ) {
                        wfProfileIn( __METHOD__ );
 
                        if ( !$wgDisableCounters ) {
-                               self::$mList['Popularpages'] = 'PopularpagesPage';
+                               self::$list['Popularpages'] = 'PopularpagesPage';
                        }
 
                        if ( !$wgDisableInternalSearch ) {
-                               self::$mList['Search'] = 'SpecialSearch';
+                               self::$list['Search'] = 'SpecialSearch';
                        }
 
                        if ( $wgEmailAuthentication ) {
-                               self::$mList['Confirmemail'] = 'EmailConfirmation';
-                               self::$mList['Invalidateemail'] = 'EmailInvalidation';
+                               self::$list['Confirmemail'] = 'EmailConfirmation';
+                               self::$list['Invalidateemail'] = 'EmailInvalidation';
                        }
 
                        if ( $wgEnableEmail ) {
-                               self::$mList['ChangeEmail'] = 'SpecialChangeEmail';
+                               self::$list['ChangeEmail'] = 'SpecialChangeEmail';
                        }
 
                        if ( $wgEnableJavaScriptTest ) {
-                               self::$mList['JavaScriptTest'] = 'SpecialJavaScriptTest';
+                               self::$list['JavaScriptTest'] = 'SpecialJavaScriptTest';
                        }
 
                        // Add extension special pages
-                       self::$mList = array_merge( self::$mList, $wgSpecialPages );
+                       self::$list = array_merge( self::$list, $wgSpecialPages );
 
                        // Run hooks
                        // This hook can be used to remove undesired built-in special pages
-                       wfRunHooks( 'SpecialPage_initList', array( &self::$mList ) );
+                       wfRunHooks( 'SpecialPage_initList', array( &self::$list ) );
 
                        // Cast to object: func()[$key] doesn't work, but func()->$key does
-                       settype( self::$mList, 'object' );
+                       settype( self::$list, 'object' );
 
                        wfProfileOut( __METHOD__ );
                }
-               return self::$mList;
+               return self::$list;
        }
 
        /**
@@ -230,28 +230,28 @@ class SpecialPageFactory {
         * @return Object
         */
        static function getAliasList() {
-               if ( !is_object( self::$mAliases ) ) {
+               if ( !is_object( self::$aliases ) ) {
                        global $wgContLang;
                        $aliases = $wgContLang->getSpecialPageAliases();
 
                        // Objects are passed by reference by default, need to create a copy
                        $missingPages = clone self::getList();
 
-                       self::$mAliases = array();
+                       self::$aliases = array();
                        foreach ( $aliases as $realName => $aliasList ) {
                                foreach ( $aliasList as $alias ) {
-                                       self::$mAliases[$wgContLang->caseFold( $alias )] = $realName;
+                                       self::$aliases[$wgContLang->caseFold( $alias )] = $realName;
                                }
                                unset( $missingPages->$realName );
                        }
                        foreach ( $missingPages as $name => $stuff ) {
-                               self::$mAliases[$wgContLang->caseFold( $name )] = $name;
+                               self::$aliases[$wgContLang->caseFold( $name )] = $name;
                        }
 
                        // Cast to object: func()[$key] doesn't work, but func()->$key does
-                       self::$mAliases = (object)self::$mAliases;
+                       self::$aliases = (object)self::$aliases;
                }
-               return self::$mAliases;
+               return self::$aliases;
        }
 
        /**
index dc0bae0..5f5ca74 100644 (file)
  * so that a lack of error-handling will be explicit.
  */
 class Status {
+       /** @var bool */
        public $ok = true;
+
+       /** @var mixed  */
        public $value;
 
        /** Counters for batch operations */
+       /** @var int */
        public $successCount = 0;
+
+       /** @var int */
        public $failCount = 0;
 
        /** Array to indicate which items of the batch operations were successful */
+       /** @var array  */
        public $success = array();
 
+       /** @var array */
        public $errors = array();
+
+       /** @var callable */
        public $cleanCallback = false;
 
        /**
index 1ad643a..ef82705 100644 (file)
@@ -185,8 +185,8 @@ class StreamFile {
                                return 'unknown/unknown';
                        }
                        if ( $wgCheckFileExtensions && $wgStrictFileExtensions
-                               && !UploadBase::checkFileExtensionList( $extList, $wgFileExtensions ) )
-                       {
+                               && !UploadBase::checkFileExtensionList( $extList, $wgFileExtensions )
+                       {
                                return 'unknown/unknown';
                        }
                        if ( $wgVerifyMimeType && in_array( strtolower( $type ), $wgMimeTypeBlacklist ) ) {
index c726e9d..2961500 100644 (file)
@@ -1548,9 +1548,9 @@ class Title {
                                $url = false;
                                $matches = array();
 
-                               if ( !empty( $wgActionPaths ) &&
-                                       preg_match( '/^(.*&|)action=([^&]*)(&(.*)|)$/', $query, $matches ) )
-                               {
+                               if ( !empty( $wgActionPaths )
+                                       && preg_match( '/^(.*&|)action=([^&]*)(&(.*)|)$/', $query, $matches )
+                               {
                                        $action = urldecode( $matches[2] );
                                        if ( isset( $wgActionPaths[$action] ) ) {
                                                $query = $matches[1];
@@ -1564,12 +1564,12 @@ class Title {
                                        }
                                }
 
-                               if ( $url === false &&
-                                       $wgVariantArticlePath &&
-                                       $wgContLang->getCode() === $this->getPageLanguage()->getCode() &&
-                                       $this->getPageLanguage()->hasVariants() &&
-                                       preg_match( '/^variant=([^&]*)$/', $query, $matches ) )
-                               {
+                               if ( $url === false
+                                       && $wgVariantArticlePath
+                                       && $wgContLang->getCode() === $this->getPageLanguage()->getCode()
+                                       && $this->getPageLanguage()->hasVariants()
+                                       && preg_match( '/^variant=([^&]*)$/', $query, $matches )
+                               {
                                        $variant = urldecode( $matches[1] );
                                        if ( $this->getPageLanguage()->hasVariant( $variant ) ) {
                                                // Only do the variant replacement if the given variant is a valid
@@ -2125,9 +2125,9 @@ class Title {
                                if ( $title_protection['pt_create_perm'] == 'autoconfirmed' ) {
                                        $title_protection['pt_create_perm'] = 'editsemiprotected'; // B/C
                                }
-                               if ( $title_protection['pt_create_perm'] == '' ||
-                                       !$user->isAllowed( $title_protection['pt_create_perm'] ) )
-                               {
+                               if ( $title_protection['pt_create_perm'] == ''
+                                       || !$user->isAllowed( $title_protection['pt_create_perm'] )
+                               {
                                        $errors[] = array( 'titleprotected', User::whoIs( $title_protection['pt_user'] ), $title_protection['pt_reason'] );
                                }
                        }
@@ -2148,8 +2148,8 @@ class Title {
                        }
                } elseif ( $action == 'delete' ) {
                        if ( $doExpensiveQueries && $wgDeleteRevisionsLimit
-                               && !$this->userCan( 'bigdelete', $user ) && $this->isBigDeletion() )
-                       {
+                               && !$this->userCan( 'bigdelete', $user ) && $this->isBigDeletion()
+                       {
                                $errors[] = array( 'delete-toobig', $wgLang->formatNum( $wgDeleteRevisionsLimit ) );
                        }
                }
@@ -3216,8 +3216,8 @@ class Title {
 
                                        # Redundant interwiki prefix to the local wiki
                                        if ( $wgLocalInterwiki !== false
-                                               && 0 == strcasecmp( $this->mInterwiki, $wgLocalInterwiki ) )
-                                       {
+                                               && 0 == strcasecmp( $this->mInterwiki, $wgLocalInterwiki )
+                                       {
                                                if ( $dbkey == '' ) {
                                                        # Can't have an empty self-link
                                                        return false;
@@ -3995,9 +3995,9 @@ class Title {
                        // We don't know whether this function was called before
                        // or after moving the root page, so check both
                        // $this and $nt
-                       if ( $oldSubpage->getArticleID() == $this->getArticleID() ||
-                                       $oldSubpage->getArticleID() == $nt->getArticleID() )
-                       {
+                       if ( $oldSubpage->getArticleID() == $this->getArticleID()
+                               || $oldSubpage->getArticleID() == $nt->getArticleID()
+                       {
                                // When moving a page to a subpage of itself,
                                // don't move it twice
                                continue;
index 224626b..a2e7023 100644 (file)
@@ -1307,8 +1307,8 @@ class User {
 
                // Proxy blocking
                if ( !$block instanceof Block && $ip !== null && !$this->isAllowed( 'proxyunbannable' )
-                       && !in_array( $ip, $wgProxyWhitelist ) )
-               {
+                       && !in_array( $ip, $wgProxyWhitelist )
+               {
                        // Local list
                        if ( self::isLocallyBlockedProxy( $ip ) ) {
                                $block = new Block;
@@ -1632,8 +1632,8 @@ class User {
                $blocked = $this->isBlocked( $bFromSlave );
                $allowUsertalk = ( $wgBlockAllowsUTEdit ? $this->mAllowUsertalk : false );
                // If a user's name is suppressed, they cannot make edits anywhere
-               if ( !$this->mHideName && $allowUsertalk && $title->getText() === $this->getName() &&
-                 $title->getNamespace() == NS_USER_TALK ) {
+               if ( !$this->mHideName && $allowUsertalk && $title->getText() === $this->getName()
+                       && $title->getNamespace() == NS_USER_TALK ) {
                        $blocked = false;
                        wfDebug( __METHOD__ . ": self-talk page, ignoring any blocks\n" );
                }
@@ -3078,9 +3078,7 @@ class User {
                // and when it does have to be executed, it can be on a slave
                // If this is the user's newtalk page, we always update the timestamp
                $force = '';
-               if ( $title->getNamespace() == NS_USER_TALK &&
-                       $title->getText() == $this->getName() )
-               {
+               if ( $title->getNamespace() == NS_USER_TALK && $title->getText() == $this->getName() ) {
                        $force = 'force';
                }
 
@@ -3513,56 +3511,6 @@ class User {
                return (bool)$userblock->doAutoblock( $this->getRequest()->getIP() );
        }
 
-       /**
-        * Generate a string which will be different for any combination of
-        * user options which would produce different parser output.
-        * This will be used as part of the hash key for the parser cache,
-        * so users with the same options can share the same cached data
-        * safely.
-        *
-        * Extensions which require it should install 'PageRenderingHash' hook,
-        * which will give them a chance to modify this key based on their own
-        * settings.
-        *
-        * @deprecated since 1.17 use the ParserOptions object to get the relevant options
-        * @return string Page rendering hash
-        */
-       public function getPageRenderingHash() {
-               wfDeprecated( __METHOD__, '1.17' );
-
-               global $wgRenderHashAppend, $wgLang, $wgContLang;
-               if ( $this->mHash ) {
-                       return $this->mHash;
-               }
-
-               // stubthreshold is only included below for completeness,
-               // since it disables the parser cache, its value will always
-               // be 0 when this function is called by parsercache.
-
-               $confstr = $this->getOption( 'math' );
-               $confstr .= '!' . $this->getStubThreshold();
-               $confstr .= '!' . ( $this->getOption( 'numberheadings' ) ? '1' : '' );
-               $confstr .= '!' . $wgLang->getCode();
-               $confstr .= '!' . $this->getOption( 'thumbsize' );
-               // add in language specific options, if any
-               $extra = $wgContLang->getExtraHashOptions();
-               $confstr .= $extra;
-
-               // Since the skin could be overloading link(), it should be
-               // included here but in practice, none of our skins do that.
-
-               $confstr .= $wgRenderHashAppend;
-
-               // Give a chance for extensions to modify the hash, if they have
-               // extra options or other effects on the parser cache.
-               wfRunHooks( 'PageRenderingHash', array( &$confstr ) );
-
-               // Make it a valid memcached key fragment
-               $confstr = str_replace( ' ', '_', $confstr );
-               $this->mHash = $confstr;
-               return $confstr;
-       }
-
        /**
         * Get whether the user is explicitly blocked from account creation.
         * @return bool|Block
@@ -3662,9 +3610,9 @@ class User {
                        // Some wikis were converted from ISO 8859-1 to UTF-8, the passwords can't be converted
                        // Check for this with iconv
                        $cp1252Password = iconv( 'UTF-8', 'WINDOWS-1252//TRANSLIT', $password );
-                       if ( $cp1252Password != $password &&
-                               self::comparePasswords( $this->mPassword, $cp1252Password, $this->mId ) )
-                       {
+                       if ( $cp1252Password != $password
+                               && self::comparePasswords( $this->mPassword, $cp1252Password, $this->mId )
+                       {
                                return true;
                        }
                }
index 6157f78..39c3e18 100644 (file)
@@ -630,11 +630,11 @@ class EmailNotification {
                                // Send updates to watchers other than the current editor
                                $userArray = UserArray::newFromIDs( $watchers );
                                foreach ( $userArray as $watchingUser ) {
-                                       if ( $watchingUser->getOption( 'enotifwatchlistpages' ) &&
-                                               ( !$minorEdit || $watchingUser->getOption( 'enotifminoredits' ) ) &&
-                                               $watchingUser->isEmailConfirmed() &&
-                                               $watchingUser->getID() != $userTalkId )
-                                       {
+                                       if ( $watchingUser->getOption( 'enotifwatchlistpages' )
+                                               && ( !$minorEdit || $watchingUser->getOption( 'enotifminoredits' ) )
+                                               && $watchingUser->isEmailConfirmed()
+                                               && $watchingUser->getID() != $userTalkId
+                                       {
                                                $this->compose( $watchingUser );
                                        }
                                }
@@ -672,9 +672,9 @@ class EmailNotification {
                                wfDebug( __METHOD__ . ": user talk page edited, but user does not exist\n" );
                        } elseif ( $targetUser->getId() == $editor->getId() ) {
                                wfDebug( __METHOD__ . ": user edited their own talk page, no notification sent\n" );
-                       } elseif ( $targetUser->getOption( 'enotifusertalkpages' ) &&
-                               ( !$minorEdit || $targetUser->getOption( 'enotifminoredits' ) ) )
-                       {
+                       } elseif ( $targetUser->getOption( 'enotifusertalkpages' )
+                               && ( !$minorEdit || $targetUser->getOption( 'enotifminoredits' ) )
+                       {
                                if ( !$targetUser->isEmailConfirmed() ) {
                                        wfDebug( __METHOD__ . ": talk page owner doesn't have validated email\n" );
                                } elseif ( !wfRunHooks( 'AbortTalkPageEmailNotification', array( $targetUser, $title ) ) ) {
@@ -782,8 +782,8 @@ class EmailNotification {
                $adminAddress = new MailAddress( $wgPasswordSender, $wgPasswordSenderName );
                if ( $wgEnotifRevealEditorAddress
                        && ( $this->editor->getEmail() != '' )
-                       && $this->editor->getOption( 'enotifrevealaddr' ) )
-               {
+                       && $this->editor->getOption( 'enotifrevealaddr' )
+               {
                        $editorAddress = new MailAddress( $this->editor );
                        if ( $wgEnotifFromEditor ) {
                                $this->from = $editorAddress;
index 536ce12..dfa8cf6 100644 (file)
@@ -54,7 +54,7 @@ class WebRequest {
         * Cached URL protocol
         * @var string
         */
-       private $protocol;
+       protected $protocol;
 
        public function __construct() {
                /// @todo FIXME: This preemptive de-quoting can interfere with other web libraries
@@ -113,8 +113,8 @@ class WebRequest {
                                $router->add( "$wgScript/$1" );
 
                                if ( isset( $_SERVER['SCRIPT_NAME'] )
-                                       && preg_match( '/\.php5?/', $_SERVER['SCRIPT_NAME'] ) )
-                               {
+                                       && preg_match( '/\.php5?/', $_SERVER['SCRIPT_NAME'] )
+                               {
                                        # Check for SCRIPT_NAME, we handle index.php explicitly
                                        # But we do have some other .php files such as img_auth.php
                                        # Don't let root article paths clober the parsing for them
index 50bba7b..5ebf5a0 100644 (file)
@@ -95,8 +95,8 @@ class MediaWiki {
                        // Check variant links so that interwiki links don't have to worry
                        // about the possible different language variants
                        if ( count( $wgContLang->getVariants() ) > 1
-                               && !is_null( $ret ) && $ret->getArticleID() == 0 )
-                       {
+                               && !is_null( $ret ) && $ret->getArticleID() == 0
+                       {
                                $wgContLang->findVariantLink( $title, $ret );
                        }
                }
@@ -197,9 +197,9 @@ class MediaWiki {
                wfRunHooks( 'BeforeInitialize', array( &$title, &$unused, &$output, &$user, $request, $this ) );
 
                // Invalid titles. Bug 21776: The interwikis must redirect even if the page name is empty.
-               if ( is_null( $title ) || ( $title->getDBkey() == '' && $title->getInterwiki() == '' ) ||
-                       $title->isSpecial( 'Badtitle' ) )
-               {
+               if ( is_null( $title ) || ( $title->getDBkey() == '' && $title->getInterwiki() == '' )
+                       || $title->isSpecial( 'Badtitle' )
+               {
                        $this->context->setTitle( SpecialPage::getTitleFor( 'Badtitle' ) );
                        wfProfileOut( __METHOD__ );
                        throw new BadTitleError();
@@ -242,8 +242,8 @@ class MediaWiki {
                        }
                        // Check for a redirect loop
                        if ( !preg_match( '/^' . preg_quote( $wgServer, '/' ) . '/', $url )
-                               && $title->isLocal() )
-                       {
+                               && $title->isLocal()
+                       {
                                // 301 so google et al report the target as the actual url.
                                $output->redirect( $url, 301 );
                        } else {
@@ -253,11 +253,11 @@ class MediaWiki {
                        }
                // Redirect loops, no title in URL, $wgUsePathInfo URLs, and URLs with a variant
                } elseif ( $request->getVal( 'action', 'view' ) == 'view' && !$request->wasPosted()
-                       && ( $request->getVal( 'title' ) === null ||
-                               $title->getPrefixedDBkey() != $request->getVal( 'title' ) )
+                       && ( $request->getVal( 'title' ) === null
+                               || $title->getPrefixedDBkey() != $request->getVal( 'title' ) )
                        && !count( $request->getValueNames( array( 'action', 'title' ) ) )
-                       && wfRunHooks( 'TestCanonicalRedirect', array( $request, $title, $output ) ) )
-               {
+                       && wfRunHooks( 'TestCanonicalRedirect', array( $request, $title, $output ) )
+               {
                        if ( $title->isSpecialPage() ) {
                                list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
                                if ( $name ) {
@@ -358,12 +358,12 @@ class MediaWiki {
                $action = $request->getVal( 'action', 'view' );
                $file = ( $title->getNamespace() == NS_FILE ) ? $article->getFile() : null;
                if ( ( $action == 'view' || $action == 'render' ) // ... for actions that show content
-                       && !$request->getVal( 'oldid' ) && // ... and are not old revisions
-                       !$request->getVal( 'diff' ) && // ... and not when showing diff
-                       $request->getVal( 'redirect' ) != 'no' && // ... unless explicitly told not to
+                       && !$request->getVal( 'oldid' ) // ... and are not old revisions
+                       && !$request->getVal( 'diff' ) // ... and not when showing diff
+                       && $request->getVal( 'redirect' ) != 'no' // ... unless explicitly told not to
                        // ... and the article is not a non-redirect image page with associated file
-                       !( is_object( $file ) && $file->exists() && !$file->getRedirected() ) )
-               {
+                       && !( is_object( $file ) && $file->exists() && !$file->getRedirected() )
+               {
                        // Give extensions a change to ignore/handle redirects as needed
                        $ignoreRedirect = $target = false;
 
@@ -420,8 +420,8 @@ class MediaWiki {
                $user = $this->context->getUser();
 
                if ( !wfRunHooks( 'MediaWikiPerformAction',
-                       array( $output, $page, $title, $user, $request, $this ) ) )
-               {
+                               array( $output, $page, $title, $user, $request, $this ) )
+               {
                        wfProfileOut( __METHOD__ );
                        return;
                }
index ac0539d..45441fd 100644 (file)
@@ -500,34 +500,34 @@ class Xml {
                $options = self::option( $other, 'other', $selected === 'other' );
 
                foreach ( explode( "\n", $list ) as $option ) {
-                               $value = trim( $option );
-                               if ( $value == '' ) {
-                                       continue;
-                               } 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 ) == '**' ) {
-                                       // groupmember
-                                       $value = trim( substr( $value, 2 ) );
-                                       $options .= self::option( $value, $value, $selected === $value );
-                               } else {
-                                       // groupless reason list
-                                       if ( $optgroup ) {
-                                               $options .= self::closeElement( 'optgroup' );
-                                       }
-                                       $options .= self::option( $value, $value, $selected === $value );
-                                       $optgroup = false;
+                       $value = trim( $option );
+                       if ( $value == '' ) {
+                               continue;
+                       } 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 ) == '**' ) {
+                               // groupmember
+                               $value = trim( substr( $value, 2 ) );
+                               $options .= self::option( $value, $value, $selected === $value );
+                       } else {
+                               // groupless reason list
+                               if ( $optgroup ) {
+                                       $options .= self::closeElement( 'optgroup' );
+                               }
+                               $options .= self::option( $value, $value, $selected === $value );
+                               $optgroup = false;
                        }
+               }
 
-                       if ( $optgroup ) {
-                               $options .= self::closeElement( 'optgroup' );
-                       }
+               if ( $optgroup ) {
+                       $options .= self::closeElement( 'optgroup' );
+               }
 
                $attribs = array();
 
index e492bd4..34db1d2 100644 (file)
@@ -558,7 +558,7 @@ class HistoryPager extends ReverseChronologicalPager {
         *
         * @todo document some more, and maybe clean up the code (some params redundant?)
         *
-        * @param stdObject $row The database row corresponding to the previous line.
+        * @param stdClass $row The database row corresponding to the previous line.
         * @param mixed $next The database row corresponding to the next line
         *   (chronologically previous)
         * @param bool|string $notificationtimestamp
index 27037cb..bf69410 100644 (file)
@@ -41,7 +41,7 @@ class ApiFeedContributions extends ApiBase {
        public function execute() {
                $params = $this->extractRequestParams();
 
-               global $wgFeed, $wgFeedClasses, $wgSitename, $wgLanguageCode;
+               global $wgFeed, $wgFeedClasses, $wgFeedLimit, $wgSitename, $wgLanguageCode;
 
                if ( !$wgFeed ) {
                        $this->dieUsage( 'Syndication feeds are not available', 'feed-unavailable' );
@@ -81,6 +81,10 @@ class ApiFeedContributions extends ApiBase {
                        'showSizeDiff' => $params['showsizediff'],
                ) );
 
+               if ( $pager->getLimit() > $wgFeedLimit ) {
+                       $pager->setLimit( $wgFeedLimit );
+               }
+
                $feedItems = array();
                if ( $pager->getNumRows() > 0 ) {
                        foreach ( $pager->mResult as $row ) {
index a9aebe9..829ba6f 100644 (file)
@@ -185,11 +185,12 @@ class ApiMain extends ApiBase {
                        }
                }
 
-               global $wgAPIModules;
+               global $wgAPIModules, $wgAPIFormatModules;
                $this->mModuleMgr = new ApiModuleManager( $this );
                $this->mModuleMgr->addModules( self::$Modules, 'action' );
                $this->mModuleMgr->addModules( $wgAPIModules, 'action' );
                $this->mModuleMgr->addModules( self::$Formats, 'format' );
+               $this->mModuleMgr->addModules( $wgAPIFormatModules, 'format' );
 
                $this->mResult = new ApiResult( $this );
                $this->mEnableWrite = $enableWrite;
@@ -743,7 +744,11 @@ class ApiMain extends ApiBase {
                                $this->dieUsageMsg( array( 'missingparam', 'token' ) );
                        }
 
-                       if ( !$this->getUser()->matchEditToken( $moduleParams['token'], $salt, $this->getContext()->getRequest() ) ) {
+                       if ( !$this->getUser()->matchEditToken(
+                               $moduleParams['token'],
+                               $salt,
+                               $this->getContext()->getRequest() )
+                       ) {
                                $this->dieUsageMsg( 'sessionfailure' );
                        }
                }
index ddc032d..88904c0 100644 (file)
@@ -532,6 +532,9 @@ class ApiParse extends ApiBase {
         */
        private function languagesHtml( $languages ) {
                wfDeprecated( __METHOD__, '1.18' );
+               $this->setWarning( '"action=parse&prop=languageshtml" is deprecated ' .
+                       'and will be removed in MediaWiki 1.24. Use "prop=langlinks" ' .
+                       'to generate your own HTML.' );
 
                global $wgContLang, $wgHideInterlanguageLinks;
 
@@ -716,7 +719,8 @@ class ApiParse extends ApiBase {
                                ' langlinks      - Gives the language links in the parsed wikitext',
                                ' categories     - Gives the categories in the parsed wikitext',
                                ' categorieshtml - Gives the HTML version of the categories',
-                               ' languageshtml  - Gives the HTML version of the language links',
+                               ' languageshtml  - DEPRECATED. Will be removed in MediaWiki 1.24.',
+                               '                  Gives the HTML version of the language links',
                                ' links          - Gives the internal links in the parsed wikitext',
                                ' templates      - Gives the templates in the parsed wikitext',
                                ' images         - Gives the images in the parsed wikitext',
index cfc2244..fcd3180 100644 (file)
@@ -547,24 +547,20 @@ abstract class ApiQueryBase extends ApiBase {
         * @return void
         */
        public function showHiddenUsersAddBlockInfo( $showBlockInfo ) {
-               $userCanViewHiddenUsers = $this->getUser()->isAllowed( 'hideuser' );
-
-               if ( $showBlockInfo || !$userCanViewHiddenUsers ) {
-                       $this->addTables( 'ipblocks' );
-                       $this->addJoinConds( array(
-                               'ipblocks' => array( 'LEFT JOIN', 'ipb_user=user_id' ),
-                       ) );
+               $this->addTables( 'ipblocks' );
+               $this->addJoinConds( array(
+                       'ipblocks' => array( 'LEFT JOIN', 'ipb_user=user_id' ),
+               ) );
 
-                       $this->addFields( 'ipb_deleted' );
+               $this->addFields( 'ipb_deleted' );
 
-                       if ( $showBlockInfo ) {
-                               $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry' ) );
-                       }
+               if ( $showBlockInfo ) {
+                       $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry' ) );
+               }
 
-                       // Don't show hidden names
-                       if ( !$userCanViewHiddenUsers ) {
-                               $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' );
-                       }
+               // Don't show hidden names
+               if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
+                       $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' );
                }
        }
 
index 148c4dd..dffe301 100644 (file)
@@ -35,11 +35,7 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
 
        protected function getInitialisedRepoGroup() {
                $repoGroup = RepoGroup::singleton();
-
-               if ( !$repoGroup->reposInitialised ) {
-                       $repoGroup->initialiseRepos();
-               }
-
+               $repoGroup->initialiseRepos();
                return $repoGroup;
        }
 
@@ -55,7 +51,7 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
                        $repos[] = array_intersect_key( $repo->getInfo(), $props );
                } );
 
-               $repos[] = array_intersect_key( $repoGroup->localRepo->getInfo(), $props );
+               $repos[] = array_intersect_key( $repoGroup->getLocalRepo()->getInfo(), $props );
 
                $result = $this->getResult();
                $result->setIndexedTagName( $repos, 'repo' );
@@ -88,7 +84,7 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
 
                return array_values( array_unique( array_merge(
                        $props,
-                       array_keys( $repoGroup->localRepo->getInfo() )
+                       array_keys( $repoGroup->getLocalRepo()->getInfo() )
                ) ) );
        }
 
index b44565e..653feab 100644 (file)
@@ -198,7 +198,10 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        }
 
                        // Check permissions
-                       if ( isset( $show['patrolled'] ) || isset( $show['!patrolled'] ) || isset( $show['unpatrolled'] ) ) {
+                       if ( isset( $show['patrolled'] )
+                               || isset( $show['!patrolled'] )
+                               || isset( $show['unpatrolled'] )
+                       ) {
                                if ( !$user->useRCPatrol() && !$user->useNPPatrol() ) {
                                        $this->dieUsage(
                                                'You need the patrol right to request the patrolled flag',
index 8eed1a5..d2ec26e 100644 (file)
@@ -156,10 +156,10 @@ class BacklinkCache {
 
        /**
         * Get the backlinks for a given table. Cached in process memory only.
-        * @param $table String
-        * @param $startId Integer|false
-        * @param $endId Integer|false
-        * @param $max Integer|INF
+        * @param string $table
+        * @param int|bool $startId
+        * @param int|bool $endId
+        * @param int|INF $max
         * @return TitleArrayFromResult
         */
        public function getLinks( $table, $startId = false, $endId = false, $max = INF ) {
@@ -274,8 +274,6 @@ class BacklinkCache {
        protected function getConditions( $table ) {
                $prefix = $this->getPrefix( $table );
 
-               // @todo FIXME: imagelinks and categorylinks do not rely on getNamespace,
-               // they could be moved up for nicer case statements
                switch ( $table ) {
                        case 'pagelinks':
                        case 'templatelinks':
@@ -297,14 +295,9 @@ class BacklinkCache {
                                );
                                break;
                        case 'imagelinks':
-                               $conds = array(
-                                       'il_to' => $this->title->getDBkey(),
-                                       "page_id={$prefix}_from"
-                               );
-                               break;
                        case 'categorylinks':
                                $conds = array(
-                                       'cl_to' => $this->title->getDBkey(),
+                                       "{$prefix}_to" => $this->title->getDBkey(),
                                        "page_id={$prefix}_from"
                                );
                                break;
@@ -433,7 +426,7 @@ class BacklinkCache {
                        $cacheEntry['numRows'] += $partitions['numRows'];
                        $cacheEntry['batches'] = array_merge( $cacheEntry['batches'], $partitions['batches'] );
                        if ( count( $partitions['batches'] ) ) {
-                               list( $lStart, $lEnd ) = end( $partitions['batches'] );
+                               list( , $lEnd ) = end( $partitions['batches'] );
                                $start = $lEnd + 1; // pick up after this inclusive range
                        }
                } while ( $partitions['numRows'] >= $selectSize );
index d33f3f6..0c00c6b 100644 (file)
@@ -153,6 +153,7 @@ abstract class FileCacheBase {
 
        /**
         * Save and compress text to the cache
+        * @param string $text
         * @return string compressed text
         */
        public function saveText( $text ) {
index 0d706c0..de2a728 100644 (file)
@@ -78,6 +78,7 @@ class LinkCache {
        /**
         * General accessor to get/set whether SELECT FOR UPDATE should be used
         *
+        * @param $update
         * @return bool
         */
        public function forUpdate( $update = null ) {
index 7d029bc..ccb94a2 100644 (file)
@@ -1193,18 +1193,26 @@ class LCStoreCDB implements LCStore {
                if ( !isset( $this->readers[$code] ) ) {
                        $fileName = $this->getFileName( $code );
 
-                       if ( !file_exists( $fileName ) ) {
-                               $this->readers[$code] = false;
-                       } else {
-                               $this->readers[$code] = CdbReader::open( $fileName );
+                       $this->readers[$code] = false;
+                       if ( file_exists( $fileName ) ) {
+                               try {
+                                       $this->readers[$code] = CdbReader::open( $fileName );
+                               } catch ( CdbException $e ) {
+                                       wfDebug( __METHOD__ . ": unable to open cdb file for reading" );
+                               }
                        }
                }
 
                if ( !$this->readers[$code] ) {
                        return null;
                } else {
-                       $value = $this->readers[$code]->get( $key );
-
+                       $value = false;
+                       try {
+                               $value = $this->readers[$code]->get( $key );
+                       } catch ( CdbException $e ) {
+                               wfDebug( __METHOD__ . ": CdbException caught, error message was "
+                                       . $e->getMessage() );
+                       }
                        if ( $value === false ) {
                                return null;
                        }
@@ -1226,13 +1234,21 @@ class LCStoreCDB implements LCStore {
                        $this->readers[$code]->close();
                }
 
-               $this->writer = CdbWriter::open( $this->getFileName( $code ) );
+               try {
+                       $this->writer = CdbWriter::open( $this->getFileName( $code ) );
+               } catch ( CdbException $e ) {
+                       throw new MWException( $e->getMessage() );
+               }
                $this->currentLang = $code;
        }
 
        public function finishWrite() {
                // Close the writer
-               $this->writer->close();
+               try {
+                       $this->writer->close();
+               } catch ( CdbException $e ) {
+                       throw new MWException( $e->getMessage() );
+               }
                $this->writer = null;
                unset( $this->readers[$this->currentLang] );
                $this->currentLang = null;
@@ -1242,7 +1258,11 @@ class LCStoreCDB implements LCStore {
                if ( is_null( $this->writer ) ) {
                        throw new MWException( __CLASS__ . ': must call startWrite() before calling set()' );
                }
-               $this->writer->set( $key, serialize( $value ) );
+               try {
+                       $this->writer->set( $key, serialize( $value ) );
+               } catch ( CdbException $e ) {
+                       throw new MWException( $e->getMessage() );
+               }
        }
 
        protected function getFileName( $code ) {
diff --git a/includes/cache/MapCacheLRU.php b/includes/cache/MapCacheLRU.php
new file mode 100644 (file)
index 0000000..3539d8f
--- /dev/null
@@ -0,0 +1,113 @@
+<?php
+/**
+ * Per-process memory cache for storing items.
+ *
+ * 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 Cache
+ */
+
+/**
+ * Handles a simple LRU key/value map with a maximum number of entries
+ *
+ * Use ProcessCacheLRU if hierarchical purging is needed or objects can become stale
+ *
+ * @see ProcessCacheLRU
+ * @ingroup Cache
+ */
+class MapCacheLRU {
+       /** @var Array */
+       protected $cache = array(); // (key => value)
+
+       protected $maxCacheKeys; // integer; max entries
+
+       /**
+        * @param $maxKeys integer Maximum number of entries allowed (min 1).
+        * @throws MWException When $maxCacheKeys is not an int or =< 0.
+        */
+       public function __construct( $maxKeys ) {
+               if ( !is_int( $maxKeys ) || $maxKeys < 1 ) {
+                       throw new MWException( __METHOD__ . " must be given an integer and >= 1" );
+               }
+               $this->maxCacheKeys = $maxKeys;
+       }
+
+       /**
+        * Set a key/value pair.
+        * This will prune the cache if it gets too large based on LRU.
+        * If the item is already set, it will be pushed to the top of the cache.
+        *
+        * @param $key string
+        * @param $value mixed
+        * @return void
+        */
+       public function set( $key, $value ) {
+               if ( isset( $this->cache[$key] ) ) {
+                       $this->ping( $key ); // push to top
+               } elseif ( count( $this->cache ) >= $this->maxCacheKeys ) {
+                       reset( $this->cache );
+                       $evictKey = key( $this->cache );
+                       unset( $this->cache[$evictKey] );
+               }
+               $this->cache[$key] = $value;
+       }
+
+       /**
+        * Get the value for a key.
+        * This returns null if the key is not set.
+        * If the item is already set, it will be pushed to the top of the cache.
+        *
+        * @param $key string
+        * @param $prop string
+        * @return mixed
+        */
+       public function get( $key ) {
+               if ( isset( $this->cache[$key] ) ) {
+                       $this->ping( $key ); // push to top
+                       return $this->cache[$key];
+               } else {
+                       return null;
+               }
+       }
+
+       /**
+        * Clear one or several cache entries, or all cache entries
+        *
+        * @param $keys string|Array
+        * @return void
+        */
+       public function clear( $keys = null ) {
+               if ( $keys === null ) {
+                       $this->cache = array();
+               } else {
+                       foreach ( (array)$keys as $key ) {
+                               unset( $this->cache[$key] );
+                       }
+               }
+       }
+
+       /**
+        * Push an entry to the top of the cache
+        *
+        * @param $key string
+        */
+       protected function ping( $key ) {
+               $item = $this->cache[$key];
+               unset( $this->cache[$key] );
+               $this->cache[$key] = $item;
+       }
+}
index 2e4c1e9..cea3bf2 100644 (file)
@@ -66,6 +66,7 @@ class UserCache {
         *
         * @param integer $userId
         * @param string $ip
+        * @return string
         * @since 1.22
         */
        public function getUserName( $userId, $ip ) {
index 4837525..1727da0 100644 (file)
@@ -57,14 +57,9 @@ class EnhancedChangesList extends ChangesList {
        public function recentChangesLine( &$baseRC, $watched = false ) {
                wfProfileIn( __METHOD__ );
 
-               # Create a specialised object
-               $cacheEntry = RCCacheEntry::newFromParent( $baseRC );
-
-               $curIdEq = array( 'curid' => $cacheEntry->mAttribs['rc_cur_id'] );
-
                # If it's a new day, add the headline and flush the cache
                $date = $this->getLanguage()->userDate(
-                       $cacheEntry->mAttribs['rc_timestamp'],
+                       $baseRC->mAttribs['rc_timestamp'],
                        $this->getUser()
                );
 
@@ -78,6 +73,11 @@ class EnhancedChangesList extends ChangesList {
                        $this->lastdate = $date;
                }
 
+               # Create a specialised object
+               $cacheEntry = RCCacheEntry::newFromParent( $baseRC );
+
+               $curIdEq = array( 'curid' => $cacheEntry->mAttribs['rc_cur_id'] );
+
                # Should patrol-related stuff be shown?
                $cacheEntry->unpatrolled = $this->showAsUnpatrolled( $cacheEntry );
 
@@ -433,6 +433,7 @@ class EnhancedChangesList extends ChangesList {
 
                $r .= $users;
                $r .= $this->numberofWatchingusers( $block[0]->numberofWatchingusers );
+               $r .= '</td></tr>';
 
                # Sub-entries
                foreach ( $block as $rcObj ) {
index c4584ae..94b5c57 100644 (file)
  * @ingroup Content
  */
 class TextContentHandler extends ContentHandler {
+       // @codingStandardsIgnoreStart bug 57585
        public function __construct( $modelId = CONTENT_MODEL_TEXT,
                $formats = array( CONTENT_FORMAT_TEXT )
        ) {
                parent::__construct( $modelId, $formats );
        }
+       // @codingStandardsIgnoreEnd
 
        /**
         * Returns the content's text as-is.
index 9ba1851..7275bd9 100644 (file)
@@ -1105,7 +1105,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        wfDebug( "SQL ERROR (ignored): $error\n" );
                        $this->ignoreErrors( $ignore );
                } else {
-                       $sql1line = str_replace( "\n", "\\n", $sql );
+                       $sql1line = mb_substr( str_replace( "\n", "\\n", $sql ), 0, 5 * 1024 );
                        wfLogDBError( "$fname\t{$this->mServer}\t$errno\t$error\t$sql1line\n" );
                        wfDebug( "SQL ERROR: " . $error . "\n" );
                        throw new DBQueryError( $this, $error, $errno, $sql, $fname );
index e0ad003..61b9a17 100644 (file)
@@ -123,7 +123,13 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                // Set SQL mode, default is turning them all off, can be overridden or skipped with null
                if ( is_string( $wgSQLMode ) ) {
                        $mode = $this->addQuotes( $wgSQLMode );
-                       $this->query( "SET sql_mode = $mode", __METHOD__ );
+                       // Use doQuery() to avoid opening implicit transactions (DBO_TRX)
+                       $success = $this->doQuery( "SET sql_mode = $mode", __METHOD__ );
+                       if ( !$success ) {
+                               wfLogDBError( "Error setting sql_mode to $mode on server {$this->mServer}" );
+                               wfProfileOut( __METHOD__ );
+                               return $this->reportConnectionError( "Error setting sql_mode to $mode" );
+                       }
                }
 
                $this->mOpened = true;
index 13bb8ea..10715e4 100644 (file)
@@ -1107,7 +1107,7 @@ class DatabaseOracle extends DatabaseBase {
                        if ( $sl < 0 ) {
                                continue;
                        }
-                       if ( '-' == $line{0} && '-' == $line{1} ) {
+                       if ( '-' == $line[0] && '-' == $line[1] ) {
                                continue;
                        }
 
@@ -1121,7 +1121,7 @@ class DatabaseOracle extends DatabaseBase {
                                        $dollarquote = true;
                                }
                        } elseif ( !$dollarquote ) {
-                               if ( ';' == $line{$sl} && ( $sl < 2 || ';' != $line{$sl - 1} ) ) {
+                               if ( ';' == $line[$sl] && ( $sl < 2 || ';' != $line[$sl - 1] ) ) {
                                        $done = true;
                                        $line = substr( $line, 0, $sl );
                                }
index a3f180c..9cd7708 100644 (file)
@@ -246,10 +246,11 @@ class LinksUpdate extends SqlDataUpdate {
        public static function queueRecursiveJobsForTable( Title $title, $table ) {
                wfProfileIn( __METHOD__ );
                if ( $title->getBacklinkCache()->hasLinks( $table ) ) {
-                       $job = new RefreshLinksJob2(
+                       $job = new RefreshLinksJob(
                                $title,
                                array(
-                                       'table' => $table,
+                                       'table'     => $table,
+                                       'recursive' => true,
                                ) + Job::newRootJobParams( // "overall" refresh links job info
                                        "refreshlinks:{$table}:{$title->getPrefixedText()}"
                                )
index f80eacc..6e74f2c 100644 (file)
@@ -924,7 +924,7 @@ class DifferenceEngine extends ContextSource {
                $data[] = wfTimestamp( TS_DB );
 
                return "<!-- diff generator: " .
-                       implode( " ",   array_map( "htmlspecialchars", $data ) ) .
+                       implode( " ", array_map( "htmlspecialchars", $data ) ) .
                        " -->\n";
        }
 
index 462b0b9..9e9d976 100644 (file)
@@ -59,6 +59,7 @@ class ExternalStore {
                }
 
                $class = 'ExternalStore' . ucfirst( $proto );
+
                // Any custom modules should be added to $wgAutoLoadClasses for on-demand loading
                return class_exists( $class ) ? new $class( $params ) : false;
        }
@@ -120,6 +121,7 @@ class ExternalStore {
                                $retval[$url] = false;
                        }
                }
+
                return $retval;
        }
 
index 46a8937..b7e5469 100644 (file)
@@ -37,11 +37,12 @@ class ExternalStoreDB extends ExternalStoreMedium {
         */
        public function fetchFromURL( $url ) {
                list( $cluster, $id, $itemID ) = $this->parseURL( $url );
-               $ret =& $this->fetchBlob( $cluster, $id, $itemID );
+               $ret = $this->fetchBlob( $cluster, $id, $itemID );
 
                if ( $itemID !== false && $ret !== false ) {
                        return $ret->getItem( $itemID );
                }
+
                return $ret;
        }
 
@@ -66,6 +67,7 @@ class ExternalStoreDB extends ExternalStoreMedium {
                $ret = array();
                foreach ( $batched as $cluster => $batchByCluster ) {
                        $res = $this->batchFetchBlobs( $cluster, $batchByCluster );
+                       /** @var HistoryBlob $blob */
                        foreach ( $res as $id => $blob ) {
                                foreach ( $batchByCluster[$id] as $itemID ) {
                                        $url = $inverseUrlMap[$cluster][$id][$itemID];
@@ -77,6 +79,7 @@ class ExternalStoreDB extends ExternalStoreMedium {
                                }
                        }
                }
+
                return $ret;
        }
 
@@ -96,6 +99,7 @@ class ExternalStoreDB extends ExternalStoreMedium {
                if ( $dbw->getFlag( DBO_TRX ) ) {
                        $dbw->commit( __METHOD__ );
                }
+
                return "DB://$cluster/$id";
        }
 
@@ -105,7 +109,7 @@ class ExternalStoreDB extends ExternalStoreMedium {
         * @param string $cluster cluster name
         * @return LoadBalancer object
         */
-       function &getLoadBalancer( $cluster ) {
+       function getLoadBalancer( $cluster ) {
                $wiki = isset( $this->params['wiki'] ) ? $this->params['wiki'] : false;
 
                return wfGetLBFactory()->getExternalLB( $cluster, $wiki );
@@ -117,11 +121,11 @@ class ExternalStoreDB extends ExternalStoreMedium {
         * @param string $cluster cluster name
         * @return DatabaseBase object
         */
-       function &getSlave( $cluster ) {
+       function getSlave( $cluster ) {
                global $wgDefaultExternalStore;
 
                $wiki = isset( $this->params['wiki'] ) ? $this->params['wiki'] : false;
-               $lb =& $this->getLoadBalancer( $cluster );
+               $lb = $this->getLoadBalancer( $cluster );
 
                if ( !in_array( "DB://" . $cluster, (array)$wgDefaultExternalStore ) ) {
                        wfDebug( "read only external store" );
@@ -139,9 +143,10 @@ class ExternalStoreDB extends ExternalStoreMedium {
         * @param string $cluster cluster name
         * @return DatabaseBase object
         */
-       function &getMaster( $cluster ) {
+       function getMaster( $cluster ) {
                $wiki = isset( $this->params['wiki'] ) ? $this->params['wiki'] : false;
-               $lb =& $this->getLoadBalancer( $cluster );
+               $lb = $this->getLoadBalancer( $cluster );
+
                return $lb->getConnection( DB_MASTER, array(), $wiki );
        }
 
@@ -151,11 +156,12 @@ class ExternalStoreDB extends ExternalStoreMedium {
         * @param $db DatabaseBase
         * @return String: table name ('blobs' by default)
         */
-       function getTable( &$db ) {
+       function getTable( $db ) {
                $table = $db->getLBInfo( 'blobs table' );
                if ( is_null( $table ) ) {
                        $table = 'blobs';
                }
+
                return $table;
        }
 
@@ -169,7 +175,7 @@ class ExternalStoreDB extends ExternalStoreMedium {
         * @return mixed
         * @private
         */
-       function &fetchBlob( $cluster, $id, $itemID ) {
+       function fetchBlob( $cluster, $id, $itemID ) {
                /**
                 * One-step cache variable to hold base blobs; operations that
                 * pull multiple revisions may often pull multiple times from
@@ -182,20 +188,21 @@ class ExternalStoreDB extends ExternalStoreMedium {
                if ( isset( $externalBlobCache[$cacheID] ) ) {
                        wfDebugLog( 'ExternalStoreDB-cache',
                                "ExternalStoreDB::fetchBlob cache hit on $cacheID\n" );
+
                        return $externalBlobCache[$cacheID];
                }
 
                wfDebugLog( 'ExternalStoreDB-cache',
                        "ExternalStoreDB::fetchBlob cache miss on $cacheID\n" );
 
-               $dbr =& $this->getSlave( $cluster );
+               $dbr = $this->getSlave( $cluster );
                $ret = $dbr->selectField( $this->getTable( $dbr ),
                        'blob_text', array( 'blob_id' => $id ), __METHOD__ );
                if ( $ret === false ) {
                        wfDebugLog( 'ExternalStoreDB',
                                "ExternalStoreDB::fetchBlob master fallback on $cacheID\n" );
                        // Try the master
-                       $dbw =& $this->getMaster( $cluster );
+                       $dbw = $this->getMaster( $cluster );
                        $ret = $dbw->selectField( $this->getTable( $dbw ),
                                'blob_text', array( 'blob_id' => $id ), __METHOD__ );
                        if ( $ret === false ) {
@@ -208,7 +215,8 @@ class ExternalStoreDB extends ExternalStoreMedium {
                        $ret = unserialize( $ret );
                }
 
-               $externalBlobCache = array( $cacheID => &$ret );
+               $externalBlobCache = array( $cacheID => $ret );
+
                return $ret;
        }
 
@@ -217,7 +225,8 @@ class ExternalStoreDB extends ExternalStoreMedium {
         *
         * @param string $cluster A cluster name valid for use with LBFactory
         * @param array $ids A map from the blob_id's to look for to the requested itemIDs in the blobs
-        * @return array A map from the blob_id's requested to their content.  Unlocated ids are not represented
+        * @return array A map from the blob_id's requested to their content.
+        *   Unlocated ids are not represented
         */
        function batchFetchBlobs( $cluster, array $ids ) {
                $dbr = $this->getSlave( $cluster );
@@ -248,6 +257,7 @@ class ExternalStoreDB extends ExternalStoreMedium {
                                " master on '$cluster' failed locating items: " .
                                implode( ',', array_keys( $ids ) ) . "\n" );
                }
+
                return $ret;
        }
 
@@ -274,6 +284,7 @@ class ExternalStoreDB extends ExternalStoreMedium {
 
        protected function parseURL( $url ) {
                $path = explode( '/', $url );
+
                return array(
                        $path[2], // cluster
                        $path[3], // id
index 02bdcb5..a526df6 100644 (file)
@@ -61,9 +61,10 @@ abstract class ExternalStoreMedium {
                        // Dont return when false to allow for simpler implementations.
                        // errored urls are handled in ExternalStore::batchFetchFromURLs
                        if ( $data !== false ) {
-                               $retval[$urls] = $data;
+                               $retval[$url] = $data;
                        }
                }
+
                return $retval;
        }
 
index aa48679..f329b73 100644 (file)
@@ -43,6 +43,7 @@ class ExternalStoreMwstore extends ExternalStoreMedium {
                        // backends should at least have "read-after-create" consistency.
                        return $be->getFileContents( array( 'src' => $url ) );
                }
+
                return false;
        }
 
@@ -63,9 +64,10 @@ class ExternalStoreMwstore extends ExternalStoreMedium {
                }
                $blobs = array();
                foreach ( $pathsByBackend as $backendName => $paths ) {
-                       $be = FileBackendGroup::get( $backendName );
+                       $be = FileBackendGroup::singleton()->get( $backendName );
                        $blobs = $blobs + $be->getFileContentsMulti( array( 'srcs' => $paths ) );
                }
+
                return $blobs;
        }
 
@@ -90,6 +92,7 @@ class ExternalStoreMwstore extends ExternalStoreMedium {
                                return $url;
                        }
                }
+
                return false;
        }
 }
index 8f0a133..3a0aa97 100644 (file)
  * @ingroup FileBackend
  */
 class FSFile {
-       protected $path; // path to file
-       protected $sha1Base36; // file SHA-1 in base 36
+       /** @var string Path to file */
+       protected $path;
+
+       /** @var string File SHA-1 in base 36  */
+       protected $sha1Base36;
 
        /**
         * Sets up the file object
@@ -82,6 +85,7 @@ class FSFile {
                if ( $timestamp !== false ) {
                        $timestamp = wfTimestamp( TS_MW, $timestamp );
                }
+
                return $timestamp;
        }
 
@@ -98,7 +102,7 @@ class FSFile {
         * Get an associative array containing information about
         * a file with the given storage path.
         *
-        * @param Mixed $ext: the file extension, or true to extract it from the filename.
+        * @param mixed $ext The file extension, or true to extract it from the filename.
         *             Set it to false to ignore the extension.
         *
         * @return array
@@ -147,13 +151,14 @@ class FSFile {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $info;
        }
 
        /**
         * Placeholder file properties to use for files that don't exist
         *
-        * @return Array
+        * @return array
         */
        public static function placeholderProps() {
                $info = array();
@@ -165,6 +170,7 @@ class FSFile {
                $info['width'] = 0;
                $info['height'] = 0;
                $info['bits'] = 0;
+
                return $info;
        }
 
@@ -172,7 +178,7 @@ class FSFile {
         * Exract image size information
         *
         * @param array $gis
-        * @return Array
+        * @return array
         */
        protected function extractImageSizeInfo( array $gis ) {
                $info = array();
@@ -184,6 +190,7 @@ class FSFile {
                } else {
                        $info['bits'] = 0;
                }
+
                return $info;
        }
 
@@ -202,6 +209,7 @@ class FSFile {
 
                if ( $this->sha1Base36 !== null && !$recache ) {
                        wfProfileOut( __METHOD__ );
+
                        return $this->sha1Base36;
                }
 
@@ -214,6 +222,7 @@ class FSFile {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $this->sha1Base36;
        }
 
@@ -225,6 +234,7 @@ class FSFile {
         */
        public static function extensionFromPath( $path ) {
                $i = strrpos( $path, '.' );
+
                return strtolower( $i ? substr( $path, $i + 1 ) : '' );
        }
 
@@ -232,12 +242,13 @@ class FSFile {
         * Get an associative array containing information about a file in the local filesystem.
         *
         * @param string $path absolute local filesystem path
-        * @param Mixed $ext: the file extension, or true to extract it from the filename.
-        *             Set it to false to ignore the extension.
+        * @param mixed $ext The file extension, or true to extract it from the filename.
+        *   Set it to false to ignore the extension.
         * @return array
         */
        public static function getPropsFromPath( $path, $ext = true ) {
                $fsFile = new self( $path );
+
                return $fsFile->getProps( $ext );
        }
 
@@ -253,6 +264,7 @@ class FSFile {
         */
        public static function getSha1Base36FromPath( $path ) {
                $fsFile = new self( $path );
+
                return $fsFile->getSha1Base36();
        }
 }
index 6d64216..8438919 100644 (file)
  * @since 1.19
  */
 class FSFileBackend extends FileBackendStore {
-       protected $basePath; // string; directory holding the container directories
-       /** @var Array Map of container names to root paths */
-       protected $containerPaths = array(); // for custom container paths
-       protected $fileMode; // integer; file permission mode
-       protected $fileOwner; // string; required OS username to own files
-       protected $currentUser; // string; OS username running this script
-
-       /** @var Array */
+       /** @var string Directory holding the container directories */
+       protected $basePath;
+
+       /** @var array Map of container names to root paths for custom container paths */
+       protected $containerPaths = array();
+
+       /** @var int File permission mode */
+       protected $fileMode;
+
+       /** @var string Required OS username to own files */
+       protected $fileOwner;
+
+       /** @var string OS username running this script */
+       protected $currentUser;
+
+       /** @var array */
        protected $hadWarningErrors = array();
 
        /**
@@ -90,6 +98,7 @@ class FSFileBackend extends FileBackendStore {
                                return $relStoragePath;
                        }
                }
+
                return null;
        }
 
@@ -125,6 +134,7 @@ class FSFileBackend extends FileBackendStore {
                } elseif ( isset( $this->basePath ) ) {
                        return "{$this->basePath}/{$fullCont}";
                }
+
                return null; // no container base path defined
        }
 
@@ -144,6 +154,7 @@ class FSFileBackend extends FileBackendStore {
                if ( $relPath != '' ) {
                        $fsPath .= "/{$relPath}";
                }
+
                return $fsPath;
        }
 
@@ -174,6 +185,7 @@ class FSFileBackend extends FileBackendStore {
                $dest = $this->resolveToFSPath( $params['dst'] );
                if ( $dest === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -181,6 +193,7 @@ class FSFileBackend extends FileBackendStore {
                        $tempFile = TempFSFile::factory( 'create_', 'tmp' );
                        if ( !$tempFile ) {
                                $status->fatal( 'backend-fail-create', $params['dst'] );
+
                                return $status;
                        }
                        $this->trapWarnings();
@@ -188,6 +201,7 @@ class FSFileBackend extends FileBackendStore {
                        $this->untrapWarnings();
                        if ( $bytes === false ) {
                                $status->fatal( 'backend-fail-create', $params['dst'] );
+
                                return $status;
                        }
                        $cmd = implode( ' ', array(
@@ -203,6 +217,7 @@ class FSFileBackend extends FileBackendStore {
                        $this->untrapWarnings();
                        if ( $bytes === false ) {
                                $status->fatal( 'backend-fail-create', $params['dst'] );
+
                                return $status;
                        }
                        $this->chmod( $dest );
@@ -214,7 +229,7 @@ class FSFileBackend extends FileBackendStore {
        /**
         * @see FSFileBackend::doExecuteOpHandlesInternal()
         */
-       protected function _getResponseCreate( $errors, Status $status, array $params, $cmd ) {
+       protected function getResponseCreate( $errors, Status $status, array $params, $cmd ) {
                if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
                        $status->fatal( 'backend-fail-create', $params['dst'] );
                        trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
@@ -227,6 +242,7 @@ class FSFileBackend extends FileBackendStore {
                $dest = $this->resolveToFSPath( $params['dst'] );
                if ( $dest === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -248,6 +264,7 @@ class FSFileBackend extends FileBackendStore {
                                        trigger_error( __METHOD__ . ": copy() failed but returned true." );
                                }
                                $status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
+
                                return $status;
                        }
                        $this->chmod( $dest );
@@ -259,7 +276,7 @@ class FSFileBackend extends FileBackendStore {
        /**
         * @see FSFileBackend::doExecuteOpHandlesInternal()
         */
-       protected function _getResponseStore( $errors, Status $status, array $params, $cmd ) {
+       protected function getResponseStore( $errors, Status $status, array $params, $cmd ) {
                if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
                        $status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
                        trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
@@ -272,12 +289,14 @@ class FSFileBackend extends FileBackendStore {
                $source = $this->resolveToFSPath( $params['src'] );
                if ( $source === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
                $dest = $this->resolveToFSPath( $params['dst'] );
                if ( $dest === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -285,6 +304,7 @@ class FSFileBackend extends FileBackendStore {
                        if ( empty( $params['ignoreMissingSource'] ) ) {
                                $status->fatal( 'backend-fail-copy', $params['src'] );
                        }
+
                        return $status; // do nothing; either OK or bad status
                }
 
@@ -308,6 +328,7 @@ class FSFileBackend extends FileBackendStore {
                                        trigger_error( __METHOD__ . ": copy() failed but returned true." );
                                }
                                $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+
                                return $status;
                        }
                        $this->chmod( $dest );
@@ -319,7 +340,7 @@ class FSFileBackend extends FileBackendStore {
        /**
         * @see FSFileBackend::doExecuteOpHandlesInternal()
         */
-       protected function _getResponseCopy( $errors, Status $status, array $params, $cmd ) {
+       protected function getResponseCopy( $errors, Status $status, array $params, $cmd ) {
                if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
                        $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
                        trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
@@ -332,12 +353,14 @@ class FSFileBackend extends FileBackendStore {
                $source = $this->resolveToFSPath( $params['src'] );
                if ( $source === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
                $dest = $this->resolveToFSPath( $params['dst'] );
                if ( $dest === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -345,6 +368,7 @@ class FSFileBackend extends FileBackendStore {
                        if ( empty( $params['ignoreMissingSource'] ) ) {
                                $status->fatal( 'backend-fail-move', $params['src'] );
                        }
+
                        return $status; // do nothing; either OK or bad status
                }
 
@@ -362,6 +386,7 @@ class FSFileBackend extends FileBackendStore {
                        clearstatcache(); // file no longer at source
                        if ( !$ok ) {
                                $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+
                                return $status;
                        }
                }
@@ -372,7 +397,7 @@ class FSFileBackend extends FileBackendStore {
        /**
         * @see FSFileBackend::doExecuteOpHandlesInternal()
         */
-       protected function _getResponseMove( $errors, Status $status, array $params, $cmd ) {
+       protected function getResponseMove( $errors, Status $status, array $params, $cmd ) {
                if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
                        $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
                        trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
@@ -385,6 +410,7 @@ class FSFileBackend extends FileBackendStore {
                $source = $this->resolveToFSPath( $params['src'] );
                if ( $source === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
@@ -392,6 +418,7 @@ class FSFileBackend extends FileBackendStore {
                        if ( empty( $params['ignoreMissingSource'] ) ) {
                                $status->fatal( 'backend-fail-delete', $params['src'] );
                        }
+
                        return $status; // do nothing; either OK or bad status
                }
 
@@ -407,6 +434,7 @@ class FSFileBackend extends FileBackendStore {
                        $this->untrapWarnings();
                        if ( !$ok ) {
                                $status->fatal( 'backend-fail-delete', $params['src'] );
+
                                return $status;
                        }
                }
@@ -417,13 +445,19 @@ class FSFileBackend extends FileBackendStore {
        /**
         * @see FSFileBackend::doExecuteOpHandlesInternal()
         */
-       protected function _getResponseDelete( $errors, Status $status, array $params, $cmd ) {
+       protected function getResponseDelete( $errors, Status $status, array $params, $cmd ) {
                if ( $errors !== '' && !( wfIsWindows() && $errors[0] === " " ) ) {
                        $status->fatal( 'backend-fail-delete', $params['src'] );
                        trigger_error( "$cmd\n$errors", E_USER_WARNING ); // command output
                }
        }
 
+       /**
+        * @param string $fullCont
+        * @param $dirRel
+        * @param array $params
+        * @return Status
+        */
        protected function doPrepareInternal( $fullCont, $dirRel, array $params ) {
                $status = Status::newGood();
                list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
@@ -444,6 +478,7 @@ class FSFileBackend extends FileBackendStore {
                if ( is_dir( $dir ) && !$existed ) {
                        $status->merge( $this->doSecureInternal( $fullCont, $dirRel, $params ) );
                }
+
                return $status;
        }
 
@@ -471,6 +506,7 @@ class FSFileBackend extends FileBackendStore {
                                $status->fatal( 'backend-fail-create', "{$storeDir}/.htaccess" );
                        }
                }
+
                return $status;
        }
 
@@ -498,6 +534,7 @@ class FSFileBackend extends FileBackendStore {
                        }
                        $this->untrapWarnings();
                }
+
                return $status;
        }
 
@@ -511,6 +548,7 @@ class FSFileBackend extends FileBackendStore {
                        rmdir( $dir ); // remove directory if empty
                }
                $this->untrapWarnings();
+
                return $status;
        }
 
@@ -557,7 +595,10 @@ class FSFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::getDirectoryListInternal()
-        * @return Array|null
+        * @param string $fullCont
+        * @param string $dirRel
+        * @param array $params
+        * @return array|null
         */
        public function getDirectoryListInternal( $fullCont, $dirRel, array $params ) {
                list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
@@ -566,17 +607,23 @@ class FSFileBackend extends FileBackendStore {
                $exists = is_dir( $dir );
                if ( !$exists ) {
                        wfDebug( __METHOD__ . "() given directory does not exist: '$dir'\n" );
+
                        return array(); // nothing under this dir
                } elseif ( !is_readable( $dir ) ) {
                        wfDebug( __METHOD__ . "() given directory is unreadable: '$dir'\n" );
+
                        return null; // bad permissions?
                }
+
                return new FSFileBackendDirList( $dir, $params );
        }
 
        /**
         * @see FileBackendStore::getFileListInternal()
-        * @return Array|FSFileBackendFileList|null
+        * @param string $fullCont
+        * @param string $dirRel
+        * @param array $params
+        * @return array|FSFileBackendFileList|null
         */
        public function getFileListInternal( $fullCont, $dirRel, array $params ) {
                list( , $shortCont, ) = FileBackend::splitStoragePath( $params['dir'] );
@@ -585,11 +632,14 @@ class FSFileBackend extends FileBackendStore {
                $exists = is_dir( $dir );
                if ( !$exists ) {
                        wfDebug( __METHOD__ . "() given directory does not exist: '$dir'\n" );
+
                        return array(); // nothing under this dir
                } elseif ( !is_readable( $dir ) ) {
                        wfDebug( __METHOD__ . "() given directory is unreadable: '$dir'\n" );
+
                        return null; // bad permissions?
                }
+
                return new FSFileBackendFileList( $dir, $params );
        }
 
@@ -662,7 +712,7 @@ class FSFileBackend extends FileBackendStore {
 
                foreach ( $fileOpHandles as $index => $fileOpHandle ) {
                        $status = Status::newGood();
-                       $function = '_getResponse' . $fileOpHandle->call;
+                       $function = 'getResponse' . $fileOpHandle->call;
                        $this->$function( $errs[$index], $status, $fileOpHandle->params, $fileOpHandle->cmd );
                        $statuses[$index] = $status;
                        if ( $status->isOK() && $fileOpHandle->chmodPath ) {
@@ -718,8 +768,6 @@ class FSFileBackend extends FileBackendStore {
 
        /**
         * Listen for E_WARNING errors and track whether any happen
-        *
-        * @return void
         */
        protected function trapWarnings() {
                $this->hadWarningErrors[] = false; // push to stack
@@ -737,7 +785,7 @@ class FSFileBackend extends FileBackendStore {
        }
 
        /**
-        * @param integer $errno
+        * @param int $errno
         * @param string $errstr
         * @return bool
         * @access private
@@ -745,6 +793,7 @@ class FSFileBackend extends FileBackendStore {
        public function handleWarning( $errno, $errstr ) {
                wfDebugLog( 'FSFileBackend', $errstr ); // more detailed error logging
                $this->hadWarningErrors[count( $this->hadWarningErrors ) - 1] = true;
+
                return true; // suppress from PHP handler
        }
 }
@@ -761,7 +810,7 @@ class FSFileOpHandle extends FileBackendStoreOpHandle {
         * @param array $params
         * @param string $call
         * @param string $cmd
-        * @param integer|null $chmodPath
+        * @param int|null $chmodPath
         */
        public function __construct(
                FSFileBackend $backend, array $params, $call, $cmd, $chmodPath = null
@@ -784,9 +833,14 @@ class FSFileOpHandle extends FileBackendStoreOpHandle {
 abstract class FSFileBackendList implements Iterator {
        /** @var Iterator */
        protected $iter;
-       protected $suffixStart; // integer
-       protected $pos = 0; // integer
-       /** @var Array */
+
+       /** @var int */
+       protected $suffixStart;
+
+       /** @var int */
+       protected $pos = 0;
+
+       /** @var array */
        protected $params = array();
 
        /**
@@ -823,6 +877,7 @@ abstract class FSFileBackendList implements Iterator {
                        # RecursiveDirectoryIterator extends FilesystemIterator.
                        # FilesystemIterator::SKIP_DOTS default is inconsistent in PHP 5.3.x.
                        $flags = FilesystemIterator::CURRENT_AS_SELF | FilesystemIterator::SKIP_DOTS;
+
                        return new RecursiveIteratorIterator(
                                new RecursiveDirectoryIterator( $dir, $flags ),
                                RecursiveIteratorIterator::CHILD_FIRST // include dirs
@@ -832,7 +887,7 @@ abstract class FSFileBackendList implements Iterator {
 
        /**
         * @see Iterator::key()
-        * @return integer
+        * @return int
         */
        public function key() {
                return $this->pos;
@@ -848,7 +903,7 @@ abstract class FSFileBackendList implements Iterator {
 
        /**
         * @see Iterator::next()
-        * @return void
+        * @throws FileBackendError
         */
        public function next() {
                try {
@@ -862,7 +917,7 @@ abstract class FSFileBackendList implements Iterator {
 
        /**
         * @see Iterator::rewind()
-        * @return void
+        * @throws FileBackendError
         */
        public function rewind() {
                $this->pos = 0;
@@ -885,13 +940,14 @@ abstract class FSFileBackendList implements Iterator {
        /**
         * Filter out items by advancing to the next ones
         */
-       protected function filterViaNext() {}
+       protected function filterViaNext() {
+       }
 
        /**
         * Return only the relative path and normalize slashes to FileBackend-style.
         * Uses the "real path" since the suffix is based upon that.
         *
-        * @param string $path
+        * @param string $dir
         * @return string
         */
        protected function getRelPath( $dir ) {
@@ -899,6 +955,7 @@ abstract class FSFileBackendList implements Iterator {
                if ( $path === false ) {
                        $path = $dir;
                }
+
                return strtr( substr( $path, $this->suffixStart ), '\\', '/' );
        }
 }
index 4bcaa7f..a6eda18 100644 (file)
  * For legacy reasons, the FSFileBackend class allows manually setting the paths of
  * containers to ones that do not respect the "wiki ID".
  *
- * In key/value stores, the container is the only hierarchy (the rest is emulated).
+ * In key/value (object) stores, containers are the only hierarchy (the rest is emulated).
  * FS-based backends are somewhat more restrictive due to the existence of real
  * directory files; a regular file cannot have the same name as a directory. Other
  * backends with virtual directories may not have this limitation. Callers should
  * store files in such a way that no files and directories are under the same path.
  *
+ * In general, this class allows for callers to access storage through the same
+ * interface, without regard to the underlying storage system. However, calling code
+ * must follow certain patterns and be aware of certain things to ensure compatibility:
+ *   - a) Always call prepare() on the parent directory before trying to put a file there;
+ *        key/value stores only need the container to exist first, but filesystems need
+ *        all the parent directories to exist first (prepare() is aware of all this)
+ *   - b) Always call clean() on a directory when it might become empty to avoid empty
+ *        directory buildup on filesystems; key/value stores never have empty directories,
+ *        so doing this helps preserve consistency in both cases
+ *   - c) Likewise, do not rely on the existence of empty directories for anything;
+ *        calling directoryExists() on a path that prepare() was previously called on
+ *        will return false for key/value stores if there are no files under that path
+ *   - d) Never alter the resulting FSFile returned from getLocalReference(), as it could
+ *        either be a copy of the source file in /tmp or the original source file itself
+ *   - e) Use a file layout that results in never attempting to store files over directories
+ *        or directories over files; key/value stores allow this but filesystems do not
+ *   - f) Use ASCII file names (e.g. base32, IDs, hashes) to avoid Unicode issues in Windows
+ *   - g) Do not assume that move operations are atomic (difficult with key/value stores)
+ *   - h) Do not assume that file stat or read operations always have immediate consistency;
+ *        various methods have a "latest" flag that should always be used if up-to-date
+ *        information is required (this trades performance for correctness as needed)
+ *   - i) Do not assume that directory listings have immediate consistency
+ *
  * Methods of subclasses should avoid throwing exceptions at all costs.
  * As a corollary, external dependencies should be kept to a minimum.
  *
  * @since 1.19
  */
 abstract class FileBackend {
-       protected $name; // string; unique backend name
-       protected $wikiId; // string; unique wiki name
-       protected $readOnly; // string; read-only explanation message
-       protected $parallelize; // string; when to do operations in parallel
-       protected $concurrency; // integer; how many operations can be done in parallel
+       /** @var string Unique backend name */
+       protected $name;
+
+       /** @var string Unique wiki name */
+       protected $wikiId;
+
+       /** @var string Read-only explanation message */
+       protected $readOnly;
+
+       /** @var string When to do operations in parallel */
+       protected $parallelize;
+
+       /** @var int How many operations can be done in parallel */
+       protected $concurrency;
 
        /** @var LockManager */
        protected $lockManager;
+
        /** @var FileJournal */
        protected $fileJournal;
 
@@ -75,7 +108,7 @@ abstract class FileBackend {
         * Create a new backend instance from configuration.
         * This should only be called from within FileBackendGroup.
         *
-        * $config includes:
+        * @param array $config Parameters include:
         *   - name        : The unique name of this backend.
         *                   This should consist of alphanumberic, '-', and '_' characters.
         *                   This name should not be changed after use (e.g. with journaling).
@@ -93,8 +126,6 @@ abstract class FileBackend {
         *   - parallelize : When to do file operations in parallel (when possible).
         *                   Allowed values are "implicit", "explicit" and "off".
         *   - concurrency : How many file operations can be done in parallel.
-        *
-        * @param array $config
         * @throws MWException
         */
        public function __construct( array $config ) {
@@ -671,8 +702,7 @@ abstract class FileBackend {
         * otherwise safe from modification from other processes. Normally,
         * the file will be a new temp file, which should be adequate.
         *
-        * @param array $params Operation parameters
-        * $params include:
+        * @param array $params Operation parameters, include:
         *   - srcs        : ordered source storage paths (e.g. chunk1, chunk2, ...)
         *   - dst         : file system path to 0-byte temp file
         *   - parallelize : try to do operations in parallel when possible
@@ -691,8 +721,7 @@ abstract class FileBackend {
         * However, setting them is not guaranteed to actually do anything.
         * Additional server configuration may be needed to achieve the desired effect.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir            : storage directory
         *   - noAccess       : try to deny file access (since 1.20)
         *   - noListing      : try to deny file listing (since 1.20)
@@ -721,8 +750,7 @@ abstract class FileBackend {
         * This is not guaranteed to actually make files or listings publically hidden.
         * Additional server configuration may be needed to achieve the desired effect.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir            : storage directory
         *   - noAccess       : try to deny file access
         *   - noListing      : try to deny file listing
@@ -752,8 +780,7 @@ abstract class FileBackend {
         * This is not guaranteed to actually make files or listings publically viewable.
         * Additional server configuration may be needed to achieve the desired effect.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir            : storage directory
         *   - access         : try to allow file access
         *   - listing        : try to allow file listing
@@ -779,8 +806,7 @@ abstract class FileBackend {
         * Backends using key/value stores may do nothing unless the directory
         * is that of an empty container, in which case it will be deleted.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir            : storage directory
         *   - recursive      : recursively delete empty subdirectories first (since 1.20)
         *   - bypassReadOnly : allow writes in read-only mode (since 1.20)
@@ -809,10 +835,11 @@ abstract class FileBackend {
        final protected function getScopedPHPBehaviorForOps() {
                if ( PHP_SAPI != 'cli' ) { // http://bugs.php.net/bug.php?id=47540
                        $old = ignore_user_abort( true ); // avoid half-finished operations
-                       return new ScopedCallback( function() use ( $old ) {
+                       return new ScopedCallback( function () use ( $old ) {
                                ignore_user_abort( $old );
                        } );
                }
+
                return null;
        }
 
@@ -820,8 +847,7 @@ abstract class FileBackend {
         * Check if a file exists at a storage path in the backend.
         * This returns false if only a directory exists at the path.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
         * @return bool|null Returns null on failure
@@ -831,8 +857,7 @@ abstract class FileBackend {
        /**
         * Get the last-modified timestamp of the file at a storage path.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
         * @return string|bool TS_MW timestamp or false on failure
@@ -843,8 +868,7 @@ abstract class FileBackend {
         * Get the contents of a file at a storage path in the backend.
         * This should be avoided for potentially large files.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
         * @return string|bool Returns false on failure
@@ -863,12 +887,11 @@ abstract class FileBackend {
         *
         * @see FileBackend::getFileContents()
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - srcs        : list of source storage paths
         *   - latest      : use the latest available data
         *   - parallelize : try to do operations in parallel when possible
-        * @return Array Map of (path name => string or false on failure)
+        * @return array Map of (path name => string or false on failure)
         * @since 1.20
         */
        abstract public function getFileContentsMulti( array $params );
@@ -876,11 +899,10 @@ abstract class FileBackend {
        /**
         * Get the size (bytes) of a file at a storage path in the backend.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
-        * @return integer|bool Returns false on failure
+        * @return int|bool Returns false on failure
         */
        abstract public function getFileSize( array $params );
 
@@ -892,19 +914,17 @@ abstract class FileBackend {
         *   - size   : the file size (bytes)
         * Additional values may be included for internal use only.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
-        * @return Array|bool|null Returns null on failure
+        * @return array|bool|null Returns null on failure
         */
        abstract public function getFileStat( array $params );
 
        /**
         * Get a SHA-1 hash of the file at a storage path in the backend.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
         * @return string|bool Hash string or false on failure
@@ -915,11 +935,10 @@ abstract class FileBackend {
         * Get the properties of the file at a storage path in the backend.
         * This gives the result of FSFile::getProps() on a local copy of the file.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
-        * @return Array Returns FSFile::placeholderProps() on failure
+        * @return array Returns FSFile::placeholderProps() on failure
         */
        abstract public function getFileProps( array $params );
 
@@ -930,8 +949,7 @@ abstract class FileBackend {
         * will be sent if streaming began, while none will be sent otherwise.
         * Implementations should flush the output buffer before sending data.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src     : source storage path
         *   - headers : list of additional HTTP headers to send on success
         *   - latest  : use the latest available data
@@ -952,8 +970,7 @@ abstract class FileBackend {
         * In that later case, there are copies of the file that must stay in sync.
         * Additionally, further calls to this function may return the same file.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
         * @return FSFile|null Returns null on failure
@@ -972,12 +989,11 @@ abstract class FileBackend {
         *
         * @see FileBackend::getLocalReference()
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - srcs        : list of source storage paths
         *   - latest      : use the latest available data
         *   - parallelize : try to do operations in parallel when possible
-        * @return Array Map of (path name => FSFile or null on failure)
+        * @return array Map of (path name => FSFile or null on failure)
         * @since 1.20
         */
        abstract public function getLocalReferenceMulti( array $params );
@@ -987,8 +1003,7 @@ abstract class FileBackend {
         * The temporary copy will have the same file extension as the source.
         * Temporary files may be purged when the file object falls out of scope.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src    : source storage path
         *   - latest : use the latest available data
         * @return TempFSFile|null Returns null on failure
@@ -1007,12 +1022,11 @@ abstract class FileBackend {
         *
         * @see FileBackend::getLocalCopy()
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - srcs        : list of source storage paths
         *   - latest      : use the latest available data
         *   - parallelize : try to do operations in parallel when possible
-        * @return Array Map of (path name => TempFSFile or null on failure)
+        * @return array Map of (path name => TempFSFile or null on failure)
         * @since 1.20
         */
        abstract public function getLocalCopyMulti( array $params );
@@ -1027,8 +1041,7 @@ abstract class FileBackend {
         * Otherwise, one would need to use getLocalReference(), which involves loading
         * the entire file on to local disk.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - src : source storage path
         *   - ttl : lifetime (seconds) if pre-authenticated; default is 1 day
         * @return string|null
@@ -1043,8 +1056,7 @@ abstract class FileBackend {
         *
         * Storage backends with eventual consistency might return stale data.
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir : storage directory
         * @return bool|null Returns null on failure
         * @since 1.20
@@ -1063,8 +1075,7 @@ abstract class FileBackend {
         *
         * Failures during iteration can result in FileBackendError exceptions (since 1.22).
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir     : storage directory
         *   - topOnly : only return direct child dirs of the directory
         * @return Traversable|Array|null Returns null on failure
@@ -1080,8 +1091,7 @@ abstract class FileBackend {
         *
         * Failures during iteration can result in FileBackendError exceptions (since 1.22).
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir : storage directory
         * @return Traversable|Array|null Returns null on failure
         * @since 1.20
@@ -1102,8 +1112,7 @@ abstract class FileBackend {
         *
         * Failures during iteration can result in FileBackendError exceptions (since 1.22).
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir        : storage directory
         *   - topOnly    : only return direct child files of the directory (since 1.20)
         *   - adviseStat : set to true if stat requests will be made on the files (since 1.22)
@@ -1119,8 +1128,7 @@ abstract class FileBackend {
         *
         * Failures during iteration can result in FileBackendError exceptions (since 1.22).
         *
-        * @param array $params
-        * $params include:
+        * @param array $params Parameters include:
         *   - dir        : storage directory
         *   - adviseStat : set to true if stat requests will be made on the files (since 1.22)
         * @return Traversable|Array|null Returns null on failure
@@ -1135,18 +1143,18 @@ abstract class FileBackend {
         * This should be used when stat calls will be made on a known list of a many files.
         *
         * @param array $paths Storage paths
-        * @return void
         */
-       public function preloadCache( array $paths ) {}
+       public function preloadCache( array $paths ) {
+       }
 
        /**
         * Invalidate any in-process file stat and property cache.
         * If $paths is given, then only the cache for those files will be cleared.
         *
         * @param array $paths Storage paths (optional)
-        * @return void
         */
-       public function clearCache( array $paths = null ) {}
+       public function clearCache( array $paths = null ) {
+       }
 
        /**
         * Lock the files at the given storage paths in the backend.
@@ -1155,11 +1163,12 @@ abstract class FileBackend {
         * Callers should consider using getScopedFileLocks() instead.
         *
         * @param array $paths Storage paths
-        * @param integer $type LockManager::LOCK_* constant
+        * @param int $type LockManager::LOCK_* constant
         * @return Status
         */
        final public function lockFiles( array $paths, $type ) {
                $paths = array_map( 'FileBackend::normalizeStoragePath', $paths );
+
                return $this->lockManager->lock( $paths, $type );
        }
 
@@ -1167,11 +1176,12 @@ abstract class FileBackend {
         * Unlock the files at the given storage paths in the backend.
         *
         * @param array $paths Storage paths
-        * @param integer $type LockManager::LOCK_* constant
+        * @param int $type LockManager::LOCK_* constant
         * @return Status
         */
        final public function unlockFiles( array $paths, $type ) {
                $paths = array_map( 'FileBackend::normalizeStoragePath', $paths );
+
                return $this->lockManager->unlock( $paths, $type );
        }
 
@@ -1186,7 +1196,7 @@ abstract class FileBackend {
         * @see ScopedLock::factory()
         *
         * @param array $paths List of storage paths or map of lock types to path lists
-        * @param integer|string $type LockManager::LOCK_* constant or "mixed"
+        * @param int|string $type LockManager::LOCK_* constant or "mixed"
         * @param Status $status Status to update on lock/unlock
         * @return ScopedLock|null Returns null on failure
         */
@@ -1198,6 +1208,7 @@ abstract class FileBackend {
                } else {
                        $paths = array_map( 'FileBackend::normalizeStoragePath', $paths );
                }
+
                return ScopedLock::factory( $this->lockManager, $paths, $type, $status );
        }
 
@@ -1214,7 +1225,7 @@ abstract class FileBackend {
         *
         * @param array $ops List of file operations to FileBackend::doOperations()
         * @param Status $status Status to update on lock/unlock
-        * @return Array List of ScopedFileLocks or null values
+        * @return array List of ScopedFileLocks or null values
         * @since 1.20
         */
        abstract public function getScopedLocksForOps( array $ops, Status $status );
@@ -1267,7 +1278,7 @@ abstract class FileBackend {
         * This does not do any path normalization or traversal checks.
         *
         * @param string $storagePath
-        * @return Array (backend, container, rel object) or (null, null, null)
+        * @return array (backend, container, rel object) or (null, null, null)
         */
        final public static function splitStoragePath( $storagePath ) {
                if ( self::isStoragePath( $storagePath ) ) {
@@ -1281,6 +1292,7 @@ abstract class FileBackend {
                                }
                        }
                }
+
                return array( null, null, null );
        }
 
@@ -1301,6 +1313,7 @@ abstract class FileBackend {
                                        : "mwstore://{$backend}/{$container}";
                        }
                }
+
                return null;
        }
 
@@ -1315,6 +1328,7 @@ abstract class FileBackend {
        final public static function parentStoragePath( $storagePath ) {
                $storagePath = dirname( $storagePath );
                list( , , $rel ) = self::splitStoragePath( $storagePath );
+
                return ( $rel === null ) ? null : $storagePath;
        }
 
@@ -1326,6 +1340,7 @@ abstract class FileBackend {
         */
        final public static function extensionFromPath( $path ) {
                $i = strrpos( $path, '.' );
+
                return strtolower( $i ? substr( $path, $i + 1 ) : '' );
        }
 
@@ -1395,6 +1410,7 @@ abstract class FileBackend {
                                return null;
                        }
                }
+
                return $path;
        }
 }
@@ -1403,4 +1419,5 @@ abstract class FileBackend {
  * @ingroup FileBackend
  * @since 1.22
  */
-class FileBackendError extends MWException {}
+class FileBackendError extends MWException {
+}
index be8a207..491424b 100644 (file)
  * @since 1.19
  */
 class FileBackendGroup {
-       /**
-        * @var FileBackendGroup
-        */
+       /** @var FileBackendGroup */
        protected static $instance = null;
 
-       /** @var Array (name => ('class' => string, 'config' => array, 'instance' => object)) */
+       /** @var array (name => ('class' => string, 'config' => array, 'instance' => object)) */
        protected $backends = array();
 
-       protected function __construct() {}
+       protected function __construct() {
+       }
 
        /**
         * @return FileBackendGroup
@@ -47,13 +46,12 @@ class FileBackendGroup {
                        self::$instance = new self();
                        self::$instance->initFromGlobals();
                }
+
                return self::$instance;
        }
 
        /**
         * Destroy the singleton instance
-        *
-        * @return void
         */
        public static function destroySingleton() {
                self::$instance = null;
@@ -61,8 +59,6 @@ class FileBackendGroup {
 
        /**
         * Register file backends from the global variables
-        *
-        * @return void
         */
        protected function initFromGlobals() {
                global $wgLocalFileRepo, $wgForeignFileRepos, $wgFileBackends;
@@ -116,8 +112,7 @@ class FileBackendGroup {
        /**
         * Register an array of file backend configurations
         *
-        * @param Array $configs
-        * @return void
+        * @param array $configs
         * @throws MWException
         */
        protected function register( array $configs ) {
@@ -159,6 +154,7 @@ class FileBackendGroup {
                        $config = $this->backends[$name]['config'];
                        $this->backends[$name]['instance'] = new $class( $config );
                }
+
                return $this->backends[$name]['instance'];
        }
 
@@ -166,7 +162,7 @@ class FileBackendGroup {
         * Get the config array for a backend object with a given name
         *
         * @param string $name
-        * @return Array
+        * @return array
         * @throws MWException
         */
        public function config( $name ) {
@@ -174,6 +170,7 @@ class FileBackendGroup {
                        throw new MWException( "No backend defined with the name `$name`." );
                }
                $class = $this->backends[$name]['class'];
+
                return array( 'class' => $class ) + $this->backends[$name]['config'];
        }
 
@@ -188,6 +185,7 @@ class FileBackendGroup {
                if ( $backend !== null && isset( $this->backends[$backend] ) ) {
                        return $this->get( $backend );
                }
+
                return null;
        }
 }
index 97584a7..b3c46c6 100644 (file)
  * @since 1.19
  */
 class FileBackendMultiWrite extends FileBackend {
-       /** @var Array Prioritized list of FileBackendStore objects */
-       protected $backends = array(); // array of (backend index => backends)
-       protected $masterIndex = -1; // integer; index of master backend
-       protected $syncChecks = 0; // integer; bitfield
-       protected $autoResync = false; // boolean
+       /** @var array Prioritized list of FileBackendStore objects.
+        * array of (backend index => backends)
+        */
+       protected $backends = array();
+
+       /** @var int Index of master backend  */
+       protected $masterIndex = -1;
+
+       /** @var int Bitfield */
+       protected $syncChecks = 0;
+
+       /** @var string|bool */
+       protected $autoResync = false;
 
-       /** @var Array */
+       /** @var array */
        protected $noPushDirConts = array();
-       protected $noPushQuickOps = false; // boolean
+
+       /** @var bool */
+       protected $noPushQuickOps = false;
 
        /* Possible internal backend consistency checks */
        const CHECK_SIZE = 1;
@@ -81,7 +91,7 @@ class FileBackendMultiWrite extends FileBackend {
         *   - noPushQuickOps : (hack) Only apply doQuickOperations() to the master backend.
         *   - noPushDirConts : (hack) Only apply directory functions to the master backend.
         *
-        * @param Array $config
+        * @param array $config
         * @throws MWException
         */
        public function __construct( array $config ) {
@@ -167,6 +177,7 @@ class FileBackendMultiWrite extends FileBackend {
                        // Try to resync the clone backends to the master on the spot...
                        if ( !$this->autoResync || !$this->resyncFiles( $relevantPaths )->isOK() ) {
                                $status->merge( $syncStatus );
+
                                return $status; // abort
                        }
                }
@@ -321,8 +332,8 @@ class FileBackendMultiWrite extends FileBackend {
                                        // already synced; nothing to do
                                } elseif ( $mSha1 !== false ) { // file is in master
                                        if ( $this->autoResync === 'conservative'
-                                               && $cStat && $cStat['mtime'] > $mStat['mtime'] )
-                                       {
+                                               && $cStat && $cStat['mtime'] > $mStat['mtime']
+                                       {
                                                $status->fatal( 'backend-fail-synced', $path );
                                                continue; // don't rollback data
                                        }
@@ -348,7 +359,7 @@ class FileBackendMultiWrite extends FileBackend {
         * Get a list of file storage paths to read or write for a list of operations
         *
         * @param array $ops Same format as doOperations()
-        * @return Array List of storage paths to files (does not include directories)
+        * @return array List of storage paths to files (does not include directories)
         */
        protected function fileStoragePathsForOps( array $ops ) {
                $paths = array();
@@ -357,8 +368,8 @@ class FileBackendMultiWrite extends FileBackend {
                                // For things like copy/move/delete with "ignoreMissingSource" and there
                                // is no source file, nothing should happen and there should be no errors.
                                if ( empty( $op['ignoreMissingSource'] )
-                                       || $this->fileExists( array( 'src' => $op['src'] ) ) )
-                               {
+                                       || $this->fileExists( array( 'src' => $op['src'] ) )
+                               {
                                        $paths[] = $op['src'];
                                }
                        }
@@ -369,6 +380,7 @@ class FileBackendMultiWrite extends FileBackend {
                                $paths[] = $op['dst'];
                        }
                }
+
                return array_values( array_unique( array_filter( $paths, 'FileBackend::isStoragePath' ) ) );
        }
 
@@ -378,7 +390,7 @@ class FileBackendMultiWrite extends FileBackend {
         *
         * @param array $ops List of file operation arrays
         * @param FileBackendStore $backend
-        * @return Array
+        * @return array
         */
        protected function substOpBatchPaths( array $ops, FileBackendStore $backend ) {
                $newOps = array(); // operations
@@ -391,6 +403,7 @@ class FileBackendMultiWrite extends FileBackend {
                        }
                        $newOps[] = $newOp;
                }
+
                return $newOps;
        }
 
@@ -399,10 +412,11 @@ class FileBackendMultiWrite extends FileBackend {
         *
         * @param array $ops File operation array
         * @param FileBackendStore $backend
-        * @return Array
+        * @return array
         */
        protected function substOpPaths( array $ops, FileBackendStore $backend ) {
                $newOps = $this->substOpBatchPaths( array( $ops ), $backend );
+
                return $newOps[0];
        }
 
@@ -411,7 +425,7 @@ class FileBackendMultiWrite extends FileBackend {
         *
         * @param array|string $paths List of paths or single string path
         * @param FileBackendStore $backend
-        * @return Array|string
+        * @return array|string
         */
        protected function substPaths( $paths, FileBackendStore $backend ) {
                return preg_replace(
@@ -425,7 +439,7 @@ class FileBackendMultiWrite extends FileBackend {
         * Substitute the backend of internal storage paths with the proxy backend's name
         *
         * @param array|string $paths List of paths or single string path
-        * @return Array|string
+        * @return array|string
         */
        protected function unsubstPaths( $paths ) {
                return preg_replace(
@@ -456,6 +470,7 @@ class FileBackendMultiWrite extends FileBackend {
                $status->success = $masterStatus->success;
                $status->successCount = $masterStatus->successCount;
                $status->failCount = $masterStatus->failCount;
+
                return $status;
        }
 
@@ -465,6 +480,7 @@ class FileBackendMultiWrite extends FileBackend {
         */
        protected function replicateContainerDirChanges( $path ) {
                list( , $shortCont, ) = self::splitStoragePath( $path );
+
                return !in_array( $shortCont, $this->noPushDirConts );
        }
 
@@ -477,6 +493,7 @@ class FileBackendMultiWrite extends FileBackend {
                                $status->merge( $backend->doPrepare( $realParams ) );
                        }
                }
+
                return $status;
        }
 
@@ -489,6 +506,7 @@ class FileBackendMultiWrite extends FileBackend {
                                $status->merge( $backend->doSecure( $realParams ) );
                        }
                }
+
                return $status;
        }
 
@@ -501,6 +519,7 @@ class FileBackendMultiWrite extends FileBackend {
                                $status->merge( $backend->doPublish( $realParams ) );
                        }
                }
+
                return $status;
        }
 
@@ -513,32 +532,38 @@ class FileBackendMultiWrite extends FileBackend {
                                $status->merge( $backend->doClean( $realParams ) );
                        }
                }
+
                return $status;
        }
 
        public function concatenate( array $params ) {
                // We are writing to an FS file, so we don't need to do this per-backend
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->concatenate( $realParams );
        }
 
        public function fileExists( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->fileExists( $realParams );
        }
 
        public function getFileTimestamp( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileTimestamp( $realParams );
        }
 
        public function getFileSize( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileSize( $realParams );
        }
 
        public function getFileStat( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileStat( $realParams );
        }
 
@@ -550,21 +575,25 @@ class FileBackendMultiWrite extends FileBackend {
                foreach ( $contentsM as $path => $data ) {
                        $contents[$this->unsubstPaths( $path )] = $data;
                }
+
                return $contents;
        }
 
        public function getFileSha1Base36( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileSha1Base36( $realParams );
        }
 
        public function getFileProps( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileProps( $realParams );
        }
 
        public function streamFile( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->streamFile( $realParams );
        }
 
@@ -576,6 +605,7 @@ class FileBackendMultiWrite extends FileBackend {
                foreach ( $fsFilesM as $path => $fsFile ) {
                        $fsFiles[$this->unsubstPaths( $path )] = $fsFile;
                }
+
                return $fsFiles;
        }
 
@@ -587,26 +617,31 @@ class FileBackendMultiWrite extends FileBackend {
                foreach ( $tempFilesM as $path => $tempFile ) {
                        $tempFiles[$this->unsubstPaths( $path )] = $tempFile;
                }
+
                return $tempFiles;
        }
 
        public function getFileHttpUrl( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileHttpUrl( $realParams );
        }
 
        public function directoryExists( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->directoryExists( $realParams );
        }
 
        public function getDirectoryList( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getDirectoryList( $realParams );
        }
 
        public function getFileList( array $params ) {
                $realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
+
                return $this->backends[$this->masterIndex]->getFileList( $realParams );
        }
 
@@ -627,6 +662,7 @@ class FileBackendMultiWrite extends FileBackend {
                        LockManager::LOCK_UW => $this->unsubstPaths( $paths[LockManager::LOCK_UW] ),
                        LockManager::LOCK_EX => $this->unsubstPaths( $paths[LockManager::LOCK_EX] )
                );
+
                // Actually acquire the locks
                return array( $this->getScopedFileLocks( $pbPaths, 'mixed', $status ) );
        }
index eaa653d..2fe51c0 100644 (file)
@@ -43,7 +43,7 @@ abstract class FileBackendStore extends FileBackend {
        /** @var ProcessCacheLRU Map of paths to large (RAM/disk) cache items */
        protected $expensiveCache;
 
-       /** @var Array Map of container names to sharding config */
+       /** @var array Map of container names to sharding config */
        protected $shardViaHashLevels = array();
 
        /** @var callback Method to get the MIME type of files */
@@ -68,9 +68,9 @@ abstract class FileBackendStore extends FileBackend {
                parent::__construct( $config );
                $this->mimeCallback = isset( $config['mimeCallback'] )
                        ? $config['mimeCallback']
-                       : function( $storagePath, $content, $fsPath ) {
+                       : function ( $storagePath, $content, $fsPath ) {
                                // @TODO: handle the case of extension-less files using the contents
-                               return StreamFile::contentTypeFromPath( $storagePath ) ?: 'unknown/unknown';
+                               return StreamFile::contentTypeFromPath( $storagePath ) ? : 'unknown/unknown';
                        };
                $this->memCache = new EmptyBagOStuff(); // disabled by default
                $this->cheapCache = new ProcessCacheLRU( self::CACHE_CHEAP_SIZE );
@@ -82,7 +82,7 @@ abstract class FileBackendStore extends FileBackend {
         * medium restrictions and basic performance constraints.
         * Do not call this function from places outside FileBackend and FileOp.
         *
-        * @return integer Bytes
+        * @return int Bytes
         */
        final public function maxFileSizeInternal() {
                return $this->maxFileSize;
@@ -129,11 +129,13 @@ abstract class FileBackendStore extends FileBackend {
                                $this->deleteFileCache( $params['dst'] ); // persistent cache
                        }
                }
+
                return $status;
        }
 
        /**
         * @see FileBackendStore::createInternal()
+        * @param array $params
         * @return Status
         */
        abstract protected function doCreateInternal( array $params );
@@ -168,11 +170,13 @@ abstract class FileBackendStore extends FileBackend {
                                $this->deleteFileCache( $params['dst'] ); // persistent cache
                        }
                }
+
                return $status;
        }
 
        /**
         * @see FileBackendStore::storeInternal()
+        * @param array $params
         * @return Status
         */
        abstract protected function doStoreInternal( array $params );
@@ -203,11 +207,13 @@ abstract class FileBackendStore extends FileBackend {
                if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
                        $this->deleteFileCache( $params['dst'] ); // persistent cache
                }
+
                return $status;
        }
 
        /**
         * @see FileBackendStore::copyInternal()
+        * @param array $params
         * @return Status
         */
        abstract protected function doCopyInternal( array $params );
@@ -236,6 +242,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::deleteInternal()
+        * @param array $params
         * @return Status
         */
        abstract protected function doDeleteInternal( array $params );
@@ -267,11 +274,13 @@ abstract class FileBackendStore extends FileBackend {
                if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
                        $this->deleteFileCache( $params['dst'] ); // persistent cache
                }
+
                return $status;
        }
 
        /**
         * @see FileBackendStore::moveInternal()
+        * @param array $params
         * @return Status
         */
        protected function doMoveInternal( array $params ) {
@@ -285,6 +294,7 @@ abstract class FileBackendStore extends FileBackend {
                        $status->merge( $this->deleteInternal( array( 'src' => $params['src'] ) ) );
                        $status->setResult( true, $status->value ); // ignore delete() errors
                }
+
                return $status;
        }
 
@@ -311,11 +321,13 @@ abstract class FileBackendStore extends FileBackend {
                } else {
                        $status = Status::newGood(); // nothing to do
                }
+
                return $status;
        }
 
        /**
         * @see FileBackendStore::describeInternal()
+        * @param array $params
         * @return Status
         */
        protected function doDescribeInternal( array $params ) {
@@ -355,6 +367,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::concatenate()
+        * @param array $params
         * @return Status
         */
        protected function doConcatenate( array $params ) {
@@ -368,6 +381,7 @@ abstract class FileBackendStore extends FileBackend {
                wfRestoreWarnings();
                if ( !$ok ) { // not present or not empty
                        $status->fatal( 'backend-fail-opentemp', $tmpPath );
+
                        return $status;
                }
 
@@ -378,6 +392,7 @@ abstract class FileBackendStore extends FileBackend {
                                $fsFile = $this->getLocalReference( array( 'src' => $path ) );
                                if ( !$fsFile ) { // retry failed?
                                        $status->fatal( 'backend-fail-read', $path );
+
                                        return $status;
                                }
                        }
@@ -388,6 +403,7 @@ abstract class FileBackendStore extends FileBackend {
                $tmpHandle = fopen( $tmpPath, 'ab' );
                if ( $tmpHandle === false ) {
                        $status->fatal( 'backend-fail-opentemp', $tmpPath );
+
                        return $status;
                }
 
@@ -398,6 +414,7 @@ abstract class FileBackendStore extends FileBackend {
                        if ( $sourceHandle === false ) {
                                fclose( $tmpHandle );
                                $status->fatal( 'backend-fail-read', $virtualSource );
+
                                return $status;
                        }
                        // Append chunk to file (pass chunk size to avoid magic quotes)
@@ -405,12 +422,14 @@ abstract class FileBackendStore extends FileBackend {
                                fclose( $sourceHandle );
                                fclose( $tmpHandle );
                                $status->fatal( 'backend-fail-writetemp', $tmpPath );
+
                                return $status;
                        }
                        fclose( $sourceHandle );
                }
                if ( !fclose( $tmpHandle ) ) {
                        $status->fatal( 'backend-fail-closetemp', $tmpPath );
+
                        return $status;
                }
 
@@ -426,6 +445,7 @@ abstract class FileBackendStore extends FileBackend {
                list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
                if ( $dir === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+
                        return $status; // invalid storage path
                }
 
@@ -444,6 +464,9 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::doPrepare()
+        * @param $container
+        * @param string $dir
+        * @param array $params
         * @return Status
         */
        protected function doPrepareInternal( $container, $dir, array $params ) {
@@ -457,6 +480,7 @@ abstract class FileBackendStore extends FileBackend {
                list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
                if ( $dir === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+
                        return $status; // invalid storage path
                }
 
@@ -475,6 +499,9 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::doSecure()
+        * @param $container
+        * @param string $dir
+        * @param array $params
         * @return Status
         */
        protected function doSecureInternal( $container, $dir, array $params ) {
@@ -488,6 +515,7 @@ abstract class FileBackendStore extends FileBackend {
                list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
                if ( $dir === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+
                        return $status; // invalid storage path
                }
 
@@ -506,6 +534,9 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::doPublish()
+        * @param $container
+        * @param string $dir
+        * @param array $params
         * @return Status
         */
        protected function doPublishInternal( $container, $dir, array $params ) {
@@ -531,6 +562,7 @@ abstract class FileBackendStore extends FileBackend {
                list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
                if ( $dir === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+
                        return $status; // invalid storage path
                }
 
@@ -558,6 +590,9 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::doClean()
+        * @param $container
+        * @param string $dir
+        * @param array $params
         * @return Status
         */
        protected function doCleanInternal( $container, $dir, array $params ) {
@@ -567,18 +602,21 @@ abstract class FileBackendStore extends FileBackend {
        final public function fileExists( array $params ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
                $stat = $this->getFileStat( $params );
+
                return ( $stat === null ) ? null : (bool)$stat; // null => failure
        }
 
        final public function getFileTimestamp( array $params ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
                $stat = $this->getFileStat( $params );
+
                return $stat ? $stat['mtime'] : false;
        }
 
        final public function getFileSize( array $params ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
                $stat = $this->getFileStat( $params );
+
                return $stat ? $stat['size'] : false;
        }
 
@@ -625,6 +663,7 @@ abstract class FileBackendStore extends FileBackend {
                } else { // an error occurred
                        wfDebug( __METHOD__ . ": Could not stat file $path.\n" );
                }
+
                return $stat;
        }
 
@@ -644,7 +683,8 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::getFileContentsMulti()
-        * @return Array
+        * @param array $params
+        * @return array
         */
        protected function doGetFileContentsMulti( array $params ) {
                $contents = array();
@@ -653,6 +693,7 @@ abstract class FileBackendStore extends FileBackend {
                        $contents[$path] = $fsFile ? file_get_contents( $fsFile->getPath() ) : false;
                        wfRestoreWarnings();
                }
+
                return $contents;
        }
 
@@ -675,11 +716,13 @@ abstract class FileBackendStore extends FileBackend {
                $hash = $this->doGetFileSha1Base36( $params );
                wfProfileOut( __METHOD__ . '-miss-' . $this->name );
                $this->cheapCache->set( $path, 'sha1', array( 'hash' => $hash, 'latest' => $latest ) );
+
                return $hash;
        }
 
        /**
         * @see FileBackendStore::getFileSha1Base36()
+        * @param array $params
         * @return bool|string
         */
        protected function doGetFileSha1Base36( array $params ) {
@@ -695,6 +738,7 @@ abstract class FileBackendStore extends FileBackend {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
                $fsFile = $this->getLocalReference( $params );
                $props = $fsFile ? $fsFile->getProps() : FSFile::placeholderProps();
+
                return $props;
        }
 
@@ -734,7 +778,8 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::getLocalReferenceMulti()
-        * @return Array
+        * @param array $params
+        * @return array
         */
        protected function doGetLocalReferenceMulti( array $params ) {
                return $this->doGetLocalCopyMulti( $params );
@@ -751,12 +796,14 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::getLocalCopyMulti()
-        * @return Array
+        * @param array $params
+        * @return array
         */
        abstract protected function doGetLocalCopyMulti( array $params );
 
        /**
         * @see FileBackend::getFileHttpUrl()
+        * @param array $params
         * @return string|null
         */
        public function getFileHttpUrl( array $params ) {
@@ -798,6 +845,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::streamFile()
+        * @param array $params
         * @return Status
         */
        protected function doStreamFile( array $params ) {
@@ -833,6 +881,7 @@ abstract class FileBackendStore extends FileBackend {
                                        $res = null; // if we don't find anything, it is indeterminate
                                }
                        }
+
                        return $res;
                }
        }
@@ -859,6 +908,7 @@ abstract class FileBackendStore extends FileBackend {
                        wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
                        // File listing spans multiple containers/shards
                        list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
+
                        return new FileBackendStoreShardDirIterator( $this,
                                $fullCont, $dir, $this->getContainerSuffixes( $shortCont ), $params );
                }
@@ -888,6 +938,7 @@ abstract class FileBackendStore extends FileBackend {
                        wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
                        // File listing spans multiple containers/shards
                        list( , $shortCont, ) = self::splitStoragePath( $params['dir'] );
+
                        return new FileBackendStoreShardFileIterator( $this,
                                $fullCont, $dir, $this->getContainerSuffixes( $shortCont ), $params );
                }
@@ -913,7 +964,7 @@ abstract class FileBackendStore extends FileBackend {
         * An exception is thrown if an unsupported operation is requested.
         *
         * @param array $ops Same format as doOperations()
-        * @return Array List of FileOp objects
+        * @return array List of FileOp objects
         * @throws MWException
         */
        final public function getOperationsInternal( array $ops ) {
@@ -953,7 +1004,7 @@ abstract class FileBackendStore extends FileBackend {
         * normalized.
         *
         * @param array $performOps List of FileOp objects
-        * @return Array (LockManager::LOCK_UW => path list, LockManager::LOCK_EX => path list)
+        * @return array (LockManager::LOCK_UW => path list, LockManager::LOCK_EX => path list)
         */
        final public function getPathsToLockForOpsInternal( array $performOps ) {
                // Build up a list of files to lock...
@@ -975,6 +1026,7 @@ abstract class FileBackendStore extends FileBackend {
 
        public function getScopedLocksForOps( array $ops, Status $status ) {
                $paths = $this->getPathsToLockForOpsInternal( $this->getOperationsInternal( $ops ) );
+
                return array( $this->getScopedFileLocks( $paths, 'mixed', $status ) );
        }
 
@@ -1080,9 +1132,10 @@ abstract class FileBackendStore extends FileBackend {
         * The resulting Status object fields will correspond
         * to the order in which the handles where given.
         *
-        * @param array $handles List of FileBackendStoreOpHandle objects
-        * @return Array Map of Status objects
+        * @param array $fileOpHandles
         * @throws MWException
+        * @internal param array $handles List of FileBackendStoreOpHandle objects
+        * @return array Map of Status objects
         */
        final public function executeOpHandlesInternal( array $fileOpHandles ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
@@ -1097,6 +1150,7 @@ abstract class FileBackendStore extends FileBackend {
                foreach ( $fileOpHandles as $fileOpHandle ) {
                        $fileOpHandle->closeResources();
                }
+
                return $res;
        }
 
@@ -1104,12 +1158,13 @@ abstract class FileBackendStore extends FileBackend {
         * @see FileBackendStore::executeOpHandlesInternal()
         * @param array $fileOpHandles
         * @throws MWException
-        * @return Array List of corresponding Status objects
+        * @return array List of corresponding Status objects
         */
        protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
-               foreach ( $fileOpHandles as $fileOpHandle ) { // OK if empty
+               if ( count( $fileOpHandles ) ) {
                        throw new MWException( "This backend supports no asynchronous operations." );
                }
+
                return array();
        }
 
@@ -1120,7 +1175,7 @@ abstract class FileBackendStore extends FileBackend {
         * specific errors, especially in the middle of batch file operations.
         *
         * @param array $op Same format as doOperation()
-        * @return Array
+        * @return array
         */
        protected function stripInvalidHeadersFromOp( array $op ) {
                static $longs = array( 'Content-Disposition' );
@@ -1135,6 +1190,7 @@ abstract class FileBackendStore extends FileBackend {
                                }
                        }
                }
+
                return $op;
        }
 
@@ -1172,9 +1228,9 @@ abstract class FileBackendStore extends FileBackend {
         * @see FileBackend::clearCache()
         *
         * @param array $paths Storage paths (optional)
-        * @return void
         */
-       protected function doClearCache( array $paths = null ) {}
+       protected function doClearCache( array $paths = null ) {
+       }
 
        /**
         * Is this a key/value store where directories are just virtual?
@@ -1212,7 +1268,7 @@ abstract class FileBackendStore extends FileBackend {
         * be scanned by looking in all the container shards.
         *
         * @param string $storagePath
-        * @return Array (container, path, container suffix) or (null, null, null) if invalid
+        * @return array (container, path, container suffix) or (null, null, null) if invalid
         */
        final protected function resolveStoragePath( $storagePath ) {
                list( $backend, $container, $relPath ) = self::splitStoragePath( $storagePath );
@@ -1236,6 +1292,7 @@ abstract class FileBackendStore extends FileBackend {
                                }
                        }
                }
+
                return array( null, null, null );
        }
 
@@ -1252,13 +1309,14 @@ abstract class FileBackendStore extends FileBackend {
         * @see FileBackendStore::resolveStoragePath()
         *
         * @param string $storagePath
-        * @return Array (container, path) or (null, null) if invalid
+        * @return array (container, path) or (null, null) if invalid
         */
        final protected function resolveStoragePathReal( $storagePath ) {
                list( $container, $relPath, $cShard ) = $this->resolveStoragePath( $storagePath );
                if ( $cShard !== null && substr( $relPath, -1 ) !== '/' ) {
                        return array( $container, $relPath );
                }
+
                return array( null, null );
        }
 
@@ -1293,8 +1351,10 @@ abstract class FileBackendStore extends FileBackend {
                        if ( preg_match( "!^(?:[^/]{2,}/)*$hashDirRegex(?:/|$)!", $relPath, $m ) ) {
                                return '.' . implode( '', array_slice( $m, 1 ) );
                        }
+
                        return null; // failed to match
                }
+
                return ''; // no sharding
        }
 
@@ -1308,6 +1368,7 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function isSingleShardPathInternal( $storagePath ) {
                list( , , $shard ) = $this->resolveStoragePath( $storagePath );
+
                return ( $shard !== null );
        }
 
@@ -1317,7 +1378,7 @@ abstract class FileBackendStore extends FileBackend {
         * the container are required to be hashed accordingly.
         *
         * @param string $container
-        * @return Array (integer levels, integer base, repeat flag) or (0, 0, false)
+        * @return array (integer levels, integer base, repeat flag) or (0, 0, false)
         */
        final protected function getContainerHashLevels( $container ) {
                if ( isset( $this->shardViaHashLevels[$container] ) ) {
@@ -1330,6 +1391,7 @@ abstract class FileBackendStore extends FileBackend {
                                }
                        }
                }
+
                return array( 0, 0, false ); // no sharding
        }
 
@@ -1337,7 +1399,7 @@ abstract class FileBackendStore extends FileBackend {
         * Get a list of full container shard suffixes for a container
         *
         * @param string $container
-        * @return Array
+        * @return array
         */
        final protected function getContainerSuffixes( $container ) {
                $shards = array();
@@ -1348,6 +1410,7 @@ abstract class FileBackendStore extends FileBackend {
                                $shards[] = '.' . wfBaseConvert( $index, 10, $base, $digits );
                        }
                }
+
                return $shards;
        }
 
@@ -1406,7 +1469,6 @@ abstract class FileBackendStore extends FileBackend {
         *
         * @param string $container Resolved container name
         * @param array $val Information to cache
-        * @return void
         */
        final protected function setContainerCache( $container, array $val ) {
                $this->memCache->add( $this->containerCacheKey( $container ), $val, 14 * 86400 );
@@ -1417,7 +1479,6 @@ abstract class FileBackendStore extends FileBackend {
         * The cache key is salted for a while to prevent race conditions.
         *
         * @param string $container Resolved container name
-        * @return void
         */
        final protected function deleteContainerCache( $container ) {
                if ( !$this->memCache->set( $this->containerCacheKey( $container ), 'PURGED', 300 ) ) {
@@ -1430,8 +1491,7 @@ abstract class FileBackendStore extends FileBackend {
         * used in a list of container names, storage paths, or FileOp objects.
         * This loads the persistent cache values into the process cache.
         *
-        * @param Array $items
-        * @return void
+        * @param array $items
         */
        final protected function primeContainerCache( array $items ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
@@ -1474,9 +1534,9 @@ abstract class FileBackendStore extends FileBackend {
         * Only containers that actually exist should appear in the map.
         *
         * @param array $containerInfo Map of resolved container names to cached info
-        * @return void
         */
-       protected function doPrimeContainerCache( array $containerInfo ) {}
+       protected function doPrimeContainerCache( array $containerInfo ) {
+       }
 
        /**
         * Get the cache key for a file path
@@ -1495,7 +1555,6 @@ abstract class FileBackendStore extends FileBackend {
         *
         * @param string $path Storage path
         * @param array $val Stat information to cache
-        * @return void
         */
        final protected function setFileCache( $path, array $val ) {
                $path = FileBackend::normalizeStoragePath( $path );
@@ -1514,7 +1573,6 @@ abstract class FileBackendStore extends FileBackend {
         * a file is created at a path were there was none before.
         *
         * @param string $path Storage path
-        * @return void
         */
        final protected function deleteFileCache( $path ) {
                $path = FileBackend::normalizeStoragePath( $path );
@@ -1532,7 +1590,6 @@ abstract class FileBackendStore extends FileBackend {
         * This loads the persistent cache values into the process cache.
         *
         * @param array $items List of storage paths or FileOps
-        * @return void
         */
        final protected function primeFileCache( array $items ) {
                $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
@@ -1575,7 +1632,7 @@ abstract class FileBackendStore extends FileBackend {
         * Set the 'concurrency' option from a list of operation options
         *
         * @param array $opts Map of operation options
-        * @return Array
+        * @return array
         */
        final protected function setConcurrencyFlags( array $opts ) {
                $opts['concurrency'] = 1; // off
@@ -1588,6 +1645,7 @@ abstract class FileBackendStore extends FileBackend {
                                $opts['concurrency'] = $this->concurrency;
                        }
                }
+
                return $opts;
        }
 
@@ -1613,19 +1671,17 @@ abstract class FileBackendStore extends FileBackend {
  * passed to FileBackendStore::executeOpHandlesInternal().
  */
 abstract class FileBackendStoreOpHandle {
-       /** @var Array */
+       /** @var array */
        public $params = array(); // params to caller functions
        /** @var FileBackendStore */
        public $backend;
-       /** @var Array */
+       /** @var array */
        public $resourcesToClose = array();
 
        public $call; // string; name that identifies the function called
 
        /**
         * Close all open file handles
-        *
-        * @return void
         */
        public function closeResources() {
                array_map( 'fclose', $this->resourcesToClose );
@@ -1641,13 +1697,17 @@ abstract class FileBackendStoreOpHandle {
 abstract class FileBackendStoreShardListIterator extends FilterIterator {
        /** @var FileBackendStore */
        protected $backend;
-       /** @var Array */
+
+       /** @var array */
        protected $params;
 
-       protected $container; // string; full container name
-       protected $directory; // string; resolved relative path
+       /** @var string Full container name */
+       protected $container;
+
+       /** @var string Resolved relative path */
+       protected $directory;
 
-       /** @var Array */
+       /** @var array */
        protected $multiShardPaths = array(); // (rel path => 1)
 
        /**
@@ -1683,6 +1743,7 @@ abstract class FileBackendStoreShardListIterator extends FilterIterator {
                        return false;
                } else {
                        $this->multiShardPaths[$rel] = 1;
+
                        return true;
                }
        }
index 3c5b7b2..538d9b4 100644 (file)
  * @since 1.19
  */
 abstract class FileOp {
-       /** @var Array */
+       /** @var array */
        protected $params = array();
+
        /** @var FileBackendStore */
        protected $backend;
 
-       protected $state = self::STATE_NEW; // integer
-       protected $failed = false; // boolean
-       protected $async = false; // boolean
-       protected $batchId; // string
+       /** @var int */
+       protected $state = self::STATE_NEW;
+
+       /** @var bool */
+       protected $failed = false;
+
+       /** @var bool */
+       protected $async = false;
+
+       /** @var string */
+       protected $batchId;
+
+       /** @var bool Operation is not a no-op */
+       protected $doOperation = true;
+
+       /** @var string */
+       protected $sourceSha1;
+
+       /** @var bool */
+       protected $overwriteSameCase;
 
-       protected $doOperation = true; // boolean; operation is not a no-op
-       protected $sourceSha1; // string
-       protected $overwriteSameCase; // boolean
-       protected $destExists; // boolean
+       /** @var bool */
+       protected $destExists;
 
        /* Object life-cycle */
        const STATE_NEW = 1;
@@ -58,7 +73,7 @@ abstract class FileOp {
         * Build a new batch file operation transaction
         *
         * @param FileBackendStore $backend
-        * @param Array $params
+        * @param array $params
         * @throws MWException
         */
        final public function __construct( FileBackendStore $backend, array $params ) {
@@ -84,7 +99,6 @@ abstract class FileOp {
                }
        }
 
-
        /**
         * Normalize a string if it is a valid storage path
         *
@@ -94,8 +108,10 @@ abstract class FileOp {
        protected static function normalizeIfValidStoragePath( $path ) {
                if ( FileBackend::isStoragePath( $path ) ) {
                        $res = FileBackend::normalizeStoragePath( $path );
+
                        return ( $res !== null ) ? $res : $path;
                }
+
                return $path;
        }
 
@@ -103,7 +119,6 @@ abstract class FileOp {
         * Set the batch UUID this operation belongs to
         *
         * @param string $batchId
-        * @return void
         */
        final public function setBatchId( $batchId ) {
                $this->batchId = $batchId;
@@ -131,7 +146,7 @@ abstract class FileOp {
        /**
         * Get a new empty predicates array for precheck()
         *
-        * @return Array
+        * @return array
         */
        final public static function newPredicates() {
                return array( 'exists' => array(), 'sha1' => array() );
@@ -140,7 +155,7 @@ abstract class FileOp {
        /**
         * Get a new empty dependency tracking array for paths read/written to
         *
-        * @return Array
+        * @return array
         */
        final public static function newDependencies() {
                return array( 'read' => array(), 'write' => array() );
@@ -150,18 +165,19 @@ abstract class FileOp {
         * Update a dependency tracking array to account for this operation
         *
         * @param array $deps Prior path reads/writes; format of FileOp::newPredicates()
-        * @return Array
+        * @return array
         */
        final public function applyDependencies( array $deps ) {
                $deps['read'] += array_fill_keys( $this->storagePathsRead(), 1 );
                $deps['write'] += array_fill_keys( $this->storagePathsChanged(), 1 );
+
                return $deps;
        }
 
        /**
         * Check if this operation changes files listed in $paths
         *
-        * @param array $paths Prior path reads/writes; format of FileOp::newPredicates()
+        * @param array $deps Prior path reads/writes; format of FileOp::newPredicates()
         * @return boolean
         */
        final public function dependsOn( array $deps ) {
@@ -175,6 +191,7 @@ abstract class FileOp {
                                return true; // "flow" dependency
                        }
                }
+
                return false;
        }
 
@@ -183,7 +200,7 @@ abstract class FileOp {
         *
         * @param array $oPredicates Pre-op info about files (format of FileOp::newPredicates)
         * @param array $nPredicates Post-op info about files (format of FileOp::newPredicates)
-        * @return Array
+        * @return array
         */
        final public function getJournalEntries( array $oPredicates, array $nPredicates ) {
                if ( !$this->doOperation ) {
@@ -215,6 +232,7 @@ abstract class FileOp {
                                );
                        }
                }
+
                return array_merge( $nullEntries, $updateEntries, $deleteEntries );
        }
 
@@ -223,7 +241,7 @@ abstract class FileOp {
         * This must update $predicates for each path that the op can change
         * except when a failing status object is returned.
         *
-        * @param Array $predicates
+        * @param array $predicates
         * @return Status
         */
        final public function precheck( array &$predicates ) {
@@ -235,10 +253,12 @@ abstract class FileOp {
                if ( !$status->isOK() ) {
                        $this->failed = true;
                }
+
                return $status;
        }
 
        /**
+        * @param array $predicates
         * @return Status
         */
        protected function doPrecheck( array &$predicates ) {
@@ -266,6 +286,7 @@ abstract class FileOp {
                } else { // no-op
                        $status = Status::newGood();
                }
+
                return $status;
        }
 
@@ -285,13 +306,14 @@ abstract class FileOp {
                $this->async = true;
                $result = $this->attempt();
                $this->async = false;
+
                return $result;
        }
 
        /**
         * Get the file operation parameters
         *
-        * @return Array (required params list, optional params list, list of params that are paths)
+        * @return array (required params list, optional params list, list of params that are paths)
         */
        protected function allowedParams() {
                return array( array(), array(), array() );
@@ -300,8 +322,8 @@ abstract class FileOp {
        /**
         * Adjust params to FileBackendStore internal file calls
         *
-        * @param Array $params
-        * @return Array (required params list, optional params list)
+        * @param array $params
+        * @return array (required params list, optional params list)
         */
        protected function setFlags( array $params ) {
                return array( 'async' => $this->async ) + $params;
@@ -310,7 +332,7 @@ abstract class FileOp {
        /**
         * Get a list of storage paths read from for this operation
         *
-        * @return Array
+        * @return array
         */
        public function storagePathsRead() {
                return array();
@@ -319,7 +341,7 @@ abstract class FileOp {
        /**
         * Get a list of storage paths written to for this operation
         *
-        * @return Array
+        * @return array
         */
        public function storagePathsChanged() {
                return array();
@@ -330,7 +352,7 @@ abstract class FileOp {
         * 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 Array $predicates
+        * @param array $predicates
         * @return Status
         */
        protected function precheckDestExistence( array $predicates ) {
@@ -356,12 +378,15 @@ abstract class FileOp {
                                } else {
                                        $this->overwriteSameCase = true; // OK
                                }
+
                                return $status; // do nothing; either OK or bad status
                        } else {
                                $status->fatal( 'backend-fail-alreadyexists', $this->params['dst'] );
+
                                return $status;
                        }
                }
+
                return $status;
        }
 
@@ -379,7 +404,7 @@ abstract class FileOp {
         * Check if a file will exist in storage when this operation is attempted
         *
         * @param string $source Storage path
-        * @param Array $predicates
+        * @param array $predicates
         * @return bool
         */
        final protected function fileExists( $source, array $predicates ) {
@@ -387,6 +412,7 @@ abstract class FileOp {
                        return $predicates['exists'][$source]; // previous op assures this
                } else {
                        $params = array( 'src' => $source, 'latest' => true );
+
                        return $this->backend->fileExists( $params );
                }
        }
@@ -395,7 +421,7 @@ abstract class FileOp {
         * Get the SHA-1 of a file in storage when this operation is attempted
         *
         * @param string $source Storage path
-        * @param Array $predicates
+        * @param array $predicates
         * @return string|bool False on failure
         */
        final protected function fileSha1( $source, array $predicates ) {
@@ -405,6 +431,7 @@ abstract class FileOp {
                        return false; // previous op assures this
                } else {
                        $params = array( 'src' => $source, 'latest' => true );
+
                        return $this->backend->getFileSha1Base36( $params );
                }
        }
@@ -422,7 +449,6 @@ abstract class FileOp {
         * Log a file operation failure and preserve any temp files
         *
         * @param string $action
-        * @return void
         */
        final public function logFailure( $action ) {
                $params = $this->params;
@@ -456,11 +482,13 @@ class CreateFileOp extends FileOp {
                        $status->fatal( 'backend-fail-maxsize',
                                $this->params['dst'], $this->backend->maxFileSizeInternal() );
                        $status->fatal( 'backend-fail-create', $this->params['dst'] );
+
                        return $status;
                // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
                        $status->fatal( 'backend-fail-create', $this->params['dst'] );
+
                        return $status;
                }
                // Check if destination file exists
@@ -471,6 +499,7 @@ class CreateFileOp extends FileOp {
                        $predicates['exists'][$this->params['dst']] = true;
                        $predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
                }
+
                return $status; // safe to call attempt()
        }
 
@@ -479,6 +508,7 @@ class CreateFileOp extends FileOp {
                        // Create the file at the destination
                        return $this->backend->createInternal( $this->setFlags( $this->params ) );
                }
+
                return Status::newGood();
        }
 
@@ -509,17 +539,20 @@ class StoreFileOp extends FileOp {
                // Check if the source file exists on the file system
                if ( !is_file( $this->params['src'] ) ) {
                        $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
                        return $status;
                // Check if the source file is too big
                } elseif ( filesize( $this->params['src'] ) > $this->backend->maxFileSizeInternal() ) {
                        $status->fatal( 'backend-fail-maxsize',
                                $this->params['dst'], $this->backend->maxFileSizeInternal() );
                        $status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
+
                        return $status;
                // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
                        $status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
+
                        return $status;
                }
                // Check if destination file exists
@@ -530,6 +563,7 @@ class StoreFileOp extends FileOp {
                        $predicates['exists'][$this->params['dst']] = true;
                        $predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
                }
+
                return $status; // safe to call attempt()
        }
 
@@ -538,6 +572,7 @@ class StoreFileOp extends FileOp {
                        // Store the file at the destination
                        return $this->backend->storeInternal( $this->setFlags( $this->params ) );
                }
+
                return Status::newGood();
        }
 
@@ -548,6 +583,7 @@ class StoreFileOp extends FileOp {
                if ( $hash !== false ) {
                        $hash = wfBaseConvert( $hash, 16, 36, 31 );
                }
+
                return $hash;
        }
 
@@ -578,15 +614,18 @@ class CopyFileOp extends FileOp {
                                // Update file existence predicates (cache 404s)
                                $predicates['exists'][$this->params['src']] = false;
                                $predicates['sha1'][$this->params['src']] = false;
+
                                return $status; // nothing to do
                        } else {
                                $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
                                return $status;
                        }
-               // Check if a file can be placed/changed at the destination
+                       // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
                        $status->fatal( 'backend-fail-copy', $this->params['src'], $this->params['dst'] );
+
                        return $status;
                }
                // Check if destination file exists
@@ -597,6 +636,7 @@ class CopyFileOp extends FileOp {
                        $predicates['exists'][$this->params['dst']] = true;
                        $predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
                }
+
                return $status; // safe to call attempt()
        }
 
@@ -605,7 +645,7 @@ class CopyFileOp extends FileOp {
                        $status = Status::newGood(); // nothing to do
                } elseif ( $this->params['src'] === $this->params['dst'] ) {
                        // Just update the destination file headers
-                       $headers = $this->getParam( 'headers' ) ?: array();
+                       $headers = $this->getParam( 'headers' ) ? : array();
                        $status = $this->backend->describeInternal( $this->setFlags( array(
                                'src' => $this->params['dst'], 'headers' => $headers
                        ) ) );
@@ -613,6 +653,7 @@ class CopyFileOp extends FileOp {
                        // Copy the file to the destination
                        $status = $this->backend->copyInternal( $this->setFlags( $this->params ) );
                }
+
                return $status;
        }
 
@@ -647,15 +688,18 @@ class MoveFileOp extends FileOp {
                                // Update file existence predicates (cache 404s)
                                $predicates['exists'][$this->params['src']] = false;
                                $predicates['sha1'][$this->params['src']] = false;
+
                                return $status; // nothing to do
                        } else {
                                $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
                                return $status;
                        }
                // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
                        $status->fatal( 'backend-fail-move', $this->params['src'], $this->params['dst'] );
+
                        return $status;
                }
                // Check if destination file exists
@@ -668,6 +712,7 @@ class MoveFileOp extends FileOp {
                        $predicates['exists'][$this->params['dst']] = true;
                        $predicates['sha1'][$this->params['dst']] = $this->sourceSha1;
                }
+
                return $status; // safe to call attempt()
        }
 
@@ -692,6 +737,7 @@ class MoveFileOp extends FileOp {
                        // Move the file to the destination
                        $status = $this->backend->moveInternal( $this->setFlags( $this->params ) );
                }
+
                return $status;
        }
 
@@ -722,20 +768,24 @@ class DeleteFileOp extends FileOp {
                                // Update file existence predicates (cache 404s)
                                $predicates['exists'][$this->params['src']] = false;
                                $predicates['sha1'][$this->params['src']] = false;
+
                                return $status; // nothing to do
                        } else {
                                $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
                                return $status;
                        }
                // Check if a file can be placed/changed at the source
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['src'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['src'] );
                        $status->fatal( 'backend-fail-delete', $this->params['src'] );
+
                        return $status;
                }
                // Update file existence predicates
                $predicates['exists'][$this->params['src']] = false;
                $predicates['sha1'][$this->params['src']] = false;
+
                return $status; // safe to call attempt()
        }
 
@@ -763,11 +813,13 @@ class DescribeFileOp extends FileOp {
                // Check if the source file exists
                if ( !$this->fileExists( $this->params['src'], $predicates ) ) {
                        $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+
                        return $status;
                // Check if a file can be placed/changed at the source
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['src'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['src'] );
                        $status->fatal( 'backend-fail-describe', $this->params['src'] );
+
                        return $status;
                }
                // Update file existence predicates
@@ -775,6 +827,7 @@ class DescribeFileOp extends FileOp {
                        $this->fileExists( $this->params['src'], $predicates );
                $predicates['sha1'][$this->params['src']] =
                        $this->fileSha1( $this->params['src'], $predicates );
+
                return $status; // safe to call attempt()
        }
 
@@ -791,4 +844,5 @@ class DescribeFileOp extends FileOp {
 /**
  * Placeholder operation that has no params and does nothing
  */
-class NullFileOp extends FileOp {}
+class NullFileOp extends FileOp {
+}
index 785c0bc..32b65ba 100644 (file)
@@ -62,6 +62,7 @@ class FileOpBatch {
                if ( $n > self::MAX_BATCH_SIZE ) {
                        $status->fatal( 'backend-fail-batchsize', $n, self::MAX_BATCH_SIZE );
                        wfProfileOut( __METHOD__ );
+
                        return $status;
                }
 
@@ -108,6 +109,7 @@ class FileOpBatch {
                                ++$status->failCount;
                                if ( !$ignoreErrors ) {
                                        wfProfileOut( __METHOD__ );
+
                                        return $status; // abort
                                }
                        }
@@ -122,6 +124,7 @@ class FileOpBatch {
                        $subStatus = $journal->logChangeBatch( $entries, $batchId );
                        if ( !$subStatus->isOK() ) {
                                wfProfileOut( __METHOD__ );
+
                                return $subStatus; // abort
                        }
                }
@@ -134,6 +137,7 @@ class FileOpBatch {
                self::runParallelBatches( $pPerformOps, $status );
 
                wfProfileOut( __METHOD__ );
+
                return $status;
        }
 
@@ -145,7 +149,7 @@ class FileOpBatch {
         * within any given sub-batch do not depend on each other.
         * This will abort remaining ops on failure.
         *
-        * @param Array $pPerformOps
+        * @param array $pPerformOps
         * @param Status $status
         * @return bool Success
         */
@@ -199,6 +203,7 @@ class FileOpBatch {
                                }
                        }
                }
+
                return $status;
        }
 }
index 1787d66..dc2995f 100644 (file)
  * @since 1.19
  */
 class SwiftFileBackend extends FileBackendStore {
-       /** @var CF_Authentication */
-       protected $auth; // Swift authentication handler
-       protected $authTTL; // integer seconds
-       protected $swiftTempUrlKey; // string; shared secret value for making temp urls
-       protected $swiftAnonUser; // string; username to handle unauthenticated requests
-       protected $swiftUseCDN; // boolean; whether CloudFiles CDN is enabled
-       protected $swiftCDNExpiry; // integer; how long to cache things in the CDN
-       protected $swiftCDNPurgable; // boolean; whether object CDN purging is enabled
+       /** @var CF_Authentication Swift authentication handler */
+       protected $auth;
+
+       /** @var int TTL in seconds */
+       protected $authTTL;
+
+       /** @var string Shared secret value for making temp URLs */
+       protected $swiftTempUrlKey;
+
+       /** @var string Username to handle unauthenticated requests */
+       protected $swiftAnonUser;
+
+       /** @var bool Whether CloudFiles CDN is enabled */
+       protected $swiftUseCDN;
+
+       /** @var int How long to cache things in the CDN */
+       protected $swiftCDNExpiry;
+
+       /** @var bool Whether object CDN purging is enabled */
+       protected $swiftCDNPurgable;
 
        // Rados Gateway specific options
-       protected $rgwS3AccessKey; // string; S3 access key
-       protected $rgwS3SecretKey; // string; S3 authentication key
+       /** @var string S3 access key */
+       protected $rgwS3AccessKey;
 
-       /** @var CF_Connection */
-       protected $conn; // Swift connection handle
-       protected $sessionStarted = 0; // integer UNIX timestamp
+       /** @var string S3 authentication key */
+       protected $rgwS3SecretKey;
+
+       /** @var CF_Connection Swift connection handle*/
+       protected $conn;
+
+       /** @var int UNIX timestamp */
+       protected $sessionStarted = 0;
 
        /** @var CloudFilesException */
        protected $connException;
-       protected $connErrorTime = 0; // UNIX timestamp
+
+       /** @var int UNIX timestamp */
+       protected $connErrorTime = 0;
 
        /** @var BagOStuff */
        protected $srvCache;
@@ -153,7 +172,8 @@ class SwiftFileBackend extends FileBackendStore {
                        } else {
                                try { // look for APC, XCache, WinCache, ect...
                                        $this->srvCache = ObjectCache::newAccelerator( array() );
-                               } catch ( Exception $e ) {}
+                               } catch ( Exception $e ) {
+                               }
                        }
                }
                $this->srvCache = $this->srvCache ? $this->srvCache : new EmptyBagOStuff();
@@ -161,7 +181,10 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::resolveContainerPath()
-        * @return null
+        * @param string $container
+        * @param string $relStoragePath
+        * @return string|null Returns null when the URL encoded storage path is
+        *   longer than 1024 characters or not UTF-8 encoded.
         */
        protected function resolveContainerPath( $container, $relStoragePath ) {
                if ( !mb_check_encoding( $relStoragePath, 'UTF-8' ) ) { // mb_string required by CF
@@ -169,6 +192,7 @@ class SwiftFileBackend extends FileBackendStore {
                } elseif ( strlen( urlencode( $relStoragePath ) ) > 1024 ) {
                        return null; // too long for Swift
                }
+
                return $relStoragePath;
        }
 
@@ -180,6 +204,7 @@ class SwiftFileBackend extends FileBackendStore {
 
                try {
                        $this->getContainer( $container );
+
                        return true; // container exists
                } catch ( NoSuchContainerException $e ) {
                } catch ( CloudFilesException $e ) { // some other exception?
@@ -198,6 +223,7 @@ class SwiftFileBackend extends FileBackendStore {
                if ( isset( $headers['Content-Disposition'] ) ) {
                        $headers['Content-Disposition'] = $this->truncDisp( $headers['Content-Disposition'] );
                }
+
                return $headers;
        }
 
@@ -216,6 +242,7 @@ class SwiftFileBackend extends FileBackendStore {
                                break; // too long; sigh
                        }
                }
+
                return $res;
        }
 
@@ -225,6 +252,7 @@ class SwiftFileBackend extends FileBackendStore {
                list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
                if ( $dstRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -233,9 +261,11 @@ class SwiftFileBackend extends FileBackendStore {
                        $dContObj = $this->getContainer( $dstCont );
                } catch ( NoSuchContainerException $e ) {
                        $status->fatal( 'backend-fail-create', $params['dst'] );
+
                        return $status;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -279,7 +309,7 @@ class SwiftFileBackend extends FileBackendStore {
        /**
         * @see SwiftFileBackend::doExecuteOpHandlesInternal()
         */
-       protected function _getResponseCreate( CF_Async_Op $cfOp, Status $status, array $params ) {
+       protected function getResponseCreate( CF_Async_Op $cfOp, Status $status, array $params ) {
                try {
                        $cfOp->getLastResponse();
                } catch ( BadContentTypeException $e ) {
@@ -293,6 +323,7 @@ class SwiftFileBackend extends FileBackendStore {
                list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
                if ( $dstRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -301,9 +332,11 @@ class SwiftFileBackend extends FileBackendStore {
                        $dContObj = $this->getContainer( $dstCont );
                } catch ( NoSuchContainerException $e ) {
                        $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+
                        return $status;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -313,6 +346,7 @@ class SwiftFileBackend extends FileBackendStore {
                wfRestoreWarnings();
                if ( $sha1Hash === false ) { // source doesn't exist?
                        $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+
                        return $status;
                }
                $sha1Hash = wfBaseConvert( $sha1Hash, 16, 36, 31 );
@@ -363,7 +397,7 @@ class SwiftFileBackend extends FileBackendStore {
        /**
         * @see SwiftFileBackend::doExecuteOpHandlesInternal()
         */
-       protected function _getResponseStore( CF_Async_Op $cfOp, Status $status, array $params ) {
+       protected function getResponseStore( CF_Async_Op $cfOp, Status $status, array $params ) {
                try {
                        $cfOp->getLastResponse();
                } catch ( BadContentTypeException $e ) {
@@ -379,12 +413,14 @@ class SwiftFileBackend extends FileBackendStore {
                list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                if ( $srcRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
                list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
                if ( $dstRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -396,9 +432,11 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( empty( $params['ignoreMissingSource'] ) || isset( $sContObj ) ) {
                                $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
                        }
+
                        return $status;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -434,7 +472,7 @@ class SwiftFileBackend extends FileBackendStore {
        /**
         * @see SwiftFileBackend::doExecuteOpHandlesInternal()
         */
-       protected function _getResponseCopy( CF_Async_Op $cfOp, Status $status, array $params ) {
+       protected function getResponseCopy( CF_Async_Op $cfOp, Status $status, array $params ) {
                try {
                        $cfOp->getLastResponse();
                } catch ( NoSuchObjectException $e ) { // source object does not exist
@@ -448,12 +486,14 @@ class SwiftFileBackend extends FileBackendStore {
                list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                if ( $srcRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
                list( $dstCont, $dstRel ) = $this->resolveStoragePathReal( $params['dst'] );
                if ( $dstRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['dst'] );
+
                        return $status;
                }
 
@@ -465,9 +505,11 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( empty( $params['ignoreMissingSource'] ) || isset( $sContObj ) ) {
                                $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
                        }
+
                        return $status;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -506,7 +548,7 @@ class SwiftFileBackend extends FileBackendStore {
        /**
         * @see SwiftFileBackend::doExecuteOpHandlesInternal()
         */
-       protected function _getResponseMove( CF_Async_Op $cfOp, Status $status, array $params ) {
+       protected function getResponseMove( CF_Async_Op $cfOp, Status $status, array $params ) {
                try {
                        $cfOp->getLastResponse();
                } catch ( NoSuchObjectException $e ) { // source object does not exist
@@ -520,6 +562,7 @@ class SwiftFileBackend extends FileBackendStore {
                list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                if ( $srcRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
@@ -554,7 +597,7 @@ class SwiftFileBackend extends FileBackendStore {
        /**
         * @see SwiftFileBackend::doExecuteOpHandlesInternal()
         */
-       protected function _getResponseDelete( CF_Async_Op $cfOp, Status $status, array $params ) {
+       protected function getResponseDelete( CF_Async_Op $cfOp, Status $status, array $params ) {
                try {
                        $cfOp->getLastResponse();
                } catch ( NoSuchContainerException $e ) {
@@ -572,6 +615,7 @@ class SwiftFileBackend extends FileBackendStore {
                list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                if ( $srcRel === null ) {
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+
                        return $status;
                }
 
@@ -605,12 +649,14 @@ class SwiftFileBackend extends FileBackendStore {
                // (a) Check if container already exists
                try {
                        $this->getContainer( $fullCont );
+
                        // NoSuchContainerException not thrown: container must exist
                        return $status; // already exists
                } catch ( NoSuchContainerException $e ) {
                        // NoSuchContainerException thrown: container does not exist
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -631,6 +677,7 @@ class SwiftFileBackend extends FileBackendStore {
                        // CDN not enabled; nothing to see here
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -639,6 +686,9 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::doSecureInternal()
+        * @param string $fullCont
+        * @param string $dir
+        * @param array $params
         * @return Status
         */
        protected function doSecureInternal( $fullCont, $dir, array $params ) {
@@ -674,6 +724,9 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::doPublishInternal()
+        * @param string $fullCont
+        * @param string $dir
+        * @param array $params
         * @return Status
         */
        protected function doPublishInternal( $fullCont, $dir, array $params ) {
@@ -727,6 +780,7 @@ class SwiftFileBackend extends FileBackendStore {
                        return $status; // ok, nothing to do
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -740,6 +794,7 @@ class SwiftFileBackend extends FileBackendStore {
                                return $status; // race? consistency delay?
                        } catch ( CloudFilesException $e ) { // some other exception?
                                $this->handleException( $e, $status, __METHOD__, $params );
+
                                return $status;
                        }
                }
@@ -786,6 +841,7 @@ class SwiftFileBackend extends FileBackendStore {
         */
        protected function convertSwiftDate( $ts, $format = TS_MW ) {
                $timestamp = new MWTimestamp( $ts );
+
                return $timestamp->getTimestamp( $format );
        }
 
@@ -813,6 +869,7 @@ class SwiftFileBackend extends FileBackendStore {
                                        $obj->setMetadataValues( array( 'Sha1base36' => $hash ) );
                                        $obj->sync_metadata(); // save to Swift
                                        wfProfileOut( __METHOD__ );
+
                                        return true; // success
                                }
                        }
@@ -820,6 +877,7 @@ class SwiftFileBackend extends FileBackendStore {
                trigger_error( "Unable to set SHA-1 metadata for $path", E_USER_WARNING );
                $obj->setMetadataValues( array( 'Sha1base36' => false ) );
                wfProfileOut( __METHOD__ );
+
                return false; // failed
        }
 
@@ -893,12 +951,16 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::doDirectoryExists()
+        * @param string $fullCont
+        * @param string $dir
+        * @param array $params
         * @return bool|null
         */
        protected function doDirectoryExists( $fullCont, $dir, array $params ) {
                try {
                        $container = $this->getContainer( $fullCont );
                        $prefix = ( $dir == '' ) ? null : "{$dir}/";
+
                        return ( count( $container->list_objects( 1, null, $prefix ) ) > 0 );
                } catch ( NoSuchContainerException $e ) {
                        return false;
@@ -912,6 +974,9 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::getDirectoryListInternal()
+        * @param string $fullCont
+        * @param string $dir
+        * @param array $params
         * @return SwiftFileBackendDirList
         */
        public function getDirectoryListInternal( $fullCont, $dir, array $params ) {
@@ -920,6 +985,9 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::getFileListInternal()
+        * @param string $fullCont
+        * @param string $dir
+        * @param array $params
         * @return SwiftFileBackendFileList
         */
        public function getFileListInternal( $fullCont, $dir, array $params ) {
@@ -932,9 +1000,9 @@ class SwiftFileBackend extends FileBackendStore {
         * @param string $fullCont Resolved container name
         * @param string $dir Resolved storage directory with no trailing slash
         * @param string|null $after Resolved container relative path to list items after
-        * @param integer $limit Max number of items to list
+        * @param int $limit Max number of items to list
         * @param array $params Parameters for getDirectoryList()
-        * @return Array List of container relative resolved paths of directories directly under $dir
+        * @return array List of container relative resolved paths of directories directly under $dir
         * @throws FileBackendError
         */
        public function getDirListPageInternal( $fullCont, $dir, &$after, $limit, array $params ) {
@@ -1007,9 +1075,9 @@ class SwiftFileBackend extends FileBackendStore {
         * @param string $fullCont Resolved container name
         * @param string $dir Resolved storage directory with no trailing slash
         * @param string|null $after Resolved container relative path of file to list items after
-        * @param integer $limit Max number of items to list
+        * @param int $limit Max number of items to list
         * @param array $params Parameters for getDirectoryList()
-        * @return Array List of resolved container relative paths of files under $dir
+        * @return array List of resolved container relative paths of files under $dir
         * @throws FileBackendError
         */
        public function getFileListPageInternal( $fullCont, $dir, &$after, $limit, array $params ) {
@@ -1022,7 +1090,8 @@ class SwiftFileBackend extends FileBackendStore {
                try {
                        $container = $this->getContainer( $fullCont );
                        $prefix = ( $dir == '' ) ? null : "{$dir}/";
-                       $objects = array(); // list of unfiltered names or CF_Object items
+
+                       // $objects will contain a list of unfiltered names or CF_Object items
                        // Non-recursive: only list files right under $dir
                        if ( !empty( $params['topOnly'] ) ) {
                                if ( !empty( $params['adviseStat'] ) ) {
@@ -1075,8 +1144,8 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( is_object( $object ) ) {
                                $stat = array(
                                        // Convert various random Swift dates to TS_MW
-                                       'mtime'  => $this->convertSwiftDate( $object->last_modified, TS_MW ),
-                                       'size'   => (int)$object->content_length,
+                                       'mtime' => $this->convertSwiftDate( $object->last_modified, TS_MW ),
+                                       'size' => (int)$object->content_length,
                                        'latest' => false // eventually consistent
                                );
                                $names[] = array( $object->name, $stat );
@@ -1085,6 +1154,7 @@ class SwiftFileBackend extends FileBackendStore {
                                $names[] = array( $object, null );
                        }
                }
+
                return $names;
        }
 
@@ -1093,7 +1163,6 @@ class SwiftFileBackend extends FileBackendStore {
         *
         * @param string $path Storage path
         * @param array $val Stat value
-        * @return void
         */
        public function loadListingStatInternal( $path, array $val ) {
                $this->cheapCache->set( $path, 'stat', $val );
@@ -1107,6 +1176,7 @@ class SwiftFileBackend extends FileBackendStore {
                                $this->clearCache( array( $params['src'] ) );
                                $stat = $this->getFileStat( $params );
                        }
+
                        return $stat['sha1'];
                } else {
                        return false;
@@ -1125,9 +1195,11 @@ class SwiftFileBackend extends FileBackendStore {
                        $cont = $this->getContainer( $srcCont );
                } catch ( NoSuchContainerException $e ) {
                        $status->fatal( 'backend-fail-stream', $params['src'] );
+
                        return $status;
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
+
                        return $status;
                }
 
@@ -1215,8 +1287,8 @@ class SwiftFileBackend extends FileBackendStore {
 
        public function getFileHttpUrl( array $params ) {
                if ( $this->swiftTempUrlKey != '' ||
-                       ( $this->rgwS3AccessKey != '' && $this->rgwS3SecretKey != '' ) )
-               {
+                       ( $this->rgwS3AccessKey != '' && $this->rgwS3SecretKey != '' )
+               {
                        list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                        if ( $srcRel === null ) {
                                return null; // invalid path
@@ -1239,6 +1311,7 @@ class SwiftFileBackend extends FileBackendStore {
                                                $this->rgwS3SecretKey,
                                                true // raw
                                        ) );
+
                                        // See http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html.
                                        // Note: adding a newline for empty CanonicalizedAmzHeaders does not work.
                                        return wfAppendQuery(
@@ -1255,6 +1328,7 @@ class SwiftFileBackend extends FileBackendStore {
                                $this->handleException( $e, null, __METHOD__, $params );
                        }
                }
+
                return null;
        }
 
@@ -1268,13 +1342,14 @@ class SwiftFileBackend extends FileBackendStore {
         * $params is currently only checked for a 'latest' flag.
         *
         * @param array $params
-        * @return Array
+        * @return array
         */
        protected function headersFromParams( array $params ) {
                $hdrs = array();
                if ( !empty( $params['latest'] ) ) {
                        $hdrs[] = 'X-Newest: true';
                }
+
                return $hdrs;
        }
 
@@ -1290,7 +1365,7 @@ class SwiftFileBackend extends FileBackendStore {
                $cfOps = $batch->execute();
                foreach ( $cfOps as $index => $cfOp ) {
                        $status = Status::newGood();
-                       $function = '_getResponse' . $fileOpHandles[$index]->call;
+                       $function = 'getResponse' . $fileOpHandles[$index]->call;
                        try { // catch exceptions; update status
                                $this->$function( $cfOp, $status, $fileOpHandles[$index]->params );
                                $this->purgeCDNCache( $fileOpHandles[$index]->affectedObjects );
@@ -1307,7 +1382,13 @@ class SwiftFileBackend extends FileBackendStore {
        /**
         * Set read/write permissions for a Swift container.
         *
-        * $readGrps is a list of the possible criteria for a request to have
+        * @see http://swift.openstack.org/misc.html#acls
+        *
+        * In general, we don't allow listings to end-users. It's not useful, isn't well-defined
+        * (lists are truncated to 10000 item with no way to page), and is just a performance risk.
+        *
+        * @param CF_Container $contObj Swift container
+        * @param array $readGrps List of the possible criteria for a request to have
         * access to read a container. Each item is one of the following formats:
         *   - account:user        : Grants access if the request is by the given user
         *   - ".r:<regex>"        : Grants access if the request is from a referrer host that
@@ -1315,19 +1396,9 @@ class SwiftFileBackend extends FileBackendStore {
         *                           Setting this to '*' effectively makes a container public.
         *   -".rlistings:<regex>" : Grants access if the request is from a referrer host that
         *                           matches the expression and the request is for a listing.
-        *
-        * $writeGrps is a list of the possible criteria for a request to have
+        * @param array $writeGrps A list of the possible criteria for a request to have
         * access to write to a container. Each item is of the following format:
         *   - account:user       : Grants access if the request is by the given user
-        *
-        * @see http://swift.openstack.org/misc.html#acls
-        *
-        * In general, we don't allow listings to end-users. It's not useful, isn't well-defined
-        * (lists are truncated to 10000 item with no way to page), and is just a performance risk.
-        *
-        * @param CF_Container $contObj Swift container
-        * @param array $readGrps List of read access routes
-        * @param array $writeGrps List of write access routes
         * @return Status
         */
        protected function setContainerAccess(
@@ -1351,7 +1422,6 @@ class SwiftFileBackend extends FileBackendStore {
         * This is for Rackspace/Akamai CDNs.
         *
         * @param array $objects List of CF_Object items
-        * @return void
         */
        public function purgeCDNCache( array $objects ) {
                if ( $this->swiftUseCDN && $this->swiftCDNPurgable ) {
@@ -1413,13 +1483,12 @@ class SwiftFileBackend extends FileBackendStore {
                        }
                        $this->conn = new CF_Connection( $this->auth );
                }
+
                return $this->conn;
        }
 
        /**
         * Close the connection to the Swift proxy
-        *
-        * @return void
         */
        protected function closeConnection() {
                if ( $this->conn ) {
@@ -1466,6 +1535,7 @@ class SwiftFileBackend extends FileBackendStore {
                                );
                        }
                }
+
                return $this->connContainerCache->get( $container, 'obj' );
        }
 
@@ -1487,7 +1557,6 @@ class SwiftFileBackend extends FileBackendStore {
         * Delete a Swift container
         *
         * @param string $container Container name
-        * @return void
         * @throws CloudFilesException
         */
        protected function deleteContainer( $container ) {
@@ -1514,10 +1583,9 @@ class SwiftFileBackend extends FileBackendStore {
         * This also sets the Status object to have a fatal error.
         *
         * @param Exception $e
-        * @param Status $status|null
+        * @param Status $status null
         * @param string $func
         * @param array $params
-        * @return void
         */
        protected function handleException( Exception $e, $status, $func, array $params ) {
                if ( $status instanceof Status ) {
@@ -1547,7 +1615,8 @@ class SwiftFileBackend extends FileBackendStore {
 class SwiftFileOpHandle extends FileBackendStoreOpHandle {
        /** @var CF_Async_Op */
        public $cfOp;
-       /** @var Array */
+
+       /** @var array */
        public $affectedObjects = array();
 
        /**
@@ -1574,18 +1643,29 @@ class SwiftFileOpHandle extends FileBackendStoreOpHandle {
  * @ingroup FileBackend
  */
 abstract class SwiftFileBackendList implements Iterator {
-       /** @var Array List of path or (path,stat array) entries */
+       /** @var array List of path or (path,stat array) entries */
        protected $bufferIter = array();
-       protected $bufferAfter = null; // string; list items *after* this path
-       protected $pos = 0; // integer
-       /** @var Array */
+
+       /** @var string List items *after* this path */
+       protected $bufferAfter = null;
+
+       /** @var int */
+       protected $pos = 0;
+
+       /** @var array */
        protected $params = array();
 
        /** @var SwiftFileBackend */
        protected $backend;
-       protected $container; // string; container name
-       protected $dir; // string; storage directory
-       protected $suffixStart; // integer
+
+       /** @var string Container name */
+       protected $container;
+
+       /** @var string Storage directory */
+       protected $dir;
+
+       /** @var int */
+       protected $suffixStart;
 
        const PAGE_SIZE = 9000; // file listing buffer size
 
@@ -1612,7 +1692,7 @@ abstract class SwiftFileBackendList implements Iterator {
 
        /**
         * @see Iterator::key()
-        * @return integer
+        * @return int
         */
        public function key() {
                return $this->pos;
@@ -1620,7 +1700,6 @@ abstract class SwiftFileBackendList implements Iterator {
 
        /**
         * @see Iterator::next()
-        * @return void
         */
        public function next() {
                // Advance to the next file in the page
@@ -1637,7 +1716,6 @@ abstract class SwiftFileBackendList implements Iterator {
 
        /**
         * @see Iterator::rewind()
-        * @return void
         */
        public function rewind() {
                $this->pos = 0;
@@ -1664,10 +1742,10 @@ abstract class SwiftFileBackendList implements Iterator {
         *
         * @param string $container Resolved container name
         * @param string $dir Resolved path relative to container
-        * @param string $after|null
-        * @param integer $limit
+        * @param string $after null
+        * @param int $limit
         * @param array $params
-        * @return Traversable|Array
+        * @return Traversable|array
         */
        abstract protected function pageFromList( $container, $dir, &$after, $limit, array $params );
 }
@@ -1686,7 +1764,12 @@ class SwiftFileBackendDirList extends SwiftFileBackendList {
 
        /**
         * @see SwiftFileBackendList::pageFromList()
-        * @return Array
+        * @param string $container
+        * @param string $dir
+        * @param string $after
+        * @param int $limit
+        * @param array $params
+        * @return array
         */
        protected function pageFromList( $container, $dir, &$after, $limit, array $params ) {
                return $this->backend->getDirListPageInternal( $container, $dir, $after, $limit, $params );
@@ -1708,12 +1791,18 @@ class SwiftFileBackendFileList extends SwiftFileBackendList {
                        $storageDir = rtrim( $this->params['dir'], '/' );
                        $this->backend->loadListingStatInternal( "$storageDir/$relPath", $stat );
                }
+
                return $relPath;
        }
 
        /**
         * @see SwiftFileBackendList::pageFromList()
-        * @return Array
+        * @param string $container
+        * @param string $dir
+        * @param string $after
+        * @param int $limit
+        * @param array $params
+        * @return array
         */
        protected function pageFromList( $container, $dir, &$after, $limit, array $params ) {
                return $this->backend->getFileListPageInternal( $container, $dir, $after, $limit, $params );
index 8266e42..611fab9 100644 (file)
  * @ingroup FileBackend
  */
 class TempFSFile extends FSFile {
-       protected $canDelete = false; // bool; garbage collect the temp file
+       /** @var bool Garbage collect the temp file */
+       protected $canDelete = false;
 
-       /** @var Array of active temp files to purge on shutdown */
+       /** @var array Active temp files to purge on shutdown */
        protected static $instances = array();
 
        /**
@@ -56,12 +57,14 @@ class TempFSFile extends FSFile {
                        }
                        if ( $attempt >= 5 ) {
                                wfProfileOut( __METHOD__ );
+
                                return null; // give up
                        }
                }
                $tmpFile = new self( $path );
                $tmpFile->canDelete = true; // safely instantiated
                wfProfileOut( __METHOD__ );
+
                return $tmpFile;
        }
 
@@ -75,13 +78,14 @@ class TempFSFile extends FSFile {
                wfSuppressWarnings();
                $ok = unlink( $this->path );
                wfRestoreWarnings();
+
                return $ok;
        }
 
        /**
         * Clean up the temporary file only after an object goes out of scope
         *
-        * @param Object $object
+        * @param stdClass $object
         * @return TempFSFile This object
         */
        public function bind( $object ) {
@@ -92,6 +96,7 @@ class TempFSFile extends FSFile {
                        }
                        $object->tempFSFileReferences[] = $this;
                }
+
                return $this;
        }
 
@@ -102,6 +107,7 @@ class TempFSFile extends FSFile {
         */
        public function preserve() {
                $this->canDelete = false;
+
                return $this;
        }
 
@@ -112,6 +118,7 @@ class TempFSFile extends FSFile {
         */
        public function autocollect() {
                $this->canDelete = true;
+
                return $this;
        }
 
index 9250aa5..4f64f02 100644 (file)
@@ -34,10 +34,9 @@ class DBFileJournal extends FileJournal {
 
        /**
         * Construct a new instance from configuration.
-        * $config includes:
-        *     'wiki' : wiki name to use for LoadBalancer
         *
-        * @param $config Array
+        * @param array $config Includes:
+        *     'wiki' : wiki name to use for LoadBalancer
         */
        protected function __construct( array $config ) {
                parent::__construct( $config );
@@ -47,6 +46,8 @@ class DBFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::logChangeBatch()
+        * @param array $entries
+        * @param string $batchId
         * @return Status
         */
        protected function doLogChangeBatch( array $entries, $batchId ) {
@@ -56,6 +57,7 @@ class DBFileJournal extends FileJournal {
                        $dbw = $this->getMasterDB();
                } catch ( DBError $e ) {
                        $status->fatal( 'filejournal-fail-dbconnect', $this->backend );
+
                        return $status;
                }
 
@@ -80,6 +82,7 @@ class DBFileJournal extends FileJournal {
                        }
                } catch ( DBError $e ) {
                        $status->fatal( 'filejournal-fail-dbquery', $this->backend );
+
                        return $status;
                }
 
@@ -88,7 +91,7 @@ class DBFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::doGetCurrentPosition()
-        * @return integer|false
+        * @return bool|mixed The value from the field, or false on failure.
         */
        protected function doGetCurrentPosition() {
                $dbw = $this->getMasterDB();
@@ -101,13 +104,14 @@ class DBFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::doGetPositionAtTime()
-        * @param $time integer|string timestamp
-        * @return integer|false
+        * @param int|string $time Timestamp
+        * @return bool|mixed The value from the field, or false on failure.
         */
        protected function doGetPositionAtTime( $time ) {
                $dbw = $this->getMasterDB();
 
                $encTimestamp = $dbw->addQuotes( $dbw->timestamp( $time ) );
+
                return $dbw->selectField( 'filejournal', 'fj_id',
                        array( 'fj_backend' => $this->backend, "fj_timestamp <= $encTimestamp" ),
                        __METHOD__,
@@ -117,8 +121,9 @@ class DBFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::doGetChangeEntries()
-        * @return Array
-        * @throws DBError
+        * @param int $start
+        * @param int $limit
+        * @return array
         */
        protected function doGetChangeEntries( $start, $limit ) {
                $dbw = $this->getMasterDB();
@@ -179,6 +184,7 @@ class DBFileJournal extends FileJournal {
                        $this->dbw = $lb->getConnection( DB_MASTER, array(), $this->wiki );
                        $this->dbw->clearFlag( DBO_TRX );
                }
+
                return $this->dbw;
        }
 }
index a1b7a45..3ab9f5d 100644 (file)
  * @since 1.20
  */
 abstract class FileJournal {
-       protected $backend; // string
-       protected $ttlDays; // integer
+       /** @var  string */
+       protected $backend;
+
+       /** @var int */
+       protected $ttlDays;
 
        /**
         * Construct a new instance from configuration.
-        * $config includes:
-        *     'ttlDays' : days to keep log entries around (false means "forever")
         *
-        * @param $config Array
+        * @param array $config Includes:
+        *     'ttlDays' : days to keep log entries around (false means "forever")
         */
        protected function __construct( array $config ) {
                $this->ttlDays = isset( $config['ttlDays'] ) ? $config['ttlDays'] : false;
@@ -53,7 +55,7 @@ abstract class FileJournal {
        /**
         * Create an appropriate FileJournal object from config
         *
-        * @param $config Array
+        * @param array $config
         * @param string $backend A registered file backend name
         * @throws MWException
         * @return FileJournal
@@ -65,6 +67,7 @@ abstract class FileJournal {
                        throw new MWException( "Class given is not an instance of FileJournal." );
                }
                $jrn->backend = $backend;
+
                return $jrn;
        }
 
@@ -79,18 +82,18 @@ abstract class FileJournal {
                        $s .= mt_rand( 0, 2147483647 );
                }
                $s = wfBaseConvert( sha1( $s ), 16, 36, 31 );
+
                return substr( wfBaseConvert( wfTimestamp( TS_MW ), 10, 36, 9 ) . $s, 0, 31 );
        }
 
        /**
         * Log changes made by a batch file operation.
-        * $entries is an array of log entries, each of which contains:
+        *
+        * @param array $entries List of file operations (each an array of parameters) which contain:
         *     op      : Basic operation name (create, update, delete)
         *     path    : The storage path of the file
         *     newSha1 : The final base 36 SHA-1 of the file
-        * Note that 'false' should be used as the SHA-1 for non-existing files.
-        *
-        * @param array $entries List of file operations (each an array of parameters)
+        *   Note that 'false' should be used as the SHA-1 for non-existing files.
         * @param string $batchId UUID string that identifies the operation batch
         * @return Status
         */
@@ -98,6 +101,7 @@ abstract class FileJournal {
                if ( !count( $entries ) ) {
                        return Status::newGood();
                }
+
                return $this->doLogChangeBatch( $entries, $batchId );
        }
 
@@ -113,7 +117,7 @@ abstract class FileJournal {
        /**
         * Get the position ID of the latest journal entry
         *
-        * @return integer|false
+        * @return int|bool
         */
        final public function getCurrentPosition() {
                return $this->doGetCurrentPosition();
@@ -121,15 +125,15 @@ abstract class FileJournal {
 
        /**
         * @see FileJournal::getCurrentPosition()
-        * @return integer|false
+        * @return int|bool
         */
        abstract protected function doGetCurrentPosition();
 
        /**
         * Get the position ID of the latest journal entry at some point in time
         *
-        * @param $time integer|string timestamp
-        * @return integer|false
+        * @param int|string $time timestamp
+        * @return int|bool
         */
        final public function getPositionAtTime( $time ) {
                return $this->doGetPositionAtTime( $time );
@@ -137,8 +141,8 @@ abstract class FileJournal {
 
        /**
         * @see FileJournal::getPositionAtTime()
-        * @param $time integer|string timestamp
-        * @return integer|false
+        * @param int|string $time Timestamp
+        * @return int|bool
         */
        abstract protected function doGetPositionAtTime( $time );
 
@@ -146,7 +150,10 @@ abstract class FileJournal {
         * Get an array of file change log entries.
         * A starting change ID and/or limit can be specified.
         *
-        * The result as a list of associative arrays, each having:
+        * @param $start integer Starting change ID or null
+        * @param $limit integer Maximum number of items to return
+        * @param &$next string Updated to the ID of the next entry.
+        * @return array List of associative arrays, each having:
         *     id         : unique, monotonic, ID for this change
         *     batch_uuid : UUID for an operation batch
         *     backend    : the backend name
@@ -154,13 +161,7 @@ abstract class FileJournal {
         *     path       : affected storage path
         *     new_sha1   : base 36 sha1 of the new file had the operation succeeded
         *     timestamp  : TS_MW timestamp of the batch change
-
-        * Also, $next is updated to the ID of the next entry.
-        *
-        * @param $start integer Starting change ID or null
-        * @param $limit integer Maximum number of items to return
-        * @param &$next string
-        * @return Array
+        *   Also, $next is updated to the ID of the next entry.
         */
        final public function getChangeEntries( $start = null, $limit = 0, &$next = null ) {
                $entries = $this->doGetChangeEntries( $start, $limit ? $limit + 1 : 0 );
@@ -170,12 +171,15 @@ abstract class FileJournal {
                } else {
                        $next = null; // end of list
                }
+
                return $entries;
        }
 
        /**
         * @see FileJournal::getChangeEntries()
-        * @return Array
+        * @param int $start
+        * @param int $limit
+        * @return array
         */
        abstract protected function doGetChangeEntries( $start, $limit );
 
@@ -202,8 +206,8 @@ abstract class FileJournal {
 class NullFileJournal extends FileJournal {
        /**
         * @see FileJournal::doLogChangeBatch()
-        * @param $entries array
-        * @param $batchId string
+        * @param array $entries
+        * @param string $batchId
         * @return Status
         */
        protected function doLogChangeBatch( array $entries, $batchId ) {
@@ -212,7 +216,7 @@ class NullFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::doGetCurrentPosition()
-        * @return integer|false
+        * @return int|bool
         */
        protected function doGetCurrentPosition() {
                return false;
@@ -220,8 +224,8 @@ class NullFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::doGetPositionAtTime()
-        * @param $time integer|string timestamp
-        * @return integer|false
+        * @param int|string $time timestamp
+        * @return int|bool
         */
        protected function doGetPositionAtTime( $time ) {
                return false;
@@ -229,7 +233,9 @@ class NullFileJournal extends FileJournal {
 
        /**
         * @see FileJournal::doGetChangeEntries()
-        * @return Array
+        * @param int $start
+        * @param int $limit
+        * @return array
         */
        protected function doGetChangeEntries( $start, $limit ) {
                return array();
index 3e934ba..4418a83 100644 (file)
@@ -37,7 +37,7 @@
  * @since 1.19
  */
 abstract class DBLockManager extends QuorumLockManager {
-       /** @var Array Map of DB names to server config */
+       /** @var array Map of DB names to server config */
        protected $dbServers; // (DB name => server config array)
        /** @var BagOStuff */
        protected $statusCache;
@@ -46,13 +46,13 @@ abstract class DBLockManager extends QuorumLockManager {
        protected $safeDelay; // integer number of seconds
 
        protected $session = 0; // random integer
-       /** @var Array Map Database connections (DB name => Database) */
+       /** @var array Map Database connections (DB name => Database) */
        protected $conns = array();
 
        /**
         * Construct a new instance from configuration.
         *
-        * $config paramaters include:
+        * @param array $config Paramaters include:
         *   - dbServers   : Associative array of DB names to server configuration.
         *                   Configuration is an associative array that includes:
         *                     - host        : DB server name
@@ -70,8 +70,6 @@ abstract class DBLockManager extends QuorumLockManager {
         *   - lockExpiry  : Lock timeout (seconds) for dropped connections. [optional]
         *                   This tells the DB server how long to wait before assuming
         *                   connection failure and releasing all the locks for a session.
-        *
-        * @param array $config
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
@@ -116,6 +114,7 @@ abstract class DBLockManager extends QuorumLockManager {
                foreach ( $pathsByType as $type => $paths ) {
                        $status->merge( $this->doGetLocksOnServer( $lockSrv, $paths, $type ) );
                }
+
                return $status;
        }
 
@@ -125,6 +124,7 @@ abstract class DBLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::isServerUp()
+        * @param string $lockSrv
         * @return bool
         */
        protected function isServerUp( $lockSrv ) {
@@ -135,15 +135,17 @@ abstract class DBLockManager extends QuorumLockManager {
                        $this->getConnection( $lockSrv );
                } catch ( DBError $e ) {
                        $this->cacheRecordFailure( $lockSrv );
+
                        return false; // failed to connect
                }
+
                return true;
        }
 
        /**
         * Get (or reuse) a connection to a lock DB
         *
-        * @param $lockDb string
+        * @param string $lockDb
         * @return DatabaseBase
         * @throws DBError
         */
@@ -175,18 +177,19 @@ abstract class DBLockManager extends QuorumLockManager {
                if ( !$this->conns[$lockDb]->trxLevel() ) {
                        $this->conns[$lockDb]->begin( __METHOD__ ); // start transaction
                }
+
                return $this->conns[$lockDb];
        }
 
        /**
         * Do additional initialization for new lock DB connection
         *
-        * @param $lockDb string
-        * @param $db DatabaseBase
-        * @return void
+        * @param string $lockDb
+        * @param DatabaseBase $db
         * @throws DBError
         */
-       protected function initConnection( $lockDb, DatabaseBase $db ) {}
+       protected function initConnection( $lockDb, DatabaseBase $db ) {
+       }
 
        /**
         * Checks if the DB has not recently had connection/query errors.
@@ -204,7 +207,7 @@ abstract class DBLockManager extends QuorumLockManager {
        /**
         * Log a lock request failure to the cache
         *
-        * @param $lockDb string
+        * @param string $lockDb
         * @return bool Success
         */
        protected function cacheRecordFailure( $lockDb ) {
@@ -216,7 +219,7 @@ abstract class DBLockManager extends QuorumLockManager {
        /**
         * Get a cache key for recent query misses for a DB
         *
-        * @param $lockDb string
+        * @param string $lockDb
         * @return string
         */
        protected function getMissKey( $lockDb ) {
@@ -242,7 +245,7 @@ abstract class DBLockManager extends QuorumLockManager {
  * @ingroup LockManager
  */
 class MySqlLockManager extends DBLockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_SH,
@@ -250,8 +253,8 @@ class MySqlLockManager extends DBLockManager {
        );
 
        /**
-        * @param $lockDb string
-        * @param $db DatabaseBase
+        * @param string $lockDb
+        * @param DatabaseBase $db
         */
        protected function initConnection( $lockDb, DatabaseBase $db ) {
                # Let this transaction see lock rows from other transactions
@@ -263,6 +266,9 @@ class MySqlLockManager extends DBLockManager {
         * This does not use GET_LOCK() per http://bugs.mysql.com/bug.php?id=1118.
         *
         * @see DBLockManager::getLocksOnServer()
+        * @param string $lockSrv
+        * @param array $paths
+        * @param string $type
         * @return Status
         */
        protected function doGetLocksOnServer( $lockSrv, array $paths, $type ) {
@@ -359,7 +365,7 @@ class MySqlLockManager extends DBLockManager {
  * @ingroup LockManager
  */
 class PostgreSqlLockManager extends DBLockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_SH,
@@ -374,7 +380,7 @@ class PostgreSqlLockManager extends DBLockManager {
 
                $db = $this->getConnection( $lockSrv ); // checked in isServerUp()
                $bigints = array_unique( array_map(
-                       function( $key ) {
+                       function ( $key ) {
                                return wfBaseConvert( substr( $key, 0, 15 ), 16, 10 );
                        },
                        array_map( array( $this, 'sha1Base16Absolute' ), $paths )
index eacba70..bce6b34 100644 (file)
@@ -34,7 +34,7 @@
  * @since 1.19
  */
 class FSLockManager extends LockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_SH,
@@ -43,16 +43,14 @@ class FSLockManager extends LockManager {
 
        protected $lockDir; // global dir for all servers
 
-       /** @var Array Map of (locked key => lock file handle) */
+       /** @var array Map of (locked key => lock file handle) */
        protected $handles = array();
 
        /**
         * Construct a new instance from configuration.
         *
-        * $config includes:
+        * @param array $config Includes:
         *   - lockDirectory : Directory containing the lock files
-        *
-        * @param array $config
         */
        function __construct( array $config ) {
                parent::__construct( $config );
@@ -62,8 +60,8 @@ class FSLockManager extends LockManager {
 
        /**
         * @see LockManager::doLock()
-        * @param $paths array
-        * @param $type int
+        * @param array $paths
+        * @param int $type
         * @return Status
         */
        protected function doLock( array $paths, $type ) {
@@ -77,6 +75,7 @@ class FSLockManager extends LockManager {
                        } else {
                                // Abort and unlock everything
                                $status->merge( $this->doUnlock( $lockedPaths, $type ) );
+
                                return $status;
                        }
                }
@@ -86,8 +85,8 @@ class FSLockManager extends LockManager {
 
        /**
         * @see LockManager::doUnlock()
-        * @param $paths array
-        * @param $type int
+        * @param array $paths
+        * @param int $type
         * @return Status
         */
        protected function doUnlock( array $paths, $type ) {
@@ -103,8 +102,8 @@ class FSLockManager extends LockManager {
        /**
         * Lock a single resource key
         *
-        * @param $path string
-        * @param $type integer
+        * @param string $path
+        * @param int $type
         * @return Status
         */
        protected function doSingleLock( $path, $type ) {
@@ -148,8 +147,8 @@ class FSLockManager extends LockManager {
        /**
         * Unlock a single resource key
         *
-        * @param $path string
-        * @param $type integer
+        * @param string $path
+        * @param int $type
         * @return Status
         */
        protected function doSingleUnlock( $path, $type ) {
@@ -191,8 +190,8 @@ class FSLockManager extends LockManager {
        }
 
        /**
-        * @param $path string
-        * @param $handlesToClose array
+        * @param string $path
+        * @param array $handlesToClose
         * @return Status
         */
        private function closeLockHandles( $path, array $handlesToClose ) {
@@ -205,11 +204,12 @@ class FSLockManager extends LockManager {
                                $status->warning( 'lockmanager-fail-closelock', $path );
                        }
                }
+
                return $status;
        }
 
        /**
-        * @param $path string
+        * @param string $path
         * @return Status
         */
        private function pruneKeyLockFiles( $path ) {
@@ -221,12 +221,13 @@ class FSLockManager extends LockManager {
                        }
                        unset( $this->handles[$path] );
                }
+
                return $status;
        }
 
        /**
         * Get the path to the lock file for a key
-        * @param $path string
+        * @param string $path
         * @return string
         */
        protected function getLockPath( $path ) {
index 97de8dc..539a780 100644 (file)
  * @since 1.19
  */
 class LSLockManager extends QuorumLockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_SH,
                self::LOCK_EX => self::LOCK_EX
        );
 
-       /** @var Array Map of server names to server config */
+       /** @var array Map of server names to server config */
        protected $lockServers; // (server name => server config array)
 
-       /** @var Array Map Server connections (server name => resource) */
+       /** @var array Map Server connections (server name => resource) */
        protected $conns = array();
 
        protected $connTimeout; // float number of seconds
@@ -56,7 +56,7 @@ class LSLockManager extends QuorumLockManager {
        /**
         * Construct a new instance from configuration.
         *
-        * $config paramaters include:
+        * @param array $config Paramaters include:
         *   - lockServers  : Associative array of server names to configuration.
         *                    Configuration is an associative array that includes:
         *                      - host    : IP address/hostname
@@ -65,8 +65,6 @@ class LSLockManager extends QuorumLockManager {
         *   - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
         *                    each having an odd-numbered list of server names (peers) as values.
         *   - connTimeout  : Lock server connection attempt timeout. [optional]
-        *
-        * @param array $config
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
@@ -87,6 +85,9 @@ class LSLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::getLocksOnServer()
+        * @param string $lockSrv
+        * @param array $paths
+        * @param int $type
         * @return Status
         */
        protected function getLocksOnServer( $lockSrv, array $paths, $type ) {
@@ -108,6 +109,9 @@ class LSLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::freeLocksOnServer()
+        * @param string $lockSrv
+        * @param array $paths
+        * @param int $type
         * @return Status
         */
        protected function freeLocksOnServer( $lockSrv, array $paths, $type ) {
@@ -146,6 +150,7 @@ class LSLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::isServerUp()
+        * @param string $lockSrv
         * @return bool
         */
        protected function isServerUp( $lockSrv ) {
@@ -155,10 +160,10 @@ class LSLockManager extends QuorumLockManager {
        /**
         * Send a command and get back the response
         *
-        * @param $lockSrv string
-        * @param $action string
-        * @param $type string
-        * @param $values Array
+        * @param string $lockSrv
+        * @param string $action
+        * @param string $type
+        * @param array $values
         * @return string|bool
         */
        protected function sendCommand( $lockSrv, $action, $type, $values ) {
@@ -179,13 +184,14 @@ class LSLockManager extends QuorumLockManager {
                if ( $response === false ) {
                        return false;
                }
+
                return trim( $response );
        }
 
        /**
         * Get (or reuse) a connection to a lock server
         *
-        * @param $lockSrv string
+        * @param string $lockSrv
         * @return resource
         */
        protected function getConnection( $lockSrv ) {
@@ -203,6 +209,7 @@ class LSLockManager extends QuorumLockManager {
                        stream_set_timeout( $conn, $sec, $usec );
                        $this->conns[$lockSrv] = $conn;
                }
+
                return $this->conns[$lockSrv];
        }
 
index dad8a62..df8d2d4 100644 (file)
  * @since 1.19
  */
 abstract class LockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_EX, // subclasses may use self::LOCK_SH
                self::LOCK_EX => self::LOCK_EX
        );
 
-       /** @var Array Map of (resource path => lock type => count) */
+       /** @var array Map of (resource path => lock type => count) */
        protected $locksHeld = array();
 
        protected $domain; // string; domain (usually wiki ID)
@@ -64,12 +64,10 @@ abstract class LockManager {
        /**
         * Construct a new instance from configuration
         *
-        * $config paramaters include:
+        * @param array $config Paramaters include:
         *   - domain  : Domain (usually wiki ID) that all resources are relative to [optional]
         *   - lockTTL : Age (in seconds) at which resource locks should expire.
         *               This only applies if locks are not tied to a connection/process.
-        *
-        * @param $config Array
         */
        public function __construct( array $config ) {
                $this->domain = isset( $config['domain'] ) ? $config['domain'] : wfWikiID();
@@ -87,8 +85,8 @@ abstract class LockManager {
         * Lock the resources at the given abstract paths
         *
         * @param array $paths List of resource names
-        * @param $type integer LockManager::LOCK_* constant
-        * @param integer $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
+        * @param int $type LockManager::LOCK_* constant
+        * @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
         * @return Status
         */
        final public function lock( array $paths, $type = self::LOCK_EX, $timeout = 0 ) {
@@ -99,7 +97,7 @@ abstract class LockManager {
         * Lock the resources at the given abstract paths
         *
         * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
-        * @param integer $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
+        * @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
         * @return Status
         * @since 1.22
         */
@@ -119,6 +117,7 @@ abstract class LockManager {
                        $elapsed = microtime( true ) - $start;
                } while ( $elapsed < $timeout && $elapsed >= 0 );
                wfProfileOut( __METHOD__ );
+
                return $status;
        }
 
@@ -126,7 +125,7 @@ abstract class LockManager {
         * Unlock the resources at the given abstract paths
         *
         * @param array $paths List of paths
-        * @param $type integer LockManager::LOCK_* constant
+        * @param int $type LockManager::LOCK_* constant
         * @return Status
         */
        final public function unlock( array $paths, $type = self::LOCK_EX ) {
@@ -145,6 +144,7 @@ abstract class LockManager {
                $pathsByType = $this->normalizePathsByType( $pathsByType );
                $status = $this->doUnlockByType( $pathsByType );
                wfProfileOut( __METHOD__ );
+
                return $status;
        }
 
@@ -153,7 +153,7 @@ abstract class LockManager {
         * Before hashing, the path will be prefixed with the domain ID.
         * This should be used interally for lock key or file names.
         *
-        * @param $path string
+        * @param string $path
         * @return string
         */
        final protected function sha1Base36Absolute( $path ) {
@@ -165,7 +165,7 @@ abstract class LockManager {
         * Before hashing, the path will be prefixed with the domain ID.
         * This should be used interally for lock key or file names.
         *
-        * @param $path string
+        * @param string $path
         * @return string
         */
        final protected function sha1Base16Absolute( $path ) {
@@ -176,8 +176,8 @@ abstract class LockManager {
         * Normalize the $paths array by converting LOCK_UW locks into the
         * appropriate type and removing any duplicated paths for each lock type.
         *
-        * @param array $paths Map of LockManager::LOCK_* constants to lists of paths
-        * @return Array
+        * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
+        * @return array
         * @since 1.22
         */
        final protected function normalizePathsByType( array $pathsByType ) {
@@ -185,12 +185,13 @@ abstract class LockManager {
                foreach ( $pathsByType as $type => $paths ) {
                        $res[$this->lockTypeMap[$type]] = array_unique( $paths );
                }
+
                return $res;
        }
 
        /**
         * @see LockManager::lockByType()
-        * @param array $paths Map of LockManager::LOCK_* constants to lists of paths
+        * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
         * @return Status
         * @since 1.22
         */
@@ -203,12 +204,13 @@ abstract class LockManager {
                                $lockedByType[$type] = $paths;
                        } else {
                                // Release the subset of locks that were acquired
-                               foreach ( $lockedByType as $type => $paths ) {
-                                       $status->merge( $this->doUnlock( $paths, $type ) );
+                               foreach ( $lockedByType as $lType => $lPaths ) {
+                                       $status->merge( $this->doUnlock( $lPaths, $lType ) );
                                }
                                break;
                        }
                }
+
                return $status;
        }
 
@@ -216,14 +218,14 @@ abstract class LockManager {
         * Lock resources with the given keys and lock type
         *
         * @param array $paths List of paths
-        * @param $type integer LockManager::LOCK_* constant
+        * @param int $type LockManager::LOCK_* constant
         * @return Status
         */
        abstract protected function doLock( array $paths, $type );
 
        /**
         * @see LockManager::unlockByType()
-        * @param array $paths Map of LockManager::LOCK_* constants to lists of paths
+        * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
         * @return Status
         * @since 1.22
         */
@@ -232,6 +234,7 @@ abstract class LockManager {
                foreach ( $pathsByType as $type => $paths ) {
                        $status->merge( $this->doUnlock( $paths, $type ) );
                }
+
                return $status;
        }
 
@@ -239,7 +242,7 @@ abstract class LockManager {
         * Unlock resources with the given keys and lock type
         *
         * @param array $paths List of paths
-        * @param $type integer LockManager::LOCK_* constant
+        * @param int $type LockManager::LOCK_* constant
         * @return Status
         */
        abstract protected function doUnlock( array $paths, $type );
index 9aff241..ecf396a 100644 (file)
  * @since 1.19
  */
 class LockManagerGroup {
-       /** @var Array (domain => LockManager) */
+       /** @var array (domain => LockManager) */
        protected static $instances = array();
 
        protected $domain; // string; domain (usually wiki ID)
 
-       /** @var Array of (name => ('class' => ..., 'config' => ..., 'instance' => ...)) */
+       /** @var array of (name => ('class' => ..., 'config' => ..., 'instance' => ...)) */
        protected $managers = array();
 
        /**
@@ -45,7 +45,7 @@ class LockManagerGroup {
        }
 
        /**
-        * @param string $domain Domain (usually wiki ID)
+        * @param bool|string $domain Domain (usually wiki ID). Default: false.
         * @return LockManagerGroup
         */
        public static function singleton( $domain = false ) {
@@ -54,13 +54,12 @@ class LockManagerGroup {
                        self::$instances[$domain] = new self( $domain );
                        self::$instances[$domain]->initFromGlobals();
                }
+
                return self::$instances[$domain];
        }
 
        /**
         * Destroy the singleton instances
-        *
-        * @return void
         */
        public static function destroySingletons() {
                self::$instances = array();
@@ -68,8 +67,6 @@ class LockManagerGroup {
 
        /**
         * Register lock managers from the global variables
-        *
-        * @return void
         */
        protected function initFromGlobals() {
                global $wgLockManagers;
@@ -80,8 +77,7 @@ class LockManagerGroup {
        /**
         * Register an array of file lock manager configurations
         *
-        * @param $configs Array
-        * @return void
+        * @param array $configs
         * @throws MWException
         */
        protected function register( array $configs ) {
@@ -107,7 +103,7 @@ class LockManagerGroup {
        /**
         * Get the lock manager object with a given name
         *
-        * @param $name string
+        * @param string $name
         * @return LockManager
         * @throws MWException
         */
@@ -121,14 +117,15 @@ class LockManagerGroup {
                        $config = $this->managers[$name]['config'];
                        $this->managers[$name]['instance'] = new $class( $config );
                }
+
                return $this->managers[$name]['instance'];
        }
 
        /**
         * Get the config array for a lock manager object with a given name
         *
-        * @param $name string
-        * @return Array
+        * @param string $name
+        * @return array
         * @throws MWException
         */
        public function config( $name ) {
@@ -136,6 +133,7 @@ class LockManagerGroup {
                        throw new MWException( "No lock manager defined with the name `$name`." );
                }
                $class = $this->managers[$name]['class'];
+
                return array( 'class' => $class ) + $this->managers[$name]['config'];
        }
 
index 5eab03e..f7ffb2d 100644 (file)
  * @since 1.20
  */
 class MemcLockManager extends QuorumLockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_SH,
                self::LOCK_EX => self::LOCK_EX
        );
 
-       /** @var Array Map server names to MemcachedBagOStuff objects */
+       /** @var array Map server names to MemcachedBagOStuff objects */
        protected $bagOStuffs = array();
-       /** @var Array */
-       protected $serversUp = array(); // (server name => bool)
 
-       protected $session = ''; // string; random UUID
+       /** @var array (server name => bool) */
+       protected $serversUp = array();
+
+       /** @var string random UUID */
+       protected $session = '';
 
        /**
         * Construct a new instance from configuration.
         *
-        * $config paramaters include:
+        * @param array $config Paramaters include:
         *   - lockServers  : Associative array of server names to "<IP>:<port>" strings.
         *   - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
         *                    each having an odd-numbered list of server names (peers) as values.
         *   - memcConfig   : Configuration array for ObjectCache::newFromParams. [optional]
         *                    If set, this must use one of the memcached classes.
-        *
-        * @param array $config
         * @throws MWException
         */
        public function __construct( array $config ) {
@@ -88,7 +88,7 @@ class MemcLockManager extends QuorumLockManager {
                $this->session = wfRandomString( 32 );
        }
 
-       // @TODO: change this code to work in one batch
+       // @todo Change this code to work in one batch
        protected function getLocksOnServer( $lockSrv, array $pathsByType ) {
                $status = Status::newGood();
 
@@ -100,8 +100,8 @@ class MemcLockManager extends QuorumLockManager {
                                        ? array_merge( $lockedPaths[$type], $paths )
                                        : $paths;
                        } else {
-                               foreach ( $lockedPaths as $type => $paths ) {
-                                       $status->merge( $this->doFreeLocksOnServer( $lockSrv, $paths, $type ) );
+                               foreach ( $lockedPaths as $lType => $lPaths ) {
+                                       $status->merge( $this->doFreeLocksOnServer( $lockSrv, $lPaths, $lType ) );
                                }
                                break;
                        }
@@ -110,7 +110,7 @@ class MemcLockManager extends QuorumLockManager {
                return $status;
        }
 
-       // @TODO: change this code to work in one batch
+       // @todo Change this code to work in one batch
        protected function freeLocksOnServer( $lockSrv, array $pathsByType ) {
                $status = Status::newGood();
 
@@ -123,6 +123,9 @@ class MemcLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::getLocksOnServer()
+        * @param string $lockSrv
+        * @param array $paths
+        * @param string $type
         * @return Status
         */
        protected function doGetLocksOnServer( $lockSrv, array $paths, $type ) {
@@ -136,6 +139,7 @@ class MemcLockManager extends QuorumLockManager {
                        foreach ( $paths as $path ) {
                                $status->fatal( 'lockmanager-fail-acquirelock', $path );
                        }
+
                        return $status;
                }
 
@@ -195,6 +199,9 @@ class MemcLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::freeLocksOnServer()
+        * @param string $lockSrv
+        * @param array $paths
+        * @param string $type
         * @return Status
         */
        protected function doFreeLocksOnServer( $lockSrv, array $paths, $type ) {
@@ -208,7 +215,8 @@ class MemcLockManager extends QuorumLockManager {
                        foreach ( $paths as $path ) {
                                $status->fatal( 'lockmanager-fail-releaselock', $path );
                        }
-                       return;
+
+                       return $status;
                }
 
                // Fetch all the existing lock records...
@@ -254,6 +262,7 @@ class MemcLockManager extends QuorumLockManager {
 
        /**
         * @see QuorumLockManager::isServerUp()
+        * @param string $lockSrv
         * @return bool
         */
        protected function isServerUp( $lockSrv ) {
@@ -280,11 +289,12 @@ class MemcLockManager extends QuorumLockManager {
                                return null; // server appears to be down
                        }
                }
+
                return $memc;
        }
 
        /**
-        * @param $path string
+        * @param string $path
         * @return string
         */
        protected function recordKeyForPath( $path ) {
@@ -292,27 +302,28 @@ class MemcLockManager extends QuorumLockManager {
        }
 
        /**
-        * @return Array An empty lock structure for a key
+        * @return array An empty lock structure for a key
         */
        protected static function newLockArray() {
                return array( self::LOCK_SH => array(), self::LOCK_EX => array() );
        }
 
        /**
-        * @param $a array
-        * @return Array An empty lock structure for a key
+        * @param array $a
+        * @return array An empty lock structure for a key
         */
        protected static function sanitizeLockArray( $a ) {
                if ( is_array( $a ) && isset( $a[self::LOCK_EX] ) && isset( $a[self::LOCK_SH] ) ) {
                        return $a;
                } else {
                        trigger_error( __METHOD__ . ": reset invalid lock array.", E_USER_WARNING );
+
                        return self::newLockArray();
                }
        }
 
        /**
-        * @param $memc MemcachedBagOStuff
+        * @param MemcachedBagOStuff $memc
         * @param array $keys List of keys to acquire
         * @return bool
         */
@@ -350,9 +361,8 @@ class MemcLockManager extends QuorumLockManager {
        }
 
        /**
-        * @param $memc MemcachedBagOStuff
+        * @param MemcachedBagOStuff $memc
         * @param array $keys List of acquired keys
-        * @return void
         */
        protected function releaseMutexes( MemcachedBagOStuff $memc, array $keys ) {
                foreach ( $keys as $key ) {
index 8356d32..d17074e 100644 (file)
  * @since 1.20
  */
 abstract class QuorumLockManager extends LockManager {
-       /** @var Array Map of bucket indexes to peer server lists */
+       /** @var array Map of bucket indexes to peer server lists */
        protected $srvsByBucket = array(); // (bucket index => (lsrv1, lsrv2, ...))
-       /** @var Array Map of degraded buckets */
+
+       /** @var array Map of degraded buckets */
        protected $degradedBuckets = array(); // (buckey index => UNIX timestamp)
 
        final protected function doLock( array $paths, $type ) {
@@ -65,6 +66,7 @@ abstract class QuorumLockManager extends LockManager {
                        $status->merge( $this->doLockingRequestBucket( $bucket, $pathsToLockByType ) );
                        if ( !$status->isOK() ) {
                                $status->merge( $this->doUnlockByType( $lockedPaths ) );
+
                                return $status;
                        }
                        // Record these locks as active
@@ -120,7 +122,7 @@ abstract class QuorumLockManager extends LockManager {
         * Attempt to acquire locks with the peers for a bucket.
         * This is all or nothing; if any key is locked then this totally fails.
         *
-        * @param $bucket integer
+        * @param int $bucket
         * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
         * @return Status
         */
@@ -162,7 +164,7 @@ abstract class QuorumLockManager extends LockManager {
        /**
         * Attempt to release locks with the peers for a bucket
         *
-        * @param $bucket integer
+        * @param int $bucket
         * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
         * @return Status
         */
@@ -198,8 +200,8 @@ abstract class QuorumLockManager extends LockManager {
         * Get the bucket for resource path.
         * This should avoid throwing any exceptions.
         *
-        * @param $path string
-        * @return integer
+        * @param string $path
+        * @return int
         */
        protected function getBucketFromPath( $path ) {
                $prefix = substr( sha1( $path ), 0, 2 ); // first 2 hex chars (8 bits)
@@ -210,7 +212,7 @@ abstract class QuorumLockManager extends LockManager {
         * Check if a lock server is up.
         * This should process cache results to reduce RTT.
         *
-        * @param $lockSrv string
+        * @param string $lockSrv
         * @return bool
         */
        abstract protected function isServerUp( $lockSrv );
@@ -218,7 +220,7 @@ abstract class QuorumLockManager extends LockManager {
        /**
         * Get a connection to a lock server and acquire locks
         *
-        * @param $lockSrv string
+        * @param string $lockSrv
         * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
         * @return Status
         */
@@ -229,7 +231,7 @@ abstract class QuorumLockManager extends LockManager {
         *
         * Subclasses must effectively implement this or releaseAllLocks().
         *
-        * @param $lockSrv string
+        * @param string $lockSrv
         * @param array $pathsByType Map of LockManager::LOCK_* constants to lists of paths
         * @return Status
         */
index 43b0198..9d5612a 100644 (file)
@@ -38,7 +38,7 @@
  * @since 1.22
  */
 class RedisLockManager extends QuorumLockManager {
-       /** @var Array Mapping of lock types to the type actually used */
+       /** @var array Mapping of lock types to the type actually used */
        protected $lockTypeMap = array(
                self::LOCK_SH => self::LOCK_SH,
                self::LOCK_UW => self::LOCK_SH,
@@ -47,21 +47,21 @@ class RedisLockManager extends QuorumLockManager {
 
        /** @var RedisConnectionPool */
        protected $redisPool;
-       /** @var Array Map server names to hostname/IP and port numbers */
+
+       /** @var array Map server names to hostname/IP and port numbers */
        protected $lockServers = array();
 
-       protected $session = ''; // string; random UUID
+       /** @var string random UUID */
+       protected $session = '';
 
        /**
         * Construct a new instance from configuration.
         *
-        * $config paramaters include:
+        * @param array $config Parameters include:
         *   - lockServers  : Associative array of server names to "<IP>:<port>" strings.
         *   - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
         *                    each having an odd-numbered list of server names (peers) as values.
         *   - redisConfig  : Configuration for RedisConnectionPool::__construct().
-        *
-        * @param Array $config
         * @throws MWException
         */
        public function __construct( array $config ) {
@@ -90,8 +90,8 @@ class RedisLockManager extends QuorumLockManager {
                                        ? array_merge( $lockedPaths[$type], $paths )
                                        : $paths;
                        } else {
-                               foreach ( $lockedPaths as $type => $paths ) {
-                                       $status->merge( $this->doFreeLocksOnServer( $lockSrv, $paths, $type ) );
+                               foreach ( $lockedPaths as $lType => $lPaths ) {
+                                       $status->merge( $this->doFreeLocksOnServer( $lockSrv, $lPaths, $lType ) );
                                }
                                break;
                        }
@@ -100,7 +100,7 @@ class RedisLockManager extends QuorumLockManager {
                return $status;
        }
 
-       // @TODO: change this code to work in one batch
+       // @todo Change this code to work in one batch
        protected function freeLocksOnServer( $lockSrv, array $pathsByType ) {
                $status = Status::newGood();
 
@@ -120,6 +120,7 @@ class RedisLockManager extends QuorumLockManager {
                        foreach ( $paths as $path ) {
                                $status->fatal( 'lockmanager-fail-acquirelock', $path );
                        }
+
                        return $status;
                }
 
@@ -204,6 +205,7 @@ LUA;
                        foreach ( $paths as $path ) {
                                $status->fatal( 'lockmanager-fail-releaselock', $path );
                        }
+
                        return $status;
                }
 
@@ -267,7 +269,7 @@ LUA;
        }
 
        /**
-        * @param $path string
+        * @param string $path
         * @return string
         */
        protected function recordKeyForPath( $path ) {
index 5faad4a..2056e10 100644 (file)
 class ScopedLock {
        /** @var LockManager */
        protected $manager;
+
        /** @var Status */
        protected $status;
-       /** @var Array Map of lock types to resource paths */
+
+       /** @var array Map of lock types to resource paths */
        protected $pathsByType;
 
        /**
@@ -55,14 +57,13 @@ class ScopedLock {
         * Any locks are released once this object goes out of scope.
         * The status object is updated with any errors or warnings.
         *
-        * $type can be "mixed" and $paths can be a map of types to paths (since 1.22).
-        * Otherwise $type should be an integer and $paths should be a list of paths.
-        *
         * @param LockManager $manager
         * @param array $paths List of storage paths or map of lock types to path lists
-        * @param integer|string $type LockManager::LOCK_* constant or "mixed"
+        * @param int|string $type LockManager::LOCK_* constant or "mixed" and $paths
+        *   can be a map of types to paths (since 1.22). Otherwise $type should be an
+        *   integer and $paths should be a list of paths.
         * @param Status $status
-        * @param integer $timeout Timeout in seconds (0 means non-blocking) (since 1.22)
+        * @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.22)
         * @return ScopedLock|null Returns null on failure
         */
        public static function factory(
@@ -74,6 +75,7 @@ class ScopedLock {
                if ( $lockStatus->isOK() ) {
                        return new self( $manager, $pathsByType, $status );
                }
+
                return null;
        }
 
@@ -83,7 +85,6 @@ class ScopedLock {
         * This is the same as setting the lock object to null.
         *
         * @param ScopedLock $lock
-        * @return void
         * @since 1.21
         */
        public static function release( ScopedLock &$lock = null ) {
index 42c9c94..046b97c 100644 (file)
@@ -31,7 +31,6 @@
  * @deprecated since 1.19
  */
 class FSRepo extends FileRepo {
-
        /**
         * @param $info array
         * @throws MWException
index 62e6388..47efa70 100644 (file)
@@ -42,24 +42,81 @@ class FileRepo {
 
        /** @var FileBackend */
        protected $backend;
+
        /** @var Array Map of zones to config */
        protected $zones = array();
 
-       var $thumbScriptUrl, $transformVia404;
-       var $descBaseUrl, $scriptDirUrl, $scriptExtension, $articleUrl;
-       var $fetchDescription, $initialCapital;
-       var $pathDisclosureProtection = 'simple'; // 'paranoid'
-       var $descriptionCacheExpiry, $url, $thumbUrl;
-       var $hashLevels, $deletedHashLevels;
+       /** @var string URL of thumb.php  */
+       protected $thumbScriptUrl;
+
+       /** @var bool Whether to skip media file transformation on parse and rely
+        *    on a 404 handler instead. */
+       protected $transformVia404;
+
+       /** @var string URL of image description pages, e.g.
+        *    http://en.wikipedia.org/wiki/File:
+        */
+       protected $descBaseUrl;
+
+       /** @var string URL of the MediaWiki installation, equivalent to
+        *    $wgScriptPath, e.g. https://en.wikipedia.org/w
+        */
+       protected $scriptDirUrl;
+
+       /** @var string Script extension of the MediaWiki installation, equivalent
+        *    to $wgScriptExtension, e.g. .php5 defaults to .php */
+       protected $scriptExtension;
+
+       /** @var string Equivalent to $wgArticlePath, e.g. http://en.wikipedia.org/wiki/$1 */
+       protected $articleUrl;
+
+       /** @var bool Whether to fetch commons image description pages and display
+        *    them on the local wiki */
+       public $fetchDescription;
+
+       /** @var bool Equivalent to $wgCapitalLinks (or $wgCapitalLinkOverrides[NS_FILE],
+        *    determines whether filenames implicitly start with a capital letter.
+        *    The current implementation may give incorrect description page links
+        *    when the local $wgCapitalLinks and initialCapital are mismatched.
+        */
+       protected $initialCapital;
+
+       /** @var string May be 'paranoid' to remove all parameters from error
+        *    messages, 'none' to leave the paths in unchanged, or 'simple' to
+        *    replace paths with placeholders. Default for LocalRepo is
+        *    'simple'.
+        */
+       protected $pathDisclosureProtection = 'simple';
+
+       /** @var int */
+       public $descriptionCacheExpiry;
+
+       /** @var bool Public zone URL. */
+       protected $url;
+
+       /** @var string The base thumbnail URL. Defaults to "<url>/thumb". */
+       protected $thumbUrl;
+
+       /** @var int The number of directory levels for hash-based division of files */
+       protected $hashLevels;
+
+       /** @var int The number of directory levels for hash-based division of deleted files */
+       protected $deletedHashLevels;
+
+       /** @var int File names over this size will use the short form of thumbnail
+        *    names. Short thumbnail names only have the width, parameters, and the
+        *    extension.
+        */
        protected $abbrvThreshold;
 
        /**
         * Factory functions for creating new files
         * Override these in the base class
         */
-       var $fileFactory = array( 'UnregisteredLocalFile', 'newFromTitle' );
-       var $oldFileFactory = false;
-       var $fileFactoryKey = false, $oldFileFactoryKey = false;
+       protected $fileFactory = array( 'UnregisteredLocalFile', 'newFromTitle' );
+       protected $oldFileFactory = false;
+       protected $fileFactoryKey = false;
+       protected $oldFileFactoryKey = false;
 
        /**
         * @param $info array|null
@@ -72,7 +129,8 @@ class FileRepo {
                        || !array_key_exists( 'name', $info )
                        || !array_key_exists( 'backend', $info )
                ) {
-                       throw new MWException( __CLASS__ . " requires an array of options having both 'name' and 'backend' keys.\n" );
+                       throw new MWException( __CLASS__ .
+                               " requires an array of options having both 'name' and 'backend' keys.\n" );
                }
 
                // Required settings
@@ -167,6 +225,7 @@ class FileRepo {
                                throw new MWException( "No '$zone' zone defined in the {$this->name} repo." );
                        }
                }
+
                return $status;
        }
 
@@ -193,6 +252,7 @@ class FileRepo {
                if ( $suffix !== false ) {
                        $path .= '/' . rawurlencode( $suffix );
                }
+
                return $path;
        }
 
@@ -201,14 +261,17 @@ class FileRepo {
         *
         * @param string $zone One of: public, deleted, temp, thumb
         * @param string|null $ext Optional file extension
-        * @return String or false
+        * @return string|bool
         */
        public function getZoneUrl( $zone, $ext = null ) {
-               if ( in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) ) ) { // standard public zones
+               if ( in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) ) ) {
+                       // standard public zones
                        if ( $ext !== null && isset( $this->zones[$zone]['urlsByExt'][$ext] ) ) {
-                               return $this->zones[$zone]['urlsByExt'][$ext]; // custom URL for extension/zone
+                               // custom URL for extension/zone
+                               return $this->zones[$zone]['urlsByExt'][$ext];
                        } elseif ( isset( $this->zones[$zone]['url'] ) ) {
-                               return $this->zones[$zone]['url']; // custom URL for zone
+                               // custom URL for zone
+                               return $this->zones[$zone]['url'];
                        }
                }
                switch ( $zone ) {
@@ -242,10 +305,11 @@ class FileRepo {
         */
        public function getZoneHandlerUrl( $zone ) {
                if ( isset( $this->zones[$zone]['handlerUrl'] )
-                       && in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) ) )
-               {
+                       && in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) )
+               {
                        return $this->zones[$zone]['handlerUrl'];
                }
+
                return false;
        }
 
@@ -273,6 +337,7 @@ class FileRepo {
                if ( !$base ) {
                        throw new MWException( __METHOD__ . ": invalid zone: $zone" );
                }
+
                return $base . '/' . rawurldecode( $rel );
        }
 
@@ -286,6 +351,7 @@ class FileRepo {
                if ( !isset( $this->zones[$zone] ) ) {
                        return array( null, null ); // bogus
                }
+
                return array( $this->zones[$zone]['container'], $this->zones[$zone]['directory'] );
        }
 
@@ -304,6 +370,7 @@ class FileRepo {
                if ( $base != '' ) { // may not be set
                        $base = "/{$base}";
                }
+
                return "mwstore://$backendName/{$container}{$base}";
        }
 
@@ -390,9 +457,11 @@ class FileRepo {
                        }
                        if ( $img->exists() ) {
                                $img->redirectedFrom( $title->getDBkey() );
+
                                return $img;
                        }
                }
+
                return false;
        }
 
@@ -423,6 +492,7 @@ class FileRepo {
                                $result[$file->getTitle()->getDBkey()] = $file;
                        }
                }
+
                return $result;
        }
 
@@ -457,6 +527,7 @@ class FileRepo {
                                }
                        }
                }
+
                return false;
        }
 
@@ -487,6 +558,7 @@ class FileRepo {
                                $result[$hash] = $files;
                        }
                }
+
                return $result;
        }
 
@@ -531,7 +603,7 @@ class FileRepo {
        }
 
        /**
-        * Get the name of an image from its title object
+        * Get the name of a file from its title object
         *
         * @param $title Title
         * @return String
@@ -546,6 +618,7 @@ class FileRepo {
                } else {
                        $name = $title->getDBkey();
                }
+
                return $name;
        }
 
@@ -596,6 +669,7 @@ class FileRepo {
                        for ( $i = 1; $i <= $levels; $i++ ) {
                                $path .= substr( $hash, 0, $i ) . '/';
                        }
+
                        return $path;
                }
        }
@@ -628,8 +702,10 @@ class FileRepo {
        public function makeUrl( $query = '', $entry = 'index' ) {
                if ( isset( $this->scriptDirUrl ) ) {
                        $ext = isset( $this->scriptExtension ) ? $this->scriptExtension : '.php';
+
                        return wfAppendQuery( "{$this->scriptDirUrl}/{$entry}{$ext}", $query );
                }
+
                return false;
        }
 
@@ -648,7 +724,7 @@ class FileRepo {
        public function getDescriptionUrl( $name ) {
                $encName = wfUrlencode( $name );
                if ( !is_null( $this->descBaseUrl ) ) {
-                       # "http://example.com/wiki/Image:"
+                       # "http://example.com/wiki/File:"
                        return $this->descBaseUrl . $encName;
                }
                if ( !is_null( $this->articleUrl ) ) {
@@ -667,6 +743,7 @@ class FileRepo {
                        # and just sort of hope index.php is right. ;)
                        return $this->makeUrl( "title=Image:$encName" );
                }
+
                return false;
        }
 
@@ -710,6 +787,7 @@ class FileRepo {
                        return $this->makeUrl( 'title=MediaWiki:Filepage.css&' .
                                wfArrayToCgi( Skin::getDynamicStylesheetQuery() ) );
                }
+
                return false;
        }
 
@@ -988,6 +1066,7 @@ class FileRepo {
                $temp = $this->getVirtualUrl( 'temp' );
                if ( substr( $virtualUrl, 0, strlen( $temp ) ) != $temp ) {
                        wfDebug( __METHOD__ . ": Invalid temp virtual URL\n" );
+
                        return false;
                }
 
@@ -1238,6 +1317,7 @@ class FileRepo {
         */
        public function fileExists( $file ) {
                $result = $this->fileExistsBatch( array( $file ) );
+
                return $result[0];
        }
 
@@ -1253,6 +1333,7 @@ class FileRepo {
                        $file = $this->resolveToStoragePath( $file );
                        $result[$key] = $this->backend->fileExists( array( 'src' => $file ) );
                }
+
                return $result;
        }
 
@@ -1367,6 +1448,7 @@ class FileRepo {
                for ( $i = 0; $i < $this->deletedHashLevels; $i++ ) {
                        $path .= $key[$i] . '/';
                }
+
                return $path;
        }
 
@@ -1382,6 +1464,7 @@ class FileRepo {
                if ( $this->isVirtualUrl( $path ) ) {
                        return $this->resolveVirtualUrl( $path );
                }
+
                return $path;
        }
 
@@ -1394,6 +1477,7 @@ class FileRepo {
         */
        public function getLocalCopy( $virtualUrl ) {
                $path = $this->resolveToStoragePath( $virtualUrl );
+
                return $this->backend->getLocalCopy( array( 'src' => $path ) );
        }
 
@@ -1407,6 +1491,7 @@ class FileRepo {
         */
        public function getLocalReference( $virtualUrl ) {
                $path = $this->resolveToStoragePath( $virtualUrl );
+
                return $this->backend->getLocalReference( array( 'src' => $path ) );
        }
 
@@ -1419,6 +1504,7 @@ class FileRepo {
         */
        public function getFileProps( $virtualUrl ) {
                $path = $this->resolveToStoragePath( $virtualUrl );
+
                return $this->backend->getFileProps( array( 'src' => $path ) );
        }
 
@@ -1430,6 +1516,7 @@ class FileRepo {
         */
        public function getFileTimestamp( $virtualUrl ) {
                $path = $this->resolveToStoragePath( $virtualUrl );
+
                return $this->backend->getFileTimestamp( array( 'src' => $path ) );
        }
 
@@ -1441,6 +1528,7 @@ class FileRepo {
         */
        public function getFileSize( $virtualUrl ) {
                $path = $this->resolveToStoragePath( $virtualUrl );
+
                return $this->backend->getFileSize( array( 'src' => $path ) );
        }
 
@@ -1452,6 +1540,7 @@ class FileRepo {
         */
        public function getFileSha1( $virtualUrl ) {
                $path = $this->resolveToStoragePath( $virtualUrl );
+
                return $this->backend->getFileSha1Base36( array( 'src' => $path ) );
        }
 
@@ -1465,6 +1554,7 @@ class FileRepo {
        public function streamFile( $virtualUrl, $headers = array() ) {
                $path = $this->resolveToStoragePath( $virtualUrl );
                $params = array( 'src' => $path, 'headers' => $headers );
+
                return $this->backend->streamFile( $params )->isOK();
        }
 
@@ -1516,6 +1606,7 @@ class FileRepo {
                if ( strval( $filename ) == '' ) {
                        return false;
                }
+
                return FileBackend::isPathTraversalFree( $filename );
        }
 
@@ -1564,6 +1655,7 @@ class FileRepo {
        public function newFatal( $message /*, parameters...*/ ) {
                $params = func_get_args();
                array_unshift( $params, $this );
+
                return call_user_func_array( array( 'FileRepoStatus', 'newFatal' ), $params );
        }
 
@@ -1596,7 +1688,8 @@ class FileRepo {
         * STUB
         * @param $title Title of image
         */
-       public function invalidateImageRedirect( Title $title ) {}
+       public function invalidateImageRedirect( Title $title ) {
+       }
 
        /**
         * Get the human-readable name of the repo
@@ -1608,6 +1701,7 @@ class FileRepo {
                if ( $this->isLocal() ) {
                        return null;
                }
+
                // 'shared-repo-name-wikimediacommons' is used when $wgUseInstantCommons = true
                return wfMessageFallback( 'shared-repo-name-' . $this->name, 'shared-repo' )->text();
        }
@@ -1624,6 +1718,7 @@ class FileRepo {
                        $ext = FileBackend::extensionFromPath( $name );
                        $name = ( $ext == '' ) ? 'thumbnail' : "thumbnail.$ext";
                }
+
                return $name;
        }
 
@@ -1658,6 +1753,7 @@ class FileRepo {
        public function getLocalCacheKey( /*...*/ ) {
                $args = func_get_args();
                array_unshift( $args, 'filerepo', $this->getName() );
+
                return call_user_func_array( 'wfMemcKey', $args );
        }
 
@@ -1680,13 +1776,13 @@ class FileRepo {
                                ),
                                'thumb' => array(
                                        'container' => $this->zones['thumb']['container'],
-                                       'directory' => ( $this->zones['thumb']['directory'] == '' )
+                                       'directory' => $this->zones['thumb']['directory'] == ''
                                                ? 'temp'
                                                : $this->zones['thumb']['directory'] . '/temp'
                                ),
                                'transcoded' => array(
                                        'container' => $this->zones['transcoded']['container'],
-                                       'directory' => ( $this->zones['transcoded']['directory'] == '' )
+                                       'directory' => $this->zones['transcoded']['directory'] == ''
                                                ? 'temp'
                                                : $this->zones['transcoded']['directory'] . '/temp'
                                )
@@ -1715,8 +1811,8 @@ class FileRepo {
         * @return void
         * @throws MWException
         */
-       protected function assertWritableRepo() {}
-
+       protected function assertWritableRepo() {
+       }
 
        /**
         * Return information about the repository.
@@ -1728,7 +1824,7 @@ class FileRepo {
                $ret = array(
                        'name' => $this->getName(),
                        'displayname' => $this->getDisplayName(),
-                       'rootUrl' => $this->getRootUrl(),
+                       'rootUrl' => $this->getZoneUrl( 'public' ),
                        'local' => $this->isLocal(),
                );
 
index 5300e5e..56fddf4 100644 (file)
@@ -37,6 +37,7 @@ class FileRepoStatus extends Status {
                $result = new self( $repo );
                call_user_func_array( array( &$result, 'error' ), $params );
                $result->ok = false;
+
                return $result;
        }
 
@@ -48,6 +49,7 @@ class FileRepoStatus extends Status {
        static function newGood( $repo = false, $value = null ) {
                $result = new self( $repo );
                $result->value = $value;
+
                return $result;
        }
 
index e64c88a..bb16c8b 100644 (file)
@@ -52,13 +52,17 @@ class ForeignAPIRepo extends FileRepo {
                'timestamp',
        );
 
-       var $fileFactory = array( 'ForeignAPIFile', 'newFromTitle' );
-       /* Check back with Commons after a day */
-       var $apiThumbCacheExpiry = 86400; /* 24*60*60 */
-       /* Redownload thumbnail files after a month */
-       var $fileCacheExpiry = 2592000; /* 86400*30 */
+       protected $fileFactory = array( 'ForeignAPIFile', 'newFromTitle' );
+       /** @var int Check back with Commons after a day (24*60*60) */
+       protected $apiThumbCacheExpiry = 86400;
 
-       protected $mQueryCache = array();
+       /** @var int Redownload thumbnail files after a month (86400*30) */
+       protected $fileCacheExpiry = 2592000;
+
+       /** @var array  */
+       private $mQueryCache = array();
+
+       /** @var array  */
        protected $mFileExists = array();
 
        /**
@@ -110,6 +114,7 @@ class ForeignAPIRepo extends FileRepo {
                if ( $time ) {
                        return false;
                }
+
                return parent::newFile( $title, $time );
        }
 
@@ -136,8 +141,11 @@ class ForeignAPIRepo extends FileRepo {
                        }
                }
 
-               $data = $this->fetchImageQuery( array( 'titles' => implode( $files, '|' ),
-                                                                                       'prop' => 'imageinfo' ) );
+               $data = $this->fetchImageQuery( array(
+                       'titles' => implode( $files, '|' ),
+                       'prop' => 'imageinfo' )
+               );
+
                if ( isset( $data['query']['pages'] ) ) {
                        # First, get results from the query. Note we only care whether the image exists,
                        # not whether it has a description page.
@@ -161,6 +169,7 @@ class ForeignAPIRepo extends FileRepo {
                                $results[$key] = $this->mFileExists[$file];
                        }
                }
+
                return $results;
        }
 
@@ -211,6 +220,7 @@ class ForeignAPIRepo extends FileRepo {
                                }
                        }
                }
+
                return false;
        }
 
@@ -234,6 +244,7 @@ class ForeignAPIRepo extends FileRepo {
                                $ret[] = new ForeignAPIFile( Title::makeTitle( NS_FILE, $img['name'] ), $this, $img );
                        }
                }
+
                return $ret;
        }
 
@@ -258,6 +269,7 @@ class ForeignAPIRepo extends FileRepo {
                if ( $data && $info && isset( $info['thumburl'] ) ) {
                        wfDebug( __METHOD__ . " got remote thumb " . $info['thumburl'] . "\n" );
                        $result = $info;
+
                        return $info['thumburl'];
                } else {
                        return false;
@@ -286,6 +298,7 @@ class ForeignAPIRepo extends FileRepo {
 
                if ( $data && $info && isset( $info['thumberror'] ) ) {
                        wfDebug( __METHOD__ . " got remote thumb error " . $info['thumberror'] . "\n" );
+
                        return new MediaTransformError(
                                'thumbnail_error_remote',
                                $width,
@@ -307,7 +320,8 @@ class ForeignAPIRepo extends FileRepo {
         * @param string $name is a dbkey form of a title
         * @param $width
         * @param $height
-        * @param string $params Other rendering parameters (page number, etc) from handler's makeParamString.
+        * @param string $params Other rendering parameters (page number, etc)
+        *   from handler's makeParamString.
         * @return bool|string
         */
        function getThumbUrlFromCache( $name, $width, $height, $params = "" ) {
@@ -332,6 +346,7 @@ class ForeignAPIRepo extends FileRepo {
                        if ( isset( $knownThumbUrls[$sizekey] ) ) {
                                wfDebug( __METHOD__ . ': Got thumburl from local cache: ' .
                                        "{$knownThumbUrls[$sizekey]} \n" );
+
                                return $knownThumbUrls[$sizekey];
                        }
                        /* This size is not yet known */
@@ -342,6 +357,7 @@ class ForeignAPIRepo extends FileRepo {
 
                if ( !$foreignUrl ) {
                        wfDebug( __METHOD__ . " Could not find thumburl\n" );
+
                        return false;
                }
 
@@ -349,14 +365,17 @@ class ForeignAPIRepo extends FileRepo {
                $fileName = rawurldecode( pathinfo( $foreignUrl, PATHINFO_BASENAME ) );
                if ( !$this->validateFilename( $fileName ) ) {
                        wfDebug( __METHOD__ . " The deduced filename $fileName is not safe\n" );
+
                        return false;
                }
                $localPath = $this->getZonePath( 'thumb' ) . "/" . $this->getHashPath( $name ) . $name;
                $localFilename = $localPath . "/" . $fileName;
-               $localUrl = $this->getZoneUrl( 'thumb' ) . "/" . $this->getHashPath( $name ) . rawurlencode( $name ) . "/" . rawurlencode( $fileName );
+               $localUrl = $this->getZoneUrl( 'thumb' ) . "/" . $this->getHashPath( $name ) .
+                       rawurlencode( $name ) . "/" . rawurlencode( $fileName );
 
                if ( $backend->fileExists( array( 'src' => $localFilename ) )
-                       && isset( $metadata['timestamp'] ) ) {
+                       && isset( $metadata['timestamp'] )
+               ) {
                        wfDebug( __METHOD__ . " Thumbnail was already downloaded before\n" );
                        $modified = $backend->getFileTimestamp( array( 'src' => $localFilename ) );
                        $remoteModified = strtotime( $metadata['timestamp'] );
@@ -366,6 +385,7 @@ class ForeignAPIRepo extends FileRepo {
                                /* Use our current and already downloaded thumbnail */
                                $knownThumbUrls[$sizekey] = $localUrl;
                                $wgMemc->set( $key, $knownThumbUrls, $this->apiThumbCacheExpiry );
+
                                return $localUrl;
                        }
                        /* There is a new Commons file, or existing thumbnail older than a month */
@@ -373,6 +393,7 @@ class ForeignAPIRepo extends FileRepo {
                $thumb = self::httpGet( $foreignUrl );
                if ( !$thumb ) {
                        wfDebug( __METHOD__ . " Could not download thumb\n" );
+
                        return false;
                }
 
@@ -381,11 +402,13 @@ class ForeignAPIRepo extends FileRepo {
                $params = array( 'dst' => $localFilename, 'content' => $thumb );
                if ( !$backend->quickCreate( $params )->isOK() ) {
                        wfDebug( __METHOD__ . " could not write to thumb path '$localFilename'\n" );
+
                        return $foreignUrl;
                }
                $knownThumbUrls[$sizekey] = $localUrl;
                $wgMemc->set( $key, $knownThumbUrls, $this->apiThumbCacheExpiry );
                wfDebug( __METHOD__ . " got local thumb $localUrl, saving to cache \n" );
+
                return $localUrl;
        }
 
@@ -416,6 +439,7 @@ class ForeignAPIRepo extends FileRepo {
                if ( in_array( $zone, $supported ) ) {
                        return parent::getZonePath( $zone );
                }
+
                return false;
        }
 
index 37c6572..b38416f 100644 (file)
  */
 class ForeignDBRepo extends LocalRepo {
        # Settings
-       var $dbType, $dbServer, $dbUser, $dbPassword, $dbName, $dbFlags,
-               $tablePrefix, $hasSharedCache;
+       protected $dbType;
+       protected $dbServer;
+       protected $dbUser;
+       protected $dbPassword;
+       protected $dbName;
+       protected $dbFlags;
+       protected $tablePrefix;
+       protected $hasSharedCache;
 
        # Other stuff
-       var $dbConn;
-       var $fileFactory = array( 'ForeignDBFile', 'newFromTitle' );
-       var $fileFromRowFactory = array( 'ForeignDBFile', 'newFromRow' );
+       protected $dbConn;
+       protected $fileFactory = array( 'ForeignDBFile', 'newFromTitle' );
+       protected $fileFromRowFactory = array( 'ForeignDBFile', 'newFromRow' );
 
        /**
         * @param $info array|null
@@ -68,6 +74,7 @@ class ForeignDBRepo extends LocalRepo {
                                )
                        );
                }
+
                return $this->dbConn;
        }
 
@@ -95,6 +102,7 @@ class ForeignDBRepo extends LocalRepo {
                if ( $this->hasSharedCache() ) {
                        $args = func_get_args();
                        array_unshift( $args, $this->dbName, $this->tablePrefix );
+
                        return call_user_func_array( 'wfForeignMemcKey', $args );
                } else {
                        return false;
index 7951fb1..ad63706 100644 (file)
  * @ingroup FileRepo
  */
 class ForeignDBViaLBRepo extends LocalRepo {
-       var $wiki, $dbName, $tablePrefix;
-       var $fileFactory = array( 'ForeignDBFile', 'newFromTitle' );
-       var $fileFromRowFactory = array( 'ForeignDBFile', 'newFromRow' );
+       protected $wiki;
+       protected $dbName;
+       protected $tablePrefix;
+       protected $fileFactory = array( 'ForeignDBFile', 'newFromTitle' );
+       protected $fileFromRowFactory = array( 'ForeignDBFile', 'newFromRow' );
 
        /**
         * @param $info array|null
@@ -69,6 +71,7 @@ class ForeignDBViaLBRepo extends LocalRepo {
                if ( $this->hasSharedCache() ) {
                        $args = func_get_args();
                        array_unshift( $args, $this->wiki );
+
                        return implode( ':', $args );
                } else {
                        return false;
index 9b62243..965f677 100644 (file)
  * @ingroup FileRepo
  */
 class LocalRepo extends FileRepo {
-       var $fileFactory           = array( 'LocalFile'   , 'newFromTitle' );
-       var $fileFactoryKey        = array( 'LocalFile'   , 'newFromKey'   );
-       var $fileFromRowFactory    = array( 'LocalFile'   , 'newFromRow'   );
-       var $oldFileFactory        = array( 'OldLocalFile', 'newFromTitle' );
-       var $oldFileFactoryKey     = array( 'OldLocalFile', 'newFromKey'   );
-       var $oldFileFromRowFactory = array( 'OldLocalFile', 'newFromRow'   );
+       protected $fileFactory = array( 'LocalFile', 'newFromTitle' );
+       protected $fileFactoryKey = array( 'LocalFile', 'newFromKey' );
+       protected $fileFromRowFactory = array( 'LocalFile', 'newFromRow' );
+       protected $oldFileFromRowFactory = array( 'OldLocalFile', 'newFromRow' );
+       protected $oldFileFactory = array( 'OldLocalFile', 'newFromTitle' );
+       protected $oldFileFactoryKey = array( 'OldLocalFile', 'newFromKey' );
 
        /**
         * @throws MWException
@@ -97,6 +97,7 @@ class LocalRepo extends FileRepo {
                        }
                        $dbw->commit( __METHOD__ );
                }
+
                return $status;
        }
 
@@ -111,6 +112,7 @@ class LocalRepo extends FileRepo {
                $options = ( $lock === 'lock' ) ? array( 'FOR UPDATE' ) : array();
 
                $dbw = $this->getMasterDB();
+
                return (bool)$dbw->selectField( 'filearchive', '1',
                        array( 'fa_storage_group' => 'deleted', 'fa_storage_key' => $key ),
                        __METHOD__, $options
@@ -131,6 +133,7 @@ class LocalRepo extends FileRepo {
                $ext = File::normalizeExtension( substr( $key, strcspn( $key, '.' ) + 1 ) );
 
                $dbw = $this->getMasterDB();
+
                return (bool)$dbw->selectField( 'oldimage', '1',
                        array( 'oi_sha1' => $sha1,
                                'oi_archive_name ' . $dbw->buildLike( $dbw->anyString(), ".$ext" ),
@@ -178,6 +181,7 @@ class LocalRepo extends FileRepo {
                $id = $this->getArticleID( $title );
                if ( !$id ) {
                        $wgMemc->add( $memcKey, " ", $expiry );
+
                        return false;
                }
                $dbr = $this->getSlaveDB();
@@ -191,9 +195,11 @@ class LocalRepo extends FileRepo {
                if ( $row && $row->rd_namespace == NS_FILE ) {
                        $targetTitle = Title::makeTitle( $row->rd_namespace, $row->rd_title );
                        $wgMemc->add( $memcKey, $targetTitle->getDBkey(), $expiry );
+
                        return $targetTitle;
                } else {
                        $wgMemc->add( $memcKey, '', $expiry );
+
                        return false;
                }
        }
@@ -219,6 +225,7 @@ class LocalRepo extends FileRepo {
                        ),
                        __METHOD__ //Function name
                );
+
                return $id;
        }
 
@@ -299,13 +306,14 @@ class LocalRepo extends FileRepo {
                        'img_name ' . $dbr->buildLike( $prefix, $dbr->anyString() ),
                        __METHOD__,
                        $selectOptions
-                       );
+               );
 
                // Build file objects
                $files = array();
                foreach ( $res as $row ) {
                        $files[] = $this->newFileFromRow( $row );
                }
+
                return $files;
        }
 
@@ -334,6 +342,7 @@ class LocalRepo extends FileRepo {
         */
        function getSharedCacheKey( /*...*/ ) {
                $args = func_get_args();
+
                return call_user_func_array( 'wfMemcKey', $args );
        }
 
index dda51ce..29e4cad 100644 (file)
@@ -30,7 +30,8 @@ class NullRepo extends FileRepo {
        /**
         * @param $info array|null
         */
-       function __construct( $info ) {}
+       function __construct( $info ) {
+       }
 
        protected function assertWritableRepo() {
                throw new MWException( get_class( $this ) . ': write operations are not supported.' );
index b2b9477..1a7ae34 100644 (file)
  * @ingroup FileRepo
  */
 class RepoGroup {
-       /**
-        * @var LocalRepo
-        */
-       var $localRepo;
+       /** @var LocalRepo */
+       protected $localRepo;
 
-       var $foreignRepos, $reposInitialised = false;
-       var $localInfo, $foreignInfo;
-       var $cache;
+       protected $foreignRepos;
 
-       /**
-        * @var RepoGroup
-        */
+       /** @var bool */
+       protected $reposInitialised = false;
+
+       protected $localInfo;
+       protected $foreignInfo;
+
+       /** @var array  */
+       protected $cache;
+
+       /** @var RepoGroup */
        protected static $instance;
+
+       /** Maximum number of cache items */
        const MAX_CACHE_SIZE = 500;
 
        /**
@@ -53,6 +58,7 @@ class RepoGroup {
                }
                global $wgLocalFileRepo, $wgForeignFileRepos;
                self::$instance = new RepoGroup( $wgLocalFileRepo, $wgForeignFileRepos );
+
                return self::$instance;
        }
 
@@ -126,14 +132,15 @@ class RepoGroup {
                # Check the cache
                if ( empty( $options['ignoreRedirect'] )
                        && empty( $options['private'] )
-                       && empty( $options['bypassCache'] ) )
-               {
+                       && empty( $options['bypassCache'] )
+               {
                        $time = isset( $options['time'] ) ? $options['time'] : '';
                        $dbkey = $title->getDBkey();
                        if ( isset( $this->cache[$dbkey][$time] ) ) {
                                wfDebug( __METHOD__ . ": got File:$dbkey from process cache\n" );
                                # Move it to the end of the list so that we can delete the LRU entry later
                                $this->pingCache( $dbkey );
+
                                # Return the entry
                                return $this->cache[$dbkey][$time];
                        }
@@ -195,6 +202,7 @@ class RepoGroup {
 
                        $images = array_merge( $images, $repo->findFiles( $items ) );
                }
+
                return $images;
        }
 
@@ -218,6 +226,7 @@ class RepoGroup {
                                return $redir;
                        }
                }
+
                return false;
        }
 
@@ -243,6 +252,7 @@ class RepoGroup {
                                }
                        }
                }
+
                return $file;
        }
 
@@ -262,6 +272,7 @@ class RepoGroup {
                        $result = array_merge( $result, $repo->findBySha1( $hash ) );
                }
                usort( $result, 'File::compare' );
+
                return $result;
        }
 
@@ -284,6 +295,7 @@ class RepoGroup {
                foreach ( $result as $hash => $files ) {
                        usort( $result[$hash], 'File::compare' );
                }
+
                return $result;
        }
 
@@ -319,6 +331,7 @@ class RepoGroup {
                                return $repo;
                        }
                }
+
                return false;
        }
 
@@ -347,6 +360,7 @@ class RepoGroup {
                                return true;
                        }
                }
+
                return false;
        }
 
@@ -379,6 +393,7 @@ class RepoGroup {
         */
        protected function newRepo( $info ) {
                $class = $info['class'];
+
                return new $class( $info );
        }
 
@@ -397,6 +412,7 @@ class RepoGroup {
                if ( count( $bits ) != 3 ) {
                        throw new MWException( __METHOD__ . ": invalid mwrepo URL: $url" );
                }
+
                return $bits;
        }
 
@@ -411,6 +427,7 @@ class RepoGroup {
                                $repoName = 'local';
                        }
                        $repo = $this->getRepo( $repoName );
+
                        return $repo->getFileProps( $fileName );
                } else {
                        return FSFile::getPropsFromPath( $fileName );
index 749f11a..91c2fb4 100644 (file)
  * @ingroup FileAbstraction
  */
 class ArchivedFile {
-       /**#@+
-        * @private
-        */
-       var $id, # filearchive row ID
-               $name, # image name
-               $group, # FileStore storage group
-               $key, # FileStore sha1 key
-               $size, # file dimensions
-               $bits,  # size in bytes
-               $width, # width
-               $height, # height
-               $metadata, # metadata string
-               $mime, # mime type
-               $media_type, # media type
-               $description, # upload description
-               $user, # user ID of uploader
-               $user_text, # user name of uploader
-               $timestamp, # time of upload
-               $dataLoaded, # Whether or not all this has been loaded from the database (loadFromXxx)
-               $deleted, # Bitfield akin to rev_deleted
-               $sha1, # sha1 hash of file content
-               $pageCount,
-               $archive_name;
+       /** @var int filearchive row ID */
+       private $id;
 
-       /**
-        * @var MediaHandler
-        */
-       var $handler;
-       /**
-        * @var Title
+       /** @var string File name */
+       private $name;
+
+       /** @var string FileStore storage group */
+       private $group;
+
+       /** @var string FileStore SHA-1 key */
+       private $key;
+
+       /** @var int File size in bytes */
+       private $size;
+
+       /** @var int size in bytes */
+       private $bits;
+
+       /** @var int Width */
+       private $width;
+
+       /** @var int Height */
+       private $height;
+
+       /** @var string Metadata string */
+       private $metadata;
+
+       /** @var string MIME type */
+       private $mime;
+
+       /** @var string Media type */
+       private $media_type;
+
+       /** @var string Upload description */
+       private $description;
+
+       /** @var int User ID of uploader */
+       private $user;
+
+       /** @var string User name of uploader */
+       private $user_text;
+
+       /** @var string Time of upload */
+       private $timestamp;
+
+       /** @var bool Whether or not all this has been loaded from the database (loadFromXxx) */
+       private $dataLoaded;
+
+       /** @var int Bitfield akin to rev_deleted */
+       private $deleted;
+
+       /** @var string SHA-1 hash of file content */
+       private $sha1;
+
+       /** @var string Number of pages of a multipage document, or false for
+        * documents which aren't multipage documents
         */
-       var $title; # image title
+       private $pageCount;
+
+       /** @var string Original base filename */
+       private $archive_name;
 
-       /**#@-*/
+       /** @var MediaHandler */
+       protected $handler;
+
+       /** @var Title */
+       protected $title; # image title
 
        /**
         * @throws MWException
@@ -169,6 +202,7 @@ class ArchivedFile {
        public static function newFromRow( $row ) {
                $file = new ArchivedFile( Title::makeTitle( NS_FILE, $row->fa_name ) );
                $file->loadFromRow( $row );
+
                return $file;
        }
 
@@ -256,6 +290,7 @@ class ArchivedFile {
         */
        public function getID() {
                $this->load();
+
                return $this->id;
        }
 
@@ -264,6 +299,7 @@ class ArchivedFile {
         */
        public function exists() {
                $this->load();
+
                return $this->exists;
        }
 
@@ -273,6 +309,7 @@ class ArchivedFile {
         */
        public function getKey() {
                $this->load();
+
                return $this->key;
        }
 
@@ -298,6 +335,7 @@ class ArchivedFile {
         */
        public function getWidth() {
                $this->load();
+
                return $this->width;
        }
 
@@ -307,6 +345,7 @@ class ArchivedFile {
         */
        public function getHeight() {
                $this->load();
+
                return $this->height;
        }
 
@@ -316,6 +355,7 @@ class ArchivedFile {
         */
        public function getMetadata() {
                $this->load();
+
                return $this->metadata;
        }
 
@@ -325,6 +365,7 @@ class ArchivedFile {
         */
        public function getSize() {
                $this->load();
+
                return $this->size;
        }
 
@@ -334,6 +375,7 @@ class ArchivedFile {
         */
        public function getBits() {
                $this->load();
+
                return $this->bits;
        }
 
@@ -343,6 +385,7 @@ class ArchivedFile {
         */
        public function getMimeType() {
                $this->load();
+
                return $this->mime;
        }
 
@@ -354,6 +397,7 @@ class ArchivedFile {
                if ( !isset( $this->handler ) ) {
                        $this->handler = MediaHandler::getHandler( $this->getMimeType() );
                }
+
                return $this->handler;
        }
 
@@ -369,6 +413,7 @@ class ArchivedFile {
                                $this->pageCount = false;
                        }
                }
+
                return $this->pageCount;
        }
 
@@ -379,6 +424,7 @@ class ArchivedFile {
         */
        public function getMediaType() {
                $this->load();
+
                return $this->media_type;
        }
 
@@ -389,6 +435,7 @@ class ArchivedFile {
         */
        public function getTimestamp() {
                $this->load();
+
                return wfTimestamp( TS_MW, $this->timestamp );
        }
 
@@ -400,6 +447,7 @@ class ArchivedFile {
         */
        function getSha1() {
                $this->load();
+
                return $this->sha1;
        }
 
@@ -452,6 +500,7 @@ class ArchivedFile {
         */
        public function getRawUser() {
                $this->load();
+
                return $this->user;
        }
 
@@ -462,6 +511,7 @@ class ArchivedFile {
         */
        public function getRawUserText() {
                $this->load();
+
                return $this->user_text;
        }
 
@@ -472,6 +522,7 @@ class ArchivedFile {
         */
        public function getRawDescription() {
                $this->load();
+
                return $this->description;
        }
 
@@ -481,6 +532,7 @@ class ArchivedFile {
         */
        public function getVisibility() {
                $this->load();
+
                return $this->deleted;
        }
 
@@ -492,6 +544,7 @@ class ArchivedFile {
         */
        public function isDeleted( $field ) {
                $this->load();
+
                return ( $this->deleted & $field ) == $field;
        }
 
@@ -504,6 +557,7 @@ class ArchivedFile {
         */
        public function userCan( $field, User $user = null ) {
                $this->load();
+
                return Revision::userCanBitfield( $this->deleted, $field, $user );
        }
 }
index 5a5221f..cf4ddf5 100644 (file)
@@ -91,43 +91,62 @@ abstract class File {
         * The following member variables are not lazy-initialised
         */
 
-       /**
-        * @var FileRepo|bool
-        */
-       var $repo;
+       /** @var FileRepo|bool */
+       public $repo;
 
-       /**
-        * @var Title
-        */
-       var $title;
+       /** @var Title|string|bool */
+       protected $title;
 
-       var $lastError, $redirected, $redirectedTitle;
+       /** @var string Text of last error  */
+       protected $lastError;
 
-       /**
-        * @var FSFile|bool False if undefined
-        */
+       /** @var string Main part of the title, with underscores (Title::getDBkey)  */
+       protected $redirected;
+
+       /** @var Title */
+       protected $redirectedTitle;
+
+       /** @var FSFile|bool False if undefined */
        protected $fsFile;
 
-       /**
-        * @var MediaHandler
-        */
+       /** @var MediaHandler */
        protected $handler;
 
-       /**
-        * @var string
+       /** @var string The URL corresponding to one of the four basic zones */
+       protected $url;
+
+       /** @var string File extension */
+       protected $extension;
+
+       /** @var string The name of a file from its title object */
+       protected $name;
+
+       /** @var string The storage path corresponding to one of the zones */
+       protected $path;
+
+       /** @var string Relative path including trailing slash */
+       protected $hashPath;
+
+       /** @var string number of pages of a multipage document, or false for
+        *    documents which aren't multipage documents
         */
-       protected $url, $extension, $name, $path, $hashPath, $pageCount, $transformScript;
+       protected $pageCount;
+
+       /** @var string URL of transformscript (for example thumb.php) */
+       protected $transformScript;
 
+       /** @var Title */
        protected $redirectTitle;
 
-       /**
-        * @var bool
-        */
-       protected $canRender, $isSafeFile;
+       /** @var bool Wether the output of transform() for this file is likely to be valid. */
+       protected $canRender;
 
-       /**
-        * @var string Required Repository class type
+       /** @var bool Wether this media file is in a format that is unlikely to
+        *    contain viruses or malicious content
         */
+       protected $isSafeFile;
+
+       /** @var string Required Repository class type */
        protected $repoClass = 'FileRepo';
 
        /**
@@ -174,6 +193,7 @@ abstract class File {
                if ( !$ret && $exception !== false ) {
                        throw new MWException( "`$title` is not a valid file title." );
                }
+
                return $ret;
        }
 
@@ -183,6 +203,7 @@ abstract class File {
                        return null;
                } else {
                        $this->$name = call_user_func( $function );
+
                        return $this->$name;
                }
        }
@@ -224,6 +245,7 @@ abstract class File {
                $n = strrpos( $new, '.' );
                $newExt = self::normalizeExtension( $n ? substr( $new, $n + 1 ) : '' );
                $mimeMagic = MimeMagic::singleton();
+
                return $mimeMagic->isMatchingExtension( $newExt, $oldMime );
        }
 
@@ -232,7 +254,8 @@ abstract class File {
         * Called by ImagePage
         * STUB
         */
-       function upgradeRow() {}
+       function upgradeRow() {
+       }
 
        /**
         * Split an internet media type into its two components; if not
@@ -271,6 +294,7 @@ abstract class File {
                        $this->assertRepoDefined();
                        $this->name = $this->repo->getNameFromTitle( $this->title );
                }
+
                return $this->name;
        }
 
@@ -285,6 +309,7 @@ abstract class File {
                        $this->extension = self::normalizeExtension(
                                $n ? substr( $this->getName(), $n + 1 ) : '' );
                }
+
                return $this->extension;
        }
 
@@ -306,6 +331,7 @@ abstract class File {
                if ( $this->redirected ) {
                        return $this->getRedirectedTitle();
                }
+
                return $this->title;
        }
 
@@ -320,6 +346,7 @@ abstract class File {
                        $ext = $this->getExtension();
                        $this->url = $this->repo->getZoneUrl( 'public', $ext ) . '/' . $this->getUrlRel();
                }
+
                return $this->url;
        }
 
@@ -351,6 +378,7 @@ abstract class File {
                        } else {
                                wfDebug( __METHOD__ . ': supposed to render ' . $this->getName() .
                                        ' (' . $this->getMimeType() . "), but can't!\n" );
+
                                return $this->getURL(); #hm... return NULL?
                        }
                } else {
@@ -376,6 +404,7 @@ abstract class File {
                        $this->assertRepoDefined();
                        $this->path = $this->repo->getZonePath( 'public' ) . '/' . $this->getRel();
                }
+
                return $this->path;
        }
 
@@ -394,6 +423,7 @@ abstract class File {
                                $this->fsFile = false; // null => false; cache negative hits
                        }
                }
+
                return ( $this->fsFile )
                        ? $this->fsFile->getPath()
                        : false;
@@ -520,6 +550,7 @@ abstract class File {
         */
        public function getCommonMetaArray() {
                $handler = $this->getHandler();
+
                return $handler->getCommonMetaArray( $this );
        }
 
@@ -601,6 +632,7 @@ abstract class File {
                if ( !isset( $this->canRender ) ) {
                        $this->canRender = $this->getHandler() && $this->handler->canRender( $this );
                }
+
                return $this->canRender;
        }
 
@@ -650,8 +682,9 @@ abstract class File {
         */
        function isSafeFile() {
                if ( !isset( $this->isSafeFile ) ) {
-                       $this->isSafeFile = $this->_getIsSafeFile();
+                       $this->isSafeFile = $this->getIsSafeFileUncached();
                }
+
                return $this->isSafeFile;
        }
 
@@ -669,7 +702,7 @@ abstract class File {
         *
         * @return bool
         */
-       protected function _getIsSafeFile() {
+       protected function getIsSafeFileUncached() {
                global $wgTrustedMediaFormats;
 
                if ( $this->allowInlineDisplay() ) {
@@ -753,6 +786,7 @@ abstract class File {
                                }
                        }
                }
+
                return $this->transformScript;
        }
 
@@ -771,6 +805,7 @@ abstract class File {
                        return $this->iconThumb();
                }
                $hp['width'] = $width;
+
                return $this->transform( $hp );
        }
 
@@ -787,6 +822,7 @@ abstract class File {
                $name = ( $this->repo && !( $flags & self::THUMB_FULL_NAME ) )
                        ? $this->repo->nameForThumb( $this->getName() )
                        : $this->getName();
+
                return $this->generateThumbName( $name, $params );
        }
 
@@ -809,6 +845,7 @@ abstract class File {
                if ( $thumbExt != $extension ) {
                        $thumbName .= ".$thumbExt";
                }
+
                return $thumbName;
        }
 
@@ -838,6 +875,7 @@ abstract class File {
                if ( is_null( $thumb ) || $thumb->isError() ) {
                        return '';
                }
+
                return $thumb->getUrl();
        }
 
@@ -986,6 +1024,7 @@ abstract class File {
                } while ( false );
 
                wfProfileOut( __METHOD__ );
+
                return is_object( $thumb ) ? $thumb : false;
        }
 
@@ -999,6 +1038,7 @@ abstract class File {
                if ( $thumbExt != '' && $thumbExt !== $this->getExtension() ) {
                        $fileName .= ".$thumbExt";
                }
+
                return FileBackend::makeContentDisposition( 'inline', $fileName );
        }
 
@@ -1007,7 +1047,8 @@ abstract class File {
         * STUB
         * Overridden by LocalFile
         */
-       function migrateThumbFile( $thumbName ) {}
+       function migrateThumbFile( $thumbName ) {
+       }
 
        /**
         * Get a MediaHandler instance for this file
@@ -1018,6 +1059,7 @@ abstract class File {
                if ( !isset( $this->handler ) ) {
                        $this->handler = MediaHandler::getHandler( $this->getMimeType() );
                }
+
                return $this->handler;
        }
 
@@ -1035,9 +1077,11 @@ abstract class File {
                        $filepath = $wgStyleDirectory . $path;
                        if ( file_exists( $filepath ) ) { // always FS
                                $params = array( 'width' => 120, 'height' => 120 );
+
                                return new ThumbnailImage( $this, $wgStylePath . $path, false, $params );
                        }
                }
+
                return null;
        }
 
@@ -1066,7 +1110,8 @@ abstract class File {
         * @param array $options Options, which include:
         *     'forThumbRefresh' : The purging is only to refresh thumbnails
         */
-       function purgeCache( $options = array() ) {}
+       function purgeCache( $options = array() ) {
+       }
 
        /**
         * Purge the file description page, but don't go after
@@ -1132,7 +1177,8 @@ abstract class File {
         * STUB
         * Overridden in LocalFile.
         */
-       public function resetHistory() {}
+       public function resetHistory() {
+       }
 
        /**
         * Get the filename hash component of the directory including trailing slash,
@@ -1146,6 +1192,7 @@ abstract class File {
                        $this->assertRepoDefined();
                        $this->hashPath = $this->repo->getHashPath( $this->getName() );
                }
+
                return $this->hashPath;
        }
 
@@ -1173,6 +1220,7 @@ abstract class File {
                } else {
                        $path .= $suffix;
                }
+
                return $path;
        }
 
@@ -1189,6 +1237,7 @@ abstract class File {
                if ( $suffix !== false ) {
                        $path .= '/' . $suffix;
                }
+
                return $path;
        }
 
@@ -1218,6 +1267,7 @@ abstract class File {
                } else {
                        $path .= $suffix;
                }
+
                return $path;
        }
 
@@ -1230,6 +1280,7 @@ abstract class File {
         */
        function getArchivePath( $suffix = false ) {
                $this->assertRepoDefined();
+
                return $this->repo->getZonePath( 'public' ) . '/' . $this->getArchiveRel( $suffix );
        }
 
@@ -1243,6 +1294,7 @@ abstract class File {
         */
        function getArchiveThumbPath( $archiveName, $suffix = false ) {
                $this->assertRepoDefined();
+
                return $this->repo->getZonePath( 'thumb' ) . '/' .
                        $this->getArchiveThumbRel( $archiveName, $suffix );
        }
@@ -1256,6 +1308,7 @@ abstract class File {
         */
        function getThumbPath( $suffix = false ) {
                $this->assertRepoDefined();
+
                return $this->repo->getZonePath( 'thumb' ) . '/' . $this->getThumbRel( $suffix );
        }
 
@@ -1268,6 +1321,7 @@ abstract class File {
         */
        function getTranscodedPath( $suffix = false ) {
                $this->assertRepoDefined();
+
                return $this->repo->getZonePath( 'transcoded' ) . '/' . $this->getThumbRel( $suffix );
        }
 
@@ -1287,6 +1341,7 @@ abstract class File {
                } else {
                        $path .= rawurlencode( $suffix );
                }
+
                return $path;
        }
 
@@ -1308,6 +1363,7 @@ abstract class File {
                } else {
                        $path .= rawurlencode( $suffix );
                }
+
                return $path;
        }
 
@@ -1326,6 +1382,7 @@ abstract class File {
                if ( $suffix !== false ) {
                        $path .= '/' . rawurlencode( $suffix );
                }
+
                return $path;
        }
 
@@ -1364,6 +1421,7 @@ abstract class File {
                if ( $suffix !== false ) {
                        $path .= '/' . rawurlencode( $suffix );
                }
+
                return $path;
        }
 
@@ -1382,6 +1440,7 @@ abstract class File {
                } else {
                        $path .= rawurlencode( $suffix );
                }
+
                return $path;
        }
 
@@ -1398,6 +1457,7 @@ abstract class File {
                if ( $suffix !== false ) {
                        $path .= '/' . rawurlencode( $suffix );
                }
+
                return $path;
        }
 
@@ -1406,6 +1466,7 @@ abstract class File {
         */
        function isHashed() {
                $this->assertRepoDefined();
+
                return (bool)$this->repo->getHashLevels();
        }
 
@@ -1431,7 +1492,9 @@ abstract class File {
         * @return bool
         * @throws MWException
         */
-       function recordUpload( $oldver, $desc, $license = '', $copyStatus = '', $source = '', $watch = false, $timestamp = false, User $user = null ) {
+       function recordUpload( $oldver, $desc, $license = '', $copyStatus = '', $source = '',
+               $watch = false, $timestamp = false, User $user = null
+       ) {
                $this->readOnlyError();
        }
 
@@ -1468,6 +1531,7 @@ abstract class File {
                if ( !$this->getHandler() ) {
                        return false;
                }
+
                return $this->getHandler()->formatMetadata( $this, $this->getMetadata() );
        }
 
@@ -1536,6 +1600,7 @@ abstract class File {
         */
        function wasDeleted() {
                $title = $this->getTitle();
+
                return $title && $title->isDeletedQuick();
        }
 
@@ -1616,6 +1681,7 @@ abstract class File {
                                $this->pageCount = false;
                        }
                }
+
                return $this->pageCount;
        }
 
@@ -1648,6 +1714,7 @@ abstract class File {
                if ( !$this->getHandler() ) {
                        return false;
                }
+
                return $this->handler->getImageSize( $this, $fileName );
        }
 
@@ -1683,11 +1750,16 @@ abstract class File {
                if ( $renderUrl ) {
                        if ( $this->repo->descriptionCacheExpiry > 0 ) {
                                wfDebug( "Attempting to get the description from cache..." );
-                               $key = $this->repo->getLocalCacheKey( 'RemoteFileDescription', 'url', $lang->getCode(),
-                                                                       $this->getName() );
+                               $key = $this->repo->getLocalCacheKey(
+                                       'RemoteFileDescription',
+                                       'url',
+                                       $lang->getCode(),
+                                       $this->getName()
+                               );
                                $obj = $wgMemc->get( $key );
                                if ( $obj ) {
                                        wfDebug( "success!\n" );
+
                                        return $obj;
                                }
                                wfDebug( "miss\n" );
@@ -1697,6 +1769,7 @@ abstract class File {
                        if ( $res && $this->repo->descriptionCacheExpiry > 0 ) {
                                $wgMemc->set( $key, $res, $this->repo->descriptionCacheExpiry );
                        }
+
                        return $res;
                } else {
                        return false;
@@ -1726,6 +1799,7 @@ abstract class File {
         */
        function getTimestamp() {
                $this->assertRepoDefined();
+
                return $this->repo->getFileTimestamp( $this->getPath() );
        }
 
@@ -1736,6 +1810,7 @@ abstract class File {
         */
        function getSha1() {
                $this->assertRepoDefined();
+
                return $this->repo->getFileSha1( $this->getPath() );
        }
 
@@ -1751,6 +1826,7 @@ abstract class File {
                }
                $ext = $this->getExtension();
                $dotExt = $ext === '' ? '' : ".$ext";
+
                return $hash . $dotExt;
        }
 
@@ -1781,6 +1857,7 @@ abstract class File {
                wfDeprecated( __METHOD__, '1.19' );
 
                $fsFile = new FSFile( $path );
+
                return $fsFile->getProps();
        }
 
@@ -1800,6 +1877,7 @@ abstract class File {
                wfDeprecated( __METHOD__, '1.19' );
 
                $fsFile = new FSFile( $path );
+
                return $fsFile->getSha1Base36();
        }
 
@@ -1866,13 +1944,15 @@ abstract class File {
                        if ( !$this->redirectTitle ) {
                                $this->redirectTitle = Title::makeTitle( NS_FILE, $this->redirected );
                        }
+
                        return $this->redirectTitle;
                }
+
                return null;
        }
 
        /**
-        * @param  $from
+        * @param $from
         * @return void
         */
        function redirectedFrom( $from ) {
index 0b3d5df..2f713a9 100644 (file)
@@ -78,6 +78,7 @@ class ForeignAPIFile extends File {
                        } else {
                                $img = new self( $title, $repo, $info, true );
                        }
+
                        return $img;
                } else {
                        return null;
@@ -133,6 +134,7 @@ class ForeignAPIFile extends File {
                );
                if ( $thumbUrl === false ) {
                        global $wgLang;
+
                        return $this->repo->getThumbError(
                                $this->getName(),
                                $width,
@@ -141,6 +143,7 @@ class ForeignAPIFile extends File {
                                $wgLang->getCode()
                        );
                }
+
                return $this->handler->getTransform( $this, 'bogus', $thumbUrl, $params );
        }
 
@@ -169,6 +172,7 @@ class ForeignAPIFile extends File {
                if ( isset( $this->mInfo['metadata'] ) ) {
                        return serialize( self::parseMetadata( $this->mInfo['metadata'] ) );
                }
+
                return null;
        }
 
@@ -179,6 +183,7 @@ class ForeignAPIFile extends File {
                if ( isset( $this->mInfo['extmetadata'] ) ) {
                        return $this->mInfo['extmetadata'];
                }
+
                return null;
        }
 
@@ -194,6 +199,7 @@ class ForeignAPIFile extends File {
                foreach ( $metadata as $meta ) {
                        $ret[$meta['name']] = self::parseMetadata( $meta['value'] );
                }
+
                return $ret;
        }
 
@@ -254,6 +260,7 @@ class ForeignAPIFile extends File {
                        $magic = MimeMagic::singleton();
                        $this->mInfo['mime'] = $magic->guessTypesForExtension( $this->getExtension() );
                }
+
                return $this->mInfo['mime'];
        }
 
@@ -265,6 +272,7 @@ class ForeignAPIFile extends File {
                        return $this->mInfo['mediatype'];
                }
                $magic = MimeMagic::singleton();
+
                return $magic->getMediaType( null, $this->getMimeType() );
        }
 
@@ -288,6 +296,7 @@ class ForeignAPIFile extends File {
                        if ( $suffix ) {
                                $path = $path . $suffix . '/';
                        }
+
                        return $path;
                } else {
                        return null;
index 01d6b0f..b7a5c35 100644 (file)
@@ -27,7 +27,6 @@
  * @ingroup FileAbstraction
  */
 class ForeignDBFile extends LocalFile {
-
        /**
         * @param $title
         * @param $repo
@@ -51,6 +50,7 @@ class ForeignDBFile extends LocalFile {
                $title = Title::makeTitle( NS_FILE, $row->img_name );
                $file = new self( $title, $repo );
                $file->loadFromRow( $row );
+
                return $file;
        }
 
index b609f43..c6ea79f 100644 (file)
@@ -210,6 +210,7 @@ class LocalFile extends File {
 
                if ( !$key ) {
                        wfProfileOut( __METHOD__ );
+
                        return false;
                }
 
@@ -236,6 +237,7 @@ class LocalFile extends File {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $this->dataLoaded;
        }
 
@@ -289,7 +291,8 @@ class LocalFile extends File {
         */
        function getCacheFields( $prefix = 'img_' ) {
                static $fields = array( 'size', 'width', 'height', 'bits', 'media_type',
-                       'major_mime', 'minor_mime', 'metadata', 'timestamp', 'sha1', 'user', 'user_text', 'description' );
+                       'major_mime', 'minor_mime', 'metadata', 'timestamp', 'sha1', 'user',
+                       'user_text', 'description' );
                static $results = array();
 
                if ( $prefix == '' ) {
@@ -407,6 +410,7 @@ class LocalFile extends File {
                foreach ( $array as $name => $value ) {
                        $decoded[substr( $name, $prefixLength )] = $value;
                }
+
                return $decoded;
        }
 
@@ -518,6 +522,7 @@ class LocalFile extends File {
                if ( !$this->fileExists ) {
                        wfDebug( __METHOD__ . ": file does not exist, aborting\n" );
                        wfProfileOut( __METHOD__ );
+
                        return;
                }
 
@@ -526,6 +531,7 @@ class LocalFile extends File {
 
                if ( wfReadOnly() ) {
                        wfProfileOut( __METHOD__ );
+
                        return;
                }
                wfDebug( __METHOD__ . ': upgrading ' . $this->getName() . " to the current schema\n" );
@@ -597,6 +603,7 @@ class LocalFile extends File {
                        list( $fileExists ) = $this->repo->fileExists( $this->getVirtualUrl() );
                        $this->missing = !$fileExists;
                }
+
                return $this->missing;
        }
 
@@ -684,6 +691,7 @@ class LocalFile extends File {
         */
        function getBitDepth() {
                $this->load();
+
                return $this->bits;
        }
 
@@ -693,6 +701,7 @@ class LocalFile extends File {
         */
        public function getSize() {
                $this->load();
+
                return $this->size;
        }
 
@@ -702,6 +711,7 @@ class LocalFile extends File {
         */
        function getMimeType() {
                $this->load();
+
                return $this->mime;
        }
 
@@ -712,6 +722,7 @@ class LocalFile extends File {
         */
        function getMediaType() {
                $this->load();
+
                return $this->media_type;
        }
 
@@ -727,6 +738,7 @@ class LocalFile extends File {
         */
        public function exists() {
                $this->load();
+
                return $this->fileExists;
        }
 
@@ -761,7 +773,6 @@ class LocalFile extends File {
                        clearstatcache();
                }
                */
-
                /*
                if ( $this->repo->fileExists( $thumbDir ) ) {
                        // Delete file where directory should be
@@ -793,7 +804,8 @@ class LocalFile extends File {
                        foreach ( $iterator as $file ) {
                                $files[] = $file;
                        }
-               } catch ( FileBackendError $e ) {} // suppress (bug 54674)
+               } catch ( FileBackendError $e ) {
+               } // suppress (bug 54674)
 
                return $files;
        }
@@ -982,11 +994,7 @@ class LocalFile extends File {
                $r = array();
 
                foreach ( $res as $row ) {
-                       if ( $this->repo->oldFileFromRowFactory ) {
-                               $r[] = call_user_func( $this->repo->oldFileFromRowFactory, $row, $this->repo );
-                       } else {
-                               $r[] = OldLocalFile::newFromRow( $row, $this->repo );
-                       }
+                       $r[] = $this->repo->newFileFromRow( $row );
                }
 
                if ( $order == 'ASC' ) {
@@ -1011,7 +1019,7 @@ class LocalFile extends File {
 
                $dbr = $this->repo->getSlaveDB();
 
-               if ( $this->historyLine == 0 ) {// called for the first time, return line from cur
+               if ( $this->historyLine == 0 ) { // called for the first time, return line from cur
                        $this->historyRes = $dbr->select( 'image',
                                array(
                                        '*',
@@ -1025,6 +1033,7 @@ class LocalFile extends File {
 
                        if ( 0 == $dbr->numRows( $this->historyRes ) ) {
                                $this->historyRes = null;
+
                                return false;
                        }
                } elseif ( $this->historyLine == 1 ) {
@@ -1034,7 +1043,7 @@ class LocalFile extends File {
                                array( 'ORDER BY' => 'oi_timestamp DESC' )
                        );
                }
-               $this->historyLine ++;
+               $this->historyLine++;
 
                return $dbr->fetchObject( $this->historyRes );
        }
@@ -1078,7 +1087,9 @@ class LocalFile extends File {
         * @return FileRepoStatus object. On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
         */
-       function upload( $srcPath, $comment, $pageText, $flags = 0, $props = false, $timestamp = false, $user = null ) {
+       function upload( $srcPath, $comment, $pageText, $flags = 0, $props = false,
+               $timestamp = false, $user = null
+       ) {
                global $wgContLang;
 
                if ( $this->getRepo()->getReadOnlyReason() !== false ) {
@@ -1088,8 +1099,8 @@ class LocalFile extends File {
                if ( !$props ) {
                        wfProfileIn( __METHOD__ . '-getProps' );
                        if ( $this->repo->isVirtualUrl( $srcPath )
-                               || FileBackend::isStoragePath( $srcPath ) )
-                       {
+                               || FileBackend::isStoragePath( $srcPath )
+                       {
                                $props = $this->repo->getFileProps( $srcPath );
                        } else {
                                $props = FSFile::getPropsFromPath( $srcPath );
@@ -1141,8 +1152,7 @@ class LocalFile extends File {
         * @return bool
         */
        function recordUpload( $oldver, $desc, $license = '', $copyStatus = '', $source = '',
-               $watch = false, $timestamp = false, User $user = null )
-       {
+               $watch = false, $timestamp = false, User $user = null ) {
                if ( !$user ) {
                        global $wgUser;
                        $user = $wgUser;
@@ -1157,6 +1167,7 @@ class LocalFile extends File {
                if ( $watch ) {
                        $user->addWatch( $this->getTitle() );
                }
+
                return true;
        }
 
@@ -1203,6 +1214,7 @@ class LocalFile extends File {
                if ( !$this->fileExists ) {
                        wfDebug( __METHOD__ . ": File " . $this->getRel() . " went missing!\n" );
                        wfProfileOut( __METHOD__ );
+
                        return false;
                }
 
@@ -1242,21 +1254,21 @@ class LocalFile extends File {
                        # Insert previous contents into oldimage
                        $dbw->insertSelect( 'oldimage', 'image',
                                array(
-                                       'oi_name'         => 'img_name',
+                                       'oi_name' => 'img_name',
                                        'oi_archive_name' => $dbw->addQuotes( $oldver ),
-                                       'oi_size'         => 'img_size',
-                                       'oi_width'        => 'img_width',
-                                       'oi_height'       => 'img_height',
-                                       'oi_bits'         => 'img_bits',
-                                       'oi_timestamp'    => 'img_timestamp',
-                                       'oi_description'  => 'img_description',
-                                       'oi_user'         => 'img_user',
-                                       'oi_user_text'    => 'img_user_text',
-                                       'oi_metadata'     => 'img_metadata',
-                                       'oi_media_type'   => 'img_media_type',
-                                       'oi_major_mime'   => 'img_major_mime',
-                                       'oi_minor_mime'   => 'img_minor_mime',
-                                       'oi_sha1'         => 'img_sha1'
+                                       'oi_size' => 'img_size',
+                                       'oi_width' => 'img_width',
+                                       'oi_height' => 'img_height',
+                                       'oi_bits' => 'img_bits',
+                                       'oi_timestamp' => 'img_timestamp',
+                                       'oi_description' => 'img_description',
+                                       'oi_user' => 'img_user',
+                                       'oi_user_text' => 'img_user_text',
+                                       'oi_metadata' => 'img_metadata',
+                                       'oi_media_type' => 'img_media_type',
+                                       'oi_major_mime' => 'img_major_mime',
+                                       'oi_minor_mime' => 'img_minor_mime',
+                                       'oi_sha1' => 'img_sha1'
                                ),
                                array( 'img_name' => $this->getName() ),
                                __METHOD__
@@ -1265,19 +1277,19 @@ class LocalFile extends File {
                        # Update the current image row
                        $dbw->update( 'image',
                                array( /* SET */
-                                       'img_size'        => $this->size,
-                                       'img_width'       => intval( $this->width ),
-                                       'img_height'      => intval( $this->height ),
-                                       'img_bits'        => $this->bits,
-                                       'img_media_type'  => $this->media_type,
-                                       'img_major_mime'  => $this->major_mime,
-                                       'img_minor_mime'  => $this->minor_mime,
-                                       'img_timestamp'   => $timestamp,
+                                       'img_size' => $this->size,
+                                       'img_width' => intval( $this->width ),
+                                       'img_height' => intval( $this->height ),
+                                       'img_bits' => $this->bits,
+                                       'img_media_type' => $this->media_type,
+                                       'img_major_mime' => $this->major_mime,
+                                       'img_minor_mime' => $this->minor_mime,
+                                       'img_timestamp' => $timestamp,
                                        'img_description' => $comment,
-                                       'img_user'        => $user->getId(),
-                                       'img_user_text'   => $user->getName(),
-                                       'img_metadata'    => $dbw->encodeBlob( $this->metadata ),
-                                       'img_sha1'        => $this->sha1
+                                       'img_user' => $user->getId(),
+                                       'img_user_text' => $user->getName(),
+                                       'img_metadata' => $dbw->encodeBlob( $this->metadata ),
+                                       'img_sha1' => $this->sha1
                                ),
                                array( 'img_name' => $this->getName() ),
                                __METHOD__
@@ -1356,7 +1368,13 @@ class LocalFile extends File {
                        # There's already a log entry, so don't make a second RC entry
                        # Squid and file cache for the description page are purged by doEditContent.
                        $content = ContentHandler::makeContent( $pageText, $descTitle );
-                       $status = $wikiPage->doEditContent( $content, $comment, EDIT_NEW | EDIT_SUPPRESS_RC, false, $user );
+                       $status = $wikiPage->doEditContent(
+                               $content,
+                               $comment,
+                               EDIT_NEW | EDIT_SUPPRESS_RC,
+                               false,
+                               $user
+                       );
 
                        $dbw->begin( __METHOD__ ); // XXX; doEdit() uses a transaction
                        // Now that the page exists, make an RC entry.
@@ -1371,7 +1389,6 @@ class LocalFile extends File {
                        $dbw->commit( __METHOD__ ); // commit before anything bad can happen
                }
 
-
                wfProfileOut( __METHOD__ . '-edit' );
 
                # Save to cache and purge the squid
@@ -1414,6 +1431,7 @@ class LocalFile extends File {
                }
 
                wfProfileOut( __METHOD__ );
+
                return true;
        }
 
@@ -1427,7 +1445,7 @@ class LocalFile extends File {
         *
         * @param string $srcPath local filesystem path to the source image
         * @param $flags Integer: a bitwise combination of:
-        *     File::DELETE_SOURCE      Delete the source file, i.e. move rather than copy
+        *     File::DELETE_SOURCE    Delete the source file, i.e. move rather than copy
         * @param array $options Optional additional parameters
         * @return FileRepoStatus object. On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
@@ -1446,7 +1464,7 @@ class LocalFile extends File {
         * @param string $srcPath local filesystem path to the source image
         * @param string $dstRel target relative path
         * @param $flags Integer: a bitwise combination of:
-        *     File::DELETE_SOURCE      Delete the source file, i.e. move rather than copy
+        *     File::DELETE_SOURCE    Delete the source file, i.e. move rather than copy
         * @param array $options Optional additional parameters
         * @return FileRepoStatus object. On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
@@ -1513,7 +1531,7 @@ class LocalFile extends File {
                // Hack: the lock()/unlock() pair is nested in a transaction so the locking is not
                // tied to BEGIN/COMMIT. To avoid slow purges in the transaction, move them outside.
                $this->getRepo()->getMasterDB()->onTransactionIdle(
-                       function() use ( $oldTitleFile, $newTitleFile, $archiveNames ) {
+                       function () use ( $oldTitleFile, $newTitleFile, $archiveNames ) {
                                $oldTitleFile->purgeEverything();
                                foreach ( $archiveNames as $archiveName ) {
                                        $oldTitleFile->purgeOldThumbnails( $archiveName );
@@ -1567,7 +1585,7 @@ class LocalFile extends File {
                // tied to BEGIN/COMMIT. To avoid slow purges in the transaction, move them outside.
                $file = $this;
                $this->getRepo()->getMasterDB()->onTransactionIdle(
-                       function() use ( $file, $archiveNames ) {
+                       function () use ( $file, $archiveNames ) {
                                global $wgUseSquid;
 
                                $file->purgeEverything();
@@ -1697,6 +1715,7 @@ class LocalFile extends File {
                        return false;
                }
                $pout = $content->getParserOutput( $this->title, null, new ParserOptions( null, $lang ) );
+
                return $pout->getText();
        }
 
@@ -1708,8 +1727,8 @@ class LocalFile extends File {
                if ( $audience == self::FOR_PUBLIC && $this->isDeleted( self::DELETED_COMMENT ) ) {
                        return '';
                } elseif ( $audience == self::FOR_THIS_USER
-                       && !$this->userCan( self::DELETED_COMMENT, $user ) )
-               {
+                       && !$this->userCan( self::DELETED_COMMENT, $user )
+               {
                        return '';
                } else {
                        return $this->description;
@@ -1721,6 +1740,7 @@ class LocalFile extends File {
         */
        function getTimestamp() {
                $this->load();
+
                return $this->timestamp;
        }
 
@@ -1754,9 +1774,10 @@ class LocalFile extends File {
         */
        function isCacheable() {
                $this->load();
+
                // If extra data (metadata) was not loaded then it must have been large
                return $this->extraDataLoaded
-                       && strlen( serialize( $this->metadata ) ) <= self::CACHE_FIELD_MAX_LEN;
+               && strlen( serialize( $this->metadata ) ) <= self::CACHE_FIELD_MAX_LEN;
        }
 
        /**
@@ -1780,7 +1801,7 @@ class LocalFile extends File {
                        if ( !$cache->lock( $key, 60 ) ) {
                                throw new MWException( "Could not acquire lock for '{$this->getName()}.'" );
                        }
-                       $dbw->onTransactionIdle( function() use ( $cache, $key ) {
+                       $dbw->onTransactionIdle( function () use ( $cache, $key ) {
                                $cache->unlock( $key ); // release on commit
                        } );
                }
@@ -1990,27 +2011,27 @@ class LocalFileDeleteBatch {
                        $dbw->insertSelect( 'filearchive', 'image',
                                array(
                                        'fa_storage_group' => $encGroup,
-                                       'fa_storage_key'   => "CASE WHEN img_sha1='' THEN '' ELSE $concat END",
-                                       'fa_deleted_user'      => $encUserId,
+                                       'fa_storage_key' => "CASE WHEN img_sha1='' THEN '' ELSE $concat END",
+                                       'fa_deleted_user' => $encUserId,
                                        'fa_deleted_timestamp' => $encTimestamp,
-                                       'fa_deleted_reason'    => $encReason,
-                                       'fa_deleted'           => $this->suppress ? $bitfield : 0,
+                                       'fa_deleted_reason' => $encReason,
+                                       'fa_deleted' => $this->suppress ? $bitfield : 0,
 
-                                       'fa_name'         => 'img_name',
+                                       'fa_name' => 'img_name',
                                        'fa_archive_name' => 'NULL',
-                                       'fa_size'         => 'img_size',
-                                       'fa_width'        => 'img_width',
-                                       'fa_height'       => 'img_height',
-                                       'fa_metadata'     => 'img_metadata',
-                                       'fa_bits'         => 'img_bits',
-                                       'fa_media_type'   => 'img_media_type',
-                                       'fa_major_mime'   => 'img_major_mime',
-                                       'fa_minor_mime'   => 'img_minor_mime',
-                                       'fa_description'  => 'img_description',
-                                       'fa_user'         => 'img_user',
-                                       'fa_user_text'    => 'img_user_text',
-                                       'fa_timestamp'    => 'img_timestamp',
-                                       'fa_sha1'         => 'img_sha1',
+                                       'fa_size' => 'img_size',
+                                       'fa_width' => 'img_width',
+                                       'fa_height' => 'img_height',
+                                       'fa_metadata' => 'img_metadata',
+                                       'fa_bits' => 'img_bits',
+                                       'fa_media_type' => 'img_media_type',
+                                       'fa_major_mime' => 'img_major_mime',
+                                       'fa_minor_mime' => 'img_minor_mime',
+                                       'fa_description' => 'img_description',
+                                       'fa_user' => 'img_user',
+                                       'fa_user_text' => 'img_user_text',
+                                       'fa_timestamp' => 'img_timestamp',
+                                       'fa_sha1' => 'img_sha1',
                                ), $where, __METHOD__ );
                }
 
@@ -2022,27 +2043,27 @@ class LocalFileDeleteBatch {
                        $dbw->insertSelect( 'filearchive', 'oldimage',
                                array(
                                        'fa_storage_group' => $encGroup,
-                                       'fa_storage_key'   => "CASE WHEN oi_sha1='' THEN '' ELSE $concat END",
-                                       'fa_deleted_user'      => $encUserId,
+                                       'fa_storage_key' => "CASE WHEN oi_sha1='' THEN '' ELSE $concat END",
+                                       'fa_deleted_user' => $encUserId,
                                        'fa_deleted_timestamp' => $encTimestamp,
-                                       'fa_deleted_reason'    => $encReason,
-                                       'fa_deleted'           => $this->suppress ? $bitfield : 'oi_deleted',
+                                       'fa_deleted_reason' => $encReason,
+                                       'fa_deleted' => $this->suppress ? $bitfield : 'oi_deleted',
 
-                                       'fa_name'         => 'oi_name',
+                                       'fa_name' => 'oi_name',
                                        'fa_archive_name' => 'oi_archive_name',
-                                       'fa_size'         => 'oi_size',
-                                       'fa_width'        => 'oi_width',
-                                       'fa_height'       => 'oi_height',
-                                       'fa_metadata'     => 'oi_metadata',
-                                       'fa_bits'         => 'oi_bits',
-                                       'fa_media_type'   => 'oi_media_type',
-                                       'fa_major_mime'   => 'oi_major_mime',
-                                       'fa_minor_mime'   => 'oi_minor_mime',
-                                       'fa_description'  => 'oi_description',
-                                       'fa_user'         => 'oi_user',
-                                       'fa_user_text'    => 'oi_user_text',
-                                       'fa_timestamp'    => 'oi_timestamp',
-                                       'fa_sha1'         => 'oi_sha1',
+                                       'fa_size' => 'oi_size',
+                                       'fa_width' => 'oi_width',
+                                       'fa_height' => 'oi_height',
+                                       'fa_metadata' => 'oi_metadata',
+                                       'fa_bits' => 'oi_bits',
+                                       'fa_media_type' => 'oi_media_type',
+                                       'fa_major_mime' => 'oi_major_mime',
+                                       'fa_minor_mime' => 'oi_minor_mime',
+                                       'fa_description' => 'oi_description',
+                                       'fa_user' => 'oi_user',
+                                       'fa_user_text' => 'oi_user_text',
+                                       'fa_timestamp' => 'oi_timestamp',
+                                       'fa_sha1' => 'oi_sha1',
                                ), $where, __METHOD__ );
                }
        }
@@ -2130,6 +2151,7 @@ class LocalFileDeleteBatch {
                        // TODO: delete the defunct filearchive rows if we are using a non-transactional DB
                        $this->file->unlockAndRollback();
                        wfProfileOut( __METHOD__ );
+
                        return $this->status;
                }
 
@@ -2274,7 +2296,8 @@ class LocalFileRestoreBatch {
                                continue;
                        }
 
-                       $deletedRel = $this->file->repo->getDeletedHashPath( $row->fa_storage_key ) . $row->fa_storage_key;
+                       $deletedRel = $this->file->repo->getDeletedHashPath( $row->fa_storage_key ) .
+                               $row->fa_storage_key;
                        $deletedUrl = $this->file->repo->getVirtualUrl() . '/deleted/' . $deletedRel;
 
                        if ( isset( $row->fa_sha1 ) ) {
@@ -2292,7 +2315,8 @@ class LocalFileRestoreBatch {
                        if ( is_null( $row->fa_major_mime ) || $row->fa_major_mime == 'unknown'
                                || is_null( $row->fa_minor_mime ) || $row->fa_minor_mime == 'unknown'
                                || is_null( $row->fa_media_type ) || $row->fa_media_type == 'UNKNOWN'
-                               || is_null( $row->fa_metadata ) ) {
+                               || is_null( $row->fa_metadata )
+                       ) {
                                // Refresh our metadata
                                // Required for a new current revision; nice for older ones too. :)
                                $props = RepoGroup::singleton()->getFileProps( $deletedUrl );
@@ -2301,7 +2325,7 @@ class LocalFileRestoreBatch {
                                        'minor_mime' => $row->fa_minor_mime,
                                        'major_mime' => $row->fa_major_mime,
                                        'media_type' => $row->fa_media_type,
-                                       'metadata'   => $row->fa_metadata
+                                       'metadata' => $row->fa_metadata
                                );
                        }
 
@@ -2309,20 +2333,20 @@ class LocalFileRestoreBatch {
                                // This revision will be published as the new current version
                                $destRel = $this->file->getRel();
                                $insertCurrent = array(
-                                       'img_name'        => $row->fa_name,
-                                       'img_size'        => $row->fa_size,
-                                       'img_width'       => $row->fa_width,
-                                       'img_height'      => $row->fa_height,
-                                       'img_metadata'    => $props['metadata'],
-                                       'img_bits'        => $row->fa_bits,
-                                       'img_media_type'  => $props['media_type'],
-                                       'img_major_mime'  => $props['major_mime'],
-                                       'img_minor_mime'  => $props['minor_mime'],
+                                       'img_name' => $row->fa_name,
+                                       'img_size' => $row->fa_size,
+                                       'img_width' => $row->fa_width,
+                                       'img_height' => $row->fa_height,
+                                       'img_metadata' => $props['metadata'],
+                                       'img_bits' => $row->fa_bits,
+                                       'img_media_type' => $props['media_type'],
+                                       'img_major_mime' => $props['major_mime'],
+                                       'img_minor_mime' => $props['minor_mime'],
                                        'img_description' => $row->fa_description,
-                                       'img_user'        => $row->fa_user,
-                                       'img_user_text'   => $row->fa_user_text,
-                                       'img_timestamp'   => $row->fa_timestamp,
-                                       'img_sha1'        => $sha1
+                                       'img_user' => $row->fa_user,
+                                       'img_user_text' => $row->fa_user_text,
+                                       'img_timestamp' => $row->fa_timestamp,
+                                       'img_sha1' => $sha1
                                );
 
                                // The live (current) version cannot be hidden!
@@ -2348,22 +2372,22 @@ class LocalFileRestoreBatch {
                                $archiveNames[$archiveName] = true;
                                $destRel = $this->file->getArchiveRel( $archiveName );
                                $insertBatch[] = array(
-                                       'oi_name'         => $row->fa_name,
+                                       'oi_name' => $row->fa_name,
                                        'oi_archive_name' => $archiveName,
-                                       'oi_size'         => $row->fa_size,
-                                       'oi_width'        => $row->fa_width,
-                                       'oi_height'       => $row->fa_height,
-                                       'oi_bits'         => $row->fa_bits,
-                                       'oi_description'  => $row->fa_description,
-                                       'oi_user'         => $row->fa_user,
-                                       'oi_user_text'    => $row->fa_user_text,
-                                       'oi_timestamp'    => $row->fa_timestamp,
-                                       'oi_metadata'     => $props['metadata'],
-                                       'oi_media_type'   => $props['media_type'],
-                                       'oi_major_mime'   => $props['major_mime'],
-                                       'oi_minor_mime'   => $props['minor_mime'],
-                                       'oi_deleted'      => $this->unsuppress ? 0 : $row->fa_deleted,
-                                       'oi_sha1'         => $sha1 );
+                                       'oi_size' => $row->fa_size,
+                                       'oi_width' => $row->fa_width,
+                                       'oi_height' => $row->fa_height,
+                                       'oi_bits' => $row->fa_bits,
+                                       'oi_description' => $row->fa_description,
+                                       'oi_user' => $row->fa_user,
+                                       'oi_user_text' => $row->fa_user_text,
+                                       'oi_timestamp' => $row->fa_timestamp,
+                                       'oi_metadata' => $props['metadata'],
+                                       'oi_media_type' => $props['media_type'],
+                                       'oi_major_mime' => $props['major_mime'],
+                                       'oi_minor_mime' => $props['minor_mime'],
+                                       'oi_deleted' => $this->unsuppress ? 0 : $row->fa_deleted,
+                                       'oi_sha1' => $sha1 );
                        }
 
                        $deleteIds[] = $row->fa_id;
@@ -2650,21 +2674,25 @@ class LocalFileMoveBatch {
                if ( !$statusDb->isGood() ) {
                        $this->file->unlockAndRollback();
                        $statusDb->ok = false;
+
                        return $statusDb;
                }
-               wfDebugLog( 'imagemove', "Renamed {$this->file->getName()} in database: {$statusDb->successCount} successes, {$statusDb->failCount} failures" );
+               wfDebugLog( 'imagemove', "Renamed {$this->file->getName()} in database: " .
+                       "{$statusDb->successCount} successes, {$statusDb->failCount} failures" );
 
                // Copy the files into their new location.
                // If a prior process fataled copying or cleaning up files we tolerate any
                // of the existing files if they are identical to the ones being stored.
                $statusMove = $repo->storeBatch( $triplets, FileRepo::OVERWRITE_SAME );
-               wfDebugLog( 'imagemove', "Moved files for {$this->file->getName()}: {$statusMove->successCount} successes, {$statusMove->failCount} failures" );
+               wfDebugLog( 'imagemove', "Moved files for {$this->file->getName()}: " .
+                       "{$statusMove->successCount} successes, {$statusMove->failCount} failures" );
                if ( !$statusMove->isGood() ) {
                        // Delete any files copied over (while the destination is still locked)
                        $this->cleanupTarget( $triplets );
                        $this->file->unlockAndRollback(); // unlocks the destination
                        wfDebugLog( 'imagemove', "Error in moving files: " . $statusMove->getWikiText() );
                        $statusMove->ok = false;
+
                        return $statusMove;
                }
                $this->file->unlock(); // done
@@ -2702,6 +2730,7 @@ class LocalFileMoveBatch {
                } else {
                        $status->failCount++;
                        $status->fatal( 'imageinvalidfilename' );
+
                        return $status;
                }
 
@@ -2743,7 +2772,10 @@ class LocalFileMoveBatch {
                        // $move: (oldRelativePath, newRelativePath)
                        $srcUrl = $this->file->repo->getVirtualUrl() . '/public/' . rawurlencode( $move[0] );
                        $triplets[] = array( $srcUrl, 'public', $move[1] );
-                       wfDebugLog( 'imagemove', "Generated move triplet for {$this->file->getName()}: {$srcUrl} :: public :: {$move[1]}" );
+                       wfDebugLog(
+                               'imagemove',
+                               "Generated move triplet for {$this->file->getName()}: {$srcUrl} :: public :: {$move[1]}"
+                       );
                }
 
                return $triplets;
index 2c54596..ae4ad1c 100644 (file)
  * @ingroup FileAbstraction
  */
 class OldLocalFile extends LocalFile {
-       var $requestedTime, $archive_name;
+       /** @var string Timestamp */
+       protected $requestedTime;
+
+       /** @var string Archive name */
+       protected $archive_name;
 
        const CACHE_VERSION = 1;
        const MAX_CACHE_ROWS = 20;
@@ -44,6 +48,7 @@ class OldLocalFile extends LocalFile {
                if ( $time === null ) {
                        throw new MWException( __METHOD__ . ' got null for $time parameter' );
                }
+
                return new self( $title, $repo, $time, null );
        }
 
@@ -66,6 +71,7 @@ class OldLocalFile extends LocalFile {
                $title = Title::makeTitle( NS_FILE, $row->oi_name );
                $file = new self( $title, $repo, null, $row->oi_archive_name );
                $file->loadFromRow( $row, 'oi_' );
+
                return $file;
        }
 
@@ -150,6 +156,7 @@ class OldLocalFile extends LocalFile {
                if ( !isset( $this->archive_name ) ) {
                        $this->load();
                }
+
                return $this->archive_name;
        }
 
@@ -233,6 +240,7 @@ class OldLocalFile extends LocalFile {
                $fields = parent::getCacheFields( $prefix );
                $fields[] = $prefix . 'archive_name';
                $fields[] = $prefix . 'deleted';
+
                return $fields;
        }
 
@@ -258,6 +266,7 @@ class OldLocalFile extends LocalFile {
                if ( !$this->fileExists ) {
                        wfDebug( __METHOD__ . ": file does not exist, aborting\n" );
                        wfProfileOut( __METHOD__ );
+
                        return;
                }
 
@@ -267,15 +276,15 @@ class OldLocalFile extends LocalFile {
                wfDebug( __METHOD__ . ': upgrading ' . $this->archive_name . " to the current schema\n" );
                $dbw->update( 'oldimage',
                        array(
-                               'oi_size'       => $this->size, // sanity
-                               'oi_width'      => $this->width,
-                               'oi_height'     => $this->height,
-                               'oi_bits'       => $this->bits,
+                               'oi_size' => $this->size, // sanity
+                               'oi_width' => $this->width,
+                               'oi_height' => $this->height,
+                               'oi_bits' => $this->bits,
                                'oi_media_type' => $this->media_type,
                                'oi_major_mime' => $major,
                                'oi_minor_mime' => $minor,
-                               'oi_metadata'   => $this->metadata,
-                               'oi_sha1'       => $this->sha1,
+                               'oi_metadata' => $this->metadata,
+                               'oi_sha1' => $this->sha1,
                        ), array(
                                'oi_name' => $this->getName(),
                                'oi_archive_name' => $this->archive_name ),
@@ -291,6 +300,7 @@ class OldLocalFile extends LocalFile {
         */
        function isDeleted( $field ) {
                $this->load();
+
                return ( $this->deleted & $field ) == $field;
        }
 
@@ -300,6 +310,7 @@ class OldLocalFile extends LocalFile {
         */
        function getVisibility() {
                $this->load();
+
                return (int)$this->deleted;
        }
 
@@ -313,6 +324,7 @@ class OldLocalFile extends LocalFile {
         */
        function userCan( $field, User $user = null ) {
                $this->load();
+
                return Revision::userCanBitfield( $this->deleted, $field, $user );
        }
 
@@ -370,21 +382,21 @@ class OldLocalFile extends LocalFile {
 
                $dbw->insert( 'oldimage',
                        array(
-                               'oi_name'         => $this->getName(),
+                               'oi_name' => $this->getName(),
                                'oi_archive_name' => $archiveName,
-                               'oi_size'         => $props['size'],
-                               'oi_width'        => intval( $props['width'] ),
-                               'oi_height'       => intval( $props['height'] ),
-                               'oi_bits'         => $props['bits'],
-                               'oi_timestamp'    => $dbw->timestamp( $timestamp ),
-                               'oi_description'  => $comment,
-                               'oi_user'         => $user->getId(),
-                               'oi_user_text'    => $user->getName(),
-                               'oi_metadata'     => $props['metadata'],
-                               'oi_media_type'   => $props['media_type'],
-                               'oi_major_mime'   => $props['major_mime'],
-                               'oi_minor_mime'   => $props['minor_mime'],
-                               'oi_sha1'         => $props['sha1'],
+                               'oi_size' => $props['size'],
+                               'oi_width' => intval( $props['width'] ),
+                               'oi_height' => intval( $props['height'] ),
+                               'oi_bits' => $props['bits'],
+                               'oi_timestamp' => $dbw->timestamp( $timestamp ),
+                               'oi_description' => $comment,
+                               'oi_user' => $user->getId(),
+                               'oi_user_text' => $user->getName(),
+                               'oi_metadata' => $props['metadata'],
+                               'oi_media_type' => $props['media_type'],
+                               'oi_major_mime' => $props['major_mime'],
+                               'oi_minor_mime' => $props['minor_mime'],
+                               'oi_sha1' => $props['sha1'],
                        ), __METHOD__
                );
 
@@ -392,5 +404,4 @@ class OldLocalFile extends LocalFile {
 
                return true;
        }
-
 }
index 47ba6d6..e7fa46e 100644 (file)
@@ -71,7 +71,8 @@ class UnregisteredLocalFile extends File {
         */
        function __construct( $title = false, $repo = false, $path = false, $mime = false ) {
                if ( !( $title && $repo ) && !$path ) {
-                       throw new MWException( __METHOD__ . ': not enough parameters, must specify title and repo, or a full path' );
+                       throw new MWException( __METHOD__ .
+                               ': not enough parameters, must specify title and repo, or a full path' );
                }
                if ( $title instanceof Title ) {
                        $this->title = File::normalizeTitle( $title, 'exception' );
@@ -105,6 +106,7 @@ class UnregisteredLocalFile extends File {
                        }
                        $this->dims[$page] = $this->handler->getPageDimensions( $this, $page );
                }
+
                return $this->dims[$page];
        }
 
@@ -114,6 +116,7 @@ class UnregisteredLocalFile extends File {
         */
        function getWidth( $page = 1 ) {
                $dim = $this->cachePageDimensions( $page );
+
                return $dim['width'];
        }
 
@@ -123,6 +126,7 @@ class UnregisteredLocalFile extends File {
         */
        function getHeight( $page = 1 ) {
                $dim = $this->cachePageDimensions( $page );
+
                return $dim['height'];
        }
 
@@ -134,6 +138,7 @@ class UnregisteredLocalFile extends File {
                        $magic = MimeMagic::singleton();
                        $this->mime = $magic->guessMimeType( $this->getLocalRefPath() );
                }
+
                return $this->mime;
        }
 
@@ -145,6 +150,7 @@ class UnregisteredLocalFile extends File {
                if ( !$this->getHandler() ) {
                        return false;
                }
+
                return $this->handler->getImageSize( $this, $this->getLocalRefPath() );
        }
 
@@ -159,6 +165,7 @@ class UnregisteredLocalFile extends File {
                                $this->metadata = $this->handler->getMetadata( $this, $this->getLocalRefPath() );
                        }
                }
+
                return $this->metadata;
        }
 
@@ -179,6 +186,7 @@ class UnregisteredLocalFile extends File {
         */
        function getSize() {
                $this->assertRepoDefined();
+
                return $this->repo->getFileSize( $this->path );
        }
 
index f8b8c50..a341601 100644 (file)
  * @ingroup Media
  */
 abstract class ImageGalleryBase extends ContextSource {
-       var $mImages, $mShowBytes, $mShowFilename, $mMode;
-       var $mCaption = false;
+       /** @var array Gallery images  */
+       protected $mImages;
+
+       /** @var bool Whether to show the filesize in bytes in categories   */
+       protected $mShowBytes;
+
+       /** @var bool Whether to show the filename. Default: true */
+       protected $mShowFilename;
+
+       /** @var string Gallery mode. Default: traditional */
+       protected $mMode;
+
+       /** @var bool|string Gallery caption. Default: false */
+       protected $mCaption = false;
 
        /**
-        * Hide blacklisted images?
+        * @var bool Hide blacklisted images?
         */
-       var $mHideBadImages;
+       protected $mHideBadImages;
 
        /**
-        * Registered parser object for output callbacks
-        * @var Parser
+        * @var Parser Registered parser object for output callbacks
         */
-       var $mParser;
+       protected $mParser;
 
        /**
-        * Contextual title, used when images are being screened
-        * against the bad image list
+        * @var Title Contextual title, used when images are being screened against
+        *   the bad image list
         */
        protected $contextTitle = false;
 
+       /** @var array */
        protected $mAttribs = array();
 
+       /** @var bool */
        static private $modeMapping = false;
 
        /**
         * Get a new image gallery. This is the method other callers
         * should use to get a gallery.
         *
-        * @param String|bool $mode Mode to use. False to use the default.
+        * @param string|bool $mode Mode to use. False to use the default.
+        * @throws MWException
         */
        static function factory( $mode = false ) {
                global $wgGalleryOptions, $wgContLang;
@@ -74,7 +88,7 @@ abstract class ImageGalleryBase extends ContextSource {
                }
        }
 
-       static private function loadModes() {
+       private static function loadModes() {
                if ( self::$modeMapping === false ) {
                        self::$modeMapping = array(
                                'traditional' => 'TraditionalImageGallery',
@@ -150,8 +164,8 @@ abstract class ImageGalleryBase extends ContextSource {
        /**
         * Set how many images will be displayed per row.
         *
-        * @param $num Integer >= 0; If perrow=0 the gallery layout will adapt to screensize
-        * invalid numbers will be rejected
+        * @param int $num Integer >= 0; If perrow=0 the gallery layout will adapt
+        *   to screensize invalid numbers will be rejected
         */
        public function setPerRow( $num ) {
                if ( $num >= 0 ) {
@@ -162,7 +176,7 @@ abstract class ImageGalleryBase extends ContextSource {
        /**
         * Set how wide each image will be, in pixels.
         *
-        * @param $num Integer > 0; invalid numbers will be ignored
+        * @param int $num Integer > 0; invalid numbers will be ignored
         */
        public function setWidths( $num ) {
                if ( $num > 0 ) {
@@ -173,7 +187,7 @@ abstract class ImageGalleryBase extends ContextSource {
        /**
         * Set how high each image will be, in pixels.
         *
-        * @param $num Integer > 0; invalid numbers will be ignored
+        * @param int $num Integer > 0; invalid numbers will be ignored
         */
        public function setHeights( $num ) {
                if ( $num > 0 ) {
@@ -186,14 +200,15 @@ abstract class ImageGalleryBase extends ContextSource {
         * to allow extensions to add additional parameters to
         * <gallery> parser tag.
         *
-        * @param Array $options Attributes of gallery tag.
+        * @param array $options Attributes of gallery tag.
         */
-       public function setAdditionalOptions( $options ) { }
+       public function setAdditionalOptions( $options ) {
+       }
 
        /**
         * Instruct the class to use a specific skin for rendering
         *
-        * @param $skin Skin object
+        * @param Skin $skin
         * @deprecated since 1.18 Not used anymore
         */
        function useSkin( $skin ) {
@@ -204,11 +219,12 @@ abstract class ImageGalleryBase extends ContextSource {
        /**
         * Add an image to the gallery.
         *
-        * @param $title Title object of the image that is added to the gallery
-        * @param $html  String: Additional HTML text to be shown. The name and size of the image are always shown.
-        * @param $alt   String: Alt text for the image
-        * @param $link  String: Override image link (optional)
-        * @param $handlerOpts Array: Array of options for image handler (aka page number)
+        * @param Title $title Title object of the image that is added to the gallery
+        * @param string $html Additional HTML text to be shown. The name and size
+        *   of the image are always shown.
+        * @param string $alt Alt text for the image
+        * @param string $link Override image link (optional)
+        * @param array $handlerOpts Array of options for image handler (aka page number)
         */
        function add( $title, $html = '', $alt = '', $link = '', $handlerOpts = array() ) {
                if ( $title instanceof File ) {
@@ -222,11 +238,12 @@ abstract class ImageGalleryBase extends ContextSource {
        /**
         * Add an image at the beginning of the gallery.
         *
-        * @param $title Title object of the image that is added to the gallery
-        * @param $html  String: Additional HTML text to be shown. The name and size of the image are always shown.
-        * @param $alt   String: Alt text for the image
-        * @param $link  String: Override image link (optional)
-        * @param $handlerOpts Array: Array of options for image handler (aka page number)
+        * @param Title $title Title object of the image that is added to the gallery
+        * @param string $html Additional HTML text to be shown. The name and size
+        *   of the image are always shown.
+        * @param string $alt Alt text for the image
+        * @param string $link  Override image link (optional)
+        * @param array $handlerOpts Array of options for image handler (aka page number)
         */
        function insert( $title, $html = '', $alt = '', $link = '', $handlerOpts = array() ) {
                if ( $title instanceof File ) {
@@ -248,7 +265,7 @@ abstract class ImageGalleryBase extends ContextSource {
         * Enable/Disable showing of the file size of an image in the gallery.
         * Enabled by default.
         *
-        * @param $f Boolean: set to false to disable.
+        * @param bool $f Set to false to disable.
         */
        function setShowBytes( $f ) {
                $this->mShowBytes = (bool)$f;
@@ -258,7 +275,7 @@ abstract class ImageGalleryBase extends ContextSource {
         * Enable/Disable showing of the filename of an image in the gallery.
         * Enabled by default.
         *
-        * @param $f Boolean: set to false to disable.
+        * @param bool $f Set to false to disable.
         */
        function setShowFilename( $f ) {
                $this->mShowFilename = (bool)$f;
@@ -271,7 +288,7 @@ abstract class ImageGalleryBase extends ContextSource {
         * Note -- if taking from user input, you should probably run through
         * Sanitizer::validateAttributes() first.
         *
-        * @param array $attribs of HTML attribute pairs
+        * @param array $attribs Array of HTML attribute pairs
         */
        function setAttributes( $attribs ) {
                $this->mAttribs = $attribs;
@@ -280,12 +297,12 @@ abstract class ImageGalleryBase extends ContextSource {
        /**
         * Display an html representation of the gallery
         *
-        * @return String The html
+        * @return string The html
         */
        abstract public function toHTML();
 
        /**
-        * @return Integer: number of images in the gallery
+        * @return int Number of images in the gallery
         */
        public function count() {
                return count( $this->mImages );
@@ -294,7 +311,7 @@ abstract class ImageGalleryBase extends ContextSource {
        /**
         * Set the contextual title
         *
-        * @param $title Title: contextual title
+        * @param Title $title Contextual title
         */
        public function setContextTitle( $title ) {
                $this->contextTitle = $title;
@@ -303,7 +320,7 @@ abstract class ImageGalleryBase extends ContextSource {
        /**
         * Get the contextual title, if applicable
         *
-        * @return mixed Title or false
+        * @return Title|bool Title or false
         */
        public function getContextTitle() {
                return is_object( $this->contextTitle ) && $this->contextTitle instanceof Title
@@ -313,19 +330,11 @@ abstract class ImageGalleryBase extends ContextSource {
 
        /**
         * Determines the correct language to be used for this image gallery
-        * @return Language object
+        * @return Language
         */
        protected function getRenderLang() {
                return $this->mParser
                        ? $this->mParser->getTargetLanguage()
                        : $this->getLanguage();
        }
-
-       /* Old constants no longer used.
-       const THUMB_PADDING = 30;
-       const GB_PADDING = 5;
-       const GB_BORDERS = 8;
-       */
-
 }
-
index 6b0d0fa..70f5bd9 100644 (file)
@@ -22,7 +22,6 @@
  */
 
 class NolinesImageGallery extends TraditionalImageGallery {
-
        protected function getThumbPadding() {
                return 0;
        }
index 963ee6b..bb55c89 100644 (file)
@@ -21,7 +21,6 @@
  */
 
 class PackedImageGallery extends TraditionalImageGallery {
-
        function __construct( $mode = 'traditional' ) {
                parent::__construct( $mode );
                // Does not support per row option.
@@ -49,6 +48,7 @@ class PackedImageGallery extends TraditionalImageGallery {
 
        /**
         * @param File $img The file being transformed. May be false
+        * @return array
         */
        protected function getThumbParams( $img ) {
                if ( $img && $img->getMediaType() === MEDIATYPE_AUDIO ) {
@@ -58,6 +58,7 @@ class PackedImageGallery extends TraditionalImageGallery {
                        // factor, so use random big number.
                        $width = $this->mHeights * 10 + 100;
                }
+
                // self::SCALE_FACTOR so the js has some room to manipulate sizes.
                return array(
                        'width' => $width * self::SCALE_FACTOR,
@@ -70,14 +71,18 @@ class PackedImageGallery extends TraditionalImageGallery {
                if ( $thumbWidth < 60 * self::SCALE_FACTOR ) {
                        $thumbWidth = 60 * self::SCALE_FACTOR;
                }
+
                return $thumbWidth / self::SCALE_FACTOR + $this->getThumbPadding();
        }
 
        /**
-        * @param MediaTransformOutput|bool $thumb the thumbnail, or false if no thumb (which can happen)
+        * @param MediaTransformOutput|bool $thumb the thumbnail, or false if no
+        *   thumb (which can happen)
+        * @return float
         */
        protected function getGBWidth( $thumb ) {
                $thumbWidth = $thumb ? $thumb->getWidth() : $this->mWidths * self::SCALE_FACTOR;
+
                return $this->getThumbDivWidth( $thumbWidth ) + $this->getGBPadding();
        }
 
index bba06fc..f9c131f 100644 (file)
  */
 
 class PackedOverlayImageGallery extends PackedImageGallery {
-
        /**
         * Add the wrapper html around the thumb's caption
         *
-        * @param String $galleryText The caption
-        * @param MediaTransformOutput|boolean $thumb The thumb this caption is for or false for bad image.
+        * @param string $galleryText The caption
+        * @param MediaTransformOutput|bool $thumb The thumb this caption is for
+        *   or false for bad image.
+        * @return string
         */
        protected function wrapGalleryText( $galleryText, $thumb ) {
 
@@ -37,17 +38,19 @@ class PackedOverlayImageGallery extends PackedImageGallery {
                        return '';
                }
 
-               # ATTENTION: The newline after <div class="gallerytext"> is needed to accommodate htmltidy which
-               # in version 4.8.6 generated crackpot html in its absence, see:
-               # http://bugzilla.wikimedia.org/show_bug.cgi?id=1765 -Ævar
+               # ATTENTION: The newline after <div class="gallerytext"> is needed to
+               # accommodate htmltidy which in version 4.8.6 generated crackpot HTML
+               # in its absence, see: http://bugzilla.wikimedia.org/show_bug.cgi?id=1765
+               # -Ævar
 
                $thumbWidth = $this->getGBWidth( $thumb ) - $this->getThumbPadding() - $this->getGBPadding();
                $captionWidth = ceil( $thumbWidth - 20 );
 
                $outerWrapper = '<div class="gallerytextwrapper" style="width: ' . $captionWidth . 'px">';
+
                return "\n\t\t\t" . $outerWrapper . '<div class="gallerytext">' . "\n"
-                                       . $galleryText
-                                       . "\n\t\t\t</div>";
+                       . $galleryText
+                       . "\n\t\t\t</div>";
        }
 }
 
@@ -57,4 +60,5 @@ class PackedOverlayImageGallery extends PackedImageGallery {
  * falls back to PackedHoverGallery. Degrades gracefully for
  * screen readers.
  */
-class PackedHoverImageGallery extends PackedOverlayImageGallery { }
+class PackedHoverImageGallery extends PackedOverlayImageGallery {
+}
index 1f60fa6..cfedac7 100644 (file)
@@ -21,8 +21,6 @@
  */
 
 class TraditionalImageGallery extends ImageGalleryBase {
-
-
        /**
         * Return a HTML representation of the image gallery
         *
@@ -38,8 +36,10 @@ class TraditionalImageGallery extends ImageGalleryBase {
                if ( $this->mPerRow > 0 ) {
                        $maxwidth = $this->mPerRow * ( $this->mWidths + $this->getAllPadding() );
                        $oldStyle = isset( $this->mAttribs['style'] ) ? $this->mAttribs['style'] : '';
-                       # _width is ignored by any sane browser. IE6 doesn't know max-width so it uses _width instead
-                       $this->mAttribs['style'] = "max-width: {$maxwidth}px;_width: {$maxwidth}px;" . $oldStyle;
+                       # _width is ignored by any sane browser. IE6 doesn't know max-width
+                       # so it uses _width instead
+                       $this->mAttribs['style'] = "max-width: {$maxwidth}px;_width: {$maxwidth}px;" .
+                               $oldStyle;
                }
 
                $attribs = Sanitizer::mergeAttributes(
@@ -60,6 +60,7 @@ class TraditionalImageGallery extends ImageGalleryBase {
                $lang = $this->getRenderLang();
                # Output each image...
                foreach ( $this->mImages as $pair ) {
+                       /** @var Title $nt */
                        $nt = $pair[0];
                        $text = $pair[1]; # "text" means "caption" here
                        $alt = $pair[2];
@@ -90,28 +91,31 @@ class TraditionalImageGallery extends ImageGalleryBase {
 
                        if ( !$img ) {
                                # We're dealing with a non-image, spit out the name and be done with it.
-                               $thumbhtml = "\n\t\t\t" . '<div class="thumb" style="height: ' . ( $this->getThumbPadding() + $this->mHeights ) . 'px;">'
+                               $thumbhtml = "\n\t\t\t" . '<div class="thumb" style="height: '
+                                       . ( $this->getThumbPadding() + $this->mHeights ) . 'px;">'
                                        . htmlspecialchars( $nt->getText() ) . '</div>';
 
                                if ( $this->mParser instanceof Parser ) {
                                        $this->mParser->addTrackingCategory( 'broken-file-category' );
                                }
-                       } elseif ( $this->mHideBadImages && wfIsBadImage( $nt->getDBkey(), $this->getContextTitle() ) ) {
+                       } elseif ( $this->mHideBadImages
+                               && wfIsBadImage( $nt->getDBkey(), $this->getContextTitle() )
+                       ) {
                                # The image is blacklisted, just show it as a text link.
-                               $thumbhtml = "\n\t\t\t" . '<div class="thumb" style="height: ' . ( $this->getThumbPadding() + $this->mHeights ) . 'px;">' .
-                                       Linker::link(
+                               $thumbhtml = "\n\t\t\t" . '<div class="thumb" style="height: ' .
+                                       ( $this->getThumbPadding() + $this->mHeights ) . 'px;">' .
+                                       Linker::linkKnown(
                                                $nt,
-                                               htmlspecialchars( $nt->getText() ),
-                                               array(),
-                                               array(),
-                                               array( 'known', 'noclasses' )
+                                               htmlspecialchars( $nt->getText() )
                                        ) .
                                        '</div>';
                        } elseif ( !( $thumb = $img->transform( $transformOptions ) ) ) {
                                # Error generating thumbnail.
-                               $thumbhtml = "\n\t\t\t" . '<div class="thumb" style="height: ' . ( $this->getThumbPadding() + $this->mHeights ) . 'px;">'
+                               $thumbhtml = "\n\t\t\t" . '<div class="thumb" style="height: '
+                                       . ( $this->getThumbPadding() + $this->mHeights ) . 'px;">'
                                        . htmlspecialchars( $img->getLastError() ) . '</div>';
                        } else {
+                               /** @var MediaTransformOutput $thumb */
                                $vpad = $this->getVPad( $this->mHeights, $thumb->getHeight() );
 
                                $imageParameters = array(
@@ -120,7 +124,9 @@ class TraditionalImageGallery extends ImageGalleryBase {
                                        'alt' => $alt,
                                        'custom-url-link' => $link
                                );
-                               # In the absence of both alt text and caption, fall back on providing screen readers with the filename as alt text
+
+                               // In the absence of both alt text and caption, fall back on
+                               // providing screen readers with the filename as alt text
                                if ( $alt == '' && $text == '' ) {
                                        $imageParameters['alt'] = $nt->getText();
                                }
@@ -128,22 +134,27 @@ class TraditionalImageGallery extends ImageGalleryBase {
                                $this->adjustImageParameters( $thumb, $imageParameters );
 
                                # Set both fixed width and min-height.
-                               $thumbhtml = "\n\t\t\t" .
-                                       '<div class="thumb" style="width: ' . $this->getThumbDivWidth( $thumb->getWidth() ) . 'px;">'
-                                       # Auto-margin centering for block-level elements. Needed now that we have video
-                                       # handlers since they may emit block-level elements as opposed to simple <img> tags.
-                                       # ref http://css-discuss.incutio.com/?page=CenteringBlockElement
+                               $thumbhtml = "\n\t\t\t"
+                                       . '<div class="thumb" style="width: '
+                                       . $this->getThumbDivWidth( $thumb->getWidth() ) . 'px;">'
+                                       # Auto-margin centering for block-level elements. Needed
+                                       # now that we have video handlers since they may emit block-
+                                       # level elements as opposed to simple <img> tags. ref
+                                       # http://css-discuss.incutio.com/?page=CenteringBlockElement
                                        . '<div style="margin:' . $vpad . 'px auto;">'
                                        . $thumb->toHtml( $imageParameters ) . '</div></div>';
 
                                // Call parser transform hook
-                               if ( $this->mParser && $img->getHandler() ) {
-                                       $img->getHandler()->parserTransformHook( $this->mParser, $img );
+                               /** @var MediaHandler $handler */
+                               $handler = $img->getHandler();
+                               if ( $this->mParser && $handler ) {
+                                       $handler->parserTransformHook( $this->mParser, $img );
                                }
                        }
 
-                       //TODO
-                       // $linkTarget = Title::newFromText( $wgContLang->getNsText( MWNamespace::getUser() ) . ":{$ut}" );
+                       // @todo Code is incomplete.
+                       // $linkTarget = Title::newFromText( $wgContLang->getNsText( MWNamespace::getUser() ) .
+                       // ":{$ut}" );
                        // $ul = Linker::link( $linkTarget, $ut );
 
                        if ( $this->mShowBytes ) {
@@ -158,48 +169,46 @@ class TraditionalImageGallery extends ImageGalleryBase {
                        }
 
                        $textlink = $this->mShowFilename ?
-                               Linker::link(
+                               Linker::linkKnown(
                                        $nt,
-                                       htmlspecialchars( $lang->truncate( $nt->getText(), $this->mCaptionLength ) ),
-                                       array(),
-                                       array(),
-                                       array( 'known', 'noclasses' )
+                                       htmlspecialchars( $lang->truncate( $nt->getText(), $this->mCaptionLength ) )
                                ) . "<br />\n" :
                                '';
 
-
                        $galleryText = $textlink . $text . $fileSize;
                        $galleryText = $this->wrapGalleryText( $galleryText, $thumb );
 
                        # Weird double wrapping (the extra div inside the li) needed due to FF2 bug
                        # Can be safely removed if FF2 falls completely out of existence
-                       $output .=
-                               "\n\t\t" . '<li class="gallerybox" style="width: ' . $this->getGBWidth( $thumb ) . 'px">'
-                                       . '<div style="width: ' . $this->getGBWidth( $thumb ) . 'px">'
-                                       . $thumbhtml
-                                       . $galleryText
-                                       . "\n\t\t</div></li>";
+                       $output .= "\n\t\t" . '<li class="gallerybox" style="width: '
+                               . $this->getGBWidth( $thumb ) . 'px">'
+                               . '<div style="width: ' . $this->getGBWidth( $thumb ) . 'px">'
+                               . $thumbhtml
+                               . $galleryText
+                               . "\n\t\t</div></li>";
                }
                $output .= "\n</ul>";
 
                return $output;
        }
 
-
        /**
         * Add the wrapper html around the thumb's caption
         *
-        * @param String $galleryText The caption
-        * @param MediaTransformOutput|boolean $thumb The thumb this caption is for or false for bad image.
+        * @param string $galleryText The caption
+        * @param MediaTransformOutput|bool $thumb The thumb this caption is for
+        *   or false for bad image.
+        * @return string
         */
        protected function wrapGalleryText( $galleryText, $thumb ) {
-               # ATTENTION: The newline after <div class="gallerytext"> is needed to accommodate htmltidy which
-               # in version 4.8.6 generated crackpot html in its absence, see:
-               # http://bugzilla.wikimedia.org/show_bug.cgi?id=1765 -Ævar
+               # ATTENTION: The newline after <div class="gallerytext"> is needed to
+               # accommodate htmltidy which in version 4.8.6 generated crackpot html in
+               # its absence, see: http://bugzilla.wikimedia.org/show_bug.cgi?id=1765
+               # -Ævar
 
                return "\n\t\t\t" . '<div class="gallerytext">' . "\n"
-                                       . $galleryText
-                                       . "\n\t\t\t</div>";
+                       . $galleryText
+                       . "\n\t\t\t</div>";
        }
 
        /**
@@ -213,7 +222,6 @@ class TraditionalImageGallery extends ImageGalleryBase {
        }
 
        /**
-        *
         * @note GB stands for gallerybox (as in the <li class="gallerybox"> element)
         *
         * @return int
@@ -236,7 +244,7 @@ class TraditionalImageGallery extends ImageGalleryBase {
        /**
         * Get total padding.
         *
-        * @return int How many pixels of whitespace surround the thumbnail.
+        * @return int Number of pixels of whitespace surrounding the thumbnail.
         */
        protected function getAllPadding() {
                return $this->getThumbPadding() + $this->getGBPadding() + $this->getGBBorders();
@@ -249,7 +257,7 @@ class TraditionalImageGallery extends ImageGalleryBase {
         *
         * @param int $boxHeight How high we want the box to be.
         * @param int $thumbHeight How high the thumbnail is.
-        * @return int How many vertical padding to add on each side.
+        * @return int Vertical padding to add on each side.
         */
        protected function getVPad( $boxHeight, $thumbHeight ) {
                return ( $this->getThumbPadding() + $boxHeight - $thumbHeight ) / 2;
@@ -259,6 +267,7 @@ class TraditionalImageGallery extends ImageGalleryBase {
         * Get the transform parameters for a thumbnail.
         *
         * @param File $img The file in question. May be false for invalid image
+        * @return array
         */
        protected function getThumbParams( $img ) {
                return array(
@@ -285,8 +294,8 @@ class TraditionalImageGallery extends ImageGalleryBase {
         * plus padding on gallerybox.
         *
         * @note Important: parameter will be false if no thumb used.
-        * @param Mixed $thumb MediaTransformObject object or false.
-        * @return int width of gallerybox element
+        * @param MediaTransformOutput|bool $thumb MediaTransformObject object or false.
+        * @return int Width of gallerybox element
         */
        protected function getGBWidth( $thumb ) {
                return $this->mWidths + $this->getThumbPadding() + $this->getGBPadding();
@@ -297,7 +306,7 @@ class TraditionalImageGallery extends ImageGalleryBase {
         *
         * Primarily intended for subclasses.
         *
-        * @return Array modules to include
+        * @return array Modules to include
         */
        protected function getModules() {
                return array();
@@ -308,9 +317,10 @@ class TraditionalImageGallery extends ImageGalleryBase {
         *
         * Used by a subclass to insert extra high resolution images.
         * @param MediaTransformOutput $thumb The thumbnail
-        * @param Array $imageParameters Array of options
+        * @param array $imageParameters Array of options
         */
-       protected function adjustImageParameters( $thumb, &$imageParameters ) { }
+       protected function adjustImageParameters( $thumb, &$imageParameters ) {
+       }
 }
 
 /**
index ac768a0..68dd216 100644 (file)
@@ -74,7 +74,7 @@ This program is free software; you can redistribute it and/or modify it under th
 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 <doclink href=Copying>a copy of the GNU General Public License</doclink> along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. or [http://www.gnu.org/copyleft/gpl.html read it online].",
+You should have received <doclink href=Copying>a copy of the GNU General Public License</doclink> along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, or [http://www.gnu.org/copyleft/gpl.html read it online].",
        'config-sidebar'                  => "* [//www.mediawiki.org MediaWiki home]
 * [//www.mediawiki.org/wiki/Help:Contents User's Guide]
 * [//www.mediawiki.org/wiki/Manual:Contents Administrator's Guide]
@@ -224,7 +224,7 @@ In '''binary mode''', MediaWiki stores UTF-8 text to the database in binary fiel
 This is more efficient than MySQL's UTF-8 mode, and allows you to use the full range of Unicode characters.
 In '''UTF-8 mode''', MySQL will know what character set your data is in, and can present and convert it appropriately,
 but it will not let you store characters above the [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
-       'config-mysql-old'                => 'MySQL $1 or later is required, you have $2.',
+       'config-mysql-old'                => 'MySQL $1 or later is required. You have $2.',
        'config-db-port'                  => 'Database port:',
        'config-db-schema'                => 'Schema for MediaWiki:',
        'config-db-schema-help'           => 'This schema will usually be fine.
@@ -277,7 +277,7 @@ Check the host, username and password and try again.',
 Use only ASCII letters (a-z, A-Z), numbers (0-9) and underscores (_).',
        'config-db-sys-create-oracle' => 'Installer only supports using a SYSDBA account for creating a new account.',
        'config-db-sys-user-exists-oracle' => 'User account "$1" already exists. SYSDBA can only be used for creating of a new account!',
-       'config-postgres-old'             => 'PostgreSQL $1 or later is required, you have $2.',
+       'config-postgres-old'             => 'PostgreSQL $1 or later is required. You have $2.',
        'config-sqlite-name-help'         => 'Choose a name that identifies your wiki.
 Do not use spaces or hyphens.
 This will be used for the SQLite data file name.',
@@ -340,7 +340,7 @@ The account you specify here must already exist.',
 
 If your MySQL installation supports InnoDB, it is highly recommended that you choose that instead.
 If your MySQL installation does not support InnoDB, maybe it's time for an upgrade.",
-       'config-mysql-only-myisam-dep'    => "'''Warning:''' MyISAM is the only available storage engine for MySQL, which is not recommended for use with MediaWiki, because:
+       'config-mysql-only-myisam-dep'    => "'''Warning:''' MyISAM is the only available storage engine for MySQL on this machine, and this is not recommended for use with MediaWiki, because:
 * it barely supports concurrency due to table locking
 * it is more prone to corruption than other engines
 * the MediaWiki codebase does not always handle MyISAM as it should
@@ -499,7 +499,7 @@ If you do not know the port, the default is 11211.',
        'config-extensions'               => 'Extensions',
        'config-extensions-help'          => 'The extensions listed above were detected in your <code>./extensions</code> directory.
 
-They may require additional configuration, but you can enable them now',
+They may require additional configuration, but you can enable them now.',
        'config-install-alreadydone'      => "'''Warning:''' You seem to have already installed MediaWiki and are trying to install it again.
 Please proceed to the next page.",
        'config-install-begin'            => 'By pressing "{{int:config-continue}}", you will begin the installation of MediaWiki.
index e6b0fd3..765838b 100644 (file)
@@ -1152,11 +1152,11 @@ abstract class Installer {
                        return chr( 0xC0 | $c >> 6 ) . chr( 0x80 | $c & 0x3F );
                } elseif ( $c <= 0xFFFF ) {
                        return chr( 0xE0 | $c >> 12 ) . chr( 0x80 | $c >> 6 & 0x3F )
-                               . chr( 0x80 | $c & 0x3F );
+                       . chr( 0x80 | $c & 0x3F );
                } elseif ( $c <= 0x10FFFF ) {
                        return chr( 0xF0 | $c >> 18 ) . chr( 0x80 | $c >> 12 & 0x3F )
-                               . chr( 0x80 | $c >> 6 & 0x3F )
-                               . chr( 0x80 | $c & 0x3F );
+                       . chr( 0x80 | $c >> 6 & 0x3F )
+                       . chr( 0x80 | $c & 0x3F );
                } else {
                        return false;
                }
@@ -1744,7 +1744,7 @@ abstract class Installer {
                $GLOBALS['wgMaxShellMemory'] = 0;
 
                // Don't bother embedding images into generated CSS, which is not cached
-               $GLOBALS['wgResourceLoaderLESSFunctions']['embeddable'] = function( $frame, $less ) {
+               $GLOBALS['wgResourceLoaderLESSFunctions']['embeddable'] = function ( $frame, $less ) {
                        return $less->toBool( false );
                };
        }
index 56d8353..2433fbd 100644 (file)
@@ -220,12 +220,23 @@ class LocalSettingsGenerator {
                                                wfBoolToStr( $perm ) . ";\n";
                                }
                        }
+                       $noFollow = '';
+                       if ( $this->groupPermissions['*']['edit'] === false
+                               && $this->groupPermissions['*']['createaccount'] === false
+                               && $this->groupPermissions['*']['read'] !== false ) {
+                               $noFollow = "# Set \$wgNoFollowLinks to true if you open up your wiki to editing by\n"
+                                       . "# the general public and wish to apply nofollow to external links as a\n"
+                                       . "# deterrent to spammers. Nofollow is not a comprehensive anti-spam solution\n"
+                                       . "# and open wikis will generally require other anti-spam measures; for more\n"
+                                       . "# information, see https://www.mediawiki.org/wiki/Manual:Combating_spam\n"
+                                       . "\$wgNoFollowLinks = false;";
+                       }
                }
 
-               $wgServerSetting = "";
+               $serverSetting = "";
                if ( array_key_exists( 'wgServer', $this->values ) && $this->values['wgServer'] !== null ) {
-                       $wgServerSetting = "\n## The protocol and server name to use in fully-qualified URLs\n";
-                       $wgServerSetting .= "\$wgServer = \"{$this->values['wgServer']}\";\n";
+                       $serverSetting = "\n## The protocol and server name to use in fully-qualified URLs\n";
+                       $serverSetting .= "\$wgServer = \"{$this->values['wgServer']}\";\n";
                }
 
                switch ( $this->values['wgMainCacheType'] ) {
@@ -271,7 +282,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 ## http://www.mediawiki.org/wiki/Manual:Short_URL
 \$wgScriptPath = \"{$this->values['wgScriptPath']}\";
 \$wgScriptExtension = \"{$this->values['wgScriptExtension']}\";
-${wgServerSetting}
+${serverSetting}
 ## The relative URL path to the skins directory
 \$wgStylePath = \"\$wgScriptPath/skins\";
 
@@ -353,6 +364,7 @@ ${wgServerSetting}
 # Path to the GNU diff3 utility. Used for conflict resolution.
 \$wgDiff3 = \"{$this->values['wgDiff3']}\";
 
-{$groupRights}";
+{$groupRights}
+{$noFollow}";
        }
 }
index 5f76972..2d43324 100644 (file)
@@ -268,9 +268,7 @@ class MysqlInstaller extends DatabaseInstaller {
                if ( !$status->isOK() ) {
                        return false;
                }
-               /**
-                * @var $conn DatabaseBase
-                */
+               /** @var $conn DatabaseBase */
                $conn = $status->value;
 
                // Get current account name
@@ -436,13 +434,14 @@ class MysqlInstaller extends DatabaseInstaller {
                if ( !$create ) {
                        // Test the web account
                        try {
-                               $db = DatabaseBase::factory( 'mysql', array(
+                               DatabaseBase::factory( 'mysql', array(
                                        'host' => $this->getVar( 'wgDBserver' ),
                                        'user' => $this->getVar( 'wgDBuser' ),
                                        'password' => $this->getVar( 'wgDBpassword' ),
                                        'dbname' => false,
                                        'flags' => 0,
-                                       'tablePrefix' => $this->getVar( 'wgDBprefix' ) ) );
+                                       'tablePrefix' => $this->getVar( 'wgDBprefix' )
+                               ) );
                        } catch ( DBConnectionError $e ) {
                                return Status::newFatal( 'config-connection-error', $e->getMessage() );
                        }
@@ -479,6 +478,7 @@ class MysqlInstaller extends DatabaseInstaller {
                if ( !$status->isOK() ) {
                        return $status;
                }
+               /** @var DatabaseBase $conn */
                $conn = $status->value;
                $dbName = $this->getVar( 'wgDBname' );
                if ( !$conn->selectDB( $dbName ) ) {
@@ -516,13 +516,14 @@ class MysqlInstaller extends DatabaseInstaller {
                if ( $this->getVar( '_CreateDBAccount' ) ) {
                        // Before we blindly try to create a user that already has access,
                        try { // first attempt to connect to the database
-                               $db = DatabaseBase::factory( 'mysql', array(
+                               DatabaseBase::factory( 'mysql', array(
                                        'host' => $server,
                                        'user' => $dbUser,
                                        'password' => $password,
                                        'dbname' => false,
                                        'flags' => 0,
-                                       'tablePrefix' => $this->getVar( 'wgDBprefix' ) ) );
+                                       'tablePrefix' => $this->getVar( 'wgDBprefix' )
+                               ) );
                                $grantableNames[] = $this->buildFullUserName( $dbUser, $server );
                                $tryToCreate = false;
                        } catch ( DBConnectionError $e ) {
index 0f4faec..cc5313a 100644 (file)
@@ -34,8 +34,8 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'disableContentHandlerUseDB' ),
 
                        // 1.2
-                       array( 'addField', 'ipblocks',      'ipb_id',           'patch-ipblocks.sql' ),
-                       array( 'addField', 'ipblocks',      'ipb_expiry',       'patch-ipb_expiry.sql' ),
+                       array( 'addField', 'ipblocks', 'ipb_id', 'patch-ipblocks.sql' ),
+                       array( 'addField', 'ipblocks', 'ipb_expiry', 'patch-ipb_expiry.sql' ),
                        array( 'doInterwikiUpdate' ),
                        array( 'doIndexUpdate' ),
                        array( 'addTable', 'hitcounter', 'patch-hitcounter.sql' ),
@@ -217,13 +217,13 @@ class MysqlUpdater extends DatabaseUpdater {
                        // 1.21
                        array( 'addField', 'revision', 'rev_content_format', 'patch-revision-rev_content_format.sql' ),
                        array( 'addField', 'revision', 'rev_content_model', 'patch-revision-rev_content_model.sql' ),
-                       array( 'addField',      'archive',      'ar_content_format',            'patch-archive-ar_content_format.sql' ),
-                       array( 'addField',      'archive',      'ar_content_model',                 'patch-archive-ar_content_model.sql' ),
-                       array( 'addField',      'page',     'page_content_model',               'patch-page-page_content_model.sql' ),
+                       array( 'addField', 'archive', 'ar_content_format', 'patch-archive-ar_content_format.sql' ),
+                       array( 'addField', 'archive', 'ar_content_model', 'patch-archive-ar_content_model.sql' ),
+                       array( 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ),
                        array( 'enableContentHandlerUseDB' ),
-                       array( 'dropField', 'site_stats',   'ss_admins',        'patch-drop-ss_admins.sql' ),
-                       array( 'dropField', 'recentchanges', 'rc_moved_to_title',            'patch-rc_moved.sql' ),
-                       array( 'addTable', 'sites',                            'patch-sites.sql' ),
+                       array( 'dropField', 'site_stats', 'ss_admins', 'patch-drop-ss_admins.sql' ),
+                       array( 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ),
+                       array( 'addTable', 'sites', 'patch-sites.sql' ),
                        array( 'addField', 'filearchive', 'fa_sha1', 'patch-fa_sha1.sql' ),
                        array( 'addField', 'job', 'job_token', 'patch-job_token.sql' ),
                        array( 'addField', 'job', 'job_attempts', 'patch-job_attempts.sql' ),
@@ -242,6 +242,8 @@ class MysqlUpdater extends DatabaseUpdater {
                                'patch-iwlinks-from-title-index.sql' ),
                        array( 'addField', 'archive', 'ar_id', 'patch-archive-ar_id.sql' ),
                        array( 'addField', 'externallinks', 'el_id', 'patch-externallinks-el_id.sql' ),
+
+                       // 1.23
                        array( 'addField', 'recentchanges', 'rc_source', 'patch-rc_source.sql' ),
                );
        }
@@ -260,6 +262,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        return true;
                }
 
+               /** @var MySQLField $fieldInfo */
                $fieldInfo = $this->db->fieldInfo( $table, $field );
                if ( $fieldInfo->isBinary() ) {
                        $this->output( "...$table table has correct $field encoding.\n" );
index 7757510..113dce6 100644 (file)
@@ -247,6 +247,7 @@ class OracleInstaller extends DatabaseInstaller {
                                return $status;
                        }
                }
+
                $this->db = $status->value;
                $this->setupSchemaVars();
 
index cea4d78..e8a1c80 100644 (file)
@@ -398,7 +398,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        # end
                        array( 'tsearchFixes' ),
 
-                       // 1.22
+                       // 1.23
                        array( 'addPgField', 'recentchanges', 'rc_source',            "TEXT NOT NULL DEFAULT ''" ),
                );
        }
index 6fa22bc..e0ed1ec 100644 (file)
@@ -34,7 +34,7 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'disableContentHandlerUseDB' ),
 
                        // 1.14
-                       array( 'addField', 'site_stats',    'ss_active_users',  'patch-ss_active_users.sql' ),
+                       array( 'addField', 'site_stats', 'ss_active_users', 'patch-ss_active_users.sql' ),
                        array( 'doActiveUsersInit' ),
                        array( 'addField', 'ipblocks', 'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' ),
                        array( 'sqliteInitialIndexes' ),
@@ -96,12 +96,12 @@ class SqliteUpdater extends DatabaseUpdater {
                        // 1.21
                        array( 'addField', 'revision', 'rev_content_format', 'patch-revision-rev_content_format.sql' ),
                        array( 'addField', 'revision', 'rev_content_model', 'patch-revision-rev_content_model.sql' ),
-                       array( 'addField', 'archive',  'ar_content_format',  'patch-archive-ar_content_format.sql' ),
-                       array( 'addField', 'archive',  'ar_content_model',   'patch-archive-ar_content_model.sql' ),
-                       array( 'addField', 'page',     'page_content_model', 'patch-page-page_content_model.sql' ),
+                       array( 'addField', 'archive', 'ar_content_format', 'patch-archive-ar_content_format.sql' ),
+                       array( 'addField', 'archive', 'ar_content_model', 'patch-archive-ar_content_model.sql' ),
+                       array( 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ),
                        array( 'enableContentHandlerUseDB' ),
 
-                       array( 'dropField', 'site_stats',    'ss_admins',         'patch-drop-ss_admins.sql' ),
+                       array( 'dropField', 'site_stats', 'ss_admins', 'patch-drop-ss_admins.sql' ),
                        array( 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ),
                        array( 'addTable', 'sites', 'patch-sites.sql' ),
                        array( 'addField', 'filearchive', 'fa_sha1', 'patch-fa_sha1.sql' ),
@@ -115,11 +115,13 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'addIndex', 'page_props', 'pp_propname_page',
                                'patch-page_props-propname-page-index.sql' ),
                        array( 'addIndex', 'image', 'img_media_mime', 'patch-img_media_mime-index.sql' ),
+
+                       // 1.22
                        array( 'addIndex', 'iwlinks', 'iwl_prefix_from_title', 'patch-iwlinks-from-title-index.sql' ),
                        array( 'addField', 'archive', 'ar_id', 'patch-archive-ar_id.sql' ),
                        array( 'addField', 'externallinks', 'el_id', 'patch-externallinks-el_id.sql' ),
 
-                       // 1.22
+                       // 1.23
                        array( 'addField', 'recentchanges', 'rc_source', 'patch-rc_source.sql' ),
                );
        }
index b37e6b3..79fdc99 100644 (file)
@@ -326,6 +326,7 @@ class WebInstaller extends Installer {
        /**
         * Start the PHP session. This may be called before execute() to start the PHP session.
         *
+        * @throws Exception
         * @return bool
         */
        public function startSession() {
index 6178e5b..00a4ff8 100644 (file)
@@ -124,9 +124,9 @@ class WebInstallerOutput {
                $prepend = '';
                $css = '';
 
-               $cssFileNames = array();
                $resourceLoader = new ResourceLoader();
                foreach ( $moduleNames as $moduleName ) {
+                       /** @var ResourceLoaderFileModule $module */
                        $module = $resourceLoader->getModule( $moduleName );
                        $cssFileNames = $module->getAllStyleFiles();
 
@@ -138,7 +138,8 @@ class WebInstallerOutput {
                                }
 
                                if ( !is_readable( $cssFileName ) ) {
-                                       $prepend .= ResourceLoader::makeComment( "Unable to read $cssFileName. Please check file permissions." );
+                                       $prepend .= ResourceLoader::makeComment( "Unable to read $cssFileName. " .
+                                               "Please check file permissions." );
                                        continue;
                                }
 
@@ -170,7 +171,6 @@ class WebInstallerOutput {
                                        } else {
                                                $prepend .= ResourceLoader::makeComment( "Unable to read $cssFileName." );
                                        }
-
                                } catch ( Exception $e ) {
                                        $prepend .= ResourceLoader::formatException( $e );
                                }
@@ -302,7 +302,6 @@ class WebInstallerOutput {
 
 </div></div>
 
-
 <div id="mw-panel">
        <div class="portal" id="p-logo">
          <a style="background-image: url(../skins/common/images/mediawiki.png);"
index 4003fa8..3c237bf 100644 (file)
@@ -123,28 +123,34 @@ class Interwiki {
                static $db, $site;
 
                wfDebug( __METHOD__ . "( $prefix )\n" );
-               if ( !$db ) {
-                       $db = CdbReader::open( $wgInterwikiCache );
-               }
-               /* Resolve site name */
-               if ( $wgInterwikiScopes >= 3 && !$site ) {
-                       $site = $db->get( '__sites:' . wfWikiID() );
-                       if ( $site == '' ) {
-                               $site = $wgInterwikiFallbackSite;
+               $value = false;
+               try {
+                       if ( !$db ) {
+                               $db = CdbReader::open( $wgInterwikiCache );
+                       }
+                       /* Resolve site name */
+                       if ( $wgInterwikiScopes >= 3 && !$site ) {
+                               $site = $db->get( '__sites:' . wfWikiID() );
+                               if ( $site == '' ) {
+                                       $site = $wgInterwikiFallbackSite;
+                               }
                        }
-               }
 
-               $value = $db->get( wfMemcKey( $prefix ) );
-               // Site level
-               if ( $value == '' && $wgInterwikiScopes >= 3 ) {
-                       $value = $db->get( "_{$site}:{$prefix}" );
-               }
-               // Global Level
-               if ( $value == '' && $wgInterwikiScopes >= 2 ) {
-                       $value = $db->get( "__global:{$prefix}" );
-               }
-               if ( $value == 'undef' ) {
-                       $value = '';
+                       $value = $db->get( wfMemcKey( $prefix ) );
+                       // Site level
+                       if ( $value == '' && $wgInterwikiScopes >= 3 ) {
+                               $value = $db->get( "_{$site}:{$prefix}" );
+                       }
+                       // Global Level
+                       if ( $value == '' && $wgInterwikiScopes >= 2 ) {
+                               $value = $db->get( "__global:{$prefix}" );
+                       }
+                       if ( $value == 'undef' ) {
+                               $value = '';
+                       }
+               } catch ( CdbException $e ) {
+                       wfDebug( __METHOD__ . ": CdbException caught, error message was "
+                               . $e->getMessage() );
                }
 
                return $value;
@@ -232,51 +238,55 @@ class Interwiki {
                static $db, $site;
 
                wfDebug( __METHOD__ . "()\n" );
-               if ( !$db ) {
-                       $db = CdbReader::open( $wgInterwikiCache );
-               }
-               /* Resolve site name */
-               if ( $wgInterwikiScopes >= 3 && !$site ) {
-                       $site = $db->get( '__sites:' . wfWikiID() );
-                       if ( $site == '' ) {
-                               $site = $wgInterwikiFallbackSite;
-                       }
-               }
-
-               // List of interwiki sources
-               $sources = array();
-               // Global Level
-               if ( $wgInterwikiScopes >= 2 ) {
-                       $sources[] = '__global';
-               }
-               // Site level
-               if ( $wgInterwikiScopes >= 3 ) {
-                       $sources[] = '_' . $site;
-               }
-               $sources[] = wfWikiID();
-
                $data = array();
-
-               foreach ( $sources as $source ) {
-                       $list = $db->get( "__list:{$source}" );
-                       foreach ( explode( ' ', $list ) as $iw_prefix ) {
-                               $row = $db->get( "{$source}:{$iw_prefix}" );
-                               if ( !$row ) {
-                                       continue;
+               try {
+                       if ( !$db ) {
+                               $db = CdbReader::open( $wgInterwikiCache );
+                       }
+                       /* Resolve site name */
+                       if ( $wgInterwikiScopes >= 3 && !$site ) {
+                               $site = $db->get( '__sites:' . wfWikiID() );
+                               if ( $site == '' ) {
+                                       $site = $wgInterwikiFallbackSite;
                                }
+                       }
 
-                               list( $iw_local, $iw_url ) = explode( ' ', $row );
-
-                               if ( $local !== null && $local != $iw_local ) {
-                                       continue;
+                       // List of interwiki sources
+                       $sources = array();
+                       // Global Level
+                       if ( $wgInterwikiScopes >= 2 ) {
+                               $sources[] = '__global';
+                       }
+                       // Site level
+                       if ( $wgInterwikiScopes >= 3 ) {
+                               $sources[] = '_' . $site;
+                       }
+                       $sources[] = wfWikiID();
+
+                       foreach ( $sources as $source ) {
+                               $list = $db->get( "__list:{$source}" );
+                               foreach ( explode( ' ', $list ) as $iw_prefix ) {
+                                       $row = $db->get( "{$source}:{$iw_prefix}" );
+                                       if ( !$row ) {
+                                               continue;
+                                       }
+
+                                       list( $iw_local, $iw_url ) = explode( ' ', $row );
+
+                                       if ( $local !== null && $local != $iw_local ) {
+                                               continue;
+                                       }
+
+                                       $data[$iw_prefix] = array(
+                                               'iw_prefix' => $iw_prefix,
+                                               'iw_url' => $iw_url,
+                                               'iw_local' => $iw_local,
+                                       );
                                }
-
-                               $data[$iw_prefix] = array(
-                                       'iw_prefix' => $iw_prefix,
-                                       'iw_url' => $iw_url,
-                                       'iw_local' => $iw_local,
-                               );
                        }
+               } catch ( CdbException $e ) {
+                       wfDebug( __METHOD__ . ": CdbException caught, error message was "
+                               . $e->getMessage() );
                }
 
                ksort( $data );
index ab7df5d..e33baf5 100644 (file)
  * @ingroup JobQueue
  */
 abstract class Job {
-       /**
-        * @var Title
-        */
-       var $title;
+       /** @var int Job identifier */
+       public $id;
+
+       /** @var string */
+       public $command;
 
-       var $command,
-               $params,
-               $id,
-               $removeDuplicates,
-               $error;
+       /** @var array|bool Array of job parameters or false if none */
+       public $params;
 
-       /** @var Array Additional queue metadata */
+       /** @var array Additional queue metadata */
        public $metadata = array();
 
+       /** @var Title */
+       protected $title;
+
+       /** @var bool Expensive jobs may set this to true */
+       protected $removeDuplicates;
+
+       /** @var string Text for error that occurred last */
+       protected $error;
+
        /*-------------------------------------------------------------------------
         * Abstract functions
         *------------------------------------------------------------------------*/
 
        /**
         * Run the job
-        * @return boolean success
+        * @return bool Success
         */
        abstract public function run();
 
@@ -60,7 +67,7 @@ abstract class Job {
         * Create the appropriate object to handle a specific job
         *
         * @param string $command Job command
-        * @param $title Title: Associated title
+        * @param Title $title Associated title
         * @param array|bool $params Job parameters
         * @param int $id Job identifier
         * @throws MWException
@@ -70,6 +77,7 @@ abstract class Job {
                global $wgJobClasses;
                if ( isset( $wgJobClasses[$command] ) ) {
                        $class = $wgJobClasses[$command];
+
                        return new $class( $title, $params, $id );
                }
                throw new MWException( "Invalid job command `{$command}`" );
@@ -122,7 +130,7 @@ abstract class Job {
         * Pop a job off the front of the queue.
         * This is subject to $wgJobTypesExcludedFromDefaultQueue.
         *
-        * @return Job or false if there's no jobs
+        * @return Job|bool False if there are no jobs
         * @deprecated since 1.21
         */
        public static function pop() {
@@ -145,11 +153,12 @@ abstract class Job {
                $this->params = $params;
                $this->id = $id;
 
-               $this->removeDuplicates = false; // expensive jobs may set this to true
+               // expensive jobs may set this to true
+               $this->removeDuplicates = false;
        }
 
        /**
-        * @return integer May be 0 for jobs stored outside the DB
+        * @return int May be 0 for jobs stored outside the DB
         * @deprecated since 1.22
         */
        public function getId() {
@@ -178,7 +187,7 @@ abstract class Job {
        }
 
        /**
-        * @return integer|null UNIX timestamp to delay running this job until, otherwise null
+        * @return int|null UNIX timestamp to delay running this job until, otherwise null
         * @since 1.22
         */
        public function getReleaseTimestamp() {
@@ -208,7 +217,7 @@ abstract class Job {
         * only checked if ignoreDuplicates() returns true, meaning that duplicate
         * jobs are supposed to be ignored.
         *
-        * @return Array Map of key/values
+        * @return array Map of key/values
         * @since 1.21
         */
        public function getDeduplicationInfo() {
@@ -225,13 +234,16 @@ abstract class Job {
                        // Likewise for jobs with different delay times
                        unset( $info['params']['jobReleaseTimestamp'] );
                }
+
                return $info;
        }
 
        /**
         * @see JobQueue::deduplicateRootJob()
         * @param string $key A key that identifies the task
-        * @return Array
+        * @return array Map of:
+        *   - rootJobSignature : hash (e.g. SHA1) that identifies the task
+        *   - rootJobTimestamp : TS_MW timestamp of this instance of the task
         * @since 1.21
         */
        public static function newRootJobParams( $key ) {
@@ -243,7 +255,7 @@ abstract class Job {
 
        /**
         * @see JobQueue::deduplicateRootJob()
-        * @return Array
+        * @return array
         * @since 1.21
         */
        public function getRootJobParams() {
@@ -305,6 +317,7 @@ abstract class Job {
                        if ( $paramString !== '' ) {
                                $s .= ' ' . $paramString;
                        }
+
                        return $s;
                } else {
                        return "{$this->command} $paramString";
index 6556ee8..8d93dc0 100644 (file)
  * @since 1.21
  */
 abstract class JobQueue {
-       protected $wiki; // string; wiki ID
-       protected $type; // string; job type
-       protected $order; // string; job priority for pop()
-       protected $claimTTL; // integer; seconds
-       protected $maxTries; // integer; maximum number of times to try a job
-       protected $checkDelay; // boolean; allow delayed jobs
+       /** @var string Wiki ID */
+       protected $wiki;
+
+       /** @var string Job type */
+       protected $type;
+
+       /** @var string Job priority for pop() */
+       protected $order;
+
+       /** @var int Time to live in seconds */
+       protected $claimTTL;
+
+       /** @var int Maximum number of times to try a job */
+       protected $maxTries;
+
+       /** @var bool Allow delayed jobs */
+       protected $checkDelay;
 
        /** @var BagOStuff */
        protected $dupCache;
@@ -44,7 +55,8 @@ abstract class JobQueue {
        const ROOTJOB_TTL = 2419200; // integer; seconds to remember root jobs (28 days)
 
        /**
-        * @param $params array
+        * @param array $params
+        * @throws MWException
         */
        protected function __construct( array $params ) {
                $this->wiki = $params['wiki'];
@@ -93,7 +105,7 @@ abstract class JobQueue {
         *
         * Queue classes should throw an exception if they do not support the options given.
         *
-        * @param $params array
+        * @param array $params
         * @return JobQueue
         * @throws MWException
         */
@@ -106,6 +118,7 @@ abstract class JobQueue {
                if ( !( $obj instanceof self ) ) {
                        throw new MWException( "Class '$class' is not a " . __CLASS__ . " class." );
                }
+
                return $obj;
        }
 
@@ -141,7 +154,7 @@ abstract class JobQueue {
        /**
         * Get the allowed queue orders for configuration validation
         *
-        * @return Array Subset of (random, timestamp, fifo, undefined)
+        * @return array Subset of (random, timestamp, fifo, undefined)
         */
        abstract protected function supportedOrders();
 
@@ -155,7 +168,7 @@ abstract class JobQueue {
        /**
         * Find out if delayed jobs are supported for configuration validation
         *
-        * @return boolean Whether delayed jobs are supported
+        * @return bool Whether delayed jobs are supported
         */
        protected function supportsDelayedJobs() {
                return false; // not implemented
@@ -177,6 +190,7 @@ abstract class JobQueue {
                wfProfileIn( __METHOD__ );
                $res = $this->doIsEmpty();
                wfProfileOut( __METHOD__ );
+
                return $res;
        }
 
@@ -192,19 +206,20 @@ abstract class JobQueue {
         *
         * If caching is used, this number might be out of date for a minute.
         *
-        * @return integer
+        * @return int
         * @throws JobQueueError
         */
        final public function getSize() {
                wfProfileIn( __METHOD__ );
                $res = $this->doGetSize();
                wfProfileOut( __METHOD__ );
+
                return $res;
        }
 
        /**
         * @see JobQueue::getSize()
-        * @return integer
+        * @return int
         */
        abstract protected function doGetSize();
 
@@ -214,19 +229,20 @@ abstract class JobQueue {
         *
         * If caching is used, this number might be out of date for a minute.
         *
-        * @return integer
+        * @return int
         * @throws JobQueueError
         */
        final public function getAcquiredCount() {
                wfProfileIn( __METHOD__ );
                $res = $this->doGetAcquiredCount();
                wfProfileOut( __METHOD__ );
+
                return $res;
        }
 
        /**
         * @see JobQueue::getAcquiredCount()
-        * @return integer
+        * @return int
         */
        abstract protected function doGetAcquiredCount();
 
@@ -236,7 +252,7 @@ abstract class JobQueue {
         *
         * If caching is used, this number might be out of date for a minute.
         *
-        * @return integer
+        * @return int
         * @throws JobQueueError
         * @since 1.22
         */
@@ -244,12 +260,13 @@ abstract class JobQueue {
                wfProfileIn( __METHOD__ );
                $res = $this->doGetDelayedCount();
                wfProfileOut( __METHOD__ );
+
                return $res;
        }
 
        /**
         * @see JobQueue::getDelayedCount()
-        * @return integer
+        * @return int
         */
        protected function doGetDelayedCount() {
                return 0; // not implemented
@@ -261,19 +278,20 @@ abstract class JobQueue {
         *
         * If caching is used, this number might be out of date for a minute.
         *
-        * @return integer
+        * @return int
         * @throws JobQueueError
         */
        final public function getAbandonedCount() {
                wfProfileIn( __METHOD__ );
                $res = $this->doGetAbandonedCount();
                wfProfileOut( __METHOD__ );
+
                return $res;
        }
 
        /**
         * @see JobQueue::getAbandonedCount()
-        * @return integer
+        * @return int
         */
        protected function doGetAbandonedCount() {
                return 0; // not implemented
@@ -284,8 +302,8 @@ abstract class JobQueue {
         * This does not require $wgJobClasses to be set for the given job type.
         * Outside callers should use JobQueueGroup::push() instead of this function.
         *
-        * @param $jobs Job|Array
-        * @param $flags integer Bitfield (supports JobQueue::QOS_ATOMIC)
+        * @param Job|array $jobs A single job or an array of Jobs
+        * @param int $flags Bitfield (supports JobQueue::QOS_ATOMIC)
         * @return bool Returns false on failure
         * @throws JobQueueError
         */
@@ -299,9 +317,9 @@ 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 int $flags Bitfield (supports JobQueue::QOS_ATOMIC)
+        * @throws MWException
         * @return bool Returns false on failure
-        * @throws JobQueueError
         */
        final public function batchPush( array $jobs, $flags = 0 ) {
                if ( !count( $jobs ) ) {
@@ -321,11 +339,14 @@ abstract class JobQueue {
                wfProfileIn( __METHOD__ );
                $ok = $this->doBatchPush( $jobs, $flags );
                wfProfileOut( __METHOD__ );
+
                return $ok;
        }
 
        /**
         * @see JobQueue::batchPush()
+        * @param array $jobs
+        * @param $flags
         * @return bool
         */
        abstract protected function doBatchPush( array $jobs, $flags );
@@ -335,8 +356,8 @@ abstract class JobQueue {
         * This requires $wgJobClasses to be set for the given job type.
         * Outside callers should use JobQueueGroup::pop() instead of this function.
         *
+        * @throws MWException
         * @return Job|bool Returns false if there are no jobs
-        * @throws JobQueueError
         */
        final public function pop() {
                global $wgJobClasses;
@@ -358,7 +379,9 @@ abstract class JobQueue {
                                JobQueue::incrStats( 'job-pop-duplicate', $this->type );
                                $job = DuplicateJob::newFromJob( $job ); // convert to a no-op
                        }
-               } catch ( MWException $e ) {} // don't lose jobs over this
+               } catch ( MWException $e ) {
+                       // don't lose jobs over this
+               }
 
                return $job;
        }
@@ -375,9 +398,9 @@ abstract class JobQueue {
         * This does nothing for certain queue classes or if "claimTTL" is not set.
         * Outside callers should use JobQueueGroup::ack() instead of this function.
         *
-        * @param $job Job
+        * @param Job $job
+        * @throws MWException
         * @return bool
-        * @throws JobQueueError
         */
        final public function ack( Job $job ) {
                if ( $job->getType() !== $this->type ) {
@@ -386,11 +409,13 @@ abstract class JobQueue {
                wfProfileIn( __METHOD__ );
                $ok = $this->doAck( $job );
                wfProfileOut( __METHOD__ );
+
                return $ok;
        }
 
        /**
         * @see JobQueue::ack()
+        * @param Job $job
         * @return bool
         */
        abstract protected function doAck( Job $job );
@@ -422,9 +447,9 @@ abstract class JobQueue {
         *
         * This does nothing for certain queue classes.
         *
-        * @param $job Job
+        * @param Job $job
+        * @throws MWException
         * @return bool
-        * @throws JobQueueError
         */
        final public function deduplicateRootJob( Job $job ) {
                if ( $job->getType() !== $this->type ) {
@@ -433,12 +458,14 @@ abstract class JobQueue {
                wfProfileIn( __METHOD__ );
                $ok = $this->doDeduplicateRootJob( $job );
                wfProfileOut( __METHOD__ );
+
                return $ok;
        }
 
        /**
         * @see JobQueue::deduplicateRootJob()
-        * @param $job Job
+        * @param Job $job
+        * @throws MWException
         * @return bool
         */
        protected function doDeduplicateRootJob( Job $job ) {
@@ -465,9 +492,9 @@ abstract class JobQueue {
        /**
         * Check if the "root" job of a given job has been superseded by a newer one
         *
-        * @param $job Job
+        * @param Job $job
+        * @throws MWException
         * @return bool
-        * @throws JobQueueError
         */
        final protected function isRootJobOldDuplicate( Job $job ) {
                if ( $job->getType() !== $this->type ) {
@@ -476,6 +503,7 @@ abstract class JobQueue {
                wfProfileIn( __METHOD__ );
                $isDuplicate = $this->doIsRootJobOldDuplicate( $job );
                wfProfileOut( __METHOD__ );
+
                return $isDuplicate;
        }
 
@@ -504,6 +532,7 @@ abstract class JobQueue {
         */
        protected function getRootJobCacheKey( $signature ) {
                list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
+
                return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, 'rootjob', $signature );
        }
 
@@ -518,11 +547,13 @@ abstract class JobQueue {
                wfProfileIn( __METHOD__ );
                $res = $this->doDelete();
                wfProfileOut( __METHOD__ );
+
                return $res;
        }
 
        /**
         * @see JobQueue::delete()
+        * @throws MWException
         * @return bool Success
         */
        protected function doDelete() {
@@ -547,7 +578,8 @@ abstract class JobQueue {
         * @see JobQueue::waitForBackups()
         * @return void
         */
-       protected function doWaitForBackups() {}
+       protected function doWaitForBackups() {
+       }
 
        /**
         * Return a map of task names to task definition maps.
@@ -559,19 +591,20 @@ abstract class JobQueue {
         *   - callback : a PHP callable that performs the task
         *   - period   : the period in seconds corresponding to the task frequency
         *
-        * @return Array
+        * @return array
         */
        final public function getPeriodicTasks() {
                $tasks = $this->doGetPeriodicTasks();
                foreach ( $tasks as $name => &$def ) {
                        $def['name'] = $name;
                }
+
                return $tasks;
        }
 
        /**
         * @see JobQueue::getPeriodicTasks()
-        * @return Array
+        * @return array
         */
        protected function doGetPeriodicTasks() {
                return array();
@@ -592,7 +625,8 @@ abstract class JobQueue {
         * @see JobQueue::flushCaches()
         * @return void
         */
-       protected function doFlushCaches() {}
+       protected function doFlushCaches() {
+       }
 
        /**
         * Get an iterator to traverse over all available jobs in this queue.
@@ -637,6 +671,7 @@ abstract class JobQueue {
         */
        final public function getSiblingQueuesWithJobs( array $types ) {
                $section = new ProfileSection( __METHOD__ );
+
                return $this->doGetSiblingQueuesWithJobs( $types );
        }
 
@@ -661,6 +696,7 @@ abstract class JobQueue {
         */
        final public function getSiblingQueueSizes( array $types ) {
                $section = new ProfileSection( __METHOD__ );
+
                return $this->doGetSiblingQueueSizes( $types );
        }
 
@@ -678,7 +714,7 @@ abstract class JobQueue {
         *
         * @param string $key Event type
         * @param string $type Job type
-        * @param integer $delta
+        * @param int $delta
         * @since 1.22
         */
        public static function incrStats( $key, $type, $delta = 1 ) {
@@ -689,7 +725,7 @@ abstract class JobQueue {
        /**
         * Namespace the queue with a key to isolate it for testing
         *
-        * @param $key string
+        * @param string $key
         * @return void
         * @throws MWException
         */
@@ -702,5 +738,8 @@ abstract class JobQueue {
  * @ingroup JobQueue
  * @since 1.22
  */
-class JobQueueError extends MWException {}
-class JobQueueConnectionError extends JobQueueError {}
+class JobQueueError extends MWException {
+}
+
+class JobQueueConnectionError extends JobQueueError {
+}
index c39083d..b795695 100644 (file)
@@ -37,7 +37,8 @@ class JobQueueDB extends JobQueue {
        /** @var BagOStuff */
        protected $cache;
 
-       protected $cluster = false; // string; name of an external DB cluster
+       /** @var bool|string Name of an external DB cluster. False if not set */
+       protected $cluster = false;
 
        /**
         * Additional parameters include:
@@ -45,7 +46,7 @@ class JobQueueDB extends JobQueue {
         *               If not specified, the primary DB cluster for the wiki will be used.
         *               This can be overridden with a custom cluster so that DB handles will
         *               be retrieved via LBFactory::getExternalLB() and getConnection().
-        * @param $params array
+        * @param array $params
         */
        protected function __construct( array $params ) {
                global $wgMemc;
@@ -94,7 +95,7 @@ class JobQueueDB extends JobQueue {
 
        /**
         * @see JobQueue::doGetSize()
-        * @return integer
+        * @return int
         */
        protected function doGetSize() {
                $key = $this->getCacheKey( 'size' );
@@ -120,7 +121,7 @@ class JobQueueDB extends JobQueue {
 
        /**
         * @see JobQueue::doGetAcquiredCount()
-        * @return integer
+        * @return int
         */
        protected function doGetAcquiredCount() {
                if ( $this->claimTTL <= 0 ) {
@@ -150,7 +151,7 @@ class JobQueueDB extends JobQueue {
 
        /**
         * @see JobQueue::doGetAbandonedCount()
-        * @return integer
+        * @return int
         * @throws MWException
         */
        protected function doGetAbandonedCount() {
@@ -198,7 +199,7 @@ class JobQueueDB extends JobQueue {
                $that = $this;
                $method = __METHOD__;
                $dbw->onTransactionIdle(
-                       function() use ( $dbw, $that, $jobs, $flags, $method ) {
+                       function () use ( $dbw, $that, $jobs, $flags, $method ) {
                                $that->doBatchPushInternal( $dbw, $jobs, $flags, $method );
                        }
                );
@@ -209,12 +210,12 @@ class JobQueueDB extends JobQueue {
        /**
         * This function should *not* be called outside of JobQueueDB
         *
-        * @param DatabaseBase $dbw
+        * @param IDatabase $dbw
         * @param array $jobs
         * @param int $flags
         * @param string $method
-        * @return boolean
-        * @throws type
+        * @throws DBError
+        * @return bool
         */
        public function doBatchPushInternal( IDatabase $dbw, array $jobs, $flags, $method ) {
                if ( !count( $jobs ) ) {
@@ -258,8 +259,11 @@ class JobQueueDB extends JobQueue {
                                $dbw->insert( 'job', $rowBatch, $method );
                        }
                        JobQueue::incrStats( 'job-insert', $this->type, count( $rows ) );
-                       JobQueue::incrStats( 'job-insert-duplicate', $this->type,
-                               count( $rowSet ) + count( $rowList ) - count( $rows ) );
+                       JobQueue::incrStats(
+                               'job-insert-duplicate',
+                               $this->type,
+                               count( $rowSet ) + count( $rowList ) - count( $rows )
+                       );
                } catch ( DBError $e ) {
                        if ( $flags & self::QOS_ATOMIC ) {
                                $dbw->rollback( $method );
@@ -289,7 +293,7 @@ class JobQueueDB extends JobQueue {
                        $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
                        $autoTrx = $dbw->getFlag( DBO_TRX ); // get current setting
                        $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
-                       $scopedReset = new ScopedCallback( function() use ( $dbw, $autoTrx ) {
+                       $scopedReset = new ScopedCallback( function () use ( $dbw, $autoTrx ) {
                                $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore old setting
                        } );
 
@@ -336,7 +340,7 @@ class JobQueueDB extends JobQueue {
         * @param string $uuid 32 char hex string
         * @param $rand integer Random unsigned integer (31 bits)
         * @param bool $gte Search for job_random >= $random (otherwise job_random <= $random)
-        * @return Row|false
+        * @return stdClass|bool Row|false
         */
        protected function claimRandom( $uuid, $rand, $gte ) {
                $dbw = $this->getMasterDB();
@@ -386,6 +390,7 @@ class JobQueueDB extends JobQueue {
                                        continue; // use job_random
                                }
                        }
+
                        if ( $row ) { // claim the job
                                $dbw->update( 'job', // update by PK
                                        array(
@@ -412,7 +417,7 @@ class JobQueueDB extends JobQueue {
         * Reserve a row with a single UPDATE without holding row locks over RTTs...
         *
         * @param string $uuid 32 char hex string
-        * @return Row|false
+        * @return stdClass|bool Row|false
         */
        protected function claimOldest( $uuid ) {
                $dbw = $this->getMasterDB();
@@ -485,7 +490,7 @@ class JobQueueDB extends JobQueue {
                        $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
                        $autoTrx = $dbw->getFlag( DBO_TRX ); // get current setting
                        $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
-                       $scopedReset = new ScopedCallback( function() use ( $dbw, $autoTrx ) {
+                       $scopedReset = new ScopedCallback( function () use ( $dbw, $autoTrx ) {
                                $dbw->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore old setting
                        } );
 
@@ -520,7 +525,7 @@ class JobQueueDB extends JobQueue {
                // jobs to become no-ops without any actual jobs that made them redundant.
                $dbw = $this->getMasterDB();
                $cache = $this->dupCache;
-               $dbw->onTransactionIdle( function() use ( $cache, $params, $key, $dbw ) {
+               $dbw->onTransactionIdle( function () use ( $cache, $params, $key, $dbw ) {
                        $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
@@ -544,6 +549,7 @@ class JobQueueDB extends JobQueue {
                } catch ( DBError $e ) {
                        $this->throwDBException( $e );
                }
+
                return true;
        }
 
@@ -556,7 +562,7 @@ class JobQueueDB extends JobQueue {
        }
 
        /**
-        * @return Array
+        * @return array
         */
        protected function doGetPeriodicTasks() {
                return array(
@@ -586,7 +592,7 @@ class JobQueueDB extends JobQueue {
                        return new MappedIterator(
                                $dbr->select( 'job', '*',
                                        array( 'job_cmd' => $this->getType(), 'job_token' => '' ) ),
-                               function( $row ) use ( $dbr ) {
+                               function ( $row ) use ( $dbr ) {
                                        $job = Job::factory(
                                                $row->job_cmd,
                                                Title::makeTitle( $row->job_namespace, $row->job_title ),
@@ -618,6 +624,7 @@ class JobQueueDB extends JobQueue {
                foreach ( $res as $row ) {
                        $types[] = $row->job_cmd;
                }
+
                return $types;
        }
 
@@ -630,13 +637,14 @@ class JobQueueDB extends JobQueue {
                foreach ( $res as $row ) {
                        $sizes[$row->job_cmd] = (int)$row->count;
                }
+
                return $sizes;
        }
 
        /**
         * Recycle or destroy any jobs that have been claimed for too long
         *
-        * @return integer Number of jobs recycled/deleted
+        * @return int Number of jobs recycled/deleted
         */
        public function recycleAndDeleteStaleJobs() {
                $now = time();
@@ -663,7 +671,7 @@ class JobQueueDB extends JobQueue {
                                        __METHOD__
                                );
                                $ids = array_map(
-                                       function( $o ) {
+                                       function ( $o ) {
                                                return $o->job_id;
                                        }, iterator_to_array( $res )
                                );
@@ -699,7 +707,7 @@ class JobQueueDB extends JobQueue {
                        // the IDs first means that the UPDATE can be done by primary key (less deadlocks).
                        $res = $dbw->select( 'job', 'job_id', $conds, __METHOD__ );
                        $ids = array_map(
-                               function( $o ) {
+                               function ( $o ) {
                                        return $o->job_id;
                                }, iterator_to_array( $res )
                        );
@@ -718,29 +726,31 @@ class JobQueueDB extends JobQueue {
        }
 
        /**
-        * @param $job Job
+        * @param Job $job
         * @return array
         */
        protected function insertFields( Job $job ) {
                $dbw = $this->getMasterDB();
+
                return array(
                        // Fields that describe the nature of the job
-                       'job_cmd'       => $job->getType(),
+                       'job_cmd' => $job->getType(),
                        'job_namespace' => $job->getTitle()->getNamespace(),
-                       'job_title'     => $job->getTitle()->getDBkey(),
-                       'job_params'    => self::makeBlob( $job->getParams() ),
+                       'job_title' => $job->getTitle()->getDBkey(),
+                       'job_params' => self::makeBlob( $job->getParams() ),
                        // Additional job metadata
-                       'job_id'        => $dbw->nextSequenceValue( 'job_job_id_seq' ),
+                       'job_id' => $dbw->nextSequenceValue( 'job_job_id_seq' ),
                        'job_timestamp' => $dbw->timestamp(),
-                       'job_sha1'      => wfBaseConvert(
+                       'job_sha1' => wfBaseConvert(
                                sha1( serialize( $job->getDeduplicationInfo() ) ),
                                16, 36, 31
                        ),
-                       'job_random'    => mt_rand( 0, self::MAX_JOB_RANDOM )
+                       'job_random' => mt_rand( 0, self::MAX_JOB_RANDOM )
                );
        }
 
        /**
+        * @throws JobQueueConnectionError
         * @return DBConnRef
         */
        protected function getSlaveDB() {
@@ -752,6 +762,7 @@ class JobQueueDB extends JobQueue {
        }
 
        /**
+        * @throws JobQueueConnectionError
         * @return DBConnRef
         */
        protected function getMasterDB() {
@@ -770,15 +781,18 @@ class JobQueueDB extends JobQueue {
                $lb = ( $this->cluster !== false )
                        ? wfGetLBFactory()->getExternalLB( $this->cluster, $this->wiki )
                        : wfGetLB( $this->wiki );
+
                return $lb->getConnectionRef( $index, array(), $this->wiki );
        }
 
        /**
+        * @param $property
         * @return string
         */
        private function getCacheKey( $property ) {
                list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
                $cluster = is_string( $this->cluster ) ? $this->cluster : 'main';
+
                return wfForeignMemcKey( $db, $prefix, 'jobqueue', $cluster, $this->type, $property );
        }
 
index 36f4959..589bed6 100644 (file)
  * @since 1.22
  */
 class JobQueueFederated extends JobQueue {
-       /** @var Array (partition name => weight) reverse sorted by weight */
+       /** @var array (partition name => weight) reverse sorted by weight */
        protected $partitionMap = array();
-       /** @var Array (partition name => JobQueue) reverse sorted by weight */
+
+       /** @var array (partition name => JobQueue) reverse sorted by weight */
        protected $partitionQueues = array();
+
        /** @var HashRing */
        protected $partitionPushRing;
+
        /** @var BagOStuff */
        protected $cache;
 
-       protected $maxPartitionsTry;  // integer; maximum number of partitions to try
+       /** @var int Maximum number of partitions to try */
+       protected $maxPartitionsTry;
 
        const CACHE_TTL_SHORT = 30; // integer; seconds to cache info without re-validating
        const CACHE_TTL_LONG = 300; // integer; seconds to cache info that is kept up to date
@@ -79,6 +83,7 @@ class JobQueueFederated extends JobQueue {
         *                          during failure, at the cost of added latency and somewhat
         *                          less reliable job de-duplication mechanisms.
         * @param array $params
+        * @throws MWException
         */
        protected function __construct( array $params ) {
                parent::__construct( $params );
@@ -104,8 +109,8 @@ class JobQueueFederated extends JobQueue {
                // Get the config to pass to merge into each partition queue config
                $baseConfig = $params;
                foreach ( array( 'class', 'sectionsByWiki', 'maxPartitionsTry',
-                       'partitionsBySection', 'configByPartition', 'partitionsNoPush' ) as $o )
-               {
+                       'partitionsBySection', 'configByPartition', 'partitionsNoPush' ) as $o
+               {
                        unset( $baseConfig[$o] ); // partition queue doesn't care about this
                }
                // Get the partition queue objects
@@ -149,6 +154,7 @@ class JobQueueFederated extends JobQueue {
                        try {
                                if ( !$queue->doIsEmpty() ) {
                                        $this->cache->add( $key, 'false', self::CACHE_TTL_LONG );
+
                                        return false;
                                }
                        } catch ( JobQueueError $e ) {
@@ -157,6 +163,7 @@ class JobQueueFederated extends JobQueue {
                }
 
                $this->cache->add( $key, 'true', self::CACHE_TTL_LONG );
+
                return true;
        }
 
@@ -179,7 +186,7 @@ class JobQueueFederated extends JobQueue {
        /**
         * @param string $type
         * @param string $method
-        * @return integer
+        * @return int
         */
        protected function getCrossPartitionSum( $type, $method ) {
                $key = $this->getCacheKey( $type );
@@ -199,6 +206,7 @@ class JobQueueFederated extends JobQueue {
                }
 
                $this->cache->set( $key, $count, self::CACHE_TTL_SHORT );
+
                return $count;
        }
 
@@ -215,13 +223,15 @@ class JobQueueFederated extends JobQueue {
                        throw new JobQueueError(
                                "Could not insert job(s), {$this->maxPartitionsTry} partitions tried." );
                }
+
                return true;
        }
 
        /**
         * @param array $jobs
         * @param HashRing $partitionRing
-        * @param integer $flags
+        * @param int $flags
+        * @throws JobQueueError
         * @return array List of Job object that could not be inserted
         */
        protected function tryJobInsertions( array $jobs, HashRing &$partitionRing, $flags ) {
@@ -231,6 +241,7 @@ class JobQueueFederated extends JobQueue {
                // to use a consistent hash to avoid allowing duplicate jobs per partition.
                // When inserting a batch of de-duplicated jobs, QOS_ATOMIC is disregarded.
                $uJobsByPartition = array(); // (partition name => job list)
+               /** @var Job $job */
                foreach ( $jobs as $key => $job ) {
                        if ( $job->ignoreDuplicates() ) {
                                $sha1 = sha1( serialize( $job->getDeduplicationInfo() ) );
@@ -250,6 +261,7 @@ class JobQueueFederated extends JobQueue {
 
                // Insert the de-duplicated jobs into the queues...
                foreach ( $uJobsByPartition as $partition => $jobBatch ) {
+                       /** @var JobQueue $queue */
                        $queue = $this->partitionQueues[$partition];
                        try {
                                $ok = $queue->doBatchPush( $jobBatch, $flags | self::QOS_ATOMIC );
@@ -309,6 +321,8 @@ class JobQueueFederated extends JobQueue {
                        if ( $partition === false ) {
                                break; // all partitions at 0 weight
                        }
+
+                       /** @var JobQueue $queue */
                        $queue = $this->partitionQueues[$partition];
                        try {
                                $job = $queue->pop();
@@ -318,6 +332,7 @@ class JobQueueFederated extends JobQueue {
                        }
                        if ( $job ) {
                                $job->metadata['QueuePartition'] = $partition;
+
                                return $job;
                        } else {
                                unset( $partitionsTry[$partition] ); // blacklist partition
@@ -325,6 +340,7 @@ class JobQueueFederated extends JobQueue {
                }
 
                $this->cache->set( $key, 'true', JobQueueDB::CACHE_TTL_LONG );
+
                return false;
        }
 
@@ -332,6 +348,7 @@ class JobQueueFederated extends JobQueue {
                if ( !isset( $job->metadata['QueuePartition'] ) ) {
                        throw new MWException( "The given job has no defined partition name." );
                }
+
                return $this->partitionQueues[$job->metadata['QueuePartition']]->ack( $job );
        }
 
@@ -345,6 +362,7 @@ class JobQueueFederated extends JobQueue {
                                return $this->partitionQueues[$partitions[1]]->doIsRootJobOldDuplicate( $job );
                        }
                }
+
                return false;
        }
 
@@ -358,10 +376,12 @@ class JobQueueFederated extends JobQueue {
                                return $this->partitionQueues[$partitions[1]]->doDeduplicateRootJob( $job );
                        }
                }
+
                return false;
        }
 
        protected function doDelete() {
+               /** @var JobQueue $queue */
                foreach ( $this->partitionQueues as $queue ) {
                        try {
                                $queue->doDelete();
@@ -372,6 +392,7 @@ class JobQueueFederated extends JobQueue {
        }
 
        protected function doWaitForBackups() {
+               /** @var JobQueue $queue */
                foreach ( $this->partitionQueues as $queue ) {
                        try {
                                $queue->waitForBackups();
@@ -383,11 +404,13 @@ class JobQueueFederated extends JobQueue {
 
        protected function doGetPeriodicTasks() {
                $tasks = array();
+               /** @var JobQueue $queue */
                foreach ( $this->partitionQueues as $partition => $queue ) {
                        foreach ( $queue->getPeriodicTasks() as $task => $def ) {
                                $tasks["{$partition}:{$task}"] = $def;
                        }
                }
+
                return $tasks;
        }
 
@@ -399,9 +422,12 @@ class JobQueueFederated extends JobQueue {
                        'delayedcount',
                        'abandonedcount'
                );
+
                foreach ( $types as $type ) {
                        $this->cache->delete( $this->getCacheKey( $type ) );
                }
+
+               /** @var JobQueue $queue */
                foreach ( $this->partitionQueues as $queue ) {
                        $queue->doFlushCaches();
                }
@@ -409,17 +435,23 @@ class JobQueueFederated extends JobQueue {
 
        public function getAllQueuedJobs() {
                $iterator = new AppendIterator();
+
+               /** @var JobQueue $queue */
                foreach ( $this->partitionQueues as $queue ) {
                        $iterator->append( $queue->getAllQueuedJobs() );
                }
+
                return $iterator;
        }
 
        public function getAllDelayedJobs() {
                $iterator = new AppendIterator();
+
+               /** @var JobQueue $queue */
                foreach ( $this->partitionQueues as $queue ) {
                        $iterator->append( $queue->getAllDelayedJobs() );
                }
+
                return $iterator;
        }
 
@@ -430,6 +462,8 @@ class JobQueueFederated extends JobQueue {
 
        protected function doGetSiblingQueuesWithJobs( array $types ) {
                $result = array();
+
+               /** @var JobQueue $queue */
                foreach ( $this->partitionQueues as $queue ) {
                        try {
                                $nonEmpty = $queue->doGetSiblingQueuesWithJobs( $types );
@@ -445,11 +479,14 @@ class JobQueueFederated extends JobQueue {
                                MWExceptionHandler::logException( $e );
                        }
                }
+
                return array_values( $result );
        }
 
        protected function doGetSiblingQueueSizes( array $types ) {
                $result = array();
+
+               /** @var JobQueue $queue */
                foreach ( $this->partitionQueues as $queue ) {
                        try {
                                $sizes = $queue->doGetSiblingQueueSizes( $types );
@@ -464,20 +501,24 @@ class JobQueueFederated extends JobQueue {
                                MWExceptionHandler::logException( $e );
                        }
                }
+
                return $result;
        }
 
        public function setTestingPrefix( $key ) {
+               /** @var JobQueue $queue */
                foreach ( $this->partitionQueues as $queue ) {
                        $queue->setTestingPrefix( $key );
                }
        }
 
        /**
+        * @param $property
         * @return string
         */
        private function getCacheKey( $property ) {
                list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
+
                return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, $property );
        }
 }
index fa7fee5..a3ec8a7 100644 (file)
  * @since 1.21
  */
 class JobQueueGroup {
-       /** @var Array */
+       /** @var array */
        protected static $instances = array();
 
        /** @var ProcessCacheLRU */
        protected $cache;
 
-       protected $wiki; // string; wiki ID
+       /** @var string Wiki ID */
+       protected $wiki;
 
        /** @var array Map of (bucket => (queue => JobQueue, types => list of types) */
        protected $coalescedQueues;
@@ -58,7 +59,7 @@ class JobQueueGroup {
        }
 
        /**
-        * @param string $wiki Wiki ID
+        * @param bool|string $wiki Wiki ID
         * @return JobQueueGroup
         */
        public static function singleton( $wiki = false ) {
@@ -66,6 +67,7 @@ class JobQueueGroup {
                if ( !isset( self::$instances[$wiki] ) ) {
                        self::$instances[$wiki] = new self( $wiki );
                }
+
                return self::$instances[$wiki];
        }
 
@@ -81,7 +83,7 @@ class JobQueueGroup {
        /**
         * Get the job queue object for a given queue type
         *
-        * @param $type string
+        * @param string $type
         * @return JobQueue
         */
        public function get( $type ) {
@@ -103,12 +105,15 @@ class JobQueueGroup {
         * This inserts the jobs into the queue specified by $wgJobTypeConf
         * and updates the aggregate job queue information cache as needed.
         *
-        * @param $jobs Job|array A single Job or a list of Jobs
+        * @param Job|array $jobs A single Job or a list of Jobs
         * @throws MWException
         * @return bool
         */
        public function push( $jobs ) {
                $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
+               if ( !count( $jobs ) ) {
+                       return true;
+               }
 
                $jobsByType = array(); // (job type => list of jobs)
                foreach ( $jobs as $job ) {
@@ -144,8 +149,8 @@ class JobQueueGroup {
         * This pops a job off a queue as specified by $wgJobTypeConf and
         * updates the aggregate job queue information cache as needed.
         *
-        * @param $qtype integer|string JobQueueGroup::TYPE_DEFAULT or type string
-        * @param $flags integer Bitfield of JobQueueGroup::USE_* constants
+        * @param int|string $qtype JobQueueGroup::TYPE_DEFAULT or type string
+        * @param int $flags Bitfield of JobQueueGroup::USE_* constants
         * @return Job|bool Returns false on failure
         */
        public function pop( $qtype = self::TYPE_DEFAULT, $flags = 0 ) {
@@ -157,6 +162,7 @@ class JobQueueGroup {
                        if ( !$job ) {
                                JobQueueAggregator::singleton()->notifyQueueEmpty( $this->wiki, $qtype );
                        }
+
                        return $job;
                } else { // any job in the "default" jobs types
                        if ( $flags & self::USE_CACHE ) {
@@ -193,7 +199,7 @@ class JobQueueGroup {
        /**
         * Acknowledge that a job was completed
         *
-        * @param $job Job
+        * @param Job $job
         * @return bool
         */
        public function ack( Job $job ) {
@@ -204,7 +210,7 @@ class JobQueueGroup {
         * Register the "root job" of a given job into the queue for de-duplication.
         * This should only be called right *after* all the new jobs have been inserted.
         *
-        * @param $job Job
+        * @param Job $job
         * @return bool
         */
        public function deduplicateRootJob( Job $job ) {
@@ -253,7 +259,7 @@ class JobQueueGroup {
        /**
         * Get the list of job types that have non-empty queues
         *
-        * @return Array List of job types that have non-empty queues
+        * @return array List of job types that have non-empty queues
         */
        public function getQueuesWithJobs() {
                $types = array();
@@ -269,13 +275,14 @@ class JobQueueGroup {
                                }
                        }
                }
+
                return $types;
        }
 
        /**
         * Get the size of the queus for a list of job types
         *
-        * @return Array Map of (job type => size)
+        * @return array Map of (job type => size)
         */
        public function getQueueSizes() {
                $sizeMap = array();
@@ -289,6 +296,7 @@ class JobQueueGroup {
                                }
                        }
                }
+
                return $sizeMap;
        }
 
@@ -327,7 +335,7 @@ class JobQueueGroup {
         * This is only used for performance, such as to avoid spamming
         * the queue with many sub-jobs before they actually get run.
         *
-        * @param $type string
+        * @param string $type
         * @return bool
         */
        public function isQueueDeprioritized( $type ) {
@@ -335,12 +343,16 @@ class JobQueueGroup {
                        return $this->cache->get( 'isDeprioritized', $type );
                }
                if ( $type === 'refreshLinks2' ) {
-                       // Don't keep converting refreshLinks2 => refreshLinks jobs if the
+                       // Don't keep converting refreshLinksPartition => refreshLinks jobs if the
                        // later jobs have not been done yet. This helps throttle queue spam.
-                       $deprioritized = !$this->get( 'refreshLinks' )->isEmpty();
+                       // @TODO: this is mostly a WMF-specific hack and should be removed when
+                       // refreshLinks2 jobs are drained.
+                       $deprioritized = !$this->get( 'refreshLinks' )->getSize() > 10000;
                        $this->cache->set( 'isDeprioritized', $type, $deprioritized );
+
                        return $deprioritized;
                }
+
                return false;
        }
 
@@ -351,7 +363,7 @@ class JobQueueGroup {
         * the defined run period. Concurrent calls to this function will cause tasks
         * to be attempted twice, so they may need their own methods of mutual exclusion.
         *
-        * @return integer Number of tasks run
+        * @return int Number of tasks run
         */
        public function executeReadyPeriodicTasks() {
                global $wgMemc;
@@ -368,8 +380,8 @@ class JobQueueGroup {
                                if ( $definition['period'] <= 0 ) {
                                        continue; // disabled
                                } elseif ( !isset( $lastRuns[$type][$task] )
-                                       || $lastRuns[$type][$task] < ( time() - $definition['period'] ) )
-                               {
+                                       || $lastRuns[$type][$task] < ( time() - $definition['period'] )
+                               {
                                        try {
                                                if ( call_user_func( $definition['callback'] ) !== null ) {
                                                        $tasksRun[$type][$task] = time();
@@ -382,13 +394,13 @@ class JobQueueGroup {
                        }
                }
 
-               $wgMemc->merge( $key, function( $cache, $key, $lastRuns ) use ( $tasksRun ) {
+               $wgMemc->merge( $key, function ( $cache, $key, $lastRuns ) use ( $tasksRun ) {
                        if ( is_array( $lastRuns ) ) {
                                foreach ( $tasksRun as $type => $tasks ) {
                                        foreach ( $tasks as $task => $timestamp ) {
                                                if ( !isset( $lastRuns[$type][$task] )
-                                                       || $timestamp > $lastRuns[$type][$task] )
-                                               {
+                                                       || $timestamp > $lastRuns[$type][$task]
+                                               {
                                                        $lastRuns[$type][$task] = $timestamp;
                                                }
                                        }
@@ -396,6 +408,7 @@ class JobQueueGroup {
                        } else {
                                $lastRuns = $tasksRun;
                        }
+
                        return $lastRuns;
                } );
 
@@ -420,6 +433,7 @@ class JobQueueGroup {
                        } else {
                                $value = $wgConf->getConfig( $this->wiki, $name );
                                $wgMemc->set( $key, array( 'v' => $value ), 86400 + mt_rand( 0, 86400 ) );
+
                                return $value;
                        }
                }
index 67bb5a4..9d2a673 100644 (file)
@@ -60,12 +60,16 @@ class JobQueueRedis extends JobQueue {
        /** @var RedisConnectionPool */
        protected $redisPool;
 
-       protected $server; // string; server address
-       protected $compression; // string; compression method to use
+       /** @var string Server address */
+       protected $server;
+
+       /** @var string Compression method to use */
+       protected $compression;
 
        const MAX_AGE_PRUNE = 604800; // integer; seconds a job can live once claimed (7 days)
 
-       protected $key; // string; key to prefix the queue keys with (used for testing)
+       /** @var string Key to prefix the queue keys with (used for testing) */
+       protected $key;
 
        /**
         * @params include:
@@ -108,7 +112,7 @@ class JobQueueRedis extends JobQueue {
 
        /**
         * @see JobQueue::doGetSize()
-        * @return integer
+        * @return int
         * @throws MWException
         */
        protected function doGetSize() {
@@ -122,8 +126,8 @@ class JobQueueRedis extends JobQueue {
 
        /**
         * @see JobQueue::doGetAcquiredCount()
-        * @return integer
-        * @throws MWException
+        * @return int
+        * @throws JobQueueError
         */
        protected function doGetAcquiredCount() {
                if ( $this->claimTTL <= 0 ) {
@@ -134,6 +138,7 @@ class JobQueueRedis extends JobQueue {
                        $conn->multi( Redis::PIPELINE );
                        $conn->zSize( $this->getQueueKey( 'z-claimed' ) );
                        $conn->zSize( $this->getQueueKey( 'z-abandoned' ) );
+
                        return array_sum( $conn->exec() );
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
@@ -142,8 +147,8 @@ class JobQueueRedis extends JobQueue {
 
        /**
         * @see JobQueue::doGetDelayedCount()
-        * @return integer
-        * @throws MWException
+        * @return int
+        * @throws JobQueueError
         */
        protected function doGetDelayedCount() {
                if ( !$this->checkDelay ) {
@@ -159,8 +164,8 @@ class JobQueueRedis extends JobQueue {
 
        /**
         * @see JobQueue::doGetAbandonedCount()
-        * @return integer
-        * @throws MWException
+        * @return int
+        * @throws JobQueueError
         */
        protected function doGetAbandonedCount() {
                if ( $this->claimTTL <= 0 ) {
@@ -179,7 +184,7 @@ class JobQueueRedis extends JobQueue {
         * @param array $jobs
         * @param $flags
         * @return bool
-        * @throws MWException
+        * @throws JobQueueError
         */
        protected function doBatchPush( array $jobs, $flags ) {
                // Convert the jobs into field maps (de-duplicated against each other)
@@ -217,6 +222,7 @@ class JobQueueRedis extends JobQueue {
                        }
                        if ( $failed > 0 ) {
                                wfDebugLog( 'JobQueueRedis', "Could not insert {$failed} {$this->type} job(s)." );
+
                                return false;
                        }
                        JobQueue::incrStats( 'job-insert', $this->type, count( $items ) );
@@ -232,7 +238,7 @@ class JobQueueRedis extends JobQueue {
        /**
         * @param RedisConnRef $conn
         * @param array $items List of results from JobQueueRedis::getNewJobFields()
-        * @return integer Number of jobs inserted (duplicates are ignored)
+        * @return int Number of jobs inserted (duplicates are ignored)
         * @throws RedisException
         */
        protected function pushBlobs( RedisConnRef $conn, array $items ) {
@@ -245,23 +251,24 @@ class JobQueueRedis extends JobQueue {
                }
                static $script =
 <<<LUA
+               local kUnclaimed, kSha1ById, kIdBySha1, kDelayed, kData = unpack(KEYS)
                if #ARGV % 4 ~= 0 then return redis.error_reply('Unmatched arguments') end
                local pushed = 0
                for i = 1,#ARGV,4 do
                        local id,sha1,rtimestamp,blob = ARGV[i],ARGV[i+1],ARGV[i+2],ARGV[i+3]
-                       if sha1 == '' or redis.call('hExists',KEYS[3],sha1) == 0 then
+                       if sha1 == '' or redis.call('hExists',kIdBySha1,sha1) == 0 then
                                if 1*rtimestamp > 0 then
                                        -- Insert into delayed queue (release time as score)
-                                       redis.call('zAdd',KEYS[4],rtimestamp,id)
+                                       redis.call('zAdd',kDelayed,rtimestamp,id)
                                else
                                        -- Insert into unclaimed queue
-                                       redis.call('lPush',KEYS[1],id)
+                                       redis.call('lPush',kUnclaimed,id)
                                end
                                if sha1 ~= '' then
-                                       redis.call('hSet',KEYS[2],id,sha1)
-                                       redis.call('hSet',KEYS[3],sha1,id)
+                                       redis.call('hSet',kSha1ById,id,sha1)
+                                       redis.call('hSet',kIdBySha1,sha1,id)
                                end
-                               redis.call('hSet',KEYS[5],id,blob)
+                               redis.call('hSet',kData,id,blob)
                                pushed = pushed + 1
                        end
                end
@@ -285,7 +292,7 @@ LUA;
        /**
         * @see JobQueue::doPop()
         * @return Job|bool
-        * @throws MWException
+        * @throws JobQueueError
         */
        protected function doPop() {
                $job = false;
@@ -337,16 +344,17 @@ LUA;
        protected function popAndDeleteBlob( RedisConnRef $conn ) {
                static $script =
 <<<LUA
+               local kUnclaimed, kSha1ById, kIdBySha1, kData = unpack(KEYS)
                -- Pop an item off the queue
-               local id = redis.call('rpop',KEYS[1])
+               local id = redis.call('rpop',kUnclaimed)
                if not id then return false end
                -- Get the job data and remove it
-               local item = redis.call('hGet',KEYS[4],id)
-               redis.call('hDel',KEYS[4],id)
+               local item = redis.call('hGet',kData,id)
+               redis.call('hDel',kData,id)
                -- Allow new duplicates of this job
-               local sha1 = redis.call('hGet',KEYS[2],id)
-               if sha1 then redis.call('hDel',KEYS[3],sha1) end
-               redis.call('hDel',KEYS[2],id)
+               local sha1 = redis.call('hGet',kSha1ById,id)
+               if sha1 then redis.call('hDel',kIdBySha1,sha1) end
+               redis.call('hDel',kSha1ById,id)
                -- Return the job data
                return item
 LUA;
@@ -369,17 +377,18 @@ LUA;
        protected function popAndAcquireBlob( RedisConnRef $conn ) {
                static $script =
 <<<LUA
+               local kUnclaimed, kSha1ById, kIdBySha1, kClaimed, kAttempts, kData = unpack(KEYS)
                -- Pop an item off the queue
-               local id = redis.call('rPop',KEYS[1])
+               local id = redis.call('rPop',kUnclaimed)
                if not id then return false end
                -- Allow new duplicates of this job
-               local sha1 = redis.call('hGet',KEYS[2],id)
-               if sha1 then redis.call('hDel',KEYS[3],sha1) end
-               redis.call('hDel',KEYS[2],id)
+               local sha1 = redis.call('hGet',kSha1ById,id)
+               if sha1 then redis.call('hDel',kIdBySha1,sha1) end
+               redis.call('hDel',kSha1ById,id)
                -- Mark the jobs as claimed and return it
-               redis.call('zAdd',KEYS[4],ARGV[1],id)
-               redis.call('hIncrBy',KEYS[5],id,1)
-               return redis.call('hGet',KEYS[6],id)
+               redis.call('zAdd',kClaimed,ARGV[1],id)
+               redis.call('hIncrBy',kAttempts,id,1)
+               return redis.call('hGet',kData,id)
 LUA;
                return $conn->luaEval( $script,
                        array(
@@ -399,7 +408,7 @@ LUA;
         * @see JobQueue::doAck()
         * @param Job $job
         * @return Job|bool
-        * @throws MWException
+        * @throws MWException|JobQueueError
         */
        protected function doAck( Job $job ) {
                if ( !isset( $job->metadata['uuid'] ) ) {
@@ -410,11 +419,12 @@ LUA;
                        try {
                                static $script =
 <<<LUA
+                               local kClaimed, kAttempts, kData = unpack(KEYS)
                                -- Unmark the job as claimed
-                               redis.call('zRem',KEYS[1],ARGV[1])
-                               redis.call('hDel',KEYS[2],ARGV[1])
+                               redis.call('zRem',kClaimed,ARGV[1])
+                               redis.call('hDel',kAttempts,ARGV[1])
                                -- Delete the job data itself
-                               return redis.call('hDel',KEYS[3],ARGV[1])
+                               return redis.call('hDel',kData,ARGV[1])
 LUA;
                                $res = $conn->luaEval( $script,
                                        array(
@@ -428,12 +438,14 @@ LUA;
 
                                if ( !$res ) {
                                        wfDebugLog( 'JobQueueRedis', "Could not acknowledge {$this->type} job." );
+
                                        return false;
                                }
                        } catch ( RedisException $e ) {
                                $this->throwRedisException( $this->server, $conn, $e );
                        }
                }
+
                return true;
        }
 
@@ -441,7 +453,7 @@ LUA;
         * @see JobQueue::doDeduplicateRootJob()
         * @param Job $job
         * @return bool
-        * @throws MWException
+        * @throws MWException|JobQueueError
         */
        protected function doDeduplicateRootJob( Job $job ) {
                if ( !$job->hasRootJobParams() ) {
@@ -457,6 +469,7 @@ LUA;
                        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 $conn->set( $key, $params['rootJobTimestamp'], self::ROOTJOB_TTL ); // 2 weeks
                } catch ( RedisException $e ) {
@@ -468,6 +481,7 @@ LUA;
         * @see JobQueue::doIsRootJobOldDuplicate()
         * @param Job $job
         * @return bool
+        * @throws JobQueueError
         */
        protected function doIsRootJobOldDuplicate( Job $job ) {
                if ( !$job->hasRootJobParams() ) {
@@ -490,6 +504,7 @@ LUA;
        /**
         * @see JobQueue::doDelete()
         * @return bool
+        * @throws JobQueueError
         */
        protected function doDelete() {
                static $props = array( 'l-unclaimed', 'z-claimed', 'z-abandoned',
@@ -501,6 +516,7 @@ LUA;
                        foreach ( $props as $prop ) {
                                $keys[] = $this->getQueueKey( $prop );
                        }
+
                        return ( $conn->delete( $keys ) !== false );
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
@@ -515,12 +531,15 @@ LUA;
                $conn = $this->getConnection();
                try {
                        $that = $this;
+
                        return new MappedIterator(
                                $conn->lRange( $this->getQueueKey( 'l-unclaimed' ), 0, -1 ),
-                               function( $uid ) use ( $that, $conn ) {
+                               function ( $uid ) use ( $that, $conn ) {
                                        return $that->getJobFromUidInternal( $uid, $conn );
                                },
-                               array( 'accept' => function ( $job ) { return is_object( $job ); } )
+                               array( 'accept' => function ( $job ) {
+                                       return is_object( $job );
+                               } )
                        );
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
@@ -535,12 +554,15 @@ LUA;
                $conn = $this->getConnection();
                try {
                        $that = $this;
+
                        return new MappedIterator( // delayed jobs
                                $conn->zRange( $this->getQueueKey( 'z-delayed' ), 0, -1 ),
-                               function( $uid ) use ( $that, $conn ) {
+                               function ( $uid ) use ( $that, $conn ) {
                                        return $that->getJobFromUidInternal( $uid, $conn );
                                },
-                               array( 'accept' => function ( $job ) { return is_object( $job ); } )
+                               array( 'accept' => function ( $job ) {
+                                       return is_object( $job );
+                               } )
                        );
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
@@ -573,6 +595,7 @@ LUA;
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
                }
+
                return $sizes;
        }
 
@@ -582,7 +605,7 @@ LUA;
         * @param $uid string
         * @param $conn RedisConnRef
         * @return Job|bool Returns false if the job does not exist
-        * @throws MWException
+        * @throws MWException|JobQueueError
         */
        public function getJobFromUidInternal( $uid, RedisConnRef $conn ) {
                try {
@@ -597,6 +620,7 @@ LUA;
                        $title = Title::makeTitle( $item['namespace'], $item['title'] );
                        $job = Job::factory( $item['type'], $title, $item['params'] );
                        $job->metadata['uuid'] = $item['uuid'];
+
                        return $job;
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
@@ -606,8 +630,8 @@ LUA;
        /**
         * Release any ready delayed jobs into the queue
         *
-        * @return integer Number of jobs released
-        * @throws MWException
+        * @return int Number of jobs released
+        * @throws JobQueueError
         */
        public function releaseReadyDelayedJobs() {
                $count = 0;
@@ -616,12 +640,13 @@ LUA;
                try {
                        static $script =
 <<<LUA
+                       local kDelayed, kUnclaimed = unpack(KEYS)
                        -- Get the list of ready delayed jobs, sorted by readiness
-                       local ids = redis.call('zRangeByScore',KEYS[1],0,ARGV[1])
+                       local ids = redis.call('zRangeByScore',kDelayed,0,ARGV[1])
                        -- Migrate the jobs from the "delayed" set to the "unclaimed" list
                        for k,id in ipairs(ids) do
-                               redis.call('lPush',KEYS[2],id)
-                               redis.call('zRem',KEYS[1],id)
+                               redis.call('lPush',kUnclaimed,id)
+                               redis.call('zRem',kDelayed,id)
                        end
                        return #ids
 LUA;
@@ -643,8 +668,8 @@ LUA;
        /**
         * Recycle or destroy any jobs that have been claimed for too long
         *
-        * @return integer Number of jobs recycled/deleted
-        * @throws MWException
+        * @return int Number of jobs recycled/deleted
+        * @throws MWException|JobQueueError
         */
        public function recycleAndDeleteStaleJobs() {
                if ( $this->claimTTL <= 0 ) { // sanity
@@ -660,33 +685,34 @@ LUA;
                        $now = time();
                        static $script =
 <<<LUA
+                       local kClaimed, kAttempts, kUnclaimed, kData, kAbandoned = unpack(KEYS)
                        local released,abandoned,pruned = 0,0,0
                        -- Get all non-dead jobs that have an expired claim on them.
                        -- The score for each item is the last claim timestamp (UNIX).
-                       local staleClaims = redis.call('zRangeByScore',KEYS[1],0,ARGV[1])
+                       local staleClaims = redis.call('zRangeByScore',kClaimed,0,ARGV[1])
                        for k,id in ipairs(staleClaims) do
-                               local timestamp = redis.call('zScore',KEYS[1],id)
-                               local attempts = redis.call('hGet',KEYS[2],id)
+                               local timestamp = redis.call('zScore',kClaimed,id)
+                               local attempts = redis.call('hGet',kAttempts,id)
                                if attempts < ARGV[3] then
                                        -- Claim expired and retries left: re-enqueue the job
-                                       redis.call('lPush',KEYS[3],id)
-                                       redis.call('hIncrBy',KEYS[2],id,1)
+                                       redis.call('lPush',kUnclaimed,id)
+                                       redis.call('hIncrBy',kAttempts,id,1)
                                        released = released + 1
                                else
                                        -- Claim expired and no retries left: mark the job as dead
-                                       redis.call('zAdd',KEYS[5],timestamp,id)
+                                       redis.call('zAdd',kAbandoned,timestamp,id)
                                        abandoned = abandoned + 1
                                end
-                               redis.call('zRem',KEYS[1],id)
+                               redis.call('zRem',kClaimed,id)
                        end
                        -- Get all of the dead jobs that have been marked as dead for too long.
                        -- The score for each item is the last claim timestamp (UNIX).
-                       local deadClaims = redis.call('zRangeByScore',KEYS[5],0,ARGV[2])
+                       local deadClaims = redis.call('zRangeByScore',kAbandoned,0,ARGV[2])
                        for k,id in ipairs(deadClaims) do
                                -- Stale and out of retries: remove any traces of the job
-                               redis.call('zRem',KEYS[5],id)
-                               redis.call('hDel',KEYS[2],id)
-                               redis.call('hDel',KEYS[4],id)
+                               redis.call('zRem',kAbandoned,id)
+                               redis.call('hDel',kAttempts,id)
+                               redis.call('hDel',kData,id)
                                pruned = pruned + 1
                        end
                        return {released,abandoned,pruned}
@@ -718,7 +744,7 @@ LUA;
        }
 
        /**
-        * @return Array
+        * @return array
         */
        protected function doGetPeriodicTasks() {
                $tasks = array();
@@ -734,28 +760,29 @@ LUA;
                                'period' => 300 // 5 minutes
                        );
                }
+
                return $tasks;
        }
 
        /**
-        * @param $job Job
+        * @param Job $job
         * @return array
         */
        protected function getNewJobFields( Job $job ) {
                return array(
                        // Fields that describe the nature of the job
-                       'type'       => $job->getType(),
-                       'namespace'  => $job->getTitle()->getNamespace(),
-                       'title'      => $job->getTitle()->getDBkey(),
-                       'params'     => $job->getParams(),
+                       'type' => $job->getType(),
+                       'namespace' => $job->getTitle()->getNamespace(),
+                       'title' => $job->getTitle()->getDBkey(),
+                       'params' => $job->getParams(),
                        // Some jobs cannot run until a "release timestamp"
-                       'rtimestamp' => $job->getReleaseTimestamp() ?: 0,
+                       'rtimestamp' => $job->getReleaseTimestamp() ? : 0,
                        // Additional job metadata
-                       'uuid'       => UIDGenerator::newRawUUIDv4( UIDGenerator::QUICK_RAND ),
-                       'sha1'       => $job->ignoreDuplicates()
-                               ? wfBaseConvert( sha1( serialize( $job->getDeduplicationInfo() ) ), 16, 36, 31 )
-                               : '',
-                       'timestamp'  => time() // UNIX timestamp
+                       'uuid' => UIDGenerator::newRawUUIDv4( UIDGenerator::QUICK_RAND ),
+                       'sha1' => $job->ignoreDuplicates()
+                                       ? wfBaseConvert( sha1( serialize( $job->getDeduplicationInfo() ) ), 16, 36, 31 )
+                                       : '',
+                       'timestamp' => time() // UNIX timestamp
                );
        }
 
@@ -768,8 +795,10 @@ LUA;
                if ( $title ) {
                        $job = Job::factory( $fields['type'], $title, $fields['params'] );
                        $job->metadata['uuid'] = $fields['uuid'];
+
                        return $job;
                }
+
                return false;
        }
 
@@ -780,10 +809,12 @@ LUA;
        protected function serialize( array $fields ) {
                $blob = serialize( $fields );
                if ( $this->compression === 'gzip'
-                       && strlen( $blob ) >= 1024 && function_exists( 'gzdeflate' ) )
-               {
+                       && strlen( $blob ) >= 1024
+                       && function_exists( 'gzdeflate' )
+               ) {
                        $object = (object)array( 'blob' => gzdeflate( $blob ), 'enc' => 'gzip' );
                        $blobz = serialize( $object );
+
                        return ( strlen( $blobz ) < strlen( $blob ) ) ? $blobz : $blob;
                } else {
                        return $blob;
@@ -803,20 +834,22 @@ LUA;
                                $fields = false;
                        }
                }
+
                return is_array( $fields ) ? $fields : false;
        }
 
        /**
         * Get a connection to the server that handles all sub-queues for this queue
         *
-        * @return Array (server name, Redis instance)
-        * @throws MWException
+        * @return RedisConnRef
+        * @throws JobQueueConnectionError
         */
        protected function getConnection() {
                $conn = $this->redisPool->getConnection( $this->server );
                if ( !$conn ) {
                        throw new JobQueueConnectionError( "Unable to connect to redis server." );
                }
+
                return $conn;
        }
 
@@ -824,7 +857,7 @@ LUA;
         * @param $server string
         * @param $conn RedisConnRef
         * @param $e RedisException
-        * @throws MWException
+        * @throws JobQueueError
         */
        protected function throwRedisException( $server, RedisConnRef $conn, $e ) {
                $this->redisPool->handleException( $server, $conn, $e );
index a8186ab..8600eed 100644 (file)
@@ -34,9 +34,11 @@ abstract class JobQueueAggregator {
        /**
         * @param array $params
         */
-       protected function __construct( array $params ) {}
+       protected function __construct( array $params ) {
+       }
 
        /**
+        * @throws MWException
         * @return JobQueueAggregator
         */
        final public static function singleton() {
@@ -74,6 +76,7 @@ abstract class JobQueueAggregator {
                wfProfileIn( __METHOD__ );
                $ok = $this->doNotifyQueueEmpty( $wiki, $type );
                wfProfileOut( __METHOD__ );
+
                return $ok;
        }
 
@@ -93,6 +96,7 @@ abstract class JobQueueAggregator {
                wfProfileIn( __METHOD__ );
                $ok = $this->doNotifyQueueNonEmpty( $wiki, $type );
                wfProfileOut( __METHOD__ );
+
                return $ok;
        }
 
@@ -104,12 +108,13 @@ abstract class JobQueueAggregator {
        /**
         * Get the list of all of the queues with jobs
         *
-        * @return Array (job type => (list of wiki IDs))
+        * @return array (job type => (list of wiki IDs))
         */
        final public function getAllReadyWikiQueues() {
                wfProfileIn( __METHOD__ );
                $res = $this->doGetAllReadyWikiQueues();
                wfProfileOut( __METHOD__ );
+
                return $res;
        }
 
@@ -127,6 +132,7 @@ abstract class JobQueueAggregator {
                wfProfileIn( __METHOD__ );
                $res = $this->doPurge();
                wfProfileOut( __METHOD__ );
+
                return $res;
        }
 
@@ -139,7 +145,7 @@ abstract class JobQueueAggregator {
         * Get all databases that have a pending job.
         * This poll all the queues and is this expensive.
         *
-        * @return Array (job type => (list of wiki IDs))
+        * @return array (job type => (list of wiki IDs))
         */
        protected function findPendingWikiQueues() {
                global $wgLocalDatabases;
index 9434da0..d733a42 100644 (file)
@@ -65,6 +65,7 @@ class JobQueueAggregatorMemc extends JobQueueAggregator {
                        }
                        $this->cache->delete( "$key:lock" ); // unlock
                }
+
                return true;
        }
 
@@ -103,6 +104,7 @@ class JobQueueAggregatorMemc extends JobQueueAggregator {
                                $this->cache->delete( "$key:rebuild" ); // unlock
                        }
                }
+
                return is_array( $pendingDbInfo )
                        ? $pendingDbInfo['pendingDBs']
                        : array(); // cache is both empty and locked
index f1922a3..057a587 100644 (file)
@@ -32,7 +32,7 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
        /** @var RedisConnectionPool */
        protected $redisPool;
 
-       /** @var Array List of Redis server addresses */
+       /** @var array List of Redis server addresses */
        protected $servers;
 
        /**
@@ -60,9 +60,11 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                }
                try {
                        $conn->hDel( $this->getReadyQueueKey(), $this->encQueueName( $type, $wiki ) );
+
                        return true;
                } catch ( RedisException $e ) {
                        $this->handleException( $conn, $e );
+
                        return false;
                }
        }
@@ -74,9 +76,11 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                }
                try {
                        $conn->hSet( $this->getReadyQueueKey(), $this->encQueueName( $type, $wiki ), time() );
+
                        return true;
                } catch ( RedisException $e ) {
                        $this->handleException( $conn, $e );
+
                        return false;
                }
        }
@@ -124,6 +128,7 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                        return $pendingDBs;
                } catch ( RedisException $e ) {
                        $this->handleException( $conn, $e );
+
                        return array();
                }
        }
@@ -137,8 +142,10 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                        $conn->delete( $this->getReadyQueueKey() );
                } catch ( RedisException $e ) {
                        $this->handleException( $conn, $e );
+
                        return false;
                }
+
                return true;
        }
 
@@ -156,6 +163,7 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                                break;
                        }
                }
+
                return $conn;
        }
 
@@ -190,6 +198,7 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
         */
        private function dencQueueName( $name ) {
                list( $type, $wiki ) = explode( '/', $name, 2 );
+
                return array( rawurldecode( $type ), rawurldecode( $wiki ) );
        }
 }
index 6237e56..eff16b9 100644 (file)
@@ -39,6 +39,7 @@ class AssembleUploadChunksJob extends Job {
                        $user = $context->getUser();
                        if ( !$user->isLoggedIn() ) {
                                $this->setLastError( "Could not load the author user from session." );
+
                                return false;
                        }
 
@@ -47,7 +48,9 @@ class AssembleUploadChunksJob extends Job {
                                // with the session correctly. Note that being able to load
                                // the user does not necessarily mean the session was loaded.
                                // Most likely cause by suhosin.session.encrypt = On.
-                               $this->setLastError( "Error associating with user session. Try setting suhosin.session.encrypt = Off" );
+                               $this->setLastError( "Error associating with user session. " .
+                                       "Try setting suhosin.session.encrypt = Off" );
+
                                return false;
                        }
 
@@ -71,6 +74,7 @@ class AssembleUploadChunksJob extends Job {
                                        array( 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status )
                                );
                                $this->setLastError( $status->getWikiText() );
+
                                return false;
                        }
 
@@ -108,8 +112,10 @@ class AssembleUploadChunksJob extends Job {
                                )
                        );
                        $this->setLastError( get_class( $e ) . ": " . $e->getText() );
+
                        return false;
                }
+
                return true;
        }
 
@@ -118,6 +124,7 @@ class AssembleUploadChunksJob extends Job {
                if ( is_array( $info['params'] ) ) {
                        $info['params'] = array( 'filekey' => $info['params']['filekey'] );
                }
+
                return $info;
        }
 
index 33e749b..f5f0d63 100644 (file)
  * @ingroup JobQueue
  */
 class DoubleRedirectJob extends Job {
-       var $reason, $redirTitle;
+       /** @var string Reason for the change, 'maintenance' or 'move'. Suffix fo
+        *    message key 'double-redirect-fixed-'.
+        */
+       private $reason;
 
-       /**
-        * @var User
+       /** @var Title The title which has changed, redirects pointing to this
+        *    title are fixed
         */
-       static $user;
+       private $redirTitle;
+
+       /** @var User */
+       private static $user;
 
        /**
         * Insert jobs into the job queue to fix redirects to the given title
-        * @param string $reason the reason for the fix, see message "double-redirect-fixed-<reason>"
-        * @param $redirTitle Title: the title which has changed, redirects pointing to this title are fixed
+        * @param string $reason the reason for the fix, see message
+        *   "double-redirect-fixed-<reason>"
+        * @param $redirTitle Title: the title which has changed, redirects
+        *   pointing to this title are fixed
         * @param bool $destTitle Not used
         */
        public static function fixRedirects( $reason, $redirTitle, $destTitle = false ) {
@@ -73,6 +81,11 @@ class DoubleRedirectJob extends Job {
                JobQueueGroup::singleton()->push( $jobs );
        }
 
+       /**
+        * @param Title $title
+        * @param array|bool $params
+        * @param int $id
+        */
        function __construct( $title, $params = false, $id = 0 ) {
                parent::__construct( 'fixDoubleRedirect', $title, $params, $id );
                $this->reason = $params['reason'];
@@ -85,18 +98,21 @@ class DoubleRedirectJob extends Job {
        function run() {
                if ( !$this->redirTitle ) {
                        $this->setLastError( 'Invalid title' );
+
                        return false;
                }
 
                $targetRev = Revision::newFromTitle( $this->title, false, Revision::READ_LATEST );
                if ( !$targetRev ) {
                        wfDebug( __METHOD__ . ": target redirect already deleted, ignoring\n" );
+
                        return true;
                }
                $content = $targetRev->getContent();
                $currentDest = $content ? $content->getRedirectTarget() : null;
                if ( !$currentDest || !$currentDest->equals( $this->redirTitle ) ) {
                        wfDebug( __METHOD__ . ": Redirect has changed since the job was queued\n" );
+
                        return true;
                }
 
@@ -104,13 +120,16 @@ class DoubleRedirectJob extends Job {
                $mw = MagicWord::get( 'staticredirect' );
                if ( $content->matchMagicWord( $mw ) ) {
                        wfDebug( __METHOD__ . ": skipping: suppressed with __STATICREDIRECT__\n" );
+
                        return true;
                }
 
                // Find the current final destination
                $newTitle = self::getFinalDestination( $this->redirTitle );
                if ( !$newTitle ) {
-                       wfDebug( __METHOD__ . ": skipping: single redirect, circular redirect or invalid redirect destination\n" );
+                       wfDebug( __METHOD__ .
+                               ": skipping: single redirect, circular redirect or invalid redirect destination\n" );
+
                        return true;
                }
                if ( $newTitle->equals( $this->redirTitle ) ) {
@@ -128,12 +147,14 @@ class DoubleRedirectJob extends Job {
 
                if ( $newContent->equals( $content ) ) {
                        $this->setLastError( 'Content unchanged???' );
+
                        return false;
                }
 
                $user = $this->getUser();
                if ( !$user ) {
                        $this->setLastError( 'Invalid user' );
+
                        return false;
                }
 
@@ -171,6 +192,7 @@ class DoubleRedirectJob extends Job {
                        $titleText = $title->getPrefixedDBkey();
                        if ( isset( $seenTitles[$titleText] ) ) {
                                wfDebug( __METHOD__, "Circular redirect detected, aborting\n" );
+
                                return false;
                        }
                        $seenTitles[$titleText] = true;
@@ -195,9 +217,15 @@ class DoubleRedirectJob extends Job {
                                # No redirect from here, chain terminates
                                break;
                        } else {
-                               $dest = $title = Title::makeTitle( $row->rd_namespace, $row->rd_title, '', $row->rd_interwiki );
+                               $dest = $title = Title::makeTitle(
+                                       $row->rd_namespace,
+                                       $row->rd_title,
+                                       '',
+                                       $row->rd_interwiki
+                               );
                        }
                }
+
                return $dest;
        }
 
@@ -210,12 +238,14 @@ class DoubleRedirectJob extends Job {
         */
        function getUser() {
                if ( !self::$user ) {
-                       self::$user = User::newFromName( wfMessage( 'double-redirect-fixer' )->inContentLanguage()->text() );
+                       $username = wfMessage( 'double-redirect-fixer' )->inContentLanguage()->text();
+                       self::$user = User::newFromName( $username );
                        # User::newFromName() can return false on a badly configured wiki.
                        if ( self::$user && !self::$user->isLoggedIn() ) {
                                self::$user->addToDatabase();
                        }
                }
+
                return self::$user;
        }
 }
index be1bfe5..7e5bd3c 100644 (file)
@@ -30,7 +30,7 @@ final class DuplicateJob extends Job {
        /**
         * Callers should use DuplicateJob::newFromJob() instead
         *
-        * @param $title Title
+        * @param Title $title
         * @param array $params job parameters
         * @param $id Integer: job id
         */
@@ -50,6 +50,7 @@ final class DuplicateJob extends Job {
                $djob->params = is_array( $djob->params ) ? $djob->params : array();
                $djob->params = array( 'isDuplicate' => true ) + $djob->params;
                $djob->metadata = $job->metadata;
+
                return $djob;
        }
 
index 9fbf312..f24cebb 100644 (file)
@@ -43,5 +43,4 @@ class EmaillingJob extends Job {
 
                return $status->isOK();
        }
-
 }
index bbe988d..97a7af6 100644 (file)
@@ -27,7 +27,6 @@
  * @ingroup JobQueue
  */
 class EnotifNotifyJob extends Job {
-
        function __construct( $title, $params, $id = 0 ) {
                parent::__construct( 'enotifNotify', $title, $params, $id );
        }
@@ -39,7 +38,7 @@ class EnotifNotifyJob extends Job {
                        $editor = User::newFromId( $this->params['editorID'] );
                // B/C, only the name might be given.
                } else {
-                       # FIXME: newFromName could return false on a badly configured wiki.
+                       # @todo FIXME: newFromName could return false on a badly configured wiki.
                        $editor = User::newFromName( $this->params['editor'], false );
                }
                $enotif->actuallyNotifyOnPageChange(
@@ -52,7 +51,7 @@ class EnotifNotifyJob extends Job {
                        $this->params['watchers'],
                        $this->params['pageStatus']
                );
+
                return true;
        }
-
 }
index be12937..8885e25 100644 (file)
@@ -47,7 +47,11 @@ class HTMLCacheUpdateJob extends Job {
        /** @var BacklinkCache */
        protected $blCache;
 
-       protected $rowsPerJob, $rowsPerQuery;
+       /** @var int Number of rows to update per job, see $wgUpdateRowsPerJob */
+       protected $rowsPerJob;
+
+       /** @var int Number of rows to update per query, see $wgUpdateRowsPerQuery */
+       protected $rowsPerQuery;
 
        /**
         * Construct a job
@@ -86,6 +90,7 @@ class HTMLCacheUpdateJob extends Job {
                $numRows = $this->blCache->getNumLinks( $this->params['table'], $max );
                if ( $wgMaxBacklinksInvalidate !== false && $numRows > $wgMaxBacklinksInvalidate ) {
                        wfDebug( "Skipped HTML cache invalidation of {$this->title->getPrefixedText()}." );
+
                        return true;
                }
 
@@ -123,6 +128,7 @@ class HTMLCacheUpdateJob extends Job {
                        # period of time, say by updating a heavily-used template.
                        $this->insertJobsFromTitles( $titleArray );
                }
+
                return true;
        }
 
@@ -131,7 +137,7 @@ class HTMLCacheUpdateJob extends Job {
         * using a pre-calculated title array which gives the links in that range.
         * Queue the resulting jobs.
         *
-        * @param array $titleArray
+        * @param array|TitleArrayFromResult $titleArray
         * @param array $rootJobParams
         */
        protected function insertJobsFromTitles( $titleArray, $rootJobParams = array() ) {
@@ -143,6 +149,7 @@ class HTMLCacheUpdateJob extends Job {
                $jobs = array();
                $start = $this->params['start']; # start of the current job
                $numTitles = 0;
+               /** @var Title $title */
                foreach ( $titleArray as $title ) {
                        $id = $title->getArticleID();
                        # $numTitles is now the number of titles in the current job not
@@ -211,7 +218,7 @@ class HTMLCacheUpdateJob extends Job {
 
        /**
         * Invalidate an array (or iterator) of Title objects, right now
-        * @param array $titleArray
+        * @param array|TitleArrayFromResult $titleArray
         */
        protected function invalidateTitles( $titleArray ) {
                global $wgUseFileCache, $wgUseSquid;
index b6164a5..f62419c 100644 (file)
@@ -46,9 +46,9 @@
  */
 class NullJob extends Job {
        /**
-        * @param $title Title (can be anything)
+        * @param Title $title
         * @param array $params job parameters (lives, usleep)
-        * @param $id Integer: job id
+        * @param int $id Job id
         */
        function __construct( $title, $params, $id = 0 ) {
                parent::__construct( 'null', $title, $params, $id );
@@ -71,6 +71,7 @@ class NullJob extends Job {
                        $job = new self( $this->title, $params );
                        JobQueueGroup::singleton()->push( $job );
                }
+
                return true;
        }
 }
index 5a24f93..88ac9cf 100644 (file)
@@ -39,6 +39,7 @@ class PublishStashedFileJob extends Job {
                        $user = $context->getUser();
                        if ( !$user->isLoggedIn() ) {
                                $this->setLastError( "Could not load the author user from session." );
+
                                return false;
                        }
 
@@ -47,11 +48,12 @@ class PublishStashedFileJob extends Job {
                                // with the session correctly. Note that being able to load
                                // the user does not necessarily mean the session was loaded.
                                // Most likely cause by suhosin.session.encrypt = On.
-                               $this->setLastError( "Error associating with user session. Try setting suhosin.session.encrypt = Off" );
+                               $this->setLastError( "Error associating with user session. " .
+                                       "Try setting suhosin.session.encrypt = Off" );
+
                                return false;
                        }
 
-
                        UploadBase::setSessionStatus(
                                $this->params['filekey'],
                                array( 'result' => 'Poll', 'stage' => 'publish', 'status' => Status::newGood() )
@@ -74,6 +76,7 @@ class PublishStashedFileJob extends Job {
                                        array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
                                );
                                $this->setLastError( "Could not verify upload." );
+
                                return false;
                        }
 
@@ -90,6 +93,7 @@ class PublishStashedFileJob extends Job {
                                        array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
                                );
                                $this->setLastError( $status->getWikiText() );
+
                                return false;
                        }
 
@@ -121,8 +125,10 @@ class PublishStashedFileJob extends Job {
                                )
                        );
                        $this->setLastError( get_class( $e ) . ": " . $e->getText() );
+
                        return false;
                }
+
                return true;
        }
 
@@ -131,6 +137,7 @@ class PublishStashedFileJob extends Job {
                if ( is_array( $info['params'] ) ) {
                        $info['params'] = array( 'filekey' => $info['params']['filekey'] );
                }
+
                return $info;
        }
 
index 4fc8bac..e81998d 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Job to update links for a given title.
+ * Job to update link tables for pages
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  */
 
 /**
- * Background job to update links for a given title.
+ * Job to update link tables for pages
+ *
+ * This job comes in a few variants:
+ *   - a) Recursive jobs to update links for backlink pages for a given title
+ *   - b) Jobs to update links for a set of titles (the job title is ignored)
+ *   - c) Jobs to update links for a single title (the job title)
  *
  * @ingroup JobQueue
  */
 class RefreshLinksJob extends Job {
+       const VERSION = 1;
+
        function __construct( $title, $params = '', $id = 0 ) {
                parent::__construct( 'refreshLinks', $title, $params, $id );
-               $this->removeDuplicates = true; // job is expensive
+               $this->params['version'] = self::VERSION;
+               // Base backlink update jobs and per-title update jobs can be de-duplicated.
+               // If template A changes twice before any jobs run, a clean queue will have:
+               //              (A base, A base)
+               // The second job is ignored by the queue on insertion.
+               // Suppose, many pages use template A, and that template itself uses template B.
+               // An edit to both will first create two base jobs. A clean FIFO queue will have:
+               //              (A base, B base)
+               // When these jobs run, the queue will have per-title and remnant partition jobs:
+               //              (titleX,titleY,titleZ,...,A remnant,titleM,titleN,titleO,...,B remnant)
+               // Some these jobs will be the same, and will automatically be ignored by
+               // the queue upon insertion. Some title jobs will run before the duplicate is
+               // inserted, so the work will still be done twice in those cases. More titles
+               // can be de-duplicated as the remnant jobs continue to be broken down. This
+               // works best when $wgUpdateRowsPerJob, and either the pages have few backlinks
+               // and/or the backlink sets for pages A and B are almost identical.
+               $this->removeDuplicates = !isset( $params['range'] )
+                       && ( !isset( $params['pages'] ) || count( $params['pages'] ) == 1 );
        }
 
-       /**
-        * Run a refreshLinks job
-        * @return boolean success
-        */
        function run() {
-               $linkCache = LinkCache::singleton();
-               $linkCache->clear();
+               global $wgUpdateRowsPerJob;
 
                if ( is_null( $this->title ) ) {
-                       $this->error = "refreshLinks: Invalid title";
+                       $this->setLastError( "Invalid page title" );
                        return false;
                }
 
-               # Wait for the DB of the current/next slave DB handle to catch up to the master.
-               # This way, we get the correct page_latest for templates or files that just changed
-               # milliseconds ago, having triggered this job to begin with.
-               if ( isset( $this->params['masterPos'] ) && $this->params['masterPos'] !== false ) {
-                       wfGetLB()->waitFor( $this->params['masterPos'] );
-               }
-
-               $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL );
-               if ( !$revision ) {
-                       $this->error = 'refreshLinks: Article not found "' .
-                               $this->title->getPrefixedDBkey() . '"';
-                       return false; // XXX: what if it was just deleted?
+               // Job to update all (or a range of) backlink pages for a page
+               if ( isset( $this->params['recursive'] ) ) {
+                       // Carry over information for de-duplication
+                       $extraParams = $this->getRootJobParams();
+                       // Avoid slave lag when fetching templates.
+                       // When the outermost job is run, we know that the caller that enqueued it must have
+                       // committed the relevant changes to the DB by now. At that point, record the master
+                       // position and pass it along as the job recursively breaks into smaller range jobs.
+                       // Hopefully, when leaf jobs are popped, the slaves will have reached that position.
+                       if ( isset( $this->params['masterPos'] ) ) {
+                               $extraParams['masterPos'] = $this->params['masterPos'];
+                       } elseif ( wfGetLB()->getServerCount() > 1 ) {
+                               $extraParams['masterPos'] = wfGetLB()->getMasterPos();
+                       } else {
+                               $extraParams['masterPos'] = false;
+                       }
+                       // Convert this into no more than $wgUpdateRowsPerJob RefreshLinks per-title
+                       // jobs and possibly a recursive RefreshLinks job for the rest of the backlinks
+                       $jobs = BacklinkJobUtils::partitionBacklinkJob(
+                               $this,
+                               $wgUpdateRowsPerJob,
+                               1, // job-per-title
+                               array( 'params' => $extraParams )
+                       );
+                       JobQueueGroup::singleton()->push( $jobs );
+               // Job to update link tables for for a set of titles
+               } elseif ( isset( $this->params['pages'] ) ) {
+                       foreach ( $this->params['pages'] as $pageId => $nsAndKey ) {
+                               list( $ns, $dbKey ) = $nsAndKey;
+                               $this->runForTitle( Title::makeTitleSafe( $ns, $dbKey ) );
+                       }
+               // Job to update link tables for a given title
+               } else {
+                       $this->runForTitle( $this->title );
                }
 
-               self::runForTitleInternal( $this->title, $revision, __METHOD__ );
-
                return true;
        }
 
-       /**
-        * @return Array
-        */
-       public function getDeduplicationInfo() {
-               $info = parent::getDeduplicationInfo();
-               // Don't let highly unique "masterPos" values ruin duplicate detection
-               if ( is_array( $info['params'] ) ) {
-                       unset( $info['params']['masterPos'] );
-               }
-               return $info;
-       }
-
-       /**
-        * @param $title Title
-        * @param $revision Revision
-        * @param $fname string
-        * @return void
-        */
-       public static function runForTitleInternal( Title $title, Revision $revision, $fname ) {
-               wfProfileIn( $fname );
-               $content = $revision->getContent( Revision::RAW );
-
-               if ( !$content ) {
-                       // if there is no content, pretend the content is empty
-                       $content = $revision->getContentHandler()->makeEmptyContent();
-               }
-
-               // Revision ID must be passed to the parser output to get revision variables correct
-               $parserOutput = $content->getParserOutput( $title, $revision->getId(), null, false );
-
-               $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput );
-               DataUpdate::runUpdates( $updates );
-
-               InfoAction::invalidateCache( $title );
-
-               wfProfileOut( $fname );
-       }
-}
-
-/**
- * Background job to update links for a given title.
- * Newer version for high use templates.
- *
- * @ingroup JobQueue
- */
-class RefreshLinksJob2 extends Job {
-       function __construct( $title, $params, $id = 0 ) {
-               parent::__construct( 'refreshLinks2', $title, $params, $id );
-               // Base jobs for large templates can easily be de-duplicated
-               $this->removeDuplicates = !isset( $params['start'] ) && !isset( $params['end'] );
-       }
-
-       /**
-        * Run a refreshLinks2 job
-        * @return boolean success
-        */
-       function run() {
-               global $wgUpdateRowsPerJob;
-
+       protected function runForTitle( Title $title = null ) {
                $linkCache = LinkCache::singleton();
                $linkCache->clear();
 
-               if ( is_null( $this->title ) ) {
-                       $this->error = "refreshLinks2: Invalid title";
+               if ( is_null( $title ) ) {
+                       $this->setLastError( "refreshLinks: Invalid title" );
                        return false;
                }
 
-               // Back compat for pre-r94435 jobs
-               $table = isset( $this->params['table'] ) ? $this->params['table'] : 'templatelinks';
-
-               // Avoid slave lag when fetching templates.
-               // When the outermost job is run, we know that the caller that enqueued it must have
-               // committed the relevant changes to the DB by now. At that point, record the master
-               // position and pass it along as the job recursively breaks into smaller range jobs.
-               // Hopefully, when leaf jobs are popped, the slaves will have reached that position.
-               if ( isset( $this->params['masterPos'] ) ) {
-                       $masterPos = $this->params['masterPos'];
-               } elseif ( wfGetLB()->getServerCount() > 1 ) {
-                       $masterPos = wfGetLB()->getMasterPos();
-               } else {
-                       $masterPos = false;
+               // Wait for the DB of the current/next slave DB handle to catch up to the master.
+               // This way, we get the correct page_latest for templates or files that just changed
+               // milliseconds ago, having triggered this job to begin with.
+               if ( isset( $this->params['masterPos'] ) && $this->params['masterPos'] !== false ) {
+                       wfGetLB()->waitFor( $this->params['masterPos'] );
                }
 
-               $tbc = $this->title->getBacklinkCache();
+               // Fetch the current revision...
+               $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
+               if ( !$revision ) {
+                       $this->setLastError( "refreshLinks: Article not found {$title->getPrefixedDBkey()}" );
+                       return false; // XXX: what if it was just deleted?
+               }
+               $content = $revision->getContent( Revision::RAW );
+               if ( !$content ) {
+                       // If there is no content, pretend the content is empty
+                       $content = $revision->getContentHandler()->makeEmptyContent();
+               }
 
-               $jobs = array(); // jobs to insert
-               if ( isset( $this->params['start'] ) && isset( $this->params['end'] ) ) {
-                       # This is a partition job to trigger the insertion of leaf jobs...
-                       $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
-               } else {
-                       # This is a base job to trigger the insertion of partitioned jobs...
-                       if ( $tbc->getNumLinks( $table, $wgUpdateRowsPerJob + 1 ) <= $wgUpdateRowsPerJob ) {
-                               # Just directly insert the single per-title jobs
-                               $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
-                       } else {
-                               # Insert the partition jobs to make per-title jobs
-                               foreach ( $tbc->partition( $table, $wgUpdateRowsPerJob ) as $batch ) {
-                                       list( $start, $end ) = $batch;
-                                       $jobs[] = new RefreshLinksJob2( $this->title,
-                                               array(
-                                                       'table' => $table,
-                                                       'start' => $start,
-                                                       'end' => $end,
-                                                       'masterPos' => $masterPos,
-                                               ) + $this->getRootJobParams() // carry over information for de-duplication
-                                       );
+               $parserOutput = false;
+               // If page_touched changed after this root job (with a good slave lag skew factor),
+               // then it is likely that any views of the pages already resulted in re-parses which
+               // are now in cache. This can be reused to avoid expensive parsing in some cases.
+               if ( isset( $this->params['rootJobTimestamp'] ) ) {
+                       $page = WikiPage::factory( $title );
+                       $skewedTimestamp = wfTimestamp( TS_UNIX, $this->params['rootJobTimestamp'] ) + 5;
+                       if ( $page->getTouched() > wfTimestamp( TS_MW, $skewedTimestamp ) ) {
+                               $parserOptions = $page->makeParserOptions( 'canonical' );
+                               $parserOutput = ParserCache::singleton()->getDirty( $page, $parserOptions );
+                               if ( $parserOutput->getCacheTime() <= $skewedTimestamp ) {
+                                       $parserOutput = false; // too stale
                                }
                        }
                }
-
-               if ( count( $jobs ) ) {
-                       JobQueueGroup::singleton()->push( $jobs );
+               // Fetch the current revision and parse it if necessary...
+               if ( $parserOutput == false ) {
+                       // Revision ID must be passed to the parser output to get revision variables correct
+                       $parserOutput = $content->getParserOutput( $title, $revision->getId(), null, false );
                }
 
-               return true;
-       }
+               $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput );
+               DataUpdate::runUpdates( $updates );
 
-       /**
-        * @param $table string
-        * @param $masterPos mixed
-        * @return Array
-        */
-       protected function getSingleTitleJobs( $table, $masterPos ) {
-               # The "start"/"end" fields are not set for the base jobs
-               $start = isset( $this->params['start'] ) ? $this->params['start'] : false;
-               $end = isset( $this->params['end'] ) ? $this->params['end'] : false;
-               $titles = $this->title->getBacklinkCache()->getLinks( $table, $start, $end );
-               # Convert into single page refresh links jobs.
-               # This handles well when in sapi mode and is useful in any case for job
-               # de-duplication. If many pages use template A, and that template itself
-               # uses template B, then an edit to both will create many duplicate jobs.
-               # Roughly speaking, for each page, one of the "RefreshLinksJob" jobs will
-               # get run first, and when it does, it will remove the duplicates. Of course,
-               # one page could have its job popped when the other page's job is still
-               # buried within the logic of a refreshLinks2 job.
-               $jobs = array();
-               foreach ( $titles as $title ) {
-                       $jobs[] = new RefreshLinksJob( $title,
-                               array( 'masterPos' => $masterPos ) + $this->getRootJobParams()
-                       ); // carry over information for de-duplication
-               }
-               return $jobs;
+               InfoAction::invalidateCache( $title );
+
+               return true;
        }
 
-       /**
-        * @return Array
-        */
        public function getDeduplicationInfo() {
                $info = parent::getDeduplicationInfo();
-               // Don't let highly unique "masterPos" values ruin duplicate detection
                if ( is_array( $info['params'] ) ) {
+                       // Don't let highly unique "masterPos" values ruin duplicate detection
                        unset( $info['params']['masterPos'] );
+                       // For per-pages jobs, the job title is that of the template that changed
+                       // (or similar), so remove that since it ruins duplicate detection
+                       if ( isset( $info['pages'] ) ) {
+                               unset( $info['namespace'] );
+                               unset( $info['title'] );
+                       }
                }
+
                return $info;
        }
 }
diff --git a/includes/job/jobs/RefreshLinksJob2.php b/includes/job/jobs/RefreshLinksJob2.php
new file mode 100644 (file)
index 0000000..332f625
--- /dev/null
@@ -0,0 +1,141 @@
+<?php
+/**
+ * Job to update links for a given title.
+ *
+ * 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 JobQueue
+ */
+
+/**
+ * Background job to update links for titles in certain backlink range by page ID.
+ * Newer version for high use templates. This is deprecated by RefreshLinksPartitionJob.
+ *
+ * @ingroup JobQueue
+ * @deprecated 1.23
+ */
+class RefreshLinksJob2 extends Job {
+       function __construct( $title, $params, $id = 0 ) {
+               parent::__construct( 'refreshLinks2', $title, $params, $id );
+               // Base jobs for large templates can easily be de-duplicated
+               $this->removeDuplicates = !isset( $params['start'] ) && !isset( $params['end'] );
+       }
+
+       /**
+        * Run a refreshLinks2 job
+        * @return boolean success
+        */
+       function run() {
+               global $wgUpdateRowsPerJob;
+
+               $linkCache = LinkCache::singleton();
+               $linkCache->clear();
+
+               if ( is_null( $this->title ) ) {
+                       $this->error = "refreshLinks2: Invalid title";
+                       return false;
+               }
+
+               // Back compat for pre-r94435 jobs
+               $table = isset( $this->params['table'] ) ? $this->params['table'] : 'templatelinks';
+
+               // Avoid slave lag when fetching templates.
+               // When the outermost job is run, we know that the caller that enqueued it must have
+               // committed the relevant changes to the DB by now. At that point, record the master
+               // position and pass it along as the job recursively breaks into smaller range jobs.
+               // Hopefully, when leaf jobs are popped, the slaves will have reached that position.
+               if ( isset( $this->params['masterPos'] ) ) {
+                       $masterPos = $this->params['masterPos'];
+               } elseif ( wfGetLB()->getServerCount() > 1 ) {
+                       $masterPos = wfGetLB()->getMasterPos();
+               } else {
+                       $masterPos = false;
+               }
+
+               $tbc = $this->title->getBacklinkCache();
+
+               $jobs = array(); // jobs to insert
+               if ( isset( $this->params['start'] ) && isset( $this->params['end'] ) ) {
+                       # This is a partition job to trigger the insertion of leaf jobs...
+                       $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
+               } else {
+                       # This is a base job to trigger the insertion of partitioned jobs...
+                       if ( $tbc->getNumLinks( $table, $wgUpdateRowsPerJob + 1 ) <= $wgUpdateRowsPerJob ) {
+                               # Just directly insert the single per-title jobs
+                               $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
+                       } else {
+                               # Insert the partition jobs to make per-title jobs
+                               foreach ( $tbc->partition( $table, $wgUpdateRowsPerJob ) as $batch ) {
+                                       list( $start, $end ) = $batch;
+                                       $jobs[] = new RefreshLinksJob2( $this->title,
+                                               array(
+                                                       'table' => $table,
+                                                       'start' => $start,
+                                                       'end' => $end,
+                                                       'masterPos' => $masterPos,
+                                               ) + $this->getRootJobParams() // carry over information for de-duplication
+                                       );
+                               }
+                       }
+               }
+
+               if ( count( $jobs ) ) {
+                       JobQueueGroup::singleton()->push( $jobs );
+               }
+
+               return true;
+       }
+
+       /**
+        * @param $table string
+        * @param $masterPos mixed
+        * @return Array
+        */
+       protected function getSingleTitleJobs( $table, $masterPos ) {
+               # The "start"/"end" fields are not set for the base jobs
+               $start = isset( $this->params['start'] ) ? $this->params['start'] : false;
+               $end = isset( $this->params['end'] ) ? $this->params['end'] : false;
+               $titles = $this->title->getBacklinkCache()->getLinks( $table, $start, $end );
+               # Convert into single page refresh links jobs.
+               # This handles well when in sapi mode and is useful in any case for job
+               # de-duplication. If many pages use template A, and that template itself
+               # uses template B, then an edit to both will create many duplicate jobs.
+               # Roughly speaking, for each page, one of the "RefreshLinksJob" jobs will
+               # get run first, and when it does, it will remove the duplicates. Of course,
+               # one page could have its job popped when the other page's job is still
+               # buried within the logic of a refreshLinks2 job.
+               $jobs = array();
+               foreach ( $titles as $title ) {
+                       $jobs[] = new RefreshLinksJob( $title,
+                               array( 'masterPos' => $masterPos ) + $this->getRootJobParams()
+                       ); // carry over information for de-duplication
+               }
+               return $jobs;
+       }
+
+       /**
+        * @return Array
+        */
+       public function getDeduplicationInfo() {
+               $info = parent::getDeduplicationInfo();
+               // Don't let highly unique "masterPos" values ruin duplicate detection
+               if ( is_array( $info['params'] ) ) {
+                       unset( $info['params']['masterPos'] );
+               }
+               return $info;
+       }
+}
index c993cfb..15d523f 100644 (file)
 class UploadFromUrlJob extends Job {
        const SESSION_KEYNAME = 'wsUploadFromUrlJobData';
 
-       /**
-        * @var UploadFromUrl
-        */
+       /** @var UploadFromUrl */
        public $upload;
 
-       /**
-        * @var User
-        */
+       /** @var User */
        protected $user;
 
        public function __construct( $title, $params, $id = 0 ) {
@@ -66,6 +62,7 @@ class UploadFromUrlJob extends Job {
                $status = $this->upload->fetchFile( $opts );
                if ( !$status->isOk() ) {
                        $this->leaveMessage( $status );
+
                        return true;
                }
 
@@ -74,6 +71,7 @@ class UploadFromUrlJob extends Job {
                if ( $result['status'] != UploadBase::OK ) {
                        $status = $this->upload->convertVerifyErrorToStatus( $result );
                        $this->leaveMessage( $status );
+
                        return true;
                }
 
@@ -85,6 +83,8 @@ class UploadFromUrlJob extends Job {
                                # Stash the upload
                                $key = $this->upload->stashFile();
 
+                               // @todo FIXME: This has been broken for a while.
+                               // User::leaveUserMessage() does not exist.
                                if ( $this->params['leaveMessage'] ) {
                                        $this->user->leaveUserMessage(
                                                wfMessage( 'upload-warning-subj' )->text(),
@@ -111,25 +111,27 @@ class UploadFromUrlJob extends Job {
                        $this->user
                );
                $this->leaveMessage( $status );
-               return true;
 
+               return true;
        }
 
        /**
         * Leave a message on the user talk page or in the session according to
         * $params['leaveMessage'].
         *
-        * @param $status Status
+        * @param Status $status
         */
        protected function leaveMessage( $status ) {
                if ( $this->params['leaveMessage'] ) {
                        if ( $status->isGood() ) {
+                               // @todo FIXME: user->leaveUserMessage does not exist.
                                $this->user->leaveUserMessage( wfMessage( 'upload-success-subj' )->text(),
                                        wfMessage( 'upload-success-msg',
                                                $this->upload->getTitle()->getText(),
                                                $this->params['url']
                                        )->text() );
                        } else {
+                               // @todo FIXME: user->leaveUserMessage does not exist.
                                $this->user->leaveUserMessage( wfMessage( 'upload-failure-subj' )->text(),
                                        wfMessage( 'upload-failure-msg',
                                                $status->getWikiText(),
@@ -155,7 +157,7 @@ class UploadFromUrlJob extends Job {
         *
         * @param string $result the result (Success|Warning|Failure)
         * @param string $dataKey the key of the extra data
-        * @param $dataValue Mixed: the extra data itself
+        * @param mixed $dataValue The extra data itself
         */
        protected function storeResultInSession( $result, $dataKey, $dataValue ) {
                $session =& self::getSessionData( $this->params['sessionKey'] );
@@ -179,6 +181,7 @@ class UploadFromUrlJob extends Job {
                if ( !isset( $_SESSION[self::SESSION_KEYNAME][$key] ) ) {
                        $_SESSION[self::SESSION_KEYNAME][$key] = array();
                }
+
                return $_SESSION[self::SESSION_KEYNAME][$key];
        }
 }
diff --git a/includes/job/utils/BacklinkJobUtils.php b/includes/job/utils/BacklinkJobUtils.php
new file mode 100644 (file)
index 0000000..b0b6ccd
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+/**
+ * Job to update links for a given title.
+ *
+ * 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 JobQueue
+ * @author Aaron Schulz
+ */
+
+/**
+ * Class with Backlink related Job helper methods
+ *
+ * @ingroup JobQueue
+ * @since 1.23
+ */
+class BacklinkJobUtils {
+       /**
+        * Break down $job into approximately ($bSize/$cSize) leaf jobs and a single partition
+        * job that covers the remaining backlink range (if needed). Jobs for the first $bSize
+        * titles are collated ($cSize per job) into leaf jobs to do actual work. All the
+        * resulting jobs are of the same class as $job. No partition job is returned if the
+        * range covered by $job was less than $bSize, as the leaf jobs have full coverage.
+        *
+        * The leaf jobs have the 'pages' param set to a (<page ID>:(<namespace>,<DB key>),...)
+        * map so that the run() function knows what pages to act on. The leaf jobs will keep
+        * the same job title as the parent job (e.g. $job).
+        *
+        * The partition jobs have the 'range' parameter set to a map of the format
+        * (start:<integer>, end:<integer>, batchSize:<integer>, subranges:((<start>,<end>),...)),
+        * the 'table' parameter set to that of $job, and the 'recursive' parameter set to true.
+        * This method can be called on the resulting job to repeat the process again.
+        *
+        * The job provided ($job) must have the 'recursive' parameter set to true and the 'table'
+        * parameter must be set to a backlink table. The job title will be used as the title to
+        * find backlinks for. Any 'range' parameter must follow the same format as mentioned above.
+        * This should be managed by recursive calls to this method.
+        *
+        * The first jobs return are always the leaf jobs. This lets the caller use push() to
+        * put them directly into the queue and works well if the queue is FIFO. In such a queue,
+        * the leaf jobs have to get finished first before anything can resolve the next partition
+        * job, which keeps the queue very small.
+        *
+        * $opts includes:
+        *   - params : extra job parameters to include in each job
+        *
+        * @param Job $job
+        * @param int $bSize BacklinkCache partition size; usually $wgUpdateRowsPerJob
+        * @param int $cSize Max titles per leaf job; Usually 1 or a modest value
+        * @param array $opts Optional parameter map
+        * @return array List of Job objects
+        */
+       public static function partitionBacklinkJob( Job $job, $bSize, $cSize, $opts = array() ) {
+               $class = get_class( $job );
+               $title = $job->getTitle();
+               $params = $job->getParams();
+
+               if ( isset( $params['pages'] ) || empty( $params['recursive'] ) ) {
+                       $ranges = array(); // sanity; this is a leaf node
+                       wfWarn( __METHOD__ . " called on {$job->getType()} leaf job (explosive recursion)." );
+               } elseif ( isset( $params['range'] ) ) {
+                       // This is a range job to trigger the insertion of partitioned/title jobs...
+                       $ranges = $params['range']['subranges'];
+                       $realBSize = $params['range']['batchSize'];
+               } else {
+                       // This is a base job to trigger the insertion of partitioned jobs...
+                       $ranges = $title->getBacklinkCache()->partition( $params['table'], $bSize );
+                       $realBSize = $bSize;
+               }
+
+               $extraParams = isset( $opts['params'] ) ? $opts['params'] : array();
+
+               $jobs = array();
+               // Combine the first range (of size $bSize) backlinks into leaf jobs
+               if ( isset( $ranges[0] ) ) {
+                       list( $start, $end ) = $ranges[0];
+                       $titles = $title->getBacklinkCache()->getLinks( $params['table'], $start, $end );
+                       foreach ( array_chunk( iterator_to_array( $titles ), $cSize ) as $titleBatch ) {
+                               $pages = array();
+                               foreach ( $titleBatch as $tl ) {
+                                       $pages[$tl->getArticleId()] = array( $tl->getNamespace(), $tl->getDBKey() );
+                               }
+                               $jobs[] = new $class(
+                                       $title, // maintain parent job title
+                                       array( 'pages' => $pages ) + $extraParams
+                               );
+                       }
+               }
+               // Take all of the remaining ranges and build a partition job from it
+               if ( isset( $ranges[1] ) ) {
+                       $jobs[] = new $class(
+                               $title, // maintain parent job title
+                               array(
+                                       'recursive'     => true,
+                                       'table'         => $params['table'],
+                                       'range'         => array(
+                                               'start'     => $ranges[1][0],
+                                               'end'       => $ranges[count( $ranges ) - 1][1],
+                                               'batchSize' => $realBSize,
+                                               'subranges' => array_slice( $ranges, 1 )
+                                       ),
+                               ) + $extraParams
+                       );
+               }
+
+               return $jobs;
+       }
+}
index d611651..83718c3 100644 (file)
@@ -24,7 +24,6 @@
  * 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;
@@ -104,6 +103,7 @@ class FormatJson {
                if ( defined( 'JSON_UNESCAPED_UNICODE' ) ) {
                        return self::encode54( $value, $pretty, $escaping );
                }
+
                return self::encode53( $value, $pretty, $escaping );
        }
 
@@ -113,7 +113,7 @@ class FormatJson {
         * @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.
+        * @return mixed The value encoded in JSON in appropriate PHP type.
         * `null` is returned if the JSON cannot be decoded or if the encoded data is deeper than
         * the recursion limit.
         */
@@ -150,6 +150,7 @@ class FormatJson {
                if ( $escaping & self::UTF8_OK ) {
                        $json = str_replace( self::$badChars, self::$badCharsEscaped, $json );
                }
+
                return $json;
        }
 
@@ -190,6 +191,7 @@ class FormatJson {
                if ( $pretty ) {
                        return self::prettyPrint( $json );
                }
+
                return $json;
        }
 
@@ -231,6 +233,7 @@ class FormatJson {
                        }
                }
                $buf = preg_replace( self::WS_CLEANUP_REGEX, '', $buf );
+
                return str_replace( "\x01", '\"', $buf );
        }
 }
index 4f142fc..68e30eb 100644 (file)
@@ -38,7 +38,8 @@ class CSSMin {
         * which when base64 encoded will result in a 1/3 increase in size.
         */
        const EMBED_SIZE_LIMIT = 24576;
-       const URL_REGEX = 'url\(\s*[\'"]?(?P<file>[^\?\)\'"]*)(?P<query>\??[^\)\'"]*)[\'"]?\s*\)';
+       const URL_REGEX = 'url\(\s*[\'"]?(?P<file>[^\?\)\'"]*?)(?P<query>\?[^\)\'"]*?|)[\'"]?\s*\)';
+       const EMBED_REGEX = '\/\*\s*\@embed\s*\*\/';
 
        /* Protected Static Members */
 
@@ -140,8 +141,8 @@ class CSSMin {
        }
 
        /**
-        * Remaps CSS URL paths and automatically embeds data URIs for URL rules
-        * preceded by an /* @embed * / comment
+        * Remaps CSS URL paths and automatically embeds data URIs for CSS rules or url() values
+        * preceded by an / * @embed * / comment.
         *
         * @param string $source CSS data to remap
         * @param string $local File path where the source was read from
@@ -150,89 +151,118 @@ class CSSMin {
         * @return string Remapped CSS data
         */
        public static function remap( $source, $local, $remote, $embedData = true ) {
-               $pattern = '/((?P<embed>\s*\/\*\s*\@embed\s*\*\/)(?P<pre>[^\;\}]*))?' .
-                       self::URL_REGEX . '(?P<post>[^;]*)[\;]?/';
-               $offset = 0;
-               while ( preg_match( $pattern, $source, $match, PREG_OFFSET_CAPTURE, $offset ) ) {
-                       // Skip fully-qualified URLs and data URIs
-                       $urlScheme = parse_url( $match['file'][0], PHP_URL_SCHEME );
-                       if ( $urlScheme ) {
-                               // Move the offset to the end of the match, leaving it alone
-                               $offset = $match[0][1] + strlen( $match[0][0] );
-                               continue;
+               // High-level overview:
+               // * For each CSS rule in $source that includes at least one url() value:
+               //   * Check for an @embed comment at the start indicating that all URIs should be embedded
+               //   * For each url() value:
+               //     * Check for an @embed comment directly preceding the value
+               //     * If either @embed comment exists:
+               //       * Embedding the URL as data: URI, if it's possible / allowed
+               //       * Otherwise remap the URL to work in generated stylesheets
+
+               // Guard against trailing slashes, because "some/remote/../foo.png"
+               // resolves to "some/remote/foo.png" on (some?) clients (bug 27052).
+               if ( substr( $remote, -1 ) == '/' ) {
+                       $remote = substr( $remote, 0, -1 );
+               }
+
+               // Note: This will not correctly handle cases where ';', '{' or '}' appears in the rule itself,
+               // e.g. in a quoted string. You are advised not to use such characters in file names.
+               $pattern = '/[;{]\K[^;}]*' . CSSMin::URL_REGEX . '[^;}]*(?=[;}])/';
+               return preg_replace_callback( $pattern, function ( $matchOuter ) use ( $local, $remote, $embedData ) {
+                       $rule = $matchOuter[0];
+
+                       // Check for global @embed comment and remove it
+                       $embedAll = false;
+                       $rule = preg_replace( '/^(\s*)' . CSSMin::EMBED_REGEX . '\s*/', '$1', $rule, 1, $embedAll );
+
+                       // Build two versions of current rule: with remapped URLs and with embedded data: URIs (where possible)
+                       $pattern = '/(?P<embed>' . CSSMin::EMBED_REGEX . '\s*|)' . CSSMin::URL_REGEX . '/';
+
+                       $ruleWithRemapped = preg_replace_callback( $pattern, function ( $match ) use ( $local, $remote ) {
+                               $remapped = CSSMin::remapOne( $match['file'], $match['query'], $local, $remote, false );
+                               return "url({$remapped})";
+                       }, $rule );
+
+                       if ( $embedData ) {
+                               $ruleWithEmbedded = preg_replace_callback( $pattern, function ( $match ) use ( $embedAll, $local, $remote ) {
+                                       $embed = $embedAll || $match['embed'];
+                                       $embedded = CSSMin::remapOne( $match['file'], $match['query'], $local, $remote, $embed );
+                                       return "url({$embedded})";
+                               }, $rule );
                        }
-                       // URLs with absolute paths like /w/index.php need to be expanded
-                       // to absolute URLs but otherwise left alone
-                       if ( $match['file'][0] !== '' && $match['file'][0][0] === '/' ) {
-                               // Replace the file path with an expanded (possibly protocol-relative) URL
-                               // ...but only if wfExpandUrl() is even available.
-                               // This will not be the case if we're running outside of MW
-                               $lengthIncrease = 0;
-                               if ( function_exists( 'wfExpandUrl' ) ) {
-                                       $expanded = wfExpandUrl( $match['file'][0], PROTO_RELATIVE );
-                                       $origLength = strlen( $match['file'][0] );
-                                       $lengthIncrease = strlen( $expanded ) - $origLength;
-                                       $source = substr_replace( $source, $expanded,
-                                               $match['file'][1], $origLength
-                                       );
-                               }
-                               // Move the offset to the end of the match, leaving it alone
-                               $offset = $match[0][1] + strlen( $match[0][0] ) + $lengthIncrease;
-                               continue;
+
+                       if ( $embedData && $ruleWithEmbedded !== $ruleWithRemapped ) {
+                               // Build 2 CSS properties; one which uses a base64 encoded data URI in place
+                               // of the @embed comment to try and retain line-number integrity, and the
+                               // other with a remapped an versioned URL and an Internet Explorer hack
+                               // making it ignored in all browsers that support data URIs
+                               return "$ruleWithEmbedded;$ruleWithRemapped!ie";
+                       } else {
+                               // No reason to repeat twice
+                               return $ruleWithRemapped;
                        }
+               }, $source );
+
+               return $source;
+       }
+
+       /**
+        * Remap or embed a CSS URL path.
+        *
+        * @param string $file URL to remap/embed
+        * @param string $query
+        * @param string $local File path where the source was read from
+        * @param string $remote URL path to the file
+        * @param bool $embed Whether to do any data URI embedding
+        * @return string Remapped/embedded URL data
+        */
+       public static function remapOne( $file, $query, $local, $remote, $embed ) {
+               // Skip fully-qualified URLs and data URIs
+               $urlScheme = parse_url( $file, PHP_URL_SCHEME );
+               if ( $urlScheme ) {
+                       return $file;
+               }
 
-                       // Guard against double slashes, because "some/remote/../foo.png"
-                       // resolves to "some/remote/foo.png" on (some?) clients (bug 27052).
-                       if ( substr( $remote, -1 ) == '/' ) {
-                               $remote = substr( $remote, 0, -1 );
+               // URLs with absolute paths like /w/index.php need to be expanded
+               // to absolute URLs but otherwise left alone
+               if ( $file !== '' && $file[0] === '/' ) {
+                       // Replace the file path with an expanded (possibly protocol-relative) URL
+                       // ...but only if wfExpandUrl() is even available.
+                       // This will not be the case if we're running outside of MW
+                       if ( function_exists( 'wfExpandUrl' ) ) {
+                               return wfExpandUrl( $file, PROTO_RELATIVE );
+                       } else {
+                               return $file;
                        }
+               }
 
-                       // Shortcuts
-                       $embed = $match['embed'][0];
-                       $pre = $match['pre'][0];
-                       $post = $match['post'][0];
-                       $query = $match['query'][0];
-                       $url = "{$remote}/{$match['file'][0]}";
-                       $file = "{$local}/{$match['file'][0]}";
-
-                       $replacement = false;
-
-                       if ( $local !== false && file_exists( $file ) ) {
-                               // Add version parameter as a time-stamp in ISO 8601 format,
-                               // using Z for the timezone, meaning GMT
-                               $url .= '?' . gmdate( 'Y-m-d\TH:i:s\Z', round( filemtime( $file ), -2 ) );
-                               // Embedding requires a bit of extra processing, so let's skip that if we can
-                               if ( $embedData && $embed && $match['embed'][1] > 0 ) {
-                                       $data = self::encodeImageAsDataURI( $file );
-                                       if ( $data !== false ) {
-                                               // Build 2 CSS properties; one which uses a base64 encoded data URI in place
-                                               // of the @embed comment to try and retain line-number integrity, and the
-                                               // other with a remapped an versioned URL and an Internet Explorer hack
-                                               // making it ignored in all browsers that support data URIs
-                                               $replacement = "{$pre}url({$data}){$post};{$pre}url({$url}){$post}!ie;";
-                                       }
-                               }
-                               if ( $replacement === false ) {
-                                       // Assume that all paths are relative to $remote, and make them absolute
-                                       $replacement = "{$embed}{$pre}url({$url}){$post};";
+               $url = "{$remote}/{$file}";
+               $file = "{$local}/{$file}";
+
+               $replacement = false;
+
+               if ( $local !== false && file_exists( $file ) ) {
+                       // Add version parameter as a time-stamp in ISO 8601 format,
+                       // using Z for the timezone, meaning GMT
+                       $url .= '?' . gmdate( 'Y-m-d\TH:i:s\Z', round( filemtime( $file ), -2 ) );
+                       if ( $embed ) {
+                               $data = self::encodeImageAsDataURI( $file );
+                               if ( $data !== false ) {
+                                       return $data;
+                               } else {
+                                       return $url;
                                }
-                       } elseif ( $local === false ) {
+                       } else {
                                // Assume that all paths are relative to $remote, and make them absolute
-                               $replacement = "{$embed}{$pre}url({$url}{$query}){$post};";
+                               return $url;
                        }
-                       if ( $replacement !== false ) {
-                               // Perform replacement on the source
-                               $source = substr_replace(
-                                       $source, $replacement, $match[0][1], strlen( $match[0][0] )
-                               );
-                               // Move the offset to the end of the replacement in the source
-                               $offset = $match[0][1] + strlen( $replacement );
-                               continue;
-                       }
-                       // Move the offset to the end of the match, leaving it alone
-                       $offset = $match[0][1] + strlen( $match[0][0] );
+               } elseif ( $local === false ) {
+                       // Assume that all paths are relative to $remote, and make them absolute
+                       return $url . $query;
+               } else {
+                       return $file;
                }
-               return $source;
        }
 
        /**
index 01528b7..d761a87 100644 (file)
@@ -36,6 +36,7 @@ class DeleteLogFormatter extends LogFormatter {
                                return "$key-legacy";
                        }
                }
+
                return $key;
        }
 
@@ -47,11 +48,14 @@ class DeleteLogFormatter extends LogFormatter {
                $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' ) )
+                       // $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;
 
@@ -74,6 +78,7 @@ class DeleteLogFormatter extends LogFormatter {
                                $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 );
@@ -87,6 +92,7 @@ class DeleteLogFormatter extends LogFormatter {
                // 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;
@@ -95,102 +101,106 @@ class DeleteLogFormatter extends LogFormatter {
 
        public function getActionLinks() {
                $user = $this->context->getUser();
-               if ( !$user->isAllowed( 'deletedhistory' ) || $this->entry->isDeleted( LogPage::DELETED_ACTION ) ) {
+               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]
-                                               )
-                                       );
+                       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 '';
                                }
-                       }
-
-                       // 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();
+                               // 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]
+                                                       )
+                                               );
+                                       }
+                               }
 
-               case 'event': // Hidden log items, give review link
-                       $params = $this->extractParameters();
-                       if ( !isset( $params[3] ) ) {
+                               // 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 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 a1cb3a7..e15943f 100644 (file)
@@ -33,7 +33,6 @@
  * @since 1.19
  */
 interface LogEntry {
-
        /**
         * The main log type.
         * @return string
@@ -117,7 +116,6 @@ abstract class LogEntryBase implements LogEntry {
        public function isLegacy() {
                return false;
        }
-
 }
 
 /**
@@ -202,6 +200,7 @@ class DatabaseLogEntry extends LogEntryBase {
        public function isLegacy() {
                // This does the check
                $this->getParameters();
+
                return $this->legacy;
        }
 
@@ -229,6 +228,7 @@ class DatabaseLogEntry extends LogEntryBase {
                                $this->legacy = true;
                        }
                }
+
                return $this->params;
        }
 
@@ -246,6 +246,7 @@ class DatabaseLogEntry extends LogEntryBase {
                                $this->performer = User::newFromName( $userText, false );
                        }
                }
+
                return $this->performer;
        }
 
@@ -253,6 +254,7 @@ class DatabaseLogEntry extends LogEntryBase {
                $namespace = $this->row->log_namespace;
                $page = $this->row->log_title;
                $title = Title::makeTitle( $namespace, $page );
+
                return $title;
        }
 
@@ -267,7 +269,6 @@ class DatabaseLogEntry extends LogEntryBase {
        public function getDeleted() {
                return $this->row->log_deleted;
        }
-
 }
 
 class RCDatabaseLogEntry extends DatabaseLogEntry {
@@ -301,6 +302,7 @@ class RCDatabaseLogEntry extends DatabaseLogEntry {
                                $this->performer = User::newFromName( $userText, false );
                        }
                }
+
                return $this->performer;
        }
 
@@ -308,6 +310,7 @@ class RCDatabaseLogEntry extends DatabaseLogEntry {
                $namespace = $this->row->rc_namespace;
                $page = $this->row->rc_title;
                $title = Title::makeTitle( $namespace, $page );
+
                return $title;
        }
 
@@ -322,7 +325,6 @@ class RCDatabaseLogEntry extends DatabaseLogEntry {
        public function getDeleted() {
                return $this->row->rc_deleted;
        }
-
 }
 
 /**
@@ -448,7 +450,7 @@ class ManualLogEntry extends LogEntryBase {
        public function insert( IDatabase $dbw = null ) {
                global $wgContLang;
 
-               $dbw = $dbw ?: wfGetDB( DB_MASTER );
+               $dbw = $dbw ? : wfGetDB( DB_MASTER );
                $id = $dbw->nextSequenceValue( 'logging_log_id_seq' );
 
                if ( $this->timestamp === null ) {
@@ -484,8 +486,8 @@ class ManualLogEntry extends LogEntryBase {
                        }
                        foreach ( $values as $value ) {
                                $rows[] = array(
-                                       'ls_field'  => $tag,
-                                       'ls_value'  => $value,
+                                       'ls_field' => $tag,
+                                       'ls_value' => $value,
                                        'ls_log_id' => $this->id
                                );
                        }
@@ -520,6 +522,7 @@ class ManualLogEntry extends LogEntryBase {
                                $ip = $user->getName();
                        }
                }
+
                return RecentChange::newLogEntry(
                        $this->getTimestamp(),
                        $logpage,
@@ -534,7 +537,6 @@ class ManualLogEntry extends LogEntryBase {
                        $newId,
                        $formatter->getIRCActionComment() // Used for IRC feeds
                );
-
        }
 
        /**
@@ -589,6 +591,7 @@ class ManualLogEntry extends LogEntryBase {
 
        public function getTimestamp() {
                $ts = $this->timestamp !== null ? $this->timestamp : wfTimestampNow();
+
                return wfTimestamp( TS_MW, $ts );
        }
 
@@ -599,5 +602,4 @@ class ManualLogEntry extends LogEntryBase {
        public function getDeleted() {
                return (int)$this->deleted;
        }
-
 }
index c27b57a..fabe153 100644 (file)
@@ -176,6 +176,7 @@ class LogEventsList extends ContextSource {
                        $links[$type] = $this->msg( "log-show-hide-{$type}" )->rawParams( $link )->escaped();
                        $hiddens .= Html::hidden( "hide_{$type}_log", $val ) . "\n";
                }
+
                // Build links
                return '<small>' . $this->getLanguage()->pipeList( $links ) . '</small>' . $hiddens;
        }
@@ -191,6 +192,7 @@ class LogEventsList extends ContextSource {
                        unset( $this->mDefaultQuery['month'] );
                        unset( $this->mDefaultQuery['year'] );
                }
+
                return $this->mDefaultQuery;
        }
 
@@ -202,6 +204,7 @@ class LogEventsList extends ContextSource {
                $queryType = count( $queryTypes ) == 1 ? $queryTypes[0] : '';
                $selector = $this->getTypeSelector();
                $selector->setDefault( $queryType );
+
                return $selector->getHtml();
        }
 
@@ -242,9 +245,15 @@ class LogEventsList extends ContextSource {
         * @return String: Formatted HTML
         */
        private function getUserInput( $user ) {
-               return '<span style="white-space: nowrap">' .
-                       Xml::inputLabel( $this->msg( 'specialloguserlabel' )->text(), 'user', 'mw-log-user', 15, $user ) .
-                       '</span>';
+               $label = Xml::inputLabel(
+                       $this->msg( 'specialloguserlabel' )->text(),
+                       'user',
+                       'mw-log-user',
+                       15,
+                       $user
+               );
+
+               return '<span style="white-space: nowrap">' . $label . '</span>';
        }
 
        /**
@@ -252,9 +261,15 @@ class LogEventsList extends ContextSource {
         * @return String: Formatted HTML
         */
        private function getTitleInput( $title ) {
-               return '<span style="white-space: nowrap">' .
-                       Xml::inputLabel( $this->msg( 'speciallogtitlelabel' )->text(), 'page', 'mw-log-page', 20, $title ) .
-                       '</span>';
+               $label = Xml::inputLabel(
+                       $this->msg( 'speciallogtitlelabel' )->text(),
+                       'page',
+                       'mw-log-page',
+                       20,
+                       $title
+               );
+
+               return '<span style="white-space: nowrap">' . $label .  '</span>';
        }
 
        /**
@@ -281,6 +296,7 @@ class LogEventsList extends ContextSource {
                        return Xml::inputLabel( $this->msg( 'revdelete-offender' )->text(), 'offender',
                                'mw-log-offender', 20, $offender );
                }
+
                return '';
        }
 
@@ -343,8 +359,11 @@ class LogEventsList extends ContextSource {
         * @return string
         */
        private function getShowHideLinks( $row ) {
-               if ( ( $this->flags == self::NO_ACTION_LINK ) // we don't want to see the links
-                       || $row->log_type == 'suppress' ) { // no one can hide items from the suppress log
+               // We don't want to see the links and
+               // no one can hide items from the suppress log.
+               if ( ( $this->flags == self::NO_ACTION_LINK )
+                       || $row->log_type == 'suppress'
+               ) {
                        return '';
                }
                $del = '';
@@ -353,14 +372,21 @@ class LogEventsList extends ContextSource {
                if ( $user->isAllowed( 'deletedhistory' ) ) {
                        $canHide = $user->isAllowed( 'deletelogentry' );
                        if ( $row->log_deleted || $canHide ) {
-                               if ( $canHide && $this->flags & self::USE_REVDEL_CHECKBOXES ) { // Show checkboxes instead of links.
-                                       if ( !self::userCan( $row, LogPage::DELETED_RESTRICTED, $user ) ) { // If event was hidden from sysops
+                               // Show checkboxes instead of links.
+                               if ( $canHide && $this->flags & self::USE_REVDEL_CHECKBOXES ) {
+                                       // If event was hidden from sysops
+                                       if ( !self::userCan( $row, LogPage::DELETED_RESTRICTED, $user ) ) {
                                                $del = Xml::check( 'deleterevisions', false, array( 'disabled' => 'disabled' ) );
                                        } else {
-                                               $del = Xml::check( 'showhiderevisions', false, array( 'name' => 'ids[' . $row->log_id . ']' ) );
+                                               $del = Xml::check(
+                                                       'showhiderevisions',
+                                                       false,
+                                                       array( 'name' => 'ids[' . $row->log_id . ']' )
+                                               );
                                        }
                                } else {
-                                       if ( !self::userCan( $row, LogPage::DELETED_RESTRICTED, $user ) ) { // If event was hidden from sysops
+                                       // If event was hidden from sysops
+                                       if ( !self::userCan( $row, LogPage::DELETED_RESTRICTED, $user ) ) {
                                                $del = Linker::revDeleteLinkDisabled( $canHide );
                                        } else {
                                                $query = array(
@@ -368,11 +394,16 @@ class LogEventsList extends ContextSource {
                                                        'type' => 'logging',
                                                        'ids' => $row->log_id,
                                                );
-                                               $del = Linker::revDeleteLink( $query, self::isDeleted( $row, LogPage::DELETED_RESTRICTED ), $canHide );
+                                               $del = Linker::revDeleteLink(
+                                                       $query,
+                                                       self::isDeleted( $row, LogPage::DELETED_RESTRICTED ),
+                                                       $canHide
+                                               );
                                        }
                                }
                        }
                }
+
                return $del;
        }
 
@@ -394,6 +425,7 @@ class LogEventsList extends ContextSource {
                                $match = $wgUser->isAllowed( $right );
                        }
                }
+
                return $match;
        }
 
@@ -431,6 +463,7 @@ class LogEventsList extends ContextSource {
                                global $wgUser;
                                $user = $wgUser;
                        }
+
                        return $user->isAllowed( $permission );
                } else {
                        return true;
@@ -613,6 +646,7 @@ class LogEventsList extends ContextSource {
                } elseif ( $hiddenLogs ) {
                        return 'log_type NOT IN (' . $db->makeList( $hiddenLogs ) . ')';
                }
+
                return false;
        }
 }
index 8f60aee..ab6e35e 100644 (file)
@@ -154,6 +154,7 @@ class LogFormatter {
                $this->plaintext = true;
                $text = $this->getActionText();
                $this->plaintext = false;
+
                return $text;
        }
 
@@ -224,15 +225,19 @@ class LogFormatter {
                                                $text = wfMessage( 'undeletedarticle' )
                                                        ->rawParams( $target )->inContentLanguage()->escaped();
                                                break;
+                                       // @codingStandardsIgnoreStart Long line
                                        //case 'revision': // Revision deletion
                                        //case 'event': // Log deletion
-                                               // see https://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/LogPage.php?&pathrev=97044&r1=97043&r2=97044
+                                       // see https://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/LogPage.php?&pathrev=97044&r1=97043&r2=97044
                                        //default:
+                                       // @codingStandardsIgnoreEnd
                                }
                                break;
 
                        case 'patrol':
+                               // @codingStandardsIgnoreStart Long line
                                // https://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/PatrolLog.php?&pathrev=97495&r1=97494&r2=97495
+                               // @codingStandardsIgnoreEnd
                                // Create a diff link to the patrolled revision
                                if ( $entry->getSubtype() === 'patrol' ) {
                                        $diffLink = htmlspecialchars(
@@ -247,18 +252,18 @@ class LogFormatter {
 
                        case 'protect':
                                switch ( $entry->getSubtype() ) {
-                               case 'protect':
-                                       $text = wfMessage( 'protectedarticle' )
-                                               ->rawParams( $target . ' ' . $parameters[0] )->inContentLanguage()->escaped();
-                                       break;
-                               case 'unprotect':
-                                       $text = wfMessage( 'unprotectedarticle' )
-                                               ->rawParams( $target )->inContentLanguage()->escaped();
-                                       break;
-                               case 'modify':
-                                       $text = wfMessage( 'modifiedarticleprotection' )
-                                               ->rawParams( $target . ' ' . $parameters[0] )->inContentLanguage()->escaped();
-                                       break;
+                                       case 'protect':
+                                               $text = wfMessage( 'protectedarticle' )
+                                                       ->rawParams( $target . ' ' . $parameters[0] )->inContentLanguage()->escaped();
+                                               break;
+                                       case 'unprotect':
+                                               $text = wfMessage( 'unprotectedarticle' )
+                                                       ->rawParams( $target )->inContentLanguage()->escaped();
+                                               break;
+                                       case 'modify':
+                                               $text = wfMessage( 'modifiedarticleprotection' )
+                                                       ->rawParams( $target . ' ' . $parameters[0] )->inContentLanguage()->escaped();
+                                               break;
                                }
                                break;
 
@@ -316,8 +321,7 @@ class LogFormatter {
                                                break;
                                }
                                break;
-
-                       // case 'suppress' --private log -- aaron  (sign your messages so we know who to blame in a few years :-D)
+                       // case 'suppress' --private log -- aaron  (so we know who to blame in a few years :-D)
                        // default:
                }
                if ( is_null( $text ) ) {
@@ -326,6 +330,7 @@ class LogFormatter {
 
                $this->plaintext = false;
                $this->irctext = false;
+
                return $text;
        }
 
@@ -359,6 +364,7 @@ class LogFormatter {
        protected function getActionMessage() {
                $message = $this->msg( $this->getMessageKey() );
                $message->params( $this->getMessageParameters() );
+
                return $message;
        }
 
@@ -421,6 +427,7 @@ class LogFormatter {
                                }
                        }
                }
+
                return $params;
        }
 
@@ -446,6 +453,7 @@ class LogFormatter {
 
                // Bad things happens if the numbers are not in correct order
                ksort( $params );
+
                return $this->parsedParameters = $params;
        }
 
@@ -538,6 +546,7 @@ class LogFormatter {
                        }
                        $link = '[[' . $title->getPrefixedText() . ']]';
                }
+
                return $link;
        }
 
@@ -592,6 +601,7 @@ class LogFormatter {
 
                $content = $this->msg( $message )->escaped();
                $attribs = array( 'class' => 'history-deleted' );
+
                return Html::rawElement( 'span', $attribs, $content );
        }
 
@@ -605,6 +615,7 @@ class LogFormatter {
                        return $content;
                }
                $attribs = array( 'class' => 'history-deleted' );
+
                return Html::rawElement( 'span', $attribs, $content );
        }
 
@@ -635,6 +646,7 @@ class LogFormatter {
                                );
                        }
                }
+
                return $element;
        }
 
@@ -654,7 +666,6 @@ class LogFormatter {
                // problems with extensions
                return $this->getMessageParameters();
        }
-
 }
 
 /**
@@ -735,7 +746,9 @@ class LegacyLogFormatter extends LogFormatter {
                $subtype = $this->entry->getSubtype();
 
                // Show unblock/change block link
-               if ( ( $type == 'block' || $type == 'suppress' ) && ( $subtype == 'block' || $subtype == 'reblock' ) ) {
+               if ( ( $type == 'block' || $type == 'suppress' )
+                       && ( $subtype == 'block' || $subtype == 'reblock' )
+               ) {
                        if ( !$this->context->getUser()->isAllowed( 'block' ) ) {
                                return '';
                        }
@@ -750,10 +763,13 @@ class LegacyLogFormatter extends LogFormatter {
                                        $this->msg( 'change-blocklink' )->escaped()
                                )
                        );
+
                        return $this->msg( 'parentheses' )->rawParams(
                                $this->context->getLanguage()->pipeList( $links ) )->escaped();
                // Show change protection link
-               } elseif ( $type == 'protect' && ( $subtype == 'protect' || $subtype == 'modify' || $subtype == 'unprotect' ) ) {
+               } elseif ( $type == 'protect'
+                       && ( $subtype == 'protect' || $subtype == 'modify' || $subtype == 'unprotect' )
+               ) {
                        $links = array(
                                Linker::link( $title,
                                        $this->msg( 'hist' )->escaped(),
@@ -772,6 +788,7 @@ class LegacyLogFormatter extends LogFormatter {
                                        array( 'action' => 'protect' )
                                );
                        }
+
                        return $this->msg( 'parentheses' )->rawParams(
                                $this->context->getLanguage()->pipeList( $links ) )->escaped();
                // Show unmerge link
@@ -791,6 +808,7 @@ class LegacyLogFormatter extends LogFormatter {
                                        'mergepoint' => $params[4]
                                )
                        );
+
                        return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
                }
 
@@ -813,4 +831,3 @@ class LegacyLogFormatter extends LogFormatter {
                return $this->revert;
        }
 }
-
index cc473c1..51c41a8 100644 (file)
@@ -118,6 +118,7 @@ class LogPage {
                        );
                        $rc->notifyRC2UDP();
                }
+
                return $newId;
        }
 
@@ -175,6 +176,7 @@ class LogPage {
         */
        public static function validTypes() {
                global $wgLogTypes;
+
                return $wgLogTypes;
        }
 
@@ -216,6 +218,7 @@ class LogPage {
         */
        public static function logHeader( $type ) {
                global $wgLogHeaders;
+
                return wfMessage( $wgLogHeaders[$type] )->parse();
        }
 
@@ -233,8 +236,8 @@ class LogPage {
         * @return HTML string
         */
        public static function actionText( $type, $action, $title = null, $skin = null,
-               $params = array(), $filterWikilinks = false )
-       {
+               $params = array(), $filterWikilinks = false
+       {
                global $wgLang, $wgContLang, $wgLogActions;
 
                if ( is_null( $skin ) ) {
@@ -254,7 +257,8 @@ class LogPage {
                                $titleLink = self::getTitleLink( $type, $langObjOrNull, $title, $params );
 
                                if ( count( $params ) == 0 ) {
-                                       $rv = wfMessage( $wgLogActions[$key] )->rawParams( $titleLink )->inLanguage( $langObj )->escaped();
+                                       $rv = wfMessage( $wgLogActions[$key] )->rawParams( $titleLink )
+                                               ->inLanguage( $langObj )->escaped();
                                } else {
                                        $details = '';
                                        array_unshift( $params, $titleLink );
@@ -262,7 +266,12 @@ class LogPage {
                                        // User suppression
                                        if ( preg_match( '/^(block|suppress)\/(block|reblock)$/', $key ) ) {
                                                if ( $skin ) {
-                                                       $params[1] = '<span class="blockExpiry" title="&lrm;' . htmlspecialchars( $params[1] ) . '">' .
+                                                       // Localize the duration, and add a tooltip
+                                                       // in English to help visitors from other wikis.
+                                                       // The lrm is needed to make sure that the number
+                                                       // is shown on the correct side of the tooltip text.
+                                                       $durationTooltip = '&lrm;' . htmlspecialchars( $params[1] );
+                                                       $params[1] = "<span class='blockExpiry' title='$durationTooltip'>" .
                                                                $wgLang->translateBlockExpiry( $params[1] ) . '</span>';
                                                } else {
                                                        $params[1] = $wgContLang->translateBlockExpiry( $params[1] );
@@ -281,11 +290,16 @@ class LogPage {
 
                                                // Cascading flag...
                                                if ( $params[2] ) {
-                                                       $details .= ' [' . wfMessage( 'protect-summary-cascade' )->inLanguage( $langObj )->text() . ']';
+                                                       $text = wfMessage( 'protect-summary-cascade' )
+                                                               ->inLanguage( $langObj )->text();
+                                                       $details .= ' ';
+                                                       $details .= wfMessage( 'brackets', $text )->inLanguage( $langObj )->text();
+
                                                }
                                        }
 
-                                       $rv = wfMessage( $wgLogActions[$key] )->rawParams( $params )->inLanguage( $langObj )->escaped() . $details;
+                                       $rv = wfMessage( $wgLogActions[$key] )->rawParams( $params )
+                                                       ->inLanguage( $langObj )->escaped() . $details;
                                }
                        }
                } else {
@@ -402,7 +416,8 @@ class LogPage {
        /**
         * Add a log entry
         *
-        * @param string $action one of '', 'block', 'protect', 'rights', 'delete', 'upload', 'move', 'move_redir'
+        * @param string $action one of '', 'block', 'protect', 'rights', 'delete',
+        *   'upload', 'move', 'move_redir'
         * @param $target Title object
         * @param string $comment description associated
         * @param array $params parameters passed later to wfMessage function
@@ -523,10 +538,12 @@ class LogPage {
                        return ''; //nothing to do
                }
                $flags = explode( ',', $flags );
+               $flagsCount = count( $flags );
 
-               for ( $i = 0; $i < count( $flags ); $i++ ) {
+               for ( $i = 0; $i < $flagsCount; $i++ ) {
                        $flags[$i] = self::formatBlockFlag( $flags[$i], $lang );
                }
+
                return wfMessage( 'parentheses' )->inLanguage( $lang )
                        ->rawParams( $lang->commaList( $flags ) )->escaped();
        }
@@ -593,6 +610,7 @@ class LogPage {
                } else {
                        $key = 'log-description-' . $this->type;
                }
+
                return wfMessage( $key );
        }
 
@@ -609,6 +627,7 @@ class LogPage {
                        // '' always returns true with $user->isAllowed()
                        $restriction = '';
                }
+
                return $restriction;
        }
 
@@ -619,7 +638,7 @@ class LogPage {
         */
        public function isRestricted() {
                $restriction = $this->getRestriction();
+
                return $restriction !== '' && $restriction !== '*';
        }
-
 }
index a11dcb7..1c613e8 100644 (file)
@@ -67,6 +67,7 @@ class LogPager extends ReverseChronologicalPager {
                $query['user'] = $this->performer;
                $query['month'] = $this->mMonth;
                $query['year'] = $this->mYear;
+
                return $query;
        }
 
@@ -87,6 +88,7 @@ class LogPager extends ReverseChronologicalPager {
                                }
                        }
                }
+
                return $filters;
        }
 
@@ -245,8 +247,8 @@ class LogPager extends ReverseChronologicalPager {
                        $index['log_search'] = 'ls_field_val';
                        $index['logging'] = 'PRIMARY';
                        if ( !$this->hasEqualsClause( 'ls_field' )
-                               || !$this->hasEqualsClause( 'ls_value' ) )
-                       {
+                               || !$this->hasEqualsClause( 'ls_value' )
+                       {
                                # Since (ls_field,ls_value,ls_logid) is unique, if the condition is
                                # to match a specific (ls_field,ls_value) tuple, then there will be
                                # no duplicate log rows. Otherwise, we need to remove the duplicates.
@@ -269,6 +271,7 @@ class LogPager extends ReverseChronologicalPager {
                # Add ChangeTags filter query
                ChangeTags::modifyDisplayQuery( $info['tables'], $info['fields'], $info['conds'],
                        $info['join_conds'], $info['options'], $this->mTagFilter );
+
                return $info;
        }
 
@@ -306,6 +309,7 @@ class LogPager extends ReverseChronologicalPager {
                        $this->mResult->seek( 0 );
                }
                wfProfileOut( __METHOD__ );
+
                return '';
        }
 
index 0978f97..3913016 100644 (file)
@@ -31,6 +31,7 @@
 class MoveLogFormatter extends LogFormatter {
        public function getPreloadTitles() {
                $params = $this->extractParameters();
+
                return array( Title::newFromText( $params[3] ) );
        }
 
@@ -40,6 +41,7 @@ class MoveLogFormatter extends LogFormatter {
                if ( isset( $params[4] ) && $params[4] === '1' ) {
                        $key .= '-noredirect';
                }
+
                return $key;
        }
 
@@ -49,14 +51,15 @@ class MoveLogFormatter extends LogFormatter {
                $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' ) )
-               {
+                       || !$this->context->getUser()->isAllowed( 'move' )
+               {
                        return '';
                }
 
@@ -77,6 +80,7 @@ class MoveLogFormatter extends LogFormatter {
                                'wpMovetalk' => 0
                        )
                );
+
                return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
        }
 }
index 602728b..c870d51 100644 (file)
@@ -41,6 +41,7 @@ class NewUsersLogFormatter extends LogFormatter {
                        $params[2] = Message::rawParam( $this->makeUserLink( $target ) );
                        $params[3] = $target->getName();
                }
+
                return $params;
        }
 
@@ -51,6 +52,7 @@ class NewUsersLogFormatter extends LogFormatter {
                        # not needed and can contain incorrect links
                        return '';
                }
+
                return parent::getComment();
        }
 
@@ -60,6 +62,7 @@ class NewUsersLogFormatter extends LogFormatter {
                        //add the user talk to LinkBatch for the userLink
                        return array( Title::makeTitle( NS_USER_TALK, $this->entry->getTarget()->getText() ) );
                }
+
                return array();
        }
 }
index bb76d5a..40be52c 100644 (file)
@@ -27,7 +27,6 @@
  * logs of patrol events
  */
 class PatrolLog {
-
        /**
         * Record a log event for a change being patrolled
         *
@@ -65,6 +64,7 @@ class PatrolLog {
                if ( !$auto ) {
                        $entry->publish( $logid, 'udp' );
                }
+
                return true;
        }
 
@@ -82,5 +82,4 @@ class PatrolLog {
                        '6::auto' => (int)$auto
                );
        }
-
 }
index 507039b..2abaf17 100644 (file)
@@ -35,6 +35,7 @@ class PatrolLogFormatter extends LogFormatter {
                if ( isset( $params[5] ) && $params[5] ) {
                        $key .= '-auto';
                }
+
                return $key;
        }
 
@@ -58,6 +59,7 @@ class PatrolLogFormatter extends LogFormatter {
                }
 
                $params[3] = Message::rawParam( $revlink );
+
                return $params;
        }
 }
index d3daf6e..ac252ae 100644 (file)
@@ -55,6 +55,7 @@ class RightsLogFormatter extends LogFormatter {
                if ( !isset( $params[3] ) && !isset( $params[4] ) ) {
                        $key .= '-legacy';
                }
+
                return $key;
        }
 
index 43ba117..4959687 100644 (file)
@@ -708,7 +708,6 @@ class BitmapHandler extends ImageHandler {
                imagejpeg( $dst_image, $thumbPath, 95 );
        }
 
-
        /**
         * Returns whether the current scaler supports rotation (im and gd do)
         *
index 7c39c81..00b4298 100644 (file)
@@ -116,7 +116,7 @@ class BitmapMetadataHandler {
        function getMetadataArray() {
                // this seems a bit ugly... This is all so its merged in right order
                // based on the MWG recomendation.
-               $temp = Array();
+               $temp = array();
                krsort( $this->metaPriority );
                foreach ( $this->metaPriority as $pri ) {
                        foreach ( $pri as $type ) {
@@ -153,7 +153,7 @@ class BitmapMetadataHandler {
 
                $seg = JpegMetadataExtractor::segmentSplitter( $filename );
                if ( isset( $seg['COM'] ) && isset( $seg['COM'][0] ) ) {
-                       $meta->addMetadata( Array( 'JPEGFileComment' => $seg['COM'] ), 'native' );
+                       $meta->addMetadata( array( 'JPEGFileComment' => $seg['COM'] ), 'native' );
                }
                if ( isset( $seg['PSIR'] ) && count( $seg['PSIR'] ) > 0 ) {
                        foreach ( $seg['PSIR'] as $curPSIRValue ) {
index 9a2794a..50dd266 100644 (file)
@@ -319,7 +319,7 @@ class Exif {
         * Make $this->mFilteredExifData
         */
        function makeFilteredData() {
-               $this->mFilteredExifData = Array();
+               $this->mFilteredExifData = array();
 
                foreach ( array_keys( $this->mRawExifData ) as $section ) {
                        if ( !in_array( $section, array_keys( $this->mExifTags ) ) ) {
index d3fa36d..aa9db3a 100644 (file)
@@ -97,12 +97,12 @@ class ExifBitmapHandler extends BitmapHandler {
                wfSuppressWarnings();
                $exif = unserialize( $metadata );
                wfRestoreWarnings();
-               if ( !isset( $exif['MEDIAWIKI_EXIF_VERSION'] ) ||
-                       $exif['MEDIAWIKI_EXIF_VERSION'] != Exif::version() )
-               {
-                       if ( isset( $exif['MEDIAWIKI_EXIF_VERSION'] ) &&
-                               $exif['MEDIAWIKI_EXIF_VERSION'] == 1 )
-                       {
+               if ( !isset( $exif['MEDIAWIKI_EXIF_VERSION'] )
+                       || $exif['MEDIAWIKI_EXIF_VERSION'] != Exif::version()
+               {
+                       if ( isset( $exif['MEDIAWIKI_EXIF_VERSION'] )
+                               && $exif['MEDIAWIKI_EXIF_VERSION'] == 1
+                       {
                                //back-compatible but old
                                wfDebug( __METHOD__ . ": back-compat version\n" );
                                return self::METADATA_COMPATIBLE;
@@ -129,10 +129,10 @@ class ExifBitmapHandler extends BitmapHandler {
 
        public function getCommonMetaArray( File $file ) {
                $metadata = $file->getMetadata();
-               if ( $metadata === self::OLD_BROKEN_FILE ||
-                       $metadata === self::BROKEN_FILE ||
-                       $this->isMetadataValid( $file, $metadata ) === self::METADATA_BAD )
-               {
+               if ( $metadata === self::OLD_BROKEN_FILE
+                       || $metadata === self::BROKEN_FILE
+                       || $this->isMetadataValid( $file, $metadata ) === self::METADATA_BAD
+               {
                        // So we don't try and display metadata from PagedTiffHandler
                        // for example when using InstantCommons.
                        return array();
index 1b1841c..74e51cf 100644 (file)
@@ -105,7 +105,7 @@ class FormatMetadata extends ContextSource {
                        // This seems ugly to wrap non-array's in an array just to unwrap again,
                        // especially when most of the time it is not an array
                        if ( !is_array( $tags[$tag] ) ) {
-                               $vals = Array( $vals );
+                               $vals = array( $vals );
                        }
 
                        // _type is a special value to say what array type
@@ -1479,6 +1479,7 @@ class FormatMetadata extends ContextSource {
 
                // If revision deleted, exit immediately
                if ( $file->isDeleted( File::DELETED_FILE ) ) {
+                       wfProfileOut( __METHOD__ );
                        return array();
                }
 
@@ -1616,8 +1617,7 @@ class FormatMetadata extends ContextSource {
         * @return mixed value in best language, null if there were no languages at all
         * @since 1.23
         */
-       protected function resolveMultilangValue( $value )
-       {
+       protected function resolveMultilangValue( $value ) {
                if (
                        !is_array( $value )
                        || !isset( $value['_type'] )
@@ -1731,8 +1731,7 @@ class FormatMetadata extends ContextSource {
         * @return array
         * @since 1.23
         */
-       protected function getPriorityLanguages()
-       {
+       protected function getPriorityLanguages() {
                $priorityLanguages = Language::getFallbacksIncludingSiteLanguage( $this->getLanguage()->getCode() );
                $priorityLanguages = array_merge( (array) $this->getLanguage()->getCode(), $priorityLanguages[0], $priorityLanguages[1] );
                return $priorityLanguages;
index 887afa3..77ec5a6 100644 (file)
@@ -163,8 +163,8 @@ class GIFMetadataExtractor {
 
                                        $commentCount = count( $comment );
                                        if ( $commentCount === 0
-                                               || $comment[$commentCount - 1] !== $data )
-                                       {
+                                               || $comment[$commentCount - 1] !== $data
+                                       {
                                                // Some applications repeat the same comment on each
                                                // frame of an animated GIF image, so if this comment
                                                // is identical to the last, only extract once.
@@ -217,8 +217,8 @@ class GIFMetadataExtractor {
                                                $xmp = self::readBlock( $fh, true );
 
                                                if ( substr( $xmp, -257, 3 ) !== "\x01\xFF\xFE"
-                                                       || substr( $xmp, -4 ) !== "\x03\x02\x01\x00" )
-                                               {
+                                                       || substr( $xmp, -4 ) !== "\x03\x02\x01\x00"
+                                               {
                                                        // this is just a sanity check.
                                                        throw new Exception( "XMP does not have magic trailer!" );
                                                }
index 544dd21..d3af31b 100644 (file)
@@ -40,7 +40,7 @@ class IPTC {
         */
        static function parse( $rawData ) {
                $parsed = iptcparse( $rawData );
-               $data = Array();
+               $data = array();
                if ( !is_array( $parsed ) ) {
                                return $data;
                }
@@ -225,7 +225,7 @@ class IPTC {
                                        if ( isset( $parsed['2#060'] ) ) {
                                                $time = $parsed['2#060'];
                                        } else {
-                                               $time = Array();
+                                               $time = array();
                                        }
                                        $timestamp = self::timeHelper( $val, $time, $c );
                                        if ( $timestamp ) {
@@ -239,7 +239,7 @@ class IPTC {
                                        if ( isset( $parsed['2#063'] ) ) {
                                                $time = $parsed['2#063'];
                                        } else {
-                                               $time = Array();
+                                               $time = array();
                                        }
                                        $timestamp = self::timeHelper( $val, $time, $c );
                                        if ( $timestamp ) {
@@ -252,7 +252,7 @@ class IPTC {
                                        if ( isset( $parsed['2#035'] ) ) {
                                                $time = $parsed['2#035'];
                                        } else {
-                                               $time = Array();
+                                               $time = array();
                                        }
                                        $timestamp = self::timeHelper( $val, $time, $c );
                                        if ( $timestamp ) {
@@ -265,7 +265,7 @@ class IPTC {
                                        if ( isset( $parsed['2#038'] ) ) {
                                                $time = $parsed['2#038'];
                                        } else {
-                                               $time = Array();
+                                               $time = array();
                                        }
                                        $timestamp = self::timeHelper( $val, $time, $c );
                                        if ( $timestamp ) {
@@ -315,9 +315,7 @@ class IPTC {
                                        foreach ( $codes as $ic ) {
                                                $fields = explode( ':', $ic, 3 );
 
-                                               if ( count( $fields ) < 2 ||
-                                                       $fields[0] !== 'IPTC' )
-                                               {
+                                               if ( count( $fields ) < 2 || $fields[0] !== 'IPTC' ) {
                                                        wfDebugLog( 'IPTC', 'IPTC: '
                                                                . 'Invalid 2:12 - ' . $ic );
                                                        break;
index e079003..b6586d0 100644 (file)
@@ -213,7 +213,6 @@ abstract class ImageHandler extends MediaHandler {
                return $image->getWidth() * $image->getHeight();
        }
 
-
        /**
         * @param $file File
         * @return string
index ddb8efd..56dcae0 100644 (file)
@@ -39,7 +39,7 @@ abstract class MediaHandler {
        /**
         * Get a MediaHandler for a given MIME type from the instance cache
         *
-        * @param $type string
+        * @param string $type
         *
         * @return MediaHandler
         */
@@ -70,7 +70,7 @@ abstract class MediaHandler {
         * Return true to accept the parameter, and false to reject it.
         * If you return false, the parser will do something quiet and forgiving.
         *
-        * @param $name
+        * @param string $name
         * @param $value
         */
        abstract function validateParam( $name, $value );
@@ -78,16 +78,16 @@ abstract class MediaHandler {
        /**
         * Merge a parameter array into a string appropriate for inclusion in filenames
         *
-        * @param $params array Array of parameters that have been through normaliseParams.
-        * @return String
+        * @param array $params Array of parameters that have been through normaliseParams.
+        * @return string
         */
        abstract function makeParamString( $params );
 
        /**
         * Parse a param string made with makeParamString back into an array
         *
-        * @param $str string The parameter string without file name (e.g. 122px)
-        * @return Array|Boolean Array of parameters or false on failure.
+        * @param string $str The parameter string without file name (e.g. 122px)
+        * @return array|bool Array of parameters or false on failure.
         */
        abstract function parseParamString( $str );
 
@@ -104,19 +104,19 @@ abstract class MediaHandler {
         * Get an image size array like that returned by getimagesize(), or false if it
         * can't be determined.
         *
-        * @param $image File: the image object, or false if there isn't one
+        * @param File $image The image object, or false if there isn't one
         * @param string $path the filename
-        * @return Array Follow the format of PHP getimagesize() internal function. See http://www.php.net/getimagesize
+        * @return array Follow the format of PHP getimagesize() internal function. See http://www.php.net/getimagesize
         */
        abstract function getImageSize( $image, $path );
 
        /**
         * Get handler-specific metadata which will be saved in the img_metadata field.
         *
-        * @param $image File: the image object, or false if there isn't one.
+        * @param File $image The image object, or false if there isn't one.
         *   Warning, FSFile::getPropsFromPath might pass an (object)array() instead (!)
-        * @param string $path the filename
-        * @return String
+        * @param string $path The filename
+        * @return string
         */
        function getMetadata( $image, $path ) {
                return '';
@@ -135,11 +135,11 @@ abstract class MediaHandler {
         * version 3 it might add to the end of the array the element 'foo=3'. if the core metadata
         * version is 2, the end version string would look like '2;foo=3'.
         *
-        * @return string version string
+        * @return string Version string
         */
        static function getMetadataVersion() {
-               $version = Array( '2' ); // core metadata version
-               wfRunHooks( 'GetMetadataVersion', Array( &$version ) );
+               $version = array( '2' ); // core metadata version
+               wfRunHooks( 'GetMetadataVersion', array( &$version ) );
                return implode( ';', $version );
        }
 
@@ -149,9 +149,9 @@ abstract class MediaHandler {
         * By default just returns $metadata, but can be used to allow
         * media handlers to convert between metadata versions.
         *
-        * @param $metadata Mixed String or Array metadata array (serialized if string)
-        * @param $version Integer target version
-        * @return Array serialized metadata in specified version, or $metadata on fail.
+        * @param mixed|string|array $metadata Metadata array (serialized if string)
+        * @param int $version Target version
+        * @return array Serialized metadata in specified version, or $metadata on fail.
         */
        function convertMetadataVersion( $metadata, $version = 1 ) {
                if ( !is_array( $metadata ) ) {
@@ -167,7 +167,7 @@ abstract class MediaHandler {
 
        /**
         * Get a string describing the type of metadata, for display purposes.
-        *
+        * @param $image
         * @return string
         */
        function getMetadataType( $image ) {
@@ -217,7 +217,7 @@ abstract class MediaHandler {
         *
         * @param File $file
         *
-        * @return Array or false if interface not supported
+        * @return array|bool False if interface not supported
         * @since 1.23
         */
        public function getCommonMetaArray( File $file ) {
@@ -241,7 +241,7 @@ abstract class MediaHandler {
         * Get a MediaTransformOutput object representing the transformed output. Does not
         * actually do the transform.
         *
-        * @param $image File: the image object
+        * @param File $image The image object
         * @param string $dstPath filesystem destination path
         * @param string $dstUrl Destination URL to use in output HTML
         * @param array $params Arbitrary set of parameters validated by $this->validateParam()
@@ -255,12 +255,12 @@ abstract class MediaHandler {
         * Get a MediaTransformOutput object representing the transformed output. Does the
         * transform unless $flags contains self::TRANSFORM_LATER.
         *
-        * @param $image File: the image object
+        * @param File $image The image object
         * @param string $dstPath filesystem destination path
         * @param string $dstUrl destination URL to use in output HTML
         * @param array $params arbitrary set of parameters validated by $this->validateParam()
         *   Note: These parameters have *not* gone through $this->normaliseParams()
-        * @param $flags Integer: a bitfield, may contain self::TRANSFORM_LATER
+        * @param int $flags A bitfield, may contain self::TRANSFORM_LATER
         *
         * @return MediaTransformOutput
         */
@@ -269,9 +269,9 @@ abstract class MediaHandler {
        /**
         * Get the thumbnail extension and MIME type for a given source MIME type
         *
-        * @param String $ext Extension of original file
-        * @param String $mime Mime type of original file
-        * @param Array $params Handler specific rendering parameters
+        * @param string $ext Extension of original file
+        * @param string $mime Mime type of original file
+        * @param array $params Handler specific rendering parameters
         * @return array thumbnail extension and MIME type
         */
        function getThumbType( $ext, $mime, $params = null ) {
@@ -292,8 +292,8 @@ abstract class MediaHandler {
 
        /**
         * Get useful response headers for GET/HEAD requests for a file with the given metadata
-        * @param $metadata mixed Result of the getMetadata() function of this handler for a file
-        * @return Array
+        * @param mixed $metadata Result of the getMetadata() function of this handler for a file
+        * @return array
         */
        public function getStreamHeaders( $metadata ) {
                return array();
index 2e33bb9..831e043 100644 (file)
@@ -45,7 +45,7 @@ class SVGReader {
 
        private $reader = null;
        private $mDebug = false;
-       private $metadata = Array();
+       private $metadata = array();
 
        /**
         * Constructor
index e77d384..a80a0c8 100644 (file)
@@ -103,12 +103,12 @@ class XCFHandler extends BitmapHandler {
                #        (enum GimpImageBaseType in libgimpbase/gimpbaseenums.h)
                try {
                        $header = wfUnpack(
-                                 "A9magic"     # A: space padded
-                               . "/a5version"  # a: zero padded
-                               . "/Nwidth"     # \
-                               . "/Nheight"    # N: unsigned long 32bit big endian
-                               . "/Nbase_type" # /
-                       , $binaryHeader
+                               "A9magic" .        # A: space padded
+                                       "/a5version" . # a: zero padded
+                                       "/Nwidth" .    # \
+                                       "/Nheight" .   # N: unsigned long 32bit big endian
+                                       "/Nbase_type", # /
+                               $binaryHeader
                        );
                } catch ( MWException $mwe ) {
                        return false;
index 7eb3d19..3517986 100644 (file)
@@ -155,7 +155,7 @@ class XMPReader {
 
                $data = $this->results;
 
-               wfRunHooks( 'XMPGetResults', Array( &$data ) );
+               wfRunHooks( 'XMPGetResults', array( &$data ) );
 
                if ( isset( $data['xmp-special']['AuthorsPosition'] )
                        && is_string( $data['xmp-special']['AuthorsPosition'] )
@@ -608,8 +608,8 @@ class XMPReader {
        function endElement( $parser, $elm ) {
                if ( $elm === ( self::NS_RDF . ' RDF' )
                        || $elm === 'adobe:ns:meta/ xmpmeta'
-                       || $elm === 'adobe:ns:meta/ xapmeta' )
-               {
+                       || $elm === 'adobe:ns:meta/ xapmeta'
+               {
                        // ignore these.
                        return;
                }
@@ -897,8 +897,8 @@ class XMPReader {
 
                        if ( isset( $this->items[$ns][$tag] ) ) {
                                if ( isset( $this->items[$ns][$this->ancestorStruct]['children'] )
-                                       && !isset( $this->items[$ns][$this->ancestorStruct]['children'][$tag] ) )
-                               {
+                                       && !isset( $this->items[$ns][$this->ancestorStruct]['children'][$tag] )
+                               {
                                        // This assumes that we don't have inter-namespace nesting
                                        // which we don't in all the properties we're interested in.
                                        throw new MWException( " <$tag> appeared nested in <" . $this->ancestorStruct
@@ -996,8 +996,8 @@ class XMPReader {
                        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'] ) )
-               {
+                       || !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" );
                }
@@ -1026,8 +1026,8 @@ class XMPReader {
 
                if ( $elm === self::NS_RDF . ' RDF'
                        || $elm === 'adobe:ns:meta/ xmpmeta'
-                       || $elm === 'adobe:ns:meta/ xapmeta' )
-               {
+                       || $elm === 'adobe:ns:meta/ xapmeta'
+               {
                        /* ignore. */
                        return;
                } elseif ( $elm === self::NS_RDF . ' Description' ) {
@@ -1119,8 +1119,8 @@ class XMPReader {
 
                if ( isset( $attribs[self::NS_RDF . ' parseType'] )
                        && $attribs[self::NS_RDF . ' parseType'] === 'Resource'
-                       && $this->mode[0] === self::MODE_SIMPLE )
-               {
+                       && $this->mode[0] === self::MODE_SIMPLE
+               {
                        // this is equivalent to having an inner rdf:Description
                        $this->mode[0] = self::MODE_QDESC;
                }
index f0b2cb5..afc9ece 100644 (file)
@@ -35,7 +35,7 @@ class XMPInfo {
                if ( !self::$ranHooks ) {
                        // This is for if someone makes a custom metadata extension.
                        // For example, a medical wiki might want to decode DICOM xmp properties.
-                       wfRunHooks( 'XMPGetInfo', Array( &self::$items ) );
+                       wfRunHooks( 'XMPGetInfo', array( &self::$items ) );
                        self::$ranHooks = true; // Only want to do this once.
                }
                return self::$items;
index e5f60b5..f0a9128 100644 (file)
@@ -1026,9 +1026,9 @@ class MWMemcached {
 
                $len = strlen( $val );
 
-               if ( $this->_have_zlib && $this->_compress_enable &&
-                       $this->_compress_threshold && $len >= $this->_compress_threshold )
-               {
+               if ( $this->_have_zlib && $this->_compress_enable
+                       && $this->_compress_threshold && $len >= $this->_compress_threshold
+               {
                        $c_val = gzcompress( $val, 9 );
                        $c_len = strlen( $c_val );
 
index acf2703..e845b55 100644 (file)
@@ -114,8 +114,8 @@ class SqlBagOStuff extends BagOStuff {
 
                        # Don't keep timing out trying to connect for each call if the DB is down
                        if ( isset( $this->connFailureErrors[$serverIndex] )
-                               && ( time() - $this->connFailureTimes[$serverIndex] ) < 60 )
-                       {
+                               && ( time() - $this->connFailureTimes[$serverIndex] ) < 60
+                       {
                                throw $this->connFailureErrors[$serverIndex];
                        }
 
@@ -248,13 +248,13 @@ class SqlBagOStuff extends BagOStuff {
                                        $db = $this->getDB( $row->serverIndex );
                                        if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
                                                $this->debug( "get: key has expired, deleting" );
-                                               $db->begin( __METHOD__ );
+                                               $db->commit( __METHOD__, 'flush' );
                                                # Put the expiry time in the WHERE condition to avoid deleting a
                                                # newly-inserted value
                                                $db->delete( $row->tableName,
                                                        array( 'keyname' => $key, 'exptime' => $row->exptime ),
                                                        __METHOD__ );
-                                               $db->commit( __METHOD__ );
+                                               $db->commit( __METHOD__, 'flush' );
                                                $values[$key] = false;
                                        } else { // HIT
                                                $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
@@ -296,7 +296,7 @@ class SqlBagOStuff extends BagOStuff {
 
                                $encExpiry = $db->timestamp( $exptime );
                        }
-                       $db->begin( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                        // (bug 24425) use a replace if the db supports it instead of
                        // delete/insert to avoid clashes with conflicting keynames
                        $db->replace(
@@ -307,7 +307,7 @@ class SqlBagOStuff extends BagOStuff {
                                        'value' => $db->encodeBlob( $this->serialize( $value ) ),
                                        'exptime' => $encExpiry
                                ), __METHOD__ );
-                       $db->commit( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                } catch ( DBError $e ) {
                        $this->handleWriteError( $e, $serverIndex );
                        return false;
@@ -341,7 +341,7 @@ class SqlBagOStuff extends BagOStuff {
                                }
                                $encExpiry = $db->timestamp( $exptime );
                        }
-                       $db->begin( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                        // (bug 24425) use a replace if the db supports it instead of
                        // delete/insert to avoid clashes with conflicting keynames
                        $db->update(
@@ -357,7 +357,7 @@ class SqlBagOStuff extends BagOStuff {
                                ),
                                __METHOD__
                        );
-                       $db->commit( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                } catch ( DBQueryError $e ) {
                        $this->handleWriteError( $e, $serverIndex );
 
@@ -376,12 +376,12 @@ class SqlBagOStuff extends BagOStuff {
                list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
                try {
                        $db = $this->getDB( $serverIndex );
-                       $db->begin( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                        $db->delete(
                                $tableName,
                                array( 'keyname' => $key ),
                                __METHOD__ );
-                       $db->commit( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                } catch ( DBError $e ) {
                        $this->handleWriteError( $e, $serverIndex );
                        return false;
@@ -400,7 +400,7 @@ class SqlBagOStuff extends BagOStuff {
                try {
                        $db = $this->getDB( $serverIndex );
                        $step = intval( $step );
-                       $db->begin( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                        $row = $db->selectRow(
                                $tableName,
                                array( 'value', 'exptime' ),
@@ -409,14 +409,14 @@ class SqlBagOStuff extends BagOStuff {
                                array( 'FOR UPDATE' ) );
                        if ( $row === false ) {
                                // Missing
-                               $db->commit( __METHOD__ );
+                               $db->commit( __METHOD__, 'flush' );
 
                                return null;
                        }
                        $db->delete( $tableName, array( 'keyname' => $key ), __METHOD__ );
                        if ( $this->isExpired( $db, $row->exptime ) ) {
                                // Expired, do not reinsert
-                               $db->commit( __METHOD__ );
+                               $db->commit( __METHOD__, 'flush' );
 
                                return null;
                        }
@@ -434,7 +434,7 @@ class SqlBagOStuff extends BagOStuff {
                                // Race condition. See bug 28611
                                $newValue = null;
                        }
-                       $db->commit( __METHOD__ );
+                       $db->commit( __METHOD__, 'flush' );
                } catch ( DBError $e ) {
                        $this->handleWriteError( $e, $serverIndex );
                        return null;
@@ -524,7 +524,7 @@ class SqlBagOStuff extends BagOStuff {
                                                        $maxExpTime = $row->exptime;
                                                }
 
-                                               $db->begin( __METHOD__ );
+                                               $db->commit( __METHOD__, 'flush' );
                                                $db->delete(
                                                        $this->getTableNameByShard( $i ),
                                                        array(
@@ -533,7 +533,7 @@ class SqlBagOStuff extends BagOStuff {
                                                                'keyname' => $keys
                                                        ),
                                                        __METHOD__ );
-                                               $db->commit( __METHOD__ );
+                                               $db->commit( __METHOD__, 'flush' );
 
                                                if ( $progressCallback ) {
                                                        if ( intval( $totalSeconds ) === 0 ) {
@@ -566,9 +566,9 @@ class SqlBagOStuff extends BagOStuff {
                        try {
                                $db = $this->getDB( $serverIndex );
                                for ( $i = 0; $i < $this->shards; $i++ ) {
-                                       $db->begin( __METHOD__ );
+                                       $db->commit( __METHOD__, 'flush' );
                                        $db->delete( $this->getTableNameByShard( $i ), '*', __METHOD__ );
-                                       $db->commit( __METHOD__ );
+                                       $db->commit( __METHOD__, 'flush' );
                                }
                        } catch ( DBError $e ) {
                                $this->handleWriteError( $e, $serverIndex );
@@ -678,18 +678,18 @@ class SqlBagOStuff extends BagOStuff {
                for ( $serverIndex = 0; $serverIndex < $this->numServers; $serverIndex++ ) {
                        $db = $this->getDB( $serverIndex );
                        if ( $db->getType() !== 'mysql'
-                               || version_compare( $db->getServerVersion(), '4.1.0', '<' ) )
-                       {
+                               || version_compare( $db->getServerVersion(), '4.1.0', '<' )
+                       {
                                throw new MWException( __METHOD__ . ' is not supported on this DB server' );
                        }
 
                        for ( $i = 0; $i < $this->shards; $i++ ) {
-                               $db->begin( __METHOD__ );
+                               $db->commit( __METHOD__, 'flush' );
                                $db->query(
                                        'CREATE TABLE ' . $db->tableName( $this->getTableNameByShard( $i ) ) .
                                        ' LIKE ' . $db->tableName( 'objectcache' ),
                                        __METHOD__ );
-                               $db->commit( __METHOD__ );
+                               $db->commit( __METHOD__, 'flush' );
                        }
                }
        }
index a4203b0..7b8935a 100644 (file)
@@ -37,14 +37,17 @@ class CacheTime {
                $mCacheExpiry = null,         # Seconds after which the object should expire, use 0 for uncachable. Used in ParserCache.
                $mContainsOldMagic;           # Boolean variable indicating if the input contained variables like {{CURRENTDAY}}
 
-       function getCacheTime()              { return $this->mCacheTime; }
+       /**
+        * @return string TS_MW timestamp
+        */
+       function getCacheTime()              { return wfTimestamp( TS_MW, $this->mCacheTime ); }
 
        function containsOldMagic()          { return $this->mContainsOldMagic; }
        function setContainsOldMagic( $com ) { return wfSetVar( $this->mContainsOldMagic, $com ); }
 
        /**
         * setCacheTime() sets the timestamp expressing when the page has been rendered.
-        * This doesn not control expiry, see updateCacheExpiry() for that!
+        * This does not control expiry, see updateCacheExpiry() for that!
         * @param $t string
         * @return string
         */
index 44c7458..f57d412 100644 (file)
@@ -427,7 +427,7 @@ class CoreParserFunctions {
         * @param mixed $value value to match
         * @return boolean true on successful match
         */
-       static private function matchAgainstMagicword( $magicword, $value ) {
+       private static function matchAgainstMagicword( $magicword, $value ) {
                if ( strval( $value ) === '' ) {
                        return false;
                }
index b629776..40c0a89 100644 (file)
@@ -160,8 +160,8 @@ class LinkHolderArray {
                $pos = 0;
                while ( $pos < strlen( $text ) ) {
                        if ( !preg_match( '/<!--LINK (\d+):(\d+)-->/',
-                               $text, $m, PREG_OFFSET_CAPTURE, $pos ) )
-                       {
+                               $text, $m, PREG_OFFSET_CAPTURE, $pos )
+                       {
                                break;
                        }
                        $ns = $m[1][0];
index 2df3160..9be75ae 100644 (file)
@@ -420,8 +420,8 @@ class Parser {
                 * d) it is an interface message (which is in the user language)
                 */
                if ( !( $options->getDisableContentConversion()
-                               || isset( $this->mDoubleUnderscores['nocontentconvert'] ) ) )
-               {
+                       || isset( $this->mDoubleUnderscores['nocontentconvert'] ) )
+               {
                        if ( !$this->mOptions->getInterfaceMessage() ) {
                                # The position of the convert() call should not be changed. it
                                # assumes that the links are all replaced and the only thing left
@@ -438,10 +438,10 @@ class Parser {
                 * automatic link conversion.
                 */
                if ( !( $options->getDisableTitleConversion()
-                               || isset( $this->mDoubleUnderscores['nocontentconvert'] )
-                               || isset( $this->mDoubleUnderscores['notitleconvert'] )
-                               || $this->mOutput->getDisplayTitle() !== false ) )
-               {
+                       || isset( $this->mDoubleUnderscores['nocontentconvert'] )
+                       || isset( $this->mDoubleUnderscores['notitleconvert'] )
+                       || $this->mOutput->getDisplayTitle() !== false )
+               {
                        $convruletitle = $this->getConverterLanguage()->getConvRuleTitle();
                        if ( $convruletitle ) {
                                $this->mOutput->setTitleText( $convruletitle );
@@ -1696,9 +1696,9 @@ class Parser {
        public static function getExternalLinkRel( $url = false, $title = null ) {
                global $wgNoFollowLinks, $wgNoFollowNsExceptions, $wgNoFollowDomainExceptions;
                $ns = $title ? $title->getNamespace() : false;
-               if ( $wgNoFollowLinks && !in_array( $ns, $wgNoFollowNsExceptions ) &&
-                               !wfMatchesDomainList( $url, $wgNoFollowDomainExceptions ) )
-               {
+               if ( $wgNoFollowLinks && !in_array( $ns, $wgNoFollowNsExceptions )
+                       && !wfMatchesDomainList( $url, $wgNoFollowDomainExceptions )
+               {
                        return 'nofollow';
                }
                return null;
@@ -1788,14 +1788,14 @@ class Parser {
                        $imagematch = false;
                }
                if ( $this->mOptions->getAllowExternalImages()
-                        || ( $imagesexception && $imagematch ) ) {
+                       || ( $imagesexception && $imagematch ) ) {
                        if ( preg_match( self::EXT_IMAGE_REGEX, $url ) ) {
                                # Image found
                                $text = Linker::makeExternalImage( $url );
                        }
                }
                if ( !$text && $this->mOptions->getEnableImageWhitelist()
-                        && preg_match( self::EXT_IMAGE_REGEX, $url ) ) {
+                       && preg_match( self::EXT_IMAGE_REGEX, $url ) ) {
                        $whitelist = explode( "\n", wfMessage( 'external_image_whitelist' )->inContentLanguage()->text() );
                        foreach ( $whitelist as $entry ) {
                                # Sanitize the regex fragment, make it case-insensitive, ignore blank entries/comments
@@ -1928,11 +1928,10 @@ class Parser {
                                # Still some problems for cases where the ] is meant to be outside punctuation,
                                # and no image is in sight. See bug 2095.
                                #
-                               if ( $text !== '' &&
-                                       substr( $m[3], 0, 1 ) === ']' &&
-                                       strpos( $text, '[' ) !== false
-                               )
-                               {
+                               if ( $text !== ''
+                                       && substr( $m[3], 0, 1 ) === ']'
+                                       && strpos( $text, '[' ) !== false
+                               ) {
                                        $text .= ']'; # so that replaceExternalLinks($text) works later
                                        $m[3] = substr( $m[3], 1 );
                                }
@@ -3387,8 +3386,8 @@ class Parser {
                        if ( !$title->isExternal() ) {
                                if ( $title->isSpecialPage()
                                        && $this->mOptions->getAllowSpecialInclusion()
-                                       && $this->ot['html'] )
-                               {
+                                       && $this->ot['html']
+                               {
                                        // Pass the template arguments as URL parameters.
                                        // "uselang" will have no effect since the Language object
                                        // is forced to the one defined in ParserOptions.
@@ -3506,8 +3505,8 @@ class Parser {
                        $text = wfEscapeWikiText( $text );
                } elseif ( is_string( $text )
                        && !$piece['lineStart']
-                       && preg_match( '/^(?:{\\||:|;|#|\*)/', $text ) )
-               {
+                       && preg_match( '/^(?:{\\||:|;|#|\*)/', $text )
+               {
                        # Bug 529: if the template begins with a table or block-level
                        # element, it should be treated as beginning a new line.
                        # This behavior is somewhat controversial.
@@ -3947,11 +3946,10 @@ class Parser {
                $object = false;
                $text = $frame->getArgument( $argName );
                if ( $text === false && $parts->getLength() > 0
-                 && (
-                       $this->ot['html']
-                       || $this->ot['pre']
-                       || ( $this->ot['wiki'] && $frame->isTemplate() )
-                 )
+                       && ( $this->ot['html']
+                               || $this->ot['pre']
+                               || ( $this->ot['wiki'] && $frame->isTemplate() )
+                       )
                ) {
                        # No match in frame, use the supplied default
                        $object = $parts->item( 0 )->getChildren();
@@ -5432,10 +5430,10 @@ class Parser {
                $params['frame']['caption'] = $caption;
 
                # Will the image be presented in a frame, with the caption below?
-               $imageIsFramed = isset( $params['frame']['frame'] ) ||
-                                                isset( $params['frame']['framed'] ) ||
-                                                isset( $params['frame']['thumbnail'] ) ||
-                                                isset( $params['frame']['manualthumb'] );
+               $imageIsFramed = isset( $params['frame']['frame'] )
+                       || isset( $params['frame']['framed'] )
+                       || isset( $params['frame']['thumbnail'] )
+                       || isset( $params['frame']['manualthumb'] );
 
                # In the old days, [[Image:Foo|text...]] would set alt text.  Later it
                # came to also set the caption, ordinary text after the image -- which
index e12f32d..8393216 100644 (file)
@@ -493,8 +493,6 @@ class ParserOptions {
         * so users sharign the options with vary for the same page share
         * the same cached data safely.
         *
-        * Replaces User::getPageRenderingHash()
-        *
         * Extensions which require it should install 'PageRenderingHash' hook,
         * which will give them a chance to modify this key based on their own
         * settings.
index 2950227..76d14cf 100644 (file)
@@ -59,8 +59,8 @@ class ParserOutput extends CacheTime {
        const EDITSECTION_REGEX = '#<(?:mw:)?editsection page="(.*?)" section="(.*?)"(?:/>|>(.*?)(</(?:mw:)?editsection>))#';
 
        function __construct( $text = '', $languageLinks = array(), $categoryLinks = array(),
-               $containsOldMagic = false, $titletext = '' )
-       {
+               $containsOldMagic = false, $titletext = ''
+       {
                $this->mText = $text;
                $this->mLanguageLinks = $languageLinks;
                $this->mCategories = $categoryLinks;
index 3138f48..6b2a874 100644 (file)
@@ -160,7 +160,6 @@ class Preprocessor_DOM implements Preprocessor {
                        $xml = $this->preprocessToXml( $text, $flags );
                }
 
-
                // Fail if the number of elements exceeds acceptable limits
                // Do not attempt to generate the DOM
                $this->parser->mGeneratedPPNodeCount += substr_count( $xml, '<' );
@@ -400,14 +399,14 @@ class Preprocessor_DOM implements Preprocessor {
                                                // the overall start. That's not how Sanitizer::removeHTMLcomments() did it, but
                                                // it's a possible beneficial b/c break.
                                                if ( $wsStart > 0 && substr( $text, $wsStart - 1, 1 ) == "\n"
-                                                       && substr( $text, $wsEnd + 1, 1 ) == "\n" )
-                                               {
+                                                       && substr( $text, $wsEnd + 1, 1 ) == "\n"
+                                               {
                                                        // Remove leading whitespace from the end of the accumulator
                                                        // Sanity check first though
                                                        $wsLength = $i - $wsStart;
                                                        if ( $wsLength > 0
-                                                               && strspn( $accum, " \t", -$wsLength ) === $wsLength )
-                                                       {
+                                                               && strspn( $accum, " \t", -$wsLength ) === $wsLength
+                                                       {
                                                                $accum = substr( $accum, 0, -$wsLength );
                                                        }
 
@@ -476,8 +475,8 @@ class Preprocessor_DOM implements Preprocessor {
                                        $attrEnd = $tagEndPos;
                                        // Find closing tag
                                        if ( preg_match( "/<\/" . preg_quote( $name, '/' ) . "\s*>/i",
-                                                       $text, $matches, PREG_OFFSET_CAPTURE, $tagEndPos + 1 ) )
-                                       {
+                                                       $text, $matches, PREG_OFFSET_CAPTURE, $tagEndPos + 1 )
+                                       {
                                                $inner = substr( $text, $tagEndPos + 1, $matches[0][1] - $tagEndPos - 1 );
                                                $i = $matches[0][1] + strlen( $matches[0][0] );
                                                $close = '<close>' . htmlspecialchars( $matches[0][0] ) . '</close>';
@@ -1142,8 +1141,8 @@ class PPFrame_DOM implements PPFrame {
                                        # Remove it in HTML, pre+remove and STRIP_COMMENTS modes
                                        if ( $this->parser->ot['html']
                                                || ( $this->parser->ot['pre'] && $this->parser->mOptions->getRemoveComments() )
-                                               || ( $flags & PPFrame::STRIP_COMMENTS ) )
-                                       {
+                                               || ( $flags & PPFrame::STRIP_COMMENTS )
+                                       {
                                                $out .= '';
                                        }
                                        # Add a strip marker in PST mode so that pstPass2() can run some old-fashioned regexes on the result
index 2fc5e11..c2ab54e 100644 (file)
@@ -326,15 +326,15 @@ class Preprocessor_Hash implements Preprocessor {
                                                // the overall start. That's not how Sanitizer::removeHTMLcomments() did it, but
                                                // it's a possible beneficial b/c break.
                                                if ( $wsStart > 0 && substr( $text, $wsStart - 1, 1 ) == "\n"
-                                                       && substr( $text, $wsEnd + 1, 1 ) == "\n" )
-                                               {
+                                                       && substr( $text, $wsEnd + 1, 1 ) == "\n"
+                                               {
                                                        // Remove leading whitespace from the end of the accumulator
                                                        // Sanity check first though
                                                        $wsLength = $i - $wsStart;
                                                        if ( $wsLength > 0
                                                                && $accum->lastNode instanceof PPNode_Hash_Text
-                                                               && strspn( $accum->lastNode->value, " \t", -$wsLength ) === $wsLength )
-                                                       {
+                                                               && strspn( $accum->lastNode->value, " \t", -$wsLength ) === $wsLength
+                                                       {
                                                                $accum->lastNode->value = substr( $accum->lastNode->value, 0, -$wsLength );
                                                        }
 
@@ -404,8 +404,8 @@ class Preprocessor_Hash implements Preprocessor {
                                        $attrEnd = $tagEndPos;
                                        // Find closing tag
                                        if ( preg_match( "/<\/" . preg_quote( $name, '/' ) . "\s*>/i",
-                                                       $text, $matches, PREG_OFFSET_CAPTURE, $tagEndPos + 1 ) )
-                                       {
+                                                       $text, $matches, PREG_OFFSET_CAPTURE, $tagEndPos + 1 )
+                                       {
                                                $inner = substr( $text, $tagEndPos + 1, $matches[0][1] - $tagEndPos - 1 );
                                                $i = $matches[0][1] + strlen( $matches[0][0] );
                                                $close = $matches[0][0];
@@ -1062,8 +1062,8 @@ class PPFrame_Hash implements PPFrame {
                                        # Remove it in HTML, pre+remove and STRIP_COMMENTS modes
                                        if ( $this->parser->ot['html']
                                                || ( $this->parser->ot['pre'] && $this->parser->mOptions->getRemoveComments() )
-                                               || ( $flags & PPFrame::STRIP_COMMENTS ) )
-                                       {
+                                               || ( $flags & PPFrame::STRIP_COMMENTS )
+                                       {
                                                $out .= '';
                                        }
                                        # Add a strip marker in PST mode so that pstPass2() can run some old-fashioned regexes on the result
@@ -1654,8 +1654,8 @@ class PPNode_Hash_Tree implements PPNode {
                        if ( $child->name === 'name' ) {
                                $bits['name'] = $child;
                                if ( $child->firstChild instanceof PPNode_Hash_Attr
-                                       && $child->firstChild->name === 'index' )
-                               {
+                                       && $child->firstChild->name === 'index'
+                               {
                                        $bits['index'] = $child->firstChild->value;
                                }
                        } elseif ( $child->name === 'value' ) {
index 2282a3a..235a5ad 100644 (file)
@@ -283,8 +283,8 @@ class Profiler {
                        return; // short-circuit
                // @TODO: hardcoded check is a tad janky (what about FOR UPDATE?)
                } elseif ( !preg_match( '/^query-m: (?!SELECT)/', $method )
-                       && $realtime < $this->mDBLockThreshold )
-               {
+                       && $realtime < $this->mDBLockThreshold
+               {
                        return; // not a DB master query nor slow enough
                }
                $now = microtime( true );
index 418ab12..982c6ae 100644 (file)
@@ -23,7 +23,7 @@
 
 /**
  * ProfilerSimpleUDP class, that sends out messages for 'udpprofile' daemon
- * (the one from 
+ * (the one from
  *  http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile)
  * @ingroup Profiler
  */
index f4cb992..144ec95 100644 (file)
@@ -44,8 +44,8 @@ class JSONRCFeedFormatter implements RCFeedFormatter {
                                break;
 
                        case RC_NEW:
-                               $packet['length'] = array( 'old' => NULL, 'new' => $attrib['rc_new_len'] );
-                               $packet['revision'] = array( 'old' => NULL, 'new' => $attrib['rc_this_oldid'] );
+                               $packet['length'] = array( 'old' => null, 'new' => $attrib['rc_new_len'] );
+                               $packet['revision'] = array( 'old' => null, 'new' => $attrib['rc_this_oldid'] );
                                break;
 
                        case RC_LOG:
index 91acd11..3b072f9 100644 (file)
@@ -141,9 +141,7 @@ class ResourceLoader {
 
                // For empty/whitespace-only data or for unknown filters, don't perform
                // any caching or processing
-               if ( trim( $data ) === ''
-                       || !in_array( $filter, array( 'minify-js', 'minify-css' ) ) )
-               {
+               if ( trim( $data ) === '' || !in_array( $filter, array( 'minify-js', 'minify-css' ) ) ) {
                        wfProfileOut( __METHOD__ );
                        return $data;
                }
@@ -738,7 +736,6 @@ class ResourceLoader {
                        $blobs = array();
                }
 
-
                foreach ( $missing as $name ) {
                        $states[$name] = 'missing';
                }
index 8183999..43330da 100644 (file)
@@ -241,7 +241,11 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                case 'dependencies':
                                case 'messages':
                                case 'targets':
-                                       $this->{$member} = (array)$option;
+                                       // Normalise
+                                       $option = array_values( array_unique( (array)$option ) );
+                                       sort( $option );
+
+                                       $this->{$member} = $option;
                                        break;
                                // Single strings
                                case 'group':
@@ -457,14 +461,49 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                wfProfileIn( __METHOD__ . '-filemtime' );
                $filesMtime = max( array_map( array( __CLASS__, 'safeFilemtime' ), $files ) );
                wfProfileOut( __METHOD__ . '-filemtime' );
+
                $this->modifiedTime[$context->getHash()] = max(
                        $filesMtime,
-                       $this->getMsgBlobMtime( $context->getLanguage() ) );
+                       $this->getMsgBlobMtime( $context->getLanguage() ),
+                       $this->getDefinitionMtime( $context )
+               );
 
                wfProfileOut( __METHOD__ );
                return $this->modifiedTime[$context->getHash()];
        }
 
+       /**
+        * Get the definition summary for this module.
+        *
+        * @return Array
+        */
+       public function getDefinitionSummary( ResourceLoaderContext $context ) {
+               $summary = array(
+                       'class' => get_class( $this ),
+               );
+               foreach ( array(
+                       'scripts',
+                       'debugScripts',
+                       'loaderScripts',
+                       'styles',
+                       'languageScripts',
+                       'skinScripts',
+                       'skinStyles',
+                       'dependencies',
+                       'messages',
+                       'targets',
+                       'group',
+                       'position',
+                       'localBasePath',
+                       'remoteBasePath',
+                       'debugRaw',
+                       'raw',
+               ) as $member ) {
+                       $summary[$member] = $this->{$member};
+               };
+               return $summary;
+       }
+
        /* Protected Methods */
 
        /**
@@ -538,8 +577,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        return $list[$key];
                } elseif ( is_string( $fallback )
                        && isset( $list[$fallback] )
-                       && is_array( $list[$fallback] ) )
-               {
+                       && is_array( $list[$fallback] )
+               {
                        return $list[$fallback];
                }
                return array();
index 11264fc..db84dcf 100644 (file)
@@ -398,7 +398,8 @@ abstract class ResourceLoaderModule {
         * Helper method for calculating when the module's hash (if it has one) changed.
         *
         * @param ResourceLoaderContext $context
-        * @return integer: UNIX timestamp or 0 if there is no hash provided
+        * @return integer: UNIX timestamp or 0 if no hash was provided
+        *  by getModifiedHash()
         */
        public function getHashMtime( ResourceLoaderContext $context ) {
                $hash = $this->getModifiedHash( $context );
@@ -425,8 +426,10 @@ abstract class ResourceLoaderModule {
        }
 
        /**
-        * Get the last modification timestamp of the message blob for this
-        * module in a given language.
+        * Get the hash for whatever this module may contain.
+        *
+        * This is the method subclasses should implement if they want to make
+        * use of getHashMTime() inside getModifiedTime().
         *
         * @param ResourceLoaderContext $context
         * @return string|null: Hash
@@ -435,6 +438,81 @@ abstract class ResourceLoaderModule {
                return null;
        }
 
+       /**
+        * Helper method for calculating when this module's definition summary was last changed.
+        *
+        * @return integer: UNIX timestamp or 0 if no definition summary was provided
+        *  by getDefinitionSummary()
+        */
+       public function getDefinitionMtime( ResourceLoaderContext $context ) {
+               wfProfileIn( __METHOD__ );
+               $summary = $this->getDefinitionSummary( $context );
+               if ( $summary === null ) {
+                       wfProfileOut( __METHOD__ );
+                       return 0;
+               }
+
+               $hash = md5( json_encode( $summary ) );
+
+               $cache = wfGetCache( CACHE_ANYTHING );
+
+               // Embed the hash itself in the cache key. This allows for a few nifty things:
+               // - During deployment, servers with old and new versions of the code communicating
+               //   with the same memcached will not override the same key repeatedly increasing
+               //   the timestamp.
+               // - In case of the definition changing and then changing back in a short period of time
+               //   (e.g. in case of a revert or a corrupt server) the old timestamp and client-side cache
+               //   url will be re-used.
+               // - If different context-combinations (e.g. same skin, same language or some combination
+               //   thereof) result in the same definition, they will use the same hash and timestamp.
+               $key = wfMemcKey( 'resourceloader', 'moduledefinition', $this->getName(), $hash );
+
+               $data = $cache->get( $key );
+               if ( is_int( $data ) && $data > 0 ) {
+                       // We've seen this hash before, re-use the timestamp of when we first saw it.
+                       wfProfileOut( __METHOD__ );
+                       return $data;
+               }
+
+               wfDebugLog( 'resourceloader', __METHOD__ . ": New definition hash for module {$this->getName()} in context {$context->getHash()}: $hash." );
+
+               $timestamp = time();
+               $cache->set( $key, $timestamp );
+
+               wfProfileOut( __METHOD__ );
+               return $timestamp;
+       }
+
+       /**
+        * Get the definition summary for this module.
+        *
+        * This is the method subclasses should implement if they want to make
+        * use of getDefinitionMTime() inside getModifiedTime().
+        *
+        * Return an array containing values from all significant properties of this
+        * module's definition. Be sure to include things that are explicitly ordered,
+        * in their actaul order (bug 37812).
+        *
+        * Avoid including things that are insiginificant (e.g. order of message
+        * keys is insignificant and should be sorted to avoid unnecessary cache
+        * invalidation).
+        *
+        * Avoid including things already considered by other methods inside your
+        * getModifiedTime(), such as file mtime timestamps.
+        *
+        * Serialisation is done using json_encode, which means object state is not
+        * taken into account when building the hash. This data structure must only
+        * contain arrays and scalars as values (avoid object instances) which means
+        * it requires abstraction.
+        *
+        * @return Array|null
+        */
+       public function getDefinitionSummary( ResourceLoaderContext $context ) {
+               return array(
+                       'class' => get_class( $this ),
+               );
+       }
+
        /**
         * Check whether this module is known to be empty. If a child class
         * has an easy and cheap way to determine that this module is
index b38f448..93c5d1b 100644 (file)
@@ -84,6 +84,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgMainPageTitle' => $mainPage->getPrefixedText(),
                        'wgFormattedNamespaces' => $wgContLang->getFormattedNamespaces(),
                        'wgNamespaceIds' => $namespaceIds,
+                       'wgContentNamespaces' => MWNamespace::getContentNamespaces(),
                        'wgSiteName' => $wgSitename,
                        'wgFileExtensions' => array_values( array_unique( $wgFileExtensions ) ),
                        'wgDBname' => $wgDBname,
index 9064263..9004267 100644 (file)
  */
 class ResourceLoaderUserGroupsModule extends ResourceLoaderWikiModule {
 
-       /* Protected Methods */
+       /* Protected Members */
+
        protected $origin = self::ORIGIN_USER_SITEWIDE;
+       protected $targets = array( 'desktop', 'mobile' );
+
+       /* Protected Methods */
 
        /**
         * @param $context ResourceLoaderContext
index 7a04e47..7454b65 100644 (file)
  */
 class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
 
-       /* Protected Methods */
+       /* Protected Members */
+
        protected $origin = self::ORIGIN_USER_INDIVIDUAL;
 
+       /* Protected Methods */
+
        /**
         * @param $context ResourceLoaderContext
         * @return array
index 0b7e196..1df8c56 100644 (file)
@@ -33,6 +33,8 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
 
        protected $origin = self::ORIGIN_CORE_INDIVIDUAL;
 
+       protected $targets = array( 'desktop', 'mobile' );
+
        /* Methods */
 
        /**
index 92ebbe9..cdc9611 100644 (file)
@@ -30,6 +30,8 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
 
        protected $origin = self::ORIGIN_CORE_INDIVIDUAL;
 
+       protected $targets = array( 'desktop', 'mobile' );
+
        /* Methods */
 
        /**
index 3f10ae5..2653f76 100644 (file)
@@ -180,10 +180,26 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
                if ( count( $mtimes ) ) {
                        $modifiedTime = max( $modifiedTime, max( $mtimes ) );
                }
-               $modifiedTime = max( $modifiedTime, $this->getMsgBlobMtime( $context->getLanguage() ) );
+               $modifiedTime = max(
+                       $modifiedTime,
+                       $this->getMsgBlobMtime( $context->getLanguage() ),
+                       $this->getDefinitionMtime( $context )
+               );
                return $modifiedTime;
        }
 
+       /**
+        * Get the definition summary for this module.
+        *
+        * @return Array
+        */
+       public function getDefinitionSummary( ResourceLoaderContext $context ) {
+               return array(
+                       'class' => get_class( $this ),
+                       'pages' => $this->getPages( $context ),
+               );
+       }
+
        /**
         * @param $context ResourceLoaderContext
         * @return bool
index dbcb3d7..02e1dda 100644 (file)
@@ -201,7 +201,6 @@ class RevisionDeleter {
                return call_user_func( array( self::$allowedTypes[$typeName], 'suggestTarget' ), $target, $ids );
        }
 
-
        /**
         * Checks if a revision still exists in the revision table.
         * If it doesn't, returns the corresponding ar_timestamp field
index 8b96e6c..43a4d2c 100644 (file)
@@ -99,7 +99,7 @@ class SpecialChangePassword extends UnlistedSpecialPage {
                                                'wpLoginToken' => $token,
                                                'wpPassword' => $request->getVal( 'wpNewPassword' ),
                                        ) + $request->getValues( 'wpRemember', 'returnto', 'returntoquery' );
-                                       $login = new LoginForm( new FauxRequest( $data, true ) );
+                                       $login = new LoginForm( new DerivativeRequest( $request, $data, true ) );
                                        $login->setContext( $this->getContext() );
                                        $login->execute( null );
                                }
index f4c6f51..af6a35b 100644 (file)
@@ -94,14 +94,14 @@ class SpecialContributions extends SpecialPage {
                        $out->setHTMLTitle( $this->msg(
                                'pagetitle',
                                $this->msg( 'contributions-title', $target )->plain()
-                       ) );
+                       )->inContentLanguage() );
                        $this->getSkin()->setRelevantUser( $userObj );
                } else {
                        $out->addSubtitle( $this->msg( 'sp-contributions-newbies-sub' ) );
-                       $out->setHTMLTitle( $this->msg(
-                               'pagetitle',
-                               $this->msg( 'sp-contributions-newbies-title' )->plain()
-                       ) );
+                       $out->setHTMLTitle(
+                               $this->msg( 'pagetitle', $this->msg( 'sp-contributions-newbies-title' ) )
+                                       ->inContentLanguage()->plain()
+                       );
                }
 
                if ( ( $ns = $request->getVal( 'namespace', null ) ) !== null && $ns !== '' ) {
index e085240..daa56b3 100644 (file)
@@ -62,7 +62,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                $this->setHeaders();
 
                # Anons don't get a watchlist
-               $this->requireLogin( 'watchlistanontext', 'watchnologin' );
+               $this->requireLogin( 'watchlistanontext' );
 
                $out = $this->getOutput();
 
diff --git a/includes/specials/SpecialExpandTemplates.php b/includes/specials/SpecialExpandTemplates.php
new file mode 100644 (file)
index 0000000..a78133c
--- /dev/null
@@ -0,0 +1,229 @@
+<?php
+/**
+ * Implements Special:ExpandTemplates
+ *
+ * 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
+ */
+
+/**
+ * A special page that expands submitted templates, parser functions,
+ * and variables, allowing easier debugging of these.
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialExpandTemplates extends SpecialPage {
+
+       /** @var boolean whether or not to show the XML parse tree */
+       protected $generateXML;
+
+       /** @var boolean whether or not to remove comments in the expanded wikitext */
+       protected $removeComments;
+
+       /** @var boolean whether or not to remove <nowiki> tags in the expanded wikitext */
+       protected $removeNowiki;
+
+       /** @var maximum size in bytes to include. 50MB allows fixing those huge pages */
+       const MAX_INCLUDE_SIZE = 50000000;
+
+       function __construct() {
+               parent::__construct( 'ExpandTemplates' );
+       }
+
+       /**
+        * Show the special page
+        */
+       function execute( $subpage ) {
+               global $wgParser, $wgUseTidy, $wgAlwaysUseTidy;
+
+               $this->setHeaders();
+
+               $request = $this->getRequest();
+               $titleStr = $request->getText( 'wpContextTitle' );
+               $title = Title::newFromText( $titleStr );
+
+               if ( !$title ) {
+                       $title = $this->getTitle();
+               }
+               $input = $request->getText( 'wpInput' );
+               $this->generateXML = $request->getBool( 'wpGenerateXml' );
+
+               if ( strlen( $input ) ) {
+                       $this->removeComments = $request->getBool( 'wpRemoveComments', false );
+                       $this->removeNowiki = $request->getBool( 'wpRemoveNowiki', false );
+                       $options = ParserOptions::newFromContext( $this->getContext() );
+                       $options->setRemoveComments( $this->removeComments );
+                       $options->setTidy( true );
+                       $options->setMaxIncludeSize( self::MAX_INCLUDE_SIZE );
+
+                       if ( $this->generateXML ) {
+                               $wgParser->startExternalParse( $title, $options, OT_PREPROCESS );
+                               $dom = $wgParser->preprocessToDom( $input );
+
+                               if ( method_exists( $dom, 'saveXML' ) ) {
+                                       $xml = $dom->saveXML();
+                               } else {
+                                       $xml = $dom->__toString();
+                               }
+                       }
+
+                       $output = $wgParser->preprocess( $input, $title, $options );
+               } else {
+                       $this->removeComments = $request->getBool( 'wpRemoveComments', true );
+                       $this->removeNowiki = $request->getBool( 'wpRemoveNowiki', false );
+                       $output = false;
+               }
+
+               $out = $this->getOutput();
+               $out->addWikiMsg( 'expand_templates_intro' );
+               $out->addHTML( $this->makeForm( $titleStr, $input ) );
+
+               if ( $output !== false ) {
+                       if ( $this->generateXML && strlen( $output ) > 0 ) {
+                               $out->addHTML( $this->makeOutput( $xml, 'expand_templates_xml_output' ) );
+                       }
+
+                       $tmp = $this->makeOutput( $output );
+
+                       if ( $this->removeNowiki ) {
+                               $tmp = preg_replace(
+                                       array( '_&lt;nowiki&gt;_', '_&lt;/nowiki&gt;_', '_&lt;nowiki */&gt;_' ),
+                                       '',
+                                       $tmp
+                               );
+                       }
+
+                       if ( ( $wgUseTidy && $options->getTidy() ) || $wgAlwaysUseTidy ) {
+                               $tmp = MWTidy::tidy( $tmp );
+                       }
+
+                       $out->addHTML( $tmp );
+                       $this->showHtmlPreview( $title, $output, $out );
+               }
+
+       }
+
+       /**
+        * Generate a form allowing users to enter information
+        *
+        * @param string $title Value for context title field
+        * @param string $input Value for input textbox
+        * @return string
+        */
+       private function makeForm( $title, $input ) {
+               $self = $this->getTitle();
+               $form = Xml::openElement(
+                       'form',
+                       array( 'method' => 'post', 'action' => $self->getLocalUrl() )
+               );
+               $form .= "<fieldset><legend>" . $this->msg( 'expandtemplates' )->escaped() . "</legend>\n";
+
+               $form .= '<p>' . Xml::inputLabel(
+                       $this->msg( 'expand_templates_title' )->plain(),
+                       'wpContextTitle',
+                       'contexttitle',
+                       60,
+                       $title,
+                       array( 'autofocus' => true )
+               ) . '</p>';
+               $form .= '<p>' . Xml::label(
+                       $this->msg( 'expand_templates_input' )->text(),
+                       'input'
+               ) . '</p>';
+               $form .= Xml::textarea(
+                       'wpInput',
+                       $input,
+                       10,
+                       10,
+                       array( 'id' => 'input' )
+               );
+
+               $form .= '<p>' . Xml::checkLabel(
+                       $this->msg( 'expand_templates_remove_comments' )->text(),
+                       'wpRemoveComments',
+                       'removecomments',
+                       $this->removeComments
+               ) . '</p>';
+               $form .= '<p>' . Xml::checkLabel(
+                       $this->msg( 'expand_templates_remove_nowiki' )->text(),
+                       'wpRemoveNowiki',
+                       'removenowiki',
+                       $this->removeNowiki
+               ) . '</p>';
+               $form .= '<p>' . Xml::checkLabel(
+                       $this->msg( 'expand_templates_generate_xml' )->text(),
+                       'wpGenerateXml',
+                       'generate_xml',
+                       $this->generateXML
+               ) . '</p>';
+               $form .= '<p>' . Xml::submitButton(
+                       $this->msg( 'expand_templates_ok' )->text(),
+                       array( 'accesskey' => 's' )
+               ) . '</p>';
+               $form .= "</fieldset>\n";
+               $form .= Xml::closeElement( 'form' );
+
+               return $form;
+       }
+
+       /**
+        * Generate a nice little box with a heading for output
+        *
+        * @param string $output Wiki text output
+        * @param string $heading
+        * @return string
+        */
+       private function makeOutput( $output, $heading = 'expand_templates_output' ) {
+               $out = "<h2>" . $this->msg( $heading )->escaped() . "</h2>\n";
+               $out .= Xml::textarea(
+                       'output',
+                       $output,
+                       10,
+                       10,
+                       array( 'id' => 'output', 'readonly' => 'readonly' )
+               );
+
+               return $out;
+       }
+
+       /**
+        * Render the supplied wiki text and append to the page as a preview
+        *
+        * @param Title $title
+        * @param string $text
+        * @param OutputPage $out
+        */
+       private function showHtmlPreview( Title $title, $text, OutputPage $out ) {
+               global $wgParser;
+
+               $popts = ParserOptions::newFromContext( $this->getContext() );
+               $popts->setTargetLanguage( $title->getPageLanguage() );
+               $pout = $wgParser->parse( $text, $title, $popts );
+               $lang = $title->getPageViewLanguage();
+
+               $out->addHTML( "<h2>" . $this->msg( 'expand_templates_preview' )->escaped() . "</h2>\n" );
+               $out->addHTML( Html::openElement( 'div', array(
+                       'class' => 'mw-content-' . $lang->getDir(),
+                       'dir' => $lang->getDir(),
+                       'lang' => $lang->getHtmlCode(),
+               ) ) );
+
+               $out->addHTML( $pout->getText() );
+               $out->addHTML( Html::closeElement( 'div' ) );
+       }
+}
index d7d860d..1bc6c92 100644 (file)
@@ -411,7 +411,6 @@ class ImportReporter extends ContextSource {
        private $mOriginalPageOutCallback = null;
        private $mLogItemCount = 0;
 
-
        /**
         * @param WikiImporter $importer
         * @param $upload
index ed6e2a4..5c121ba 100644 (file)
@@ -62,28 +62,19 @@ class LinkSearchPage extends QueryPage {
                }
 
                $target2 = $target;
-               $protocol = '';
-               $pr_sl = strpos( $target2, '//' );
-               $pr_cl = strpos( $target2, ':' );
-               if ( $pr_sl ) {
-                       // For protocols with '//'
-                       $protocol = substr( $target2, 0, $pr_sl + 2 );
-                       $target2 = substr( $target2, $pr_sl + 2 );
-               } elseif ( !$pr_sl && $pr_cl ) {
-                       // For protocols without '//' like 'mailto:'
-                       $protocol = substr( $target2, 0, $pr_cl + 1 );
-                       $target2 = substr( $target2, $pr_cl + 1 );
-               } elseif ( $target2 != '' ) {
-                       // default
-                       $protocol = 'http://';
-               }
-               if ( $protocol != '' && !in_array( $protocol, $protocols_list ) ) {
-                       // Unsupported protocol, show original search request
-                       $target2 = $target;
-                       // Since links with unsupported protocols don't end up in
-                       // externallinks, assume $protocol is actually part of a link
-                       // containing ':' or '//' and default to http as above.
-                       $protocol = 'http://';
+               // Get protocol, default is http://
+               $protocol = 'http://';
+               $bits = wfParseUrl( $target );
+               if ( isset( $bits['scheme'] ) && isset( $bits['delimiter'] ) ) {
+                       $protocol = $bits['scheme'] . $bits['delimiter'];
+                       // Make sure wfParseUrl() didn't make some well-intended correction in the
+                       // protocol
+                       if ( strcasecmp( $protocol, substr( $target, 0, strlen( $protocol ) ) ) === 0 ) {
+                               $target2 = substr( $target, strlen( $protocol ) );
+                       } else {
+                               // If it did, let LinkFilter::makeLikeArray() handle this
+                               $protocol = '';
+                       }
                }
 
                $out->addWikiMsg(
@@ -148,18 +139,26 @@ class LinkSearchPage extends QueryPage {
        /**
         * Return an appropriately formatted LIKE query and the clause
         *
-        * @param string $query
-        * @param string $prot
+        * @param String $query Search pattern to search for
+        * @param String $prot Protocol, e.g. 'http://'
+        *
         * @return array
         */
        static function mungeQuery( $query, $prot ) {
                $field = 'el_index';
-               $rv = LinkFilter::makeLikeArray( $query, $prot );
+               $dbr = wfGetDB( DB_SLAVE );
+
+               if ( $query === '*' && $prot !== '' ) {
+                       // Allow queries like 'ftp://*' to find all ftp links
+                       $rv = array( $prot, $dbr->anyString() );
+               } else {
+                       $rv = LinkFilter::makeLikeArray( $query, $prot );
+               }
+
                if ( $rv === false ) {
                        // LinkFilter doesn't handle wildcard in IP, so we'll have to munge here.
                        $pattern = '/^(:?[0-9]{1,3}\.)+\*\s*$|^(:?[0-9]{1,3}\.){3}[0-9]{1,3}:[0-9]*\*\s*$/';
                        if ( preg_match( $pattern, $query ) ) {
-                               $dbr = wfGetDB( DB_SLAVE );
                                $rv = array( $prot . rtrim( $query, " \t*" ), $dbr->anyString() );
                                $field = 'el_to';
                        }
@@ -230,6 +229,9 @@ class LinkSearchPage extends QueryPage {
 
        /**
         * Override to check query validity.
+        *
+        * @param mixed $offset Numerical offset or false for no offset
+        * @param mixed $limit Numerical limit or false for no limit
         */
        function doQuery( $offset = false, $limit = false ) {
                list( $this->mMungedQuery, ) = LinkSearchPage::mungeQuery( $this->mQuery, $this->mProt );
index 5f4b208..51454f6 100644 (file)
@@ -37,7 +37,7 @@ class SpecialPreferences extends SpecialPage {
                $out = $this->getOutput();
                $out->disallowUserJs(); # Prevent hijacked user scripts from sniffing passwords etc.
 
-               $this->requireLogin( 'prefsnologintext2', 'prefsnologin' );
+               $this->requireLogin( 'prefsnologintext2' );
                $this->checkReadOnly();
 
                if ( $par == 'reset' ) {
index 0e022bf..14123a8 100644 (file)
@@ -87,7 +87,6 @@ class SpecialRandomInCategory extends SpecialPage {
                        $this->setCategory( $cat );
                }
 
-
                if ( !$this->category && $categoryStr ) {
                        $this->setHeaders();
                        $this->getOutput()->addWikiMsg( 'randomincategory-invalidcategory',
index 23203ea..d306744 100644 (file)
@@ -562,6 +562,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                $nondefaults = $opts->getChangedValues();
 
                $panel = array();
+               $panel[] = self::makeLegend( $this->getContext() );
                $panel[] = $this->optionsPanel( $defaults, $nondefaults );
                $panel[] = '<hr />';
 
@@ -653,6 +654,55 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                return $extraOpts;
        }
 
+       /**
+        * Return the legend displayed within the fieldset
+        *
+        * @param $context the object available as $this in non-static functions
+        * @return string
+        */
+       public static function makeLegend( IContextSource $context ) {
+               global $wgRecentChangesFlags;
+               $user = $context->getUser();
+               # The legend showing what the letters and stuff mean
+               $legend = Xml::openElement( 'dl', array( 'class' => 'mw-changeslist-legend' ) ) . "\n";
+               # Iterates through them and gets the messages for both letter and tooltip
+               $legendItems = $wgRecentChangesFlags;
+               if ( !$user->useRCPatrol() ) {
+                       unset( $legendItems['unpatrolled'] );
+               }
+               foreach ( $legendItems as $key => $legendInfo ) { # generate items of the legend
+                       $label = $legendInfo['title'];
+                       $letter = $legendInfo['letter'];
+                       $cssClass = isset( $legendInfo['class'] ) ? $legendInfo['class'] : $key;
+
+                       $legend .= Xml::element( 'dt',
+                               array( 'class' => $cssClass ), $context->msg( $letter )->text()
+                       ) . "\n";
+                       if ( $key === 'newpage' ) {
+                               $legend .= Xml::openElement( 'dd' );
+                               $legend .= $context->msg( $label )->escaped();
+                               $legend .= ' ' . $context->msg( 'recentchanges-legend-newpage' )->parse();
+                               $legend .= Xml::closeElement( 'dd' ) . "\n";
+                       } else {
+                               $legend .= Xml::element( 'dd', array(),
+                                       $context->msg( $label )->text()
+                               ) . "\n";
+                       }
+               }
+               # (+-123)
+               $legend .= Xml::tags( 'dt',
+                       array( 'class' => 'mw-plusminus-pos' ),
+                       $context->msg( 'recentchanges-legend-plusminus' )->parse()
+               ) . "\n";
+               $legend .= Xml::element(
+                       'dd',
+                       array( 'class' => 'mw-changeslist-legend-plusminus' ),
+                       $context->msg( 'recentchanges-label-plusminus' )->text()
+               ) . "\n";
+               $legend .= Xml::closeElement( 'dl' ) . "\n";
+               return $legend;
+       }
+
        /**
         * Send the text to be displayed above the options
         *
index dd32656..bdcecf9 100644 (file)
@@ -107,8 +107,8 @@ class SpecialSearch extends SpecialPage {
 
                if ( $request->getVal( 'fulltext' )
                        || !is_null( $request->getVal( 'offset' ) )
-                       || !is_null( $request->getVal( 'searchx' ) ) )
-               {
+                       || !is_null( $request->getVal( 'searchx' ) )
+               {
                        $this->showResults( $search );
                } else {
                        $this->goResult( $search );
@@ -476,9 +476,10 @@ class SpecialSearch extends SpecialPage {
                $out = $this->getOutput();
                if ( strval( $term ) !== '' ) {
                        $out->setPageTitle( $this->msg( 'searchresults' ) );
-                       $out->setHTMLTitle( $this->msg( 'pagetitle' )->rawParams(
-                               $this->msg( 'searchresults-title' )->rawParams( $term )->text()
-                       ) );
+                       $out->setHTMLTitle( $this->msg( 'pagetitle' )
+                               ->rawParams( $this->msg( 'searchresults-title' )->rawParams( $term ) )
+                               ->inContentLanguage()->text()
+                       );
                }
                // add javascript specific to special:search
                $out->addModules( 'mediawiki.special.search' );
index d4aed11..d33851d 100644 (file)
@@ -124,6 +124,8 @@ class PageArchive {
 
                $dbr = wfGetDB( DB_SLAVE );
 
+               $tables = array( 'archive' );
+
                $fields = array(
                        'ar_minor_edit', 'ar_timestamp', 'ar_user', 'ar_user_text',
                        'ar_comment', 'ar_len', 'ar_deleted', 'ar_rev_id', 'ar_sha1',
@@ -134,12 +136,28 @@ class PageArchive {
                        $fields[] = 'ar_content_model';
                }
 
-               $res = $dbr->select( 'archive',
+               $conds = array( 'ar_namespace' => $this->title->getNamespace(),
+                               'ar_title' => $this->title->getDBkey() );
+
+               $options = array( 'ORDER BY' => 'ar_timestamp DESC' );
+
+               $join_conds = array();
+
+               ChangeTags::modifyDisplayQuery(
+                       $tables,
                        $fields,
-                       array( 'ar_namespace' => $this->title->getNamespace(),
-                               'ar_title' => $this->title->getDBkey() ),
+                       $conds,
+                       $join_conds,
+                       $options
+               );
+
+               $res = $dbr->select( $tables,
+                       $fields,
+                       $conds,
                        __METHOD__,
-                       array( 'ORDER BY' => 'ar_timestamp DESC' ) );
+                       $options,
+                       $join_conds
+               );
 
                return $dbr->resultObject( $res );
        }
@@ -1083,6 +1101,16 @@ class SpecialUndelete extends SpecialPage {
                        $rdel = " $rdel";
                }
 
+               $minor = $rev->isMinor() ? ChangesList::flag( 'minor' ) : '';
+
+               $tags = wfGetDB( DB_SLAVE )->selectField(
+                       'tag_summary',
+                       'ts_tags',
+                       array( 'ts_rev_id' => $rev->getId() ),
+                       __METHOD__
+               );
+               $tagSummary = ChangeTags::formatSummaryRow( $tags, 'deleteddiff' );
+
                return '<div id="mw-diff-' . $prefix . 'title1"><strong>' .
                        Linker::link(
                                $targetPage,
@@ -1100,7 +1128,10 @@ class SpecialUndelete extends SpecialPage {
                        Linker::revUserTools( $rev ) . '<br />' .
                        '</div>' .
                        '<div id="mw-diff-' . $prefix . 'title3">' .
-                       Linker::revComment( $rev ) . $rdel . '<br />' .
+                       $minor . Linker::revComment( $rev ) . $rdel . '<br />' .
+                       '</div>' .
+                       '<div id="mw-diff-' . $prefix . 'title5">' .
+                       $tagSummary[0] . '<br />' .
                        '</div>';
        }
 
@@ -1367,6 +1398,9 @@ class SpecialUndelete extends SpecialPage {
                // User links
                $userLink = Linker::revUserTools( $rev );
 
+               // Minor edit
+               $minor = $rev->isMinor() ? ChangesList::flag( 'minor' ) : '';
+
                // Revision text size
                $size = $row->ar_len;
                if ( !is_null( $size ) ) {
@@ -1376,14 +1410,21 @@ class SpecialUndelete extends SpecialPage {
                // Edit summary
                $comment = Linker::revComment( $rev );
 
+               // Tags
+               $attribs = array();
+               list( $tagSummary, $classes ) = ChangeTags::formatSummaryRow( $row->ts_tags, 'deletedhistory' );
+               if ( $classes ) {
+                       $attribs['class'] = implode( ' ', $classes );
+               }
+
                // Revision delete links
                $revdlink = Linker::getRevDeleteLink( $user, $rev, $this->mTargetObj );
 
-               $revisionRow = $this->msg( 'undelete-revisionrow' )
-                       ->rawParams( $checkBox, $revdlink, $last, $pageLink, $userLink, $revTextSize, $comment )
+               $revisionRow = $this->msg( 'undelete-revision-row' )
+                       ->rawParams( $checkBox, $revdlink, $last, $pageLink, $userLink, $minor, $revTextSize, $comment, $tagSummary )
                        ->escaped();
 
-               return "<li>$revisionRow</li>";
+               return Xml::tags( 'li', $attribs, $revisionRow ) . "\n";
        }
 
        private function formatFileRow( $row ) {
index 0700c49..5e1591d 100644 (file)
@@ -328,10 +328,10 @@ class SpecialUpload extends SpecialPage {
                # mDestWarningAck is set when some javascript has shown the warning
                # to the user. mForReUpload is set when the user clicks the "upload a
                # new version" link.
-               if ( !$warnings || ( count( $warnings ) == 1 &&
-                       isset( $warnings['exists'] ) &&
-                       ( $this->mDestWarningAck || $this->mForReUpload ) ) )
-               {
+               if ( !$warnings || ( count( $warnings ) == 1
+                       && isset( $warnings['exists'] )
+                       && ( $this->mDestWarningAck || $this->mForReUpload ) )
+               {
                        return false;
                }
 
index 9764c9f..e701e0f 100644 (file)
@@ -1118,6 +1118,10 @@ class LoginForm extends SpecialPage {
                                'mediawiki.special.userlogin'
                        ) );
 
+                       $out->addModules( array(
+                               'mediawiki.special.createaccount.js'
+                       ) );
+
                        $q = 'action=submitlogin&type=login';
                        $linkq = 'type=signup';
                }
index c51b61b..9e93881 100644 (file)
@@ -39,9 +39,10 @@ class SpecialWatchlist extends SpecialPage {
 
                $user = $this->getUser();
                $output = $this->getOutput();
+               $output->addModuleStyles( 'mediawiki.special.changeslist' );
 
                # Anons don't get a watchlist
-               $this->requireLogin( 'watchlistanontext', 'watchnologin' );
+               $this->requireLogin( 'watchlistanontext' );
 
                // Check permissions
                $this->checkPermissions();
@@ -153,9 +154,9 @@ class SpecialWatchlist extends SpecialPage {
                        wfAppendToArrayIfNotDefault( $name, $values[$name], $defaults, $nondefaults );
                }
 
-               if ( ( $wgEnotifWatchlist || $wgShowUpdatedMarker ) && $request->getVal( 'reset' ) &&
-                       $request->wasPosted() )
-               {
+               if ( ( $wgEnotifWatchlist || $wgShowUpdatedMarker ) && $request->getVal( 'reset' )
+                       && $request->wasPosted()
+               {
                        $user->clearAllNotifications();
                        $output->redirect( $this->getTitle()->getFullURL( $nondefaults ) );
                        return;
@@ -255,6 +256,8 @@ class SpecialWatchlist extends SpecialPage {
                        array( 'id' => 'mw-watchlist-options' )
                );
 
+               $form .= SpecialRecentChanges::makeLegend( $this->getContext() );
+
                $tables = array( 'recentchanges', 'watchlist' );
                $fields = RecentChange::selectFields();
                $join_conds = array(
index 0006df4..3f49ed3 100644 (file)
@@ -33,8 +33,8 @@ if ( !isset( $wgVersion ) ) {
 $matches = array();
 $ext = 'php';
 $path = '/';
-foreach( array_filter( explode( '/', $_SERVER['PHP_SELF'] ) ) as $part ) {
-       if( !preg_match( '/\.(php5?)$/', $part, $matches ) ) {
+foreach ( array_filter( explode( '/', $_SERVER['PHP_SELF'] ) ) as $part ) {
+       if ( !preg_match( '/\.(php5?)$/', $part, $matches ) ) {
                $path .= "$part/";
        } else {
                $ext = $matches[1] == 'php5' ? 'php5' : 'php';
index 4750af9..2f569d9 100644 (file)
@@ -113,17 +113,16 @@ class UsercreateTemplate extends BaseTemplate {
 
                        <?php
                        if ( $this->data['usedomain'] ) {
-                               $doms = "";
+                               $select = new XmlSelect( 'wpDomain', false, $this->data['domain'] );
+                               $select->setAttribute( 'tabindex', 4 );
                                foreach ( $this->data['domainnames'] as $dom ) {
-                                       $doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
+                                       $select->addOption( $dom );
                                }
                        ?>
                                <div id="mw-user-domain-section">
                                        <label for="wpDomain"><?php $this->msg( 'yourdomainname' ); ?></label>
                                        <div class="mw-input">
-                                               <select name="wpDomain" value="<?php $this->text( 'domain' ); ?>" tabindex="4">
-                                                       <?php echo $doms ?>
-                                               </select>
+                                               <?php echo $select->getHTML(); ?>
                                        </div>
                                </div>
                        <?php } ?>
index 5eb6094..38e071c 100644 (file)
@@ -113,16 +113,15 @@ class UserloginTemplate extends BaseTemplate {
 
                        <?php
                        if ( isset( $this->data['usedomain'] ) && $this->data['usedomain'] ) {
-                               $doms = "";
+                               $select = new XmlSelect( 'wpDomain', false, $this->data['domain'] );
+                               $select->setAttribute( 'tabindex', 3 );
                                foreach ( $this->data['domainnames'] as $dom ) {
-                                       $doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
+                                       $select->addOption( $dom );
                                }
                        ?>
                                <div id="mw-user-domain-section">
                                        <label for='wpDomain'><?php $this->msg( 'yourdomainname' ); ?></label>
-                                       <select name="wpDomain" value="<?php $this->text( 'domain' ); ?>" tabindex="3">
-                                               <?php echo $doms; ?>
-                                       </select>
+                                       <?php echo $select->getHTML(); ?>
                                </div>
                        <?php } ?>
 
index b162de2..a6c3421 100644 (file)
@@ -250,7 +250,7 @@ abstract class UploadBase {
 
        /**
         * @param string $srcPath the source path
-        * @return string the real path if it was a virtual URL
+        * @return string|bool the real path if it was a virtual URL Returns false on failure
         */
        function getRealPath( $srcPath ) {
                wfProfileIn( __METHOD__ );
@@ -259,12 +259,15 @@ abstract class UploadBase {
                        // @todo just make uploads work with storage paths
                        // UploadFromStash loads files via virtual URLs
                        $tmpFile = $repo->getLocalCopy( $srcPath );
-                       $tmpFile->bind( $this ); // keep alive with $this
-                       wfProfileOut( __METHOD__ );
-                       return $tmpFile->getPath();
+                       if ( $tmpFile ) {
+                               $tmpFile->bind( $this ); // keep alive with $this
+                       }
+                       $path = $tmpFile ? $tmpFile->getPath() : false;
+               } else {
+                       $path = $srcPath;
                }
                wfProfileOut( __METHOD__ );
-               return $srcPath;
+               return $path;
        }
 
        /**
@@ -319,8 +322,8 @@ abstract class UploadBase {
 
                $error = '';
                if ( !wfRunHooks( 'UploadVerification',
-                       array( $this->mDestName, $this->mTempPath, &$error ) ) )
-               {
+                       array( $this->mDestName, $this->mTempPath, &$error ) )
+               {
                        wfProfileOut( __METHOD__ );
                        return array( 'status' => self::HOOK_ABORTED, 'error' => $error );
                }
@@ -394,7 +397,6 @@ abstract class UploadBase {
                return true;
        }
 
-
        /**
         * Verifies that it's ok to include the uploaded file
         *
@@ -421,7 +423,6 @@ abstract class UploadBase {
                        }
                }
 
-
                $handler = MediaHandler::getHandler( $mime );
                if ( $handler ) {
                        $handlerStatus = $handler->verifyUpload( $this->mTempPath );
@@ -1097,7 +1098,6 @@ abstract class UploadBase {
                return false;
        }
 
-
        /**
         * Check a whitelist of xml encodings that are known not to be interpreted differently
         * by the server's xml parser (expat) and some common browsers.
index b18fb80..8885d0e 100644 (file)
--- a/index.php
+++ b/index.php
@@ -42,7 +42,7 @@ if ( !function_exists( 'version_compare' ) || version_compare( phpversion(), '5.
 
 # Initialise common code.  This gives us access to GlobalFunctions, the
 # AutoLoader, and the globals $wgRequest, $wgOut, $wgUser, $wgLang and
-# $wgContLang, amongst others; it does *not* load $wgTitle
+# $wgContLang, amongst others
 require __DIR__ . '/includes/WebStart.php';
 
 $mediaWiki = new MediaWiki();
index 2038bac..0026fdf 100644 (file)
@@ -213,8 +213,8 @@ class Language {
        protected static function newFromCode( $code ) {
                // Protect against path traversal below
                if ( !Language::isValidCode( $code )
-                       || strcspn( $code, ":/\\\000" ) !== strlen( $code ) )
-               {
+                       || strcspn( $code, ":/\\\000" ) !== strlen( $code )
+               {
                        throw new MWException( "Invalid language code \"$code\"" );
                }
 
@@ -1502,8 +1502,7 @@ class Language {
                if (
                        ( $zy > 1582 ) || ( ( $zy == 1582 ) && ( $zm > 10 ) ) ||
                        ( ( $zy == 1582 ) && ( $zm == 10 ) && ( $zd > 14 ) )
-               )
-               {
+               ) {
                        $zjd = (int)( ( 1461 * ( $zy + 4800 + (int)( ( $zm - 14 ) / 12 ) ) ) / 4 ) +
                                        (int)( ( 367 * ( $zm - 2 - 12 * ( (int)( ( $zm - 14 ) / 12 ) ) ) ) / 12 ) -
                                        (int)( ( 3 * (int)( ( ( $zy + 4900 + (int)( ( $zm - 14 ) / 12 ) ) / 100 ) ) ) / 4 ) +
@@ -1753,8 +1752,7 @@ class Language {
                                ( ( $gy > 1912 ) && ( $gy < 1926 ) ) ||
                                ( ( $gy == 1926 ) && ( $gm < 12 ) ) ||
                                ( ( $gy == 1926 ) && ( $gm == 12 ) && ( $gd < 26 ) )
-                       )
-                       {
+                       ) {
                                # Taishō period
                                $gy_gannen = $gy - 1912 + 1;
                                $gy_offset = $gy_gannen;
@@ -1766,8 +1764,7 @@ class Language {
                                ( ( $gy == 1926 ) && ( $gm == 12 ) && ( $gd >= 26 ) ) ||
                                ( ( $gy > 1926 ) && ( $gy < 1989 ) ) ||
                                ( ( $gy == 1989 ) && ( $gm == 1 ) && ( $gd < 8 ) )
-                       )
-                       {
+                       ) {
                                # Shōwa period
                                $gy_gannen = $gy - 1926 + 1;
                                $gy_offset = $gy_gannen;
@@ -3635,17 +3632,10 @@ class Language {
         */
        function convertPlural( $count, $forms ) {
                // Handle explicit n=pluralform cases
-               foreach ( $forms as $index => $form ) {
-                       if ( preg_match( '/^\d+=/i', $form ) ) {
-                               $pos = strpos( $form, '=' );
-                               if ( substr( $form, 0, $pos ) === (string)$count ) {
-                                       return substr( $form, $pos + 1 );
-                               }
-                               unset( $forms[$index] );
-                       }
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
                }
-
-               $forms = array_values( $forms );
                if ( !count( $forms ) ) {
                        return '';
                }
@@ -3655,6 +3645,34 @@ class Language {
                return $forms[$pluralForm];
        }
 
+       /**
+        * Handles explicit plural forms for Language::convertPlural()
+        *
+        * In {{PLURAL:$1|0=nothing|one|many}}, 0=nothing will be returned if $1 equals zero.
+        * If an explicitly defined plural form matches the $count, then
+        * string value returned, otherwise array returned for further consideration
+        * by CLDR rules or overridden convertPlural().
+        *
+        * @since 1.23
+        *
+        * @param int $count non-localized number
+        * @param array $forms different plural forms
+        *
+        * @return array|string
+        */
+       protected function handleExplicitPluralForms( $count, array $forms ) {
+               foreach ( $forms as $index => $form ) {
+                       if ( preg_match( '/\d+=/i', $form ) ) {
+                               $pos = strpos( $form, '=' );
+                               if ( substr( $form, 0, $pos ) === (string) $count ) {
+                                       return substr( $form, $pos + 1 );
+                               }
+                               unset( $forms[$index] );
+                       }
+               }
+               return array_values( $forms );
+       }
+
        /**
         * Checks that convertPlural was given an array and pads it to requested
         * amount of forms by copying the last one.
@@ -4048,8 +4066,8 @@ class Language {
        public static function getFileName( $prefix = 'Language', $code, $suffix = '.php' ) {
                // Protect against path traversal
                if ( !Language::isValidCode( $code )
-                       || strcspn( $code, ":/\\\000" ) !== strlen( $code ) )
-               {
+                       || strcspn( $code, ":/\\\000" ) !== strlen( $code )
+               {
                        throw new MWException( "Invalid language code \"$code\"" );
                }
 
index d4c38af..cdaab2c 100644 (file)
@@ -102,8 +102,7 @@ class LanguageConverter {
                        'R' => 'R',       // raw content
                        'D' => 'D',       // convert description (subclass implement)
                        '-' => '-',       // remove convert (not implement)
-                       'H' => 'H',       // add rule for convert code
-                                                 // (but no display in placed code)
+                       'H' => 'H',       // add rule for convert code (but no display in placed code)
                        'N' => 'N'        // current variant name
                );
                $this->mFlags = array_merge( $defaultflags, $flags );
@@ -402,9 +401,9 @@ class LanguageConverter {
                        $startPos = $elementPos + strlen( $element );
 
                        // Translate any alt or title attributes inside the matched element
-                       if ( $element !== '' && preg_match( '/^(<[^>\s]*)\s([^>]*)(.*)$/', $element,
-                               $elementMatches ) )
-                       {
+                       if ( $element !== ''
+                               && preg_match( '/^(<[^>\s]*)\s([^>]*)(.*)$/', $element, $elementMatches )
+                       {
                                $attrs = Sanitizer::decodeTagAttributes( $elementMatches[2] );
                                $changed = false;
                                foreach ( array( 'title', 'alt' ) as $attrName ) {
@@ -778,12 +777,12 @@ class LanguageConverter {
                $ns = NS_MAIN;
 
                if ( $disableLinkConversion ||
-                        ( !$ignoreOtherCond &&
-                          ( $isredir == 'no'
-                                || $action == 'edit'
-                                || $action == 'submit'
-                                || $linkconvert == 'no'
-                                || $wgUser->getOption( 'noconvertlink' ) == 1 ) ) ) {
+                       ( !$ignoreOtherCond &&
+                               ( $isredir == 'no'
+                                       || $action == 'edit'
+                                       || $action == 'submit'
+                                       || $linkconvert == 'no'
+                                       || $wgUser->getOption( 'noconvertlink' ) == 1 ) ) ) {
                        return;
                }
 
@@ -876,8 +875,7 @@ class LanguageConverter {
                        $this->mTables = $wgLangConvMemc->get( $this->mCacheKey );
                        wfProfileOut( __METHOD__ . '-cache' );
                }
-               if ( !$this->mTables
-                        || !array_key_exists( self::CACHE_VERSION_KEY, $this->mTables ) ) {
+               if ( !$this->mTables || !array_key_exists( self::CACHE_VERSION_KEY, $this->mTables ) ) {
                        wfProfileIn( __METHOD__ . '-recache' );
                        // not in cache, or we need a fresh reload.
                        // We will first load the default tables
@@ -1004,8 +1002,7 @@ class LanguageConverter {
                                continue;
                        }
                        $mappings = explode( '}-', $block, 2 );
-                       $stripped = str_replace( array( "'", '"', '*', '#' ), '',
-                                                                        $mappings[0] );
+                       $stripped = str_replace( array( "'", '"', '*', '#' ), '', $mappings[0] );
                        $table = StringUtils::explode( ';', $stripped );
                        foreach ( $table as $t ) {
                                $m = explode( '=>', $t, 3 );
@@ -1285,9 +1282,9 @@ class ConverterRule {
                                $from = trim( $u[0] );
                                $v = trim( $u[1] );
                                if ( array_key_exists( $v, $unidtable )
-                                        && !is_array( $unidtable[$v] )
-                                        && $to
-                                        && in_array( $v, $variants ) ) {
+                                       && !is_array( $unidtable[$v] )
+                                       && $to
+                                       && in_array( $v, $variants ) ) {
                                        $unidtable[$v] = array( $from => $to );
                                } elseif ( $to && in_array( $v, $variants ) ) {
                                        $unidtable[$v][$from] = $to;
@@ -1353,8 +1350,7 @@ class ConverterRule {
                                $disp = $disp[0];
                        }
                        // or display frist text under disable manual convert
-                       if ( !$disp
-                                && $this->mConverter->mManualLevel[$variant] == 'disable' ) {
+                       if ( !$disp && $this->mConverter->mManualLevel[$variant] == 'disable' ) {
                                if ( count( $bidtable ) > 0 ) {
                                        $disp = array_values( $bidtable );
                                        $disp = $disp[0];
@@ -1446,8 +1442,8 @@ class ConverterRule {
                        }
                        /* for unidirectional array fill to convert tables */
                        if ( ( $manLevel[$v] == 'bidirectional' || $manLevel[$v] == 'unidirectional' )
-                               && isset( $unidtable[$v] ) )
-                       {
+                               && isset( $unidtable[$v] )
+                       {
                                if ( isset( $this->mConvTable[$v] ) ) {
                                        $this->mConvTable[$v] = array_merge( $this->mConvTable[$v], $unidtable[$v] );
                                } else {
@@ -1477,8 +1473,9 @@ class ConverterRule {
                                // then convert <text to convert> to current language
                                $this->mRules = $this->mConverter->autoConvert( $this->mRules,
                                        $variant );
-                       } else { // if current variant no in flags,
-                                  // then we check its fallback variants.
+                       } else {
+                               // if current variant no in flags,
+                               // then we check its fallback variants.
                                $variantFallbacks =
                                        $this->mConverter->getVariantFallbacks( $variant );
                                if ( is_array( $variantFallbacks ) ) {
index 6497b50..d3e78fe 100644 (file)
@@ -46,6 +46,10 @@ class LanguageBe_tarask extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
index 3da7711..072e857 100644 (file)
@@ -28,7 +28,6 @@
  */
 class LanguageBs extends Language {
 
-
        /**
         * Convert from the nominative form of a noun to some other case
         * Invoked with {{GRAMMAR:case|word}}
index 975157f..0ae0524 100644 (file)
@@ -49,7 +49,7 @@ class LanguageDsb extends Language {
                        case 'lokatiw': # lokatiw
                                $word = 'wo ' . $word;
                                break;
-                       }
+               }
 
                return $word; # this will return the original value for 'nominatiw' (nominativ) and all undefined case values
        }
index ba8a53c..23a2916 100644 (file)
@@ -35,6 +35,10 @@ class LanguageGv extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
index 910bc10..0c65ec7 100644 (file)
@@ -34,6 +34,10 @@ class LanguageHr extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
index 5623f3c..1fc1404 100644 (file)
@@ -49,7 +49,7 @@ class LanguageHsb extends Language {
                        case 'lokatiw': # lokatiw
                                $word = 'wo ' . $word;
                                break;
-                       }
+               }
 
                return $word; # this will return the original value for 'nominatiw' (nominativ) and all undefined case values
        }
index 5a7bbf3..4e08613 100644 (file)
@@ -727,7 +727,7 @@ class LanguageKk_cyrl extends Language {
                $lastLetter[0] = $ar[count( $ar ) - 1];
 
                // Find the last vowel in the word
-               $lastLetter[1] = NULL;
+               $lastLetter[1] = null;
                foreach ( $wordReversed as $xvalue ) {
                        foreach ( $allVowels as $yvalue ) {
                                if ( strcmp( $xvalue, $yvalue ) == 0 ) {
@@ -737,7 +737,7 @@ class LanguageKk_cyrl extends Language {
                                        continue;
                                }
                        }
-                       if ( $lastLetter[1] !== NULL ) {
+                       if ( $lastLetter[1] !== null ) {
                                break;
                        } else {
                                continue;
index 09c5727..d25ce71 100644 (file)
@@ -189,6 +189,10 @@ class LanguageKsh extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
index f37e2d5..7ea67f2 100644 (file)
@@ -67,7 +67,6 @@ class LanguageOs extends Language {
                # Variable for ending
                $ending = '';
 
-
                # CHecking if the $word is in plural form
                if ( preg_match( '/тæ$/u', $word ) ) {
                        $word = mb_substr( $word, 0, -1 );
index 6f0ff4b..7310e8e 100644 (file)
@@ -246,6 +246,10 @@ class LanguageSr extends LanguageSr_ec {
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
index cb9e819..4787856 100644 (file)
@@ -34,6 +34,10 @@ class LanguageSr_ec extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
index 99d1293..3f086df 100644 (file)
@@ -34,6 +34,10 @@ class LanguageSr_el extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
index 887f05c..8d2fe16 100644 (file)
@@ -21,7 +21,6 @@
  * @ingroup Language
  */
 
-
 /**
  * Turkish (Türkçe)
  *
index fc1e8a8..f362329 100644 (file)
@@ -66,7 +66,7 @@ class LanguageTyv extends Language {
                $wordReversed = array_reverse( $ar[0] ); // Here's an array with the order of the letters in the word reversed so we can find a match quicker *shrug*
 
                // Find the last vowel in the word
-               $wordLastVowel = NULL;
+               $wordLastVowel = null;
                foreach ( $wordReversed as $xvalue ) {
                        foreach ( $allVowels as $yvalue ) {
                                if ( strcmp( $xvalue, $yvalue ) == 0 ) {
@@ -76,7 +76,7 @@ class LanguageTyv extends Language {
                                        continue;
                                }
                        }
-                       if ( $wordLastVowel !== NULL ) {
+                       if ( $wordLastVowel !== null ) {
                                break;
                        } else {
                                continue;
index 4ad272b..aabe390 100644 (file)
@@ -92,6 +92,10 @@ class LanguageUk extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
+               $forms = $this->handleExplicitPluralForms( $count, $forms );
+               if ( is_string( $forms ) ) {
+                       return $forms;
+               }
                if ( !count( $forms ) ) {
                        return '';
                }
index dfb6411..395febc 100644 (file)
@@ -24,15 +24,15 @@ $namespaceNames = array(
        NS_MEDIA            => 'Alat',
        NS_SPECIAL          => 'Kusuih',
        NS_TALK             => 'Marit',
-       NS_USER             => 'Ureuëng_Nguy',
-       NS_USER_TALK        => 'Marit_Ureuëng_Nguy',
+       NS_USER             => 'Ureuëng_Ngui',
+       NS_USER_TALK        => 'Marit_Ureuëng_Ngui',
        NS_PROJECT_TALK     => 'Marit_$1',
        NS_FILE             => 'Beureukaih',
        NS_FILE_TALK        => 'Marit_Beureukaih',
        NS_MEDIAWIKI        => 'MediaWiki',
        NS_MEDIAWIKI_TALK   => 'Marit_MediaWiki',
-       NS_TEMPLATE         => 'Pola',
-       NS_TEMPLATE_TALK    => 'Marit_Pola',
+       NS_TEMPLATE         => 'Seunaleuëk',
+       NS_TEMPLATE_TALK    => 'Marit_Seunaleuëk',
        NS_HELP             => 'Beunantu',
        NS_HELP_TALK        => 'Marit_Beunantu',
        NS_CATEGORY         => 'Kawan',
@@ -45,6 +45,8 @@ $namespaceAliases = array(
        'Pembicaraan'           => NS_TALK,
        'Pengguna'              => NS_USER,
        'Bicara_Pengguna'       => NS_USER_TALK,
+       'Ureuëng_Nguy'          => NS_USER,
+       'Marit_Ureuëng_Nguy'    => NS_USER_TALK,
        'Pembicaraan_Pengguna'  => NS_USER_TALK,
        'Pembicaraan_$1'        => NS_PROJECT_TALK,
        'Berkas'                => NS_FILE,
@@ -58,6 +60,8 @@ $namespaceAliases = array(
        'Templat'               => NS_TEMPLATE,
        'Pembicaraan_Templat'   => NS_TEMPLATE_TALK,
        'Templat_Pembicaraan'   => NS_TEMPLATE_TALK,
+       'Pola'                  => NS_TEMPLATE,
+       'Marit_Pola'            => NS_TEMPLATE_TALK,
        'Bantuan'               => NS_HELP,
        'Bantuan_Pembicaraan'   => NS_HELP_TALK,
        'Pembicaraan_Bantuan'   => NS_HELP_TALK,
@@ -68,13 +72,14 @@ $namespaceAliases = array(
 );
 
 $specialPageAliases = array(
-       'Activeusers'               => array( 'Ureueng_nguy_udep' ),
-       'Allmessages'               => array( 'MandumPeusan' ),
-       'Allpages'                  => array( 'Dapeuta_on' ),
-       'Ancientpages'              => array( 'Teunuleh_trep' ),
-       'Blankpage'                 => array( 'On_soh' ),
-       'Block'                     => array( 'Theun_ureueng_nguy' ),
-       'Blockme'                   => array( 'Theun_lon' ),
+       'Activeusers'               => array( 'UreuëngNguiUdép' ),
+       'Allmessages'               => array( 'BanDumPeusan' ),
+       'AllMyUploads'              => array( 'BanDumPeunasoëLôn', 'BanDumBeureukaihLôn' ),
+       'Allpages'                  => array( 'DapeutaLaman' ),
+       'Ancientpages'              => array( 'TeunuléhAwai' ),
+       'Badtitle'                  => array( 'NanBrôk' ),
+       'Blankpage'                 => array( 'LamaSoh' ),
+       'Block'                     => array( 'TheunUreuëngNgui' ),
        'Booksources'               => array( 'Ne_kitab' ),
        'BrokenRedirects'           => array( 'Peuninah_reuloh' ),
        'Categories'                => array( 'Dapeuta_kawan' ),
@@ -84,7 +89,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Peugot_nan' ),
        'Deadendpages'              => array( 'On_mate' ),
        'DeletedContributions'      => array( 'Peuneugot_nyang_geusampoh' ),
-       'Disambiguations'           => array( 'Hana_jeulaih' ),
        'DoubleRedirects'           => array( 'Peuninah_ganda' ),
        'Emailuser'                 => array( 'Surat-e_ureueng_nguy' ),
        'Export'                    => array( 'Peuteubiet' ),
@@ -432,8 +436,6 @@ $1",
 'ok' => 'Ka göt',
 'retrievedfrom' => 'Geurumpok nibak "$1"',
 'youhavenewmessages' => 'Droëneuh na $1 ($2).',
-'newmessageslink' => 'peusan barô',
-'newmessagesdifflink' => 'neuubah seuneulheuëh',
 'youhavenewmessagesfromusers' => "Droeneuh na $1 nibak {{PLURAL:$3|ureueng nguy la'en|$3 ureueng nguy}} ($2).",
 'youhavenewmessagesmanyusers' => "Droeneuh na $1 nibak ureueng nguy la'en ($2)",
 'newmessageslinkplural' => '{{PLURAL:$1|saboh peusan baro|peusan baro}}',
@@ -944,7 +946,6 @@ Neubaci puphôn neulakèë droëneuh ngön ''all:'' keu jak mita ban dum asoë (
 'preferences' => 'Galak',
 'mypreferences' => 'Atô',
 'prefs-edits' => 'Jumeulah neuandam:',
-'prefsnologin' => 'Hana tamöng lom',
 'changepassword' => 'Gantoe lageuem rahsia',
 'prefs-skin' => 'Kulét',
 'skin-preview' => 'Eu dilèe',
index ef541ee..b91ec0b 100644 (file)
@@ -272,8 +272,6 @@ $1',
 'ok' => 'ok',
 'retrievedfrom' => 'تم الاسترجاع من "$1"',
 'youhavenewmessages' => 'توجد لديك $1 ($2).',
-'newmessageslink' => 'رسائل جديدة',
-'newmessagesdifflink' => 'آخر تغيير',
 'youhavenewmessagesmulti' => 'لديك رسائل جديدة على $1',
 'editsection' => 'modifi el page (baddelha)',
 'editold' => 'modifi el page (baddelha)',
index 999300d..b4b8fa4 100644 (file)
@@ -118,7 +118,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'OuBladsye' ),
        'Blankpage'                 => array( 'SkoonBladsy' ),
        'Block'                     => array( 'BlokIP' ),
-       'Blockme'                   => array( 'BlokMy' ),
        'Booksources'               => array( 'Boekbronne' ),
        'BrokenRedirects'           => array( 'Stukkende_aansture', 'Stukkendeaansture' ),
        'Categories'                => array( 'Kategorieë' ),
@@ -128,7 +127,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'SkepRekening', 'MaakGebruiker' ),
        'Deadendpages'              => array( 'DoodloopBladsye' ),
        'DeletedContributions'      => array( 'GeskrapteBydraes' ),
-       'Disambiguations'           => array( 'Dubbelsinnig' ),
        'DoubleRedirects'           => array( 'Dubbele_aansture', 'Dubbeleaansture' ),
        'Emailuser'                 => array( 'Stuur_e-pos', 'Stuure-pos', 'Stuur_epos', 'Stuurepos' ),
        'Export'                    => array( 'Eksporteer' ),
@@ -483,8 +481,6 @@ $1",
 'ok' => 'OK',
 'retrievedfrom' => 'Ontsluit van "$1"',
 'youhavenewmessages' => 'U het $1 (sien $2).',
-'newmessageslink' => 'nuwe boodskappe',
-'newmessagesdifflink' => 'die laaste wysiging',
 'youhavenewmessagesfromusers' => "U het $1 van {{PLURAL:$3|'n ander gebruiker|$3 gebruikers}} ($2).",
 'youhavenewmessagesmanyusers' => 'U het $1 van baie gebruikers ($2).',
 'newmessageslinkplural' => "{{PLURAL:$1|'n nuwe boodskap|nuwe boodskappe}}",
@@ -1329,7 +1325,6 @@ U kan ook 'n naamruimte as voorvoegsel gebruik.",
 'preferences' => 'Voorkeure',
 'mypreferences' => 'Voorkeure',
 'prefs-edits' => 'Aantal wysigings:',
-'prefsnologin' => 'Nie ingeteken nie',
 'changepassword' => 'Verander wagwoord',
 'prefs-skin' => 'Omslag',
 'skin-preview' => 'Voorskou',
@@ -1624,6 +1619,7 @@ As u dit verskaf, sal dit gebruik word om erkenning vir u werk te gee.',
 'recentchanges-label-minor' => "Hierdie is 'n klein wysiging",
 'recentchanges-label-bot' => "Hierdie wysiging was deur 'n bot uitgevoer",
 'recentchanges-label-unpatrolled' => 'Die wysiging is nog nie gekontroleer nie',
+'recentchanges-legend-newpage' => '$1 - nuwe bladsy',
 'rcnote' => "Hier volg die laaste {{PLURAL:$1|'''$1''' wysiging|'''$1''' wysigings}} gedurende die afgelope {{PLURAL:$2|dag|'''$2''' dae}}, soos vanaf $4 om $5.",
 'rcnotefrom' => "Hier volg wysigings sedert '''$2''' (maksimum van '''$1''' word gewys).",
 'rclistfrom' => 'Vertoon wysigings vanaf $1',
@@ -4076,4 +4072,21 @@ Anders kan u die eenvoudige vorm hieronder gebruik. U kommentaar sal by die blad
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|greep|grepe}}',
 'limitreport-expansiondepth' => 'Hoogste uitbreidingsdiepte',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Brei sjablone uit',
+'expand_templates_intro' => 'Hierdie spesiale bladsy lees die invoerteks en vervang al die sjablone rekursief.
+Dit vervang ook ontlederfunksies soos
+<nowiki>{{</nowiki>#language:…}}, en veranderlikes soos
+<nowiki>{{</nowiki>CURRENTDAY}}&mdash; omtrent alles tussen dubbele krulhakkies word vervang.
+Dit word gedoen deur die relevante funksies in die MediaWiki-ontleder te roep.',
+'expand_templates_title' => 'Kontekstitel, vir {{FULLPAGENAME}}, ensovoorts:',
+'expand_templates_input' => 'Invoerteks:',
+'expand_templates_output' => 'Resultaat',
+'expand_templates_xml_output' => 'XML-afvoer',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Verwyder kommentaar',
+'expand_templates_remove_nowiki' => 'Onderdruk <nowiki> etikette in die resultaat',
+'expand_templates_generate_xml' => 'Wys XML-ontledingsboom',
+'expand_templates_preview' => 'Voorskou',
+
 );
index bb3265b..dcf2c47 100644 (file)
  */
 
 $namespaceNames = array(
-       NS_MEDIA            => 'Medya',
-       NS_SPECIAL          => 'Spesial',
-       NS_TALK             => 'Nkɔmbɔ',
-       NS_USER             => 'User',
-       NS_USER_TALK        => 'User_nkɔmbɔ',
-       NS_PROJECT_TALK     => '$1_nkɔmbɔ',
-       NS_FILE             => 'Fayl',
-       NS_FILE_TALK        => 'Fayl_nkɔmbɔ',
+       NS_MEDIA            => 'Media',
+       NS_SPECIAL          => 'Soronko',
+       NS_TALK             => 'Nkɔmmɔ',
+       NS_USER             => 'Odwumanyɛni',
+       NS_USER_TALK        => 'Odwumanyɛni_nkɔmmɔbea',
+       NS_PROJECT_TALK     => '$1_nkɔmmɔ',
+       NS_FILE             => 'File',
+       NS_FILE_TALK        => 'File_nkɔmmɔ',
        NS_MEDIAWIKI        => 'MediaWiki',
-       NS_MEDIAWIKI_TALK   => 'MediaWiki_nkɔmbɔ',
-       NS_TEMPLATE         => 'Şablon',
-       NS_TEMPLATE_TALK    => 'Şablon_nkɔmbɔ',
-       NS_HELP             => 'Help',
-       NS_HELP_TALK        => 'Help_nkɔmbɔ',
-       NS_CATEGORY         => 'Kategori',
-       NS_CATEGORY_TALK    => 'Kategori_nkɔmbɔ',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki_nkɔmmɔ',
+       NS_TEMPLATE         => 'Nhwɛsode',
+       NS_TEMPLATE_TALK    => 'Nhwɛsode_nkɔmmɔbea',
+       NS_HELP             => 'Boa',
+       NS_HELP_TALK        => 'Mmoa_nkɔmmɔbea',
+       NS_CATEGORY         => 'Nkyekyem',
+       NS_CATEGORY_TALK    => 'Nkyekyem_nkɔmmɔbea',
 );
 
 $messages = array(
index 994c5d5..51cf9d5 100644 (file)
@@ -320,8 +320,6 @@ Shih [[Special:Version|faqen e verzionit]].',
 'ok' => 'OK',
 'retrievedfrom' => 'Marrë nga "$1"',
 'youhavenewmessages' => 'Keni $1 ($2).',
-'newmessageslink' => 'mesazhe të reja',
-'newmessagesdifflink' => 'ndryshimi i fundit',
 'youhavenewmessagesmulti' => 'Keni mesazhe të reja në $1',
 'editsection' => 'redakto',
 'editold' => 'redakto',
@@ -936,7 +934,6 @@ Vini re se indeksat e tyne të përmbajtjes së {{SITENAME}} munden me qenë të
 'preferences' => 'Parapëlqimet',
 'mypreferences' => 'Parapëlqimet e mija',
 'prefs-edits' => 'Numri i redaktimeve:',
-'prefsnologin' => 'Nuk jeni kyçë',
 'changepassword' => 'Ndërrimi i fjalëkalimit',
 'prefs-skin' => 'Doka',
 'skin-preview' => 'Parapâmja',
index 19852bd..de58608 100644 (file)
@@ -294,8 +294,6 @@ $1',
 'ok' => 'እሺ',
 'retrievedfrom' => 'ከ «$1» የተወሰደ',
 'youhavenewmessages' => '$1 አሉዎት ($2)።',
-'newmessageslink' => 'አዲስ መልእክቶች',
-'newmessagesdifflink' => 'የመጨረሻ ለውጥ',
 'youhavenewmessagesfromusers' => 'ከ{{PLURAL:$3|ሌላ አባል|$3 አባላት}} $1 {{PLURAL:$1|አለዎት|አሉልዎ}}። ($2).',
 'youhavenewmessagesmanyusers' => 'ከአሥር አባላት በላይ $1 አሉልዎ! ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|፩ አዲስ መልዕክት|አዲስ መልእክቶች}}',
@@ -864,7 +862,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'preferences' => 'ምርጫዎች፤',
 'mypreferences' => 'ምርጫዎች፤',
 'prefs-edits' => 'የለውጦች ቁጥር:',
-'prefsnologin' => 'ገና አልገቡም',
 'changepassword' => 'መግቢያ ቃልዎን ለመቀየር',
 'prefs-skin' => 'የድህረ-ገጽ መልክ',
 'skin-preview' => 'ቅድመ-ዕይታ',
@@ -1071,6 +1068,7 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'recentchanges-label-minor' => 'ይህ ለውጥ ጥቃቅን ነው።',
 'recentchanges-label-bot' => 'ይኸው ለውጥ በሎሌ ተደረገ።',
 'recentchanges-label-unpatrolled' => 'ይህ እርማት ገና አልተገመገመም',
+'recentchanges-legend-newpage' => '$1 - አዲስ ገጽ',
 'rcnote' => "ከ$5 $4 እ.ኤ.አ. {{PLURAL:$2|ባለፈው 1 ቀን|ባለፉት '''$2''' ቀኖች}} {{PLURAL:$1|የተደረገው '''1''' ለውጥ እታች ይገኛል|የተደረጉት '''$1''' መጨረሻ ለውጦች እታች ይገኛሉ}}።",
 'rcnotefrom' => "ከ'''$2''' ጀምሮ የተቀየሩት ገጾች (እስከ '''$1''' ድረስ) ክዚህ በታች ይታያሉ።",
 'rclistfrom' => '(ከ $1 ጀምሮ አዲስ ለውጦቹን ለማየት)',
@@ -2600,4 +2598,7 @@ $3
 'api-error-uploaddisabled' => 'ፋይል መላክ በዚህ ውኪ ላይ አልተፈቀደም።',
 'api-error-verification-error' => 'ይህ ፋይል የተበላሸ ወይም ትክክል ያልሆነ ቅጥያ ያለው ሊሆን ይችላል።',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'እሺ',
+
 );
index 745796f..9883a46 100644 (file)
@@ -64,7 +64,6 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'Todas_as_pachinas' ),
        'Ancientpages'              => array( 'Pachinas_mas_viellas', 'Pachinas_mas_antigas', 'Pachinas_más_biellas', 'Pachinas_biellas', 'Pachinas_antigas' ),
        'Block'                     => array( 'Bloqueyar' ),
-       'Blockme'                   => array( 'Bloqueya-me' ),
        'Booksources'               => array( 'Fuents_de_libros' ),
        'BrokenRedirects'           => array( 'Endreceras_trencatas', 'Endreceras_trencadas', 'Reendrezeras_trencatas', 'Endrezeras_trencatas', 'Reendrezeras_crebatas', 'Endrezeras_crebatas', 'Endrezeras_trencadas', 'Endrezeras_crebadas' ),
        'Categories'                => array( 'Categorías' ),
@@ -73,7 +72,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Contrebucions', 'Contrebuzions' ),
        'CreateAccount'             => array( 'Creyar_cuenta' ),
        'Deadendpages'              => array( 'Pachinas_sin_salida', 'Pachinas_sin_de_salida' ),
-       'Disambiguations'           => array( 'Desambigacions', 'Desambigazions', 'Pachinas_de_desambigazión' ),
        'DoubleRedirects'           => array( 'Endreceras_doples', 'Reendrezeras_dobles', 'Dobles_reendrezeras', 'Endrezeras_dobles', 'Dobles_endrezeras' ),
        'Emailuser'                 => array( 'Ninvía_mensache', 'Nimbía_mensache' ),
        'Export'                    => array( 'Exportar' ),
@@ -390,8 +388,6 @@ $1",
 'pagetitle' => '$1 - {{SITENAME}}',
 'retrievedfrom' => 'Obtenito de "$1"',
 'youhavenewmessages' => 'Tiene $1 ($2).',
-'newmessageslink' => 'mensaches nuevos',
-'newmessagesdifflink' => 'Esferencias con a versión anterior',
 'youhavenewmessagesmulti' => 'Tiene nuevos mensaches en $1',
 'editsection' => 'editar',
 'editold' => 'editar',
@@ -1087,7 +1083,6 @@ Asegure-se que iste cambio no trencará a continidat de l'historial d'a pachina.
 'preferences' => 'Preferencias',
 'mypreferences' => 'Preferencias',
 'prefs-edits' => "Numero d'edicions:",
-'prefsnologin' => 'No ye identificato',
 'changepassword' => 'Cambiar a clau',
 'prefs-skin' => 'Aparencia',
 'skin-preview' => 'Fer una prebatina',
@@ -1360,6 +1355,7 @@ Habría de tener menos de $1 {{PLURAL:$1|carácter|carácters}}.',
 'recentchanges-label-minor' => 'Ista ye una edición menor',
 'recentchanges-label-bot' => 'Ista edición fue feita por un bot',
 'recentchanges-label-unpatrolled' => "Esta edición encara no s'ha controlato",
+'recentchanges-legend-newpage' => '$1 - pachina nueva',
 'rcnote' => "Contino {{PLURAL:$1|s'amuestra o unico cambeo feito|s'amuestran os zaguers '''$1''' cambeos feitos}} en {{PLURAL:$2|o zaguer día|os zaguers '''$2''' días}}, dica o $5, $4.",
 'rcnotefrom' => "Contino s'amuestran os cambeos dende '''$2''' (dica '''$1''').",
 'rclistfrom' => 'Amostrar cambeos recients dende $1',
@@ -3594,4 +3590,17 @@ Si no, puet usar o siguient formulario. O suyo comentario será adhibiu a la pac
 'api-error-uploaddisabled' => 'As cargas de fichers son desactivadas en iste wiki.',
 'api-error-verification-error' => 'Iste fichero puede estar danyau, u tiene una extensión incorrecta.',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Espandir plantillas',
+'expand_templates_intro' => 'Ista pachina especial prene bel testo y espande recursivament todas as plantillas que bi ha en el. Tamién espande as funcions parser como <nowiki>{{</nowiki>#language:...}}, y as variables como <nowiki>{{</nowiki>CURRENTDAY}}&mdash; en cheneral tot o que sía entre dobles claus.
+Isto lo fa clamando ta o parser correspondient dende o propio MediaWiki.',
+'expand_templates_title' => 'Títol ta contestualizar ({{FULLPAGENAME}} etz.):',
+'expand_templates_input' => 'Testo ta espandir:',
+'expand_templates_output' => 'Resultau',
+'expand_templates_xml_output' => 'salida XML',
+'expand_templates_ok' => 'Confirmar',
+'expand_templates_remove_comments' => 'Sacar comentarios',
+'expand_templates_generate_xml' => "Amostrar l'árbol de parseyo XML",
+'expand_templates_preview' => 'Previsualización',
+
 );
index 996b3c3..5cb5acd 100644 (file)
@@ -11,6 +11,7 @@
  * @author Espreon
  * @author Gott wisst
  * @author JJohnson
+ * @author JJohnson1701
  * @author Omnipaedista
  * @author Shirayuki
  * @author Spacebirdy
 
 $namespaceNames = array(
        NS_SPECIAL          => 'Syndrig',
-       NS_TALK             => 'Gesprec',
+       NS_TALK             => 'Mōtung',
        NS_FILE             => 'Biliþ',
-       NS_FILE_TALK        => 'Biliþgesprec',
+       NS_FILE_TALK        => 'Biliþmōtung',
        NS_TEMPLATE         => 'Bysen',
-       NS_TEMPLATE_TALK    => 'Bysengesprec',
+       NS_TEMPLATE_TALK    => 'Bysenmōtung',
        NS_HELP             => 'Help',
-       NS_HELP_TALK        => 'Helpgesprec',
+       NS_HELP_TALK        => 'Helpmōtung',
        NS_CATEGORY         => 'Flocc',
-       NS_CATEGORY_TALK    => 'Floccgesprec',
+       NS_CATEGORY_TALK    => 'Floccmōtung',
+);
+
+$namespaceAliases = array(
+       'Gesprec'      => NS_TALK,
+       'Biliþgesprec' => NS_FILE_TALK,
+       'Bysengesprec' => NS_TEMPLATE_TALK,
+       'Helpgesprec'  => NS_HELP_TALK,
+       'Floccgesprec' => NS_CATEGORY_TALK,
 );
 
 $messages = array(
@@ -237,7 +246,7 @@ $messages = array(
 'protect' => 'Beorgan',
 'protect_change' => 'Wendan',
 'protectthispage' => 'Beorgan þisne tramet',
-'unprotect' => 'Andwendan beorgunge',
+'unprotect' => 'Wendan beorgunge',
 'unprotectthispage' => 'Andwendan beorgune þisses trametes',
 'newpage' => 'Nīwe tramet',
 'talkpage' => 'Sprecan ymbe þisne tramet',
@@ -303,8 +312,6 @@ Seoh þone [[Special:Version|fadunge tramet]].',
 'ok' => 'Gōd lā',
 'retrievedfrom' => 'Fram "$1" begeten',
 'youhavenewmessages' => 'Þū hæfst $1 ($2).',
-'newmessageslink' => 'nīwu ǣrendgewritu',
-'newmessagesdifflink' => 'nīwost andwendung',
 'youhavenewmessagesfromusers' => 'Þū hafast $1 fram {{PLURAL:$3|ōðrum brūcende|$3 brūcenda}} ($2).',
 'youhavenewmessagesmanyusers' => 'Þū hafast $1 fram manigum brūcendum ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|nīwe ǣrendgewrit|nīwra ǣrendgewrita}}',
@@ -329,6 +336,8 @@ Seoh þone [[Special:Version|fadunge tramet]].',
 'page-rss-feed' => '$1 RSS strēam',
 'page-atom-feed' => '$1 Atom strēam',
 'red-link-title' => '$1 (tramet ne biþ)',
+'sort-descending' => 'sīgende behweorfan',
+'sort-ascending' => 'stīgende behweorfan',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Tramet',
@@ -368,11 +377,13 @@ Getæl gengra syndrigra trameta cann man findan be [[Special:SpecialPages|þǣm
 'badarticleerror' => 'Þēos dǣd ne cann bēon gefremed on þissum tramete.',
 'badtitle' => 'Nā genge titul',
 'viewsource' => 'Sēon fruman',
+'viewsource-title' => 'Fruman for $1 sēon',
 'cascadeprotected' => 'Þes trament wæs geborgen wiþ adihtunge, for þǣm þe hē is befangen in þissum {{PLURAL:$1|tramente, þe is| tramentum, þe sind}} geborgen settum wyrcende þǣm cyre "cascading": $2',
+'exception-nologin' => 'Ne inloggod',
 
 # Virus scanner
 'virus-badscanner' => 'Bad configuration: Unknown virus scanner: $1',
-'virus-unknownscanner' => 'unknown antivirus:',
+'virus-unknownscanner' => 'uncūþ andgund:',
 
 # Login and logout pages
 'logouttext' => "'''Þū eart nū ūtmeldod.'''
@@ -383,6 +394,7 @@ Cnāw þæt sume trametas mihten gīet wesan geīwde swā þū wǣre gīet inmel
 'yourname' => 'Þīn brūcendnama:',
 'userlogin-yourname' => 'Brūcendnama:',
 'userlogin-yourname-ph' => 'Inwrīt þīnne brūcendnaman',
+'createacct-another-username-ph' => 'Wrīt þone brūcendnaman in',
 'yourpassword' => 'Þafungword:',
 'userlogin-yourpassword' => 'Þafungword',
 'userlogin-yourpassword-ph' => 'Inwrīt þīn þafungword',
@@ -402,13 +414,15 @@ Cnāw þæt sume trametas mihten gīet wesan geīwde swā þū wǣre gīet inmel
 'logout' => 'Ūtmeldian',
 'userlogout' => 'Ūtmeldian',
 'notloggedin' => 'Nā ingemeldod',
-'userlogin-noaccount' => "Don't have an account?",
+'userlogin-noaccount' => 'Næfst þu hordcleofan?',
 'userlogin-joinproject' => 'Join {{SITENAME}}',
 'nologin' => 'Næfst þū reccinge? $1',
 'nologinlink' => 'Scieppan reccinge',
 'createaccount' => 'Scieppan reccinge',
 'gotaccount' => 'Hafast þū reccinge ǣr? $1.',
 'gotaccountlink' => 'Inmeldian',
+'userlogin-resetpassword-link' => 'Forgēate þū þīn gelēafword?',
+'helplogin-url' => 'Help:Inmeldung',
 'createaccountmail' => 'Notian sceortne tīman hlētlic þafungword and sendan hit to þǣm spearcǣrenda naman þe is niðer',
 'createaccountreason' => 'Racu:',
 'badretype' => 'Þā þafungword þe write þū, bēoþ ungelīc.',
@@ -427,7 +441,7 @@ Scēawa þīne wrītunge eft, oþþe [[Special:UserLogin/signup|sciepp nīwe rec
 'nosuchusershort' => 'Þǣr nis nān brūcend mid þǣm naman "$1".  Scēawa þīne wrītunge.',
 'passwordtooshort' => 'Þafungword sculon habban læst {{PLURAL:$1|1 stafan|$1 stafena}}.',
 'mailmypassword' => 'Sendan nīwe þafungword on spearcǣrende',
-'acct_creation_throttle_hit' => 'Hwæt, þu hæfst gēo geseted {{PLURAL:$1|1 hordcleofan|$1 -}}. Þu ne canst settan ǣnige māran.',
+'acct_creation_throttle_hit' => 'Nēosiende tō þissum wici, þe þīnne IP-Stōwe brȳcþ, hæfþ gesett {{PLURAL:$1|1 hordcleofan|$1 hordcleofan}} in þǣm læsten dæge. Þu ne canst settan ǣnige māran. Þǣrfram ne cunnon Nēosiende, þe þisne IP-Stōwe brȳcþ, settan ǣnige hordcleofan māran on þisse handhwīle.',
 'accountcreated' => 'Scōp reccinge',
 'loginlanguagelabel' => 'Sprǣc: $1',
 
@@ -439,6 +453,9 @@ Scēawa þīne wrītunge eft, oþþe [[Special:UserLogin/signup|sciepp nīwe rec
 'resetpass-submit-loggedin' => 'Andwendan þafungword',
 'resetpass-submit-cancel' => 'Undōn',
 
+# Special:PasswordReset
+'passwordreset-username' => 'Brūcendnama:',
+
 # Edit page toolbar
 'bold_sample' => 'Þicce traht',
 'bold_tip' => 'Þicce traht',
@@ -549,8 +566,8 @@ folclicum āgnunge oþþe gelīcum frēom horde (sēo $1 for āscungum).
 'revdelete-hide-comment' => 'Hȳdan adihtunge sceortnesse',
 'revdelete-hide-user' => 'Hȳdan adihtendes brūcendnaman/IP address',
 'revdelete-radio-same' => '(nā andwendan)',
-'revdelete-radio-set' => 'Gēa',
-'revdelete-radio-unset' => 'Nese',
+'revdelete-radio-set' => 'Gehȳdd',
+'revdelete-radio-unset' => 'Gesīene',
 'revdel-restore' => 'andwendan īwunge',
 'pagehist' => 'Trametes stǣr',
 'revdelete-reasonotherlist' => 'Ōðru racu',
@@ -609,7 +626,6 @@ folclicum āgnunge oþþe gelīcum frēom horde (sēo $1 for āscungum).
 # Preferences page
 'preferences' => 'Fōreberunga',
 'mypreferences' => 'Mīna fōreberunga',
-'prefsnologin' => 'Nā inmeldod',
 'prefs-skin' => 'Scynn',
 'skin-preview' => 'Fōrebysen',
 'prefs-datetime' => 'Tælmearc and tīd',
@@ -677,6 +693,7 @@ folclicum āgnunge oþþe gelīcum frēom horde (sēo $1 for āscungum).
 'recentchanges-label-newpage' => 'Þēos adihtung scōp nīwne tramet',
 'recentchanges-label-minor' => 'Þēos is lytel adihtung',
 'recentchanges-label-bot' => 'Searuþrǣl fremede þās adihtunge',
+'recentchanges-legend-newpage' => '$1 - nīƿu sīde',
 'rcnote' => "Beneoðan {{PLURAL:$1|is '''1''' andwendung|sind þā æftemestan '''$1''' andwendunga}} in {{PLURAL:$2|þǣm æftermestan dæge|þǣm æftemestum '''$2''' daga}}, fram $5 on $4.",
 'rcnotefrom' => "Niðer sind þā andwendunga fram '''$2''' (mǣst īweþ '''$1''').",
 'rclistfrom' => 'Īwan nīwa andwendunga fram $1 and siþþan',
index 5b66cb8..36905d8 100644 (file)
@@ -245,6 +245,7 @@ $magicWords = array(
        'fullpagenamee'             => array( '1', 'عنوان_الصفحة_الكامل', 'عنوان_صفحة_كامل', 'FULLPAGENAMEE' ),
        'subpagename'               => array( '1', 'اسم_الصفحة_الفرعي', 'SUBPAGENAME' ),
        'subpagenamee'              => array( '1', 'عنوان_الصفحة_الفرعي', 'SUBPAGENAMEE' ),
+       'rootpagename'              => array( '1', 'جذر_اسم_الصفحة', 'ROOTPAGENAME' ),
        'basepagename'              => array( '1', 'اسم_الصفحة_الأساسي', 'BASEPAGENAME' ),
        'basepagenamee'             => array( '1', 'عنوان_الصفحة_الأساسي', 'BASEPAGENAMEE' ),
        'talkpagename'              => array( '1', 'اسم_صفحة_النقاش', 'TALKPAGENAME' ),
@@ -264,6 +265,7 @@ $magicWords = array(
        'img_center'                => array( '1', 'مركز', 'center', 'centre' ),
        'img_framed'                => array( '1', 'إطار', 'بإطار', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'لاإطار', 'frameless' ),
+       'img_lang'                  => array( '1', 'لغة=$1', 'lang=$1' ),
        'img_page'                  => array( '1', 'صفحة=$1', 'صفحة_$1', 'page=$1', 'page $1' ),
        'img_upright'               => array( '1', 'معدول', 'معدول=$1', 'معدول_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'حدود', 'border' ),
@@ -306,6 +308,7 @@ $magicWords = array(
        'revisionyear'              => array( '1', 'عام_المراجعة', 'REVISIONYEAR' ),
        'revisiontimestamp'         => array( '1', 'طابع_وقت_المراجعة', 'REVISIONTIMESTAMP' ),
        'revisionuser'              => array( '1', 'مستخدم_المراجعة', 'REVISIONUSER' ),
+       'revisionsize'              => array( '1', 'حجم_المراجعة', 'REVISIONSIZE' ),
        'plural'                    => array( '0', 'جمع:', 'PLURAL:' ),
        'fullurl'                   => array( '0', 'عنوان_كامل:', 'FULLURL:' ),
        'fullurle'                  => array( '0', 'مسار_كامل:', 'FULLURLE:' ),
@@ -361,12 +364,12 @@ $magicWords = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'مستخدمون_نشطون' ),
        'Allmessages'               => array( 'كل_الرسائل' ),
+       'AllMyUploads'              => array( 'كل_ملفاتي' ),
        'Allpages'                  => array( 'كل_الصفحات' ),
        'Ancientpages'              => array( 'صفحات_قديمة' ),
        'Badtitle'                  => array( 'عنوان_سيئ' ),
        'Blankpage'                 => array( 'صفحة_فارغة' ),
        'Block'                     => array( 'منع', 'منع_أيبي', 'منع_مستخدم' ),
-       'Blockme'                   => array( 'منعي' ),
        'Booksources'               => array( 'مصادر_كتاب' ),
        'BrokenRedirects'           => array( 'تحويلات_مكسورة' ),
        'Categories'                => array( 'تصنيفات' ),
@@ -378,10 +381,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'إنشاء_حساب' ),
        'Deadendpages'              => array( 'صفحات_نهاية_مسدودة' ),
        'DeletedContributions'      => array( 'مساهمات_محذوفة' ),
-       'Disambiguations'           => array( 'توضيحات' ),
        'DoubleRedirects'           => array( 'تحويلات_مزدوجة' ),
        'EditWatchlist'             => array( 'تعديل_قائمة_المراقبة' ),
        'Emailuser'                 => array( 'مراسلة_المستخدم' ),
+       'ExpandTemplates'           => array( 'فرد_القوالب' ),
        'Export'                    => array( 'تصدير' ),
        'Fewestrevisions'           => array( 'الأقل_تعديلا' ),
        'FileDuplicateSearch'       => array( 'بحث_ملف_مكرر' ),
@@ -417,6 +420,7 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'رفوعاتي' ),
        'Newimages'                 => array( 'ملفات_جديدة', 'صور_جديدة' ),
        'Newpages'                  => array( 'صفحات_جديدة' ),
+       'PagesWithProp'             => array( 'صفحات_بخاصية' ),
        'PasswordReset'             => array( 'إعادة_ضبط_كلمة_السر' ),
        'PermanentLink'             => array( 'وصلة_دائمة', 'رابط_دائم' ),
        'Popularpages'              => array( 'صفحات_مشهورة' ),
@@ -425,10 +429,13 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'صفحات_محمية' ),
        'Protectedtitles'           => array( 'عناوين_محمية' ),
        'Randompage'                => array( 'عشوائي', 'صفحة_عشوائية' ),
+       'RandomInCategory'          => array( 'عشوائي_في_تصنيف' ),
        'Randomredirect'            => array( 'تحويلة_عشوائية' ),
        'Recentchanges'             => array( 'أحدث_التغييرات' ),
        'Recentchangeslinked'       => array( 'أحدث_التغييرات_الموصولة', 'تغييرات_مرتبطة' ),
-       'Revisiondelete'            => array( 'حذف_مراجعة' ),
+       'Redirect'                  => array( 'تحويل' ),
+       'ResetTokens'               => array( 'إعادة_ضبط_المفاتيح' ),
+       'Revisiondelete'            => array( 'حذف_مراجعة', 'حذف_نسخة' ),
        'Search'                    => array( 'بحث' ),
        'Shortpages'                => array( 'صفحات_قصيرة' ),
        'Specialpages'              => array( 'صفحات_خاصة' ),
@@ -750,12 +757,10 @@ $1',
 'ok' => 'موافق',
 'retrievedfrom' => 'مجلوبة من "$1"',
 'youhavenewmessages' => 'لك $1 ($2).',
-'newmessageslink' => 'رسائل جديدة',
-'newmessagesdifflink' => 'أحدث تغيير',
 'youhavenewmessagesfromusers' => 'لديك $1 من {{PLURAL:$3|مستخدم واحد|مستخدم واحد|مستخدمين اثنين|$3 مستخدمين|$3 مستخدما|$3 مستخدم}} ($2).',
 'youhavenewmessagesmanyusers' => 'لديك $1 من مستخدمين كثر ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|رسالة جديدة|رسائل جديدة}}',
-'newmessagesdifflinkplural' => 'أحدث {{PLURAL:$1|تغيير|تغييرات}}',
+'newmessageslinkplural' => '{{PLURAL:$1|رسالة جديدة|999=رسائل جديدة}}',
+'newmessagesdifflinkplural' => 'أحدث {{PLURAL:$1|تغيير|999=تغييرات}}',
 'youhavenewmessagesmulti' => 'لديك رسائل جديدة في $1',
 'editsection' => 'عدل',
 'editold' => 'عدل',
@@ -889,7 +894,8 @@ $2',
 'invalidtitle-knownnamespace' => 'عنوان غير صالح في النطاق «$2» مع نص «$3»',
 'invalidtitle-unknownnamespace' => 'عنوان غير صالح ذو نطاق غير معروف رقم $1 ونص «$2»',
 'exception-nologin' => 'غير مسجل الدخول',
-'exception-nologin-text' => 'تتطلب هذه الصفحة أو الفعل منك القيام بتسجيل الدخول على هذه الويكي أولا.',
+'exception-nologin-text' => 'الرجاء [[Special:Userlogin|تسجيل الدخول]] لتتمكن من الوصول لهذه الصفحة أو أداء هذا الإجراء.',
+'exception-nologin-text-manual' => 'الرجاء $1 لتتمكن من الوصول لهذه الصفحة أو أداء هذا الإجراء.',
 
 # Virus scanner
 'virus-badscanner' => "ضبط سيء: ماسح فيروسات غير معروف: ''$1''",
@@ -1113,6 +1119,7 @@ $2
 'resettokens-legend' => 'غير المفاتيح',
 'resettokens-tokens' => 'مفاتيح:',
 'resettokens-token-label' => '$1 (القيمة الحالية: $2)',
+'resettokens-watchlist-token' => 'رمز تغذية الوب (آتوم/آس إس إس) [[Special:Watchlist|للتغيرات التي على قائمة مراقبتك]]',
 'resettokens-done' => 'تغيير المفاتيح',
 'resettokens-resetbutton' => 'غير المفاتيح المختارة',
 
@@ -1453,15 +1460,16 @@ $2
 لكن أجزاء من محتواها لن يكون مسموحا للعامة برؤيتها.",
 'revdelete-confirm' => 'الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.
 من فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].',
-'revdelete-suppress-text' => "الإخفاء ينبغي أن يتم استخدامه '''فقط''' في الحالات التالية:
+'revdelete-suppress-text' => "ينبغي للإخفاء أن يستخدم '''فقط''' في الحالات التالية:
+* معلومات يحتمل أن تكون تشهيرية
 * معلومات شخصية غير ملائمة
-*: ''عناوين المنازل وأرقام التليفونات، أرقام الضمان الاجتماعي، إلى آخره.''",
+*: ''عناوين المنازل وأرقام الهواتف وأرقام الهويات الوطنية إلى آخره.''",
 'revdelete-legend' => 'وضع ضوابط رؤية',
-'revdelete-hide-text' => 'أخف نص المراجعة',
+'revdelete-hide-text' => 'نص المراجعة',
 'revdelete-hide-image' => 'أخف محتوى الملف',
 'revdelete-hide-name' => 'أخف الفعل والهدف',
-'revdelete-hide-comment' => 'أخف تعليق التعديل',
-'revdelete-hide-user' => 'أخÙ\81 Ø§Ø³Ù\85/Ø¢Ù\8aبÙ\8a Ø§Ù\84Ù\85ستخدÙ\85',
+'revdelete-hide-comment' => 'ملخص التعديل',
+'revdelete-hide-user' => 'اسÙ\85 Ø§Ù\84Ù\85ستخدÙ\85/عÙ\86Ù\88اÙ\86 Ø§Ù\84Ø¢Ù\8aبÙ\8a',
 'revdelete-hide-restricted' => 'أخف البيانات عن الإداريين إضافة إلى الآخرين',
 'revdelete-radio-same' => '(لا تغير)',
 'revdelete-radio-set' => 'مخفي',
@@ -1624,7 +1632,7 @@ $1",
 'preferences' => 'تفضيلات',
 'mypreferences' => 'تفضيلات',
 'prefs-edits' => 'عدد التعديلات:',
-'prefsnologin' => 'غير مسجل الدخول',
+'prefsnologintext2' => 'الرجاء $1 لضبط تفضيلات المستخدم.',
 'changepassword' => 'غير كلمة السر',
 'prefs-skin' => 'واجهة',
 'skin-preview' => 'عرض مسبق',
@@ -1922,6 +1930,7 @@ $1",
 'recentchanges-label-minor' => 'هذا تعديل طفيف',
 'recentchanges-label-bot' => 'أُجْرِيَ هذا التعديل بواسطة بوت',
 'recentchanges-label-unpatrolled' => 'لم يراجع هذا التعديل إلى الآن',
+'recentchanges-legend-newpage' => '(راجع أيضا [[Special:NewPages|قائمة الصفحات الجديدة]])',
 'rcnote' => "بالأسفل {{PLURAL:$1|لا توجد تغييرات|التغيير الأخير|آخر تغييرين|آخر '''$1''' تغييرات|آخر '''$1''' تغييرا|آخر '''$1''' تغيير}} في {{PLURAL:$2||'''اليوم''' الماضي|'''اليومين''' الماضيين|ال'''$2''' أيام الماضية|ال'''$2''' يوما الماضيا|ال'''$2''' يوم الماضي}}، كما في $5، $4.",
 'rcnotefrom' => "بالأسفل التغييرات منذ '''$2''' (إلى '''$1''' معروضة).",
 'rclistfrom' => 'أظهر التغييرات بدءا من $1',
@@ -2729,7 +2738,7 @@ $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-nouser' => 'استرجع تعديلات مستخدم مخفيّ حتى آخر مراجعة ل[[User:$1|$1]]',
+'revertpage-nouser' => 'استرجع تعديلات مستخدم مخفيّ حتى آخر مراجعة ل{{GENDER:$1|[[User:$1|$1]]}}',
 'rollback-success' => 'استرجع تعديلات $1؛
 استرجع حتى آخر نسخة بواسطة $2.',
 
@@ -2875,7 +2884,7 @@ $1',
 'contributions' => 'مساهمات {{GENDER:$1|المستخدم|المستخدمة}}',
 'contributions-title' => 'مساهمات {{GENDER:$1|المستخدم|المستخدمة}} $1',
 'mycontris' => 'مساهماتي',
-'contribsub2' => 'ل$1 ($2)',
+'contribsub2' => 'ل{{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'لم يتم العثور على تغييرات تطابق هذه المحددات.',
 'uctop' => 'حالي',
 'month' => 'من شهر (وأقدم):',
@@ -3507,7 +3516,7 @@ $1',
 'svg-long-desc' => 'ملف SVG، أبعاده $1 × $2 بكسل، حجم الملف: $3',
 'svg-long-desc-animated' => 'ملف SVG متحرك، بمقاسات  $1  ×  $2  بكسل، حجم الملف: $3',
 'svg-long-error' => 'ملف SVG غير صالح: $1',
-'show-big-image' => 'دÙ\82Ø© Ù\83اÙ\85Ù\84Ø©',
+'show-big-image' => 'اÙ\84Ù\85Ù\84Ù\81 Ø§Ù\84أصÙ\84Ù\8a',
 'show-big-image-preview' => 'حجم هذه المعاينة: $1.',
 'show-big-image-other' => '{{PLURAL:$2||البعد الآخر|البعدان الآخران|الأبعاد الأخرى}}: $1.',
 'show-big-image-size' => '$1 × $2 بكسل',
@@ -4309,7 +4318,7 @@ $5
 # Special:Redirect
 'redirect' => 'تحويل باسم ملف أو اسم مستخدم أو رقم مراجعة',
 'redirect-legend' => 'تحويل إلى ملف أو صفحة',
-'redirect-summary' => 'هذه الصفحة الخاصة تحوّل إلى ملف (باسمه) أو صفحة (برقم إحدى مراجعاتها) أو إلى صفحة مستخدم (برقمه التعريفي).',
+'redirect-summary' => 'هذه الصفحة الخاصة تحوّل إلى ملف (باسمه) أو صفحة (برقم إحدى مراجعاتها) أو إلى صفحة مستخدم (برقمه التعريفي). الاستخدام [[{{#Special:Redirect}}/file/Example.jpg]] أو [[{{#Special:Redirect}}/revision/328429]] أو [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'حوّل',
 'redirect-lookup' => 'ابحث في:',
 'redirect-value' => 'الوجهة',
@@ -4331,9 +4340,9 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'الصفحات الخاصة',
+'specialpages-note-top' => 'المفتاح',
 'specialpages-note' => '* صفحات خاصة عادية.
-* <span class="mw-specialpagerestricted">صفحات خاصة للمخولين.</span>
-* <span class="mw-specialpagecached">صفحات خاصة لبيانات مخزنة فقط (قد تكون مهجورة).</span>',
+* <span class="mw-specialpagerestricted">صفحات خاصة للمخولين.</span>',
 'specialpages-group-maintenance' => 'تقارير الصيانة',
 'specialpages-group-other' => 'صفحات خاصة أخرى',
 'specialpages-group-login' => 'دخول / إنشاء حساب',
@@ -4539,4 +4548,21 @@ $5
 'limitreport-postexpandincludesize-value' => '$1/$2 بايت',
 'limitreport-templateargumentsize-value' => '$1/$2 بايت',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'فرد القوالب',
+'expand_templates_intro' => 'تتعامل هذه الصفحة الخاصة مع نصوص الويكي وتقوم بفرد كل القوالب الموجودة به.
+وتقوم أيضا بفرد دوال القوالب مثل
+<nowiki>{{</nowiki>#language:...}}، والمتغيرات مثل
+<nowiki>{{</nowiki>يوم}}-- وتقوم التعامل مع كل ما بين الأقواس المزدوجة.
+تقوم بفعل هذا عن طريق استدعاء المعالج المناسب من الميدياويكي.',
+'expand_templates_title' => 'عنوان صفحة هذا النص، لأجل معالجة {{FULLPAGENAME}} إلخ.:',
+'expand_templates_input' => 'النص المدخل:',
+'expand_templates_output' => 'النتيجة',
+'expand_templates_xml_output' => 'خرج XML',
+'expand_templates_ok' => 'موافق',
+'expand_templates_remove_comments' => 'أزل التعليقات',
+'expand_templates_remove_nowiki' => 'أخفِ وسوم <nowiki> في الناتج',
+'expand_templates_generate_xml' => 'اعرض شجرة XML parse',
+'expand_templates_preview' => 'عرض مسبق',
+
 );
index 19a3039..01861cf 100644 (file)
@@ -59,7 +59,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'ܒܪܝ_ܚܘܫܒܢܐ' ),
        'Deadendpages'              => array( 'ܦܐܬܬ̈ܐ_ܥܡ_ܚܪܬܐ_ܡܝܬܬܐ' ),
        'DeletedContributions'      => array( 'ܫܘܬܦܘ̈ܬܐ_ܫܝ̈ܦܬܐ' ),
-       'Disambiguations'           => array( 'ܬܘܚܡ̈ܐ_ܐܚܪ̈ܢܐ' ),
        'DoubleRedirects'           => array( 'ܨܘܝܒ̈ܐ_ܥܦܝ̈ܦܐ' ),
        'EditWatchlist'             => array( 'ܫܚܠܦ_ܪ̈ܗܝܬܐ' ),
        'Emailuser'                 => array( 'ܫܕܪ_ܒܝܠܕܪܐ_ܐܠܩܛܪܘܢܝܐ_ܠܡܦܠܚܢܐ' ),
@@ -307,7 +306,7 @@ $messages = array(
 'articlepage' => 'ܚܘܝܝܐ ܕܦܐܬܐ ܕܚܒܝܫܬ̈ܐ',
 'talk' => 'ܡܡܠܠܐ',
 'views' => 'ܚܙܝܬ̈ܐ',
-'toolbox' => 'ܣܢÜ\95Ü\98Ü©Ü\90 Ü\95Ü¡Ü\90Ü¢Ì\88Ü\90',
+'toolbox' => 'ܡܐܢ̈ܐ',
 'userpage' => 'ܚܙܝ ܦܐܬܐ ܕܡܦܠܚܢܐ',
 'projectpage' => 'ܚܙܝ ܦܐܬܐ ܕܬܪܡܝܬܐ',
 'imagepage' => 'ܚܙܝ ܦܐܬܐ ܕܠܦܦܐ',
@@ -358,12 +357,10 @@ $1',
 
 'ok' => 'ܛܒ',
 'youhavenewmessages' => 'ܐܝܬ ܠܟ $1 ($2).',
-'newmessageslink' => 'ܐܓܪ̈ܬܐ ܚܕ̈ܬܬܐ',
-'newmessagesdifflink' => 'ܫܘܚܠܦܐ ܐܚܪܝܐ',
 'youhavenewmessagesfromusers' => 'ܐܝܬ ܠܟ $1 ܡܢ {{PLURAL:$3|ܡܦܠܚܢܐ ܐܚܪܢܐ|$3 ܡܦܠܚܢ̈ܐ}} ($2).',
 'youhavenewmessagesmanyusers' => 'ܐܝܬ ܠܟ $1 ܡܢ ܡܦܠܚܢ̈ܐ ܣܓܝܐ̈ܐ ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|ܐܓܪܬܐ ܚܕܬܐ|ܐܓܪ̈ܬܐ ܚܕ̈ܬܬܐ}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|ܫܘܚܠܦܐ ܐܚܪܝܐ|ܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ}}',
+'newmessageslinkplural' => '{{PLURAL:$1|ܐܓܪܬܐ ܚܕܬܐ|999=ܐܓܪ̈ܬܐ ܚܕ̈ܬܬܐ}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ܫܘܚܠܦܐ ܐܚܪܝܐ|999=ܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ}}',
 'youhavenewmessagesmulti' => 'ܐܝܬ ܠܟ ܐܓܪ̈ܬܐ ܚܕ̈ܬܬܐ ܒ $1',
 'editsection' => 'ܫܚܠܦ',
 'editold' => 'ܫܚܠܦ',
@@ -626,11 +623,11 @@ $1',
 'revdelete-hide-text' => 'ܛܫܝ ܟܬܒܬܐ ܕܬܢܝܬܐ',
 'revdelete-hide-image' => 'ܛܫܝ ܚܒܝܫܬ̈ܐ ܕܠܦܦܐ',
 'revdelete-hide-name' => 'ܛܫܝ ܥܒܕܐ ܘܢܘܦܐ',
-'revdelete-hide-comment' => 'Ü\9bÜ«Ü\9d ܟܪܝܘܬܐ ܕܫܘܚܠܦܐ',
-'revdelete-hide-user' => 'Ü\9bÜ«Ü\9d Ü«Ü¡Ü\90\90Ü\9d Ü¦Ü\9d (IP) Ü\95ܡܦܠÜ\9aÜ¢Ü\90',
+'revdelete-hide-comment' => 'Ü«Ü\9aܠܦ ܟܪܝܘܬܐ ܕܫܘܚܠܦܐ',
+'revdelete-hide-user' => 'Ü«Ü¡Ü\90 Ü\95ܡܦܠÜ\9aÜ¢Ü\90 Ü\95Ü¡Ü«Ü\9aܠܦܢÜ\90\90Ü\9d Ü¦Ü\9d (IP)',
 'revdelete-radio-same' => '(ܠܐ ܬܫܚܠܦ)',
-'revdelete-radio-set' => 'Ü\90Ü\9dÜ¢',
-'revdelete-radio-unset' => 'Ü ܐ',
+'revdelete-radio-set' => 'Ü\9bÜ«Ü\9dÜ\90',
+'revdelete-radio-unset' => 'Ü\93Ü Ü\9dܐ',
 'revdelete-log' => 'ܥܠܬܐ:',
 'revdel-restore' => 'ܫܚܠܦ ܚܙܝܬܐ',
 'revdel-restore-deleted' => 'ܬܢܝܬ̈ܐ ܫܝܦ̈ܐ',
@@ -727,7 +724,6 @@ $1',
 'preferences' => 'ܨܒܝܢܝܘܬ̈ܐ',
 'mypreferences' => 'ܨܒܝܢܝܘܬ̈ܐ',
 'prefs-edits' => 'ܡܢܝܢܐ ܕܫܘܚܠܦ̈ܐ:',
-'prefsnologin' => 'ܠܝܬܝܟ ܥܠܝܠܐ',
 'changepassword' => 'ܫܚܠܦ ܡܠܬܐ ܕܥܠܠܐ',
 'prefs-skin' => 'ܓܠܕܐ',
 'skin-preview' => 'ܚܝܪܐ ܩܕܡܝܐ',
@@ -892,6 +888,7 @@ $1',
 'recentchanges-label-minor' => 'ܗܢܘ ܫܘܚܠܦܐ ܙܥܘܪܐ',
 'recentchanges-label-bot' => 'ܒܘܬ (bot) ܥܒܕ ܗܢܐ ܫܘܚܠܦܐ',
 'recentchanges-label-unpatrolled' => 'ܫܘܚܠܦܐ ܗܢܐ ܠܐ ܗܘ ܟܪܝܟܐ ܠܗܫܐ',
+'recentchanges-legend-newpage' => '$1 - ܦܐܬܐ ܚܕܬܐ',
 'rcnotefrom' => "ܠܬܚܬ ܫܘܚܠܦ̈ܐ ܕܡܢ '''$2''' (ܥܕ '''$1''' ܡܬܚܙܝܢ̈ܐ).",
 'rclistfrom' => 'ܚܘܝ ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܡܢ $1',
 'rcshowhideminor' => '$1 ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ',
@@ -1628,7 +1625,7 @@ $1',
 'file-info-size' => '$1 × $2 ܦܩܣܠ، ܥܓܪܐ ܕܠܦܦܐ: $3، ܐܕܫܐ ܕ MIME: $4',
 'file-info-size-pages' => '$1 × $2 ܦܩܣܠ, ܥܓܪܐ ܕܠܦܦܐ: $3, ܐܕܫܐ ܕ MIME: $4, $5 {{PLURAL:$5|ܦܐܬܐ|ܦܐܬܬ̈ܐ}}',
 'file-nohires' => 'ܠܝܬ ܢܩܕܘܬܐ ܝܬܝܪ ܡܢ ܗܢܐ.',
-'show-big-image' => 'ܢܩÜ\95Ü\98ܬÜ\90 Ü\93Ü¡Ü\9dܪܬܐ',
+'show-big-image' => 'ܠܦܦÜ\90 Ü«ÜªÜ«Ü\9dܐ',
 'show-big-image-preview' => 'ܥܓܪܐ ܕܓܠܚܐ: $1.',
 'show-big-image-size' => '$1 × $2 ܦܩܣܠ',
 
@@ -1861,4 +1858,10 @@ $1',
 'searchsuggest-search' => 'ܒܨܝ',
 'searchsuggest-containing' => 'ܬܚܒܘܫ...',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'ܐܪܘܚ ܩܠܒ̈ܐ',
+'expand_templates_output' => 'ܦܠܛܐ',
+'expand_templates_ok' => 'ܛܒ',
+'expand_templates_preview' => 'ܚܝܪܐ ܩܕܡܝܐ',
+
 );
index 4d58115..5a727dc 100644 (file)
@@ -203,8 +203,6 @@ $messages = array(
 'ok' => 'Feley',
 'retrievedfrom' => 'Nentungey "$1" mew',
 'youhavenewmessages' => 'Nieymi $1 ($2).',
-'newmessageslink' => 'weke werkün',
-'newmessagesdifflink' => 'we kalekünun',
 'newmessagesdifflinkplural' => 'we {{PLURAL:$1|kalekünuy|kalekünuy}}',
 'youhavenewmessagesmulti' => 'Nieymi we yefalzugu $1 mew.',
 'editsection' => 'Wirin',
@@ -432,7 +430,6 @@ Rulpakünuy feychi kangelkülelu dungu.",
 # Preferences page
 'mypreferences' => 'Dullin',
 'prefs-edits' => 'Rakin Wirin:',
-'prefsnologin' => 'Mülelay Konün',
 'skin-preview' => 'Pen chum müley',
 'prefs-editing' => 'Wirin',
 'searchresultshead' => 'Kintun',
@@ -495,6 +492,7 @@ Rulpakünuy feychi kangelkülelu dungu.",
 'recentchanges-label-minor' => 'Tüfachi ta kiñe pichi wirin',
 'recentchanges-label-bot' => 'Kiñe kizuamukelu küzauwe dewmay tüfachi wirin.',
 'recentchanges-label-unpatrolled' => 'Pukintulelay tüfachi wirin.',
+'recentchanges-legend-newpage' => '$1 - We Pakina',
 'rcnote' => 'Nagpüle {{PLURAL:müley $1 kalekünun}}, rupalu {{PLURAL:$2 antü}}, $5, $4.',
 'rcnotefrom' => "Nagpüle müley fill wirin tuwülu '''$2''' mew (tripalu '''$1''' mew).",
 'rclistfrom' => 'Adkintun weke kalekünun amuamugelu $1',
index 1ca7708..bc20c1c 100644 (file)
@@ -276,8 +276,6 @@ chof [[Special:Version|sfht lversion]]',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Mrejjĝa men "$1"',
 'youhavenewmessages' => 'Ĝendek $1 ($2).',
-'newmessageslink' => 'méṣajaṫ jdad',
-'newmessagesdifflink' => 'ṫ-ṫeġyir l-leĥĥer',
 'youhavenewmessagesmulti' => 'Jawek méṣajaṫ jdad fe $1',
 'editsection' => 'Ṣayeb',
 'editold' => 'ṣayeb',
@@ -953,7 +951,6 @@ Laḫed ana imken ikono l-indexaṫ dial {{SITENAME}} qdam o ma bqaoċ ṣalḫi
 'preferences' => 'ṫfḍilaṫ',
 'mypreferences' => 'Ḫajaṫ li kanfeḍḍel',
 'prefs-edits' => 'ĝadad ṫ-ṫĝdilaṫ:',
-'prefsnologin' => 'nta mamkoniktich',
 'changepassword' => 'tbdl lmot de passe',
 'prefs-skin' => 'skin',
 'skin-preview' => 'L-Prévizualizasyon',
index eefafed..b8a6061 100644 (file)
@@ -52,7 +52,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'صفح_قديمه' ),
        'Blankpage'                 => array( 'صفحه_فارضيه' ),
        'Block'                     => array( 'بلوك', 'بلوك_IP', 'بلوك_يوزر' ),
-       'Blockme'                   => array( 'بلوك_لنفسى' ),
        'Booksources'               => array( 'مصادر_كتاب' ),
        'BrokenRedirects'           => array( 'تحويلات_مكسوره' ),
        'Categories'                => array( 'تصانيف' ),
@@ -62,7 +61,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'ابتدى_حساب' ),
        'Deadendpages'              => array( 'صفح_نهايه_مسدوده' ),
        'DeletedContributions'      => array( 'مساهمات_ممسوحه' ),
-       'Disambiguations'           => array( 'توضيحات' ),
        'DoubleRedirects'           => array( 'تحويلات_دوبل' ),
        'Emailuser'                 => array( 'ابعت_ايميل_لليوزر' ),
        'Export'                    => array( 'تصدير' ),
@@ -244,8 +242,8 @@ $magicWords = array(
        'revisiontimestamp'         => array( '1', 'طابع_وقت_المراجعة', 'REVISIONTIMESTAMP' ),
        'revisionuser'              => array( '1', 'مستخدم_المراجعة', 'REVISIONUSER' ),
        'plural'                    => array( '0', 'جمع:', 'PLURAL:' ),
-       'fullurl'                   => array( '0', 'مسار_كامل:', 'عنوان_كامل:', 'FULLURL:' ),
-       'fullurle'                  => array( '0', 'عنوان_كامل:', 'مسار_كامل:', 'FULLURLE:' ),
+       'fullurl'                   => array( '0', 'عنوان_كامل:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'مسار_كامل:', 'FULLURLE:' ),
        'lcfirst'                   => array( '0', 'عنوان_كبير:', 'LCFIRST:' ),
        'ucfirst'                   => array( '0', 'عنوان_صغير:', 'UCFIRST:' ),
        'lc'                        => array( '0', 'صغير:', 'LC:' ),
@@ -310,12 +308,12 @@ $messages = array(
 'tog-hidepatrolled' => 'خبى التعديلات المتراجعه من اخر التعديلات',
 'tog-newpageshidepatrolled' => 'خبى الصفح المتراجعه من ليستة الصفح الجديده',
 'tog-extendwatchlist' => 'وسع ليستة المراقبه علشان تبين كل التعديلات, مش بس اجدد تعديلات',
-'tog-usenewrc' => 'استعÙ\85Ù\84 Ø§Ø¬Ø¯Ø¯ ØªØºÙ\8aÙ\8aرات Ù\85تÙ\82Ù\88Ù\8aÙ\87 (بÙ\8aحتاج JavaScript).',
+'tog-usenewrc' => 'جÙ\85ع  Ø§Ù\84تغÙ\8aÙ\8aرات  Ø­Ø³Ø¨ Ø§Ù\84صÙ\81Ø­Ù\87 Ù\81 Ø§Ø¬Ø¯Ø¯ Ø§Ù\84تغÙ\8aÙ\8aرات Ù\88 Ù\84ستة Ø§Ù\84صÙ\81Ø­ Ø§Ù\84Ù\84Ù\89 Ø¨Ø§Ø±Ø§Ù\82بÙ\87ا',
 'tog-numberheadings' => 'رقم العناوين اوتوماتيك',
-'tog-showtoolbar' => 'بÙ\8aÙ\86 Ø§Ù\84toolbar Ø¨ØªØ§Ø¹ Ø§Ù\84تعدÙ\8aÙ\84 (بÙ\8aحتاج JavaScript)',
-'tog-editondblclick' => 'عدل الصفح لما تدوس مرتين (بيحتاج JavaScript)',
+'tog-showtoolbar' => 'بÙ\8aÙ\86 Ø´Ø±Ù\8aØ· Ø§Ù\84تعدÙ\8aÙ\84',
+'tog-editondblclick' => 'عدل الصفح لما تدوس مرتين',
 'tog-editsection' => 'اسمح بـ تعديل الاجزاء عن طريق لينكات [تعديل]',
-'tog-editsectiononrightclick' => 'اسمح بـ تعديل الاجزاء لما تعمل right-click بـ الماوس على عناوين الاجزاء (بيحتاج JavaScript)',
+'tog-editsectiononrightclick' => 'اسمح بـ تعديل الاجزاء لما تعمل كليك يمين بـالماوس على عناوين الاجزاء',
 'tog-showtoc' => 'بين جدول المحتويات (بتاع الصفح اللى فيها اكتر من 3 عناوين)',
 'tog-rememberpassword' => ' (لمدة   $1 {{PLURAL:$1|يوم|يوم}})خليك فاكر دخولى على الكمبيوتر دا',
 'tog-watchcreations' => 'زوّد الصفح اللى ابتديتها على ليستة الصفح اللى باراقبها.',
@@ -334,7 +332,7 @@ $messages = array(
 'tog-shownumberswatching' => 'بين عدد اليوزرز المراقبين',
 'tog-oldsig' => 'الامضا دلوقتى:',
 'tog-fancysig' => 'امضا خام (من غير لينك أوتوماتيك)',
-'tog-uselivepreview' => 'استخدم البروفة السريعة (جافاسكريبت) (تجريبي)',
+'tog-uselivepreview' => 'استخدم البروفه السريعه (تجريبي)',
 'tog-forceeditsummary' => 'نبهنى عند تدخيل ملخص للتعديل  فاضي',
 'tog-watchlisthideown' => 'خبى التعديلات بتاعتى من لستة المراقبة',
 'tog-watchlisthidebots' => 'خبى التعديلات بتاعة البوت من لستة المراقبة',
@@ -348,10 +346,11 @@ $messages = array(
 'tog-noconvertlink' => 'عطل تحويل عناوين الوصلات',
 'tog-norollbackdiff' => 'الغى الاختلافات بعد ما تعمل الرول باك',
 'tog-useeditwarning' => 'حذّرنى لما اسيب صفحة تعديل فيها تغييرات مش متسييڤه',
+'tog-prefershttps' => 'إستخدم  وصله متأمنه بعد الدخول',
 
 'underline-always' => 'دايما',
 'underline-never' => 'ابدا',
-'underline-default' => 'على حسب إعدادات المتصفح',
+'underline-default' => ' حسب  المظهر و لا البراوزر',
 
 # Font style option in Special:Preferences
 'editfont-style' => ':الفونت بتاع مساحة التعديل',
@@ -411,6 +410,18 @@ $messages = array(
 'oct' => 'اكتوبر',
 'nov' => 'نوفمبر',
 'dec' => 'ديسمبر',
+'january-date' => 'يناير $1',
+'february-date' => 'فبراير $1',
+'march-date' => 'مارس $1',
+'april-date' => 'ابريل $1',
+'may-date' => 'مايو $1',
+'june-date' => 'يونيه $1',
+'july-date' => 'يوليه $1',
+'august-date' => 'اغسطس $1',
+'september-date' => 'سبتمبر $1',
+'october-date' => 'اكتوبر $1',
+'november-date' => 'نوفمبر $1',
+'december-date' => 'ديسمبر $1',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|تصنيف|تصانيف}}',
@@ -429,12 +440,14 @@ $messages = array(
 'listingcontinuesabbrev' => 'متابعه',
 'index-category' => 'صفحات متفهرسه',
 'noindex-category' => 'صفحات مش متفهرسه',
+'broken-file-category' => 'صفحات  فيها روابط ملفات مش شغاله',
 
 'about' => 'عن',
 'article' => 'صفحة محتوى',
 'newwindow' => '(بتفتح ويندو جديده)',
 'cancel' => 'كانسل',
 'moredotdotdot' => 'اكتر...',
+'morenotlisted' => 'اللسته دى  مش كامله.',
 'mypage' => 'صفحه',
 'mytalk' => 'كلام',
 'anontalk' => 'المناقشة مع عنوان الأيبى دا',
@@ -458,6 +471,7 @@ $messages = array(
 'vector-action-protect' => 'حمايه',
 'vector-action-undelete' => 'الغى المسح',
 'vector-action-unprotect' => 'غير الحمايه',
+'vector-simplesearch-preference' => ' تشغيل شريط التدوير  المبسط (لمظهر فيكتور بس)',
 'vector-view-create' => 'اعمل',
 'vector-view-edit' => 'تعديل',
 'vector-view-history' => 'استعراض التاريخ',
@@ -467,6 +481,7 @@ $messages = array(
 'namespaces' => 'النطاقات',
 'variants' => 'المتغيرات',
 
+'navigation-heading' => 'لستة التصفح',
 'errorpagetitle' => 'غلطه',
 'returnto' => 'ارجع ل $1.',
 'tagline' => 'من ويكيبيديا, الموسوعه الحره',
@@ -481,13 +496,16 @@ $messages = array(
 'printableversion' => 'نسخه للطبع',
 'permalink' => 'لينك دايم',
 'print' => 'اطبع',
+'view' => 'شوف',
 'edit' => 'تعديل',
 'create' => 'إبتدى',
 'editthispage' => 'عدل الصفحه دى',
 'create-this-page' => 'أنشيء الصفحه دى',
 'delete' => 'مسح',
 'deletethispage' => 'امسح الصفحه دى',
+'undeletethispage' => 'استرجاع الصفحه دى',
 'undelete_short' => 'استرجاع {{PLURAL:$1|تعديل واحد|تعديلان|$1 تعديلات|$1 تعديل|$1 تعديلا}}',
+'viewdeleted_short' => '{{PLURAL:$1|}}{{PLURAL:$1|تعديل واحد ملغي|تعديلين ملغيين|$1 تعديلات ملغية|$1 تعديل ملغي|$1 تعديل ملغي}}',
 'protect' => 'حمايه',
 'protect_change' => 'غيّر',
 'protectthispage' => 'احمى الصفحه دى',
@@ -532,7 +550,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'عن {{SITENAME}}',
 'aboutpage' => 'Project:معلومات عن',
-'copyright' => 'اÙ\84Ù\85حتÙ\88Ù\89 Ù\85Ù\88جÙ\88د ØªØ­Øª $1.',
+'copyright' => 'اÙ\84Ù\83Ù\84اÙ\85 Ù\88 Ø§Ù\84صÙ\88ر Ù\85Ù\88جÙ\88دÙ\8aÙ\86 Ø­Ø³Ø¨  $ 1 Ù\85اعدا Ø§Ù\84حاÙ\84ات Ø¥Ù\84Ù\84Ù\89 Ù\85Ù\83تÙ\88ب Ø¹Ù\86دÙ\87ا Ø­Ø§Ø¬Ù\87 ØªØ§Ù\86Ù\8aÙ\87.',
 'copyrightpage' => '{{ns:project}}:حقوق النسخ',
 'currentevents' => 'الاخبار دلوقتى',
 'currentevents-url' => 'Project:الاخبار دلوقتى',
@@ -559,8 +577,10 @@ $1',
 'ok' => 'موافئ',
 'retrievedfrom' => 'اتجابت من "$1"',
 'youhavenewmessages' => 'عندك $1 ($2).',
-'newmessageslink' => 'رسايل جديده',
-'newmessagesdifflink' => 'اخر تعديل',
+'youhavenewmessagesfromusers' => 'عندك $1 من {{PLURAL:${{PLURAL:$3|}}3|يوزر واحد|يوزر واحد|اتنين يوزر |$3 مستخدمين|$3 يوزر|$3 يوزر}} ($2).',
+'youhavenewmessagesmanyusers' => 'عندك $1 من يوزرات كتير  ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|رساله جديده|999=رسايل جديده}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|}}{{PLURAL:$1|تعديل|تعديلين|$1 تعديلات|$1 تعديل|$1 تعديل}}',
 'youhavenewmessagesmulti' => 'عندك ميسيدج جديدة فى $1',
 'editsection' => 'تعديل',
 'editold' => 'تعديل',
@@ -571,6 +591,8 @@ $1',
 'toc' => 'المحتويات',
 'showtoc' => 'عرض',
 'hidetoc' => 'تخبية',
+'collapsible-collapse' => 'خبى',
+'collapsible-expand' => 'اتوسع',
 'thisisdeleted' => 'عرض او استرجاع $1؟',
 'viewdeleted' => 'عرض $1؟',
 'restorelink' => '{{PLURAL:$1|تعديل واحد ملغي|تعديلين ملغيين|$1 تعديلات ملغية|$1 تعديل ملغي|$1 تعديل ملغي}}',
@@ -582,6 +604,8 @@ $1',
 'page-rss-feed' => '"$1" ار‌ اس‌ اس فييد',
 'page-atom-feed' => '"$1" فييد أتوم',
 'red-link-title' => '$1 (الصفحه مالهاش وجود)',
+'sort-descending' => 'تنازلى',
+'sort-ascending' => 'تصاعدى',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'صفحه',
@@ -641,8 +665,8 @@ $1',
 'badtitle' => 'عنوان غلط',
 'badtitletext' => 'العنوان المطلوب للصفحه مش موجود او فاضى, او اللينك بين اللغات او بين المشاريع غلط.
 ممكن يكون موجود رمز او اكتر ما ينفع ش يستخدم فى العناوين.',
-'perfcached' => 'البيانات (الـ data) دى معمول لها كاش (cache) و ممكن ما تكونش متحدثه. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'البيانات (الـ data) دى معمول لها كاش (cache), و اخر تحديث ليها كان فى $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'البيانات  دى معمول لها كاش (cache) و ممكن ما تكونش متحدثه. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
+'perfcachedts' => 'البيانات  دى معمول لها كاش , و اخر تحديث ليها كان فى $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
 'querypage-no-updates' => 'التحديثات بتاعة الصفحه دى متعطله دلوقتى.
 البيانات (الـ data) اللى هنا مش ح تتحدث فى الوقت الحاضر.',
 'wrong_wfQuery_params' => 'محددات غلط فى wfQuery()<br />
@@ -651,10 +675,13 @@ $1',
 'viewsource' => 'عرض المصدر',
 'actionthrottled' => 'العمليه دى اتزنقت',
 'actionthrottledtext' => 'علشان نمنع ال سبام ،أنت ممنوع تعمل  الفعل دا عدد كبير من المرات فى فترة زمنية قصيرة، و انت ا تجاوزت  الحد دا . لو سمحت تحاول مرة ثانية بعد دقائق.',
-'protectedpagetext' => 'الصفحة دى اتقفلت فى وش التعديل.',
+'protectedpagetext' => 'الصفحة دى اتحمت من التعديل.',
 'viewsourcetext' => 'ممكن تشوف وتنسخ مصدر  الصفحه دى:',
-'protectedinterface' => 'الصفحة دى هى اللى بتوفر نص الواجهة بتاعة البرنامج،وهى مقفولة لمنع التخريب.',
-'editinginterface' => "'''تحذير''': أنت بتعدل صفحة بتستخدم فى الواجهة النصية  بتاعة البرنامج. التغييرات فى الصفحة دى ها تأثر على مظهر واجهة اليوزر لليوزرز التانيين. للترجمات، لو سمحت استخدم [//translatewiki.net/wiki/Main_Page?setlang=ar بيتاويكى]، مشروع ترجمة الميدياويكى.",
+'protectedinterface' => 'الصفحة دى هى اللى بتوفر نص الواجهة بتاعة البرنامج،وهى مقفولة لمنع التخريب.
+علشان إضافة أو تغيير الترجمات لجميع مشاريع الويكي،  لو سمحت روح على [//translatewiki.net/ translatewiki.net]، مشروع ترجمة ميدياويكى',
+'editinginterface' => "'''تحذير''': أنت بتعدل صفحة بتستخدم فى الواجهة النصية  بتاعة البرنامج. 
+التغييرات فى الصفحة دى ها تأثر على مظهر واجهة اليوزر لليوزرز التانيين. 
+علشان إضافة أو تغيير الترجمات لجميع مشاريع الويكي،  لو سمحت روح على [//translatewiki.net/ translatewiki.net]، مشروع ترجمة ميدياويكى",
 'cascadeprotected' => 'الصفحة دى محمية من التعديل، بسبب انها مدمجة فى {{PLURAL:$1|الصفحة|الصفحات}} دي، اللى مستعمل فيها خاصية "حماية الصفحات المدمجة" :
 $2',
 'namespaceprotected' => "ما عندكش صلاحية تعديل الصفحات  اللى فى نطاق '''$1'''.",
@@ -669,7 +696,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''أنت دلوقتى مش مسجل دخولك.'''
 
-تقدر تكمل استعمال {{SITENAME}} على انك مجهول، أو <span class='plainlinks'>[$1 الدخول مرة تانيه]</span> بنفس الاسم أو باسم تاني.
+تقدر تكمل استعمال {{SITENAME}} على انك مجهول، أو [[Special:UserLogin|الدخول مرة تانيه]] بنفس الاسم أو باسم تاني.
 ممكن تشوف بعض الصفحات  كأنك متسجل ، و دا علشان استعمال الصفحات المتخبية فى المتصفح بتاعك.",
 'yourname' => 'اليوزرنيم:',
 'yourpassword' => 'الباسوورد:',
@@ -691,7 +718,7 @@ $2',
 'gotaccount' => "عندك حساب؟ '''$1'''.",
 'gotaccountlink' => 'دخول',
 'userlogin-resetlink' => 'نسيت تفاصيل الدخول؟',
-'createaccountmail' => 'بÙ\80 Ø§Ù\84اÙ\8aÙ\85Ù\8aÙ\84',
+'createaccountmail' => 'استخدÙ\85 Ø¨Ø§Ø³Ù\88رد Ù\85ؤÙ\82تÙ\87 Ù\88 Ø¥Ø¨Ø¹ØªÙ\87ا Ø¹ Ø§Ù\84اÙ\8aÙ\85Ù\8aÙ\84 Ø§Ù\84Ù\85حدد Ø¯Ù\87',
 'createaccountreason' => 'السبب:',
 'badretype' => 'كلمتين السر اللى  كتبتهم مش  زى بعضهم',
 'userexists' => 'اسم اليوزر اللى كتبته بيستعمله يوزر غيرك.
@@ -741,7 +768,7 @@ $2',
 'mailerror' => 'غلط فى بعتان الايميل : $1',
 'acct_creation_throttle_hit' => 'الناس اللى دخلت ع الويكى دا باستعمال عنوان الاى بى بتاعك فتحو {{PLURAL:$1|1 حساب|$1 حساب}} ف اليوم اللى فات دا, يعنى وصلو للحد الاقصى المسموح بيه فى الفترة الزمنيه المحدده..
 و عشان كدا, الزوار اللى بيدخلو بعنوان الاى بى دا مش مسموح لهم يفتحو حسابات اكتر فى الوقت الحالى .',
-'emailauthenticated' => 'اتأÙ\83دÙ\86ا Ù\85Ù\86 Ø§Ù\84اÙ\8aÙ\85Ù\8aÙ\84 Ø¨ØªØ§Ø¹Ù\83 Ù\81Ù\89 $2 الساعة $3.',
+'emailauthenticated' => 'اتأÙ\83دÙ\86ا Ù\85Ù\86 Ø§Ù\84اÙ\8aÙ\85Ù\8aÙ\84 Ø¨ØªØ§Ø¹Ù\83 Ù\8aÙ\88Ù\85 $2 الساعة $3.',
 'emailnotauthenticated' => 'لسة ما اتكدناش من الايميل بتاعك.
 مش ح يتبعتلك اى  ايميلات بخصوص الميزات دي.',
 'noemailprefs' => 'علشان الخصايص دى تشتغل لازم تحددلك عنوان ايميل.',
@@ -755,7 +782,7 @@ $2',
 
 لو سمحت تتجاهل الرسالة دى اذا الحساب دا اتفتحلك بالغلط.',
 'usernamehasherror' => 'اسم اليوزر مش ممكن يكون فيه حروف هاش',
-'login-throttled' => 'انت عملت  محاولات لوجين كتيره حديثة على الحساب ده.
+'login-throttled' => 'انت عملت  محاولات لوجين كتيره  ع الحساب ده.
 من فضلك استنى قبل المحاولة مرة تانيه.',
 'loginlanguagelabel' => 'اللغة: $1',
 
@@ -768,7 +795,7 @@ $2',
 'newpassword' => 'الباسورد جديدة:',
 'retypenew' => 'اكتب الباسورد الجديده تانى:',
 'resetpass_submit' => 'اظبط الباسورد و ادخل',
-'changepassword-success' => 'الباسورد بتاعتك اتغيرت بنجاح! دلوقتى  بنسجل دخولك...',
+'changepassword-success' => 'الباسورد بتاعتك اتغيرت بنجاح!',
 'resetpass_forbidden' => 'مش ممكن تغيير الباسورد',
 'resetpass-no-info' => 'لازم تسجل دخولك علشان تقدر توصل للصفحة دى على طول.',
 'resetpass-submit-loggedin' => 'غير الباسورد',
@@ -857,7 +884,7 @@ $2',
 'accmailtitle' => ' كلمة السر اتبعتت .',
 'accmailtext' => "الباسورد العشوائيه اللى اتعملت لـ[[User talk:$1|$1]]  اتبعتت لـ $2.
 
-الباسورد بتاعة الحساب الجديد دا ممكن تتغير فى صفحة ''[[Special:ChangePassword|تغيير الباسورد]]''  وقت تسجيل الدخول.",
+الباسورد بتاعة الحساب الجديد دا ممكن تتغير فى صفحة ''[[Special:ChangePassword|تغيير الباسورد]]''   بعد  تسجيل الدخول.",
 'newarticle' => '(جديد)',
 'newarticletext' => "انت وصلت لصفحه مابتدتش لسه.
 علشان  تبتدى الصفحة ابتدى الكتابه فى الصندوق اللى تحت.
@@ -926,12 +953,12 @@ $2',
 'copyrightwarning2' => "لو سمحت تعمل حسابك ان كل مشاركاتك فى {{SITENAME}} ممكن المشاركين التانيين يعدلوها،يغيروها، او يمسحوها خالص. لو مانتش حابب ان كتاباتك تتعدل و تتغير بالشكل دا، فياريت ما تنشرهاش هنا.<br />.
 و كمان انت بتدينا كلمة شرف  انك صاحب الكتابات دي، او انك نقلتها من مكان مش خاضع لحقوق النشر .(شوف التفاصيل فى $1 ).
 '''لو سمحت ما تحطش هنا اى نص خاضع لحقوق النشر من غير تصريح!'''.",
-'longpageerror' => "'''غلط: النص اللى دخلته حجمه $1 كيلوبايت، ودا أكبر من الحد الأقصى و اللى هو $2 كيلوبايت.
+'longpageerror' => "'''غلط: النص اللى دخلته حجمه $1 كيلوبايت، ودا أكبر من الحد الأقصى و اللى هو {{PLURAL:$2|واحد كيلوبايت|$2 كيلوبايت}}.
 مش ممكن يتحفظ.'''",
-'readonlywarning' => "'''تحذير: قاعدة البيانات اتقفلت للصيانة، و علشان كدا انت مش ح تقدر تحفظ التعديلات اللى عملتها دلوقاي.
+'readonlywarning' => "'''تحذير: قاعدة البيانات اتقفلت للصيانة، و علشان كدا انت مش ح تقدر تحفظ التعديلات اللى عملتها دلواتى.
 لو حبيت ممكن  تنسخ النص وتحفظه فى ملف نصى علشان تستعمله بعدين.'''
 
-الإدارى اللى أغلقها أعطى هذا التفسير: $1",
+الإدارى اللى قفلها كتب السبب دا $1",
 'protectedpagewarning' => "'''تحذير:الصفحة دى اتقفلت بطريقه تخلى اليوزرات السيسوبات هما بس اللى يقدرو يعدلوها.'''
 اخر سجل محطوط تحت علشان المراجعه:",
 'semiprotectedpagewarning' => "'''ملاحظه:''' الصفحه دى اتقفلت بطريقه تخلّى اليوزرات المتسجلين بس هما اللى يقدرو يعدّلوها.
@@ -1031,7 +1058,7 @@ $2',
 حاول [[Special:Search|التدوير فى الويكى]] عن صفحات جديدة ليها صلة.',
 
 # Revision deletion
-'rev-deleted-comment' => '(التعليق اتشال)',
+'rev-deleted-comment' => '( ملخص التعديل اتمسح)',
 'rev-deleted-user' => '(اسم اليوزر اتشال)',
 'rev-deleted-event' => '(السجل إتشال)',
 'rev-deleted-user-contribs' => '[اسم اليوزر أو الآى بى اتشال - التعديل مخفى من المساهمات]',
@@ -1236,7 +1263,6 @@ $1",
 'preferences' => 'تفضيلات',
 'mypreferences' => 'تفضيلاتى',
 'prefs-edits' => 'عدد التعديلات:',
-'prefsnologin' => 'مش متسجل',
 'changepassword' => 'غير الباسورد',
 'prefs-skin' => 'الوش',
 'skin-preview' => 'بروفه',
@@ -1503,6 +1529,7 @@ $1",
 'recentchanges-label-minor' => 'ده تعديل صغير',
 'recentchanges-label-bot' => 'التعديل ده عمله بوت',
 'recentchanges-label-unpatrolled' => 'التعديل ده مإتراجعش لسه',
+'recentchanges-legend-newpage' => '$1 - صفحه جديده',
 'rcnote' => "فيه تحت {{PLURAL:$1|'''1''' تغيير|آخر '''$1''' تغيير}} فى آخر {{PLURAL:$2|يوم|'''$2''' يوم}}، بدءا من $5، $4.",
 'rcnotefrom' => "دى التعديلات من '''$2''' (ل '''$1''' معروضه).",
 'rclistfrom' => 'اظهر التعديلات بدايه من $1',
@@ -1524,7 +1551,7 @@ $1",
 'rc_categories' => 'حصر لتصنيفات (مفصولة برمز "|")',
 'rc_categories_any' => 'أى',
 'newsectionsummary' => '/* $1 */ قسم جديد',
-'rc-enhanced-expand' => 'عرض التفاصيل (يتطلب جافاسكريبت)',
+'rc-enhanced-expand' => '[اعرض التفاصيل]',
 'rc-enhanced-hide' => 'إخفاء التفاصيل',
 
 # Recent changes linked
@@ -2285,7 +2312,7 @@ $1',
 'contributions' => 'تعديلات اليوزر {{GENDER:$1|اليوزر|اليوزره}}',
 'contributions-title' => 'مساهمات اليوزر ل$1',
 'mycontris' => 'تعديلاتى',
-'contribsub2' => 'لليوزر $1 ($2)',
+'contribsub2' => 'ل{{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'مالقيناش   تغييرات تطابق المحددات دي.',
 'uctop' => '(آخر تعديل)',
 'month' => 'من شهر (واللى قبل كده):',
@@ -2784,7 +2811,7 @@ $1',
 'file-info-size' => '$1 × $2 بكسل حجم الفايل: $3، نوع MIME: $4',
 'file-nohires' => 'مافيش  ريزوليوشن اعلى متوفر.',
 'svg-long-desc' => 'ملف SVG، اساسا $1 × $2 بكسل، حجم الملف: $3',
-'show-big-image' => 'الصورة بدقه كامله',
+'show-big-image' => 'الصوره الاصليه',
 'file-info-gif-looped' => 'ملفوف',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|برواز|براويز}}',
 
@@ -3419,4 +3446,20 @@ $5
 'searchsuggest-search' => 'تدوير',
 'searchsuggest-containing' => 'جوّاه...',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'تكبير القوالب',
+'expand_templates_intro' => 'الصفحة المخصوصة دى بتاخد بعض النصوص و بتفرد كل القوالب اللى موجودة فيها.
+و كمان بتفرد دوال القوالب زي
+<nowiki>{{</nowiki>#language:…}}, و المتغيرات زي
+<nowiki>{{</nowiki>CURRENTDAY}}&mdash;فى الحقيقة كل حاجة بين قوسين مزدوجين.
+و بتعمل دا عن طريق استعداء المعالج المناسب من الميدياويكى نفسها..',
+'expand_templates_title' => 'عنوان السياق, لـ {{FULLPAGENAME}} الخ.:',
+'expand_templates_input' => 'النص المدخل:',
+'expand_templates_output' => 'النتيجه',
+'expand_templates_xml_output' => 'خرج XML',
+'expand_templates_ok' => 'موافق',
+'expand_templates_remove_comments' => 'امسح التعليقات',
+'expand_templates_generate_xml' => 'اعرض شجرة XML',
+'expand_templates_preview' => 'بروفه',
+
 );
index c0aa4d3..342676b 100644 (file)
@@ -75,7 +75,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'ভুল_শিৰোনাম' ),
        'Blankpage'                 => array( 'উকা_পৃষ্ঠা' ),
        'Block'                     => array( 'অৱৰোধ', 'আই_পি_অৱৰোধ', 'সদস্য_অৱৰোধ' ),
-       'Blockme'                   => array( 'মোক_অৱৰোধ_কৰক' ),
        'Booksources'               => array( 'গ্ৰন্থৰ_উত্স' ),
        'BrokenRedirects'           => array( 'ভঙা_পূণঃনিৰ্দেশনাসমূহ' ),
        'Categories'                => array( 'শ্ৰেণীসমূহ' ),
@@ -86,10 +85,10 @@ $specialPageAliases = array(
        'Contributions'             => array( 'বৰঙনিসমূহ', 'বৰঙনিদাতাসকল', 'বৰঙনি' ),
        'CreateAccount'             => array( 'সদস্যভুক্তি' ),
        'DeletedContributions'      => array( 'বিলোপ_কৰা_বৰঙনিসমূহ' ),
-       'Disambiguations'           => array( 'দ্ব্যৰ্থতা_দূৰীকৰণসমূহ' ),
        'DoubleRedirects'           => array( 'দ্বি_পুনৰ্নিৰ্দেশনাসমূহ' ),
        'EditWatchlist'             => array( 'লক্ষ্যতালিকা_সম্পাদনা_কৰক' ),
        'Emailuser'                 => array( 'সদস্যলৈ_ই-মেইল_পঠিয়াওক' ),
+       'ExpandTemplates'           => array( 'সাঁচবোৰ_প্ৰসাৰ_কৰক' ),
        'Export'                    => array( 'ৰপ্তানি' ),
        'Fewestrevisions'           => array( 'নূন্যতম_সংস্কৰণসমূহ' ),
        'FileDuplicateSearch'       => array( 'প্ৰতিলিপি_সনিবিষ্ট_নথি_অনুসন্ধান' ),
@@ -160,7 +159,6 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'redirect'                  => array( '0', 'পুণঃনিৰ্দেশ', '#REDIRECT' ),
        'special'                   => array( '0', 'বিশেষ', 'special' ),
        'hiddencat'                 => array( '1', '__গোপন_শ্ৰেণী__', '__HIDDENCAT__' ),
        'pagesize'                  => array( '1', 'পৃষ্ঠাৰ_আকাৰ', 'PAGESIZE' ),
@@ -456,8 +454,6 @@ $1',
 'ok' => 'ঠিক আছে',
 'retrievedfrom' => '"$1"ৰ পৰা সংকলিত',
 'youhavenewmessages' => 'আপোনাৰ কাৰণে $1 আছে। ($2)',
-'newmessageslink' => 'নতুন সংবাদ',
-'newmessagesdifflink' => 'শেহতীয়া সাল-সলনি',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|আন এজন সদস্য|$3 জন সদস্য}}ৰ পৰা আপোনালৈ $1 আহিছে ($2)।',
 'youhavenewmessagesmanyusers' => 'কেইবাজনো সদস্যৰ পৰা আপোনালৈ $1 আহিছে ($2)।',
 'newmessageslinkplural' => '{{PLURAL:$1|এটা নতুন বাৰ্তা|নতুন বাৰ্তা}}',
@@ -1324,7 +1320,6 @@ $1",
 'preferences' => 'পছন্দসমূহ',
 'mypreferences' => 'পছন্দসমূহ',
 'prefs-edits' => 'সম্পাদনাৰ সংখ্যা:',
-'prefsnologin' => 'প্ৰৱেশ কৰা নাই',
 'changepassword' => 'গুপ্তশব্দ সলনি কৰক',
 'prefs-skin' => 'আৱৰণ',
 'skin-preview' => 'খচৰা',
@@ -4044,4 +4039,12 @@ $5
 # Image rotation
 'rotate-comment' => 'ছবিখন ঘড়ীৰ কাটাৰ দিশত $1 {{PLURAL:$1|ডিগ্ৰী}} ঘূৰোৱা হৈছে।',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'সাঁচবোৰ বহলাওক',
+'expand_templates_input' => 'পাঠ্য ভৰাওক',
+'expand_templates_output' => 'ফলাফল',
+'expand_templates_ok' => 'ওকে',
+'expand_templates_remove_comments' => 'মন্তব্য গু়চাওক',
+'expand_templates_preview' => 'খচৰা',
+
 );
index eefff5e..6f165d2 100644 (file)
@@ -337,12 +337,10 @@ $1",
 'ok' => 'Aceutar',
 'retrievedfrom' => 'Sacáu de «$1»',
 'youhavenewmessages' => 'Tienes $1 ($2).',
-'newmessageslink' => 'mensaxes nuevos',
-'newmessagesdifflink' => 'cambéu postreru',
 'youhavenewmessagesfromusers' => "Tienes $1 {{PLURAL:$3|d'otru usuariu|de $3 usuarios}} ($2).",
 'youhavenewmessagesmanyusers' => 'Tienes $1 de munchos usuarios ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|un mensaxe nuevu|$1 mensaxes nuevos}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|cambéu postreru|cambeos postreros}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un mensaxe nuevu|999=mensaxes nuevos}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|cambéu postreru|999=cambeos postreros}}',
 'youhavenewmessagesmulti' => 'Tienes mensaxes nuevos en $1',
 'editsection' => 'editar',
 'editold' => 'editar',
@@ -1214,7 +1212,6 @@ Se puen alcontrar más detalles nel [{{fullurl:{{#Special:Log}}/delete|page={{FU
 'preferences' => 'Preferencies',
 'mypreferences' => 'Preferencies',
 'prefs-edits' => "Númberu d'ediciones:",
-'prefsnologin' => 'Nun anició sesión',
 'prefsnologintext2' => "Por favor, $1 pa configurar les preferencies d'usuariu",
 'changepassword' => 'Camudar la clave',
 'prefs-skin' => 'Apariencia',
@@ -1513,6 +1510,8 @@ Esta información sedrá pública.',
 'recentchanges-label-minor' => 'Esta ye una edición menor',
 'recentchanges-label-bot' => 'Esta edición ta fecha por un bot',
 'recentchanges-label-unpatrolled' => 'Esta edición ta ensin patrullar entá',
+'recentchanges-label-plusminus' => "El tamañu d'esta páxina cambió nesti númberu de bytes",
+'recentchanges-legend-newpage' => '(ver tamién la  [[Special:NewPages|llista de páxines nueves]])',
 'rcnote' => "Equí embaxo {{PLURAL:$1|pue vese '''1''' cambiu|puen vese los caberos '''$1''' cambios}} {{PLURAL:$2|del caberu día|de los caberos '''$2''' díes}}, a fecha de $5, $4.",
 'rcnotefrom' => "Abaxo tan los cambeos dende '''$2''' (s'amuesen fasta '''$1''').",
 'rclistfrom' => 'Amosar los nuevos cambios dende $1',
@@ -4000,4 +3999,21 @@ D\'otra miente, pues usar el formulariu cenciellu d\'abaxo. El to comentariu apa
 'limitreport-expansiondepth' => "Máxima fondura d'espansión",
 'limitreport-expensivefunctioncount' => "Cuenta de funciones d'analís costoses",
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Esparder plantíes',
+'expand_templates_intro' => "Esta páxina especial toma un testu y espande toles plantíes del mesmu de forma recursiva.
+ Tamién espande les funciones d'análisis sintáuticu como
+<code><nowiki>{{</nowiki>#language:...}}</code>, y variables como
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+En realidá cuasi tolo qu'apaeza ente llaves dobles.",
+'expand_templates_title' => 'Títulu del contestu, pa {{FULLPAGENAME}}, etc.:',
+'expand_templates_input' => "Testu d'entrada:",
+'expand_templates_output' => 'Resultáu',
+'expand_templates_xml_output' => 'Salida XML',
+'expand_templates_ok' => 'Aceutar',
+'expand_templates_remove_comments' => 'Eliminar comentarios',
+'expand_templates_remove_nowiki' => 'Quitar les etiquetes <nowiki> nos resultaos',
+'expand_templates_generate_xml' => "Amosar l'árbole d'análisis sintáuticu XML",
+'expand_templates_preview' => 'Vista previa',
+
 );
index 2219e2e..b12e4f2 100644 (file)
@@ -329,8 +329,6 @@ $messages = array(
 'ok' => 'Tuenara',
 'retrievedfrom' => 'Dimnarin mal « $1 »',
 'youhavenewmessages' => 'Va $1 ($2) al kazawal.',
-'newmessageslink' => 'warzafa staksa',
-'newmessagesdifflink' => 'amid- gu ironokaf siatos',
 'youhavenewmessagesmulti' => 'Rin dil va warzafa staksa moe $1',
 'editsection' => 'betara',
 'editold' => 'betara',
@@ -854,7 +852,6 @@ Kan ''all:'' laganeyal ta varafa exulera (gon keyaksexo is teza ikz-), oke wetce
 'preferences' => 'Lodamaceem',
 'mypreferences' => 'Jinaf lodamaceem',
 'prefs-edits' => 'Ota va betaks :',
-'prefsnologin' => 'Dogluyariskaf',
 'changepassword' => 'Betara va remravlem',
 'prefs-skin' => 'Laviuca',
 'skin-preview' => 'Abdiwira',
index f407b3c..4a96329 100644 (file)
@@ -125,6 +125,7 @@ $messages = array(
 'tog-showhiddencats' => 'Gizli kateqoriyaları göstər',
 'tog-norollbackdiff' => 'Geri qaytardıqdan sonra, edilmiş dəyişikikləri dəyişikliklər siyahısından sil',
 'tog-useeditwarning' => 'Qeyd edilməmiş dəyişikliyə sahib bir dəyişiklik səhifəsindən çıxarkən məni xəbərdar et',
+'tog-prefershttps' => 'Sessiya aaçarkən hər zaman etibarlı bağlantıdan istifadə et.',
 
 'underline-always' => 'Həmişə',
 'underline-never' => 'Heç vaxt',
@@ -357,8 +358,6 @@ Bax: [[Special:Version|Versiyalar]].',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Mənbə — "$1"',
 'youhavenewmessages' => 'Hal-hazırda $1 var. ($2)',
-'newmessageslink' => 'yeni ismarıclar',
-'newmessagesdifflink' => 'Sonuncu və əvvəlki versiya arasındakı fərq',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|Başqa bir istifadəçidən|$3 istifadəçidən}} $1 var ($2).',
 'youhavenewmessagesmanyusers' => 'Bir çox istifadəçidən $1 var ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|yeni mesajınız|yeni mesajlarınız}}',
@@ -416,6 +415,12 @@ Mövcud xüsusi səhifələrin siyahısı: [[Special:SpecialPages|Xüsusi səhif
 # General errors
 'error' => 'Xəta',
 'databaseerror' => 'Verilənlər bazası xətası',
+'databaseerror-text' => 'Bir verilənlər bazası sorğu xətası baş verdi.
+Bu proqramdan qaynaqlanan bir xətanı göstərmiş ola bilər.',
+'databaseerror-textcl' => 'Bir verilənlər bazası sorğu xətası baş verdi.',
+'databaseerror-query' => 'Sorğu: $1',
+'databaseerror-function' => 'Funksiya: $1',
+'databaseerror-error' => 'Xəta: $1',
 'laggedslavemode' => "'''Xəbərdarlıq:''' Səhifə son əlavələri əks etdirməyə bilər.",
 'readonly' => 'Verilənlər bazası bloklanıb',
 'enterlockreason' => 'Bloklamanın səbəbini və nəzərdə tutulan müddətini qeyd edin',
@@ -446,6 +451,9 @@ Xahiş edirik bunu bir [[Special:ListUsers/sysop|İdarəçilərə]], URL not ed
 'cannotdelete' => 'İstədiyiniz "$1" səhifə və ya faylını silmək mümkün deyil.
 Bu səhifə və ya fayl başqa bir istifadəçi tərəfindən silinmiş ola bilər.',
 'cannotdelete-title' => '"$1" səhifəsinin silinməsi mümkünsüzdür.',
+'delete-hook-aborted' => 'Silmə əməliyyatı qarmaq tərəfindən dayandırıldı. 
+Heç bir açıqlama edilmədi.',
+'no-null-revision' => '"$1" səhifəsi üçün yeni boş bir versiya yaradıla bilmədi',
 'badtitle' => 'Səhv başlıq',
 'badtitletext' => 'Axtarılan səhifə adı səhvdir və ya boşdur, ya da düzgün olmayan dillərarası, yaxud vikilərarası keçid istifadə edilib.
 Başlıqlarda istifadə edilməsi qadağan olunan bir və ya daha çox simvol istifadə edilmiş ola bilər.',
@@ -461,6 +469,7 @@ Sorğu: $2',
 'actionthrottledtext' => 'Anti-spam hərəkətləri səbəbilə, bir hərəkəti qısa bir zaman aralığında çoxetməniz əngəlləndi, və siz həddi aşmısınız. Lütfən bir neçə dəqiqə sonra yenidən yoxlayın.',
 'protectedpagetext' => 'Bu səhifə redaktə üçün bağlıdır.',
 'viewsourcetext' => 'Siz bu səhifənin məzmununu görə və köçürə bilərsiniz:',
+'viewyourtext' => "Bu səhifəyə '''etdiyiniz dəyişikliklərin''' mənbəyini görüntüləyib köçürə bilərsiniz:",
 'protectedinterface' => 'Bu səhifədə proqram təminatı üçün sistem məlumatları var və sui-istifadənin qarşısını almaq üçün mühafizə olunmalıdır.',
 'editinginterface' => "'''Diqqət!''' Siz proqram təminatı interfeysinin mətn olan səhifəsini redaktə edirsiniz.
 Onun dəyişdirilməsi digər istifadəçilərin interfeysinin xarici görünüşünə təsir göstərir.
@@ -468,9 +477,23 @@ Tərcümə üçün daha yaxşı olar ki, MediaWiki-nin lokallaşması üçün ol
 'cascadeprotected' => 'Səhifə mühafizə olunub, çünki o kaskad mühafizə olunan {{PLURAL:$1|növbəti səhifəyə|növbəti səhifələrə}} qoşulub:
 $2',
 'namespaceprotected' => 'Sizin adlarında $1 olan məqalələrdə redaktə etməyə icazəniz yoxdur.',
+'customcssprotected' => 'Bu səhifəni redaktə etmə izniniz yoxdur, çünki bu səhifə başqa bir istifadəçinin fərdi parametrlərinə sahibdir.',
+'customjsprotected' => 'Bu Java Script səhifəsini redaktə etmə izniniz yoxdur, çünki bu səhifə başqa bir istifadəçinin fərdi parametrlərinə sahibdir.',
+'mycustomcssprotected' => 'Bu CSS ssəhifəsini redaktə etmə izniniz yoxdur.',
+'mycustomjsprotected' => 'Bu JavaScript səhifəsini redaktə etmə izniniz yoxdur.',
+'myprivateinfoprotected' => 'Sizin özəl məlumatlarınızı redaktə etmə izniniz yoxdur.',
+'mypreferencesprotected' => 'Seçimlərinizi redaktə etmək üçün izniniz yoxdur.',
 'ns-specialprotected' => 'Xüsusi səhifələr redaktə oluna bilməz.',
 'titleprotected' => 'Bu adda səhifənin yaradılması istifadəçi [[User:$1|$1]] tərəfindən qadağan edilmişdir.
 Göstərilən səbəb: "\'\'$2\'\'".',
+'filereadonlyerror' => '"$2" fayl deposundakı "$1" faylı ancaq oxunula bilən rejimdə olduğuna görə dəyişdirmək üçün açıla bimir.
+
+Rejimi qoyan nəzarətçinin izahı: "$3".',
+'invalidtitle-knownnamespace' => '"$2" sahə adı üçün "$3" mətni keçərsiz bir başlıq',
+'invalidtitle-unknownnamespace' => 'Naməlum $1 ad sahəsi miqdarı və keçərsiz "$2" başlıq',
+'exception-nologin' => 'Giriş edilməmişdir',
+'exception-nologin-text' => 'Bu səhifəyə daxi olmaq üçün [[Special:Userlogin|özünüzü təqdim]], edin.',
+'exception-nologin-text-manual' => ' bu səhifəyə və ya hərəkətə daxil olmaq üçün $1 lazımdır.',
 
 # Virus scanner
 'virus-badscanner' => "Düzgün olmayan konfiqurasiya: naməlum ''$1'' virus yoxlayanı",
@@ -485,9 +508,19 @@ Siz {{SITENAME}} saytını anonim olaraq istifadə etməyə davam edə bilər v
 'welcomecreation-msg' => 'Hesabınız yaradıldı.
 [[Special:Preferences|{{SITENAME}} nizamlamalarınızı]] dəyişdirməyi unutmayın.',
 'yourname' => 'İstifadəçi adı',
+'userlogin-yourname' => 'İstifadəçi adı',
+'userlogin-yourname-ph' => 'İstifadəçi adınızı daxil edin',
+'createacct-another-username-ph' => 'İstifadəçi adınızı daxil edin:',
 'yourpassword' => 'Parol:',
+'userlogin-yourpassword' => 'Parol',
+'userlogin-yourpassword-ph' => 'Parolunuzu daxil edin',
+'createacct-yourpassword-ph' => 'Parol daxil edin',
 'yourpasswordagain' => 'Parolu təkrar yazın:',
+'createacct-yourpasswordagain' => 'Parolu təsdiqlə',
+'createacct-yourpasswordagain-ph' => 'Parolu təkrar daxil edin',
 'remembermypassword' => 'Məni bu kompyuterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})',
+'userlogin-remembermypassword' => 'Sistemdə qal',
+'userlogin-signwithsecure' => 'Etibarlı bağlantıdan istifadə edin',
 'yourdomainname' => 'Sizin domain',
 'password-change-forbidden' => 'Bu vikidə parolunuzu dəyişdirə bilməzsiniz.',
 'externaldberror' => 'Verilənlər bazasının doğruluğunu yoxlamada xəta baş verib və yaxud sizin xarici istifadəçi qeydiyyatını yeniləmək hüququnuz yoxdur.',
@@ -499,18 +532,44 @@ Siz {{SITENAME}} saytını anonim olaraq istifadə etməyə davam edə bilər v
 'logout' => 'Çıxış',
 'userlogout' => 'Çıxış',
 'notloggedin' => 'Daxil olmamısınız',
+'userlogin-noaccount' => 'İstifadəçi hesabınız yoxdur?',
+'userlogin-joinproject' => '{{SITENAME}} qoşulun',
 'nologin' => "İstifadəçi hesabınız yoxdur? '''$1'''.",
 'nologinlink' => 'hesab açın',
 'createaccount' => 'Hesab aç',
 'gotaccount' => "Giriş hesabınız varsa '''$1'''.",
 'gotaccountlink' => 'Daxil olun',
 'userlogin-resetlink' => 'Daxilolma məlumatlarınızı unutmusunuz?',
-'createaccountmail' => 'e-məktub ilə',
+'userlogin-resetpassword-link' => 'Parolu unutdunuzmu?',
+'helplogin-url' => 'Help:Sistemə daxil ol',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|daxil olma haqqında yardım alın]]',
+'userlogin-loggedin' => 'Siz artıq {{GENDER:$1|$1}} kimi daxil olmusunuz.
+Aşağıdakı formadan istifadə edərək, bağqa bir istifadəçi kimi daxil ola bilərsiniz.',
+'userlogin-createanother' => 'Başqa bir istifadəçi hesabı yarat',
+'createacct-join' => 'Aşağıda məlumatlarınızı daxil edin.',
+'createacct-another-join' => 'Aşağıda yeni hesabınızın məlumatlarını daxil edin.',
+'createacct-emailrequired' => 'E-poçt ünvanı',
+'createacct-emailoptional' => 'E-poçt ünvanı (istəyə bağlı)',
+'createacct-email-ph' => 'E-poçt ünvanınızı daxil edin',
+'createacct-another-email-ph' => 'E-poçt ünvanını daxil edin',
+'createaccountmail' => 'Müvəqqəti təsadüfi bir paroldan istifadə edə bilər və bu parolu göstərilən e-poçt ünvanına göndərə bilərsiniz',
+'createacct-realname' => 'Gərçək adı (istəyə bağlı)',
 'createaccountreason' => 'Səbəb:',
+'createacct-reason' => 'Səbəb',
+'createacct-reason-ph' => 'Niyə başqa bir hesab yaradırsınız',
+'createacct-captcha' => 'Təhlükəsizlik nəzarəti',
+'createacct-imgcaptcha-ph' => 'Yuxarıda gördüyünüz mətni daxil edin',
+'createacct-submit' => 'İstifadəçi hesabı yarat',
+'createacct-another-submit' => 'Başqa bir istifadəçi hesabı yarat',
+'createacct-benefit-heading' => '{{SITENAME}} sizin kimi insanlar tərəfindən yaradılır.',
+'createacct-benefit-body1' => '$1 {{PLURAL:$1|redaktə}}',
+'createacct-benefit-body2' => '{{PLURAL:$1|səhifə|səhifə}}',
+'createacct-benefit-body3' => 'ən son {{PLURAL:$1|iştirakçılar|iştirakçılar}}',
 'badretype' => 'Daxil etdiyiniz parol uyğun gəlmir.',
 'userexists' => 'Daxil edilmiş ad artıq istifadədədir.
 Lütfən başqa ad seçin.',
 'loginerror' => 'Daxil olma xətası',
+'createacct-error' => 'Hesab yaratma xətası',
 'createaccounterror' => 'Bu istifadəçi adını yaratmaq mümkün olmadı: $1',
 'nocookiesnew' => 'İstifadəçi qeydiyyatı yaradıldı, lakin daxil ola bilmədiniz.
 {{SITENAME}} iştirakçıların təqdim olunması üçün "cookie"lərdən istifadə edir.
@@ -537,11 +596,17 @@ Düzgün yazdığına əmin ol.',
 'password-login-forbidden' => 'Bu istifadəçi adından və paroldan istifadə qadağan olunub.',
 'mailmypassword' => 'E-mail ilə yeni parol göndər',
 'passwordremindertitle' => '{{SITENAME}} parol xatırladıcı',
+'passwordremindertext' => 'Birisi (yəqin ki siz, $1 IP ünvanından) {{SITENAME}} ($4) üçün yeni bir parol göndərilməsini istədi. "$2" istifadəçisinə müvəqqəti olaraq "$3" parolu yaradıldı. Əgər bu sizin istyinizdirsə, hesab açıb yeni bir parol yaratmağınız vacibdir. Müvəqqəti parolunuzun müddəti {{PLURAL:$5|1 gün|$5 gün}} içində dolacaqdır.
+
+Parol dəyişdirməni siz istəməmisinizsə və ya parolunuzu xatırladınızsa və artıq parolunuzu dəyişdirmək isteəmirsinizsə; bu mesaja əhəmiyyət vermədən əski parolunuzdan istifadə etməyə davam edə bilərsiniz.',
 'noemail' => '"$1" adlı istifadəçi e-poçt ünvanını qeyd etməmişdir.',
 'noemailcreate' => 'Düzgün e-poçt ünvanı qeyd etməlisiniz',
 'passwordsent' => 'Yeni parol "$1" üçün qeydiyyata alınan e-poçt ünvanına göndərilmişdir.
 Xahiş edirik, e-məktubu aldıqdan sonra yenidən daxil olasınız.',
 'blocked-mailpassword' => 'İP ünvanınız bloklu olduğuna görə, yeni parol göndərmə mümkün deyil.',
+'eauthentsent' => 'Göstərilən bu e-poçt ünvanına məktub göndərildi. 
+Gələcəkdə e-poçt almaq üçün,bu e-poçtun sizə aid olması haqqındakı qaydalarla tanış olun.',
+'throttled-mailpassword' => 'Bir parol sıfırlama e-poçtu son {{PLURAL:$1|bir saat|$1 saat}} içində zatən göndərildi. Xidməti pis niyyətlə istifadə etməyi önləmək üçün, hər {{PLURAL:$1|bir saatda|$1 saatda}} sadəcə bir parol sıfırlama e-poçtu göndəriləcəkdir.',
 'mailerror' => 'Məktub göndərmə xətası: $1',
 'acct_creation_throttle_hit' => 'Sizin IP ünvanınızdan bu viki-də son bir gün ərzində {{PLURAL:$1|1 hesab|$1 hesab}} açılmışdır. Bu bir gün ərzində icazə verilən maksimum say olduğu üçün, indiki anda daha çox hesab aça bilməzsiniz.',
 'emailauthenticated' => 'E-poçt ünvanınız $2 saat $3 tarixində təsdiq edilib.',
@@ -551,19 +616,29 @@ Aşağıdakı xidmətlərin heç biri üçün Sizə e-məktub göndərilməyəc
 'emailconfirmlink' => 'E-poçt ünvanını təsdiq et',
 'invalidemailaddress' => 'E-poçt ünvanınızı qeyri-düzgün formatda olduğu üçün qəbul edə bilmirik.
 Xahiş edirik düzgün formatlı ünvan daxil edin və ya bu sahəni boş qoyun.',
+'cannotchangeemail' => 'Hesabın e-poçt ünvanı bu wiki üzərindən dəyişdirilə bilməz.',
 'emaildisabled' => 'Bu saytdan e-poçt göndərə bilməzsiniz.',
 'accountcreated' => 'Hesab yaradıldı',
 'accountcreatedtext' => '$1 üçün istifadəçi hesabı yaradıldı.',
 'createaccount-title' => '{{SITENAME}} hesabın yaradılması',
+'createaccount-text' => 'Biriləri {{SITENAME}} saytında ($4) sizin e-poçt ünvanınızdan istifadə edərək, parolu "$3" olan, "$2" adlı bir hesab yaratdı.
+
+Sayta daxil olmalı və parolunuzu dəyişdirməlisiniz.
+
+Əgər istifadəçi hesabını səhvən yaratmısınızsa, bu mesajı gözardı edə bilərsiniz.',
 'usernamehasherror' => 'İstifadəçi adında "diyez" simvolunun istifadəsi mümkün deyil',
 'login-throttled' => 'Sistemə daxil olmaq üçün həddən artıq cəhd etmisiniz.
 Yeni cəhd etməzdən əvvəl bir qədər gözləyin.',
 'login-abort-generic' => 'Giriş uğursuz alındı - Rədd',
 'loginlanguagelabel' => 'Dil: $1',
 'suspicious-userlogout' => 'Sizin çıxış üçün cəhdiniz uğursuz alındı. Bu, brouzerin yaxud proksi-keşləmənin düzgün işləməməsindən qaynaqlanır.',
+'createacct-another-realname-tip' => 'Gərçək adınız istəyə bağlıdır.
+Əgər gərçək adınızı göstərsəniz, çalışmalarınıza müraciət etmək üçün istifadə ediləcəkdir.',
 
 # Email sending
 'php-mail-error-unknown' => 'PHP-nin mail() funksiyasında naməlum xəta',
+'user-mail-no-addy' => 'Bir e-poçt ünvanı olmadan e-poçt göndərməyə çalışdı.',
+'user-mail-no-body' => 'Boş və ya keçərli olmayan bir şəkildə e-poçt göndərilməyə çalışıldı.',
 
 # Change password dialog
 'resetpass' => 'Parolu dəyiş',
@@ -583,11 +658,15 @@ Sistemə daxil olmanı yekunlaşdırmaq üçün yeni parolu bura yazmalısınız
 'resetpass-wrong-oldpass' => 'Müvəqqəti və ya daimi parolda yanlışlıq var.
 Ola bilər siz parolu müvəffəqiyyətlə dəyişmisiniz yaxud müvəqqəti parol üçün müraciət etmisiniz.',
 'resetpass-temp-password' => 'Müvəqqəti parol:',
+'resetpass-abort-generic' => 'Parol dəyişikliyi bir genişlənmə tərəfindən ləğv edildi.',
 
 # Special:PasswordReset
 'passwordreset' => 'Parolu yenilə',
+'passwordreset-text-one' => 'Parolunuzu sıfırlamaq üçün bu formanı doldurun.',
+'passwordreset-text-many' => '{{PLURAL:$1|Parolunuzu sıfırlamaq üçün sahələrdən birini doldurun.}}',
 'passwordreset-legend' => 'Parolu yenilə',
 'passwordreset-disabled' => 'Yenidən qurulma parolu bu vikidə işləmir',
+'passwordreset-emaildisabled' => 'Bu wiki-dəki e-poçt özəllikləri bağlandı.',
 'passwordreset-username' => 'İstifadəçi adı:',
 'passwordreset-domain' => 'Domen:',
 'passwordreset-email' => 'E-mail ünvanı:',
@@ -955,7 +1034,6 @@ $1",
 'preferences' => 'Nizamlamalar',
 'mypreferences' => 'Nizamlamalar',
 'prefs-edits' => 'Redaktələrin sayı:',
-'prefsnologin' => 'Daxil olmamısınız',
 'changepassword' => 'Parolu dəyiş',
 'prefs-skin' => 'Cild',
 'skin-preview' => 'Sınaq görüntüsü',
@@ -1214,6 +1292,7 @@ Həmçinin kimliyinizi gostərmədən belə, başqalarının sizinlə istifadə
 'recentchanges-label-minor' => 'Bu kiçik redaktədir',
 'recentchanges-label-bot' => 'Bu redaktə bot tərəfindən edilmişdir',
 'recentchanges-label-unpatrolled' => 'Bu redaktə hələ nəzərdən keçirilməmişdir',
+'recentchanges-legend-newpage' => '$1 - yeni səhifə',
 'rcnote' => "Aşağıdakı {{PLURAL:$1|'''1''' dəyişiklik|'''$1''' dəyişiklik}} saat $5, $4 tarixinə qədər son {{PLURAL:$2|gün|'''$2''' gün}} ərzində edilmişdir.",
 'rcnotefrom' => "Aşağıda '''$2'''-dən ('''$1'''-ə qədər) dəyişikliklər sadalanmışdır.",
 'rclistfrom' => '$1 vaxtından başlayaraq yeni dəyişiklikləri göstər',
@@ -1474,8 +1553,12 @@ $1',
 # Random page
 'randompage' => 'İxtiyari səhifə',
 
+# Random page in category
+'randomincategory-selectcategory-submit' => 'Keç',
+
 # Random redirect
 'randomredirect' => 'İxtiyari istiqamətləndirmə',
+'randomredirect-nopages' => '"$1" ad sahəsində heç bir yönləndirmə yoxdur.',
 
 # Statistics
 'statistics' => 'Statistika',
@@ -2978,4 +3061,8 @@ Variants for Chinese language
 'duration-centuries' => '$1 {{PLURAL:$1|əsr|əsr}}',
 'duration-millennia' => '$1 {{PLURAL:$1|minillik|minillik}}',
 
+# Special:ExpandTemplates
+'expand_templates_output' => 'Nəticə',
+'expand_templates_ok' => 'OK',
+
 );
index b3594d2..6a1fe51 100644 (file)
@@ -355,8 +355,6 @@ $1',
 'ok' => 'اولدو',
 'retrievedfrom' => '«$1»-دن آلینمیشدیر',
 'youhavenewmessages' => 'سیزین $1 ($2) وارینیزدیر.',
-'newmessageslink' => 'یئنی مئساژلار',
-'newmessagesdifflink' => 'سون دَییشیکلیک',
 'youhavenewmessagesfromusers' => 'سیزین {{PLURAL:$3|بیر آیری ایستیفاده‌چی‌دن|$3 ایستیفاده‌چی‌دن}} $1 وارینیزدیر ($2).',
 'youhavenewmessagesmanyusers' => 'سیزین چوخلو ایشلدنلردن $1 وارینیزدیر ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|بیر یئنی مئساژ|یئنی مئساژلار}}',
@@ -1174,7 +1172,6 @@ $1",
 'preferences' => 'ترجیحلر',
 'mypreferences' => 'ترجیحلر',
 'prefs-edits' => 'دَییشمه‌لرین سایی:',
-'prefsnologin' => 'گیرمه‌میسینیز',
 'changepassword' => 'رمزی دَییشدیر',
 'prefs-skin' => 'قابیق',
 'skin-preview' => 'اؤن‌گؤستریش',
index b540541..e8752a3 100644 (file)
@@ -66,7 +66,6 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'Барлыҡ_битәр' ),
        'Blankpage'                 => array( 'Буш_бит' ),
        'Block'                     => array( 'Блоклау' ),
-       'Blockme'                   => array( 'Мине_блокла' ),
        'Booksources'               => array( 'Китап_сығанаҡтары' ),
        'BrokenRedirects'           => array( 'Өҙөлгән_йүнәлтеүҙәр' ),
        'Categories'                => array( 'Категориялар' ),
@@ -78,7 +77,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Иҫәп_яҙыуы_яһау' ),
        'Deadendpages'              => array( 'Көрсөк_биттәр' ),
        'DeletedContributions'      => array( 'Юйылған_өлөш' ),
-       'Disambiguations'           => array( 'Күп_мәғәнәлелек' ),
        'DoubleRedirects'           => array( 'Икеле_йүнәлтеүҙәр' ),
        'EditWatchlist'             => array( 'Күҙәтеү_исемлеген_мөхәррирләү' ),
        'Emailuser'                 => array( 'Ҡатнашыусыға_хат' ),
@@ -423,8 +421,6 @@ $1',
 'pagetitle' => '{{SITENAME}} проектынан',
 'retrievedfrom' => 'Сығанағы — «$1»',
 'youhavenewmessages' => 'Яңы $1 бар ($2).',
-'newmessageslink' => 'яңы хәбәр',
-'newmessagesdifflink' => 'һуңғы үҙгәртеү',
 'youhavenewmessagesfromusers' => 'Һеҙгә {{PLURAL:$3|башҡа ҡатнашыусынан|$3 ҡатнашыусынан}} $1 бар ($2).',
 'youhavenewmessagesmanyusers' => 'Һеҙгә күп ҡатнашыусынан $1 бар ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|яңы хәбәр|яңы хәбәр}}',
@@ -591,8 +587,8 @@ $2',
 'yourdomainname' => 'Һеҙҙең домен',
 'password-change-forbidden' => 'Был викила серһүҙегеҙҙе үҙгәртә алмайһығыҙ.',
 'externaldberror' => 'Тышҡы мәғлүмәт базаһы менән танылғанда хата барлыҡҡа килде йәки тышҡы үҙ көйләүҙәрегеҙҙе үҙгәртер өсөн хоҡуҡтарығыҙ етәрле түгел.',
-'login' => 'Танышыу йәки теркәлеү',
-'nav-login-createaccount' => 'Танышыу йәки теркәлеү',
+'login' => 'Танылыу',
+'nav-login-createaccount' => 'Танылыу йәки теркәлеү',
 'loginprompt' => '{{SITENAME}} проектына кереү өсөн «cookies» рөхсәт ителгән булырға тейеш.',
 'userlogin' => 'Танылыу йәки теркәлеү',
 'userloginnocreate' => 'Танылыу',
@@ -1269,7 +1265,6 @@ $1",
 'preferences' => 'Көйләүҙәр',
 'mypreferences' => 'Көйләүҙәр',
 'prefs-edits' => 'Төҙәтеүҙәр һаны:',
-'prefsnologin' => 'Танылмағанһығыҙ',
 'changepassword' => 'Серһүҙҙе үҙгәртергә',
 'prefs-skin' => 'Күренеш',
 'skin-preview' => 'Алдан байҡау',
@@ -1569,6 +1564,7 @@ $1",
 'recentchanges-label-minor' => 'Был әҙ үҙгәреш',
 'recentchanges-label-bot' => 'Был төҙәтеү бот тарафынан башҡарылды',
 'recentchanges-label-unpatrolled' => 'Был төҙәтеү ҡаралмаған әле',
+'recentchanges-legend-newpage' => '$1 — яңы бит',
 'rcnote' => 'Аҫта $4 $5 тиклем эшләнгән, һуңғы {{PLURAL:$2|1|$2}} көн эсендәге һуңғы {{PLURAL:$1|1|$1}} үҙгәртеү күрһәтелгән.',
 'rcnotefrom' => "Түбәндә '''$2''' башлап ('''$1''' тиклем) үҙгәртеүҙәр күрһәтелгән.",
 'rclistfrom' => '$1 башлап яңы үҙгәртеүҙәрҙе күрһәт.',
@@ -3810,7 +3806,7 @@ MediaWiki файҙалы булыр, тигән өмөттә, ләкин БЕР
 * <span class="mw-specialpagecached">Кешланған махсус биттәр (иҫкергән булыуы мөмкин).</span>',
 'specialpages-group-maintenance' => 'Техник хеҙмәтләндереү хисапламалары',
 'specialpages-group-other' => 'Башҡа махсус биттәр',
-'specialpages-group-login' => 'Танышыу йәки теркәлеү',
+'specialpages-group-login' => 'Танылыу йәки теркәлеү',
 'specialpages-group-changes' => 'Һуңғы үҙгәртеүҙәр һәм журналдар',
 'specialpages-group-media' => 'Медиа хисапламалары һәм тейәүҙәр',
 'specialpages-group-users' => 'Ҡатнашыусылар һәм хоҡуҡтар',
@@ -4020,4 +4016,19 @@ MediaWiki файҙалы булыр, тигән өмөттә, ләкин БЕР
 'limitreport-expansiondepth' => 'Киңәйеүҙең иң ҙур тәрәнлеге',
 'limitreport-expensivefunctioncount' => 'Анализаторҙың "ҡиммәтле" функцияларының һаны',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Ҡалыптарҙы йәйелдереү',
+'expand_templates_intro' => 'Был махсус бит бирелгән тексттың бөтә ҡалыптарын ҡабатланмалы рәүештә йәйелдерә.
+Шулай уҡ <nowiki>{{</nowiki>#language:…}} һымаҡ уҡыу ҡоралдары һәм <nowiki>{{</nowiki>CURRENTDAY}} һымаҡ үҙгәреүсән дәүмәлдәр,— ғөмүмән, икәүле йәйәләр эсендә барыһы ла йәйелдерелә.
+Был MediaWiki-ның кәрәкле эшкәртеүсе ҡоралын саҡырыу ярҙамында эшләнә.',
+'expand_templates_title' => '{{FULLPAGENAME}} һ.б. өсөн бит исеме:',
+'expand_templates_input' => 'Сығанаҡ текст:',
+'expand_templates_output' => 'Һөҙөмтә',
+'expand_templates_xml_output' => 'XML һөҙөмтә',
+'expand_templates_ok' => 'Тамам',
+'expand_templates_remove_comments' => 'Аңлатмаларҙы юйырға',
+'expand_templates_remove_nowiki' => 'Һөҙөмтәлә <nowiki> билдәләрен йәшерергә',
+'expand_templates_generate_xml' => 'XML уҡыу ағасын күрһәтергә',
+'expand_templates_preview' => 'Ҡарап сығыу',
+
 );
index fe704a7..3a53f74 100644 (file)
@@ -317,8 +317,6 @@ Schaug auf [[Special:Version|Versiónsseiten]]",
 'ok' => 'Passt',
 'retrievedfrom' => 'Vh „$1“',
 'youhavenewmessages' => 'Du host $1 ($2).',
-'newmessageslink' => 'neiche Nochrichtn',
-'newmessagesdifflink' => 'Letzte Endarung',
 'youhavenewmessagesmulti' => 'Du host neiche Nochrichtn: $1',
 'editsection' => 'Werkln',
 'editold' => 'Werkln',
index 114cac8..daacbe7 100644 (file)
@@ -63,7 +63,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'صفحات قدیمی' ),
        'Blankpage'                 => array( 'صفحه هالیک' ),
        'Block'                     => array( 'محدود آی پی' ),
-       'Blockme'                   => array( 'محدودیت من' ),
        'Booksources'               => array( 'منابع کتاب' ),
        'BrokenRedirects'           => array( 'پرشتگین غیرمستقیم' ),
        'Categories'                => array( 'دستجات' ),
@@ -72,7 +71,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'مشارکتان' ),
        'CreateAccount'             => array( 'شرکتن حساب' ),
        'Deadendpages'              => array( 'مرتگین صفحات' ),
-       'Disambiguations'           => array( 'رفع ابهام' ),
        'DoubleRedirects'           => array( 'دوبل غیر مستقیم' ),
        'Emailuser'                 => array( 'ایمیل کاربر' ),
        'Export'                    => array( 'درگیزگ' ),
@@ -382,8 +380,6 @@ $1',
 'ok' => 'هوبنت',
 'retrievedfrom' => 'درگیجگ بیت چه  "$1"',
 'youhavenewmessages' => 'شما هست  $1 ($2).',
-'newmessageslink' => 'نوکین کوله یان',
-'newmessagesdifflink' => 'اهری تغییر',
 'youhavenewmessagesmulti' => 'شما را نوکین کوله یان هست ته   $1',
 'editsection' => 'اصلاح',
 'editold' => 'اصلاح',
@@ -989,7 +985,6 @@ $1",
 'preferences' => 'ترجیحات',
 'mypreferences' => 'منی ترجیحات',
 'prefs-edits' => 'تعداد اصلاحات:',
-'prefsnologin' => 'وارد نهیت',
 'changepassword' => 'کلمه رمز عوض کن',
 'prefs-skin' => 'پوست',
 'skin-preview' => 'بازین',
@@ -3071,4 +3066,20 @@ $5
 'revdelete-unrestricted' => 'به زور چه مدیران سیستم محدودیتان',
 'rightsnone' => '(هچ یک)',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'پچ کن تمپلیت آنء',
+'expand_templates_intro' => 'ای صفحه حاص لهتی متنء گریت و کل تمپلتان ته آییء برگشتی مزنش کنت.
+آیی هنچوش عمگر تجزیه کنوکء مزن کنت په داب
+<nowiki>{{</nowiki>#language:…}}, و متغییرانی په داب
+<nowiki>{{</nowiki>CURRENTDAY}}&mdash; در حقیقت هر چیزی که ته دو براکتن.
+آیی ای کارء گون توار کنگ تجزیه کنوک مناسب چه مدیا وی کی وت انجام دنت.',
+'expand_templates_title' => 'عنوان متن په {{FULLPAGENAME}} و دگه.:',
+'expand_templates_input' => 'ورودی متن',
+'expand_templates_output' => 'نتیجه',
+'expand_templates_xml_output' => 'خروجی XML',
+'expand_templates_ok' => 'هوبنت',
+'expand_templates_remove_comments' => 'بزور نظرات',
+'expand_templates_generate_xml' => 'پیش دار درچک تجزیه XMLء',
+'expand_templates_preview' => 'بازبین',
+
 );
index b45d121..798416b 100644 (file)
@@ -370,12 +370,10 @@ $1',
 'ok' => 'Sige',
 'retrievedfrom' => 'Pinaghugot gikan sa "$1"',
 'youhavenewmessages' => 'Ika igwa nin $1 ($2).',
-'newmessageslink' => 'bàgong mga mensahe',
-'newmessagesdifflink' => 'huring kaliwatan',
 'youhavenewmessagesfromusers' => 'Ika igwa nin $1 gikan sa {{PLURAL:$3|ibang paragamit|$3 mga paragamit}} ($2).',
 'youhavenewmessagesmanyusers' => 'Ika igwa nin $1 gikan sa kadakol na mga paragamit ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|sarong bagong mensahe|bagong mga mensahe}}',
-'newmessagesdifflinkplural' => 'huring {{PLURAL:$1|kaliwatan|mga kaliwatan}}',
+'newmessageslinkplural' => '{{PLURAL:$1|sarong baguhong mensahe|999=baguhong mga mensahe}}',
+'newmessagesdifflinkplural' => 'kahurihan na {{PLURAL:$1|kaliwatan|999=mga kaliwatan}}',
 'youhavenewmessagesmulti' => 'Igwa ka nin mga bàgong mensahe sa $1',
 'editsection' => 'liwatón',
 'editold' => 'Liwatón',
@@ -508,7 +506,8 @@ An administrador na iyo an nagkandado kaini nagpahayag kaining kapaliwanagan: "$
 'invalidtitle-knownnamespace' => 'Imbalidong titulo na igwang espasyadong ngaran na "$2" asin teksto na "$3"',
 'invalidtitle-unknownnamespace' => 'Imbalidong titulo na igwang nin bakong bistado na bilang kan espasyadong ngaran na $1 asin teksto na "$2"',
 'exception-nologin' => 'Dae ka nakalaog',
-'exception-nologin-text' => 'Ining pahina o aksyon minakaipo saimo na maglaog kaining wiki.',
+'exception-nologin-text' => 'Tabi man [[Special:Userlogin|maglaog]]na tanganing makalangkay sa pahinang ini o aksyon.',
+'exception-nologin-text-manual' => 'Tabi man $1 na tanganing makalangkay sa pahinang ini o aksyon.',
 
 # Virus scanner
 'virus-badscanner' => "Raot na kasalansanan: Bakong bistadong virus scanner: ''$1''",
@@ -1230,7 +1229,7 @@ Prubaran na panigmitan an saimong kahaputan nin ''all:'' sa paghanap kan gabos n
 'preferences' => 'Mga kabòtan',
 'mypreferences' => 'Mga Kamuyahan ko',
 'prefs-edits' => 'Bilang kan mga hirá:',
-'prefsnologin' => 'Dai nakalaog',
+'prefsnologintext2' => 'Tabi man $1 tanganing maikaag an mga kamuyahan nin paragamit.',
 'changepassword' => 'Ribayan an sekretong panlaog',
 'prefs-skin' => "''Skin''",
 'skin-preview' => 'Tânawon',
@@ -1530,6 +1529,8 @@ An saimong e-surat na adres dae ipagbuyagyag kunsoarin na an ibang paragamit mak
 'recentchanges-label-minor' => 'Ini saro sanang menor na pagliwat',
 'recentchanges-label-bot' => 'Ining pagliwat pinaghimo bilang sarong bot',
 'recentchanges-label-unpatrolled' => 'Ining pagliwat dae pa tabi pinagpatrolyahan',
+'recentchanges-label-plusminus' => 'An kadakulaan nin pahina pinagliwat sa paagi kaining numero nin mga bayta',
+'recentchanges-legend-newpage' => '(hilngon man [[Special:NewPages|listahan kan mga baguhong pahina]])',
 'rcnote' => "Yaon sa ibaba iyo {{PLURAL:$1|an '''1''' pagbabago|an mga huring '''$1''' mga pagbabago}} kan nakaaging huring {{PLURAL:$2|aldaw|'''$2''' mga aldaw}}, poon pa kan $5, $4.",
 'rcnotefrom' => "Sa ibaba iyo an mga kaliwatan poon kan '''$2''' (sagkod sa '''$1''' na ipinapahiling).",
 'rclistfrom' => 'Ipahiling an baguhon na mga kaliwatan magpoon kan $1',
@@ -2248,20 +2249,16 @@ Kontaka an paraliwat:
 e-surat: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Dae na magkakaigwa pa nin ibang pagpapaisi sa kaso na may kadagdagan pang mga pagbabago laen lang kun ika magbisita sa pahinang ini.
-Ika mapuwede man na makapagbago kan bandera nin pagpapaisi para sa gabos mong pinagbabantayan na mga pahina na yaon sa saimong bantay-listahan.
+Dae na magkakaigwa pa nin ibang pagpapaisi sa kaso na may kadagdagan pang aktibidad laen lang kun ika magbisita sa pahinang ini mantang ika nakalaog. Ika mapuwede man na makapagbago kan bandera nin pagpapaisi para sa gabos mong pinagbabantayan na mga pahina na yaon sa saimong bantay-listahan.
 
 An saimong mainamigong {{SITENAME}} sistema nin pagpapaisi
 
 --
-Sa pagbabago kan saimong e-surat na pagpapaising panuytoy, magbisita sa
-{{canonicalurl:{{#special:Mga Kagustuhan}}}}
+Sa pagbabago kan saimong e-surat na pagpapaising panuytoy, magbisita sa {{canonicalurl:{{#special:Mga Kagustuhan}}}}
 
-Sa pagbabago kan saimong bantay-listahang panuytoy, magbisita sa
-{{canonicalurl:{{#special:EditWatchlist}}}}
+Sa pagbabago kan saimong bantay-listahang panuytoy, magbisita sa {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Sa pagpura ka pahina gikan sa saimong bantay-listahan, magbisita sa
-$UNWATCHURL
+Sa pagpura ka pahina gikan sa saimong bantay-listahan, magbisita sa $UNWATCHURL
 
 Balik-simbag asin kadagdagang asistensiya:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
@@ -3065,7 +3062,7 @@ Sa pagpapa-andar kaini, an saimong sistema mapupuwedeng makompromiso.",
 'svg-long-desc' => 'SVG na sagunson, nangangaranan nin $1 x $2 na mga piksel, sukol nin sagunson: $3',
 'svg-long-desc-animated' => 'Animatadong SVG na sagunson, nangangaranang $1 x $2 piksel, kadakulaan nin sagunson: $3',
 'svg-long-error' => 'Imbalidong SVG na sagunson: $1',
-'show-big-image' => 'Todong resolusyon',
+'show-big-image' => 'Orihinal na sagunson',
 'show-big-image-preview' => 'Sukol kaining patanaw: $1.',
 'show-big-image-other' => 'Ibang {{PLURAL:$2|resolusyon|mga resoluyon}}: $1.',
 'show-big-image-size' => '$1 × $2 piksel',
@@ -3759,6 +3756,7 @@ Ika dapat na nakapagresibe na kan [{{SERVER}}{{SCRIPTPATH}}/COPYING sarong kopya
 
 # Special:SpecialPages
 'specialpages' => 'Mga espesyal na pahina',
+'specialpages-note-top' => 'Balaynan',
 'specialpages-note' => '* Normal espesyal na mga pahina.
 * <span class="mw-specialpagerestricted">Restriktadong espesyal na mga pahina.</span>',
 'specialpages-group-maintenance' => 'Mga talaan nin pagpangataman',
@@ -3973,4 +3971,10 @@ Kun bako man, ika makakagamit nin sayon na porma sa ibaba. An saimong komento id
 'limitreport-expansiondepth' => 'Kinatugmadan kan pinakahalangkaw na kahiwasan',
 'limitreport-expensivefunctioncount' => 'Bilang kan hiro nin mamahalon na parabangay',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Bigwakon na mga panguyog',
+'expand_templates_output' => 'Resulta',
+'expand_templates_remove_comments' => 'Tanggalon an mga komento',
+'expand_templates_preview' => 'Patânaw',
+
 );
index 1170a91..1669855 100644 (file)
@@ -364,8 +364,6 @@ $1',
 'pagetitle' => '$1 — {{SITENAME}}',
 'retrievedfrom' => 'Узята з "$1"',
 'youhavenewmessages' => 'Вы маеце $1 ($2).',
-'newmessageslink' => 'новыя паведамленні',
-'newmessagesdifflink' => 'розн. з найноўшай версіяй',
 'youhavenewmessagesfromusers' => 'Вы атрымалі $1 ад {{PLURAL:$3|$3 ўдзельніка|$3 удзельнікаў}} ($2).',
 'youhavenewmessagesmanyusers' => 'Вы атрымалі $1 ад мноства карыстальнікаў ($2).',
 'youhavenewmessagesmulti' => 'У вас ёсць новыя паведамленні на $1',
@@ -1097,7 +1095,6 @@ $1",
 'preferences' => 'Настройкі',
 'mypreferences' => 'Настройкі',
 'prefs-edits' => 'Колькасць правак:',
-'prefsnologin' => 'Не ўвайшлі',
 'changepassword' => 'Пароль',
 'prefs-skin' => 'Вокладка',
 'skin-preview' => 'перадпаказ',
@@ -1367,6 +1364,7 @@ $1",
 'recentchanges-label-minor' => 'Гэта дробная па значэнні праўка',
 'recentchanges-label-bot' => 'Праўка была зробленая праграмай-робатам',
 'recentchanges-label-unpatrolled' => 'Праўка яшчэ не атрымала адзнакі ўхваленасці (за ёй не сочыць "патруль")',
+'recentchanges-legend-newpage' => '$1 - новая старонка',
 'rcnote' => "Ніжэй паказан{{PLURAL:$1|а '''1''' змяненне|ыя апошнія '''$1''' змяненняў}} за апошні{{PLURAL:$2| дзень|я '''$2''' дзён}}, паводле стану на $5, $4.",
 'rcnotefrom' => 'Ніжэй знаходзяцца змены з <b>$2</b> (да <b>$1</b> на старонку).',
 'rclistfrom' => 'Паказаць змены з $1',
index 4dc5cfa..9e56101 100644 (file)
@@ -65,7 +65,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Стварыць_рахунак' ),
        'Deadendpages'              => array( 'Тупіковыя_старонкі' ),
        'DeletedContributions'      => array( 'Выдалены_ўнёсак' ),
-       'Disambiguations'           => array( 'Неадназначнасьці' ),
        'DoubleRedirects'           => array( 'Двайныя_перанакіраваньні' ),
        'Emailuser'                 => array( 'Даслаць_ліст' ),
        'Export'                    => array( 'Экспарт' ),
@@ -538,8 +537,6 @@ $1',
 'pagetitle' => '$1 — {{SITENAME}}',
 'retrievedfrom' => 'Атрымана з «$1»',
 'youhavenewmessages' => 'Вы атрымалі $1 ($2).',
-'newmessageslink' => 'новыя паведамленьні',
-'newmessagesdifflink' => 'апошняя зьмена',
 'youhavenewmessagesfromusers' => 'Вы атрымалі $1 ад {{PLURAL:$3|іншага ўдзельніка|$3 удзельнікаў}} ($2).',
 'youhavenewmessagesmanyusers' => 'Вы атрымалі $1 ад некалькіх удзельнікаў ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|новае паведамленьне|новыя паведамленьні}}',
@@ -1388,7 +1385,6 @@ $1",
 'preferences' => 'Налады',
 'mypreferences' => 'Налады',
 'prefs-edits' => 'Колькасьць рэдагаваньняў:',
-'prefsnologin' => 'Вы не ўвайшлі ў сыстэму',
 'changepassword' => 'Зьмяніць пароль',
 'prefs-skin' => 'Афармленьне',
 'skin-preview' => 'Папярэдні прагляд',
@@ -1688,6 +1684,7 @@ $1",
 'recentchanges-label-minor' => 'Гэтае рэдагаваньне — дробнае',
 'recentchanges-label-bot' => 'Гэтае рэдагаваньне зробленае робатам',
 'recentchanges-label-unpatrolled' => 'Гэтае рэдагаваньне яшчэ не было адпатруляванае',
+'recentchanges-legend-newpage' => '$1 — новая старонка',
 'rcnote' => "Ніжэй {{PLURAL:$1|пададзена '''$1''' апошняя зьмена|пададзеныя '''$1''' апошнія зьмены|пададзеныя '''$1''' апошніх зьменаў}} за {{PLURAL:$2|апошні '''$2''' дзень|апошнія '''$2''' дні|апошнія '''$2''' дзён}}, па стане на $5, $4.",
 'rcnotefrom' => "Ніжэй знаходзяцца зьмены з '''$2''' (да '''$1''' на старонку).",
 'rclistfrom' => 'Паказаць зьмены з $1',
@@ -4143,4 +4140,21 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'limitreport-expansiondepth' => 'Найбольшая глыбіня разгортваньня',
 'limitreport-expensivefunctioncount' => 'Колькасьць дарагіх функцыяў парсэра',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Разгортваньне шаблёнаў',
+'expand_templates_intro' => 'Гэтая спэцыяльная старонка пераўтварае тэкст і разгортвае ўсе шаблёны рэкурсіўна.
+Адначасова разгортваюцца функцыі парсэра накшталт
+<code><nowiki>{{</nowiki>#language:…}}</code>, і зьменныя накшталт
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>
+Фактычна, гэтая старонка разгортвае амаль усё ўнутры падвойных фігурных дужак.',
+'expand_templates_title' => 'Загаловак старонкі, для {{FULLPAGENAME}} і г.д.:',
+'expand_templates_input' => 'Крынічны тэкст:',
+'expand_templates_output' => 'Вынік',
+'expand_templates_xml_output' => 'вынік у фармаце XML',
+'expand_templates_ok' => 'Добра',
+'expand_templates_remove_comments' => 'Выдаліць камэнтары',
+'expand_templates_remove_nowiki' => 'Падаўляць тэгі <nowiki> у выніку',
+'expand_templates_generate_xml' => 'Паказаць дрэва аналізу XML',
+'expand_templates_preview' => 'Папярэдні прагляд',
+
 );
index 225230e..f5dcc0d 100644 (file)
@@ -58,7 +58,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Стари_страници' ),
        'Blankpage'                 => array( 'Празна_страница' ),
        'Block'                     => array( 'Блокиране' ),
-       'Blockme'                   => array( 'Блокирай_ме' ),
        'Booksources'               => array( 'Източници_на_книги' ),
        'BrokenRedirects'           => array( 'Невалидни_пренасочвания' ),
        'Categories'                => array( 'Категории' ),
@@ -68,9 +67,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Създаване_на_сметка' ),
        'Deadendpages'              => array( 'Задънени_страници' ),
        'DeletedContributions'      => array( 'Изтрити_приноси' ),
-       'Disambiguations'           => array( 'Пояснителни_страници' ),
        'DoubleRedirects'           => array( 'Двойни_пренасочвания' ),
        'Emailuser'                 => array( 'Писмо_на_потребител' ),
+       'ExpandTemplates'           => array( 'Разгръщане_на_шаблони' ),
        'Export'                    => array( 'Изнасяне' ),
        'Fewestrevisions'           => array( 'Страници_с_най-малко_версии' ),
        'FileDuplicateSearch'       => array( 'Повтарящи_се_файлове' ),
@@ -109,6 +108,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Защитени_страници' ),
        'Protectedtitles'           => array( 'Защитени_заглавия' ),
        'Randompage'                => array( 'Случайна_страница' ),
+       'RandomInCategory'          => array( 'Случайна_страница_в_категория' ),
        'Randomredirect'            => array( 'Случайно_пренасочване' ),
        'Recentchanges'             => array( 'Последни_промени' ),
        'Recentchangeslinked'       => array( 'Свързани_промени' ),
@@ -513,12 +513,10 @@ $1',
 'pagetitle' => '$1 — {{SITENAME}}',
 'retrievedfrom' => 'Взето от „$1“.',
 'youhavenewmessages' => 'Имате $1 ($2).',
-'newmessageslink' => 'нови съобщения',
-'newmessagesdifflink' => 'разлика с предишната версия',
 'youhavenewmessagesfromusers' => 'Имате $1 от {{PLURAL:$3|друг потребител|$3 потребители}} ($2).',
 'youhavenewmessagesmanyusers' => 'Имате $1 от много потребители ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|ново съобщение|нови съобщения}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|последна промяна|последни промени}}',
+'newmessageslinkplural' => '{{PLURAL:$1|ново съобщение|999=нови съобщения}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|последна промяна|999=последни промени}}',
 'youhavenewmessagesmulti' => 'Имате нови съобщения в $1',
 'editsection' => 'редактиране',
 'editold' => 'редактиране',
@@ -1329,7 +1327,6 @@ $1",
 'preferences' => 'Настройки',
 'mypreferences' => 'Настройки',
 'prefs-edits' => 'Брой редакции:',
-'prefsnologin' => 'Не сте влезли',
 'changepassword' => 'Смяна на парола',
 'prefs-skin' => 'Облик',
 'skin-preview' => 'предварителен преглед',
@@ -1607,6 +1604,7 @@ $1",
 'recentchanges-label-minor' => 'Това е малка промяна',
 'recentchanges-label-bot' => 'Тази редакция е извършена от робот',
 'recentchanges-label-unpatrolled' => 'Тази редакция все още не е проверена',
+'recentchanges-legend-newpage' => '(вижте също [[Special:NewPages|списъка с нови страници]])',
 'rcnote' => "{{PLURAL:$1|Показана е '''1''' промяна|Показани са последните '''$1''' промени}} през {{PLURAL:$2|последния ден|последните '''$2''' дни}}, към $5, $4.",
 'rcnotefrom' => 'Дадени са промените от <strong>$2</strong> (до <strong>$1</strong> показани).',
 'rclistfrom' => 'Показване на промени, като се започва от $1.',
@@ -1837,8 +1835,7 @@ $1',
 'upload_source_file' => ' (файл на вашия компютър)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Тази специална страница показва всички качени файлове.
-При филтриране от потребителя се показват само файловете, за които потребителят е качил последната версия.',
+'listfiles-summary' => 'Тази специална страница показва всички качени файлове.',
 'listfiles_search_for' => 'Търсене по име на файла:',
 'imgfile' => 'файл',
 'listfiles' => 'Списък на файловете',
@@ -2141,7 +2138,8 @@ $1',
 # Special:ListGroupRights
 'listgrouprights' => 'Права по потребителски групи',
 'listgrouprights-summary' => 'По-долу на тази страница е показан списък на групите потребители в това уики с асоциираните им права за достъп. Допълнителна информация за отделните права може да бъде намерена [[{{MediaWiki:Listgrouprights-helppage}}|тук]].',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">Поверено право</span>
+'listgrouprights-key' => 'Легенда:
+* <span class="listgrouprights-granted">Поверено право</span>
 * <span class="listgrouprights-revoked">Отнето право</span>',
 'listgrouprights-group' => 'Група',
 'listgrouprights-rights' => 'Права',
@@ -3498,7 +3496,7 @@ $5
 
 Валидността на този код за потвърждение ще важи до $4.',
 'confirmemail_body_set' => 'Някой, вероятно вие, от IP адрес $1,
-е посочил този адрес за електронната поща, свързан с потребителска сметка "$2" в {{SITENAME}}.
+е посочил този адрес за електронната поща, свързан с потребителска сметка „$2“ в {{SITENAME}}.
 
 За потвърждаване, че тази потребителска сметка наистина ви принадлежи и за да активирате отново функциите, свързани с електронна поща в {{SITENAME}}, необходимо е да отворите във вашия браузър следната препратка:
 
@@ -3850,4 +3848,16 @@ $1 е автоматично повишен от $4 до $5',
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|байт|байта}}',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|байт|байта}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Разгръщане на шаблони',
+'expand_templates_title' => 'Заглавие на страницата (напр. за {{FULLPAGENAME}}):',
+'expand_templates_input' => 'Входящ текст:',
+'expand_templates_output' => 'Резултат',
+'expand_templates_xml_output' => 'Изход на XML',
+'expand_templates_ok' => 'ОК',
+'expand_templates_remove_comments' => 'Премахване на коментари',
+'expand_templates_remove_nowiki' => 'Потискане на елементите <nowiki> в резултата',
+'expand_templates_generate_xml' => 'Показване на дървото от разбора на XML',
+'expand_templates_preview' => 'Преглед',
+
 );
index 3cc32d8..dac392c 100644 (file)
@@ -320,8 +320,6 @@ $1',
 'ok' => 'ठिक',
 'retrievedfrom' => '"$1" से लियल गईल',
 'youhavenewmessages' => 'रउआ लगे बा $1 ($2).',
-'newmessageslink' => 'नया सन्देश',
-'newmessagesdifflink' => 'अन्तिम परिवर्तन',
 'youhavenewmessagesfromusers' => 'रउआ खातिर {{PLURAL:$3|एगो अन्य सदस्य|$3 अन्य सदस्यन}} के $1 बा। ($2)',
 'youhavenewmessagesmanyusers' => 'रउआ खातिर कई सदस्यन द्वारा $1 बा। ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|एगो नया सन्देश बा|नया सन्देश बाड़न}}',
@@ -907,7 +905,6 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'preferences' => 'वरीयता',
 'mypreferences' => 'राउर पसन्द',
 'prefs-edits' => 'सम्पादन संख्या',
-'prefsnologin' => 'खाता में प्रवेश नईखीं कईले',
 'changepassword' => 'गुप्त शब्द बदलीं',
 'prefs-skin' => 'त्वचा',
 'skin-preview' => 'पूर्वावलोकन',
index ce84736..fcf308d 100644 (file)
@@ -61,7 +61,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Judul_nang_buruk' ),
        'Blankpage'                 => array( 'Tungkaran_kusung' ),
        'Block'                     => array( 'Blukir_pamakai' ),
-       'Blockme'                   => array( 'Blukir_ulun' ),
        'Booksources'               => array( 'Sumbar_buku' ),
        'BrokenRedirects'           => array( 'Paugahan_rakai' ),
        'Categories'                => array( 'Daptar_tumbung' ),
@@ -73,8 +72,8 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Ulah_akun' ),
        'Deadendpages'              => array( 'Tungkaran_buntu' ),
        'DeletedContributions'      => array( 'Sumbangan_nang_dihapus' ),
-       'Disambiguations'           => array( 'Disambiguasi' ),
        'EditWatchlist'             => array( 'Babak_daptar_pantauan' ),
+       'ExpandTemplates'           => array( 'Kambangakan_citakan' ),
        'Fewestrevisions'           => array( 'Paubahan_tasadikit' ),
        'FileDuplicateSearch'       => array( 'Panggagaian_barakas_kambar' ),
        'Filepath'                  => array( 'Andakan_barakas' ),
@@ -110,6 +109,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Tungkaran_nang_dilindungi' ),
        'Protectedtitles'           => array( 'Judul_nang_dilindungi' ),
        'Randompage'                => array( 'Tungkaran_babarang' ),
+       'RandomInCategory'          => array( 'Babarang_di_tumbung' ),
        'Randomredirect'            => array( 'Paugahan_babarang' ),
        'Recentchanges'             => array( 'Paubahan_pahanyarnya' ),
        'Recentchangeslinked'       => array( 'Paubahan_tarait' ),
@@ -403,8 +403,6 @@ Lihati [[Special:Version|Tungkaran mudil]]',
 'ok' => 'OK',
 'retrievedfrom' => 'Dijumput matan "$1"',
 'youhavenewmessages' => 'Pian baisi $1 ($2)',
-'newmessageslink' => 'pasan hanyar',
-'newmessagesdifflink' => 'paubahan pauncitnya',
 'youhavenewmessagesfromusers' => 'Pian baisi $1 matan {{PLURAL:$3|$3 pamakai lain}} ($2).',
 'youhavenewmessagesmanyusers' => 'Pian baisi $1 matan pamakai lain ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|pasan hanyar}}',
@@ -1179,7 +1177,6 @@ Catatan nang dihaharnya matan isi {{SITENAME}} kawa-ai sudah kadaluarsa.',
 'preferences' => 'Kakatujuan',
 'mypreferences' => 'Nang ulun katuju',
 'prefs-edits' => 'Rikinan babakan-babakan:',
-'prefsnologin' => 'Balum babuat log',
 'changepassword' => 'Ubah katasunduk',
 'prefs-skin' => 'Kulimbit',
 'skin-preview' => 'Titilikan',
@@ -1452,6 +1449,7 @@ Amun Pian mamilih manyadiakan ini, ini akan dipuruk gasan paminanduan kulihan ga
 'recentchanges-label-minor' => 'Ngini sabuting babakan sapalih',
 'recentchanges-label-bot' => 'Babakan ngini digawi ulih saikung bot',
 'recentchanges-label-unpatrolled' => "Babakan ngini baluman ta'awasi",
+'recentchanges-legend-newpage' => '$1 - tungkaran puga',
 'rcnote' => "Di bawah ni {{PLURAL:$1|'''1'''|'''$1'''}} paubahan pahanyarnya dalam {{PLURAL:$2|'''1''' hari|'''$2''' hari}} tauncit, sampai $4 pukul $5.",
 'rcnotefrom' => "Di bawah ngini paubahan tumatan '''$2''' (ditampaiakan sampai '''$1''' paubahan)",
 'rclistfrom' => 'Tampaiakan paubahan pahanyarnya matan $1',
index f65522d..e16248b 100644 (file)
@@ -344,12 +344,10 @@ $1',
 'ok' => 'ঠিক আছে',
 'retrievedfrom' => "'$1' থেকে আনীত",
 'youhavenewmessages' => 'আপনার $1 এসেছে ($2)৷',
-'newmessageslink' => 'নতুন বার্তা',
-'newmessagesdifflink' => 'সর্বশেষ পরিবর্তন',
 'youhavenewmessagesfromusers' => 'আপনি {{PLURAL:$3|অন্য ব্যবহারকারীর|$3 ব্যবহারকারীর}} কাছ থেকে $1 পেয়েছেন ($2)।',
 'youhavenewmessagesmanyusers' => 'আপনি অনেক ব্যবহারকারীর কাছ থেকে $1 পেয়েছেন ($2)।',
-'newmessageslinkplural' => '{{PLURAL:$1|একটি নতুন বার্তা|নতুন বার্তা}}',
-'newmessagesdifflinkplural' => 'সর্বশেষ {{PLURAL:$1|পরিবর্তন|পরিবর্তনসমূহ}}',
+'newmessageslinkplural' => '{{PLURAL:$1|একটি নতুন বার্তা|999=নতুন বার্তা}}',
+'newmessagesdifflinkplural' => 'সর্বশেষ {{PLURAL:$1|পরিবর্তন|999=পরিবর্তনসমূহ}}',
 'youhavenewmessagesmulti' => 'আপনার $1টি নতুন বার্তা এসেছে',
 'editsection' => 'সম্পাদনা',
 'editold' => 'সম্পাদনা',
@@ -479,7 +477,8 @@ $2',
 'invalidtitle-knownnamespace' => 'অবৈধ শিরোনাম, যেখানে নামস্থান "$2" এবং লেখা হয়েছে "$3"',
 'invalidtitle-unknownnamespace' => 'অবৈধ শিরোনাম, যেখানে ব্যবহৃত হয়েছে অপরিচিত নামস্থান সংখ্যা $1 এবং লেখা হয়েছে "$2"',
 'exception-nologin' => 'লগইন করা হয়নি',
-'exception-nologin-text' => 'এই কাজটি করার জন্য উইকিতে লগইন করা প্রয়োজন।',
+'exception-nologin-text' => 'এই কাজটি করার জন্য উইকিতে [[Special:Userlogin|লগইন]] করা প্রয়োজন।',
+'exception-nologin-text-manual' => 'অনুগ্রহ করে এই পাতা দেখতে অথবা পরিবর্তন করতে $1 করুন।',
 
 # Virus scanner
 'virus-badscanner' => "ভুল কনফিগারেশন: অজ্ঞাত ভাইরাস স্কেনার: ''$1''",
@@ -1022,10 +1021,10 @@ $3-এর দেয়া কারণ হল ''$2''",
 
 {{SITENAME}} এর অন্যান্য প্রশাসকগণ লুকানো এই বিষয়বস্তু দেখতে পাবেন এবং বাড়তি কোনো সীমাবদ্ধতা না থাকলে একই ইন্টারফেসের মাধ্যমে এটি পুনরুদ্ধার করতে পারবেন।",
 'revdelete-confirm' => 'অনুগ্রহ করে নিশ্চিত করুন যে আপনি এটি করতে চাচ্ছিলেন, আপনি এর ফলাফল সম্পর্কে অবগত আছেন, এবং [[{{MediaWiki:Policy-url}}|নীতিমালার]] উপর ভিত্তি করেই এই কাজটি করছেন।',
-'revdelete-suppress-text' => "'''কেবলমাত্র''' নিচের বিষয়গুলোর ক্ষেত্রেই চাপাচাপি করা যাবে:
+'revdelete-suppress-text' => "নিচের বিষয়গুলোর ক্ষেত্রেই '''কেবলমাত্র'''  চাপাচাপি করা যাবে:
 * সম্ভাব্য মানহানিকর তথ্য
 * ভুল ব্যক্তিগত তথ্য
-*:  ''বাসার ঠিকানা এবং ফোন নম্বর, সোসাল সিকিউরিটি নম্বর, ইত্যাদি।''",
+*: ''বাসার ঠিকানা এবং ফোন নম্বর, সোসাল সিকিউরিটি নম্বর, ইত্যাদি।''",
 'revdelete-legend' => 'দৃষ্টিপাত সীমাবদ্ধ করো',
 'revdelete-hide-text' => 'সংস্করণের লেখা',
 'revdelete-hide-image' => 'ফাইলের বিষয়বস্তু আড়াল করো',
@@ -1034,8 +1033,8 @@ $3-এর দেয়া কারণ হল ''$2''",
 'revdelete-hide-user' => 'সম্পাদকে ব্যবহারকারীর নাম/আইপি',
 'revdelete-hide-restricted' => 'প্রশাসকবৃন্দ এবং অন্যদের ক্ষেত্রে এই ডাটা রোধ করো',
 'revdelete-radio-same' => 'পরিবর্তন নয়',
-'revdelete-radio-set' => 'দà§\83শà§\8dযমান',
-'revdelete-radio-unset' => 'লà§\81à¦\95ানà§\8b',
+'revdelete-radio-set' => 'লà§\81à¦\95ানà§\8b',
+'revdelete-radio-unset' => 'দà§\83শà§\8dযমান',
 'revdelete-suppress' => 'সব প্রশাসক ও অন্যান্যদের কাছ থেকে উপাত্ত লুকিয়ে রাখা হোক।',
 'revdelete-unsuppress' => 'সংশোধন পুনঃস্থাপনের উপর সীমাবদ্ধতা দূর করো',
 'revdelete-log' => 'কারণ:',
@@ -1190,7 +1189,7 @@ $1",
 'preferences' => 'আমার পছন্দ',
 'mypreferences' => 'পছন্দসমূহ',
 'prefs-edits' => 'সম্পাদনা সংখ্যা:',
-'prefsnologin' => 'আপনি লগ-ইন করেননি',
+'prefsnologintext2' => 'ব্যবহারকারী পছন্দসমূহ নির্ধারনের জন্য $1 করুন।',
 'changepassword' => 'শব্দচাবি পরিবর্তন',
 'prefs-skin' => 'আবরণ (Skin)',
 'skin-preview' => 'প্রাকদর্শন',
@@ -1487,6 +1486,9 @@ $1",
 'recentchanges-label-minor' => 'এটি একটি অনুল্লেখিত সম্পাদনা',
 'recentchanges-label-bot' => 'এটি বট দ্বারা সম্পাদিত',
 'recentchanges-label-unpatrolled' => 'এই সম্পাদনাটি এখনও পরীক্ষিত নয়',
+'recentchanges-label-plusminus' => 'পাতার আকারে এই পরিমান বাইট পরিবর্তিত হয়েছে',
+'recentchanges-legend-newpage' => '(আরও দেখুন [[Special:NewPages|নতুন পাতার তালিকা]])',
+'recentchanges-legend-plusminus' => "(''±১২৩'')",
 'rcnote' => "বিগত {{PLURAL:$2|দিনে|'''$2''' দিনে}} সংঘটিত {{PLURAL:$1|'''১'''|'''$1'''}}টি পরিবর্তন নীচে দেখানো হল (যেখানে বর্তমান সময় ও তারিখ $5, $4)।",
 'rcnotefrom' => "'''$2'''-এর পরে সংঘটিত পরিবর্তনগুলো নিচে দেখানো হল ('''$1'''টি)।",
 'rclistfrom' => '$1-এর পর সংঘটিত নতুন পরিবর্তনগুলো দেখাও।',
@@ -2203,7 +2205,7 @@ $PAGEINTRO $NEWPAGE
 ইমেইল: $PAGEEDITOR_EMAIL
 উইকি: $PAGEEDITOR_WIKI
 
-পাতাটির পরবর্তী পরিবর্তনগুলো জন্য আর কোন বিজ্ঞপ্তি পাঠানো হবে না, যতক্ষণ না আপনি এই পাতায় ব্রাউজ করবেন। এছাড়া আপনি আপনার নজরতালিকায় রাখা সবগুলি পাতা জন্য বিজ্ঞপ্তি ফ্ল্যাগ শুরুর অবস্থায় ফিরিয়ে নিতে পারেন।
+পাতাà¦\9fির à¦ªà¦°à¦¬à¦°à§\8dতà§\80 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà¦\97à§\81লà§\8b à¦\9cনà§\8dয à¦\86র à¦\95à§\8bন à¦¬à¦¿à¦\9cà§\8dà¦\9eপà§\8dতি à¦ªà¦¾à¦ à¦¾à¦¨à§\8b à¦¹à¦¬à§\87 à¦¨à¦¾, à¦¯à¦¤à¦\95à§\8dষণ à¦¨à¦¾ à¦\86পনি à¦²à¦\97 à¦\87ন à¦\95রার à¦¸à¦®à¦¯à¦¼ à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦¬à§\8dরাà¦\89à¦\9c à¦\95রবà§\87ন। à¦\8fà¦\9bাড়া à¦\86পনি à¦\86পনার à¦¨à¦\9cরতালিà¦\95ায় à¦°à¦¾à¦\96া à¦¸à¦¬à¦\97à§\81লি à¦ªà¦¾à¦¤à¦¾ à¦\9cনà§\8dয à¦¬à¦¿à¦\9cà§\8dà¦\9eপà§\8dতি à¦«à§\8dলà§\8dযাà¦\97 à¦¶à§\81রà§\81র à¦\85বসà§\8dথায় à¦«à¦¿à¦°à¦¿à¦¯à¦¼à§\87 à¦¨à¦¿à¦¤à§\87 à¦ªà¦¾à¦°à§\87ন।
 
 {{SITENAME}} নোটিফিকেশন
 
@@ -2399,7 +2401,7 @@ $1',
 
 # Namespace form on various pages
 'namespace' => 'নামস্থান:',
-'invert' => 'বà§\8dযà§\81তà§\8dক্রমে নির্বাচন',
+'invert' => 'বিপরà§\80তক্রমে নির্বাচন',
 'tooltip-invert' => 'যে সকল নামস্থানের পাতাগুলোর পরিবর্তনসমূহর দেখতে চাচ্ছেন না সেগুলোর নামের পাশে টিক দিন',
 'namespace_association' => 'সংশ্লিষ্ট নামস্থান',
 'tooltip-namespace_association' => 'এখানে টিক দেয়ার মাধ্যমে সংশ্লিষ্ট নামস্থান এবং আলাপপাতাসমূহ অন্তর্ভুক্ত করছেন',
@@ -2917,6 +2919,7 @@ $2',
 'pageinfo-length' => 'পাতার দৈর্ঘ্য (বাইটে)',
 'pageinfo-article-id' => 'পাতার আইডি',
 'pageinfo-language' => 'পাতার তথ্যের ভাষা',
+'pageinfo-content-model' => 'পাতার বিষয়বস্তুর মডেল',
 'pageinfo-robot-policy' => 'রোবটের মাধ্যমে ইন্ডেক্স করা হচ্ছে',
 'pageinfo-robot-index' => 'অনুমোদিত',
 'pageinfo-robot-noindex' => 'অনুনমোদিন',
@@ -3002,7 +3005,7 @@ $1',
 'svg-long-desc' => 'এসভিজি ফাইল, সাধারণত $1 × $2 পিক্সেল, ফাইলের আকার: $3',
 'svg-long-desc-animated' => 'এনিমেটেড এসভিজি ফাইল, সাধারণত $1 × $2 পিক্সেল, ফাইলের আকার: $3',
 'svg-long-error' => 'অবৈধ SVG ফাইল: $1',
-'show-big-image' => 'পà§\82রà§\8dণ à¦°à§\87à¦\9cà§\8bলিà¦\89শন',
+'show-big-image' => 'মà§\82ল à¦«à¦¾à¦\87ল',
 'show-big-image-preview' => 'এই প্রিভিউ-এর আকার: $1।',
 'show-big-image-other' => 'অন্যান্য {{PLURAL:$2|আকার|আকারসমূহ}}: $1।',
 'show-big-image-size' => '$1 × $2 পিক্সেল',
@@ -3733,6 +3736,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 
 # Special:SpecialPages
 'specialpages' => 'বিশেষ পাতাসমূহ',
+'specialpages-note-top' => 'লিজেন্ড',
 'specialpages-note' => '* সাধারণ বিশেষ পাতাসমূহ।
 * <span class="mw-specialpagerestricted">সীমাবদ্ধ বিশেষ পাতা।</span>',
 'specialpages-group-maintenance' => 'রক্ষণাবেক্ষণের কার্যবিবরণীসমূহ',
@@ -3947,4 +3951,21 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'limitreport-expansiondepth' => 'সর্বোচ্চ গভীরতা বিস্তার',
 'limitreport-expensivefunctioncount' => 'ব্যয়বহুল পার্সার ফাংশন গণনা',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'টেমপ্লেট সম্প্রসারণ',
+'expand_templates_intro' => 'এই বিশেষ পাতাটি কিছু টেক্সট গ্রহণ করে এবং এর ভেতরের সব টেম্পলেট বারংবার সম্প্রসারিত করে।
+এছাড়াও এটি
+<code><nowiki>{{</nowiki>#language:...}}</code>-এর মত পার্সার ফাংশন,
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>-এর মত ভ্যারিয়েবল
+মোটকথা দ্বিতীয় বন্ধনীর মধ্যে অবস্থিত সবকিছুকেই সম্প্রসারিত করতে পারে।',
+'expand_templates_title' => 'প্রাতিবেশিক শিরোনাম, {{FULLPAGENAME}}, ইত্যাদির জন্য:',
+'expand_templates_input' => 'ইনপুটকৃত লেখা:',
+'expand_templates_output' => 'ফলাফল',
+'expand_templates_xml_output' => 'XML আউটপুট',
+'expand_templates_ok' => 'ঠিক আছে',
+'expand_templates_remove_comments' => 'মন্তব্য মুছে ফেলো',
+'expand_templates_remove_nowiki' => 'ফলাফলে <nowiki> ট্যাগগুলো বাতিল করো',
+'expand_templates_generate_xml' => 'XML পার্স বৃক্ষ দেখাও',
+'expand_templates_preview' => 'প্রাকদর্শন',
+
 );
index 8beff87..ffeb49f 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Freeyak
  * @author Jason (on bo.wikipedia.org)
+ * @author Phurbutsering
  * @author Shirayuki
  * @author YeshiTuhden
  */
@@ -36,8 +37,9 @@ $messages = array(
 'tog-extendwatchlist' => 'མཉམ་འཇོག་ཐོ་བཀྲམས་ཏེ་ཉེ་ལམ་ཙམ་མིན་པར་བཟོ་བཅོས་ཡོངས་རྫོགས་སྟོན་ཅིག',
 'tog-usenewrc' => 'ཡར་རྒྱས་ཅན་གྱི་ཉེ་བའི་བཟོ་བཅོས་བེད་སྤྱོད་པ།(Java ཡི་བརྡ་ཆད་དགོས)',
 'tog-numberheadings' => 'རང་སྒྲིག་ཨང་རྟགས་འགོ་བརྗོད།',
-'tog-showtoolbar' => 'རྩོམ་སྒྲིག་ལག་ཆ་སྟོན།(Java ཡི་བརྡ་ཆད་དགོས།)',
-'tog-editondblclick' => 'ཤོག་ངོས་རྩོམ་སྒྲིག་བྱེད་པར་ལན་གཉིས་རྡེབ།(Java ཡི་བརྡ་ཆད་དགོས།)',
+'tog-showtoolbar' => 'རྩོམ་སྒྲིག་ལག་ཆ་སྟོན།(JavaScript ཡི་བརྡ་ཆད་དགོས།)',
+'tog-editondblclick' => 'ཤོག་ངོས་རྩོམ་སྒྲིག་བྱེད་པར་ལན་གཉིས་རྡེབ།(JavaScript ཡི་བརྡ་ཆད་དགོས།)',
+'tog-editsection' => '[སྒྲིག་བཅོས།]འབྲེལ་མཐུད་གནོན་ཏེ་སྒྲིགབཅོས་སྡེ་ཚན་ཡོད་པར་འགྱིས།',
 'tog-rememberpassword' => 'ངའི་ནང་འཛུལ་བཤར་ལྟ་ཆས་འདི་རུ་མང་མཐའ་ཉིན $1 {{PLURAL:$1}} དྲན་པར་མཛོད།',
 'tog-watchcreations' => 'ངའི་ལྟ་ཐོའི་གྲས་སུ་གསར་བཟོ་བྱས་པ་ལ་ཤོག་ངོས་ཁ་སྣོན།',
 'tog-watchdefault' => 'ངའི་ལྟ་ཐོའི་གྲས་སུ་རྩོམ་སྒྲིག་བྱས་པ་ལ་ཤོག་ངོས་ཁ་སྣོན།',
@@ -136,7 +138,7 @@ $messages = array(
 'cancel' => 'རྩིས་མེད།',
 'moredotdotdot' => 'དེ་ལས་མང་བ་་་',
 'mypage' => 'ངའི་ཤོག་ངོས།',
-'mytalk' => 'à½\84འིà¼\8bà½\82ླེà½\84à¼\8bà½\98ོལ།',
+'mytalk' => 'à½\82à½\8fà½\98à¼\8bà½\82ླེà½\84།',
 'anontalk' => 'IP གནས་ཡུལ་འདི་ལ་གླེང་མོལ།',
 'navigation' => 'ཕྱོགས་ཁྲིད།',
 'and' => '&#32;དང་',
@@ -202,7 +204,7 @@ $messages = array(
 'articlepage' => 'ནང་དོན་ཤོག་ངོས་ལ་ལྟ་བ།',
 'talk' => 'གྲོས་བསྡུར།',
 'views' => 'མཐོང་རིས།',
-'toolbox' => 'ལà½\82à¼\8bà½\86འིà¼\8bསà¾\92ྲོà½\98à¼\8d',
+'toolbox' => 'ལག་ཆའི་སྒམ།',
 'userpage' => 'སྤྱོད་མིའི་ཤོག་ངོས་ལ་ལྟ་བ།',
 'projectpage' => 'ལས་འཆར་ཤོག་ངོས་ལ་ལྟ་བ།',
 'imagepage' => 'ཡིག་ཆའི་ཤོག་ངོས་ལ་ལྟ་བ།',
@@ -244,8 +246,6 @@ $messages = array(
 'ok' => 'འགྲིག',
 'retrievedfrom' => '"$1"ལས་རྙེད་པ།',
 'youhavenewmessages' => 'ཁྱེད་ལ་འཕྲིན་གསར་$1($2)ཡོད།',
-'newmessageslink' => 'འཕྲིན་གསར།',
-'newmessagesdifflink' => 'བཟོ་བཅོས་མཐའ་མ།',
 'youhavenewmessagesmulti' => 'ཁྱེད་ལ་ $1 སྟེང་དུ་འཕྲིན་ཡིག་འདུག',
 'editsection' => 'རྩོམ་སྒྲིག',
 'editold' => 'རྩོམ་སྒྲིག',
@@ -389,7 +389,7 @@ $messages = array(
 'loginreqpagetext' => 'ཤོག་ངོས་གཞན་རྣམས་ལྟ་བར་ངེས་པར་དུ་$1བྱ་དགོས།',
 'accmailtitle' => 'ལམ་ཡིག་བཏང་ཟིན།',
 'newarticle' => '(གསར་བ)',
-'previewnote' => '༼འདི་ནི་སྔོན་ལྟ་ཙམ་ཡིན་པ་མ་བརྗེད།༽ ཁྱེད་ཀྱི་བཟོ་བཅོས་ད་དུང་ཉར་ཚགས་བྱས་མི་འདུག',
+'previewnote' => '"འདི་ནི་སྔོན་ལྟ་ཙམ་ཡིན་པ་ཡིད་ལ་འཇགས་རོགས། "ཁྱེད་ཀྱི་བཟོ་བཅོས་ད་དུང་ཉར་ཚགས་བྱས་མི་འདུག',
 'editing' => '$1རྩོམ་སྒྲིག་བྱེད་བཞིན་པ།',
 'editingsection' => ' $1 (སྡེ་ཚན) ལ་རྩོམ་སྒྲིག་བྱེད་བཞིན་པ།',
 'yourtext' => 'ཁྱོད་ཀྱི་ཡིག་འབྲུ།',
@@ -411,8 +411,8 @@ $messages = array(
 'page_last' => 'མཐའ་མ།',
 'history-fieldset-title' => 'ལོ་རྒྱུས་བཤར་ལྟ།',
 'history-show-deleted' => 'དོར་ཟིན་ཁོ་ན།',
-'histfirst' => 'སྔ་ཤོས།',
-'histlast' => 'ཕྱི་ཤོས།',
+'histfirst' => 'à½\86ེསà¼\8bསà¾\94à¼\8bཤོསà¼\8d',
+'histlast' => 'à½\86ེསà¼\8bà½\95ྱིà¼\8bཤོསà¼\8d',
 'historyempty' => '༼སྟོང་པ།༽',
 
 # Revision deletion
@@ -447,6 +447,7 @@ $messages = array(
 'notextmatches' => 'ཤོག་ངོས་ཡིག་འབྲུ་མཚུངས་པ་མི་འདུག',
 'prevn' => 'སྔོན་མ་{{PLURAL:$1|$1}}',
 'nextn' => 'རྗེས་མ་{{PLURAL:$1|$1}}',
+'shown-title' => 'མིག་སྔར་སྟོན་པ། $1{{PLURAL:$1|གྲུབ་འབྲས།}}ཤོག་ངོས་ལྟར།',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3)ལ་ལྟ་བ།',
 'searchmenu-legend' => 'འཚོལ་ཞིབ་འདེམས་ཚན།',
 'searchmenu-new' => 'ལྦེ་ཁེ་སྟེང་ལ་ཤོག་ལེ་ [[:$1]]བཟོས།',
@@ -476,9 +477,8 @@ $messages = array(
 'powersearch-togglenone' => 'མེད།',
 
 # Preferences page
-'mypreferences' => 'à½\84འིà¼\8bལེà½\82སà¼\8bསà¾\92ྲིà½\82',
+'mypreferences' => 'à½\91à½\82འà¼\8bའà½\91ེà½\98སà¼\8d',
 'prefs-edits' => 'རྩོམ་སྒྲིག་གྲངས་ཚད།',
-'prefsnologin' => 'ནང་འཛུལ་བྱས་མེད།',
 'changepassword' => 'ལམ་ཡིག་བརྗེ་བ།',
 'skin-preview' => 'སྔོན་ལྟ།',
 'prefs-personal' => 'སྤྱོད་མིའི་སྤྱི་ཁོག',
@@ -567,7 +567,7 @@ $messages = array(
 'minoreditletter' => 'སྒྲིག་ཆུང་།',
 'newpageletter' => 'ཤོག་གསར།',
 'rc_categories_any' => 'གང་རུང་།',
-'rc-enhanced-expand' => 'ཞིབ་ཕྲ་སྟོན།',
+'rc-enhanced-expand' => 'à½\9eིà½\96à¼\8bà½\95ྲརà¼\8bསà¾\9fོà½\93à¼\8d',
 'rc-enhanced-hide' => 'ཞིབ་ཕྲ་སྦས་བ།',
 
 # Recent changes linked
@@ -625,7 +625,7 @@ $messages = array(
 'filehist-filesize' => 'ཡིག་ཆའི་ཆེ་ཆུང་།',
 'filehist-comment' => 'བསམ་ཚུལ།',
 'filehist-missing' => 'ཡིག་ཆ་ཆད་པ།',
-'imagelinks' => 'à½\82à½\84à¼\8bལà¼\8bསྦྲེལà¼\8bà½\96།',
+'imagelinks' => 'ཡིà½\82à¼\8bà½\86à¼\8bà½\96ེà½\91à¼\8bསྤྱོà½\91à¼\8bà½\81ུལ།',
 'linkstoimage' => '{{PLURAL:$1|pagelinks|$1pagelink}} འདི་ལ་སྦྲེལ་ཡོད།',
 'shared-repo-from' => '$1 ནས།',
 
@@ -685,8 +685,8 @@ $messages = array(
 'emailmessage' => 'སྐད་ཆ།',
 
 # Watchlist
-'watchlist' => 'à½\84འིà¼\8bà½\98à½\89à½\98à¼\8bའà½\87ོà½\82་ཐོ།',
-'mywatchlist' => 'à½\84འིà¼\8bà½\98à½\89à½\98à¼\8bའà½\87ོà½\82་ཐོ།',
+'watchlist' => 'ལà¾\9fà¼\8bà½\9eིà½\96་ཐོ།',
+'mywatchlist' => 'ལà¾\9fà¼\8bà½\9eིà½\96་ཐོ།',
 'watchnologin' => 'ནང་འཛུལ་བྱས་མེད།',
 'watch' => 'མཉམ་འཇོག་ཐོ།',
 'watchthispage' => 'དྲ་ངོས་འདི་ལ་གཟིགས།',
@@ -748,8 +748,8 @@ $messages = array(
 'blanknamespace' => '༼གཙོ་ངོས།༽',
 
 # Contributions
-'contributions' => 'སྤྱོà½\91à¼\8bà½\98ིའིà¼\8bà½\96ྱསà¼\8bརà¾\97ེས།',
-'mycontris' => 'à½\84འིà¼\8bà½\96ྱསà¼\8bརà¾\97ེས།',
+'contributions' => 'à½\98à½\90ུà½\93à¼\8bའà½\82ྱུར།',
+'mycontris' => 'à½\98à½\90ུà½\93à¼\8bའà½\82ྱུར།',
 'month' => 'ཟླ་བ་འདི་ནས།',
 'year' => 'ལོ་འདི་ནས།',
 
@@ -761,7 +761,7 @@ $messages = array(
 'whatlinkshere-title' => '"$1" ལ སྦྲེལ་ཡོད་པའི་ཤོག་ངོས།',
 'whatlinkshere-page' => 'ཤོག་ངོས།',
 'linkshere' => "གཤམ་གྱི་ཤོག་ངོས་རྣམས་ '''[[:$1]]''': ལ་སྦྲེལ་ཡོད།",
-'isimage' => 'à½\96རà¾\99à½\93་རིས་སྦྲེལ་མཐུད།',
+'isimage' => 'ཡིà½\82་རིས་སྦྲེལ་མཐུད།',
 'whatlinkshere-links' => '← སྦྲེལ་མཐུད།',
 'whatlinkshere-hidelinks' => '$1 སྦྲེལ་མཐུད།',
 'whatlinkshere-filters' => 'ཡིག་ཚགས།',
@@ -855,7 +855,7 @@ $messages = array(
 'nextdiff' => 'རྩོམ་སྒྲིག་གསར་གྲས། →',
 
 # Media information
-'show-big-image' => 'à½\82à½\8fà½\93à¼\8bའà½\96ེà½\96à¼\8bà½\86à¼\8bà½\9aà½\84à¼\8b།',
+'show-big-image' => 'à½\90ོà½\82à¼\8bà½\98འིà¼\8bཡིà½\82à¼\8bà½\86།',
 
 # Special:NewFiles
 'ilsubmit' => 'འཚོལ།',
index 2722af4..e0c5231 100644 (file)
@@ -303,8 +303,6 @@ $1',
 'ok' => 'চুমিসে',
 'retrievedfrom' => "'$1' -ত্ত আনানি অসে",
 'youhavenewmessages' => 'তরতা $1 ($2) আসে।',
-'newmessageslink' => 'নুৱা পৌ',
-'newmessagesdifflink' => 'গেলগা সিলপা',
 'youhavenewmessagesmulti' => 'তরতা নুৱা পৌ $1হান আহিসে',
 'editsection' => 'পতিক',
 'editold' => 'পতিক',
index 4436f77..e811410 100644 (file)
@@ -53,7 +53,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'PajennoùKozh' ),
        'Badtitle'                  => array( 'TitlFall' ),
        'Block'                     => array( 'Stankañ' ),
-       'Blockme'                   => array( 'MaStankañ' ),
        'Booksources'               => array( 'MammennoùLevr' ),
        'BrokenRedirects'           => array( 'AdkasoùTorr' ),
        'Categories'                => array( 'Rummadoù' ),
@@ -62,9 +61,9 @@ $specialPageAliases = array(
        'Confirmemail'              => array( 'KadarnaatPostel' ),
        'Contributions'             => array( 'Degasadennoù' ),
        'CreateAccount'             => array( 'KrouiñKont' ),
-       'Disambiguations'           => array( 'Disheñvelout' ),
        'DoubleRedirects'           => array( 'AdksaoùDoubl' ),
        'Emailuser'                 => array( 'PostelImplijer' ),
+       'ExpandTemplates'           => array( 'PatromoùAstennet' ),
        'Export'                    => array( 'Ezporzhiañ' ),
        'Import'                    => array( 'Enporzhiañ' ),
        'LinkSearch'                => array( 'KlaskLiamm' ),
@@ -428,7 +427,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'Diwar-benn {{SITENAME}}',
 'aboutpage' => 'Project:Diwar-benn',
-'copyright' => "Danvez a c'haller implijout dindan $1.",
+'copyright' => "Danvez a c'haller implijout dindan $1 nemet ha notet e vefe ar c'hontrol.",
 'copyrightpage' => '{{ns:project}}:Gwirioù aozer (Copyright)',
 'currentevents' => 'Keleier',
 'currentevents-url' => 'Project:Keleier',
@@ -454,12 +453,10 @@ $1',
 'ok' => 'Mat eo',
 'retrievedfrom' => 'Adtapet diwar « $1 »',
 'youhavenewmessages' => "$1 zo ganeoc'h ($2).",
-'newmessageslink' => 'Kemennoù nevez',
-'newmessagesdifflink' => "Diforc'hioù e-keñver ar stumm kent",
 'youhavenewmessagesfromusers' => '$1 ho peus eus {{PLURAL:$3|un implijer all|$3 implijer}} ($2).',
 'youhavenewmessagesmanyusers' => ' $1 ho peus implijerien a-leizh  ($2).',
-'newmessageslinkplural' => "{{PLURAL:$1ur c'hemennad nevez|kemennadoù nevez}}",
-'newmessagesdifflinkplural' => '{{PLURAL:$1|kemennad diwezhañ|kemennadoù diwezhañ}}',
+'newmessageslinkplural' => '{{PLURAL:$1|ur gemennad nevez|999=kemennadoù nevez}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|kemennad diwezhañ|999=kemennadoù diwezhañ}}',
 'youhavenewmessagesmulti' => "Kemennoù nevez zo ganeoc'h war $1",
 'editsection' => 'kemmañ',
 'editold' => 'kemmañ',
@@ -636,6 +633,7 @@ Na zisoñjit ket resisaat ho [[Special:Preferences|penndibaboù evit {{SITENAME}
 'userlogin-resetpassword-link' => 'Ankouaet ho peus ho ker-tremen ?',
 'helplogin-url' => 'Help:Kevreañ',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Skoazell evit kevreañ]]',
+'userlogin-createanother' => 'Krouiñ ur gont all',
 'createacct-join' => 'Skrivit ho titouroù amañ dindan.',
 'createacct-another-join' => 'Ebarzhiñ titouroù ar gont nevez amañ dindan.',
 'createacct-emailrequired' => "Chomlec'h postel",
@@ -1135,8 +1133,8 @@ Gouest e vo merourien all {{SITENAME}} da dapout krog en testennoù kuzhet ha da
 'revdelete-hide-user' => "Anv implijer pe chomlec'h IP an aozer",
 'revdelete-hide-restricted' => "Diverkañ ar roadennoù kement d'ar verourien ha d'ar re all",
 'revdelete-radio-same' => '(arabat cheñch)',
-'revdelete-radio-set' => 'Hewel',
-'revdelete-radio-unset' => 'Kuzhet',
+'revdelete-radio-set' => 'Kuzhet',
+'revdelete-radio-unset' => 'Hewel',
 'revdelete-suppress' => 'Diverkañ roadennoù ar verourien hag ar re all',
 'revdelete-unsuppress' => 'Lemel ar strishadurioù war ar stummoù assavet',
 'revdelete-log' => 'Abeg :',
@@ -1288,7 +1286,6 @@ Gallout a reot kavout munudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'preferences' => 'Penndibaboù',
 'mypreferences' => 'Penndibaboù',
 'prefs-edits' => 'Niver a zegasadennoù :',
-'prefsnologin' => 'Digevreet',
 'changepassword' => 'Kemmañ ar ger-tremen',
 'prefs-skin' => 'Gwiskadur',
 'skin-preview' => 'Rakwelet',
@@ -1581,6 +1578,7 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'recentchanges-label-minor' => "Ur c'hemm dister eo hemañ",
 'recentchanges-label-bot' => "Gant ur bot eo bet degaset ar c'hemm-mañ.",
 'recentchanges-label-unpatrolled' => "N'eo ket bet gwiriet ar c'hemm-mañ evit c'hoazh.",
+'recentchanges-legend-newpage' => '$1 - pajenn nevez',
 'rcnote' => "Setu aze an {{PLURAL:$1|'''1''' change|'''$1''' kemm diwezhañ}} bet c'hoarvezet e-pad an {{PLURAL:$2|deiz|'''$2''' deiz}} diwezhañ, savet d'an $4 da $5.",
 'rcnotefrom' => "Setu aze roll ar c'hemmoù c'hoarvezet abaoe an '''$2''' ('''$1''' d'ar muiañ).",
 'rclistfrom' => "Diskouez ar c'hemmoù diwezhañ abaoe an $1.",
@@ -3830,6 +3828,7 @@ Sañset oc'h bezañ resevet [{{SERVER}}{{SCRIPTPATH}}/COPYING un eilskrid eus ar
 
 # Special:SpecialPages
 'specialpages' => 'Pajennoù dibar',
+'specialpages-note-top' => "Alc'hwez",
 'specialpages-note' => '* Pajennoù dibar boutin.
 * <span class="mw-specialpagerestricted">Pajennoù dibar miret strizh.</span>
 * <span class="mw-specialpagecached">Pajennoù dibar krubuilhet hepken (a c\'hellfe bezañ re gozh).</span>',
@@ -4033,4 +4032,21 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'limitreport-templateargumentsize' => 'Ment arguzenn ar patrom',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|okted}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Emled ar patromoù',
+'expand_templates_intro' => "Kemer a ra ar bajenn dibar-mañ tammoù testenn hag astenn a ra an holl batromoù enni en un doare azkizat.
+Astenn a ra ivez an arc'hwelioù parser evel
+<nowiki>{{</nowiki>#language:…}}, hag an argemmoù evel
+<nowiki>{{</nowiki>CURRENTDAY}}&mdash; e gwirionez, koulz lavaret kement tra zo etre briataennoù.
+Ober a ra kement-mañ dre c'hervel ar bazenn a zegouezh digant parser MediaWiki e-unan.",
+'expand_templates_title' => 'Titl ar gendestenn, evit {{FULLPAGENAME}} h.a. :',
+'expand_templates_input' => 'Merkañ ho testenn amañ :',
+'expand_templates_output' => "Disoc'h",
+'expand_templates_xml_output' => 'Ezvont XML',
+'expand_templates_ok' => 'Mat eo',
+'expand_templates_remove_comments' => 'Lemel an notennoù kuit',
+'expand_templates_remove_nowiki' => "Diverkañ a ra ar balizennoù <nowiki> en disoc'h",
+'expand_templates_generate_xml' => 'Gwelet ar gwezennadur XML',
+'expand_templates_preview' => 'Rakwelet',
+
 );
index a9cbef4..cf8c6ca 100644 (file)
@@ -59,7 +59,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Losnaslov' ),
        'Blankpage'                 => array( 'PraznaStranica' ),
        'Block'                     => array( 'BlokirajIP' ),
-       'Blockme'                   => array( 'BlokirajMe' ),
        'Booksources'               => array( 'KnjizniIzvori' ),
        'BrokenRedirects'           => array( 'NedovršenaPreusmjerenja' ),
        'Categories'                => array( 'Kategorije' ),
@@ -71,10 +70,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'NapraviRačun' ),
        'Deadendpages'              => array( 'MrtveStranice' ),
        'DeletedContributions'      => array( 'ObrisaniDoprinosi' ),
-       'Disambiguations'           => array( 'Čvor' ),
        'DoubleRedirects'           => array( 'DvostrukaPreusmjerenja' ),
        'EditWatchlist'             => array( 'IzmjeniPraćeniSpisak' ),
        'Emailuser'                 => array( 'EmailKorisnika' ),
+       'ExpandTemplates'           => array( 'ProsirivanjeSablona' ),
        'Export'                    => array( 'Izvoz' ),
        'Fewestrevisions'           => array( 'Najmanje_uređivane_stranice' ),
        'FileDuplicateSearch'       => array( 'PotragaDuplihFajlova' ),
@@ -113,6 +112,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'ZasticeneStranice' ),
        'Protectedtitles'           => array( 'ZasticeniNazivi' ),
        'Randompage'                => array( 'Slučajna_stranica' ),
+       'RandomInCategory'          => array( 'SlucajnoUKategoriji' ),
        'Randomredirect'            => array( 'SlucajnoPreusmjerenje' ),
        'Recentchanges'             => array( 'NedavneIzmjene' ),
        'Recentchangeslinked'       => array( 'PovezaneNedavneIzmjene' ),
@@ -554,8 +554,6 @@ $1',
 'ok' => 'U redu',
 'retrievedfrom' => 'Dobavljeno iz "$1"',
 'youhavenewmessages' => 'Imate $1 ($2).',
-'newmessageslink' => 'novih poruka',
-'newmessagesdifflink' => 'posljednja promjena',
 'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugog korisnika|$3 korisnika}} ($2).',
 'youhavenewmessagesmanyusers' => 'Imate $1 od mnogo korisnika ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|nove poruke}}',
@@ -1398,7 +1396,6 @@ Pokušajte u Vaš upit uključiti prefiks ''all:'' da bi ste pretražili sav sad
 'preferences' => 'Postavke',
 'mypreferences' => 'Postavke',
 'prefs-edits' => 'Broj izmjena:',
-'prefsnologin' => 'Niste prijavljeni',
 'changepassword' => 'Promijeni šifru',
 'prefs-skin' => 'Koža',
 'skin-preview' => 'Pregled',
@@ -1690,6 +1687,7 @@ Ako izaberete da date ime, biće korišteno za pripisivanje za vaš rad.',
 'recentchanges-label-minor' => 'Ovo je mala izmjena',
 'recentchanges-label-bot' => 'Ova izmjenu je načinio bot',
 'recentchanges-label-unpatrolled' => 'Ova izmjena još nije patrolirana',
+'recentchanges-legend-newpage' => '$1 - nova stranica',
 'rcnote' => "Ispod {{PLURAL:$1|je '''$1''' promjena|su '''$1''' zadnje promjene|su '''$1''' zadnjih promjena}} u {{PLURAL:$2|posljednjem '''$2''' danu|posljednja '''$2''' dana|posljednjih '''$2''' dana}}, od $4, $5.",
 'rcnotefrom' => 'Ispod su izmjene od <b>$2</b> (do <b>$1</b> prikazano).',
 'rclistfrom' => 'Prikaži nove izmjene počev od $1',
@@ -4177,4 +4175,21 @@ Inače, možete ispuniti jednostavan obrazac ispod. Vaš komentar biti će dodan
 # Limit report
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Proširi šablone',
+'expand_templates_intro' => 'Ova posebna stranica uzima neki tekst i proširuje sve šablone u njemu rekurzivno.
+Ona također proširuje parserske funkcije poput
+<nowiki>{{</nowiki>#language:…}} i varijable poput
+<nowiki>{{</nowiki>CURRENTDAY}}&mdash;u principu gotovo sve između dvostrukih zagrada.
+Ovo se uradi putem poziva relevantnog parserskog nivoa iz same MediaWiki.',
+'expand_templates_title' => 'Naslov konteksta, za {{FULLPAGENAME}} itd.:',
+'expand_templates_input' => 'Tekst unosa:',
+'expand_templates_output' => 'Rezultat',
+'expand_templates_xml_output' => 'XML izlaz',
+'expand_templates_ok' => 'U redu',
+'expand_templates_remove_comments' => 'Ukloni komentare',
+'expand_templates_remove_nowiki' => 'Onemogući oznake <nowiki> u rezultatima',
+'expand_templates_generate_xml' => 'Prikaži XML stablo parsera',
+'expand_templates_preview' => 'Pregled',
+
 );
index 53718ae..063bb3f 100644 (file)
@@ -15,6 +15,7 @@
  * @author Cedric31
  * @author Davidpar
  * @author El libre
+ * @author Fitoschido
  * @author Gemmaa
  * @author Grondin
  * @author Iradigalesc
@@ -26,6 +27,7 @@
  * @author Martorell
  * @author McDutchie
  * @author Nemo bis
+ * @author Papapep
  * @author Pasqual (ca)
  * @author Paucabot
  * @author PerroVerd
@@ -78,7 +80,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Títol_incorrecte' ),
        'Blankpage'                 => array( 'Pàgina_en_blanc', 'Blanc' ),
        'Block'                     => array( 'Bloca' ),
-       'Blockme'                   => array( 'Bloca\'m' ),
        'Booksources'               => array( 'Fonts_bibliogràfiques' ),
        'BrokenRedirects'           => array( 'Redireccions_rompudes' ),
        'ChangeEmail'               => array( 'Canvia_adreça_electrònica' ),
@@ -88,9 +89,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Crea_compte' ),
        'Deadendpages'              => array( 'Atzucacs' ),
        'DeletedContributions'      => array( 'Contribucions_esborrades' ),
-       'Disambiguations'           => array( 'Desambiguacions' ),
        'DoubleRedirects'           => array( 'Redireccions_dobles' ),
        'Emailuser'                 => array( 'Envia_missatge' ),
+       'ExpandTemplates'           => array( 'Expansió_de_plantilles' ),
        'Export'                    => array( 'Exporta' ),
        'Fewestrevisions'           => array( 'Pàgines_menys_editades' ),
        'FileDuplicateSearch'       => array( 'Cerca_fitxers_duplicats' ),
@@ -434,7 +435,7 @@ $messages = array(
 'redirectedfrom' => "(S'ha redirigit des de: $1)",
 'redirectpagesub' => 'Pàgina de redirecció',
 'lastmodifiedat' => 'Darrera modificació de la pàgina: $1 a les $2.',
-'viewcount' => 'Aquesta pàgina ha estat visitada {{PLURAL:$1|una vegada|$1 vegades}}.',
+'viewcount' => "S'ha visitat aquesta pàgina {{PLURAL:$1|una vegada|$1 vegades}}.",
 'protectedpage' => 'Pàgina protegida',
 'jumpto' => 'Dreceres ràpides:',
 'jumptonavigation' => 'navegació',
@@ -477,12 +478,10 @@ $1",
 'ok' => 'OK',
 'retrievedfrom' => 'Obtingut de «$1»',
 'youhavenewmessages' => 'Tens $1 ($2).',
-'newmessageslink' => 'nous missatges',
-'newmessagesdifflink' => 'últims canvis',
 'youhavenewmessagesfromusers' => "Tens $1 {{PLURAL:$3|d'un altre usuari|de $3 usuaris}} ($2).",
 'youhavenewmessagesmanyusers' => 'Tens $1 de molts usuaris ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|un nou missatge|nous missatges}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|darrer canvi|darrers canvis}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un nou missatge|999=nous missatges}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|darrer canvi|999=darrers canvis}}',
 'youhavenewmessagesmulti' => 'Teniu nous missatges a $1',
 'editsection' => 'modifica',
 'editold' => 'modifica',
@@ -568,8 +567,8 @@ Aviseu-ho llavors a un [[Special:ListUsers/sysop|administrador]], deixant-li cla
 'unexpected' => "S'ha trobat un valor imprevist: «$1»=«$2».",
 'formerror' => "Error: no s'ha pogut enviar les dades del formulari",
 'badarticleerror' => 'Aquesta operació no es pot dur a terme en aquesta pàgina',
-'cannotdelete' => "No s'ha pogut esborrar la pàgina o fitxer «$1».
-Potser ja ha estat esborrat per algú altre.",
+'cannotdelete' => "No s'ha pogut suprimir la pàgina o fitxer «$1».
+Potser ja l'ha suprimit algú altre.",
 'cannotdelete-title' => 'No es pot suprimir la pàgina " $1 "',
 'delete-hook-aborted' => 'Un «hook» ha interromput la supressió.
 No ha donat cap explicació.',
@@ -587,7 +586,7 @@ Consulta: $2',
 'actionthrottled' => 'Acció limitada',
 'actionthrottledtext' => "Com a mesura per a prevenir la propaganda indiscriminada (spam), no podeu fer aquesta acció tantes vegades en un període de temps tan curt. Torneu-ho a intentar d'ací uns minuts.",
 'protectedpagetext' => "S'ha protegit la pàgina per evitar-hi modificacions.",
-'viewsourcetext' => "Podeu visualitzar i copiar la font d'aquesta pàgina:",
+'viewsourcetext' => 'Podeu visualitzar i copiar el codi font d’aquesta pàgina:',
 'viewyourtext' => "Vostè pot veure i copiar la font de ' ' les modificacions ' ' d'aquesta pàgina:",
 'protectedinterface' => "Aquesta pàgina proporciona el text de la interfície del software d'aquest wiki i està protegida per evitar els abusos.
 Per agregar o canviar les traduccions per a tots els wikis, si us plau fes servir [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
@@ -609,7 +608,7 @@ L\'administrador que l\'ha bloquejat ha donat aquesta explicació: "$3".',
 'invalidtitle-knownnamespace' => "El títol amb l'espai de noms «$2» i text «$3» no és vàlid",
 'invalidtitle-unknownnamespace' => 'Títol no vàlid amb espai de noms desconegut de número «$1» i text «$2»',
 'exception-nologin' => 'No has iniciat sessió',
-'exception-nologin-text' => 'Aquesta pàgina o acció requereix que iniciïs sessió a aquest wiki.',
+'exception-nologin-text' => '[[Special:Userlogin|Inicieu sessió]] per poder accedir a aquesta pàgina o acció.',
 'exception-nologin-text-manual' => 'Si us plau, $1 per poder accedir a aquesta pàgina o acció.',
 
 # Virus scanner
@@ -738,7 +737,7 @@ Introduïu una adreça amb un format adequat o bé buideu el camp.",
 'createaccount-text' => "Algú ha creat un compte d'usuari anomenat $2 al projecte {{SITENAME}}
 ($4) amb la vostra adreça de correu electrònic. La contrasenya per a l'usuari «$2» és «$3». Hauríeu d'accedir al compte i canviar-vos aquesta contrasenya quan abans millor.
 
-Si no hi teniu cap relació i aquest compte ha estat creat per error, simplement ignoreu el missatge.",
+Si no hi teniu cap relació i aquest compte s'ha creat per error, simplement ignoreu el missatge.",
 'usernamehasherror' => "El nom d'usuari no pot contenir caràcters hash",
 'login-throttled' => "Heu realitzat massa intents d'accés a la sessió.
 Espereu $1 abans de tornar-ho a provar.",
@@ -898,8 +897,8 @@ El número d'identificació de la vostra adreça IP és $3, i l'ID del bloqueig
 'whitelistedittext' => 'Heu de $1 per modificar pàgines.',
 'confirmedittext' => "Heu de confirmar la vostra adreça electrònica abans de poder modificar les pàgines. Definiu i valideu la vostra adreça electrònica a través de les vostres [[Special:Preferences|preferències d'usuari]].",
 'nosuchsectiontitle' => 'No es pot trobar la secció',
-'nosuchsectiontext' => 'Heu intentat editar una secció que no existeix.
-Potser ha estat moguda o eliminada mentre estàveu veient la pàgina.',
+'nosuchsectiontext' => "Heu intentat editar una secció que no existeix.
+Potser s'ha mogut o eliminat mentre estàveu veient la pàgina.",
 'loginreqtitle' => 'Cal que inicieu una sessió',
 'loginreqlink' => 'inicia una sessió',
 'loginreqpagetext' => "Cal que seguiu l'enllaç «$1» per a visualitzar altres pàgines.",
@@ -938,9 +937,9 @@ Per més detalls, la darrera entrada del registre es mostra a continuació:",
 '''Encara no s'ha desat!'''",
 'userjspreview' => "'''Recordeu que només estau provant/previsualitzant el vostre JavaScript, encara no ho heu desat!'''",
 'sitecsspreview' => "'''Adoneu-vos que esteu veient una vista prèvia d'aquest full d'estil CSS.'''
-'''No n'hi ha estat encara gravada!'''",
-'sitejspreview' => "'''Adoneu-vos que esteu veient una vista prèvia d'aquest codi Javascript.'''
-'''No n'hi ha estat encara gravat!'''",
+'''Encara no s'ha desat!'''",
+'sitejspreview' => "'''Tingueu present que esteu previsualitzant aquest codi Javascript.'''
+'''Encara no s'ha desat!'''",
 'userinvalidcssjstitle' => "'''Atenció:''' No existeix l'aparença «$1». Recordeu que les subpàgines personalitzades amb extensions .css i .js utilitzen el títol en minúscules, per exemple, {{ns:user}}:NOM/vector.css no és el mateix que {{ns:user}}:NOM/Vector.css.",
 'updated' => '(Actualitzat)',
 'note' => "'''Nota:'''",
@@ -1009,11 +1008,11 @@ Podeu modificar les planes ja existents o bé [[Special:UserLogin|entrar en un c
 'permissionserrors' => 'Error de permisos',
 'permissionserrorstext' => 'No teniu permisos per a fer-ho, {{PLURAL:$1|pel següent motiu|pels següents motius}}:',
 'permissionserrorstext-withaction' => 'No teniu permís per a $2, {{PLURAL:$1|pel motiu següent|pels motius següents}}:',
-'recreate-moveddeleted-warn' => "'''Avís: Esteu creant una pàgina que ha estat prèviament esborrada.'''
+'recreate-moveddeleted-warn' => "'''Avís: esteu creant una pàgina que ha estat prèviament suprimida.'''
 
 Hauríeu de considerar si és realment necessari continuar editant aquesta pàgina.
 A continuació s'ofereix el registre d'esborraments i de reanomenaments de la pàgina:",
-'moveddeleted-notice' => "Aquesta pàgina ha estat esborrada.
+'moveddeleted-notice' => "S'ha suprimit aquesta pàgina.
 A continuació us mostrem com a referència el registre d'esborraments i reanomenaments de la pàgina.",
 'log-fulllog' => 'Veure tot el registre',
 'edit-hook-aborted' => "Modificació avortada pel hook.
@@ -1021,8 +1020,8 @@ No s'ha donat cap explicació.",
 'edit-gone-missing' => "No s'ha pogut actualitzar la pàgina.
 Sembla haver estat esborrada.",
 'edit-conflict' => "Conflicte d'edició.",
-'edit-no-change' => 'La vostra modificació ha estat ignorada perquè no feia cap canvi al text.',
-'postedit-confirmation' => 'La modificació ha estat desada.',
+'edit-no-change' => "S'ha ignorat la vostra modificació perquè no feia cap canvi al text.",
+'postedit-confirmation' => "S'ha desat la modificació.",
 'edit-already-exists' => "No s'ha pogut crear una pàgina.
 Ja existeix.",
 'defaultmessagetext' => 'Missatge per defecte',
@@ -1063,7 +1062,7 @@ Se n'han omès els arguments.",
 # "Undo" feature
 'undo-success' => "Pot desfer-se la modificació. Si us plau, reviseu la comparació de sota per a assegurar-vos que és el que voleu fer; llavors deseu els canvis per a finalitzar la desfeta de l'edició.",
 'undo-failure' => 'No pot desfer-se la modificació perquè hi ha edicions entre mig que hi entren en conflicte.',
-'undo-norev' => "No s'ha pogut desfer l'edició perquè no existeix o ha estat esborrada.",
+'undo-norev' => "No s'ha pogut desfer l'edició perquè no existeix o s'ha suprimit.",
 'undo-summary' => 'Es desfà la revisió $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussió]])',
 'undo-summary-username-hidden' => "Desfés la revisió $1 d'un usuari ocult",
 
@@ -1101,9 +1100,9 @@ El motiu donat per $3 és ''$2''",
 'history-feed-title' => 'Historial de revisió',
 'history-feed-description' => 'Historial de revisió per a aquesta pàgina del wiki',
 'history-feed-item-nocomment' => '$1 a $2',
-'history-feed-empty' => 'La pàgina demanada no existeix.
-Potser ha estat esborrada o reanomenada.
-Intenteu [[Special:Search|cercar al mateix wiki]] per a noves pàgines rellevants.',
+'history-feed-empty' => "La pàgina demanada no existeix.
+Potser s'ha suprimit o reanomenat.
+Intenteu [[Special:Search|cercar al mateix wiki]] per a noves pàgines rellevants.",
 
 # Revision deletion
 'rev-deleted-comment' => "(resum d'edició eliminat)",
@@ -1112,26 +1111,26 @@ Intenteu [[Special:Search|cercar al mateix wiki]] per a noves pàgines rellevant
 'rev-deleted-user-contribs' => "[nom d'usuari o adreça IP esborrada - modificació ocultada de les contribucions]",
 'rev-deleted-text-permission' => "Aquesta versió de la pàgina ha estat '''eliminada'''.
 Hi poden haver més detalls al [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre d'esborrats].",
-'rev-deleted-text-unhide' => "La revisió d'aquesta pàgina ha estat '''eliminada'''.
+'rev-deleted-text-unhide' => "S'ha '''suprimit''' la revisió d'aquesta pàgina.
 Hi poden haver més detalls al [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre d'esborrats].
 Encara podeu [$1 veure aquesta revisió] si així ho desitgeu.",
-'rev-suppressed-text-unhide' => "Aquesta versió de la pàgina ha estat '''eliminada'''.
+'rev-suppressed-text-unhide' => "S'ha '''suprimit''' aquesta versió de la pàgina.
 Hi poden haver més detalls al [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registre d'esborrats].
 Encara podeu [$1 veure aquesta revisió] si així ho desitgeu.",
-'rev-deleted-text-view' => "Aquesta versió de la pàgina ha estat '''eliminada'''.
+'rev-deleted-text-view' => "S'ha '''suprimit''' aquesta versió de la pàgina.
 Podeu veure-la; vegeu-ne més detalls al [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre d'esborrats].",
 'rev-suppressed-text-view' => "Aquesta versió de la pàgina ha estat '''eliminada'''.
 Podeu veure-la; vegeu-ne més detalls al [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registre d'esborrats].",
-'rev-deleted-no-diff' => "No podeu veure aquesta comparativa perquè una de les versions ha estat '''esborrada'''.
+'rev-deleted-no-diff' => "No podeu veure aquesta comparativa perquè s'ha '''suprimit''' una de les versions.
 Potser trobareu detalls al [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre d'esborrats].",
-'rev-suppressed-no-diff' => "No podeu veure aquesta diferència perquè una de les revisions ha estat '''esborrada'''.",
+'rev-suppressed-no-diff' => "No podeu veure aquesta diferència perquè s'ha '''suprimit''' una de les revisions.",
 'rev-deleted-unhide-diff' => "Una de les revisions d'aquesta comparativa ha estat '''eliminada'''.
 Potser trobareu detalls al [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre d'esborrats].
 Encara podeu [$1 veure aquesta comparativa] si així ho desitgeu.",
-'rev-suppressed-unhide-diff' => "Una de les revisions d'aquesta comparativa ha estat '''esborrada'''.
+'rev-suppressed-unhide-diff' => "S¡ha '''suprimit''' una de les revisions d'aquesta comparativa.
 Podeu veure'n més detalls al [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registre de supressions].
 Podeu seguir [$1 veient aquesta comparativa] si així ho desitgeu.",
-'rev-deleted-diff-view' => "Una de les revisions d'aquesta comparativa ha estat '''esborrada'''.
+'rev-deleted-diff-view' => "S'ha '''suprimit'' una de les revisions d'aquesta comparativa.
 Podeu veure aquesta comparativa; poden haver-hi més detalls al [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre d'esborraments].",
 'rev-suppressed-diff-view' => "Una de les revisions d'aquesta comparativa ha estat '''esborrada'''.
 Podeu veure aquesta comparativa; pot haver-hi més detalls al [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registre de supressions].",
@@ -1154,8 +1153,9 @@ funció, la revisió especificada no existeix, o bé esteu provant d'amagar l'ac
 Els altres administradors de {{SITENAME}} encara podran accedir al contingut amagat i restituir-lo de nou mitjançant aquesta mateixa interfície, si no hi ha cap altra restricció addicional.",
 'revdelete-confirm' => "Si us plau, confirmeu que és això el que desitgeu fer, que enteneu les conseqüències, i que esteu fent-ho d'acord amb [[{{MediaWiki:Policy-url}}|les polítiques acordades]].",
 'revdelete-suppress-text' => "Les supressions '''només''' han de ser portades a terme en els següents casos:
+* Informació potencialment difamatòria
 * Informació personal inapropiada
-*: ''adreces personals, números de telèfon, números de la seguretat social, etc.''",
+*: ''adreces personals, números de telèfon, números d'identificació nacional, etc.''",
 'revdelete-legend' => 'Defineix restriccions en la visibilitat',
 'revdelete-hide-text' => 'Text de la revisió',
 'revdelete-hide-image' => 'Amaga el contingut del fitxer',
@@ -1164,8 +1164,8 @@ Els altres administradors de {{SITENAME}} encara podran accedir al contingut ama
 'revdelete-hide-user' => "Nom d'usuari / adreça IP de l'editor",
 'revdelete-hide-restricted' => 'Suprimir les dades als administradors així com a la resta.',
 'revdelete-radio-same' => '(no modificar)',
-'revdelete-radio-set' => 'Visible',
-'revdelete-radio-unset' => 'Oculta',
+'revdelete-radio-set' => 'Oculta',
+'revdelete-radio-unset' => 'Visible',
 'revdelete-suppress' => 'Suprimeix també les dades dels administradors',
 'revdelete-unsuppress' => 'Suprimir les restriccions de les revisions restaurades',
 'revdelete-log' => 'Motiu:',
@@ -1185,8 +1185,8 @@ $1",
 No es pot amagar.",
 'revdelete-show-no-access' => "Error en mostrar l'element del $1 a les $2: està marcat com a ''restringit''.
 No hi tens accés.",
-'revdelete-modify-no-access' => "Error en modificar l'element del $1 a les $2: aquest element ha estat marcat com a ''restringit''.
-No hi tens accés.",
+'revdelete-modify-no-access' => "S'ha produït un error en modificar l'element del $1 a les $2: aquest element s'ha marcat com a 'restringit''.
+No hi teniu accés.",
 'revdelete-modify-missing' => "Error en modificar l'element ID $1: no figura a la base de dades!",
 'revdelete-no-change' => "'''Atenció:''' la revisió del $1 a les $2 ja té les restriccions de visibilitat sol·licitades.",
 'revdelete-concurrent-change' => "Error en modificar l'element del $1 a les $2: el seu estat sembla haver estat canviat per algú altre quan intentaves modificar-lo.
@@ -1250,7 +1250,7 @@ Assegureu-vos que aquest canvi mantindrà la continuïtat històrica de la pàgi
 'diff-multi-manyusers' => "({{PLURAL:$1|Hi ha una revisió intermèdia|Hi ha $1 revisions intermèdies}} sense mostrar fetes per més {{PLURAL:$2|d'un usuari|de $2 usuaris}})",
 'difference-missing-revision' => "{{PLURAL:$2|Una revisió|$2 revisions}} d'aquesta diferència ($1) no {{PLURAL:$2|s'ha|s'han}} trobat.
 
-Això passa generalment en seguir un enllaç obsolet de diferències a una pàgina que ha estat esborrada.
+Això passa generalment en seguir un enllaç obsolet de diferències a una pàgina que s'ha suprimit.
 Es pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre de supressions].",
 
 # Search results
@@ -1319,7 +1319,7 @@ Es pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{F
 'preferences' => 'Preferències',
 'mypreferences' => 'Preferències',
 'prefs-edits' => "Nombre d'edicions:",
-'prefsnologin' => 'No heu iniciat cap sessió',
+'prefsnologintext2' => "Useu $1 per configurar preferències d'usuari.",
 'changepassword' => 'Canvia la contrasenya',
 'prefs-skin' => 'Aparença',
 'skin-preview' => 'prova',
@@ -1359,7 +1359,7 @@ Es pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{F
 'prefs-help-watchlist-token2' => 'Aquesta és la clau secreta pel canal de continguts de la vostra llista de seguiment.
 Qualsevol que la conegui podria llegir la vostra llista de seguiment, així que no la compartiu.
 [[Special:ResetTokens|Cliqueu aquí si voleu restaurar-la]].',
-'savedprefs' => "S'han desat les vostres preferències",
+'savedprefs' => 'S’han desat les vostres preferències.',
 'timezonelegend' => 'Fus horari:',
 'localtime' => 'Hora local:',
 'timezoneuseserverdefault' => "Utilitza l'hora per defecte del wiki ($1)",
@@ -1615,7 +1615,10 @@ Ha de tenir com a molt {{PLURAL:$1|un caràcter|$1 caràcters}}.',
 'recentchanges-label-newpage' => 'Aquesta modificació inicià una pàgina',
 'recentchanges-label-minor' => 'Aquesta és una modificació menor',
 'recentchanges-label-bot' => 'Aquesta modificació fou feta per un bot',
-'recentchanges-label-unpatrolled' => 'Aquesta modificació encara no ha estat patrullada',
+'recentchanges-label-unpatrolled' => "Aquesta modificació encara no s'ha patrullat",
+'recentchanges-label-plusminus' => 'La mida de la pàgina ha canviat aquest nombre de bytes',
+'recentchanges-legend-newpage' => '(vegeu també la  [[Special:NewPages|llista de pàgines noves]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => 'A continuació hi ha {{PLURAL:$1|el darrer canvi|els darrers <strong>$1</strong> canvis}} en {{PLURAL:$2|el darrer dia|els darrers <strong>$2</strong> dies}}, actualitzats a les $5 del $4.',
 'rcnotefrom' => 'A sota hi ha els canvis des de <b>$2</b> (es mostren fins <b>$1</b>).',
 'rclistfrom' => 'Mostra els canvis nous des de $1',
@@ -1703,7 +1706,7 @@ Vegeu la [[Special:NewFiles|galeria de nous fitxers]] per a una presentació mé
 'filename-tooshort' => 'El nom del fitxer és massa curt.',
 'filetype-banned' => 'Aquest tipus de fitxer està prohibit.',
 'verification-error' => 'Aquest fitxer no ha passat la verificació de fitxers.',
-'hookaborted' => "La modificació que vau tractar de fer ha estat canceŀlada per un lligam d'extensió.",
+'hookaborted' => "La modificació que vau tractar de fer l'ha canceŀlat un lligam d'extensió.",
 'illegal-filename' => 'El nom del fitxer no està permès.',
 'overwrite' => 'No es permet sobreescriure un fitxer existent.',
 'unknown-error' => "S'ha produït un error desconegut.",
@@ -1834,7 +1837,7 @@ No s'hi ha pogut comprovar la seguretat.",
 'uploadstash-clear' => 'Esborra els fitxers en reserva',
 'uploadstash-nofiles' => 'No teniu fitxers en reserva',
 'uploadstash-badtoken' => "No s'ha pogut realitzar l'acció, possiblement perquè han caducat la vostra identificació. Intenteu-ho de nou.",
-'uploadstash-errclear' => "No ha estat possible l'esborrat dels fitxers.",
+'uploadstash-errclear' => "No s'ha pogut suprimir els fitxers.",
 'uploadstash-refresh' => 'Actualitza la llista de fitxers',
 'invalid-chunk-offset' => 'El desplaçament del fragment no és vàlid',
 
@@ -1895,6 +1898,7 @@ Si filtreu per usuari només es mostraran els fitxers la versió més recent del
 'listfiles-show-all' => 'Inclou versions antigues de les imatges',
 'listfiles-latestversion' => 'Versió actual',
 'listfiles-latestversion-yes' => 'Sí',
+'listfiles-latestversion-no' => 'No',
 
 # File description page
 'file-anchor-link' => 'Fitxer',
@@ -1945,7 +1949,7 @@ Potser voleu modificar-ne la descripció en la seva [$2 pàgina de descripció].
 'filerevert-comment' => 'Motiu:',
 'filerevert-defaultcomment' => "S'ha revertit a la versió com de $2, $1",
 'filerevert-submit' => 'Reverteix',
-'filerevert-success' => "'''[[Media:$1|$1]]''' ha estat revertit a la [$4 versió de $3, $2].",
+'filerevert-success' => "S'ha revertit '''[[Media:$1|$1]]''' a la [$4 versió de $3, $2].",
 'filerevert-badversion' => "No hi ha cap versió local anterior d'aquest fitxer amb la marca horària que es proporciona.",
 
 # File deletion
@@ -2251,7 +2255,7 @@ L'adreça electrònica que vau indicar a [[Special:Preferences|les vostres prefe
 'emailccme' => "Envia'm una còpia del meu missatge.",
 'emailccsubject' => 'Còpia del vostre missatge a $1: $2',
 'emailsent' => 'Correu electrònic enviat',
-'emailsenttext' => 'El vostre correu electrònic ha estat enviat.',
+'emailsenttext' => "S'ha enviat el vostre correu electrònic.",
 'emailuserfooter' => "Aquest missatge de correu electrònic l'ha enviat $1 a $2 amb la funció «e-mail» del projecte {{SITENAME}}.",
 
 # User Messenger
@@ -2277,7 +2281,7 @@ S\'hi mostraran els canvis futurs que tinguin lloc en aquesta pàgina i la corre
 'unwatch' => 'Desatén',
 'unwatchthispage' => 'Desatén',
 'notanarticle' => 'No és una pàgina amb contingut',
-'notvisiblerev' => 'La versió ha estat esborrada',
+'notvisiblerev' => "S'ha suprimit la versió",
 'watchlist-details' => 'Teniu $1 {{PLURAL:$1|pàgina vigilada|pàgines vigilades}}, sense comptar les pàgines de discussió.',
 'wlheader-enotif' => 'La notificació per correu electrònic està habilitada.',
 'wlheader-showupdated' => "Les pàgines que s'han canviat des de la vostra darrera visita es mostren en '''negreta'''.",
@@ -2320,7 +2324,7 @@ Contacteu amb l\'editor:
 correu: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-No rebreu més notificacions de futurs canvis si no visiteu la pàgina.
+No rebreu més notificacions en cas de més activitat a menys que visiteu aquesta pàgina havent iniciat sessió.
 També podeu canviar el mode de notificació de les pàgines que vigileu en la vostra llista de seguiment.
 
 El servei de notificacions del projecte {{SITENAME}}
@@ -2355,8 +2359,8 @@ Confirmeu que realment ho voleu fer, que enteneu les
 conseqüències, i que el que esteu fent està d'acord amb la [[{{MediaWiki:Policy-url}}|política]] del projecte.",
 'actioncomplete' => "S'ha realitzat l'acció de manera satisfactòria.",
 'actionfailed' => "L'acció ha fallat",
-'deletedtext' => '«$1» ha estat esborrat.
-Vegeu $2 per a un registre dels esborrats més recents.',
+'deletedtext' => "S'ha suprimit «$1».
+Vegeu $2 per a un registre dels esborrats més recents.",
 'dellogpage' => "Registre d'eliminació",
 'dellogpagetext' => 'Davall hi ha una llista dels esborraments més recents.',
 'deletionlog' => "Registre d'esborrats",
@@ -2385,8 +2389,8 @@ Vegeu $2 per a un registre dels esborrats més recents.',
 'alreadyrolled' => "No es pot revertir la darrera modificació de [[:$1]]
 de l'usuari [[User:$2|$2]] ([[User talk:$2|Discussió]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]). Algú altre ja ha modificat o revertit la pàgina.
 
-La darrera modificació ha estat feta per l'usuari [[User:$3|$3]] ([[User talk:$3|Discussió]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-'editcomment' => "El resum d'edició ha estat: «$1».",
+La darrera modificació l'ha fet l'usuari [[User:$3|$3]] ([[User talk:$3|Discussió]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+'editcomment' => "El resum d'edició és: «$1».",
 'revertpage' => "Revertides les edicions de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussió]]) a l'última versió de [[User:$1|$1]]",
 'revertpage-nouser' => "Edicions revertides per un usuari ocult a l'última revisió de {{GENDER:$1|[[User:$1|$1]]}}",
 'rollback-success' => "Edicions revertides de $1; s'ha canviat a la darrera versió de $2.",
@@ -2612,8 +2616,8 @@ quines pàgines en concret estan sent vandalitzades).",
 'ipb-confirm' => 'Confirma el blocatge',
 'badipaddress' => "L'adreça IP no té el format correcte.",
 'blockipsuccesssub' => "S'ha blocat amb èxit",
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ha estat {{GENDER:$1|blocat|blocada}}.<br />
-Vegeu la [[Special:BlockList|llista de bloqueigs]] per revisar-los.',
+'blockipsuccesstext' => "S'ha {{GENDER:$1|blocat|blocada}} [[Special:Contributions/$1|$1]] .<br />
+Vegeu la [[Special:BlockList|llista de bloqueigs]] per revisar-los.",
 'ipb-blockingself' => 'Esteu a punt de blocar-vos a vós mateix! Esteu segurs de voler-ho fer?',
 'ipb-confirmhideuser' => "Esteu a punt de bloquejar un usuari que està marcat amb l'opció «amaga l'usuari». Això suprimirà el seu nom a totes les llistes i registres. Esteu segurs de voler-ho fer?",
 'ipb-edit-dropdown' => 'Edita les raons per a blocar',
@@ -2626,7 +2630,7 @@ Vegeu la [[Special:BlockList|llista de bloqueigs]] per revisar-los.',
 l'accés a l'escriptura a una adreça IP o un usuari prèviament bloquejat.",
 'ipusubmit' => 'Desbloca aquesta adreça',
 'unblocked' => "S'ha desbloquejat l'{{GENDER:$1|usuari|usuària}} [[User:$1|$1]]",
-'unblocked-range' => '$1 ha estat desblocat',
+'unblocked-range' => "s'ha desblocat $1",
 'unblocked-id' => "S'ha eliminat el bloqueig de $1",
 'blocklist' => 'Usuaris blocats',
 'ipblocklist' => 'Usuaris blocats',
@@ -2661,10 +2665,10 @@ l'accés a l'escriptura a una adreça IP o un usuari prèviament bloquejat.",
 'autoblocker' => "Heu estat blocat automàticament perquè la vostra adreça IP ha estat recentment utilitzada per l'usuari ''[[User:$1|$1]]''.
 El motiu del bloqueig de $1 és: ''$2''.",
 'blocklogpage' => 'Registre de bloquejos',
-'blocklog-showlog' => 'Aquest usuari ha estat blocat prèviament.
-Per més detalls, a sota es mostra el registre de bloquejos:',
-'blocklog-showsuppresslog' => 'Aquest usuari ha estat blocat i amagat prèviament.
-Per més detalls, a sota es mostra el registre de supressions:',
+'blocklog-showlog' => "S'ha blocat aquest usuari prèviament.
+Per més detalls, a sota es mostra el registre de bloquejos:",
+'blocklog-showsuppresslog' => "S'ha blocat i amagat aquest usuari prèviament.
+Per més detalls, a sota es mostra el registre de supressions:",
 'blocklogentry' => "ha blocat l'{{GENDER:$1|usuari|usuària}} [[$1]] per un període de: $2 $3",
 'reblock-logentry' => 'canviades les opcions del blocatge a [[$1]] amb caducitat a $2, $3',
 'blocklogtext' => 'Això és una relació de accions de bloqueig i desbloqueig. Les adreces IP bloquejades automàticament no apareixen. Vegeu la [[Special:BlockList|llista de bloqueigs]] per veure una llista dels actuals bloqueigs operatius.',
@@ -2689,7 +2693,7 @@ Per més detalls, a sota es mostra el registre de supressions:',
 'ip_range_invalid' => 'Rang de IP no vàlid.',
 'ip_range_toolarge' => 'No estan permesos el bloquejos de rangs més grans que /$1.',
 'proxyblocker' => 'Bloqueig de proxy',
-'proxyblockreason' => "La vostra adreça IP ha estat bloquejada perquè és un proxy obert. Si us plau contactau el vostre proveïdor d'Internet o servei tècnic i informau-los d'aquest seriós problema de seguretat.",
+'proxyblockreason' => "S'ha blocat la vostra adreça IP perquè és un proxy obert. Contactau el vostre proveïdor d'Internet o servei tècnic i informau-los d'aquest seriós problema de seguretat.",
 'sorbsreason' => "La vostra adreça IP està llistada com a servidor intermediari (''proxy'') obert dins la llista negra de DNS que fa servir el projecte {{SITENAME}}.",
 'sorbs_create_account_reason' => "La vostra adreça IP està llistada com a servidor intermediari (''proxy'') obert a la llista negra de DNS que utilitza el projecte {{SITENAME}}. No podeu crear-vos-hi un compte",
 'xffblockreason' => "Una adreça IP present en la capçalera X-Forwarded-For, ja sigui vostra o la d'un servidor proxy que esteu utilitzant, ha estat blocada. El motiu inicial del bloqueig és: $1",
@@ -2779,7 +2783,7 @@ Incorporeu-les manualment, si us plau.",
 'move-subpages' => "Desplaça'n també les subpàgines (fins a $1)",
 'move-talk-subpages' => 'Desplaça també les subpàgines de la pàgina de discussió (fins un màxim de $1)',
 'movepage-page-exists' => "La pàgina $1 ja existeix i no pot sobreescriure's automàticament.",
-'movepage-page-moved' => 'La pàgina $1 ha estat traslladada a $2.',
+'movepage-page-moved' => "La pàgina $1 s'ha traslladat a $2.",
 'movepage-page-unmoved' => "La pàgina $1 no s'ha pogut moure a $2.",
 'movepage-max-pages' => "{{PLURAL:$1|S'ha mogut una pàgina|S'han mogut $1 pàgines}} que és el nombre màxim, i per tant no se'n mourà automàticament cap més.",
 'movelogpage' => 'Registre de reanomenaments',
@@ -2891,7 +2895,7 @@ Deseu-lo al vostre ordinador i carregueu-ne una còpia ací.",
 'imported-log-entries' => "{{PLURAL:$1|S'ha importat una entrada del registre|S'han importat $1 entrades del registre}}.",
 'importfailed' => 'La importació ha fallat: $1',
 'importunknownsource' => "No es reconeix el tipus de la font d'importació",
-'importcantopen' => "No ha estat possible d'obrir el fitxer a importar",
+'importcantopen' => "No s'ha pogut obrir el fitxer a importar",
 'importbadinterwiki' => "Enllaç d'interwiki incorrecte",
 'importnotext' => 'Buit o sense text',
 'importsuccess' => 'Importació completada!',
@@ -3005,6 +3009,7 @@ Deseu-lo al vostre ordinador i carregueu-ne una còpia ací.",
 Permet afegir un motiu al resum.',
 'tooltip-preferences-save' => 'Desa preferències',
 'tooltip-summary' => 'Afegiu un breu resum',
+'interlanguage-link-title' => '$1 - $2',
 
 # Stylesheets
 'common.css' => '/* Editeu aquest fitxer per personalitzar totes les aparences per al lloc sencer */',
@@ -3094,7 +3099,7 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 'markaspatrolleddiff' => 'Marca com a supervisat',
 'markaspatrolledtext' => 'Marca la pàgina com a supervisada',
 'markedaspatrolled' => 'Marca com a supervisat',
-'markedaspatrolledtext' => 'La revisió seleccionada de [[:$1]] ha estat marcada com a patrullada.',
+'markedaspatrolledtext' => "S'ha marcat com a patrullada la revisió seleccionada de [[:$1]].",
 'rcpatroldisabled' => "S'ha inhabilitat la supervisió dels canvis recents",
 'rcpatroldisabledtext' => 'La funció de supervisió de canvis recents està actualment inhabilitada.',
 'markedaspatrollederror' => 'No es pot marcar com a supervisat',
@@ -3136,7 +3141,7 @@ Si l'executeu, podeu comprometre la seguretat del vostre sistema.",
 'svg-long-desc' => 'fitxer SVG, nominalment $1 × $2 píxels, mida del fitxer: $3',
 'svg-long-desc-animated' => 'Fitxer SVG animat, nominalment $1 × $2 píxels, mida del fitxer: $3',
 'svg-long-error' => 'El fitxer SVG no és vàlid: $1',
-'show-big-image' => 'Imatge en màxima resolució',
+'show-big-image' => 'Fitxer original',
 'show-big-image-preview' => "Mida d'aquesta previsualització: $1.",
 'show-big-image-other' => '{{PLURAL:$2|Altra resolució|Altres resolucions}}: $1.',
 'show-big-image-size' => '$1 × $2 píxels',
@@ -3363,7 +3368,7 @@ La resta d'enllaços de la línia són les excepcions, és a dir, les pàgines o
 'exif-serialnumber' => 'Número de sèrie de la càmera',
 'exif-cameraownername' => 'Propietari de la càmera',
 'exif-label' => 'Etiqueta',
-'exif-datetimemetadata' => 'Data que la metadata ha estat modificada per última vegada',
+'exif-datetimemetadata' => "Data que s'ha modificat les metadades per última vegada",
 'exif-nickname' => "Nom informal de l'imatge",
 'exif-rating' => 'Valoració (sobre 5)',
 'exif-rightscertificate' => 'Certificat de gestió de drets',
@@ -3707,6 +3712,9 @@ Confirmeu que realment voleu tornar-la a crear.",
 'confirm-unwatch-button' => "D'acord",
 'confirm-unwatch-top' => 'Voleu treure aquesta pàgina de la llista de seguiment?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '«$1»',
+
 # Multipage image navigation
 'imgmultipageprev' => '← pàgina anterior',
 'imgmultipagenext' => 'pàgina següent →',
@@ -3736,8 +3744,8 @@ Confirmeu que realment voleu tornar-la a crear.",
 'livepreview-ready' => "S'està carregant… Preparat!",
 'livepreview-failed' => 'Ha fallat la vista ràpida!
 Proveu-ho amb la previsualització normal.',
-'livepreview-error' => 'La connexió no ha estat possible: $1 «$2»
-Proveu-ho amb la previsualització normal.',
+'livepreview-error' => "No s'ha pogut efectuar la connexió: $1 «$2»
+Proveu-ho amb la previsualització normal.",
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => 'Els canvis més nous de $1 {{PLURAL:$1|segon|segons}} podrien no mostrar-se a la llista.',
@@ -3836,8 +3844,7 @@ Amb aquest programa heu d'haver rebut [{{SERVER}}{{SCRIPTPATH}}/COPYING una còp
 'specialpages' => 'Pàgines especials',
 'specialpages-note-top' => 'Llegenda',
 'specialpages-note' => '* Pàgines especials normals.
-* <span class="mw-specialpagerestricted">Pàgines especials restringides.</span>
-* <span class="mw-specialpagecached">Pàgines especials en memòria cau (poden ser obsoletes).</span>',
+* <span class="mw-specialpagerestricted">Pàgines especials restringides.</span>',
 'specialpages-group-maintenance' => 'Informes de manteniment',
 'specialpages-group-other' => 'Altres pàgines especials',
 'specialpages-group-login' => 'Iniciar sessió / Crear un compte',
@@ -3878,6 +3885,7 @@ Amb aquest programa heu d'haver rebut [{{SERVER}}{{SCRIPTPATH}}/COPYING una còp
 'tags-active-header' => 'Actiu?',
 'tags-hitcount-header' => 'Canvis etiquetats',
 'tags-active-yes' => 'Sí',
+'tags-active-no' => 'No',
 'tags-edit' => 'modifica',
 'tags-hitcount' => '$1 {{PLURAL:$1|canvi|canvis}}',
 
@@ -3996,7 +4004,7 @@ Altrament, podeu fer servir un senzill formulari a continuació. El vostre comen
 'api-error-filetype-banned' => 'Aquest tipus de fitxer està prohibit.',
 'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|no és un tipus de fitxer permès|no són tipus de fitxer permesos}}. {{PLURAL:$3|El tipus de fitxer permès és|Els tipus de fitxer permesos són}} $2.',
 'api-error-filetype-missing' => 'El nom de fitxer no té extensió.',
-'api-error-hookaborted' => "La modificació que heu intentat fer ha estat canceŀlada per un mòdul d'extensió.",
+'api-error-hookaborted' => "Un mòdul d'extensió ha cancel·lat la modificació que heu intentat fer.",
 'api-error-http' => 'Error intern: no es pot connectar al servidor.',
 'api-error-illegal-filename' => 'El nom del fitxer no està permès.',
 'api-error-internal-error' => 'Error intern: el procés de càrrega en el wiki no ha funcionat.',
@@ -4049,4 +4057,18 @@ Altrament, podeu fer servir un senzill formulari a continuació. El vostre comen
 'limitreport-expansiondepth' => "Profunditat màxima d'expansió",
 'limitreport-expensivefunctioncount' => "Número de funcions d'anàlisi dispendioses",
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Expansió de plantilles',
+'expand_templates_intro' => "Aquesta pàgina especial expandeix de forma recursiva totes les plantilles d'un text donat.
+També expandeix les funcions sintàctiques, com ara <code><nowiki>{{</nowiki>#language:…}}</code>, i les variables predefinides, com <code><nowiki>{{</nowiki>CURRENTDAY}}</code> &mdash;de fet, gairebé tot que estigui entre claus dobles.",
+'expand_templates_title' => 'Títol per contextualitzar ({{FULLPAGENAME}}, etc):',
+'expand_templates_input' => 'El vostre text:',
+'expand_templates_output' => 'Resultat:',
+'expand_templates_xml_output' => 'Sortida XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Elimina els comentaris',
+'expand_templates_remove_nowiki' => "Suprimeix l'etiqueta <nowiki> en el resultat",
+'expand_templates_generate_xml' => "Mostra l'arbre XML",
+'expand_templates_preview' => 'Previsualitza',
+
 );
index 42cb98b..bd27279 100644 (file)
  * @author Yejianfei
  */
 
+$fallback = 'nan, zh-hant';
+
+$namespaceNames = array(
+       NS_MEDIA            => '媒體',
+       NS_SPECIAL          => '特殊',
+       NS_TALK             => '討論',
+       NS_USER             => '用戶',
+       NS_USER_TALK        => '用戶討論',
+       NS_PROJECT_TALK     => '$1討論',
+       NS_FILE             => '文件',
+       NS_FILE_TALK        => '文件討論',
+       NS_MEDIAWIKI        => '媒體維基',
+       NS_MEDIAWIKI_TALK   => '媒體維基討論',
+       NS_TEMPLATE         => '模板',
+       NS_TEMPLATE_TALK    => '模板討論',
+       NS_HELP             => '幫助',
+       NS_HELP_TALK        => '幫助討論',
+       NS_CATEGORY         => '分類',
+       NS_CATEGORY_TALK    => '分類討論',
+);
+
+$specialPageAliases = array(
+       'Activeusers'               => array( '活動用戶' ),
+       'Allmessages'               => array( '全部信息' ),
+       'Allpages'                  => array( '全部頁面' ),
+       'Ancientpages'              => array( '舊其頁面' ),
+       'Badtitle'                  => array( '呆其標題' ),
+       'Blankpage'                 => array( '空白頁面' ),
+       'Block'                     => array( '封鎖', '封鎖IP', '封鎖用戶' ),
+       'Booksources'               => array( '圖書源' ),
+       'BrokenRedirects'           => array( '呆其重定向' ),
+       'Categories'                => array( '分類' ),
+       'ChangeEmail'               => array( '改變電子郵件' ),
+       'ChangePassword'            => array( '改變密碼', '重置密碼' ),
+       'ComparePages'              => array( '比較頁面' ),
+       'Confirmemail'              => array( '確認電子郵件' ),
+       'Contributions'             => array( '貢獻' ),
+       'CreateAccount'             => array( '開賬戶' ),
+       'DeletedContributions'      => array( '刪掉其貢獻' ),
+       'DoubleRedirects'           => array( '雙重重定向' ),
+       'EditWatchlist'             => array( '修改監視單' ),
+       'Emailuser'                 => array( '共用戶發送電子郵件' ),
+       'Export'                    => array( '導出' ),
+       'Fewestrevisions'           => array( '最少其修訂' ),
+       'FileDuplicateSearch'       => array( '文件重複尋討' ),
+       'Filepath'                  => array( '文件路徑' ),
+       'Import'                    => array( '導底' ),
+       'Invalidateemail'           => array( '無效電子郵件' ),
+       'JavaScriptTest'            => array( 'JavaScript測試' ),
+       'BlockList'                 => array( '封鎖單' ),
+       'LinkSearch'                => array( '鏈接尋討' ),
+       'Listadmins'                => array( '管理員單單' ),
+       'Listbots'                  => array( '機器人單單' ),
+       'Listfiles'                 => array( '文件單', '圖片單' ),
+       'Listgrouprights'           => array( '小組權限單', '用戶組單單' ),
+       'Listredirects'             => array( '重定向單單' ),
+       'Listusers'                 => array( '用戶單' ),
+       'Lockdb'                    => array( '鎖定數據庫' ),
+       'Log'                       => array( '日誌' ),
+       'Lonelypages'               => array( '單獨其頁面' ),
+       'Longpages'                 => array( '長長其頁面' ),
+       'MergeHistory'              => array( '合併其歷史' ),
+       'MIMEsearch'                => array( 'MIME尋討' ),
+       'Mostcategories'            => array( '最価其分類' ),
+       'Mostimages'                => array( '最価鏈接其文件' ),
+       'Mostinterwikis'            => array( '最稠其跨維基' ),
+       'Mostlinked'                => array( '最価鏈接其頁面' ),
+       'Mostlinkedcategories'      => array( '最価鏈接其分類' ),
+       'Mostlinkedtemplates'       => array( '最価鏈接其模板' ),
+       'Mostrevisions'             => array( '最稠其版本' ),
+       'Movepage'                  => array( '移動其頁面' ),
+       'Mycontributions'           => array( '我其貢獻' ),
+       'Mypage'                    => array( '我其頁面' ),
+       'Mytalk'                    => array( '我其討論' ),
+       'Myuploads'                 => array( '我其上傳' ),
+       'Newimages'                 => array( '新其文件', '新其圖片' ),
+       'Newpages'                  => array( '新其頁面' ),
+       'PasswordReset'             => array( '密碼重置' ),
+       'PermanentLink'             => array( '永久鏈接' ),
+       'Popularpages'              => array( '受歡迎其頁面' ),
+       'Preferences'               => array( '喜好' ),
+       'Prefixindex'               => array( '前綴索引' ),
+       'Protectedpages'            => array( '受保護其頁面' ),
+       'Protectedtitles'           => array( '受保護其標題' ),
+       'Randompage'                => array( '隨便其頁面' ),
+       'Randomredirect'            => array( '隨便其重定向' ),
+       'Recentchanges'             => array( '最近其改變' ),
+       'Recentchangeslinked'       => array( '最近改變其鏈接' ),
+       'Redirect'                  => array( '重定向' ),
+       'ResetTokens'               => array( '重置令牌' ),
+       'Search'                    => array( '尋討' ),
+       'Shortpages'                => array( '短短其頁面' ),
+       'Specialpages'              => array( '特殊頁' ),
+       'Statistics'                => array( '統計' ),
+       'Tags'                      => array( '標籤' ),
+       'Unblock'                   => array( '取消封鎖' ),
+       'Uncategorizedcategories'   => array( '未分類其分類' ),
+       'Uncategorizedimages'       => array( '未分類其文件', '未分類其圖片' ),
+       'Uncategorizedpages'        => array( '未分類其頁面' ),
+       'Uncategorizedtemplates'    => array( '未分類其模板' ),
+       'Undelete'                  => array( '伓使刪除' ),
+       'Unlockdb'                  => array( '解鎖數據庫' ),
+       'Unusedcategories'          => array( '無乇使其分類' ),
+       'Unusedimages'              => array( '無乇使其文件', '無乇使其圖片' ),
+       'Unusedtemplates'           => array( '無乇使其模板' ),
+       'Unwatchedpages'            => array( '未監視其頁面' ),
+       'Upload'                    => array( '上傳' ),
+       'Userlogin'                 => array( '用戶躒底', '躒底' ),
+       'Userlogout'                => array( '用戶躒出', '躒出' ),
+       'Userrights'                => array( '用戶權限' ),
+       'Version'                   => array( '版本' ),
+       'Wantedcategories'          => array( '卜挃其分類' ),
+       'Wantedfiles'               => array( '卜挃其文件' ),
+       'Wantedpages'               => array( '卜挃其頁面' ),
+       'Wantedtemplates'           => array( '卜挃其模板' ),
+       'Watchlist'                 => array( '監視單' ),
+       'Whatlinkshere'             => array( '什乇鏈遘嚽塊' ),
+       'Withoutinterwiki'          => array( '無跨維基' ),
+);
+
 $datePreferences = array(
        'default',
        'ISO 8601',
@@ -287,8 +407,6 @@ $1',
 'ok' => '好',
 'retrievedfrom' => '趁「$1」退過來',
 'youhavenewmessages' => '汝有$1($2)。',
-'newmessageslink' => '新信息',
-'newmessagesdifflink' => '最後其改變',
 'youhavenewmessagesfromusers' => '汝有趁$3用戶($2)來其$1萆信息{{PLURAL:$3}}',
 'youhavenewmessagesmanyusers' => '汝有趁雅価用戶($2)其$1信息',
 'newmessageslinkplural' => '$1條新其信息{{PLURAL:$1}}',
@@ -692,7 +810,6 @@ Sō̤ kī só-gé̤ṳ-kó gì guāng-lī-uòng cūng-kuāng gāi-sék: $1',
 'preferences' => '設定',
 'mypreferences' => '我其設定',
 'prefs-edits' => '修改數量:',
-'prefsnologin' => '未躒底其',
 'changepassword' => '改變密碼',
 'prefs-skin' => '皮膚',
 'datedefault' => '無設定',
index 6c149e3..9af7576 100644 (file)
@@ -75,54 +75,53 @@ $specialPageAliases = array(
        'Activeusers'               => array( 'Жигара_декъашхой' ),
        'Allmessages'               => array( 'ГӀирса_хаамаш' ),
        'Allpages'                  => array( 'Массо_агӀонаш' ),
-       'Ancientpages'              => array( 'Яззамаш_оцу_терахьца_тяххьара_тадар_дина_долу' ),
+       'Ancientpages'              => array( 'Яззамаш_оцу_терахьца_тӀаьххьара_тадар_дина_долу' ),
        'Badtitle'                  => array( 'Хилийта_йиш_йоцу_цӀе' ),
        'Blankpage'                 => array( 'Еса_агӀо' ),
        'Block'                     => array( 'Блоктоха' ),
-       'Blockme'                   => array( 'Блоктоха_суна' ),
-       'Booksources'               => array( 'Жайнашан_хьосташ' ),
+       'Booksources'               => array( 'Жайнийн_хьосташ' ),
        'BrokenRedirects'           => array( 'ДIахаьдна_долу_дIасахьажораш' ),
        'Categories'                => array( 'Категореш' ),
        'ChangeEmail'               => array( 'Хийца_e-mail' ),
-       'ChangePassword'            => array( 'ХийÑ\86а_иÑ\88аÑ\80' ),
+       'ChangePassword'            => array( 'ХийÑ\86а_паÑ\80олÑ\8c' ),
        'ComparePages'              => array( 'АгӀонаш_юстар' ),
        'Confirmemail'              => array( 'Бакъе_e-mail' ),
        'Contributions'             => array( 'Къинхьегам' ),
-       'CreateAccount'             => array( 'Кхолла_декъашхон_дӀаяздар' ),
+       'CreateAccount'             => array( 'Кхолла_декъашхочун_дӀаяздар' ),
        'Deadendpages'              => array( 'Дика_йоцу_агӀонаш' ),
-       'DeletedContributions'      => array( 'ДӀабяхкина_къинхьегам' ),
-       'Disambiguations'           => array( 'Цхьатера_маьӀна_дерш' ),
-       'DoubleRedirects'           => array( 'ШалгӀа_дӀасахьажийнарш' ),
+       'DeletedContributions'      => array( 'ДӀабаьккхина_къинхьегам' ),
+       'DoubleRedirects'           => array( 'Шалха_дӀасахьажийнарш' ),
        'EditWatchlist'             => array( 'Табе_тергаме_могӀам' ),
        'Emailuser'                 => array( 'Декъашхочунга_кехат' ),
+       'ExpandTemplates'           => array( 'Кепаш_схьаястар' ),
        'Export'                    => array( 'Экспорт' ),
-       'Fewestrevisions'           => array( 'Наггахь_беш_болу_хицамаш' ),
+       'Fewestrevisions'           => array( 'Наггахь_беш_болу_хийцамаш' ),
        'FileDuplicateSearch'       => array( 'Цхьатера_файлаш_лахар' ),
        'Filepath'                  => array( 'Файл_йолче' ),
        'Import'                    => array( 'Импорт' ),
        'Invalidateemail'           => array( 'Адрес_бакъдар_юхадаккха' ),
        'JavaScriptTest'            => array( 'JavaScript_тестировать_ян' ),
        'BlockList'                 => array( 'Блоктоьхнарш' ),
-       'LinkSearch'                => array( 'Ð¥Ñ\8cажоÑ\80игаш_лахар' ),
-       'Listadmins'                => array( 'Куьгалхойн_могӀам' ),
+       'LinkSearch'                => array( 'Ð¥Ñ\8cажоÑ\80агаш_лахар' ),
+       'Listadmins'                => array( 'Ð\9aÑ\83Ñ\8cйгалÑ\85ойн_могÓ\80ам' ),
        'Listbots'                  => array( 'Шаболх_бечара_могӀам' ),
-       'Listfiles'                 => array( 'Файланши_могӀам' ),
-       'Listgrouprights'           => array( 'Декъашхошан_бакъонаш' ),
+       'Listfiles'                 => array( 'Файлаш' ),
+       'Listgrouprights'           => array( 'Декъашхойн_бакъонаш' ),
        'Listredirects'             => array( 'ДIасахьажоран_могIам' ),
        'Listusers'                 => array( 'Декъашхойн_могӀам' ),
        'Lockdb'                    => array( 'Хааман_базан_блоктохар' ),
        'Log'                       => array( 'Тептарш' ),
-       'Lonelypages'               => array( 'Байлахь_йисина_агIонаш' ),
+       'Lonelypages'               => array( 'Байлахь_йисина_агӀонаш' ),
        'Longpages'                 => array( 'Беха_яззамаш' ),
-       'MergeHistory'              => array( 'ЦÑ\85Ñ\8cаÑ\8cнаÑ\82оÑ\8cÑ\85на_каÑ\82егоÑ\80еÑ\88' ),
+       'MergeHistory'              => array( 'Ð\98Ñ\81Ñ\82оÑ\80и_Ñ\86Ñ\85Ñ\8cаÑ\8cнаÑ\82оÑ\85аÑ\80' ),
        'MIMEsearch'                => array( 'MIME_чухула_лахар' ),
        'Mostcategories'            => array( 'Дуккха_категореш_тӀе_тоьхна_йолу_агӀонаш' ),
        'Mostimages'                => array( 'Массарел_дуккха_лелайо_файлаш' ),
-       'Mostinterwikis'            => array( 'Ð\94Ñ\83кÑ\85а_Ñ\8eкÑ\8aаÑ\80вики_Ñ\85Ñ\8cажоÑ\80игаш' ),
-       'Mostlinked'                => array( 'Ð\94Ñ\83ккÑ\85а_Ñ\85Ñ\8cажоÑ\80игаÑ\88\82Iе_Ñ\82оÑ\8cÑ\85на_йолÑ\83_агIонаш' ),
+       'Mostinterwikis'            => array( 'Ð\94Ñ\83кÑ\85а_Ñ\8eкÑ\8aаÑ\80вики_Ñ\85Ñ\8cажоÑ\80агаш' ),
+       'Mostlinked'                => array( 'Ð\94Ñ\83ккÑ\85а_Ñ\85Ñ\8cажоÑ\80агаÑ\88\82Ó\80е_Ñ\82оÑ\8cÑ\85на_йолÑ\83_агÓ\80онаш' ),
        'Mostlinkedcategories'      => array( 'Дуккха_тӀе_хьажораш_йолу_категореш' ),
        'Mostlinkedtemplates'       => array( 'Массарел_дуккха_а_леладо_кепаш' ),
-       'Mostrevisions'             => array( 'Сих_сиха_нисйина_йолу_агIонаш' ),
+       'Mostrevisions'             => array( 'Сих_сиха_нисйина_йолу_агӀонаш' ),
        'Movepage'                  => array( 'АгӀона_цӀе_хийцар' ),
        'Mycontributions'           => array( 'Сан_къинхьегам' ),
        'Mypage'                    => array( 'Сан_агӀо' ),
@@ -130,26 +129,27 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'Сан_файлаш' ),
        'Newimages'                 => array( 'Керла_файлаш' ),
        'Newpages'                  => array( 'Керла_агӀонаш' ),
-       'PermanentLink'             => array( 'Гуттарлера_хьажориг' ),
-       'Popularpages'              => array( 'ГӀарялла_агӀонаш' ),
+       'PasswordReset'             => array( 'Пароль_кхоссар' ),
+       'PermanentLink'             => array( 'Гуттарлера_хьажораг' ),
+       'Popularpages'              => array( 'ГӀараяьлла_агӀонаш' ),
        'Preferences'               => array( 'ГӀирсаш' ),
-       'Prefixindex'               => array( 'Хьалха_агIонашан_цIераш_хIотто_йеза' ),
-       'Protectedpages'            => array( 'ГIаролла_дина_агIонаш' ),
-       'Protectedtitles'           => array( 'ГIаролла_дина_цIераш' ),
+       'Prefixindex'               => array( 'Хьалха_агӀонийн_цӀераш_хӀотто_еза' ),
+       'Protectedpages'            => array( 'ГӀаролла_дина_агӀонаш' ),
+       'Protectedtitles'           => array( 'ГӀаролла_дина_цӀераш' ),
        'Randompage'                => array( 'Цахууш_нисйелла_агIо' ),
        'Randomredirect'            => array( 'Цахууш_нисделла_дIасахьажор' ),
        'Recentchanges'             => array( 'Керла_нисдарш' ),
        'Recentchangeslinked'       => array( 'Кхуьнца_долу_нисдарш' ),
        'Revisiondelete'            => array( 'ДӀадяхна_нисдарш' ),
        'Search'                    => array( 'Лахар' ),
-       'Shortpages'                => array( 'Ð\91оÑ\86оа_Ñ\8fззамаÑ\88' ),
+       'Shortpages'                => array( 'Боца_яззамаш' ),
        'Specialpages'              => array( 'Леррина_агӀонаш' ),
        'Statistics'                => array( 'Бухехьдерг' ),
        'Tags'                      => array( 'Билгалонаш' ),
-       'Unblock'                   => array( 'БлокдӀаякхар' ),
+       'Unblock'                   => array( 'БлокдӀаяккхар' ),
        'Uncategorizedcategories'   => array( 'Категореш_йоцу_категореш' ),
        'Uncategorizedimages'       => array( 'Категореш_йоцу_файлаш' ),
-       'Uncategorizedpages'        => array( 'Категореш_йоцу_агIонаш' ),
+       'Uncategorizedpages'        => array( 'Категореш_йоцу_агӀонаш' ),
        'Uncategorizedtemplates'    => array( 'Категореш_йоцу_кепаш' ),
        'Undelete'                  => array( 'МеттахӀоттор' ),
        'Unlockdb'                  => array( 'БлокдӀаякхар_ХБ' ),
@@ -158,17 +158,17 @@ $specialPageAliases = array(
        'Unusedtemplates'           => array( 'Лелош_доцу_кепаш' ),
        'Upload'                    => array( 'Файл_чуяккхар' ),
        'UploadStash'               => array( 'ДӀахьулйина_файл_чуяккхар' ),
-       'Userlogin'                 => array( 'ЧÑ\83валаÑ\80\8fлар' ),
-       'Userlogout'                => array( 'Ð\90Ñ\80авалаÑ\80\8fлар' ),
+       'Userlogin'                 => array( 'ЧÑ\83далар' ),
+       'Userlogout'                => array( 'Ð\90Ñ\80адалар' ),
        'Userrights'                => array( 'Бакъона_урхалладар' ),
        'Version'                   => array( 'Верси' ),
        'Wantedcategories'          => array( 'Оьшуш_йолу_категореш' ),
        'Wantedfiles'               => array( 'Оьшуш_йолу_файлаш' ),
-       'Wantedpages'               => array( 'Оьшуш_йолу_агIонаш' ),
+       'Wantedpages'               => array( 'Оьшуш_йолу_агӀонаш' ),
        'Wantedtemplates'           => array( 'Оьшуш_йолу_кепаш' ),
        'Watchlist'                 => array( 'Тергаме_могӀам' ),
        'Whatlinkshere'             => array( 'Хьажоригаш_кхузе' ),
-       'Withoutinterwiki'          => array( 'Ð\9aÑ\85еÑ\87Ñ\83_меÑ\82Ñ\82анаÑ\88ан_Ñ\85Ñ\8cажоÑ\80иг_йоÑ\86Ñ\83_агIонаш' ),
+       'Withoutinterwiki'          => array( 'ЮкÑ\8aаÑ\80вики_Ñ\85Ñ\8cажоÑ\80агаÑ\88_йоÑ\86Ñ\83_агÓ\80онаш' ),
 );
 
 $magicWords = array(
@@ -202,7 +202,7 @@ $magicWords = array(
        'localhour'                 => array( '1', 'МЕТТИГАН_САХЬТ', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ),
        'numberofpages'             => array( '1', 'АГlОНИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
        'numberofarticles'          => array( '1', 'ЯЗЗАМАШИ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'             => array( '1', 'Ð¥lУÐ\9cÐ\9dÐ\98Ð\99_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
+       'numberoffiles'             => array( '1', 'ФÐ\90Ð\99Ð\9bÐ\90Ð\9dШÐ\98_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
        'numberofusers'             => array( '1', 'ДЕКЪАШХОЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
        'numberofactiveusers'       => array( '1', 'ДУКХАЛЛА_ЖИГАРА_ДЕКЪАШХОЙ', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ),
        'numberofedits'             => array( '1', 'НИСДАРШИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
@@ -233,12 +233,12 @@ $magicWords = array(
        'img_right'                 => array( '1', 'бакъхьа', 'справа', 'right' ),
        'img_left'                  => array( '1', 'харцхьа', 'слева', 'left' ),
        'img_none'                  => array( '1', 'йоцуш', 'без', 'none' ),
-       'img_width'                 => array( '1', '$1цинт', '$1пкс', '$1px' ),
+       'img_width'                 => array( '1', '$1пкс', '$1px' ),
        'img_center'                => array( '1', 'юккъ', 'центр', 'center', 'centre' ),
        'img_framed'                => array( '1', 'гурабе', 'обрамить', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'гурабоцаш', 'безрамки', 'frameless' ),
-       'img_page'                  => array( '1', 'агlо=$1', 'агlо_$1', 'page_$1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ),
-       'img_upright'               => array( '1', 'бакъхьалакхо', 'бакъхьалакхо=$1', 'бакъхьалакхо_$1', 'upright_$1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_page'                  => array( '1', 'агlо=$1', 'агlо_$1', 'page_$1', 'страница=$1', 'страница_$1', 'страница $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'бакъхьалакхо', 'бакъхьалакхо=$1', 'бакъхьалакхо_$1', 'upright_$1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа_$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'доза', 'граница', 'border' ),
        'img_baseline'              => array( '1', 'бух', 'основание', 'baseline' ),
        'img_sub'                   => array( '1', 'буха', 'под', 'sub' ),
@@ -285,8 +285,8 @@ $magicWords = array(
        'raw'                       => array( '0', 'ТАЙАНЗА:', 'НЕОБРАБ:', 'RAW:' ),
        'displaytitle'              => array( '1', 'ГАЙТА_КОЬРТАМОГl', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ),
        'rawsuffix'                 => array( '1', 'Т', 'Н', 'R' ),
-       'newsectionlink'            => array( '1', '__ХЬÐ\90Ð\96Ð\9eРÐ\98Г_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__ССЫЛКА_НА_НОВЫЙ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'          => array( '1', '__Ð\99Ð\9eЦÐ\90Ш_ХЬÐ\90Ð\96Ð\9eРÐ\98Г_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__БЕЗ_ССЫЛКИ_НА_НОВЫЙ_РАЗДЕЛ__', '__NONEWSECTIONLINK__' ),
+       'newsectionlink'            => array( '1', '__ХЬÐ\90Ð\96Ð\9eРÐ\90Г_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__ССЫЛКА_НА_НОВЫЙ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__Ð\99Ð\9eЦÐ\90Ш_ХЬÐ\90Ð\96Ð\9eРÐ\90Г_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__БЕЗ_ССЫЛКИ_НА_НОВЫЙ_РАЗДЕЛ__', '__NONEWSECTIONLINK__' ),
        'currentversion'            => array( '1', 'ЙОЛШЙОЛУ_БАШХО', 'ТЕКУЩАЯ_ВЕРСИЯ', 'CURRENTVERSION' ),
        'urlencode'                 => array( '0', 'ИШАРЙИНА_МЕТТИГ:', 'ЗАКОДИРОВАННЫЙ_АДРЕС:', 'URLENCODE:' ),
        'anchorencode'              => array( '0', 'ИШАРЙАР_МЕТТИГАН', 'КОДИРОВАТЬ_МЕТКУ', 'ANCHORENCODE' ),
@@ -296,7 +296,7 @@ $magicWords = array(
        'language'                  => array( '0', '#МОТТ', '#ЯЗЫК:', '#LANGUAGE:' ),
        'contentlanguage'           => array( '1', 'МОТТ_ЧУЛАЦАМ', 'ЯЗЫК_СОДЕРЖАНИЯ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
        'pagesinnamespace'          => array( '1', 'АГlОНАШ_ОЦ_ЦlЕРАШКАХЬ:', 'СТРАНИЦ_В_ПРОСТРАНСТВЕ_ИМЁН:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'            => array( '1', 'Ð\90Ð\94Ð\9cÐ\90Ð\9dÐ\9aУЬÐ\93Ð\90Ð\9bÐ¥Ð\9eÐ\99\94УÐ\9aÐ¥Ð\90Ð\9bÐ\9bÐ\90', 'Ð\9aÐ\9eÐ\9bÐ\98ЧÐ\95СТÐ\92Ð\9e\90Ð\94Ð\9cÐ\98Ð\9dÐ\98СТРÐ\90ТÐ\9eРÐ\9eÐ\92', 'NUMBEROFADMINS' ),
+       'numberofadmins'            => array( '1', 'КУЬГАЛХОЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ),
        'formatnum'                 => array( '0', 'ТЕРАХЬАН_БАРАМХlОТТОР', 'ФОРМАТИРОВАТЬ_ЧИСЛО', 'FORMATNUM' ),
        'padleft'                   => array( '0', 'ЙУЗА_ХАРЦЕ', 'ЗАПОЛНИТЬ_СЛЕВА', 'PADLEFT' ),
        'padright'                  => array( '0', 'ЙУЗА_БАКЪЕ', 'ЗАПОЛНИТЬ_СПРАВА', 'PADRIGHT' ),
@@ -595,8 +595,6 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Хьост — «$1»',
 'youhavenewmessages' => 'Хьуна кхечи $1 ($2).',
-'newmessageslink' => 'керла хаамаш',
-'newmessagesdifflink' => 'тӀаьххьара хийцамаш',
 'youhavenewmessagesfromusers' => 'Хьуна кхачанна $1 {{PLURAL:$3|$3 декъашхочунгара|$3 декъашхошкара|$3 декъашхошкара}} ($2).',
 'youhavenewmessagesmanyusers' => 'Хьона еъна $1 дукху декъашхошкар ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|керла хаам}}',
@@ -714,9 +712,9 @@ $1',
 'virus-unknownscanner' => 'йозуш йоцу антивирус:',
 
 # Login and logout pages
-'logouttext' => "'''Ð¥Ñ\8cо Ð°Ñ\80авела/ела.'''
-Хьан йиш ю {{grammar:genitive|{{SITENAME}}}} чохь хьой ца вовзийташ/йовзийташ болх бан я <span class='plainlinks'>[$1 кхин чувала/яла ]</span> хьой чохь хила цӀарца я кхин цӀарца.
-Цхьа йолу агӀонаш чохь хьо хьай цӀарца болх беш сана хила тарло ишта ца хилийта керлаякха браузеран кэш.",
+'logouttext' => "'''Ð\90Ñ\85Ñ\8cа Ð±Ð¾Ð»Ñ\85 Ð´Ó\80абеÑ\80зийна.'''
+
+Цхьайолу агӀонаш чохь хьо хьай цӀарца болх беш сана хила тарло ишта ца хилийта керлаякха браузеран кэш.",
 'welcomeuser' => 'Марша ДогӀийла, $1!',
 'yourname' => 'Декъашхочун цӀе:',
 'userlogin-yourname' => 'Декъашхочун цӀе',
@@ -983,6 +981,7 @@ $1',
 
 # "Undo" feature
 'undo-success' => 'Нисйинарг а тlе цалаца мега. Дехар до, хьажа цхьатерра йуй башхо, тешна хила, баккъалла иза хийцам буйте хьуна безарг, тlакха тlе таlайе «дlайазйе агlо», хийцам хlотта ба.',
+'undo-failure' => 'Юккъера хийцамаш бахьнехь нисдар юхадаккха йиш яц.',
 'undo-summary' => 'Юхадаьккхина {{GENDER:$2|декъашхочун}} [[Special:Contributions/$2|$2]] ([[User talk:$2|дийц.]]) нисдар $1',
 'undo-summary-username-hidden' => 'Юхадаьккхина декъашхочун нисдарш $1, цунна цӀе дӀахьулйина',
 
@@ -1130,7 +1129,7 @@ $1',
 'prefs-skin' => 'Кечяран тема',
 'skin-preview' => 'Хьалха муха ю хьажа',
 'datedefault' => 'Iад йитарца',
-'prefs-beta' => 'Ð\93lоле таронаш',
+'prefs-beta' => 'Ð\91еÑ\82а-таронаш',
 'prefs-datetime' => 'Терахь а хан а',
 'prefs-labs' => 'Муха ю хьажарна таронаш',
 'prefs-user-pages' => 'Декъашхочун агӀо',
@@ -1361,6 +1360,7 @@ $1',
 'recentchanges-label-minor' => 'Хlара нисдинарг къастийна жимо долушсан',
 'recentchanges-label-bot' => 'ХӀара нисдар шаболх бечо дина',
 'recentchanges-label-unpatrolled' => 'ХӀара нисдар хӀинца цхьано патрулировать дина дац',
+'recentchanges-legend-newpage' => '$1 — керла агlо',
 'rcnote' => "{{PLURAL:$1|Тlаьххьара '''$1''' хийцам|Тlаьххьара '''$1''' хийцамаш|Тlаьххьара '''$1''' хийцамаш}} за '''$2''' {{PLURAL:$2|де|дийнахь|дийнахь}}, оцу хан чохь $5 $4.",
 'rcnotefrom' => "Лахахь гайтина тӀера '''$2''' хийцамаш ('''$1''' къезиг).",
 'rclistfrom' => 'Гайта хийцам оцу $1.',
@@ -2194,6 +2194,8 @@ PICT # тайп тайпан
 'pageinfo-header-basic' => 'Коьрта хаам',
 'pageinfo-language' => 'АгӀона мотт',
 'pageinfo-toolboxlink' => 'Агlонах болу бовзам',
+'pageinfo-redirectsto-info' => 'Хаам',
+'pageinfo-category-info' => 'Категорех лаьцна хаам',
 
 # Skin names
 'skinname-cologneblue' => 'Кёльнин сингаттам',
@@ -2237,13 +2239,16 @@ PICT # тайп тайпан
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'seconds-abbrev' => '$1оцу',
-'hours' => '{{PLURAL:$1|1 сахьат}}',
+'hours' => '{{PLURAL:$1|1 сахьт}}',
 'days' => '{{PLURAL:$1|$1 де}}',
+'weeks' => '{{PLURAL:$1|$1 кӀира}}',
+'years' => '$1 {{PLURAL:$1|шо}}',
 'ago' => '$1 хьалха',
 
 # Human-readable timestamps
-'hours-ago' => '$1 {{PLURAL:$1|сахьат}} хьалха',
+'hours-ago' => '$1 {{PLURAL:$1|сахьт}} хьалха',
 'minutes-ago' => '$1 {{PLURAL:$1|минут}} хьалха',
+'seconds-ago' => '$1 {{PLURAL:$1|секунд}} хьалха',
 'yesterday-at' => 'селхана $1 даьлча',
 
 # Bad image list
@@ -2511,7 +2516,7 @@ PICT # тайп тайпан
 'searchsuggest-search' => 'Лаха',
 
 # Durations
-'duration-hours' => '$1 {{PLURAL:$1|сахьат}}',
+'duration-hours' => '$1 {{PLURAL:$1|сахьт}}',
 'duration-days' => '$1 {{PLURAL:$1|де}}',
 
 # Limit report
@@ -2527,4 +2532,10 @@ PICT # тайп тайпан
 'limitreport-expansiondepth' => 'Шордаларан уггар йокха кӀоргалла',
 'limitreport-expensivefunctioncount' => 'АгӀона хӀоттам къасторан «еза» функцеш',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Кепаш схьаястар',
+'expand_templates_output' => 'Хилам',
+'expand_templates_remove_comments' => 'ДӀаяха комментареш',
+'expand_templates_preview' => 'Хьалха муха ю хьажа',
+
 );
index 1ca9645..af987a3 100644 (file)
@@ -48,7 +48,6 @@ $specialPageAliases = array(
        'Categories'                => array( 'Mga Kategoriya' ),
        'Contributions'             => array( 'Mga Tampo' ),
        'CreateAccount'             => array( 'Paghimo\'gAkawnt' ),
-       'Disambiguations'           => array( 'Mga Pagklaro' ),
        'DoubleRedirects'           => array( 'DoblengRedirekta' ),
        'Listfiles'                 => array( 'Listahan sa Imahen' ),
        'Lonelypages'               => array( 'Nag-inusarangPanid', 'Sinagop nga Panid' ),
@@ -314,8 +313,6 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Gikuha gikan sa "$1"',
 'youhavenewmessages' => 'Aduna kay $1 ($2).',
-'newmessageslink' => 'bag-ong mensahe',
-'newmessagesdifflink' => 'ulahing pag-usab',
 'youhavenewmessagesmulti' => 'Adunay kay bag-ong mensahe sa $1',
 'editsection' => 'usba',
 'editold' => 'usba',
@@ -724,7 +721,6 @@ Hinumdomi nga ang ilang indeks sa sulod sa {{SITENAME}} mahimong dugay-dugay na.
 'preferences' => 'Mga preperensiya',
 'mypreferences' => 'Akong preperensiya',
 'prefs-edits' => 'Gidaghanon sa nausab:',
-'prefsnologin' => 'Wala maka-log-in',
 'changepassword' => 'Usba ang pasword',
 'prefs-skin' => 'Panit',
 'skin-preview' => 'Paunang tan-aw',
index 0c53642..b71a07b 100644 (file)
@@ -232,8 +232,6 @@ $messages = array(
 'ok' => 'OK',
 'retrievedfrom' => 'Ginen "$1"',
 'youhavenewmessages' => 'Guåha $1 ($2).',
-'newmessageslink' => 'mannuebu na mensåhe',
-'newmessagesdifflink' => 'tinilaika mas nuebu',
 'youhavenewmessagesmulti' => 'Guåha nuebu mensahe-mu gi $1',
 'editsection' => 'tulaika',
 'editold' => 'tulaika',
@@ -659,7 +657,6 @@ Fanapunta na fana'an ti gus nuebu i listan-ñiha i guinahan {{SITENAME}}.",
 'preferences' => "I ga'ña-mu",
 'mypreferences' => "I ga'ña-hu",
 'prefs-edits' => 'Numirun tinilaika:',
-'prefsnologin' => "Ti ma'log in",
 'changepassword' => 'Tulaika password',
 'prefs-skin' => 'Låssas',
 'skin-preview' => "Na'annok",
index 6bc937b..3ccaa28 100644 (file)
@@ -88,7 +88,7 @@ $specialPageAliases = array(
        'Mostlinkedcategories'      => array( 'پۆلەکانی_زیاترین_بەستەردراون،_پۆلەکانی_زیاترین_بەکارھێنراون' ),
        'Mostlinkedtemplates'       => array( 'داڕێژەکانی_زیاترین_بەستەردراون،_داڕێژەکانی_زیاترین_بەکارھێنراون' ),
        'Mostrevisions'             => array( 'زیاترین_پێداچوونەوەکان' ),
-       'Movepage'                  => array( 'پەڕە_گواستنەوە' ),
+       'Movepage'                  => array( 'گواستنەوەی_پەڕە' ),
        'Mycontributions'           => array( 'بەشدارییەکانم' ),
        'Mypage'                    => array( 'پەڕەکەم' ),
        'Mytalk'                    => array( 'لێدوانەکانم' ),
@@ -275,9 +275,9 @@ $messages = array(
 'subcategories' => 'ژێرپۆلەکان',
 'category-media-header' => 'میدیای پۆلی «$1»',
 'category-empty' => "''ئەم پۆلە ھەنووکە ھیچ پەڕە یان پەڕگەیەک لە خۆ ناگرێت.‌''",
-'hidden-categories' => '{{PLURAL:$1|Ù¾Û\86Ù\84Û\8c Ø´Ø§Ø±Ø§Ù\88Û\95|Ù¾Û\86Ù\84Û\8c Ø´Ø§Ø±Ø§Ù\88Û\95}}',
+'hidden-categories' => '{{PLURAL:$1|Ù¾Û\86Ù\84Û\8c Ø´Ø§Ø±Ø¯Ø§Ù\88Û\95|Ù¾Û\86Ù\84Û\95 Ø´Ø§Ø±Ø¯Ø§Ù\88Û\95کاÙ\86}}',
 'hidden-category-category' => 'پۆلە شاردراوەکان',
-'category-subcat-count' => '{{PLURAL:$2|ئەم پۆلە تەنھا ژێرپۆلی خوارەوەی تێدایە.| ئەم پۆلە ئەم {{PLURAL:$1|ژێرپۆلەی|$1 ژێرپۆلانەی}} خوارەوەی تێدایە، لە کۆی سەرجەم $2 دانە.}}',
+'category-subcat-count' => '{{PLURAL:$2|ئەم پۆلە تەنیا ژێرپۆلی ژێرەوەی تێدایە.| ئەم پۆلە ئەم {{PLURAL:$1|ژێرپۆلەی|$1 ژێرپۆلانەی}} ژێرەوەی تێدایە، لە کۆی سەرجەم $2 دانە.}}',
 'category-subcat-count-limited' => 'ئەم هاوپۆلە {{PLURAL:$1|ژێرهاوپۆلی}} لەخۆ گرتووە.',
 'category-article-count' => '{{PLURAL:$2|ئەم پۆلە تەنھا ئەم پەڕەی لەخۆگرتووە.|{{PLURAL:$1|پەڕە|$1 پەڕە}} لەم پۆلەدا، لە سەرجەم $2 پەڕە.}}',
 'category-article-count-limited' => 'ئەم {{PLURAL:$1|لاپەڕە|$1 لاپەڕانە}}، لەم هاوپۆلەدان.',
@@ -367,7 +367,7 @@ $messages = array(
 'articlepage' => 'پەڕەی ناوەرۆک ببینە',
 'talk' => 'وتووێژ',
 'views' => 'بینینەکان',
-'toolbox' => 'ئامرازدان',
+'toolbox' => 'ئامرازەکان',
 'userpage' => 'بینینی پەڕەی بەکارھێنەر',
 'projectpage' => 'په‌ڕه‌ی پرۆژه‌ نیشانبده‌',
 'imagepage' => 'پەڕەی پەڕگە نیشان بدە',
@@ -425,8 +425,6 @@ $1',
 'backlinksubtitle' => '→ $1',
 'retrievedfrom' => 'وەرگیراو لە «$1»',
 'youhavenewmessages' => '$1ت ھەیە ($2).',
-'newmessageslink' => 'پەیامی نوێ',
-'newmessagesdifflink' => 'دوایین گۆڕانکاری',
 'youhavenewmessagesfromusers' => 'لە {{PLURAL:$3|بەکارھێنەرێک|$3 بەکارھێنەران}} $1ت ھەیە ($2).',
 'youhavenewmessagesmanyusers' => '$1ت  لە ژمارەیەک بەکارھێنەر ھەیە ( $2 ).',
 'newmessageslinkplural' => '{{PLURAL:$1|پەیامێکی نوێ|پەیامی نوێ}}',
@@ -872,8 +870,8 @@ $2
 ئەمە بڕێ‌جار کاتێ ڕوو ئەدات کە لە خزمەتی پرۆکسی سەر وێب کەڵک وەر بگریت.",
 'editing' => 'دەستکاریکردنی $1',
 'creating' => 'دروستکردنی $1',
-'editingsection' => 'دەستکاریکردنی: $1 (بەش)',
-'editingcomment' => 'دەستکاریکردنی $1 (بەشی  نوێ)',
+'editingsection' => 'دەستکاریکردنی $1 (بەش)',
+'editingcomment' => 'دەستکاریکردنی $1 (بەشی نوێ)',
 'editconflict' => 'کێشەی دەستکاری: $1',
 'explainconflict' => "کەسێکی تر ئەم پەڕەیە گۆڕیوە لەو کاتەوە تۆ دەستکاریکردنیت دەستپێکردووە.
 بەشی سەرەوەی دەق، شێوازی ئێستای پەڕەکە لە خۆ ئەگرێت.
@@ -1170,7 +1168,7 @@ $1",
 'searchmenu-new' => "'''لەم ویکییەدا پەڕەی « [[:$1]] » دروست بکە!'''",
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|گەڕیان لە پەڕەکانی بەم پێشگرەوە]]',
 'searchprofile-articles' => 'پەڕە بە ناوەڕۆکەکان',
-'searchprofile-project' => 'پەڕەکانی یارمەتی و پڕۆژە',
+'searchprofile-project' => 'پەڕەکانی یارمەتی و پرۆژە',
 'searchprofile-images' => 'ڕەنگاڵە',
 'searchprofile-everything' => 'ھەموو شتێک',
 'searchprofile-advanced' => 'پێشکەوتوو',
@@ -1195,16 +1193,16 @@ $1",
 'searchall' => 'ھەموو',
 'showingresults' => "لە خوارەوە {{PLURAL:$1|'''یەک''' ئەنجام|'''$1''' ئەنجام}} نیشان دراوە، بە دەست پێ کردن لە ژمارەی '''$2'''ەوە.",
 'showingresultsnum' => "لە خوارەوە {{PLURAL:$3|'''١''' ئەنجام|'''$3''' ئەنجام}} دەبینن کە لە ئەنجامی ژمارە '''$2'''ەوە دەست{{PLURAL:$3|پێدەکات|پێدەکەن}}",
-'showingresultsheader' => "{{PLURAL:$5|ئەنجامی '''$1''' لە '''$3'''|ئەنجامەکانی '''$1 - $2''' لە '''$3'''}} بۆ '''$4'''",
+'showingresultsheader' => "{{PLURAL:$5|ئاکامی '''$1''' لە '''$3'''|ئاکامەکانی '''$1 - $2''' لە '''$3'''}} بۆ '''$4'''",
 'nonefound' => "'''تێبینی''': لە حاڵەتی بنچینەیی تەنھا لە ھەندێک لە بۆشایی‌ناوەکان گەڕان دەکرێت.
 وشەی ''all:'' بکە بە پێشگری پرسەکە بۆ گەڕان لە نێو ھەموو کەرستەکان (پەڕەکانی وتووێژ، داڕێژەکان و هتد)، یان بۆشایی‌ناوێکی دڵخواز وەک پێشگر بەکار بێنە.",
 'search-nonefound' => 'ھیچ ئاکامێک کە بە داواکارییەکەت بخوا نەدۆزرایەوە.',
 'powersearch' => 'پێشکەوتوو بگەڕێ',
 'powersearch-legend' => 'گەڕانی پێشکەوتوو',
-'powersearch-ns' => 'گەڕان لە بۆشاییناوەکانی:',
-'powersearch-redir' => 'ڕەوانەکراوەکان لیست بکرێن',
+'powersearch-ns' => 'گەڕان لە بۆشاییی ناوەکانی:',
+'powersearch-redir' => 'ڕەوانەکەرەکان پێرست بکە',
 'powersearch-field' => 'گەڕان بۆ',
-'powersearch-togglelabel' => 'پشکنینی:',
+'powersearch-togglelabel' => 'تاوتوێ بکە:',
 'powersearch-toggleall' => 'ھەموو',
 'powersearch-togglenone' => 'ھیچیان',
 'search-external' => 'گەڕانی دەرەکی',
@@ -1216,12 +1214,11 @@ $1",
 'preferences' => 'ھەڵبژاردەکان',
 'mypreferences' => 'ھەڵبژاردەکان',
 'prefs-edits' => 'ژمارەی گۆڕانکارییەکان:',
-'prefsnologin' => 'لەژوورەوە نیت',
 'changepassword' => 'تێپەڕوشە بگۆڕە',
 'prefs-skin' => 'پێستە',
 'skin-preview' => 'پێش بینین',
 'datedefault' => 'ھەڵنەبژێردراو',
-'prefs-beta' => 'کەرەسەکانی بیتا',
+'prefs-beta' => 'تایبەتمەندییەکانی بیتا',
 'prefs-datetime' => 'کات و ڕێکەوت',
 'prefs-labs' => 'کەرەسەکانی تاقیگەکان',
 'prefs-user-pages' => 'پەڕە بەکارھێنەرییەکان',
@@ -1497,6 +1494,7 @@ $1",
 'recentchanges-label-minor' => 'ئەمە دەستکارییەکی بچووکە',
 'recentchanges-label-bot' => 'ئەم دەستکاریە لە لایەن بۆتەوە پێک هاتووە',
 'recentchanges-label-unpatrolled' => 'ئەم دەستکارییە ھێشتا پاس نەدراوە',
+'recentchanges-legend-newpage' => '$1 - لاپەڕەی نوێ',
 'rcnote' => "لە خوارەوەدا {{PLURAL:$1|'''۱''' گۆڕانکاری |دوایین '''$1''' گۆڕانکارییەکان}} لە دوایین {{PLURAL:$2|ڕۆژ|'''$2''' ڕۆژەوە}} ، تا $5، $4 دەبینن.",
 'rcnotefrom' => "ئەوی‌ خوارەوە گۆڕانکارییەکانە لە '''$2'''ەوە (ھەتا '''$1''' نیشاندراو).",
 'rclistfrom' => 'گۆڕانکارییە نوێکان نیشان بدە بە دەستپێکردن لە $1',
@@ -2318,9 +2316,9 @@ $1',
 'month' => 'لە مانگی (و پێشترەوە):',
 'year' => 'لە ساڵی (و پێشترەوە):',
 
-'sp-contributions-newbies' => 'تەنھا بەشدارییەکانی بەکارھێنەرە تازەکان نیشان بدە',
-'sp-contributions-newbies-sub' => 'لە بەکارھێنەرە تازەکانەوە',
-'sp-contributions-newbies-title' => 'هاوبەشیەکانی بەکارهێنەر بۆ هەژمارە نوێکان',
+'sp-contributions-newbies' => 'تەنیا بەشدارییەکانی ھەژمارە نوێکان نیشان بدە',
+'sp-contributions-newbies-sub' => 'بۆ ھەژمارە نوێکان',
+'sp-contributions-newbies-title' => 'بەشدارییەکانی بەکارھێنەر بۆ ھەژمارە نوێکان',
 'sp-contributions-blocklog' => 'لۆگی بەربەستن',
 'sp-contributions-deleted' => 'بەشدارییە سڕاوەکان',
 'sp-contributions-uploads' => 'بارکردنەکان',
@@ -2529,7 +2527,7 @@ $1',
 'cant-move-user-page' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەکانی بەکارهێنەر (جیاواز لە ژێرلاپەڕەکان).',
 'cant-move-to-user-page' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەیەک بۆ لاپەڕەی بەکارهێنەر (غەیری بۆ ژێرلاپەڕەی بەکارهێنەر).',
 'newtitle' => 'بۆ ناوی نوێی:',
-'move-watch' => 'ئەم پەڕەیە بخە ژێر چاودێری',
+'move-watch' => 'پەڕەی سەرچاوە و مەبەست بخە ژێر چاودێری',
 'movepagebtn' => 'ئەم پەڕەیە بگوازەوە',
 'pagemovedsub' => 'گواستنەوە بە سەرکەوتوویی جێبەجێ کرا',
 'movepage-moved' => "'''«$1» گوازرایەوە بۆ «$2»'''",
@@ -2809,6 +2807,7 @@ $1',
 'pageinfo-authors' => 'ژمارەی نووسەرە جیاوازەکان',
 'pageinfo-recent-edits' => 'ژمارەی دوایین دەستکارییەکان (لە $1ی ڕابردوودا)',
 'pageinfo-recent-authors' => 'ژمارەی دوایین نووسەرە جیاوازەکان',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|پۆلی شاردراوە|پۆلە شاردراوەکان}} ($1)',
 'pageinfo-templates' => 'داڕێژە{{PLURAL:$1|ی بەکارگیراو| بەکارگیراوەکان}} ($1)',
 'pageinfo-toolboxlink' => 'زانیاریی پەڕە',
 'pageinfo-redirectsto-info' => 'زانیاری',
@@ -3446,6 +3445,8 @@ $5
 'tags-display-header' => 'دیمەن لەسەر لیستەکانی گۆڕان',
 'tags-description-header' => 'پێناسەی تەواوی مەبەست',
 'tags-hitcount-header' => 'گۆڕانکاریە تاگ‌کراوەکان',
+'tags-active-yes' => 'بەڵێ',
+'tags-active-no' => 'نا',
 'tags-edit' => 'دەستکاری',
 'tags-hitcount' => '$1 {{PLURAL:$1|گۆڕان|گۆڕانکاری}}',
 
@@ -3478,6 +3479,8 @@ $5
 'htmlform-submit' => 'ناردن',
 'htmlform-reset' => 'پووچەڵکردنەوەی دەستکارییەکان',
 'htmlform-selectorother-other' => 'دیکە',
+'htmlform-no' => 'نا',
+'htmlform-yes' => 'بەڵێ',
 
 # New logging system
 'logentry-delete-delete' => '$1 پەڕەی $3ی {{GENDER:$2|سڕییەوە}}',
@@ -3538,4 +3541,7 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|سەدە|سەدە}}',
 'duration-millennia' => '$1 {{PLURAL:$1|ھەزارە|ھەزارە}}',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'باشە',
+
 );
index b86f919..0988bbf 100644 (file)
@@ -270,8 +270,6 @@ Tan-awon ang [[Special:Version|pahina sang bersyon]].',
 'ok' => 'Sige',
 'retrievedfrom' => 'Nakuha halin sa "$1"',
 'youhavenewmessages' => 'May ara ka sang $1 ($2).',
-'newmessageslink' => 'mga bag-o nga mensahe',
-'newmessagesdifflink' => 'katapusan nga pag-ilis',
 'youhavenewmessagesmulti' => 'May mga bag-o ka nga mensahe sa $1',
 'editsection' => 'bag-uhon',
 'editold' => 'bag-uhon',
index 8d040c7..f60d84a 100644 (file)
@@ -361,8 +361,6 @@ $1',
 'ok' => 'Ок',
 'retrievedfrom' => 'Менба – "$1"',
 'youhavenewmessages' => 'Янъы $1 бар ($2).',
-'newmessageslink' => 'беянатынъыз',
-'newmessagesdifflink' => 'музакере саифенъизнинъ сонъки денъиштирильмеси',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|Башкъа бир къулланыджыдан|$3 къулланыджыдан}} $1 бар. ($2)',
 'youhavenewmessagesmanyusers' => 'Бир къач къулланыджыдан $1 бар. ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|янъы беянатынъыз|янъы беянатларынъыз}}',
@@ -879,7 +877,6 @@ $3 мына бу себепни бильдирди: ''$2''",
 'preferences' => 'Сазламалар',
 'mypreferences' => 'Сазламалар',
 'prefs-edits' => 'Денъиштирмелер сайысы:',
-'prefsnologin' => 'Отурым ачмадынъыз',
 'changepassword' => 'Пароль денъиштир',
 'prefs-skin' => 'Ресимлеме',
 'skin-preview' => 'Бакъып чыкъув',
@@ -1026,6 +1023,7 @@ $3 мына бу себепни бильдирди: ''$2''",
 'recentchanges-label-minor' => 'Бу, кичик бир денъиштирме',
 'recentchanges-label-bot' => 'Бу бир ботнынъ япкъан денъиштирмеси',
 'recentchanges-label-unpatrolled' => 'Бу денъиштирме аля даа тешкерильмеген',
+'recentchanges-legend-newpage' => '$1 - янъы саифе',
 'rcnote' => "$4 $5 тарихында сонъки {{PLURAL:$2|куньде|'''$2''' куньде}} япылгъан '''{{PLURAL:$1|1|$1}}''' денъиштирме:",
 'rcnotefrom' => "'''$2''' тарихындан итибарен япылгъан денъиштирмелер ашагъыдадыр (энъ чокъ '''$1''' дане саифе косьтериле).",
 'rclistfrom' => '$1 тарихындан берли япылгъан денъиштирмелерни косьтер',
index 70138a1..aa405a5 100644 (file)
@@ -356,8 +356,6 @@ $1',
 'ok' => 'Ok',
 'retrievedfrom' => 'Menba – "$1"',
 'youhavenewmessages' => 'Yañı $1 bar ($2).',
-'newmessageslink' => 'beyanatıñız',
-'newmessagesdifflink' => 'muzakere saifeñizniñ soñki deñiştirilmesi',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|Başqa bir qullanıcıdan|$3 qullanıcıdan}} $1 bar. ($2)',
 'youhavenewmessagesmanyusers' => 'Bir qaç qullanıcıdan $1 bar. ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|yañı beyanatıñız|yañı beyanatlarıñız}}',
@@ -875,7 +873,6 @@ Vikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].',
 'preferences' => 'Sazlamalar',
 'mypreferences' => 'Sazlamalar',
 'prefs-edits' => 'Deñiştirmeler sayısı:',
-'prefsnologin' => 'Oturım açmadıñız',
 'changepassword' => 'Parol deñiştir',
 'prefs-skin' => 'Resimleme',
 'skin-preview' => 'Baqıp çıquv',
@@ -1022,6 +1019,7 @@ Eger bildirseñiz, saifelerdeki deñiştirmelerni kimniñ yapqanını köstermek
 'recentchanges-label-minor' => 'Bu, kiçik bir deñiştirme',
 'recentchanges-label-bot' => 'Bu bir botnıñ yapqan deñiştirmesi',
 'recentchanges-label-unpatrolled' => 'Bu deñiştirme alâ daa teşkerilmegen',
+'recentchanges-legend-newpage' => '$1 - yañı saife',
 'rcnote' => "$4 $5 tarihında soñki {{PLURAL:$2|künde|'''$2''' künde}} yapılğan '''{{PLURAL:$1|1|$1}}''' deñiştirme:",
 'rcnotefrom' => "'''$2''' tarihından itibaren yapılğan deñiştirmeler aşağıdadır (eñ çоq '''$1''' dane saife kösterile).",
 'rclistfrom' => '$1 tarihından berli yapılğan deñiştirmelerni köster',
index 24d20d4..c10cfcf 100644 (file)
@@ -80,7 +80,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Nejstarší_stránky', 'Staré_stránky', 'Stare_stranky' ),
        'Blankpage'                 => array( 'Prázdná_stránka' ),
        'Block'                     => array( 'Blokování', 'Blokovani', 'Blokovat_uživatele', 'Blokovat_IP', 'Blokovat_uzivatele' ),
-       'Blockme'                   => array( 'Zablokuj_mě', 'Zablokuj_me' ),
        'Booksources'               => array( 'Zdroje_knih' ),
        'BrokenRedirects'           => array( 'Přerušená_přesměrování', 'Prerusena_presmerovani' ),
        'Categories'                => array( 'Kategorie' ),
@@ -92,9 +91,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Vytvořit_účet', 'Vytvorit_ucet' ),
        'Deadendpages'              => array( 'Slepé_stránky', 'Slepe_stranky' ),
        'DeletedContributions'      => array( 'Smazané_příspěvky', 'Smazane_prispevky' ),
-       'Disambiguations'           => array( 'Rozcestníky', 'Rozcestniky' ),
        'DoubleRedirects'           => array( 'Dvojitá_přesměrování', 'Dvojita_presmerovani' ),
        'Emailuser'                 => array( 'E-mail' ),
+       'ExpandTemplates'           => array( 'Testy_šablon' ),
        'Export'                    => array( 'Exportovat_stránky' ),
        'Fewestrevisions'           => array( 'Stránky_s_nejméně_editacemi', 'Stranky_s_nejmene_editacemi', 'Stránky_s_nejmenším_počtem_editací' ),
        'FileDuplicateSearch'       => array( 'Hledání_duplicitních_souborů', 'Hledani_duplicitnich_souboru' ),
@@ -230,7 +229,8 @@ $magicWords = array(
        'img_center'                => array( '1', 'střed', 'center', 'centre' ),
        'img_framed'                => array( '1', 'rám', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'bezrámu', 'frameless' ),
-       'img_page'                  => array( '1', 'strana=$1', 'strana $1', 'page=$1', 'page $1' ),
+       'img_lang'                  => array( '1', 'jazyk=$1', 'lang=$1' ),
+       'img_page'                  => array( '1', 'strana=$1', 'strana_$1', 'page=$1', 'page $1' ),
        'img_border'                => array( '1', 'okraj', 'border' ),
        'sitename'                  => array( '1', 'NÁZEVWEBU', 'SITENAME' ),
        'ns'                        => array( '0', 'JMENNÝPROSTOR:', 'NS:' ),
@@ -282,6 +282,7 @@ $magicWords = array(
        'noindex'                   => array( '1', '__NEINDEXOVAT__', '__NOINDEX__' ),
        'staticredirect'            => array( '1', '__STATICKÉPŘESMĚROVÁNÍ__', '__STATICREDIRECT__' ),
        'protectionlevel'           => array( '1', 'ÚROVEŇZAMČENÍ', 'PROTECTIONLEVEL' ),
+       'pagesincategory_files'     => array( '0', 'soubory', 'files' ),
 );
 
 /**
@@ -637,12 +638,10 @@ $1',
 'pagetitle' => '$1 – {{SITENAME}}',
 'retrievedfrom' => 'Citováno z „$1“',
 'youhavenewmessages' => 'Máte $1 ($2).',
-'newmessageslink' => 'nové zprávy',
-'newmessagesdifflink' => 'rozdíl oproti předchozí verzi',
 'youhavenewmessagesfromusers' => 'Máte $1 od {{PLURAL:$3|jiného uživatele|$3 jiných uživatelů}} ($2).',
 'youhavenewmessagesmanyusers' => 'Máte $1 od mnoha dalších uživatelů ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|novou zprávu|nové zprávy}}',
-'newmessagesdifflinkplural' => 'poslední {{PLURAL:$1|změna|změny}}',
+'newmessageslinkplural' => '{{PLURAL:$1|novou zprávu|999=nové zprávy}}',
+'newmessagesdifflinkplural' => 'poslední {{PLURAL:$1|změna|999=změny}}',
 'youhavenewmessagesmulti' => 'Na $1 máte nové zprávy',
 'editsection' => 'editovat',
 'editold' => 'editovat',
@@ -1482,7 +1481,6 @@ Pokud na začátek dotazu přidáte ''all:'', bude se hledat všude (včetně di
 'preferences' => 'Nastavení',
 'mypreferences' => 'Nastavení',
 'prefs-edits' => 'Počet editací:',
-'prefsnologin' => 'Nejste přihlášen(a)!',
 'prefsnologintext2' => 'Pro změnu uživatelských nastavení se musíte $1.',
 'changepassword' => 'Změna hesla',
 'prefs-skin' => 'Vzhled',
@@ -1522,7 +1520,7 @@ Pokud na začátek dotazu přidáte ''all:'', bude se hledat všude (včetně di
 'prefs-help-recentchangescount' => 'Týká se posledních změn, historie stránek a protokolovacích záznamů.',
 'prefs-help-watchlist-token2' => 'Toto je tajný klíč k webovému kanálu vašich sledovaných stránek. Kdokoli, kdo bude tento klíč znát, bude moci váš seznam sledovaných stránek číst, takže ho nešiřte.
 [[Special:ResetTokens|Kliknutím sem ho můžete reinicializovat.]]',
-'savedprefs' => 'Vaše nastavení bylo uloženo.',
+'savedprefs' => 'Nastavení byla uložena.',
 'timezonelegend' => 'Časové pásmo:',
 'localtime' => 'Místní čas:',
 'timezoneuseserverdefault' => 'Použít časové pásmo wiki ($1)',
@@ -1782,6 +1780,9 @@ Vaše adresa v takovém případě není prozrazena.',
 'recentchanges-label-minor' => 'Toto je malá editace',
 'recentchanges-label-bot' => 'Tuto editaci provedl bot',
 'recentchanges-label-unpatrolled' => 'Tato změna dosud nebyla prověřena',
+'recentchanges-label-plusminus' => 'Velikost stránky se změnila o tolik bajtů',
+'recentchanges-legend-newpage' => '(vizte též [[Special:NewPages|seznam nových stránek]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => 'Níže {{plural:$1|je poslední|jsou poslední|je posledních}} <strong>$1</strong> {{plural:$1|změna|změny|změn}} za {{PLURAL:$2|poslední|poslední|posledních}} <strong>$2</strong> {{plural:$2|den|dny|dnů}} před $4, $5.',
 'rcnotefrom' => 'Níže {{PLURAL:$1|je|jsou|je}} nejvýše <b>$1</b> {{PLURAL:$1|změna|změny|změn}} od <b>$2</b>.',
 'rclistfrom' => 'Ukázat nové změny, počínaje od $1',
@@ -4286,4 +4287,21 @@ Jinak můžete využít jednoduchý formulář níže. Váš komentář bude př
 'limitreport-expansiondepth' => 'Největší hloubka expanze',
 'limitreport-expensivefunctioncount' => 'Počet náročných funkcí parseru',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Substituce šablon',
+'expand_templates_intro' => 'Tato speciální stránka vezme text a rekurzivně rozbalí všechny použité šablony.
+Také rozbalí podporované funkce parseru jako
+<code><nowiki>{{</nowiki>#language:…}}</code> a proměnné jako
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+V podstatě rozbalí prakticky všechno v dvojitých složených závorkách.',
+'expand_templates_title' => 'Název stránky kvůli kontextu pro {{FULLPAGENAME}} apod.:',
+'expand_templates_input' => 'Vstupní text:',
+'expand_templates_output' => 'Výstup',
+'expand_templates_xml_output' => 'Výstup XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Odstranit komentáře',
+'expand_templates_remove_nowiki' => 'Potlačit ve výsledku značky <nowiki>',
+'expand_templates_generate_xml' => 'Zobrazit syntaktický strom v XML',
+'expand_templates_preview' => 'Náhled',
+
 );
index 1465f5d..53ea9be 100644 (file)
@@ -278,8 +278,6 @@ $messages = array(
 'ok' => 'Jo!',
 'retrievedfrom' => 'Z "$1"',
 'youhavenewmessages' => 'Môsz $1 ($2).',
-'newmessageslink' => 'nowe wiadła',
-'newmessagesdifflink' => 'slédnô zmiana',
 'youhavenewmessagesmulti' => 'Môsz nowé klëczi: $1',
 'editsection' => 'Edicëjô',
 'editold' => 'Edicëjô',
@@ -583,7 +581,6 @@ Spróbùjë szëkbë z przëdôwkã ''all:'' dlô całowny zamkłoscë starnów
 'preferences' => 'Preferencëje',
 'mypreferences' => 'Mòje nastôwë',
 'prefs-edits' => 'Lëczba edicëjów:',
-'prefsnologin' => 'Felënk logòwóniô',
 'changepassword' => 'Zmiana parolë',
 'prefs-skin' => 'Wëzdrzatk',
 'skin-preview' => 'Pòdzérk',
index c954f6c..d08e017 100644 (file)
@@ -269,10 +269,8 @@ $messages = array(
 'pagetitle' => '$1 · {{SITENAME}}',
 'retrievedfrom' => 'поѩто иꙁ ⁖ $1 ⁖',
 'youhavenewmessages' => '$1 тєбѣ напьсанꙑ сѫтъ ($2)',
-'newmessageslink' => 'нови напьсаниꙗ',
-'newmessagesdifflink' => 'послѣдьнꙗ мѣна',
-'newmessageslinkplural' => '{{PLURAL:$1|ново напьсаниѥ|нова напьсании|новꙑ напьсаниꙗ}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|послѣдьнꙗ мѣна|послѣдьни мѣни|послѣдьн҄ь мѣнъ}}',
+'newmessageslinkplural' => '{{PLURAL:$1|ново напьсаниѥ|нова напьсании|999=новꙑ напьсаниꙗ}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|послѣдьнꙗ мѣна|послѣдьни мѣни|999=послѣдьн҄ь мѣнъ}}',
 'editsection' => 'исправи',
 'editold' => 'исправи',
 'viewsourceold' => 'страницѧ источьнъ обраꙁъ',
@@ -431,8 +429,8 @@ $messages = array(
 'rev-delundel' => 'каꙁаниѥ / съкрꙑтиѥ',
 'rev-showdeleted' => 'виждь',
 'revdelete-show-file-submit' => 'да',
-'revdelete-radio-set' => 'да',
-'revdelete-radio-unset' => 'нѣÑ\82Ñ\8a',
+'revdelete-radio-set' => 'съкрꙑто',
+'revdelete-radio-unset' => 'каê\99\81ано',
 'revdelete-log' => 'какъ съмꙑслъ :',
 'pagehist' => 'страницѧ їсторїꙗ',
 'deletedhist' => 'поничьжєна їсторїꙗ',
index 7a93e72..ff06707 100644 (file)
@@ -269,8 +269,6 @@ $messages = array(
 'ok' => 'OK',
 'retrievedfrom' => 'Çăлкуç — «$1»',
 'youhavenewmessages' => 'Сирĕн $1 пур ($2).',
-'newmessageslink' => 'çĕнĕ пĕлтерӳсем',
-'newmessagesdifflink' => 'юлашки улшăну',
 'youhavenewmessagesmulti' => '$1-та çĕнĕ пĕлтерӳсем пур.',
 'editsection' => 'тӳрлет',
 'editold' => 'тӳрлет',
@@ -575,7 +573,6 @@ $1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}|
 'preferences' => 'Ĕнерлевсем',
 'mypreferences' => 'Ман ĕнерлевсем',
 'prefs-edits' => 'Тӳрлетӳсен шучĕ:',
-'prefsnologin' => 'Эсир сайта кĕмен',
 'changepassword' => 'Пароле улăштар',
 'prefs-skin' => 'Ерешленӳ',
 'skin-preview' => 'Малтанхи курăну',
@@ -646,6 +643,7 @@ $1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}|
 'recentchanges' => 'Улшăнусем',
 'recentchanges-legend' => 'Çĕнĕ улшăнусен ĕнерлевĕ',
 'recentchanges-label-bot' => 'Ку улшăнăва бот тунă',
+'recentchanges-legend-newpage' => '$1 — çĕнĕ страница',
 'rcnote' => 'Юлашки <strong>$2</strong> кун хушшинчи <strong>$1</strong> улшăнусем. Халě пěтěмпе  <strong>{{NUMBEROFARTICLES}}</strong> статья.',
 'rclistfrom' => 'Юлашки улшăнусене $1 вăхăтран пуçласа кăтартнă',
 'rcshowhideminor' => 'пĕчĕк тӳрлетӳсене $1',
index 991d8a7..1b7fa3f 100644 (file)
@@ -33,7 +33,7 @@ $namespaceNames = array(
        NS_TEMPLATE         => 'Nodyn',
        NS_TEMPLATE_TALK    => 'Sgwrs_Nodyn',
        NS_HELP             => 'Cymorth',
-       NS_HELP_TALK        => 'Sgwrs Cymorth',
+       NS_HELP_TALK        => 'Sgwrs_Cymorth',
        NS_CATEGORY         => 'Categori',
        NS_CATEGORY_TALK    => 'Sgwrs_Categori',
 );
@@ -64,14 +64,14 @@ $magicWords = array(
        'subpagenamee'              => array( '1', 'ENWISDUDALENE', 'SUBPAGENAMEE' ),
        'talkpagename'              => array( '1', 'ENWTUDALENSGWRS', 'TALKPAGENAME' ),
        'talkpagenamee'             => array( '1', 'ENWTUDALENSGWRSE', 'TALKPAGENAMEE' ),
-       'img_thumbnail'             => array( '1', 'ewin bawd', 'bawd', 'mân-lun', 'thumbnail', 'thumb' ),
+       'img_thumbnail'             => array( '1', 'ewin_bawd', 'bawd', 'mân-lun', 'thumbnail', 'thumb' ),
        'img_manualthumb'           => array( '1', 'mân-lun=$1', 'bawd=$1', 'thumbnail=$1', 'thumb=$1' ),
        'img_right'                 => array( '1', 'de', 'right' ),
        'img_left'                  => array( '1', 'chwith', 'left' ),
        'img_none'                  => array( '1', 'dim', 'none' ),
        'img_center'                => array( '1', 'canol', 'center', 'centre' ),
-       'img_page'                  => array( '1', 'tudalen=$1', 'tudalen $1', 'page=$1', 'page $1' ),
-       'img_upright'               => array( '1', 'unionsyth', 'unionsyth=$1', 'unionsyth $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_page'                  => array( '1', 'tudalen=$1', 'tudalen_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'unionsyth', 'unionsyth=$1', 'unionsyth_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_sub'                   => array( '1', 'is', 'sub' ),
        'img_super'                 => array( '1', 'uwch', 'super', 'sup' ),
        'img_top'                   => array( '1', 'brig', 'top' ),
@@ -390,8 +390,6 @@ $1',
 'ok' => 'Iawn',
 'retrievedfrom' => 'Wedi dod o "$1"',
 'youhavenewmessages' => 'Mae gennych chi $1 ($2).',
-'newmessageslink' => 'Neges(eueon) newydd',
-'newmessagesdifflink' => 'y newid diweddaraf',
 'youhavenewmessagesfromusers' => 'Mae gennych $1 oddi wrth {{PLURAL:$3||ddefnyddiwr arall|$2 ddefnyddiwr arall|$3 defnyddiwr arall|$3 defnyddiwr arall|$3 defnyddiwr arall}} ($2).',
 'youhavenewmessagesmanyusers' => 'Mae gennych $1 oddi wrth lu o ddefnyddwyr eraill ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|neges newydd|neges newydd|negeseuon newydd}}',
@@ -523,7 +521,8 @@ Y rheswm a roddwyd gan y gweinyddwr a roddodd y ffeil dan glo yw "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Teitl annilys o\'r enw "$3" yn y parth "$2"',
 'invalidtitle-unknownnamespace' => 'Teitl annilys ag iddi\'r rhif parth anhysbys $1 a\'r enw "$2"',
 'exception-nologin' => 'Nid ydych wedi mewngofnodi',
-'exception-nologin-text' => "Rhaid mewngofnodi i'r wici er mwyn gweld y dudalen neu gyflawni'r weithred.",
+'exception-nologin-text' => "[[Special:Userlogin|Mewngofnodwch]] er mwyn gweld y dudalen neu gyflawni'r weithred.",
+'exception-nologin-text-manual' => "Mae angen $1 er mwyn gweld y dudalen neu gyflawni'r weithred.",
 
 # Virus scanner
 'virus-badscanner' => "Cyfluniad gwael: sganiwr firysau anhysbys: ''$1''",
@@ -1227,7 +1226,7 @@ Cofiwch y gall mynegeion Google o gynnwys {{SITENAME}} fod ar ei hôl hi.",
 'preferences' => 'Dewisiadau',
 'mypreferences' => 'Dewisiadau',
 'prefs-edits' => 'Nifer y golygiadau:',
-'prefsnologin' => 'Nid ydych wedi mewngofnodi',
+'prefsnologintext2' => 'Mae angen $1 er mwyn gosod eich dewisiadau personol.',
 'changepassword' => 'Newid y cyfrinair',
 'prefs-skin' => 'Gwedd',
 'skin-preview' => 'Rhagolwg',
@@ -1526,6 +1525,9 @@ Mae'r wybodaeth hon ar gael i'r cyhoedd.",
 'recentchanges-label-minor' => 'Mân olygiad',
 'recentchanges-label-bot' => 'Golygwyd gan fot',
 'recentchanges-label-unpatrolled' => "Nid yw'r golygiad hwn wedi derbyn ymweliad patrôl eto",
+'recentchanges-label-plusminus' => "Newidiodd maint y dudalen o'r nifer hwn o feitiau",
+'recentchanges-legend-newpage' => '(gweler hefyd [[Special:NewPages|restr y tudalennau newydd]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "Isod mae'r '''$1''' newid diweddaraf yn ystod y {{PLURAL:$2|diwrnod|diwrnod|deuddydd|tridiau|'''$2''' diwrnod|'''$2''' diwrnod}} diwethaf, hyd at $5, $4.",
 'rcnotefrom' => "Isod rhestrir pob newid ers '''$2''' (hyd at '''$1''' ohonynt).",
 'rclistfrom' => 'Dangos newidiadau newydd, gan ddechrau ers $1',
@@ -2245,7 +2247,7 @@ Cysylltu â\'r golygydd:
 e-bost: $PAGEEDITOR_EMAIL
 wici: $PAGEEDITOR_WIKI
 
-Os bydd mwy o drin a thrafod ar y dudalen cyn i chi ymweld â hi, ni chewch ragor o negeseuon hysbysu. Nodwn bod modd i chi ailosod y fflagiau hysbysu ar eich rhestr wylio, ar gyfer y tudalennau rydych yn eu gwylio.
+Os bydd mwy o drin a thrafod ar y dudalen cyn i chi ymweld â hi tra eich bod wedi mewngofnodi, ni chewch ragor o negeseuon hysbysu. Nodwn bod modd i chi ailosod y fflagiau hysbysu ar eich rhestr wylio, ar gyfer y tudalennau rydych yn eu gwylio.
 
              Sustem hysbysu {{SITENAME}}
 
@@ -3744,9 +3746,9 @@ Defnydd:
 
 # Special:SpecialPages
 'specialpages' => 'Tudalennau arbennig',
+'specialpages-note-top' => 'Allwedd',
 'specialpages-note' => '* Tudalennau arbennig ar gael i bawb.
-* <span class="mw-specialpagerestricted">Tudalennau arbennig cyfyngedig.</span>
-* <span class="mw-specialpagecached">Tudalennau arbennig wedi eu cynhyrchu o\'r celc (gallant fod heb eu harfer rhagor).</span>',
+* <span class="mw-specialpagerestricted">Tudalennau arbennig cyfyngedig.</span>',
 'specialpages-group-maintenance' => 'Adroddiadau cynnal a chadw',
 'specialpages-group-other' => 'Eraill',
 'specialpages-group-login' => 'Mewngofnodi / creu cyfrif',
@@ -3958,4 +3960,13 @@ Defnydd:
 'limitreport-expansiondepth' => 'Uchafswm dyfnder yr ehangu',
 'limitreport-expensivefunctioncount' => "Nifer y ffwythiannau dosrannu sy'n dreth ar adnoddau",
 
+# Special:ExpandTemplates
+'expandtemplates' => "Ehangu'r nodynnau",
+'expand_templates_input' => 'Cynnwys y mewnbwn:',
+'expand_templates_output' => 'Y canlyniad',
+'expand_templates_xml_output' => 'Yr allbwn XML',
+'expand_templates_ok' => 'Iawn',
+'expand_templates_remove_comments' => 'Peidio â dangos sylwadau',
+'expand_templates_preview' => 'Rhagolwg',
+
 );
index ebe2fd6..175e3c8 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Ældste_sider' ),
        'Blankpage'                 => array( 'Tom_Side' ),
        'Block'                     => array( 'Bloker_adresse' ),
-       'Blockme'                   => array( 'Proxyspærring' ),
        'Booksources'               => array( 'ISBN-søgning' ),
        'BrokenRedirects'           => array( 'Defekte_omdirigeringer' ),
        'Categories'                => array( 'Kategorier' ),
@@ -99,7 +98,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Opret_konto' ),
        'Deadendpages'              => array( 'Blindgydesider' ),
        'DeletedContributions'      => array( 'Slettede_bidrag' ),
-       'Disambiguations'           => array( 'Flertydige_sider' ),
        'DoubleRedirects'           => array( 'Dobbelte_omdirigeringer' ),
        'Emailuser'                 => array( 'E-mail' ),
        'Export'                    => array( 'Eksporter' ),
@@ -363,7 +361,7 @@ $messages = array(
 'vector-action-move' => 'Flyt',
 'vector-action-protect' => 'Beskyt',
 'vector-action-undelete' => 'Gendan',
-'vector-action-unprotect' => 'Ændre beskyttelse',
+'vector-action-unprotect' => 'Ændr beskyttelse',
 'vector-simplesearch-preference' => 'Aktivér forenklet søgefelt (kun Vector-udseendet)',
 'vector-view-create' => 'Opret',
 'vector-view-edit' => 'Redigér',
@@ -400,9 +398,9 @@ $messages = array(
 'undelete_short' => 'Fortryd sletning af {{PLURAL:$1|én version|$1 versioner}}',
 'viewdeleted_short' => 'Vis {{PLURAL:$1|en slettet redigering|$1 slettede redigeringer}}',
 'protect' => 'Beskyt',
-'protect_change' => 'ændre',
+'protect_change' => 'ændr',
 'protectthispage' => 'Beskyt side',
-'unprotect' => 'Ændre beskyttelse',
+'unprotect' => 'Ændr beskyttelse',
 'unprotectthispage' => 'Ændre beskyttelsen af denne side',
 'newpage' => 'Ny side',
 'talkpage' => 'Diskussion',
@@ -469,12 +467,10 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Hentet fra "$1"',
 'youhavenewmessages' => 'Du har $1 ($2).',
-'newmessageslink' => 'nye beskeder',
-'newmessagesdifflink' => 'ændringer siden sidste visning',
 'youhavenewmessagesfromusers' => 'Du har $1 fra {{PLURAL:$3|en anden bruger| $3 brugere}} ($2).',
 'youhavenewmessagesmanyusers' => 'Du har $1 fra mange brugere ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|en ny besked|nye beskeder}}',
-'newmessagesdifflinkplural' => 'seneste {{PLURAL:$1|ændring|ændringer}}',
+'newmessageslinkplural' => '{{PLURAL:$1|en ny besked|999=nye beskeder}}',
+'newmessagesdifflinkplural' => 'seneste {{PLURAL:$1|ændring|999=ændringer}}',
 'youhavenewmessagesmulti' => 'Du har nye beskeder på $1',
 'editsection' => 'redigér',
 'editold' => 'redigér',
@@ -582,7 +578,7 @@ Forespørgsel: $2',
 'viewsourcetext' => 'Du kan se og kopiere kildekoden til siden:',
 'viewyourtext' => "Du kan se og kopiere kildekoden for '''dine redigeringer''' til denne side:",
 'protectedinterface' => 'Denne side indeholder teksten i brugergrænsefladen til softwaren på denne wiki, og er beskyttet for at forhindre misbrug.
-Hvis du vil tilføje eller ændre oversættelser til alle wiki-websteder, brug venligst [//translatewiki.net/ translatewiki.net], MediaWiki lokalisering projektet.',
+Hvis du vil tilføje eller ændre oversættelser for alle wiki-websteder, så brug venligst [//translatewiki.net/ translatewiki.net], projektet for oversættelse af MediaWiki.',
 'editinginterface' => "'''Advarsel:''' Du redigerer en side som bruges i programmets grænseflade. Ændringer på denne side vil påvirke udseendet af grænsefladen for andre brugere af denne wiki.
 For at tilføje eller ændre oversættelser på alle wikier bedes du benytte [//translatewiki.net/ translatewiki.net], projektet for oversættelse af MediaWiki.",
 'cascadeprotected' => 'Denne side er skrivebeskyttet, da den er indeholdt i nedenstående {{PLURAL:$1|side|sider}}, som er skrivebeskyttet med tilvalg af "nedarvende sidebeskyttelse":
@@ -602,7 +598,8 @@ Administratoren, som skrivebeskyttede den, gav følgende begrundelse: "$3".',
 'invalidtitle-knownnamespace' => 'Ugyldig titel med navnerummet "$2" og teksten "$3"',
 'invalidtitle-unknownnamespace' => 'Ugyldig titel med ukendt navnerum nummer $1 og tekst "$2"',
 'exception-nologin' => 'Ikke logget på',
-'exception-nologin-text' => 'Denne side eller handling kræver, at du er logget på denne wiki.',
+'exception-nologin-text' => 'Du skal [[Special:Userlogin|logge på]] for at få adgang til denne side eller handling.',
+'exception-nologin-text-manual' => 'Du skal $1 for at få adgang til denne side eller handling.',
 
 # Virus scanner
 'virus-badscanner' => "Konfigurationsfejl: ukendt virus-scanner: ''$1''",
@@ -778,7 +775,7 @@ Du har muligvis allerede skiftet din adgangskode eller anmodet om en ny midlerti
 'passwordreset-username' => 'Brugernavn:',
 'passwordreset-domain' => 'Domæne:',
 'passwordreset-capture' => 'Se den resulterende e-mail?',
-'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-capture-help' => 'Hvis du krydser dette felt af, vil e-mailen (med den midlertidige adgangskode) blive vist til dig i tillæg til at blive sendt til brugeren.',
 'passwordreset-email' => 'E-mailadresse:',
 'passwordreset-emailtitle' => 'Kontooplysninger på {{SITENAME}}',
 '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-mailadresse:
@@ -901,7 +898,7 @@ Angiv venligst alle de ovenstående detaljer ved eventuelle henvendelser.',
 'loginreqlink' => 'logge på',
 'loginreqpagetext' => 'Du skal $1 for at se andre sider.',
 'accmailtitle' => 'Adgangskode sendt.',
-'accmailtext' => "En tilfældigt dannet adgangskode for [[User talk:$1|$1]] er sendt til $2. Den kan ændres på siden ''[[Special:ChangePassword|skift adgangskode]]'', når du logger ind.",
+'accmailtext' => "En tilfældigt dannet adgangskode for [[User talk:$1|$1]] er sendt til $2. Den kan ændres på siden ''[[Special:ChangePassword|skift adgangskode]]'', når du logger .",
 'newarticle' => '(Ny)',
 'newarticletext' => "Du har fulgt en henvisning til en side som endnu ikke findes.
 For at oprette siden skal du begynde at skrive i boksen nedenfor
@@ -1001,7 +998,7 @@ Den seneste logpost vises nedenfor:",
 'template-protected' => '(skrivebeskyttet)',
 'template-semiprotected' => '(delvist beskyttet)',
 'hiddencategories' => 'Denne side er i {{PLURAL:$1|en skjult kategori|$1 skjulte kategorier}}:',
-'edittools' => '<!-- Denne tekst vises under formularen „Ændre“ samt "Upload". -->',
+'edittools' => '<!-- Denne tekst vises under formularen "Redigér" samt "Læg en fil op". -->',
 'nocreatetext' => 'Serveren har begrænset oprettelse af nye sider. Bestående sider kan ændres eller [[Special:UserLogin|logge på]].',
 'nocreate-loggedin' => 'Du har ikke rettigheder til at oprette nye sider.',
 'sectioneditnotsupported-title' => 'Afsnitsredigering understøttes ikke',
@@ -1155,7 +1152,7 @@ Andre administratorer på {{SITENAME}} vil fortsat være i stand til at se det s
 'revdelete-hide-comment' => 'Redigeringssammendrag',
 'revdelete-hide-user' => 'Brugerens brugernavn/IP-adrsse',
 'revdelete-hide-restricted' => 'Skjul også informationen for administratorer',
-'revdelete-radio-same' => '(ikke ændre)',
+'revdelete-radio-same' => '(ingen ændring)',
 'revdelete-radio-set' => 'Skjult',
 'revdelete-radio-unset' => 'Synligt',
 'revdelete-suppress' => 'Skjul også informationen for administratorer',
@@ -1168,7 +1165,7 @@ $1",
 'logdelete-success' => "'''Synlighed ændret med success.'''",
 'logdelete-failure' => "'''Kunne ikke ændre logsynligheden.'''
 $1",
-'revdel-restore' => 'Ã\86ndre synlighed',
+'revdel-restore' => 'ændre synlighed',
 'revdel-restore-deleted' => 'slettede redigeringer',
 'revdel-restore-visible' => 'synlige ændringer',
 'pagehist' => 'Sidehistorik',
@@ -1314,7 +1311,7 @@ Du kan prøve at bruge \"all:\" som præfiks for at søge i alt indhold (inkl. d
 'preferences' => 'Indstillinger',
 'mypreferences' => 'Indstillinger',
 'prefs-edits' => 'Antal redigeringer:',
-'prefsnologin' => 'Ikke logget på',
+'prefsnologintext2' => 'Du skal $1 for at ændre brugerindstillinger.',
 'changepassword' => 'Skift adgangskode',
 'prefs-skin' => 'Udseende',
 'skin-preview' => 'Forhåndsvisning',
@@ -1448,9 +1445,9 @@ Hvis du vælger at oplyse dit navn, vil det blive brugt til at tilskrive dig dit
 * Et umarkeret felt betyder at brugeren ikke er medlem af gruppen.
 * En * betyder at du ikke kan fravælge gruppen, når den først er tilføjet og omvendt.',
 'userrights-reason' => 'Årsag:',
-'userrights-no-interwiki' => 'Du kan ikke ændre brugerrettigheder på andre wikier.',
+'userrights-no-interwiki' => 'Du har ikke tilladelse til at redigere brugerrettigheder på andre wikier.',
 'userrights-nodatabase' => 'Databasen $1 eksisterer ikke lokalt.',
-'userrights-nologin' => 'Du skal [[Special:UserLogin|logge på]] med en administrativ konto, før du kan ændre brugerettigheder.',
+'userrights-nologin' => 'Du skal [[Special:UserLogin|logge på]] med en administrativ konto, før du kan ændre brugerrettigheder.',
 'userrights-notallowed' => 'Du har ikke tilladelse til at tilføje eller fjerne brugerrettigheder.',
 'userrights-changeable-col' => 'Redigerbare grupper',
 'userrights-unchangeable-col' => 'Uredigerbare grupper',
@@ -1614,6 +1611,8 @@ Vær venlig at gennemse og bekræft dine ændringer.',
 'recentchanges-label-minor' => 'Dette er en mindre ændring',
 'recentchanges-label-bot' => 'Denne redigering blev udført af en bot',
 'recentchanges-label-unpatrolled' => 'Denne redigering er endnu ikke blevet patruljeret',
+'recentchanges-label-plusminus' => 'Størrelsen på siden blev ændret med dette antal bytes',
+'recentchanges-legend-newpage' => '(se også [[Special:NewPages|listen over nye sider]])',
 'rcnote' => "Herunder ses {{PLURAL:$1|'''1''' ændring|de sidste '''$1''' ændringer}} fra {{PLURAL:$2|i dag|de sidste '''$2''' dage}} fra den $4, kl. $5.",
 'rcnotefrom' => "Nedenfor er op til '''$1''' ændringer siden '''$2''' vist.",
 'rclistfrom' => 'Vis nye ændringer startende fra $1',
@@ -1710,7 +1709,7 @@ Brug en henvisning af en de følgende typer for at bruge en fil på en side:
 'largefileserver' => 'Filen er større end den på serveren indstillede maksimale størrelse.',
 'emptyfile' => 'Filen du lagde op lader til at være tom. Det kan skyldes en slåfejl i filnavnet. Kontroller om du virkelig ønsker at lægge denne fil op.',
 'windows-nonascii-filename' => 'Denne wiki understøtter ikke filnavne, der indeholder specialtegn.',
-'fileexists' => 'En fil med det navn findes allerede, tjek venligst [[:$1]] om du er sikker på du vil ændre den.
+'fileexists' => 'En fil med det navn findes allerede, tjek venligst <strong>[[:$1]]</strong> om du er sikker på du vil ændre den.
 [[$1|thumb]]',
 'filepageexists' => 'Siden med beskrivelse af denne fil er allerede oprettet på <strong>[[:$1]]</strong>, men der eksisterer ikke en fil med dette navn.
 Den beskrivelse du kan angive nedenfor vil derfor ikke blive brugt.
@@ -2467,7 +2466,7 @@ Se [[Special:ProtectedPages|listen over beskyttede sider]] for listen over sideb
 'pagesize' => '(bytes)',
 
 # Restrictions (nouns)
-'restriction-edit' => 'ændre',
+'restriction-edit' => 'Redigér',
 'restriction-move' => 'flytte',
 'restriction-create' => 'oprette',
 'restriction-upload' => 'oplægge',
@@ -2627,7 +2626,7 @@ Angiv en konkret begrundelse herunder (for eksempel med angivelse af sider der h
 Se [[Special:BlockList|blokeringslisten]] for alle blokeringer.',
 'ipb-blockingself' => 'Du er ved at blokere dig selv! Er du sikker på, du vil gøre det?',
 'ipb-confirmhideuser' => 'Du er ved at blokere en bruger med "skjul bruger" aktiveret. Dette vil skjule brugerens navn på alle lister og logposter. Er du sikker på du vil gøre det?',
-'ipb-edit-dropdown' => 'Ændre spærreårsager',
+'ipb-edit-dropdown' => 'Rediger blokeringsbegrundelser',
 'ipb-unblock-addr' => 'Ophæv blokeringen af "$1"',
 'ipb-unblock' => 'Frigive IP-adresse/bruger',
 'ipb-blocklist' => 'Vis alle blokeringer som er i kraft',
@@ -2665,7 +2664,7 @@ Se [[Special:BlockList|blokeringslisten]] for alle blokeringer.',
 'ipblocklist-no-results' => 'Den angivene IP-addresse eller brugernavn er ikke blokeret.',
 'blocklink' => 'bloker',
 'unblocklink' => 'ophæv blokering',
-'change-blocklink' => 'ændr blokering',
+'change-blocklink' => 'ændring af blokering',
 'contribslink' => 'bidrag',
 'emaillink' => 'send e-mail',
 'autoblocker' => 'Du er automatisk blokeret, fordi du deler IP-adresse med "[[User:$1|$1]]".
@@ -2693,7 +2692,7 @@ Se [[Special:BlockList|blokeringslisten]] for den nuværende liste med aktuelle
 'ipb_expiry_temp' => 'Brugernavnet kan kun skjules ved permanente blokeringer.',
 'ipb_hide_invalid' => 'Kan ikke skjule denne konto; den kan have for mange redigeringer.',
 'ipb_already_blocked' => '„$1“ er allerede blokeret',
-'ipb-needreblock' => '$1 er allerede blokkeret. Vil du ændre indstillingene?',
+'ipb-needreblock' => '$1 er allerede blokeret. Vil du ændre indstillingerne?',
 'ipb-otherblocks-header' => 'Yderligere {{PLURAL:$1|blokering|blokeringer}}',
 'unblock-hideuser' => 'Du kan ikke ophæve denne brugers blokering, da brugernavnet er blevet skjult.',
 'ipb_cant_unblock' => 'Fejl: Spærre-ID $1 ikke fundet. Spærringen er allerede ophævet.',
@@ -3685,10 +3684,10 @@ Denne bekræftelseskode vil udløbe den $4.',
 'scarytranscludetoolong' => "[URL'en er for lang]",
 
 # Delete conflict
-'deletedwhileediting' => 'Bemærk: Det blev forsøgt at slette denne side, efter at du var begyndt, at ændre den!
+'deletedwhileediting' => "'''Advarsel:''' Denne side er blevet slettet efter du begyndte at redigere den!
 Kig i [{{fullurl:Special:Log|type=delete&page=}}{{FULLPAGENAMEE}} slette-loggen],
-hvorfor siden blev slettet. Hvis du gemmer siden bliver den oprettet igen.',
-'confirmrecreate' => "Bruger [[User:$1|$1]] ([[User talk:$1|Diskussion]]) har slettet denne side, efter at du begyndte at ændre den. Begrundelsen lyder:
+hvorfor siden blev slettet. Hvis du gemmer siden bliver den oprettet igen.",
+'confirmrecreate' => "Brugeren [[User:$1|$1]] ([[User talk:$1|Diskussion]]) har slettet denne side, efter at du begyndte at redigere den. Begrundelsen lyder:
 : ''$2''
 Bekræft venligst, at du virkelig vil oprette denne side igen.",
 'confirmrecreate-noreason' => '[[User:$1|$1]] ([[User talk:$1|diskussion]]) har slettet denne side, efter du begyndte at redigere. Bekræft venligst, at du gerne vil genoprette siden.',
@@ -3774,7 +3773,7 @@ Du kan også [[Special:EditWatchlist|bruge standard editoren]].',
 'duplicate-defaultsort' => 'Advarsel: Standardsorteringsnøglen "$2" tilsidesætter den tidligere sorteringsnøgle "$1".',
 
 # Special:Version
-'version' => 'Version',
+'version' => 'Information om MediaWiki',
 'version-extensions' => 'Installerede udvidelser',
 'version-specialpages' => 'Specialsider',
 'version-parserhooks' => 'Oversætter-funktioner',
@@ -3790,7 +3789,7 @@ Du kan også [[Special:EditWatchlist|bruge standard editoren]].',
 'version-hook-subscribedby' => 'Brugt af',
 'version-version' => '(Version $1)',
 'version-license' => 'Licens',
-'version-poweredby-credits' => "Denne wiki er drevet af '''[https://www.mediawiki.org/ MediaWiki ]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Denne wiki er drevet af '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'andre',
 'version-poweredby-translators' => 'translatewiki.net oversættere',
 'version-credits-summary' => 'Vi vil gerne anerkende følgende personer for deres bidrag til [[Special:Version|MediaWiki]].',
@@ -3831,6 +3830,7 @@ Du skulle have modtaget [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopi af GNU General
 
 # Special:SpecialPages
 'specialpages' => 'Specialsider',
+'specialpages-note-top' => 'Forklaring',
 'specialpages-note' => '* Normale specialsider.
 * <span class="mw-specialpagerestricted">Specialsider med begrænset adgang.</span>',
 'specialpages-group-maintenance' => 'Vedligeholdelsesside',
@@ -4042,4 +4042,21 @@ Ellers kan du bruge den enkle formular nedenfor. Din kommentar vil blive tilføj
 'limitreport-expansiondepth' => 'Største udvidelsesdybde',
 'limitreport-expensivefunctioncount' => 'Antal dyre parserfunktioner',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Udfold skabeloner',
+'expand_templates_intro' => 'Denne specialside tager en tekst og udfolder alle benyttede skabeloner rekursivt.
+Den udfolder også understøttede parserfunktioner så som
+<code><nowiki>{{</nowiki>#language:…}}</code> og variabler så som 
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>
+Faktisk udfolder den stort set alt i dobbelte tuborgklammer.',
+'expand_templates_title' => 'Sammenhængstitel, for {{FULLPAGENAME}} osv.:',
+'expand_templates_input' => 'Inputtekst:',
+'expand_templates_output' => 'Resultat',
+'expand_templates_xml_output' => 'XML-kode',
+'expand_templates_ok' => 'Udfold',
+'expand_templates_remove_comments' => 'Fjern kommentarer',
+'expand_templates_remove_nowiki' => 'Undertryk <nowiki>-tags i resultatet',
+'expand_templates_generate_xml' => 'Vis analysetræ som XML',
+'expand_templates_preview' => 'Forhåndsvisning',
+
 );
index 9154213..b2f8694 100644 (file)
@@ -111,12 +111,12 @@ $namespaceGenderAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'Aktive_Benutzer' ),
        'Allmessages'               => array( 'MediaWiki-Systemnachrichten', 'Systemnachrichten' ),
+       'AllMyUploads'              => array( 'Alle_meine_Dateien' ),
        'Allpages'                  => array( 'Alle_Seiten' ),
        'Ancientpages'              => array( 'Älteste_Seiten' ),
        'Badtitle'                  => array( 'Ungültiger_Seitenname' ),
        'Blankpage'                 => array( 'Leerseite', 'Leere_Seite' ),
        'Block'                     => array( 'Sperren' ),
-       'Blockme'                   => array( 'Proxy-Sperre' ),
        'Booksources'               => array( 'ISBN-Suche' ),
        'BrokenRedirects'           => array( 'Defekte_Weiterleitungen', 'Kaputte_Weiterleitungen' ),
        'Categories'                => array( 'Kategorien' ),
@@ -128,10 +128,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Benutzerkonto_anlegen' ),
        'Deadendpages'              => array( 'Sackgassenseiten' ),
        'DeletedContributions'      => array( 'Gelöschte_Beiträge' ),
-       'Disambiguations'           => array( 'Begriffsklärungsverweise' ),
        'DoubleRedirects'           => array( 'Doppelte_Weiterleitungen' ),
        'EditWatchlist'             => array( 'Beobachtungsliste_bearbeiten' ),
        'Emailuser'                 => array( 'E-Mail_senden', 'Mailen', 'E-Mail' ),
+       'ExpandTemplates'           => array( 'Vorlagen_expandieren' ),
        'Export'                    => array( 'Exportieren' ),
        'Fewestrevisions'           => array( 'Wenigstbearbeitete_Seiten' ),
        'FileDuplicateSearch'       => array( 'Dateiduplikatsuche', 'Datei-Duplikat-Suche' ),
@@ -176,10 +176,12 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Geschützte_Seiten' ),
        'Protectedtitles'           => array( 'Geschützte_Titel', 'Gesperrte_Titel' ),
        'Randompage'                => array( 'Zufällige_Seite' ),
+       'RandomInCategory'          => array( 'Zufällige_Seite_in_Kategorie' ),
        'Randomredirect'            => array( 'Zufällige_Weiterleitung' ),
        'Recentchanges'             => array( 'Letzte_Änderungen' ),
        'Recentchangeslinked'       => array( 'Änderungen_an_verlinkten_Seiten' ),
        'Redirect'                  => array( 'Weiterleitung' ),
+       'ResetTokens'               => array( 'Tokens_zurücksetzen' ),
        'Revisiondelete'            => array( 'Versionslöschung' ),
        'Search'                    => array( 'Suche' ),
        'Shortpages'                => array( 'Kürzeste_Seiten' ),
@@ -278,6 +280,7 @@ $magicWords = array(
        'img_center'                => array( '1', 'zentriert', 'center', 'centre' ),
        'img_framed'                => array( '1', 'gerahmt', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'rahmenlos', 'frameless' ),
+       'img_lang'                  => array( '1', 'sprache=$1', 'lang=$1' ),
        'img_page'                  => array( '1', 'seite=$1', 'seite_$1', 'page=$1', 'page $1' ),
        'img_upright'               => array( '1', 'hochkant', 'hochkant=$1', 'hochkant_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'rand', 'border' ),
@@ -318,6 +321,7 @@ $magicWords = array(
        'revisionyear'              => array( '1', 'REVISIONSJAHR', 'VERSIONSJAHR', 'REVISIONYEAR' ),
        'revisiontimestamp'         => array( '1', 'REVISIONSZEITSTEMPEL', 'VERSIONSZEITSTEMPEL', 'REVISIONTIMESTAMP' ),
        'revisionuser'              => array( '1', 'REVISIONSBENUTZER', 'VERSIONSBENUTZER', 'REVISIONUSER' ),
+       'revisionsize'              => array( '1', 'VERSIONSGRÖSSE', 'REVISIONSIZE' ),
        'fullurl'                   => array( '0', 'VOLLSTÄNDIGE_URL:', 'FULLURL:' ),
        'fullurle'                  => array( '0', 'VOLLSTÄNDIGE_URL_C:', 'FULLURLE:' ),
        'canonicalurl'              => array( '0', 'KANONISCHE_URL:', 'CANONICALURL:' ),
@@ -694,12 +698,10 @@ Siehe die [[Special:Version|Versionsseite]]',
 'pagetitle' => '$1 – {{SITENAME}}',
 'retrievedfrom' => 'Von „$1“',
 'youhavenewmessages' => 'Du hast $1 ($2).',
-'newmessageslink' => 'neue Nachrichten',
-'newmessagesdifflink' => 'Letzte Änderung',
 'youhavenewmessagesfromusers' => 'Du hast $1 von {{PLURAL:$3|einem anderen Benutzer|$3 Benutzern}} ($2).',
 'youhavenewmessagesmanyusers' => 'Du hast $1 von vielen Benutzern ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|eine neue Nachricht|neue Nachrichten}}',
-'newmessagesdifflinkplural' => 'letzte {{PLURAL:$1|Änderung|Änderungen}}',
+'newmessageslinkplural' => '{{PLURAL:$1|eine neue Nachricht|999=neue Nachrichten}}',
+'newmessagesdifflinkplural' => 'letzte {{PLURAL:$1|Änderung|999=Änderungen}}',
 'youhavenewmessagesmulti' => 'Du hast neue Nachrichten: $1',
 'editsection' => 'Bearbeiten',
 'editold' => 'Bearbeiten',
@@ -1542,7 +1544,6 @@ Einzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'preferences' => 'Einstellungen',
 'mypreferences' => 'Einstellungen',
 'prefs-edits' => 'Anzahl der Bearbeitungen:',
-'prefsnologin' => 'Nicht angemeldet',
 'prefsnologintext2' => 'Du musst dich $1, um Benutzereinstellungen festzulegen.',
 'changepassword' => 'Passwort ändern',
 'prefs-skin' => 'Benutzeroberfläche',
@@ -1844,6 +1845,9 @@ Diese Information ist öffentlich.',
 'recentchanges-label-minor' => 'Kleine Änderung',
 'recentchanges-label-bot' => 'Änderung durch einen Bot',
 'recentchanges-label-unpatrolled' => 'Nicht-kontrollierte Änderung',
+'recentchanges-label-plusminus' => 'Die geänderte Seitengröße (Anzahl in Bytes)',
+'recentchanges-legend-newpage' => '(siehe auch die [[Special:NewPages|Liste neuer Seiten]])',
+'recentchanges-legend-plusminus' => "''(±123)''",
 'rcnote' => "{{PLURAL:$1|'''1''' Änderung|'''$1''' Änderungen}} in den {{PLURAL:$2|letzten 24 Stunden|letzten '''$2''' Tagen}}.
 Stand: $4, $5 Uhr.",
 'rcnotefrom' => "Angezeigt werden die Änderungen seit '''$2''' (max. '''$1''' Einträge).",
@@ -4304,7 +4308,7 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'rotate-comment' => 'Bild um $1 {{PLURAL:$1|Grad}} im Uhrzeigersinn gedreht',
 
 # Limit report
-'limitreport-title' => 'Parser-Profiling-Daten:',
+'limitreport-title' => 'Profilingdaten des Parsers:',
 'limitreport-cputime' => 'CPU-Zeit-Nutzung',
 'limitreport-cputime-value' => '{{PLURAL:$1|Eine Sekunde|$1 Sekunden}}',
 'limitreport-walltime' => 'Echtzeitnutzung',
@@ -4321,4 +4325,21 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'limitreport-expansiondepth-value' => '$1/$2',
 'limitreport-expensivefunctioncount' => 'Anzahl aufwändiger Parserfunktionen',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Vorlagen expandieren',
+'expand_templates_intro' => 'Auf dieser Spezialseite kann Text eingegeben werden. Alle enthaltenen Vorlagen werden dabei rekursiv expandiert.
+Auch Parserfunktionen wie
+<code><nowiki>{{</nowiki>#language:…}}</code> und Variablen wie
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code> werden ausgewertet –
+faktisch alles was in doppelten geschweiften Klammern enthalten ist.',
+'expand_templates_title' => 'Kontexttitel, für {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Eingabefeld:',
+'expand_templates_output' => 'Ergebnis',
+'expand_templates_xml_output' => 'XML-Ausgabe',
+'expand_templates_ok' => 'Okay',
+'expand_templates_remove_comments' => 'Kommentare entfernen',
+'expand_templates_remove_nowiki' => '<nowiki>-Tags in der Ausgabe unterdrücken',
+'expand_templates_generate_xml' => 'XML-Parser-Baum zeigen',
+'expand_templates_preview' => 'Vorschau',
+
 );
index 93b5fbd..9fe6e3b 100644 (file)
 
 $namespaceNames = array(
        NS_MEDIA            => 'Medya',
-       NS_SPECIAL          => 'Xısusi',
-       NS_TALK             => 'Mesac',
+       NS_SPECIAL          => 'Bağse',
+       NS_TALK             => 'Vaten',
        NS_USER             => 'Karber',
-       NS_USER_TALK        => 'Karber_mesac',
-       NS_PROJECT_TALK     => '$1_mesac',
+       NS_USER_TALK        => 'Karber_vaten',
+       NS_PROJECT_TALK     => '$1_vaten',
        NS_FILE             => 'Dosya',
-       NS_FILE_TALK        => 'Dosya_mesac',
+       NS_FILE_TALK        => 'Dosya_vaten',
        NS_MEDIAWIKI        => 'MediaWiki',
-       NS_MEDIAWIKI_TALK   => 'MediaWiki_mesac',
+       NS_MEDIAWIKI_TALK   => 'MediaWiki_vaten',
        NS_TEMPLATE         => 'Şablon',
-       NS_TEMPLATE_TALK    => 'Şablon_mesac',
-       NS_HELP             => 'Peşti',
-       NS_HELP_TALK        => 'Peşti_mesac',
-       NS_CATEGORY         => 'Kategoriye',
-       NS_CATEGORY_TALK    => 'Kategoriye_mesac',
+       NS_TEMPLATE_TALK    => 'Şablon_vaten',
+       NS_HELP             => 'Desteg',
+       NS_HELP_TALK        => 'Desteg_vaten',
+       NS_CATEGORY         => 'Kategori',
+       NS_CATEGORY_TALK    => 'Kategori_vaten',
 );
 
 $namespaceAliases = array(
+       'Xısusi'               => NS_SPECIAL,
        'Werênayış'            => NS_TALK,
+       'Mesac'                => NS_TALK,
        'Karber_werênayış'     => NS_USER_TALK,
+       'Karber_mesac'         => NS_USER_TALK,
        '$1_werênayış'         => NS_PROJECT_TALK,
+       '$1_mesac'             => NS_PROJECT_TALK,
        'Dosya_werênayış'      => NS_FILE_TALK,
+       'Dosya_mesac'          => NS_FILE_TALK,
        'MediaWiki_werênayış'  => NS_MEDIAWIKI_TALK,
+       'MediaWiki_mesac'      => NS_MEDIAWIKI_TALK,
        'Şablon_werênayış'     => NS_TEMPLATE_TALK,
+       'Şablon_mesac'         => NS_TEMPLATE_TALK,
        'Desteg'               => NS_HELP,
        'Desteg_werênayış'     => NS_HELP_TALK,
+       'Peşti'                => NS_HELP,
+       'Peşti_mesac'          => NS_HELP_TALK,
        'Peşti_werênayış'      => NS_HELP_TALK,
        'Kategori'             => NS_CATEGORY,
        'Kategori_werênayış'   => NS_CATEGORY_TALK,
+       'Kategoriye'           => NS_CATEGORY,
+       'Kategoriye_mesac'     => NS_CATEGORY_TALK,
        'Kategoriye_werênayış' => NS_CATEGORY_TALK,
 );
 
 $specialPageAliases = array(
-       'Activeusers'               => array( 'KarberéAktivi', 'AktivKarberi' ),
+       'Activeusers'               => array( 'KarberéAktivi' ),
        'Allmessages'               => array( 'MesaciPéro' ),
-       'Allpages'                  => array( 'PeleyPéro' ),
-       'Ancientpages'              => array( 'PeleyKehani' ),
-       'Badtitle'                  => array( 'SernameyoXırab' ),
+       'AllMyUploads'              => array( 'DosyeyMı' ),
+       'Allpages'                  => array( 'PeriPéro' ),
+       'Ancientpages'              => array( 'PeréKehani' ),
+       'Badtitle'                  => array( 'SernameyoXirab' ),
        'Blankpage'                 => array( 'PeréVengi' ),
-       'Block'                     => array( 'Bloqe', 'BloqeIP', 'BloqeyéKarber' ),
-       'Blockme'                   => array( 'BloqeyéMe' ),
-       'Booksources'               => array( 'KıtabeÇıme' ),
-       'BrokenRedirects'           => array( 'HeténayışoXırab' ),
-       'Categories'                => array( 'Kategoriyan' ),
-       'ChangeEmail'               => array( 'EpostaVırnayış' ),
-       'ChangePassword'            => array( 'ParolaBıvırné', 'ParolaResetke' ),
-       'ComparePages'              => array( 'PeraPéverke' ),
-       'Confirmemail'              => array( 'EpostayAraştke' ),
+       'Block'                     => array( 'Bloke', 'BlokeIP', 'BlokeyéKarberi' ),
+       'Booksources'               => array( 'ÇımeyéKıtabi' ),
+       'BrokenRedirects'           => array( 'HetenayışoXırab' ),
+       'Categories'                => array( 'Kategoriy' ),
+       'ChangeEmail'               => array( 'EpostaVurnayış' ),
+       'ChangePassword'            => array( 'ParolaBıvırn', 'ParolaResetk' ),
+       'ComparePages'              => array( 'PeraAteberd' ),
+       'Confirmemail'              => array( 'EpostaAraştk' ),
        'Contributions'             => array( 'Dekerdışi' ),
-       'CreateAccount'             => array( 'HesabVırazé' ),
-       'Deadendpages'              => array( 'PeraBıgiré' ),
-       'DeletedContributions'      => array( 'DekerdışékeBesterneyayé' ),
-       'Disambiguations'           => array( 'Arézekerdış' ),
-       'DoubleRedirects'           => array( 'HetanayışoDılet' ),
-       'EditWatchlist'             => array( 'ListeyaSeyrkerdışiVırnayış' ),
+       'CreateAccount'             => array( 'HesabVıraz' ),
+       'Deadendpages'              => array( 'PeréMerdey' ),
+       'DeletedContributions'      => array( 'DekerdışékBesterneyayé' ),
+       'DoubleRedirects'           => array( 'HetenayışoDilet' ),
+       'EditWatchlist'             => array( 'VırnayışanéListeyaTemaşek' ),
        'Emailuser'                 => array( 'EpostayaKarberi' ),
-       'Export'                    => array( 'Ateberde' ),
-       'Fewestrevisions'           => array( 'TewrtaynRewizyon' ),
-       'FileDuplicateSearch'       => array( 'KopyaydosyaCıgeyrayış', 'DıletdosyaCıgeyrayış' ),
-       'Filepath'                  => array( 'RayaDosya', 'HerunaDosya', 'CayêDosya' ),
-       'Import'                    => array( 'Azeredé', 'Atewrke' ),
-       'Invalidateemail'           => array( 'EpostaAraştkerdışiBıterkné' ),
-       'BlockList'                 => array( 'ListeyéBloqan', 'IPBloqi', 'Blokqeyé_IP' ),
-       'LinkSearch'                => array( 'GreCıgeyrayış' ),
-       'Listadmins'                => array( 'Listeyaİdarekaran' ),
+       'ExpandTemplates'           => array( 'ŞablonaHerake' ),
+       'Export'                    => array( 'Ateberd' ),
+       'Fewestrevisions'           => array( 'TewrtaynRewizyoni' ),
+       'FileDuplicateSearch'       => array( 'KopyadosyaCigérayış', 'DiletdosyaCigérayış' ),
+       'Filepath'                  => array( 'RayaDosya', 'CayDosya' ),
+       'Import'                    => array( 'Azerek' ),
+       'Invalidateemail'           => array( 'EpostayaBetale' ),
+       'BlockList'                 => array( 'ListeyaBloki', 'ListeyaBlokan', 'ListeyaBlokeyéIPi' ),
+       'LinkSearch'                => array( 'GireCıgeyrayış' ),
+       'Listadmins'                => array( 'ListeyaHeténkaran' ),
        'Listbots'                  => array( 'ListeyaBotan' ),
-       'Listfiles'                 => array( 'ListeyaDosyayan', 'DosyayaListeke', 'ListeyéResiman' ),
-       'Listgrouprights'           => array( 'ListeyaHeqandéGruban', 'HeqéGrubdeKarberan' ),
+       'Listfiles'                 => array( 'ListeyDosyayan', 'DosyayaListek', 'ListeyResiman' ),
+       'Listgrouprights'           => array( 'ListeyaHeqanéGruban', 'HeqéGrubéKarberan' ),
        'Listredirects'             => array( 'ListeyaArézekerdışan' ),
-       'Listusers'                 => array( 'ListeyaKarberan', 'KarberaListeke' ),
-       'Lockdb'                    => array( 'DBKilitke' ),
+       'Listusers'                 => array( 'ListeyaKarberan', 'KarberaListek' ),
+       'Lockdb'                    => array( 'DBKilitk' ),
        'Log'                       => array( 'Qeyd', 'Qeydi' ),
        'Lonelypages'               => array( 'PeréBéwayıri' ),
        'Longpages'                 => array( 'PeréDergi' ),
@@ -124,6 +135,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'PerékeStaryayé' ),
        'Protectedtitles'           => array( 'SernameyékeStaryayé' ),
        'Randompage'                => array( 'Raştameye', 'PelayakeRaştamé' ),
+       'RandomInCategory'          => array( 'KategoriyaXoseri' ),
        'Randomredirect'            => array( 'HetenayışoRaştameye' ),
        'Recentchanges'             => array( 'VırnayışéPeyéni' ),
        'Recentchangeslinked'       => array( 'GreyéVırnayışéPeyénan' ),
@@ -140,7 +152,7 @@ $specialPageAliases = array(
        'Uncategorizedpages'        => array( 'PeleyékeKategoriyanébiyé' ),
        'Uncategorizedtemplates'    => array( 'ŞablonékeKategoriyanébiyé' ),
        'Undelete'                  => array( 'Peyserbiya' ),
-       'Unlockdb'                  => array( 'DBKılitiAke' ),
+       'Unlockdb'                  => array( 'DBKılitiAk' ),
        'Unusedcategories'          => array( 'KategoriyayékeNékariyayé' ),
        'Unusedimages'              => array( 'DosyeyékeNékariyayé' ),
        'Unusedtemplates'           => array( 'ŞablonékeNékariyayé' ),
@@ -362,6 +374,7 @@ $messages = array(
 'tog-noconvertlink' => 'Greyê sernami çerx kerdışi bıqefılne',
 'tog-norollbackdiff' => 'Peyserardışi ra dıme ferqi caverde',
 'tog-useeditwarning' => 'Wexto ke mı yew pela nizami be vurnayışanê nêqeydbiyayeyan caverdê, hay be mı ser de',
+'tog-prefershttps' => 'Ronışten akerden de  greyo itimadın bıkarne',
 
 'underline-always' => 'Tım',
 'underline-never' => 'Qet',
@@ -483,15 +496,15 @@ $messages = array(
 
 # Vector skin
 'vector-action-addsection' => 'Mewzu vıraze',
-'vector-action-delete' => 'Bestere',
-'vector-action-move' => 'Beré',
+'vector-action-delete' => 'Bestern',
+'vector-action-move' => 'Ber',
 'vector-action-protect' => 'Star ke',
 'vector-action-undelete' => 'Esterıtışi peyser bıgê',
 'vector-action-unprotect' => 'Starkerdışi bıvurne',
 'vector-simplesearch-preference' => 'Çuweya cı geyreyış de rehater aktiv ke (Tenya vector skin de)',
 'vector-view-create' => 'İycad ke',
 'vector-view-edit' => 'Timar ke',
-'vector-view-history' => 'Veréni bıvin',
+'vector-view-history' => 'Verénan bıvin',
 'vector-view-view' => 'Buwan',
 'vector-view-viewsource' => 'Çımi bıvin',
 'actions' => 'Hereketi',
@@ -510,11 +523,11 @@ $messages = array(
 'history' => 'Verora perer',
 'history_short' => 'Verén',
 'updatedmarker' => 'cıkewtena mına peyêne ra dıme biyo rocane',
-'printableversion' => 'Asayışê çapkerdışi',
+'printableversion' => 'Versiyona Nusnayışi',
 'permalink' => 'Gıreyo jûqere',
 'print' => 'Nusten ke',
 'view' => 'Bıvin',
-'edit' => 'Bıvurnên',
+'edit' => 'Timar ke',
 'create' => 'İycad ke',
 'editthispage' => 'Ena pele bıvurne',
 'create-this-page' => 'Na pele bınuse',
@@ -570,8 +583,8 @@ $1',
 'copyright' => 'Zerrekacı $1 bındı not biya.',
 'copyrightpage' => '{{ns:project}}:Heqa telifi',
 'currentevents' => 'Veng u vac',
-'currentevents-url' => 'Project:Veng u vac',
-'disclaimers' => 'Redê mesuliyeti',
+'currentevents-url' => 'Project:Rocani hadisey',
+'disclaimers' => 'Reddiya mesuliyeti',
 'disclaimerpage' => 'Project:Reddê mesuliyetê bıngey',
 'edithelp' => 'Peştdariya vurnayışi',
 'helppage' => 'Help:Zerrek',
@@ -597,12 +610,10 @@ $1',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => '"$1" ra ard',
 'youhavenewmessages' => 'To rê $1 esto ($2).',
-'newmessageslink' => 'mesacê şıma',
-'newmessagesdifflink' => 'vurnayışo peyên',
 'youhavenewmessagesfromusers' => 'Zey $1 ra {{PLURAL:$3|zewbi karber|$3 karberi}} ($2) esto.',
 'youhavenewmessagesmanyusers' => '$1 ra tay karberi ($2) dı estê.',
-'newmessageslinkplural' => '{{PLURAL:$1|yew mesac|mesacê newey}}',
-'newmessagesdifflinkplural' => 'peyni {{PLURAL:$1|vurnayış|vurnayışi}}',
+'newmessageslinkplural' => '{{PLURAL:$1|yew mesaco newe|999=mesacê newey}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|vırnayışa|999=vırnayışé}} peyéni',
 'youhavenewmessagesmulti' => '$1 mesaco newe esto',
 'editsection' => 'bıvurne',
 'editold' => 'bıvurne',
@@ -627,7 +638,7 @@ $1',
 'page-atom-feed' => '"$1" Cıresnayışê atomi',
 'feed-atom' => 'Atom',
 'feed-rss' => 'RSS',
-'red-link-title' => '$1 (çınîya)',
+'red-link-title' => '$1 (çınya)',
 'sort-descending' => 'Ratnayışê qemeyayışi',
 'sort-ascending' => 'Ratnayışê Zeydnayışi',
 
@@ -639,7 +650,7 @@ $1',
 'nstab-project' => 'Pera proci',
 'nstab-image' => 'Dosya',
 'nstab-mediawiki' => 'Mesac',
-'nstab-template' => 'Tewre',
+'nstab-template' => 'Şablon',
 'nstab-help' => 'Pela peşti',
 'nstab-category' => 'Kategori',
 
@@ -656,6 +667,8 @@ Seba lista pelanê xasanê vêrdeyan reca kena: [[Special:SpecialPages|{{int:spe
 # General errors
 'error' => 'Ğeta',
 'databaseerror' => 'Ğetay ardoği',
+'databaseerror-text' => 'Tabanda malumati de ğırabiya persayışi bi
+Na nusteber  zew ğırabin asınena.',
 'databaseerror-query' => 'Perskerdış:$1',
 'databaseerror-function' => 'Fonksiyon: $1',
 'databaseerror-error' => 'Xırab: $1',
@@ -729,7 +742,7 @@ 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' => 'Şı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.',
+'exception-nologin-text' => 'Na pera ya zi na karkerdışi de  na wiki de [[Special:Userlogin|cıkewtış]] icab keno.',
 
 # Virus scanner
 'virus-badscanner' => "Eyaro şaş: no virus-cıgerayox nêzanyeno: ''$1''",
@@ -774,13 +787,14 @@ Wexta ke verhafızayê cıgerayoxê şıma pak beno no benate de taye peli de he
 'nologinlink' => 'Yew hesab ake',
 'createaccount' => 'Hesab vıraze',
 'gotaccount' => "Hesabê şıma esto? '''$1'''.",
-'gotaccountlink' => 'Cı kewe',
+'gotaccountlink' => 'Dekewtış',
 'userlogin-resetlink' => 'Melumatê cıkewtışi xo vira kerdê?',
-'userlogin-resetpassword-link' => 'To parola ke ğo vira?',
+'userlogin-resetpassword-link' => 'Şıma parola ke ğo vira?',
 'helplogin-url' => 'Help:Qeydbiyayış',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Desteg be qeydbiyayış ra]]',
 'userlogin-createanother' => 'Zewbi hesab vıraz',
 'createacct-join' => 'Cêr melumatê xo cı ke',
+'createacct-another-join' => 'Malumata hesabdé ğoye newi dekeré cér.',
 'createacct-emailrequired' => 'Adresa e-postey',
 'createacct-emailoptional' => 'Adresa e-postey (mecburi niya)',
 'createacct-email-ph' => 'Adresa e-posteyê xo cıkewe',
@@ -937,6 +951,7 @@ Parola vêrdiye: $2',
 'resettokens-legend' => 'Reset fi ye',
 'resettokens-tokens' => 'Beli kerdeni:',
 'resettokens-token-label' => '$1 (weziyeta newki: $2)',
+'resettokens-watchlist-token' => 'Qandé [[Special:Watchlist|Per vırnayışa lista da temaşan]]  web wari kerdeni (Atom/RSS)',
 'resettokens-done' => 'Reset fi',
 'resettokens-resetbutton' => 'Reset fiyayış weçin',
 
@@ -1427,7 +1442,7 @@ Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mı
 'preferences' => 'Tercihi',
 'mypreferences' => 'Tercihi',
 'prefs-edits' => 'Amarê vurnayışan:',
-'prefsnologin' => 'Şıma cıkewtış nêvıraşto',
+'prefsnologintext2' => 'Reca kem  sazé tercihané karberi $1.',
 'changepassword' => 'Parola bıvurne',
 'prefs-skin' => 'Çerme',
 'skin-preview' => 'Verasayış',
@@ -1639,7 +1654,12 @@ Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de moc
 'right-editusercssjs' => 'CSS u dosyanê JSiê karberanê binan sero bıgureye',
 'right-editusercss' => 'Dosyanê CSSiê karberanê binan sero bıgureye',
 'right-edituserjs' => 'Dosyanê JSiê karberanê binan sero bıgureye',
+'right-editmyusercss' => 'CSS dosyaya karberinda ğo timar ke',
+'right-editmyuserjs' => 'JavaScript dosyaya karberinda ğo timar ke',
 'right-viewmywatchlist' => 'Lista seyr de xo bıvin',
+'right-editmywatchlist' => 'Listeya temaşiya karberinda ğo timar ke.Not  tay karfinayışi na icazet nédeyo zi pera dekeno de.',
+'right-viewmyprivateinfo' => 'Bağse malumatané ğo bıasne (e-posta, nameyo raştay vs.)',
+'right-editmyprivateinfo' => 'Bağse malumatané ğo bıvırn (e-posta, nameyo raştay vs.)',
 'right-editmyoptions' => 'Tercihané ğo bıvırn',
 'right-rollback' => 'Lez/herbi vurnayışanê karberê peyêni tekrar bıke, oyo ke yew be yew pelê sero gureyao',
 'right-markbotedits' => 'Vurnayışanê peyd ameyan, vurnayışê boti deye nışan kerê',
@@ -1720,6 +1740,9 @@ Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de moc
 'recentchanges-label-minor' => 'Eno yew vurnayışo qıckeko',
 'recentchanges-label-bot' => 'Yew boti xo het ra no vurnayış vıraşto',
 'recentchanges-label-unpatrolled' => 'Eno vurnayış hewna dewriya nêbiyo',
+'recentchanges-label-plusminus' => 'Ebata na perer ebatta na nımra de vırneya',
+'recentchanges-legend-newpage' => '(Zewbi bıvin [[Special:NewPages|Listeya peran de newan]])',
+'recentchanges-legend-plusminus' => "''(±123)''",
 'rcnote' => "Bıni dı  {{PLURAL:$2|roc|'''$2''' rocan}}  ra {{PLURAL:$1|'''1''' vurnayış|'''$1''' vurnayışi}} éyé cér de yé , $5 ra hetana $4.",
 'rcnotefrom' => "Cêr de '''$2''' ra nata vurnayışiyê asenê (tewr vêşi <b> '''$1'''</b> asenê).",
 'rclistfrom' => '$1 ra tepya vırnayışané newan bıasne',
@@ -1733,7 +1756,7 @@ Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de moc
 'diff' => 'ferq',
 'hist' => 'verên',
 'hide' => 'Bınımne',
-'show' => 'Bımocne',
+'show' => 'Bıasne',
 'minoreditletter' => 'q',
 'newpageletter' => 'N',
 'boteditletter' => 'b',
@@ -2117,6 +2140,8 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 # Random page in category
 'randomincategory' => 'Ğoseri pera kategoriya',
 'randomincategory-invalidcategory' => '"$1" namedı kategori çıniya',
+'randomincategory-nopages' => 'Kategori da [[:Category:$1|$1]] de qet  per çıniya.',
+'randomincategory-selectcategory' => 'Pera ke cıra raşt ameye kategori do bıgéri yo: $1 $2.',
 'randomincategory-selectcategory-submit' => 'Şo',
 
 # Random redirect
@@ -2149,6 +2174,8 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 'pageswithprop-text' => 'Na per pimanen pera kena liste.',
 'pageswithprop-prop' => 'Nameyo xısusi:',
 'pageswithprop-submit' => 'Şo',
+'pageswithprop-prophidden-long' => 'Erca metinda derger nımneya ($1)',
+'pageswithprop-prophidden-binary' => 'Erca dıdıyına ($1) nımneyé',
 
 'doubleredirects' => 'Hetenayışê dıletıni',
 'doubleredirectstext' => 'no pel pelê ray motışani liste keno.
@@ -2222,13 +2249,14 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'listusers' => 'Listeyê Karberan',
 'listusers-editsonly' => 'Teyna karberan bimucne ke ey nuştê',
 'listusers-creationsort' => 'goreyê wextê vıraştışi rêz ker',
+'listusers-desc' => 'Kemeyen rézed ratn',
 'usereditcount' => '$1 {{PLURAL:$1|vurnayîş|vurnayîşî}}',
 'usercreated' => '$2 de $1 {{GENDER:$3|viraziya}}',
-'newpages' => 'Pe newey',
+'newpages' => 'Pe newey',
 'newpages-username' => 'Nameyê karberi:',
 'ancientpages' => 'Wesiqeyê ke vurnayışê ciyê peyeni tewr kehani',
-'move' => 'Beré',
-'movethispage' => 'Na perer beré',
+'move' => 'Ber',
+'movethispage' => 'Na perer ber',
 'unusedimagestext' => 'Enê dosyey estê, feqet zerrey yew pele de wedardey niyê.
 Xo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gırê bê, u wına şenê verba gurênayışo feal de tiya hewna lista bê.',
 'unusedcategoriestext' => 'kategoriyê cêrıni bıbo zi çı nêşuxulyena.',
@@ -2435,14 +2463,12 @@ Ena deme ra, ma qe vurnayışan ser ena pele tı haberdar keni.',
 'enotif_anon_editor' => 'karbero anonim $1',
 'enotif_body' => 'Erciyayê $WATCHINGUSERNAME,
 
-{{SITENAME}} keyepel de no $PAGETITLE pelo sernameyın re $PAGEEDITDATE no tarix de $PAGEEDITOR no karberi $CHANGEDORCREATED. şıma eşkeni bıresi halê no peli re $PAGETITLE_URL na adresi ra.
+$PAGEINTRO $NEWPAGE
 
-$NEWPAGE
+eniya timaroği: $PAGESUMMARY $PAGEMINOREDIT
 
-beyanatê karber o ke vurnayiş kerdo: $PAGESUMMARY $PAGEMINOREDIT
-
-cıresayişê karber o ke vurnayiş kerdo:
-e-posta: $PAGEEDITOR_EMAIL
+Timaroğiya irtibat:
+mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
 no pel o ke behs beno heta ziyaret kerdışê yewna heli, mesajê vuriyayişi nêşawiyeno.
@@ -2584,7 +2610,7 @@ Tı eşkeno seviyeye kılit kerdışi bıvurno, feqat tı nıeşken "cascading p
 
 # Restrictions (nouns)
 'restriction-edit' => 'Bıvurne',
-'restriction-move' => 'Beré',
+'restriction-move' => 'Ber',
 'restriction-create' => 'İycad ke',
 'restriction-upload' => 'Bar ke',
 
@@ -2777,7 +2803,7 @@ 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' => 'a ke',
+'unblocklink' => 'bloqi hewad',
 'change-blocklink' => 'kılitkerdışi bıvurne',
 'contribslink' => 'iştıraqi',
 'emaillink' => 'e-poste bırışe',
@@ -2912,7 +2938,7 @@ Yewna name bınus.',
 'movenosubpage' => 'pelê bınıni yê no peli çino.',
 'movereason' => 'Sebeb:',
 'revertmove' => 'peyser bia',
-'delete_and_move' => 'Besterné uw beré',
+'delete_and_move' => 'Bestern u ber',
 'delete_and_move_text' => '==gani hewn a bıbıo/bıesteriyo==
 
 " no [[:$1]]" name de yew pel ca ra esto. şıma wazeni pê hewn a kerdışê ey peli vurnayişê nameyi bıkeri?',
@@ -3063,16 +3089,16 @@ dosyaya emaneti vindbiyo',
 'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit test suite',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Pelaya karberi',
+'tooltip-pt-userpage' => 'Pera şımaya karberi',
 'tooltip-pt-anonuserpage' => 'pelê karberê IPyi',
-'tooltip-pt-mytalk' => 'Pela ya Qıse vatışi',
+'tooltip-pt-mytalk' => 'Pera şımaya vaten',
 'tooltip-pt-anontalk' => 'vurnayiş ê ke no Ipadresi ra biyo muneqeşa bıker',
 'tooltip-pt-preferences' => 'Tercihê to',
 '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ışê şıma rê dewato; labelê, no zeruri niyo',
-'tooltip-pt-logout' => 'Bıveciye',
+'tooltip-pt-logout' => 'Vıcyayış',
 'tooltip-ca-talk' => 'Zerrey pela sero werênayış',
 'tooltip-ca-edit' => 'Tı şenay na pele bıvurnê.
 Kerem ke, qeydkerdış ra ver gocega verqayti bıxebetne.',
@@ -3091,7 +3117,7 @@ Kerem ke, qeydkerdış ra ver gocega verqayti bıxebetne.',
 'tooltip-search-go' => 'Ebe nê namey tami şo yew pela ke esta',
 'tooltip-search-fulltext' => 'Nê  metni peran dı cı geyre',
 'tooltip-p-logo' => 'Pela seri bıvênên',
-'tooltip-n-mainpage' => 'Şo pela seri',
+'tooltip-n-mainpage' => 'Şo pera seri',
 'tooltip-n-mainpage-description' => 'Şo pela seri',
 'tooltip-n-portal' => 'Heqa projey de, kes çı şeno bıkero, çıçiyo koti deyo',
 'tooltip-n-currentevents' => 'Vurnayışanê peyênan de melumatê pey bıvêne',
@@ -3133,6 +3159,7 @@ Kerem ke, qeydkerdış ra ver gocega verqayti bıxebetne.',
 Tı eşkeno yew sebeb bınus.',
 'tooltip-preferences-save' => 'Terciha qeyd ke',
 'tooltip-summary' => 'Yew xulasaya kilm binuse',
+'interlanguage-link-title' => '$1 - $2',
 
 # Scripts
 'common.js' => '/* Any JavaScript here will be loaded for all users on every page load. */',
@@ -4133,6 +4160,7 @@ enê programiya piya [{{SERVER}}{{SCRIPTPATH}}/COPYING jew kopyay lisans dê GNU
 # Special:Redirect
 'redirect' => "Hetenayışa dosyay, karberi yana  rewizyona ID'i",
 'redirect-legend' => 'Hetenayışa dosya yana pela',
+'redirect-summary' => "Na pera bağsi şıma bena dosya (cıré namey dosya deyeno), zu per (zu ID'A rewizyoni deyaya) yana cıré zu pera karberi beno herın (kamiya karberiya amoriyen). Karkerden: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], yana  [[{{#Special:Redirect}}/user/101]].",
 'redirect-submit' => 'Şo',
 'redirect-lookup' => 'Bewni',
 'redirect-value' => 'Erc:',
@@ -4154,9 +4182,9 @@ enê programiya piya [{{SERVER}}{{SCRIPTPATH}}/COPYING jew kopyay lisans dê GNU
 
 # Special:SpecialPages
 'specialpages' => 'Pelê xısusiy',
-'specialpages-note' => '* Xısusi pelaya normal
-* <span class="mw-specialpagerestricted">Xısusi peleyê keı rê ray nê deyaya.</span>
-* <strong class="mw-specialpagerestricted">Peleya xısusiya ke grota verhefıza.</strong>',
+'specialpages-note-top' => 'Kıtabek',
+'specialpages-note' => '*Normal pera bağsi.
+* <span class="mw-specialpagerestricted">Peré bağseyé ke groté ver hafıza.</span>',
 'specialpages-group-maintenance' => 'Raporê tepıştışi',
 'specialpages-group-other' => 'Pelê xasiyê bini',
 'specialpages-group-login' => 'Cı kewe / hesab vıraze',
@@ -4368,4 +4396,21 @@ satır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.
 'limitreport-expansiondepth' => 'Tewr veşi herayina dergbiyayışi',
 'limitreport-expensivefunctioncount' => 'Amoriya fonksiyonde vay agozni',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'şablonan hêra ker',
+'expand_templates_intro' => 'Na pela xususi metın geno u şablonê ke tedeyê reyna reyna hêra keno.
+U hem zi nê fonksiyonan hêra keno
+<nowiki>{{</nowiki>#language:…}}</code>, u zey nê parametreyan
+<nowiki>{{</nowiki>CURRENTDAY}}</code>
+Eneri Medya wiki sera xo keno.',
+'expand_templates_title' => 'Sernameyê weziyeti, misal qandê {{FULLPAGENAME}}.:',
+'expand_templates_input' => 'sernameyê cıkewtışi:',
+'expand_templates_output' => 'netice',
+'expand_templates_xml_output' => 'XML vıraştış',
+'expand_templates_ok' => 'temam',
+'expand_templates_remove_comments' => 'Tefsiran wedare',
+'expand_templates_remove_nowiki' => 'neticeyan de etiketê <nowiki> yan çap bıker',
+'expand_templates_generate_xml' => 'Dara XML arêdayoği bımocne',
+'expand_templates_preview' => 'Verqayt',
+
 );
index 625948d..a0ba333 100644 (file)
@@ -62,7 +62,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Nejstarše_boki' ),
        'Blankpage'                 => array( 'Prozny_bok' ),
        'Block'                     => array( 'Blokěrowaś' ),
-       'Blockme'                   => array( 'Proksy-blokěrowanje' ),
        'Booksources'               => array( 'Pytaś_pó_ISBN' ),
        'BrokenRedirects'           => array( 'Njefunkcioněrujuce_dalejpósrědnjenja' ),
        'Categories'                => array( 'Kategorije' ),
@@ -72,7 +71,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Wužywarske_konto_załožyś' ),
        'Deadendpages'              => array( 'Boki_kenž_su_slěpe_gasy' ),
        'DeletedContributions'      => array( 'Wulašowane_pśinoski' ),
-       'Disambiguations'           => array( 'Wótkaze_ku_rozjasnjenju_wopśimjeśa' ),
        'DoubleRedirects'           => array( 'Dwójne_dalejpósrědnjenja' ),
        'Emailuser'                 => array( 'E-mail' ),
        'Export'                    => array( 'Eksportěrowaś' ),
@@ -168,12 +166,12 @@ $messages = array(
 'tog-hidepatrolled' => 'Doglědowane změny w aktualnych změnach schowaś',
 'tog-newpageshidepatrolled' => 'Doglědowane boki z lisćiny nowych bokow schowaś',
 'tog-extendwatchlist' => 'Wobglědowańku wócyniś, aby wšě změny pokazał, nic jano nejnowše',
-'tog-usenewrc' => 'Kupkowe změny pó boku w aktualnych změnach a wobglědowanjach (trjeba JavaScript)',
+'tog-usenewrc' => 'Kupkowe změny pó boku w aktualnych změnach a wobglědowanjach',
 'tog-numberheadings' => 'Nadpisma awtomatiski numerěrowaś',
-'tog-showtoolbar' => 'Wobźěłańsku lejstwu pokazaś (pótrjebujo JavaScript)',
-'tog-editondblclick' => 'Boki z dwójnym kliknjenim wobźěłaś (pótrjebujo JavaScript)',
+'tog-showtoolbar' => 'Wobźěłowańsku rědku pokazaś',
+'tog-editondblclick' => 'Boki z dwójnym kliknjenim wobźěłaś',
 'tog-editsection' => 'Wobźěłanje wótstawkow pśez wótkaze [wobźěłaś] zmóžniś',
-'tog-editsectiononrightclick' => 'Wobźěłanje wótstawkow pśez kliknjenje z pšaweju tastu myški zmóžniś (JavaScript)',
+'tog-editsectiononrightclick' => 'Wobźěłowanje wótrězkow pśez kliknjenje z pšaweju tastu myški zmóžniś',
 'tog-showtoc' => 'Wopśimjeśe pokazaś, jolic ma bok wěcej nježli 3 nadpisma',
 'tog-rememberpassword' => 'Z toś tym wobglědowakom pśizjawjony wóstaś (za maksimalnje $1 {{PLURAL:$1|źeń|dnja|dny|dnjow}})',
 'tog-watchcreations' => 'Boki, kótarež napórajom a dataje, kótarež nagrawam, wobglědowaś',
@@ -191,7 +189,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Licbu wobglědujucych wužywarjow pokazaś',
 'tog-oldsig' => 'Eksistěrujuca signatura:',
 'tog-fancysig' => 'Ze signaturu kaž z wikitekstom wobchadaś (bźez awtomatiskego wótkaza)',
-'tog-uselivepreview' => 'Live-pśeglěd wužywaś (JavaScript) (eksperimentelnje)',
+'tog-uselivepreview' => 'Live-pśeglěd wužywaś (eksperimentelnje)',
 'tog-forceeditsummary' => 'Warnowaś, gaž pśi składowanju zespominanje felujo',
 'tog-watchlisthideown' => 'Móje změny na wobglědowańskej lisćinje schowaś',
 'tog-watchlisthidebots' => 'Změny awtomatiskich programow (botow) na wobglědowańskej lisćinje schowaś',
@@ -204,6 +202,7 @@ $messages = array(
 'tog-showhiddencats' => 'Schowane kategorije pokazaś',
 'tog-norollbackdiff' => 'Rozdźěl pó slědkstajenju zanjechaś',
 'tog-useeditwarning' => 'Warnowaś, gaž bok spušća se z njeskłaźonymi změnami',
+'tog-prefershttps' => 'Pśi pśizjawjenju pśecej wěsty zwisk wužywaś',
 
 'underline-always' => 'pśecej',
 'underline-never' => 'žednje',
@@ -267,6 +266,18 @@ $messages = array(
 'oct' => 'okt',
 'nov' => 'now',
 'dec' => 'dec',
+'january-date' => '$1. januara',
+'february-date' => '$1. februara',
+'march-date' => '$1. měrca',
+'april-date' => '$1. apryla',
+'may-date' => '$1. maja',
+'june-date' => '$1. junija',
+'july-date' => '$1. julija',
+'august-date' => '$1. awgusta',
+'september-date' => '$1. septembra',
+'october-date' => '$1. oktobra',
+'november-date' => '$1. nowembra',
+'december-date' => '$1. decembra',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Kategorija|Kategoriji|Kategorije}}',
@@ -292,7 +303,7 @@ $messages = array(
 'newwindow' => '(se wótcynijo w nowem woknje)',
 'cancel' => 'Pśetergnuś',
 'moredotdotdot' => 'Wěcej…',
-'morenotlisted' => 'Dalšne njepódane...',
+'morenotlisted' => 'Toś ta lisćina njejo dopołna.',
 'mypage' => 'Bok',
 'mytalk' => 'Diskusija',
 'anontalk' => 'Diskusija z toś teju IP',
@@ -348,6 +359,7 @@ $messages = array(
 'create-this-page' => 'Bok wuźěłaś',
 'delete' => 'Wulašowaś',
 'deletethispage' => 'Toś ten bok wulašowaś',
+'undeletethispage' => 'Toś ten bok wótnowiś',
 'undelete_short' => '{{PLURAL:$1|1 wersiju|$1 wersiji|$1 wersije}} nawrośiś.',
 'viewdeleted_short' => '{{PLURAL:$1|jadnu wulašowanu změnu|$1 wulašowanej změnje|$1 wulašowane změny|$1 wulašowanych změnow}} se woglědaś',
 'protect' => 'Šćitaś',
@@ -364,7 +376,7 @@ $messages = array(
 'articlepage' => 'Nastawk',
 'talk' => 'Diskusija',
 'views' => 'Naglědy',
-'toolbox' => 'Pomocne srědki',
+'toolbox' => 'Rědy',
 'userpage' => 'Wužywarski bok pokazaś',
 'projectpage' => 'Projektowy bok pokazaś',
 'imagepage' => 'Datajowy bok se woglědaś',
@@ -394,7 +406,7 @@ $1',
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'Wó {{GRAMMAR:lokatiw|{{SITENAME}}}}',
 'aboutpage' => 'Project:Wó_{{GRAMMAR:lokatiw|{{SITENAME}}}}',
-'copyright' => 'Wopśimjeśe stoj pód $1.',
+'copyright' => 'Wopśimjeśe stoj pód $1 k dispoziciji, jolic njejo se hynac pódało.',
 'copyrightpage' => '{{ns:project}}:Stwóriśelske pšawo',
 'currentevents' => 'Aktualne tšojenja',
 'currentevents-url' => 'Project:Aktualne tšojenja',
@@ -420,12 +432,10 @@ $1',
 'ok' => 'Pytaś',
 'retrievedfrom' => 'Z {{GRAMMAR:genitiw|$1}}',
 'youhavenewmessages' => 'Maš $1 ($2).',
-'newmessageslink' => 'nowe powěsći',
-'newmessagesdifflink' => 'slědna změna',
 'youhavenewmessagesfromusers' => 'Maš $1 wót {{PLURAL:$3|drugego wužywarja|$3 wužywarjowu|$3 wužywarjow|$3 wužywarjow}} ($2).',
 'youhavenewmessagesmanyusers' => 'Maš $1 wót wjele wužywarjow ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|nowa powěsć|nowej powěsći|nowe powěsći|nowe powěsći}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|slědna změna|slědnej změnje|slědne změny|slědne změny}}',
+'newmessageslinkplural' => '{{PLURAL:$1|nowa powěsć|nowej powěsći|nowe powěsći}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|slědna změna|slědnej změnje|slědne změny}}',
 'youhavenewmessagesmulti' => 'Maš nowe powěsći: $1',
 'editsection' => 'wobźěłaś',
 'editold' => 'wobźěłaś',
@@ -477,6 +487,12 @@ Płaśece specialne boki namakaju se pód [[Special:SpecialPages|lisćinu specia
 # General errors
 'error' => 'Zmólka',
 'databaseerror' => 'Zmólka w datowej bance',
+'databaseerror-text' => 'Zmólka w datowej bance jo nastała.
+To móžo na programowu zmólku w softwarje pokazaś.',
+'databaseerror-textcl' => 'Zmólka w datowej bance jo nastała.',
+'databaseerror-query' => 'Wótpšašanje: $1',
+'databaseerror-function' => 'Funkcija: $1',
+'databaseerror-error' => 'Zmólka: $1',
 'laggedslavemode' => 'Glědaj: Jo móžno, až pokazany bok nejaktualnjejše změny njewopśimjejo.',
 'readonly' => 'Datowa banka jo zacynjona',
 'enterlockreason' => 'Pšosym zapódaj pśicynu za zacynjenje datoweje banki a informaciju, ga buźo zasej pśistupna',
@@ -509,6 +525,7 @@ Pšosym daj to a pśisłušny URL [[Special:ListUsers/sysop|administratoroju]] k
 'cannotdelete-title' => 'Bok "$1" njedajo se lašowaś',
 'delete-hook-aborted' => 'Wulašowanje pśez kokulu pśetergnjone.
 Njejo žedno wujasnjenje.',
+'no-null-revision' => 'Nowa nulowa wersija za bok "$1" njedajo se napóraś',
 'badtitle' => 'Njepłaśecy nadpis',
 'badtitletext' => 'Nadpis pominanego boka jo był njepłaśecy, prozny abo njekorektny nadpis, póchadajucy z mjazyrěcnego abo interwikijowego wótkaza. Snaź wopśimjejo jadno abo wěcej znamuškow, kótarež njejsu w nadpisach dowólone.',
 'perfcached' => 'Toś te daty póchadaju z pufrowaka a mógu snaź njeaktualne byś. Maksimalnje {{PLURAL:$1|jaden wuslědk stoj|$1 wuslědka stojtej|$1 wuslědki stoje|$1 wuslědkow stoj}} w pufrowaku k dispoziciji.',
@@ -532,6 +549,10 @@ Aby pśełožki za wšykne wikije pśidał abo změnił, wužywaj pšosym [//tra
 'namespaceprotected' => "Njejsy wopšawnjony, boki w rumje: '''$1''' wobźěłaś.",
 'customcssprotected' => 'Njamaš pšawo, aby toś ten CSS-bok wobźěłał, dokulaž wopśimujo  wósobinske nastajenja drugego wužywarja.',
 'customjsprotected' => 'Njamaš pšawo, aby toś ten JavaScriptowy bok wobźěłał, dokulaž wopśimujo  wósobinske nastajenja drugego wužywarja.',
+'mycustomcssprotected' => 'Njamaš pšawo toś ten CSS-bok wobźěłaś.',
+'mycustomjsprotected' => 'Njamaš pšawo toś ten JavaScript-bok wobźěłaś.',
+'myprivateinfoprotected' => 'Njamaš pšawo swóje priwatne informacije wobźěłaś.',
+'mypreferencesprotected' => 'Njamaš pšawo swóje nastajenja wobźěłaś.',
 'ns-specialprotected' => 'Njejo móžno, boki w rumje {{ns:special}} wobźěłaś.',
 'titleprotected' => "Bok z toś tym mjenim bu wót [[User:$1|$1]] pśeśiwo napóranjeju šćitany. Pśicyna jo ''$2''.",
 'filereadonlyerror' => 'Njejo móžno dataju "$1" změniś, dokulaž datajowy repozitorium "$2" jo jano cytajobny.
@@ -540,7 +561,8 @@ Administrator, kenž jo jen zastajił, jo toś tu pśicynu pódał: "$3".',
 'invalidtitle-knownnamespace' => 'Njepłaśiwy titel z mjenjowym rumom "$2" a tekstom "$3"',
 'invalidtitle-unknownnamespace' => 'Njepłaśiwy titel z njeznatym mjenjowym rumom $1 a tekstom "$2"',
 'exception-nologin' => 'Njejsy se pśizjawił',
-'exception-nologin-text' => 'Toś ten bok abo toś ta akcija pomina, až sy na toś tom wikiju pśizjawjony.',
+'exception-nologin-text' => 'Pšosym [[Special:Userlogin|pśizjaw se]], aby pśistup na toś ten bok abo akciju měł.',
+'exception-nologin-text-manual' => 'Aby pśistup na toś ten bok abo akciju měł, musyš $1.',
 
 # Virus scanner
 'virus-badscanner' => "Špatna konfiguracija: njeznaty wirusowy scanner: ''$1''",
@@ -548,15 +570,15 @@ Administrator, kenž jo jen zastajił, jo toś tu pśicynu pódał: "$3".',
 'virus-unknownscanner' => 'njeznaty antiwirus:',
 
 # Login and logout pages
-'logouttext' => "'''Sy se něnto wótzjawił.'''
+'logouttext' => "'''{{GENDER:|Sy|Sy}} něnto {{GENDER:|wótzjawjony|wótzjawjona}}.'''
 
-Móžoš {{SITENAME}} anomymnje dalej wužywaś abo móžoš <span class='plainlinks'>[$1 se znowego pśizjawiś]</span> ako samski abo hynakšy wužywaŕ.
-Źiwaj na to, až někotare boki se dalej tak zwobraznjuju ako by hyšći pśizjawjeny był, až njewuproznijoš cache swójego wobglědowaka.",
+Glědaj: Jo móžno, až někotare boki pokazuju se snaź tak, ako by ty hyšći pśizjawjony był, až njewuproznijoš pufrowak twójogo wobglědowaka.",
 'welcomeuser' => 'Witaj $1',
 'welcomecreation-msg' => 'Twójo konto jo se załožyło. Njezabydni změniś swóje [[Special:Preferences|nastajenja za {{SITENAME}}]].',
 'yourname' => 'mě wužywarja',
 'userlogin-yourname' => 'Wužywarske mě',
 'userlogin-yourname-ph' => 'Zapódaj swójo wužywarske mě',
+'createacct-another-username-ph' => 'Wužywarske mě zapódaś',
 'yourpassword' => 'šćitne gronidło:',
 'userlogin-yourpassword' => 'Gronidło',
 'userlogin-yourpassword-ph' => 'Zapódaj swójo gronidło',
@@ -586,15 +608,35 @@ Móžoš {{SITENAME}} anomymnje dalej wužywaś abo móžoš <span class='plainl
 'gotaccount' => "Maš južo wužywarske konto? '''$1'''.",
 'gotaccountlink' => 'Pśizjawiś se',
 'userlogin-resetlink' => 'Sy pśizjawjeńske daty zabył?',
-'userlogin-resetpassword-link' => 'Gronidło anulěrowaś',
+'userlogin-resetpassword-link' => 'Sy swójo gronidło zabył?',
 'helplogin-url' => 'Help:Pśizjawiś',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoc za pśizjawjenje]]',
-'createaccountmail' => 'Nachylne pśidatne gronidło wužywaś a jo na slědujucu e-mailowu adresu pósłaś',
+'userlogin-loggedin' => 'Sy južo ako {{GENDER:$1|$1 pśizjawjony|$1 pśizjawjona}}. Wužyj slědujucy formular, aby se ako drugi wužywaŕ pśizjawił.',
+'userlogin-createanother' => 'Druge konto załožyś',
+'createacct-join' => 'Zapódaj dołojce swóje informacije.',
+'createacct-another-join' => 'Zapódaj dołojce informacije nowego konta.',
+'createacct-emailrequired' => 'E-mailowa adresa',
+'createacct-emailoptional' => 'E-mailowa adresa (opcionalny)',
+'createacct-email-ph' => 'Zapódaj swóju e-mailowu adresu',
+'createacct-another-email-ph' => 'E-mailowu adresu zapódaś',
+'createaccountmail' => 'Nachylne pśipadne gronidło wužywaś a jo na pódanu e-mailowu adresu pósłaś',
+'createacct-realname' => 'Napšawdne mě (opcionalny)',
 'createaccountreason' => 'Pśicyna:',
+'createacct-reason' => 'Pśicyna',
+'createacct-reason-ph' => 'Cogodla załožujoš druge konto?',
+'createacct-captcha' => 'Wěstotna kontrola',
+'createacct-imgcaptcha-ph' => 'Zapódaj tekst, kótaryž wiźeš dołojce',
+'createacct-submit' => 'Twójo konto załožyś',
+'createacct-another-submit' => 'Druge konto załožyś',
+'createacct-benefit-heading' => '{{SITENAME}} jo se wót luźi ako ty napórała.',
+'createacct-benefit-body1' => '{{PLURAL:$1|změna|změnje|změny}}',
+'createacct-benefit-body2' => '{{PLURAL:$1|bok|boka|boki}}',
+'createacct-benefit-body3' => '{{PLURAL:$1|aktiwny sobuskatkujucy|aktiwnej sobustatkucujej|aktiwne sobustatkujuce}}',
 'badretype' => 'Šćitnej gronidle, kótarejž sy zapódał, se njemakajotej.',
 'userexists' => 'Wužywarske mě se južo wužywa.
 Pšosym wubjeŕ druge mě.',
 'loginerror' => 'Zmólka pśi pśizjawjenju',
+'createacct-error' => 'Zmólka pśi załožowanju konta',
 'createaccounterror' => 'Wužywarske konto njejo se napóraś dało: $1',
 'nocookiesnew' => 'Wužywarske konto jo se južo wutwóriło, ale wužywaŕ njejo pśizjawjony. {{SITENAME}} wužywa cookije za pśizjawjenja. Jo notne, cookije zmóžniś a se wótnowotki pśizjawiś.',
 'nocookieslogin' => '{{SITENAME}} wužywa cookije za pśizjawjenja. Jo notne, cookije zmóžniś a se wótnowotki pśizjawiś.',
@@ -624,15 +666,13 @@ Jolic jo něchten drugi wó nowe šćitne gronidło pšosył abo ty sy se zasej
 'passwordsent' => 'Nowe šćitne gronidło jo se wótpósłało na e-mailowu adresu wužywarja „$1“.
 Pšosym pśizjaw se zasej, gaž jo dostanjoš.',
 'blocked-mailpassword' => 'Twója IP-adresa jo se za wobźěłowanje bokow blokěrowała a teke pśipósłanje nowego šćitnego gronidła jo se znjemóžniło, aby se znjewužywanjeju zadorało.',
-'eauthentsent' => 'Wobkšuśenje jo se na e-mailowu adresu wótposłało.
-
-Nježli až wótpósćelo se dalšna e-mail na to wužywarske konto, dejš slědowaś instrukcije w powěsći a tak wobkšuśiś, až konto jo wót wěrnosći twójo.',
+'eauthentsent' => 'Wobkšuśenje jo se na pódanu e-mailowu adresu wótposłało. Nježli až wótpósćelo se dalšna e-mail na to wužywarske konto, dejš slědowaś instrukcije w e-mailu, aby wobkšuśił, až konto jo napšawdu twójo.',
 'throttled-mailpassword' => 'E-mail za anulěrowanje gronidła jo se za {{PLURAL:$1|slědnu góźinu|slědnej $1 góźinje|slědne $1 góźiny|slědnych $1 góźin}} pósłała. Aby znjewužywanjeju zasajźało, se jano jadna e-mail za anulěrowanje gronidła na {{PLURAL:$1|góźinu|$1 góźinje|$1 góźiny|$1 góźin}} pósćelo.',
 'mailerror' => 'Zmólka pśi wótpósłanju e-maila: $1',
 'acct_creation_throttle_hit' => 'Woglědowarje toś togo wikija, kótarež wužywaju twóju IP-adresu su napórali {{PLURAL:$1|1 konto|$1 konśe|$1 konta|$1 kontow}} slědny źeń. To jo maksimalna dowólona licba za toś tu periodu.
 Woglědowarje, kótarež wužywaju toś tu IP-adresu njamógu tuchylu dalšne konta napóraś.',
 'emailauthenticated' => 'Twója e-mailowa adresa jo se $2 $3 goź. wobkšuśiła.',
-'emailnotauthenticated' => 'Twója e-mailowa adresa njejo hyšći wobkšuśona. E-mailowe funkcije móžoš aklej pó wuspěšnem wobkšuśenju wužywaś.',
+'emailnotauthenticated' => 'Twója e-mailowa adresa hyšći njejo wobkšuśona. Žedna e-mail buźo se za slědujuce funkcije słaś.',
 'noemailprefs' => 'Zapódaj e-mailowu adresu w swójich nastajenjach, aby toś te funkcije stali k dispoziciji.',
 'emailconfirmlink' => 'Wobkšuś swóju e-mailowu adresu.',
 'invalidemailaddress' => 'Toś ta e-mailowa adresa njamóžo se akceptěrowaś, dokulaž zda se, až jo njepłaśiwy format. Pšošym zapódaj adresu w korektnem formaśe abo wuprozń to pólo.',
@@ -645,10 +685,12 @@ Woglědowarje, kótarež wužywaju toś tu IP-adresu njamógu tuchylu dalšne ko
 
 Móžoš toś te zdźělenje ignorowaś, jolic toś te konto jo se jano zamólnje wutwóriło.',
 'usernamehasherror' => 'Wužywarske mě njesmějo hašowe znamuška wopśimjeś',
-'login-throttled' => 'Sy pśecesto wopytał se pśizjawiś. Pócakaj pšosym, nježli až wopytajoš znowego.',
+'login-throttled' => 'Sy pśecesto wopytał se pśizjawiś. Pócakaj pšosym $1, nježli až wopytajoš znowego.',
 'login-abort-generic' => 'Twójo pśizjawjenje njejo wuspěšne było - pśetergnjone',
 'loginlanguagelabel' => 'Rěc: $1',
 'suspicious-userlogout' => 'Twójo póžedanje za wótzjawjenim jo se wótpokazało, dokulaž zda se, až jo se pósłało pśez wobškóźony wobglědowak abo pufrowański proksy',
+'createacct-another-realname-tip' => 'Napšawdne mě jo opcionalne.
+Jolic jo pódajoš, buźo se to wužywaś, aby pśinoski pśirědowało.',
 
 # Email sending
 'php-mail-error-unknown' => 'Njeznata zmólka w PHP-funkciji mail()',
@@ -664,7 +706,7 @@ Móžoš toś te zdźělenje ignorowaś, jolic toś te konto jo se jano zamólnj
 'newpassword' => 'Nowe šćitne gronidło:',
 'retypenew' => 'Nowe šćitne gronidło (hyšći raz):',
 'resetpass_submit' => 'Šćitne gronidło nastajiś a se pśizjawiś',
-'changepassword-success' => 'Twójo nowe šćitne gronidło jo nastajone. Něnto se pśizjaw …',
+'changepassword-success' => 'Twóje gronidło jo se wuspěšnje změniło!',
 'resetpass_forbidden' => 'Gronidła njedaju se změniś',
 'resetpass-no-info' => 'Dejš pśizjawjony byś, aby direktny pśistup na toś ten bok měł.',
 'resetpass-submit-loggedin' => 'Gronidło změniś',
@@ -672,11 +714,15 @@ Móžoš toś te zdźělenje ignorowaś, jolic toś te konto jo se jano zamólnj
 'resetpass-wrong-oldpass' => 'Njepłaśiwe nachylne abo aktualne gronidło.
 Sy snaź swójo gronidło južo wuspěšnje změnił abo nowe nachylne gronidło pominał.',
 'resetpass-temp-password' => 'Nachylne gronidło:',
+'resetpass-abort-generic' => 'Změnjanje gronidła jo se pśez rozšyrjenje pśetergnuło.',
 
 # Special:PasswordReset
 'passwordreset' => 'Gronidło slědk stajiś',
+'passwordreset-text-one' => 'Wupołni toś ten formular, aby swójo gronidło anulěrował.',
+'passwordreset-text-many' => '{{PLURAL:$1|Zapódaj jadne z pólow, aby swójo gronidło slědk stajił.}}',
 'passwordreset-legend' => 'Gronidło slědk stajiś',
 'passwordreset-disabled' => 'Slědkstajenja gronidłow su se znjemóžnili na toś tom wikiju.',
+'passwordreset-emaildisabled' => 'E-mailowe funkcije su se na toś tom wikiju znjemóžnili.',
 'passwordreset-username' => 'Wužywarske mě:',
 'passwordreset-domain' => 'Domena:',
 'passwordreset-capture' => 'E-mail se woglědaś?',
@@ -699,7 +745,7 @@ Ty by měł se něnto pśizjawiś a nowe gronidło wustajiś. Jolic něchten dru
 Nachylne gronidło: $2',
 'passwordreset-emailsent' => 'E-mail za anulěrowanje gronidła jo se pósłała.',
 'passwordreset-emailsent-capture' => 'E-mail za anulěrowanje gronidła jo se pósłała, kótaraž pokazujo se dołojce.',
-'passwordreset-emailerror-capture' => 'E-mail za anulěrowanje gronidła jo se generěrowała, kótaraž pokazujo se dołojce, ale jeje słanje wužywarjeju jo se njeraźiło: $1',
+'passwordreset-emailerror-capture' => 'E-mail za anulěrowanje gronidła jo se napórała, kótaraž se dołojce pokazujo, ale słanje {{GENDER:$2|wužywarjeju|wužywarce}} jo se njeraźiło: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'E-mailowu adresu změniś',
@@ -713,6 +759,19 @@ Nachylne gronidło: $2',
 'changeemail-submit' => 'E-mailowu adresu změniś',
 'changeemail-cancel' => 'Pśetergnuś',
 
+# Special:ResetTokens
+'resettokens' => 'Tokeny slědk stajiś',
+'resettokens-text' => 'Móžoš tokeny slědk stajiś, kótarež dowóluju pśistup na wěste priwatne daty, kótarež su z twójim kontom zwězane.
+
+Ty by dejał to cyniś, jolic sy je zmylnje z někim źělił abo jolic twóje konto jo se nadpadało.',
+'resettokens-no-tokens' => 'Tokeny za slědkstajenje njejsu.',
+'resettokens-legend' => 'Tokeny slědk stajiś',
+'resettokens-tokens' => 'Tokeny:',
+'resettokens-token-label' => '$1 (aktualna gódnota: $2)',
+'resettokens-watchlist-token' => 'Token za webkanal (Atom/RSS) [[Special:Watchlist|změnow na bokach w twójich woglědowankach]]',
+'resettokens-done' => 'Tokeny slědk stajone.',
+'resettokens-resetbutton' => 'Wubrane tokeny slědk stajiś',
+
 # Edit page toolbar
 'bold_sample' => 'Tucny tekst',
 'bold_tip' => 'Tucny tekst',
@@ -789,9 +848,7 @@ Jo se snaź pśesunuł abo wulašował, mjaztym až woglědujoš se bok.',
 'loginreqlink' => 'se pśizjawiś',
 'loginreqpagetext' => 'Dejš $1, aby mógł boki pšawje cytaś.',
 'accmailtitle' => 'Šćitne gronidło jo se wótpósłało.',
-'accmailtext' => "Pśipadnje napórane gronidło za [[User talk:$1|$1]] jo se pósłało k $2.
-
-Gronidło za toś to nowe konto dajo se na boku ''[[Special:ChangePassword|Gronidło změniś]]'' pśi pśizjawjenju změniś.",
+'accmailtext' => "Pśipadnje napórane gronidło za [[User talk:$1|$1]] jo se pósłało k $2. Dajo se na boku ''[[Special:ChangePassword|Gronidło změniś]]'' pśi pśizjawjenju změniś.",
 'newarticle' => '(Nowy nastawk)',
 'newarticletext' => "Sy slědował wótkaz na bok, kótaryž hyšći njeeksistěrujo.
 Aby bok napórał, zapiš do kašćika dołojce (glědaj [[{{MediaWiki:Helppage}}|bok pomocy]] za dalšne informacije). Jolic sy zamólnje how, klikni na tłocašk '''Slědk''' w swójom wobglědowaku.",
@@ -880,7 +937,7 @@ Nejnowšy protokolowy zapisk jo dołojce ako referenca pódany:",
 'nocreate-loggedin' => 'Njamaš pšawo nowe boki napóraś.',
 'sectioneditnotsupported-title' => 'Wobźěłowanje wótrězka se njepódpěra',
 'sectioneditnotsupported-text' => 'Wobźěłowanje wótrězka njepódpěra se na toś tom wobźěłowańskem boku.',
-'permissionserrors' => 'Problem z pšawami',
+'permissionserrors' => 'Wopšawnjeńska zmólka',
 'permissionserrorstext' => 'Njamaš pšawo to cyniś. {{PLURAL:$1|Pśicyna|Pśicynje|Pśicyny}}:',
 'permissionserrorstext-withaction' => 'Njamaš pšawo $2. {{PLURAL:$1|Pśicyna|Pśicynje|Pśicyny|Pśicyny}}:',
 'recreate-moveddeleted-warn' => "'''Glědaj: Ty wótžywijoš bok, kótaryž jo pjerwjej se wulašował.'''
@@ -902,7 +959,8 @@ Eksistěrujo južo.',
 'content-failed-to-parse' => 'Parsowanje wopśimjeśa $2 za model $1 jo se njeraźiło: $3',
 'invalid-content-data' => 'Njepłaśiwe wopśimjeśowe daty',
 'content-not-allowed-here' => 'Wopśimjeśe "$1" njejo na boku [[$2]] dowólone',
-'editwarning-warning' => 'Gaž toś ten bok se spušća, mógu se změny zgubiś, kótarež sy pśewjadł. Jolic sy pśizjawjeny, móžoš toś to warnowanje we wótrězku {{int:prefs-editing}} swójich nastajenjow znjemóžniś.',
+'editwarning-warning' => 'Gaž toś ten bok se spušća, mógu se změny zgubiś, kótarež sy pśewjadł.
+Jolic sy pśizjawjeny, móžoš toś to warnowanje we wótrězku „Wobźěłaś“ swójich nastajenjow znjemóžniś.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
@@ -935,6 +993,7 @@ Njesmějo daś wěcej nježli $2 {{PLURAL:$2|wołanja|wołanjowu|wołanjow|woła
 'undo-failure' => 'Změna njejo se mógała wótpóraś, dokulaž jo něchten pótrjefjony wótrězk mjaztym změnił.',
 'undo-norev' => 'Změna njeda se wótwrośiś, dokulaž njeeksistěčujo abo jo se wulašowała.',
 'undo-summary' => 'Wersija $1 wót [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]) jo se anulěrowała',
+'undo-summary-username-hidden' => 'Změna $1 schowanego wužywarja jo se anulěrowała',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Njejo móžno wužywarske konto wutwóriś',
@@ -1023,19 +1082,20 @@ Móžoš se toś ten rozdźěl woglědaś; drobnostki glědaj w [{{fullurl:{{#Sp
 'revdelete-text' => "'''Wulašowane wersije a tšojenja budu se dalej w stawiznach boka a w protokolach pokazaś, ale źěle jich wopśimjeśa njebudu pśistupne za zjawnosć.'''
 Dalšne administratory na {{GRAMMAR:lokatiw|{{SITENAME}}}} mógu ale pśecej hyšći pśistup na schowane wopśimjeśe měś a mógu jo pśez samki interfejs wótnowiś,  snaźkuli su pśidatne wobgranicowanja.",
 'revdelete-confirm' => 'Pšosym wobkšuś, až coš to cyniś, až rozmějoš konsekwence a až cyniš to pó [[{{MediaWiki:Policy-url}}|pšawidłach]].',
-'revdelete-suppress-text' => "Pódtłocenje by se dejał '''jano''' za slědujuce pady wužywaś:
-* Njegóźece se wósobinske informacije
-*: ''bydleńske adrese a telefonowe numery, numery socialnego zawěsćenja atd.''",
+'revdelete-suppress-text' => "Pódtłocenje by dejało se '''jano''' za slědujuce pady wužywaś:
+* Potencielnje ranjece informacije
+* Njepśigódne wósobinske informacije
+*: ''Bydleńske adrese a telefonowe numery, numery socialnego zawěsćenja atd.''",
 'revdelete-legend' => 'wobgranicowanja widobnosći póstajiś',
-'revdelete-hide-text' => 'Tekst wersije schowaś',
+'revdelete-hide-text' => 'Tekst wersije',
 'revdelete-hide-image' => 'Wopśimjeśe dataje schowaś',
 'revdelete-hide-name' => 'Akciju log-lisćiny schowaś',
-'revdelete-hide-comment' => 'Komentar wobźěłanja schowaś',
-'revdelete-hide-user' => 'mě/IP-adresu wobźěłarja schowaś',
+'revdelete-hide-comment' => 'Zespominanje wobźěłanja',
+'revdelete-hide-user' => 'Mě/IP-adresa wobźěłarja',
 'revdelete-hide-restricted' => 'Daty wót administratorow ako teke te drugich wužywarjow pódtłocyś',
 'revdelete-radio-same' => '(njezměniś)',
-'revdelete-radio-set' => 'Jo',
-'revdelete-radio-unset' => '',
+'revdelete-radio-set' => 'Schowany',
+'revdelete-radio-unset' => 'Widobny',
 'revdelete-suppress' => 'Pśicynu wulašowanja teke za administratorow schowaś',
 'revdelete-unsuppress' => 'Wobgranicowanja za wótnowjone wersije zasej zwignuś.',
 'revdelete-log' => 'Pśicyna:',
@@ -1114,6 +1174,7 @@ Zaruc, až historija wersijow nastawka jo njepśetergnjona.',
 'compareselectedversions' => 'Wuzwólonej wersiji pśirownaś',
 'showhideselectedversions' => 'Wubrane wersije pokazaś/schowaś',
 'editundo' => 'wótwrośiś',
+'diff-empty' => '(Žeden rozdźěl)',
 'diff-multi' => '({{PLURAL:$1|Jadna mjazywersija|$1 mjazywersiji|$1 mjazywersije|$1 mjazywersijow}} wót {{PLURAL:$2|jadnogo wužywarja|$2 wužywarjowu|$2 wužywarjow|$2 wužywarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazane}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Jadna mjazywersija|$1 mjazywersiji|$1 mjazywersije|$1 mjazywersijow}} wót wěcej ako {{PLURAL:$2|jadnogo wužywarja|$2 wužywarjowu|$2 wužywarjow|$2 wužywarjow}} {{PLURAL:$1|njepokazana|njepokazanej|njepokazane|njepokazane}})',
 'difference-missing-revision' => '{{PLURAL:$2|Jadna wersija|$2 wersiji|$2 wersije|$2 wersijow}} toś togo rozdźěla ($1) {{PLURAL:$2|njejo se namakała|njejstej se namakałej|njejsu namakali|njejo se namakało}}.
@@ -1181,12 +1242,13 @@ Drobnostki móžoš w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'powersearch-togglenone' => 'Žeden',
 'search-external' => 'Eksterne pytanje',
 'searchdisabled' => 'Pytanje we {{SITENAME}} jo se deaktiwěrowało. Tak dłujko móžoš w googlu pytaś. Pšosym wobmysli, až móžo pytanski indeks za {{SITENAME}} njeaktualny byś.',
+'search-error' => 'Pśi pytanju jo se zmólka nastała: $1',
 
 # Preferences page
 'preferences' => 'Nastajenja',
 'mypreferences' => 'Nastajenja',
 'prefs-edits' => 'Licba wobźěłanjow:',
-'prefsnologin' => 'Njejsy pśizjawjony',
+'prefsnologintext2' => 'Musyš $1, aby wužywarske nastajenja póstajił.',
 'changepassword' => 'Šćitne gronidło změniś',
 'prefs-skin' => 'Šat',
 'skin-preview' => 'Pśeglěd',
@@ -1211,7 +1273,7 @@ Drobnostki móžoš w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'prefs-rendering' => 'Naglěd',
 'saveprefs' => 'Składowaś',
 'resetprefs' => 'Njeskłaźone změny zachyśiś',
-'restoreprefs' => 'Wše standardne nastajenja wobnowiś',
+'restoreprefs' => 'Wšykne standardne nastajenja wótnowiś (we wšych wótrězkach)',
 'prefs-editing' => 'Wobźěłaś',
 'rows' => 'Rědki:',
 'columns' => 'Słupy:',
@@ -1266,11 +1328,13 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'prefs-help-signature' => 'Komentary na diskusijnych bokach měli se pśez "<nowiki>~~~~</nowiki>" pódpisaś, kótarež konwertěrujo se do twójeje signatury a casowego kołka.',
 'badsig' => 'Signatura njejo dobra; pšosym HTML pśekontrolěrowaś.',
 'badsiglength' => 'Twója signatura jo pśedłujka. Musy mjenjej ako $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} měś.',
-'yourgender' => 'Rod:',
-'gender-unknown' => 'Njepódany',
-'gender-male' => 'Muskecy',
-'gender-female' => 'Žeńscyny',
-'prefs-help-gender' => 'Opcionalny: wužywa se za pó roźe specifiske nagronjenje pśez softwaru. Toś ta informacija buźo zjawna.',
+'yourgender' => 'Co coš pódaś?',
+'gender-unknown' => 'Njok nic wó tom pódaś',
+'gender-male' => 'Wón wobźěłujo wikiboki',
+'gender-female' => 'Wóna wobźěłujo wikiboki',
+'prefs-help-gender' => 'Toś to pódaśe jo opcionalne:
+Softwara wuyiwa jogo gódnotu, aby śi z pomocu wótpowědnego gramatikaliskego roda groniła a drugich na tebje pokazała.
+Toś ta informacija buźo zjawna.',
 'email' => 'E-mail',
 'prefs-help-realname' => 'Realne mě jo opcionalne. Jolic až jo zapódajośo wužywa se za pódpisanje wašych pśinoskow.',
 'prefs-help-email' => 'E-mailowa adresa jo opcionalna, ale zmóžnja śi nowe gronidło emailowaś, jolic sy zabył swójo gronidło.',
@@ -1281,7 +1345,9 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'prefs-signature' => 'Pódpis',
 'prefs-dateformat' => 'Datumowy format',
 'prefs-timeoffset' => 'Casowy rozdźěl',
-'prefs-advancedediting' => 'Rozšyrjone opcije',
+'prefs-advancedediting' => 'Powšykne nastajenja',
+'prefs-editor' => 'Editor',
+'prefs-preview' => 'Pśeglěd',
 'prefs-advancedrc' => 'Rozšyrjone opcije',
 'prefs-advancedrendering' => 'Rozšyrjone opcije',
 'prefs-advancedsearchoptions' => 'Rozšyrjone opcije',
@@ -1289,7 +1355,9 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'prefs-displayrc' => 'Zwobraznjowańske opcije',
 'prefs-displaysearchoptions' => 'Zwobraznjowańske opcije',
 'prefs-displaywatchlist' => 'Zwobraznjowańske opcije',
+'prefs-tokenwatchlist' => 'Token',
 'prefs-diffs' => 'Rozdźěle',
+'prefs-help-prefershttps' => 'Toś to nastajenje wustatkujo se pó twójom pśiducem pśizjawjenju.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'Zda se, až e-mailowa adresa jo płaśiwa',
@@ -1313,9 +1381,11 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'userrights-no-interwiki' => 'Njamaš pšawo wužywarske pšawa w drugich wikijach změniś.',
 'userrights-nodatabase' => 'Datowa banka $1 njeeksistěrujo abo njejo lokalna.',
 'userrights-nologin' => 'Musyš se z administratorowym kontom [[Special:UserLogin|pśizjawiś]], aby wužywarske pšawa změnił.',
-'userrights-notallowed' => 'Twóje konto njama pšawa, aby wužywarske pšawa pśidało abo wótpórało.',
+'userrights-notallowed' => 'Njamaš trěbne pšawa, aby wužywarske pšawa pśipokazało abo zajmjeł.',
 'userrights-changeable-col' => 'Kupki, kótarež móžoš změniś',
 'userrights-unchangeable-col' => 'Kupki, kótarež njamóžoš změniś',
+'userrights-conflict' => 'Konflikt změnow wužywarskich pšawow! Pšosym pśeglědaj a wobkšuś swóje změny.',
+'userrights-removed-self' => 'Sy swóje pšawa wuspěšnje wótpórał. Togodla njamaš južo pśistup na toś ten bok měś.',
 
 # Groups
 'group' => 'Kupka:',
@@ -1359,7 +1429,7 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'right-reupload-shared' => 'Dataje w zgromadnje wužywanem repozitoriju lokalnje pśepisaś',
 'right-upload_by_url' => 'Dataju z URL-adrese nagraś',
 'right-purge' => 'Sedłowy cache za bok bźez wobkšuśenja prozniś',
-'right-autoconfirmed' => 'Połšćitane boki wobźěłaś',
+'right-autoconfirmed' => 'Žedne wobgranicowanje pśez IP-bazěrowane limity',
 'right-bot' => 'Wobchadanje ako awtomatiski proces',
 'right-nominornewtalk' => 'Snadne změny na diskusijnych bokach njedowjedu k pokazanjeju "Nowe powěsći"',
 'right-apihighlimits' => 'Wuše limity w API-wótpšašanjach wužywaś',
@@ -1379,13 +1449,20 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'right-hideuser' => 'Wužywarske mě blokěrowaś a schowaś',
 'right-ipblock-exempt' => 'Blokěrowanja IP, awtomatiske blokěrowanja a blokěrowanja wobcerkow se wobinuś',
 'right-proxyunbannable' => 'Awtomatiske blokěrowanje proksyjow se wobinuś',
-'right-unblockself' => 'Wótblokěrowaś se samogo',
-'right-protect' => 'Šćitowe schójźeńki změniś a šćitane boki wobźěłaś',
-'right-editprotected' => 'Šćitane boki wobźěłaś (bśez kaskadowego šćita)',
+'right-unblockself' => 'Wótblokěrowaś se',
+'right-protect' => 'Šćitowe schojźeńki změniś a z kaskadami šćitane boki wobźěłaś',
+'right-editprotected' => 'Boki wobźěłaś, kótarež su pśez "{{int:protect-level-sysop}}" šćitane',
+'right-editsemiprotected' => 'Boki wobźěłaś, kótarež su pśez "{{int:protect-level-autoconfirmed}}" šćitane',
 'right-editinterface' => 'Wužywański pówjerch wobźěłaś',
 'right-editusercssjs' => 'Dataje CSS a JS drugich wužywarjow wobźěłaś',
 'right-editusercss' => 'Dataje CSS drugich wužywarjow wobźěłaś',
 'right-edituserjs' => 'Dataje JS drugich wužywarjow wobźěłaś',
+'right-editmyusercss' => 'Twóje swójske wužywarske CSS-dataje wobźěłaś',
+'right-editmyuserjs' => 'Twóje swójske wužywarske JavaScript-dataje wobźěłaś',
+'right-viewmywatchlist' => 'Se swójske wobglědowańki woglědaś',
+'right-viewmyprivateinfo' => 'Swójske priwatne daty se woglědaś (na pś. e-mailowu adresu, napšawdne mě)',
+'right-editmyprivateinfo' => 'Swójske priwatne daty wobźěłaś (na pś. e-mailowu adresu, napšawdne mě)',
+'right-editmyoptions' => 'Swójske nastajenja wobźěłaś',
 'right-rollback' => 'Spěšne anulěrowanje změnow slědnego wužywarja, kótaryž jo dany bok wobźěłał',
 'right-markbotedits' => 'Spěšnje anulěrowane změny ako botowe změny markěrowaś',
 'right-noratelimit' => 'Pśez žedne limity wobgranicowany',
@@ -1437,8 +1514,8 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'action-block' => 'Toś tomu wužiwarjeju wobźěłowanje zawoboraś',
 'action-protect' => 'Šćitowe stopnje za toś ten bok změniś',
 'action-rollback' => 'změny slědnego wužywarja, kótaryž jo wobźěłał wěsty bok, malsnje slědk stajiś',
-'action-import' => 'toś ten bok z drugego wikija importěrowaś',
-'action-importupload' => 'toś ten bok z datajowego nagraśa importěrowaś',
+'action-import' => 'boki z drugego wikija importěrowaś',
+'action-importupload' => 'boki z datajowego nagraśa importěrowaś',
 'action-patrol' => 'změny drugich wužywarjow ako doglědowane markěrowaś',
 'action-autopatrol' => 'twóju změnu ako doglědowanu markěrowaś daś',
 'action-unwatchedpages' => 'lisćinu njewobglědowanych bokow zwobrazniś',
@@ -1447,17 +1524,27 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'action-userrights-interwiki' => 'wužywarske pšawa wužywarjow w drugich wikijach wobźěłaś',
 'action-siteadmin' => 'datowu banku zastajiś abo wótworiś',
 'action-sendemail' => 'E-maile pósłaś',
+'action-editmywatchlist' => 'swóje wobglědowańki wobźěłaś',
+'action-viewmywatchlist' => 'swóje wobglědowańki se woglědaś',
+'action-viewmyprivateinfo' => 'twóje priwatne informacije se woglědaś',
+'action-editmyprivateinfo' => 'twóje priwatne informacije wobźěłaś',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|změna|změnje|změny}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|wót slědnego woglěda}}',
+'enhancedrc-history' => 'historija',
 'recentchanges' => 'Aktualne změny',
 'recentchanges-legend' => 'Opcije aktualnych změnow',
 'recentchanges-summary' => "How móžoš slědne změny we '''{{GRAMMAR:lokatiw|{{SITENAME}}}}''' slědowaś.",
+'recentchanges-noresult' => 'Žedne změny za dany cas njewótpowědujo toś tym kriterijam.',
 'recentchanges-feed-description' => 'Slěduj z toś tym zapódaśim nejaktualnjejše změny we {{GRAMMAR:lokatiw|{{SITENAME}}}}.',
 'recentchanges-label-newpage' => 'Toś ta změna jo nowy bok napórała.',
 'recentchanges-label-minor' => 'To jo snadna změna',
 'recentchanges-label-bot' => 'Toś ta změna jo se pśez bośik wuwjadła.',
 'recentchanges-label-unpatrolled' => 'Toś ta změna hyšći njejo se pśekontrolěrowała',
+'recentchanges-label-plusminus' => 'Změnjona wjelikosc boka (licba bajtow)',
+'recentchanges-legend-newpage' => '(glej teke [[Special:NewPages|lisćinu nowych bokow]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "Dołojce {{PLURAL:$1|jo '''1''' změna|stej slědnej '''$1''' změnje|su slědne '''$1''' změny}} w {{PLURAL:$2|slědnem dnju|slědnyma '''$2''' dnjoma|slědnych '''$2''' dnjach}}, staw wót $4, $5.",
 'rcnotefrom' => "Dołojce pokazuju se změny wót '''$2''' (maks. '''$1''' zapisow).",
 'rclistfrom' => 'Nowe změny wót $1 pokazaś.',
@@ -1480,7 +1567,7 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'rc_categories_any' => 'wše',
 'rc-change-size-new' => '$1 {{PLURAL:$1|byte|byta|byty|bytow}} pó změnje',
 'newsectionsummary' => 'Nowy wótrězk /* $1 */',
-'rc-enhanced-expand' => 'Drobnosći pokazaś (pomina se JavaScript)',
+'rc-enhanced-expand' => 'Drobnostki pokazaś',
 'rc-enhanced-hide' => 'Drobnosći schowaś',
 'rc-old-title' => 'spócetnje napórany ako "$1"',
 
@@ -1739,8 +1826,7 @@ Za optimalnu wěstotu img_auth.php jo znjemóžnjony.',
 'upload_source_file' => ' (dataja na twójom kompjuterje)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Toś ten specialny bok pokazujo wšykne nagrate dataje.
-Jolic se pó wužywarju filtrujo, budu se jano dataje pokazowaś, pśi kótarychž ten wužywaŕ jo nejnowšu wersiju nagrał.',
+'listfiles-summary' => 'Toś ten specialny bok pokazujo wšykne nagrate dataje.',
 'listfiles_search_for' => 'Za medijowym mjenim pytaś:',
 'imgfile' => 'dataja',
 'listfiles' => 'Lisćina datajow',
@@ -1751,6 +1837,10 @@ Jolic se pó wužywarju filtrujo, budu se jano dataje pokazowaś, pśi kótarych
 'listfiles_size' => 'Wjelikosć (byte)',
 'listfiles_description' => 'Zespominanje',
 'listfiles_count' => 'Wersije',
+'listfiles-show-all' => 'Stare wersije wobrazow zapśimjeś',
+'listfiles-latestversion' => 'Aktualna wersija',
+'listfiles-latestversion-yes' => 'Jo',
+'listfiles-latestversion-no' => 'Ně',
 
 # File description page
 'file-anchor-link' => 'Dataja',
@@ -1843,6 +1933,13 @@ Snaź coš wopisanje na jeje [$2 boku datajowego wopisanja] wobźěłaś.',
 'randompage' => 'Pśipadny nastawk',
 'randompage-nopages' => 'W {{PLURAL:$2|slědujucem mjenjowem rumje|slědujucyma mjenjowyma rumoma|slědujucych mjenjowych rumach|slědujucych mjenjowych rumach}} žedne boki njejsu: $1',
 
+# Random page in category
+'randomincategory' => 'Pśipadny bok w kategoriji',
+'randomincategory-invalidcategory' => '"$1" njejo płaśiwe kategorijowe mě.',
+'randomincategory-nopages' => 'W kategoriji [[:Category:$1|$1]] žedne boki njejsu.',
+'randomincategory-selectcategory' => 'Pśipadny bok z kategorija: $1 $2',
+'randomincategory-selectcategory-submit' => 'Wótpósłaś',
+
 # Random redirect
 'randomredirect' => 'Pśipadne dalejpósrědnjenje',
 'randomredirect-nopages' => 'W mjenjowem rumje "$1" njejsu dalejpósrědnjenja.',
@@ -1873,6 +1970,8 @@ Snaź coš wopisanje na jeje [$2 boku datajowego wopisanja] wobźěłaś.',
 'pageswithprop-text' => 'Toś ten bok nalicyjo boki, kótarež wužywaju wěstu kakosć boka.',
 'pageswithprop-prop' => 'Mě kakosći:',
 'pageswithprop-submit' => 'Wótpósłaś',
+'pageswithprop-prophidden-long' => 'Gódnota kakosći dłujkego teksta schowana ($1)',
+'pageswithprop-prophidden-binary' => 'binarna kakostna gódnota schowana ($1)',
 
 'doubleredirects' => 'Dwójne dalejpósrědnjenja',
 'doubleredirectstext' => 'Toś ten bok nalicujo boki, kótarež dalej pósrědnjaju na druge dalejpósrědnjenja.
@@ -1930,6 +2029,7 @@ Kužda smužka wopśimjejo wótkaze na prědne a druge dalejpósrědnjenje a tek
 'mostrevisions' => 'Boki z nejwěcej wersijami',
 'prefixindex' => 'Wšykne boki z prefiksom',
 'prefixindex-namespace' => 'Wšykne boki z prefiksom (mjenjowy rum $1)',
+'prefixindex-strip' => 'Prefiks w lisćinje wótrězaś',
 'shortpages' => 'Krotke nastawki',
 'longpages' => 'Dłujke nastawki',
 'deadendpages' => 'Nastawki bźez wótkazow',
@@ -1945,6 +2045,7 @@ Kužda smužka wopśimjejo wótkaze na prědne a druge dalejpósrědnjenje a tek
 'listusers' => 'Lisćina wužywarjow',
 'listusers-editsonly' => 'Jano wužywarjow ze změnami pokazaś',
 'listusers-creationsort' => 'Pó datumje napóranja sortěrowaś',
+'listusers-desc' => 'We wóstupujucem porěźe sortěrowaś',
 'usereditcount' => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}}',
 'usercreated' => 'jo se $1 $2 góź. {{GENDER:$3|napórał|napórała}}',
 'newpages' => 'Nowe boki',
@@ -2047,7 +2148,8 @@ Jo nanejmjenjej głowna domena trěbna, na pśikład "*.org"<br />
 # Special:ListGroupRights
 'listgrouprights' => 'Pšawa wužywarskeje kupki',
 'listgrouprights-summary' => 'To jo lisćina wužywarskich kupkow definěrowanych w toś tom wikiju z jich zwězanymi pśistupnymi pšawami. Móžo [[{{MediaWiki:Listgrouprights-helppage}}|pśidatne informacije]] wó jadnotliwych pšawach daś.',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">Zagarantěrowane pšawo</span>
+'listgrouprights-key' => 'Legenda:
+* <span class="listgrouprights-granted">Zagarantěrowane pšawo</span>
 * <span class="listgrouprights-revoked">Slědk wzete pšawo</span>',
 'listgrouprights-group' => 'Kupka',
 'listgrouprights-rights' => 'Pšawa',
@@ -2119,7 +2221,7 @@ Pózdźejšne změny na toś tom boku a w pśisłušecej diskusiji se tam nalicu
 'notanarticle' => 'To njejo žeden nastawk',
 'notvisiblerev' => 'Wersija bu wulašowana',
 'watchlist-details' => 'Wobglědujoš {{PLURAL:$1|$1 bok|$1 boka|$1 boki|$1 bokow}}, bźez diskusijnych bokow.',
-'wlheader-enotif' => 'E-mailowe powěsće su aktiwizěrowane.',
+'wlheader-enotif' => 'E-mailowa zdźěleńska słužba jo zmóžnjona.',
 'wlheader-showupdated' => "Boki, kótarež su wót twójogo slědnego woglěda se změnili, pokazuju se '''tucnje'''.",
 'watchmethod-recent' => 'Kontrolěrowanje aktualnych změnow we wobglědowańce',
 'watchmethod-list' => 'Pśepytanje wobglědowanych bokow za aktualnymi změnami',
@@ -2152,7 +2254,9 @@ Pózdźejšne změny na toś tom boku a w pśisłušecej diskusiji se tam nalicu
 'enotif_anon_editor' => 'anonymny wužywaŕ $1',
 'enotif_body' => 'Luby $WATCHINGUSERNAME,
 
-$PAGEINTRO $NEWPAGE
+$PAGEEDITOR jo bok $PAGETITLE na {{GRAMMAR:lokatiw|{{SITENAME}}}} $PAGEEDITDATE $CHANGEDORCREATED, glědaj $PAGETITLE_URL za aktualnu wersiju.
+
+$NEWPAGE
 
 Zespominanje wobźěłarja: $PAGESUMMARY $PAGEMINOREDIT
 
@@ -2160,9 +2264,10 @@ Kontakt z wobźěłarjom:
 E-mail: $PAGEEDITOR_EMAIL
 Wiki: $PAGEEDITOR_WIKI
 
-Njebudu žedne dalšne powěźeńki w paźe dalšnych změnow, snaźkuli woglědujoš se toś ten bok. Móźoś teke chórgojcki powěźeńkow za wšykne twóje wobglědowane boki slědk stajiś.
+Njebudu žedne dalšne powěźeńki w paźe aktiwity, snaźkuli woglědujoš se toś ten bok, mjaztym sy pśizjawjony.
+Móźoś teke chórgojcki powěźeńkow za wšykne twóje wobglědowane boki slědk stajiś.
 
-Twój pśijaśelny powěsćowy system {{SITENAME}}
+             Twój pśijaśelny powěsćowy system {{SITENAME}}
 --
 Aby swoje nastajenja za e-mailowe zdźělenja změnił, woglědaj
 {{canonicalurl:{{#special:Preferences}}}}
@@ -2199,10 +2304,12 @@ Pšašanja a dalšna pomoc:
 'deletecomment' => 'Pśicyna:',
 'deleteotherreason' => 'Druga/pśidatna pśicyna:',
 'deletereasonotherlist' => 'Druga pśicyna',
-'deletereason-dropdown' => '* Powšykne pśicyny za lašowanja
-** Žycenje awtora
-** Pśekśiwjenje stworiśelskego pšawa
-** Wandalizm',
+'deletereason-dropdown' => '* Zwucone pśicyny za wulašowanje
+** Spam
+** Wandalizm
+** Pśekśiwjenje awtorskego pšawa
+** Pominanje awtora
+** Defektne dalejpósrědnjenje',
 'delete-edit-reasonlist' => 'Pśicyny za lašowanje wobźěłaś',
 'delete-toobig' => 'Toś ten bok ma z wěcej nježli $1 {{PLURAL:$1|wersiju|wersijomaj|wersijami|wersijami}} dłujku historiju. Lašowanje takich bokow bu wobgranicowane, aby wobškoźenju {{GRAMMAR:genitiw|{{SITENAME}}}} z pśigódy zajźowało.',
 'delete-warning-toobig' => 'Toś ten bok ma z wěcej ako $1 {{PLURAL:$1|wersiju|wersijomaj|wersijami|wersijami}} dłujke stawizny. Jich wulašowanje móžo źěło datoweje banki na {{SITENAME}} kazyś;
@@ -2221,7 +2328,7 @@ póstupujśo z glědanim.',
 Slědnu změnu k bokoju jo pśewjadł [[User:$3|$3]] ([[User talk:$3|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Zapominanje k slědnej změnje jo było: \"''\$1''\".",
 'revertpage' => 'Změny wužywarja [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]) su se wótwrośili a slědna wersija wužywarja [[User:$1|$1]] jo se wótnowiła.',
-'revertpage-nouser' => 'Jo změny wót (wužywarske mě wótpórane) na slědnu wersiju wót [[User:$1|$1]] slědk stajił',
+'revertpage-nouser' => 'Změny su se wót schowanego wužywarja anulěrowali a pjerwjejšna wersija wužywarja {{GENDER:$1|[[User:$1|$1]]}} jo se wótnowiła',
 'rollback-success' => 'Změny wót $1 su se slědk wzeli a slědna wersija wót $2 jo zasej se nawrośiła.',
 
 # Edit tokens
@@ -2357,7 +2464,7 @@ $1',
 'contributions' => 'Pśinoski {{GENDER:$1|wužywarja|wužywarki}}',
 'contributions-title' => 'Wužywarske pśinoski wót $1',
 'mycontris' => 'Pśinoski',
-'contribsub2' => 'Za $1 ($2)',
+'contribsub2' => 'Za {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Za toś te kriterije njejsu žedne změny se namakali.',
 'uctop' => '(aktualny)',
 'month' => 'wót mjaseca (a jěsnjej):',
@@ -2669,6 +2776,8 @@ Pšosym wobglědaj [https://www.mediawiki.org/wiki/Localisation lokalizaciju Med
 'thumbnail-more' => 'Pówětšyś',
 'filemissing' => 'Dataja felujo',
 'thumbnail_error' => 'Zmólka pśi stwórjenju pśeglěda: $1',
+'thumbnail_error_remote' => 'Zmólkowa powěźeńka wót $1:
+$2',
 'djvu_page_error' => 'DjVu-bok pśesegujo wobłuk.',
 'djvu_no_xml' => 'Njejo móžno, XML za DjVu-dataju wótwołaś.',
 'thumbnail-temp-create' => 'Temporerna dataja za miniaturny wobrazk njedajo se napóraś',
@@ -2750,7 +2859,7 @@ Wšykne transwiki-importowe akcije protokolěruju se w [[Special:Log/import|log-
 'tooltip-pt-anonuserpage' => 'Wužywarski bok za IP-adresu, z kótarejuž bok wobźěłajoš',
 'tooltip-pt-mytalk' => 'Twój diskusijny bok',
 'tooltip-pt-anontalk' => 'Diskusija wó změnach z tuteje IP-adresy.',
-'tooltip-pt-preferences' => 'Móje pśistajenja',
+'tooltip-pt-preferences' => 'Móje nastajenja',
 'tooltip-pt-watchlist' => 'Lisćina bokow, kótarež se wobglěduju',
 'tooltip-pt-mycontris' => 'Lisćina twójich pśinoskow',
 'tooltip-pt-login' => 'Pśizjawjenje njejo obligatoriske, ale lubje witane.',
@@ -2814,6 +2923,7 @@ Wšykne transwiki-importowe akcije protokolěruju se w [[Special:Log/import|log-
 W zespominanju dajo se pśicyna pódaś.',
 'tooltip-preferences-save' => 'Nastajenja składowaś',
 'tooltip-summary' => 'Zapódaj krotke zespominanje',
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/** Na toś tom městnje wustatkujo se CSS na wšykne šaty. */',
@@ -2846,8 +2956,8 @@ W zespominanju dajo se pśicyna pódaś.',
 'spam_reverting' => 'Nawrośijo se slědna wersija, kótaraž njejo wopśimjeła wótkaz na $1.',
 'spam_blanking' => 'Wšykne wersije su wopśimowali wótkaze na $1, do rěcha spórane.',
 'spam_deleting' => 'Wšykne wersije z wótkazami do $1 so lašuju',
-'simpleantispam-label' => "Antispamowa kontrola.
-How '''NIC''' zapisaś!",
+'simpleantispam-label' => "Kontrola pśeśiwo spamoju.
+HOW '''NIC''' njezapisaś!",
 
 # Info page
 'pageinfo-title' => 'Informacije za bok "$1"',
@@ -2861,13 +2971,14 @@ How '''NIC''' zapisaś!",
 'pageinfo-length' => 'Dłujkosć boka (w bajtach)',
 'pageinfo-article-id' => 'ID boka',
 'pageinfo-language' => 'Rěc bokowego wopśimjeśa',
-'pageinfo-robot-policy' => 'Status pytawy',
-'pageinfo-robot-index' => 'Indeksěrujobny',
-'pageinfo-robot-noindex' => 'Njeindeksěrujobny',
+'pageinfo-content-model' => 'Bokowy wopśimjeśowy model',
+'pageinfo-robot-policy' => 'Indicěrowanje pśez roboty',
+'pageinfo-robot-index' => 'Dowólony',
+'pageinfo-robot-noindex' => 'Zakazany',
 'pageinfo-views' => 'Licba zwobraznjenjow',
 'pageinfo-watchers' => 'Licba  wobglědowarjow boka',
 'pageinfo-few-watchers' => 'Mjenjej ako $1 {{PLURAL:$1|wobglědowaŕ|wobglědowarja|wobglědowarje|wobglědowarjow}}',
-'pageinfo-redirects-name' => 'Dalejpósrědnjenja k toś tomu bokoju',
+'pageinfo-redirects-name' => 'Licba dalejpósrědnjenjow k toś tomu bokoju',
 'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'Pódboki toś togo boka',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|dalejpósrědnjenja|dalejpósrědnjeni|dalejpósrědnjenja|dalejpósrědnjenjow}}; $3 {{PLURAL:$3|njedalejpósrědnjenja|njedalejpósrědnjeni|njedalejpósrědnjenja|njedalejpósrědnjenjow}})',
@@ -2946,7 +3057,7 @@ $1',
 'svg-long-desc' => 'dataja SVG, nominalnje: $1 × $2 piksele, wjelikosć dataje: $3',
 'svg-long-desc-animated' => 'Animěrowana SVG-dataja, zakładnej wótměra $1 × $2 pikselow, datajowa wjelikosć: $3',
 'svg-long-error' => 'Njepłaśiwa SVG-dataja: $1',
-'show-big-image' => 'Połne optiske wótgranicowanje.',
+'show-big-image' => 'Originalna dataja',
 'show-big-image-preview' => 'Wjelikosć toś togo pśeglěda: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druge rozeznaśe||Drugej rozeznaśi|Druge rozeznaśa|Druge rozeznaśa}}: $1.',
 'show-big-image-size' => '$1 × $2 pikselow',
@@ -2975,11 +3086,25 @@ $1',
 'minutes' => '{{PLURAL:$1|$1 minutu|$1 minutoma|$1 minutami|$1 minutami}}',
 'hours' => '{{PLURAL:$1|$1 góźinu|$1 góźinoma|$1 góźinami|$1 góźinami}}',
 'days' => '{{PLURAL:$1|$1 dnjom|$1 dnjoma|$1 dnjami|$1 dnjami}}',
+'weeks' => '{{PLURAL: $1|$1 tyźeń|$1 tyźenja|$1 tyźenje|$1 tyźenjow}}',
 'months' => '{{PLURAL:$1|$1 mjasecom|$1 mjasecoma|$1 mjasecami}}',
 'years' => '{{PLURAL:$1|$1 lětom|$1 lětoma|$1 lětami}}',
 'ago' => 'pśed $1',
 'just-now' => 'rowno',
 
+# Human-readable timestamps
+'hours-ago' => 'pśed $1 {{PLURAL:$1|goźinu|goźinoma|goźinami}}',
+'minutes-ago' => 'pśed $1 {{PLURAL:$1|minutu|minutoma|minutami}}',
+'seconds-ago' => 'pśed $1 {{PLURAL:$1|sekundu|sekundoma|sekundami}}',
+'monday-at' => 'Pónjeźele $1',
+'tuesday-at' => 'Wałtora $1',
+'wednesday-at' => 'Srjoda $1',
+'thursday-at' => 'Stwórtk $1',
+'friday-at' => 'Pětk $1',
+'saturday-at' => 'Sobota $1',
+'sunday-at' => 'Njeźela $1',
+'yesterday-at' => 'Cora $1',
+
 # Bad image list
 'bad_image_list' => 'Format jo slědujucy:
 
@@ -3191,7 +3316,7 @@ Slědujuce wótkaze w tej samej smužce se za wuwześa naglědaju, w kótarychž
 'exif-compression-4' => 'CCITT kupka 4 faksowe koděrowanje',
 
 'exif-copyrighted-true' => 'Pśez awtorske pšawo šćitany',
-'exif-copyrighted-false' => 'Zjawnosći pśistupny',
+'exif-copyrighted-false' => 'Status awtorskego pšawa njepóstajony',
 
 'exif-unknowndate' => 'Njeznaty datum',
 
@@ -3487,6 +3612,9 @@ Pšosym wobkšuś, až napšawdu coš toś ten bok zasej napóraś.',
 'confirm-unwatch-button' => 'W pórěźe',
 'confirm-unwatch-top' => 'Toś ten bok z twójeje wobglědowańki wulašowaś?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '"$1"',
+
 # Multipage image navigation
 'imgmultipageprev' => '← slědny bok',
 'imgmultipagenext' => 'pśiducy bok →',
@@ -3585,6 +3713,7 @@ Móžoš teke [[Special:EditWatchlist|standardny wobźěłowański bok wužywaś
 'version-license' => 'Licenca',
 'version-poweredby-credits' => "Toś ten wiki spěchujo se wót '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'druge',
+'version-poweredby-translators' => 'Pśełožowarje na translatewiki.net',
 'version-credits-summary' => 'Źěkujomy se slědujucym wósobam za jich pśinoski k [[Special:Version|MediaWiki]]',
 'version-license-info' => 'MediaWiki jo licha softwara: móžoš ju pód wuměnjenjami licence GNU General Public License, wózjawjeneje wót załožby Free Software Foundation, rozdźěliś a/abo změniś: pak pód wersiju 2 licence pak pód někakeju pózdźejšeju wersiju.
 
@@ -3598,6 +3727,19 @@ Ty by dejał [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licence GNU General Public
 'version-entrypoints-header-entrypoint' => 'Zastupny dypk',
 'version-entrypoints-header-url' => 'URL',
 
+# Special:Redirect
+'redirect' => 'Pó datajowem mjenju, wužywarju abo wersijowem ID dalej pósrědniś',
+'redirect-legend' => 'Do dataje abo boka dalej pósrědniś',
+'redirect-summary' => 'Toś ten specialny bok pósrědnja se do dataje (datajowe mě jo pódane), boka (wersijowy ID jo pódany) abo wužywarskego boka (numeriski wužywarski ID jo pódany) dalej. Wužyśe:
+[[{{#Special:Redirect}}/file/Pśikład.jpg]], [[{{#Special:Redirect}}/revision/328429]] abo [[{{#Special:Redirect}}/user/101]].',
+'redirect-submit' => 'Pytaś',
+'redirect-lookup' => 'Pytaś:',
+'redirect-value' => 'Gódnota:',
+'redirect-user' => 'ID wužywarja',
+'redirect-revision' => 'Bokowa wersija',
+'redirect-file' => 'Datajowe mě',
+'redirect-not-exists' => 'Gódnota njejo se namakała',
+
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'Za duplikatnymi datajami pytaś',
 'fileduplicatesearch-summary' => 'Za datajowymi duplikatami na zakłaźe gótnoty hash pytaś.',
@@ -3611,7 +3753,8 @@ Ty by dejał [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licence GNU General Public
 
 # Special:SpecialPages
 'specialpages' => 'Specialne boki',
-'specialpages-note' => '* Normalne specialne boki
+'specialpages-note-top' => 'Legenda',
+'specialpages-note' => '* Normalne specialne boki.
 * <span class="mw-specialpagerestricted">Specialne boki z wobgranicowanym pśistupom.</span>',
 'specialpages-group-maintenance' => 'Wótwardowańske lisćiny',
 'specialpages-group-other' => 'Druge specialne boki',
@@ -3644,12 +3787,16 @@ Ty by dejał [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licence GNU General Public
 'tags' => 'Płaśiwe toflicki změnow',
 'tag-filter' => 'Filter [[Special:Tags|toflickow]]:',
 'tag-filter-submit' => 'Filter',
+'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Wobznamjenje|Wobznamjeni|Wobznamjenja}}]]: $2)',
 'tags-title' => 'Toflicki',
 'tags-intro' => 'Toś ten bok nalicyjo toflicki, z kótarymiž softwara móžo změnu markěrowaś a jich wóznam.',
 'tags-tag' => 'Mě toflicki',
 'tags-display-header' => 'Naglěd na lisćinach změnow',
 'tags-description-header' => 'Dopołne wopisanje wóznama',
+'tags-active-header' => 'Aktiwny?',
 'tags-hitcount-header' => 'Změny z toflickami',
+'tags-active-yes' => 'Jo',
+'tags-active-no' => 'Ně',
 'tags-edit' => 'wobźěłaś',
 'tags-hitcount' => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}}',
 
@@ -3670,6 +3817,7 @@ Ty by dejał [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licence GNU General Public
 'dberr-problems' => 'Wódaj! Toś to sedło ma techniske śěžkosći.',
 'dberr-again' => 'Pócakaj někotare minuty a aktualizěruj bok.',
 'dberr-info' => '(Njejo móžno ze serwerom datoweje banki zwězaś: $1)',
+'dberr-info-hidden' => '(Njejo móžno ze serwerom datoweje banki zwězaś)',
 'dberr-usegoogle' => 'Móžoš mjaztym pśez Google pytaś.',
 'dberr-outofdate' => 'Źiwaj na to, až jich indekse našogo wopśimjeśa by mógli zestarjone byś.',
 'dberr-cachederror' => 'Slědujuca jo pufrowana kopija pominanego boka a by mógła zestarjona byś.',
@@ -3685,6 +3833,9 @@ Ty by dejał [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licence GNU General Public
 'htmlform-submit' => 'Wótpósłaś',
 'htmlform-reset' => 'Změny anulěrowaś',
 'htmlform-selectorother-other' => 'Druge',
+'htmlform-no' => 'Ně',
+'htmlform-yes' => 'Jo',
+'htmlform-chosen-placeholder' => 'Wubjeŕ móžnosć',
 
 # SQLite database support
 'sqlite-has-fts' => 'Wersija $1 z pódpěru za połnotekstowe pytanje',
@@ -3802,4 +3953,31 @@ Hować móžoš slědujucy jadnory formular wužywaś. Twój komentar pśidajo s
 # Image rotation
 'rotate-comment' => 'Wobraz wó $1 {{PLURAL:$1|stopjeń|stopnja|stopnje|stopnjow}} ako špěra źo wobwjertnjony',
 
+# Limit report
+'limitreport-title' => 'Profilěrowańske daty parsera:',
+'limitreport-cputime' => 'Casowe wužywanje CPU',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|sekunda|sekunźe|sekundy|sekundow}}',
+'limitreport-walltime' => 'Wužywanje napšawdnego casa',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekunda|sekunźe|sekundy|sekundow}}',
+'limitreport-ppvisitednodes' => 'Licba woglědanych sukow preprocesora',
+'limitreport-ppgeneratednodes' => 'Napórana licba sukow  preprocesora',
+'limitreport-postexpandincludesize' => 'Wjelikosć zapśěgowanja pó ekspanděrowanju',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bajt|bajtaj|bajty|bajtow}}',
+'limitreport-templateargumentsize' => 'Wjelikosć pśedłogowego argumenta',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bajt|bajtaj|bajty|bajtow}}',
+'limitreport-expansiondepth' => 'Nejwuša ekspansijowa dłymokosć',
+
+# Special:ExpandTemplates
+'expandtemplates' => 'Pśedłogi ekspanděrowaś',
+'expand_templates_intro' => 'Na toś tom boku dajo se tekst zapódaś a wšykne pśedłogi na njom se rekursiwnje ekspanděruju. Teke parserowe funkcije kaž <code><nowiki>{{</nowiki>#language:…}}</code> a wariable kaž <code><nowiki>{{</nowiki>CURRENTDAY}}</code> se ekspanděruju - faktiski wšo, což stoj mjazy dwójnymi wugibnjonymi spinkami.',
+'expand_templates_title' => 'Kontekstowy titel, za {{FULLPAGENAME}} atd.',
+'expand_templates_input' => 'Zapódany tekst:',
+'expand_templates_output' => 'Wuslědk',
+'expand_templates_xml_output' => 'Wudany XML',
+'expand_templates_ok' => 'W pórěźe',
+'expand_templates_remove_comments' => 'Komentary wótwónoźeś',
+'expand_templates_remove_nowiki' => 'Toflicki <nowiki> we wuslědku pódtłocyś',
+'expand_templates_generate_xml' => 'Parsowański bom XML pokazaś',
+'expand_templates_preview' => 'Pśeglěd',
+
 );
index 4cffee6..2a69fee 100644 (file)
@@ -273,8 +273,6 @@ Intaai [[Special:Version|bolikon dinolinan]].',
 'ok' => 'Oboh',
 'retrievedfrom' => 'Naanu mantad "$1"',
 'youhavenewmessages' => 'Kiharo $1 montok dia ($2).',
-'newmessageslink' => 'pason kawawagu',
-'newmessagesdifflink' => 'naalanan kawawagu',
 'youhavenewmessagesfromusers' => 'Nakaramit ko do $1 mantad {{PLURAL:$3|momomoguno suai|$3 tongomomomoguno}} ($2).',
 'youhavenewmessagesmanyusers' => 'Nakaramit koh do $1 mantad do tongomomomoguno ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|pason kawawagu|tangapason kawawagu}}',
@@ -977,7 +975,6 @@ Imurai no do indik suang diti {{SITENAME}} nopo nga nokolipas.',
 'preferences' => 'Pipilion',
 'mypreferences' => 'Pipilion',
 'prefs-edits' => 'Ginumu niditan:',
-'prefsnologin' => 'Amu nokolog sumuang',
 'changepassword' => 'Alanai kaatalib',
 'prefs-skin' => 'Kulit',
 'skin-preview' => 'Kokitanan',
index 87c5aeb..b194d54 100644 (file)
@@ -285,8 +285,6 @@ $1',
 'ok' => 'ރަނގަޅު',
 'retrievedfrom' => '$1 އިން',
 'youhavenewmessages' => 'ތިޔަބޭފުޅާއަށް $1 ($2)',
-'newmessageslink' => 'އައު މެސެޖުތައް',
-'newmessagesdifflink' => 'އެންމެ ފަހުގެ ބަދަލު',
 'youhavenewmessagesfromusers' => 'ތިބޭފުޅާއަށް {{PLURAL:$3|މެމްބަރެއް|$3 މެމްބަރުން}} $1 ފޮނުއްވާފައިވެއެވެ. ($2)',
 'youhavenewmessagesmanyusers' => 'ތިބޭފުޅާއަށް ގިނަ މެމްބަރުން $1 ފޮނުއްވާފައިވެއެވެ. ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|އާ މެސެޖެއް|މެސެޖުތައް}}',
index 74a74fb..3fe49fc 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'ΚακόςΤίτλος' ),
        'Blankpage'                 => array( 'ΚενήΣελίδα' ),
        'Block'                     => array( 'Φραγή', 'ΦραγήIP', 'ΦραγήΧρήστη' ),
-       'Blockme'                   => array( 'ΦραγήΕμένα' ),
        'Booksources'               => array( 'ΠηγέςΒιβλίων' ),
        'BrokenRedirects'           => array( 'ΚατεστραμμένεςΑνακατευθύνσεις' ),
        'Categories'                => array( 'Κατηγορίες' ),
@@ -118,9 +117,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'ΔημιουργίαΛογαριασμού' ),
        'Deadendpages'              => array( 'ΑδιέξοδεςΣελίδες' ),
        'DeletedContributions'      => array( 'ΔιαγραμμένεςΣυνεισφορές' ),
-       'Disambiguations'           => array( 'Αποσαφηνίσεις' ),
        'DoubleRedirects'           => array( 'ΔιπλέςΑνακατευθύνσεις' ),
        'Emailuser'                 => array( 'EmailΧρήστη' ),
+       'ExpandTemplates'           => array( 'ΕπέκτασηΠροτύπων' ),
        'Export'                    => array( 'Εξαγωγή' ),
        'Fewestrevisions'           => array( 'ΛιγότεροΕπεξεργασίες' ),
        'FileDuplicateSearch'       => array( 'ΑναζήτησηΔιπλώνΑρχείων' ),
@@ -163,6 +162,7 @@ $specialPageAliases = array(
        'Randomredirect'            => array( 'ΤυχαίαΑνακατεύθυνση' ),
        'Recentchanges'             => array( 'ΠρόσφατεςΑλλαγές' ),
        'Recentchangeslinked'       => array( 'ΣυνδεδεμένεςΠρόσφατεςΑλλαγές', 'ΣχετικέςΑλλαγές' ),
+       'Redirect'                  => array( 'Ανακατεύθυνση' ),
        'Revisiondelete'            => array( 'ΔιαγραφήΈκδοσης' ),
        'Search'                    => array( 'Αναζήτηση' ),
        'Shortpages'                => array( 'ΜικρέςΣελίδες' ),
@@ -195,12 +195,12 @@ $specialPageAliases = array(
 
 $magicWords = array(
        'redirect'                  => array( '0', '#ΑΝΑΚΑΤΕΥΘΥΝΣΗ', '#REDIRECT' ),
-       'notoc'                     => array( '0', '__ΧΩΡΙΣΠΠ__', '__NOTOC__' ),
+       'notoc'                     => array( '0', '__ΧΩΡΙΣΠΠ__', '__ΧΩΡΙΣΠΙΝΑΚΑΠΕΡΙΕΧΟΜΕΝΩΝ__', '__NOTOC__' ),
        'nogallery'                 => array( '0', '__ΧΩΡΙΣΠΙΝΑΚΟΘΗΚΗ__', '__NOGALLERY__' ),
-       'forcetoc'                  => array( '0', '__ΜΕΠΠ__', '__FORCETOC__' ),
-       'toc'                       => array( '0', '__ΠΠ__', '__TOC__' ),
-       'noeditsection'             => array( '0', '__ΧΩΡΙΣΕΠΕΞΕΝΟΤ__', '__NOEDITSECTION__' ),
-       'currentmonth'              => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'forcetoc'                  => array( '0', '__ΜΕΠΠ__', '__ΜΕΠΙΝΑΚΑΠΕΡΙΕΧΟΜΕΝΩΝ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__ΠΠ__', '__ΠΙΝΑΚΑΣΠΕΡΙΕΧΟΜΕΝΩΝ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__ΧΩΡΙΣΕΠΕΞΕΝΟΤ__', '__ΧΩΡΙΣΕΠΕΞΕΡΓΑΣΙΑΕΝΟΤΗΤΩΝ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣ', 'ΤΡΕΧΩΝΜΗΝΑΣ2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣ1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣΟΝΟΜΑ', 'CURRENTMONTHNAME' ),
        'currentmonthnamegen'       => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣΓΕΝΙΚΗ', 'CURRENTMONTHNAMEGEN' ),
@@ -233,7 +233,7 @@ $magicWords = array(
        'pagenamee'                 => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΚ', 'PAGENAMEE' ),
        'namespace'                 => array( '1', 'ΠΕΡΙΟΧΗ', 'NAMESPACE' ),
        'namespacee'                => array( '1', 'ΠΕΡΙΟΧΗΚ', 'NAMESPACEE' ),
-       'namespacenumber'           => array( '1', 'ΑΡΙΘΜΟΣΟΝΟΜΑΤΟΣΧΩΡΟΥ', 'NAMESPACENUMBER' ),
+       'namespacenumber'           => array( '1', 'ΑΡΙΘΜΟΣΟΝΟΜΑΤΟΣΧΩΡΟΥ', 'ΑΡΙΘΜΟΣΟΝΟΜΑΤΟΧΩΡΟΥ', 'NAMESPACENUMBER' ),
        'talkspace'                 => array( '1', 'ΠΕΡΙΟΧΗΣΥΖΗΤΗΣΕΩΝ', 'TALKSPACE' ),
        'talkspacee'                => array( '1', 'ΠΕΡΙΟΧΗΣΥΖΗΤΗΣΕΩΝΚ', 'TALKSPACEE' ),
        'subjectspace'              => array( '1', 'ΠΕΡΙΟΧΗΘΕΜΑΤΩΝ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
@@ -260,8 +260,8 @@ $magicWords = array(
        'img_center'                => array( '1', 'κέντρο', 'center', 'centre' ),
        'img_framed'                => array( '1', 'με-πλαίσιο', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'χωρίς-πλαίσιο', 'frameless' ),
-       'img_page'                  => array( '1', 'σελίδα=$1', 'σελίδα $1', 'page=$1', 'page $1' ),
-       'img_upright'               => array( '1', 'κατακόρυφα', 'κατακόρυφα=$1', 'κατακόρυφα $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_page'                  => array( '1', 'σελίδα=$1', 'σελίδα_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'κατακόρυφα', 'κατακόρυφα=$1', 'κατακόρυφα_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'πλαίσιο', 'border' ),
        'img_baseline'              => array( '1', 'γραμμήβάσης', 'baseline' ),
        'img_sub'                   => array( '1', 'δείκτης', 'sub' ),
@@ -275,12 +275,13 @@ $magicWords = array(
        'img_alt'                   => array( '1', 'εναλλ.=$1', 'alt=$1' ),
        'int'                       => array( '0', 'ΕΣΩΤ:', 'INT:' ),
        'sitename'                  => array( '1', 'ΙΣΤΟΧΩΡΟΣ', 'SITENAME' ),
-       'ns'                        => array( '0', 'ΧΟ:', 'NS:' ),
+       'ns'                        => array( '0', 'ΧΟ:', 'ΧΩΡΟΣΟΝΟΜΑΤΩΝ:', 'ΟΧ:', 'ΟΝΟΜΑΤΟΧΩΡΟΣ:', 'NS:' ),
        'localurl'                  => array( '0', 'ΤΟΠΙΚΟURL:', 'LOCALURL:' ),
        'localurle'                 => array( '0', 'ΤΟΠΙΚΟURLΚ:', 'LOCALURLE:' ),
        'server'                    => array( '0', 'ΕΞΥΠΗΡΕΤΗΤΗΣ', 'SERVER' ),
        'servername'                => array( '0', 'ΟΝΟΜΑΕΞΥΠΗΡΕΤΗΤΗ', 'SERVERNAME' ),
        'scriptpath'                => array( '0', 'ΔΙΑΔΡΟΜΗΠΡΟΓΡΑΜΜΑΤΟΣ', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'ΔΙΑΔΡΟΜΗΣΤΥΛ', 'STYLEPATH' ),
        'grammar'                   => array( '0', 'ΓΡΑΜΜΑΤΙΚΗ:', 'GRAMMAR:' ),
        'gender'                    => array( '0', 'ΦΥΛΟ:', 'GENDER:' ),
        'notitleconvert'            => array( '0', '__ΧΩΡΙΣΜΕΤΑΤΡΟΠΗΤΙΤΛΟΥ__', '__NOTITLECONVERT__', '__NOTC__' ),
@@ -293,17 +294,21 @@ $magicWords = array(
        'revisionday'               => array( '1', 'ΜΕΡΑΑΛΛΑΓΗΣ', 'REVISIONDAY' ),
        'revisionday2'              => array( '1', 'ΜΕΡΑΑΛΛΑΓΗΣ2', 'REVISIONDAY2' ),
        'revisionmonth'             => array( '1', 'ΜΗΝΑΣΑΛΛΑΓΗΣ', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'ΜΗΝΑΣΑΝΑΘΕΩΡΗΣΗΣ1', 'REVISIONMONTH1' ),
        'revisionyear'              => array( '1', 'ΕΤΟΣΑΛΛΑΓΗΣ', 'REVISIONYEAR' ),
        'revisiontimestamp'         => array( '1', 'ΧΡΟΝΟΣΗΜΑΝΣΗΑΛΛΑΓΗΣ', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'ΧΡΗΣΤΗΣΑΝΑΘΕΩΡΗΣΗΣ', 'REVISIONUSER' ),
        'plural'                    => array( '0', 'ΠΛΗΘΥΝΤΙΚΟΣ:', 'PLURAL:' ),
        'fullurl'                   => array( '0', 'ΠΛΗΡΕΣURL:', 'FULLURL:' ),
        'fullurle'                  => array( '0', 'ΠΛΗΡΕΣURLΚ:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'ΚΑΝΟΝΙΚΟURL:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'ΚΑΝΟΝΙΚΟURLΚ:', 'CANONICALURLE:' ),
        'lcfirst'                   => array( '0', 'ΠΡΩΤΟΠΕΖΟ:', 'LCFIRST:' ),
        'ucfirst'                   => array( '0', 'ΠΡΩΤΟΚΕΦΑΛΑΙΟ:', 'UCFIRST:' ),
        'lc'                        => array( '0', 'ΠΕΖΑ:', 'LC:' ),
        'uc'                        => array( '0', 'ΚΕΦΑΛΑΙΑ:', 'UC:' ),
        'raw'                       => array( '0', 'ΓΥΜΝΑ:', 'RAW:' ),
-       'displaytitle'              => array( '1', 'ΔΕΙΞΕΤΙΤΛΟ', 'DISPLAYTITLE' ),
+       'displaytitle'              => array( '1', 'ΔΕΙΞΕΤΙΤΛΟ', 'ΠΡΟΒΟΛΗΤΙΤΛΟΥ', 'DISPLAYTITLE' ),
        'rawsuffix'                 => array( '1', 'Γ', 'R' ),
        'newsectionlink'            => array( '1', '__ΔΕΣΜΟΣΝΕΑΣΕΝΟΤΗΤΑΣ__', '__NEWSECTIONLINK__' ),
        'currentversion'            => array( '1', 'ΤΡΕΧΟΥΣΑΕΚΔΟΣΗ', 'CURRENTVERSION' ),
@@ -331,6 +336,8 @@ $magicWords = array(
        'numberingroup'             => array( '1', 'ΟΜΑΔΑΑΡΙΘΜΗΣΗΣ', 'NUMBERINGROUP', 'NUMINGROUP' ),
        'staticredirect'            => array( '1', '__ΣΤΑΤΙΚΗΑΝΑΚΑΤΕΥΘΥΝΣΗ__', '__STATICREDIRECT__' ),
        'protectionlevel'           => array( '1', 'ΕΠΙΠΕΔΟΠΡΟΣΤΑΣΙΑΣ', 'PROTECTIONLEVEL' ),
+       'url_path'                  => array( '0', 'ΔΙΑΔΡΟΜΗ', 'PATH' ),
+       'url_query'                 => array( '0', 'ΕΡΩΤΗΜΑ', 'QUERY' ),
 );
 
 $fallback8bitEncoding = 'iso-8859-7';
@@ -637,8 +644,6 @@ $1',
 'ok' => 'Εντάξει',
 'retrievedfrom' => 'Ανακτήθηκε από «$1»',
 'youhavenewmessages' => 'Έχετε $1 ($2).',
-'newmessageslink' => 'νέα μηνύματα',
-'newmessagesdifflink' => 'τελευταία αλλαγή',
 'youhavenewmessagesfromusers' => 'Έχετε $1 από {{PLURAL:$3|έναν άλλο χρήστη|$3 χρήστες}} ($2).',
 'youhavenewmessagesmanyusers' => 'Έχετε $1 από πολλούς χρήστες ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ένα νέο μήνυμα|νέα μηνύματα}}',
@@ -1464,7 +1469,6 @@ $1",
 'preferences' => 'Προτιμήσεις',
 'mypreferences' => 'Προτιμήσεις',
 'prefs-edits' => 'Αριθμός επεξεργασιών:',
-'prefsnologin' => 'Δεν έχετε συνδεθεί.',
 'changepassword' => 'Αλλαγή κωδικού',
 'prefs-skin' => 'Οπτική οργάνωση (skin)',
 'skin-preview' => 'Προεπισκόπηση',
@@ -1758,6 +1762,7 @@ $1",
 'recentchanges-label-minor' => 'Αυτή είναι μια μικροαλλαγή',
 'recentchanges-label-bot' => 'Αυτή η επεξεργασία έγινε από ένα ρομπότ',
 'recentchanges-label-unpatrolled' => 'Αυτή η επεξεργασία δεν έχει ελεγχθεί ακόμα',
+'recentchanges-legend-newpage' => '$1 - νέα σελίδα',
 'rcnote' => "Παρακάτω {{PLURAL:$1|υπάρχει '''1''' αλλαγή|υπάρχουν οι τελευταίες '''$1''' αλλαγές}} στο διάστημα {{PLURAL:$2|της τελευταίας ημέρας|των τελευταίων '''$2''' ημερών}}, από τις $5, $4 και εξής.",
 'rcnotefrom' => "Παρακάτω είναι οι αλλαγές από τις '''$2''' (εμφανίζονται μέχρι '''$1''').",
 'rclistfrom' => 'Εμφάνιση νέων αλλαγών αρχίζοντας από $1',
@@ -4180,4 +4185,21 @@ $5
 'limitreport-expansiondepth' => 'Μεγαλύτερο βάθος ανάπτυξης',
 'limitreport-expensivefunctioncount' => 'Πλήθος ακριβών συναρτήσεων συντακτικού αναλυτή',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Επέκτεινε τα πρότυπα',
+'expand_templates_intro' => 'Αυτή η ειδική σελίδα παίρνει κείμενο και αναπτύσσει όλα τα πρότυπα σε αυτό αναδρομικά. 
+Επίσης αναπτύσσει συναρτήσεις συντακτικού αναλυτή όπως η
+<nowiki>{{</nowiki>#language:…}}, και μεταβλητές όπως η
+<nowiki>{{</nowiki>CURRENTDAY}}.
+Ουσιαστικά επεκτείνει οτιδήποτε βρίσκεται σε διπλές αγκύλες.',
+'expand_templates_title' => 'Τίτλων συμφραζόμενων, για την {{FULLPAGENAME}} κ.τ.λ.:',
+'expand_templates_input' => 'Κείμενο εισόδου:',
+'expand_templates_output' => 'Αποτέλεσμα',
+'expand_templates_xml_output' => 'Έξοδος XML',
+'expand_templates_ok' => 'Εντάξει',
+'expand_templates_remove_comments' => 'Αφαίρεση σχολίων',
+'expand_templates_remove_nowiki' => 'Απόκρυψη της ετικέτας <nowiki> στο αποτέλεσμα',
+'expand_templates_generate_xml' => 'Εμφάνιση δέντρου συντακτικής ανάλυσης XML',
+'expand_templates_preview' => 'Προεπισκόπηση',
+
 );
index 5fd0b06..e6ecc78 100644 (file)
@@ -406,6 +406,7 @@ $specialPageAliases = array(
        'DoubleRedirects'           => array( 'DoubleRedirects' ),
        'EditWatchlist'             => array( 'EditWatchlist' ),
        'Emailuser'                 => array( 'EmailUser' ),
+       'ExpandTemplates'           => array( 'ExpandTemplates', 'Expantemplates' ),
        'Export'                    => array( 'Export' ),
        'Fewestrevisions'           => array( 'FewestRevisions' ),
        'FileDuplicateSearch'       => array( 'FileDuplicateSearch' ),
@@ -939,12 +940,10 @@ See [[Special:Version|version page]].',
 'backlinksubtitle'             => '← $1', # only translate this message to other languages if you have to change it
 'retrievedfrom'                => 'Retrieved from "$1"',
 'youhavenewmessages'           => 'You have $1 ($2).',
-'newmessageslink'              => 'new messages',
-'newmessagesdifflink'          => 'last change',
 'youhavenewmessagesfromusers'  => 'You have $1 from {{PLURAL:$3|another user|$3 users}} ($2).',
 'youhavenewmessagesmanyusers'  => 'You have $1 from many users ($2).',
-'newmessageslinkplural'        => '{{PLURAL:$1|a new message|new messages}}',
-'newmessagesdifflinkplural'    => 'last {{PLURAL:$1|change|changes}}',
+'newmessageslinkplural'        => '{{PLURAL:$1|a new message|999=new messages}}',
+'newmessagesdifflinkplural'    => 'last {{PLURAL:$1|change|999=changes}}',
 'youhavenewmessagesmulti'      => 'You have new messages on $1',
 'newtalkseparator'             => ',&#32;', # do not translate or duplicate this message to other languages
 'editsection'                  => 'edit',
@@ -1201,7 +1200,7 @@ Please try again.',
 'passwordtooshort'                => 'Passwords must be at least {{PLURAL:$1|1 character|$1 characters}}.',
 'password-name-match'             => 'Your password must be different from your username.',
 'password-login-forbidden'        => 'The use of this username and password has been forbidden.',
-'mailmypassword'                  => 'Email new password',
+'mailmypassword'                  => 'Reset password',
 'passwordremindertitle'           => 'New temporary password for {{SITENAME}}',
 'passwordremindertext'            => 'Someone (probably you, from IP address $1) requested a new
 password for {{SITENAME}} ($4). A temporary password for user
@@ -1291,8 +1290,8 @@ You may have already successfully changed your password or requested a new tempo
 
 # Special:PasswordReset
 'passwordreset'                    => 'Reset password',
-'passwordreset-text-one'           => 'Complete this form to reset your password.',
-'passwordreset-text-many'          => '{{PLURAL:$1|Fill one of the fields to reset your password.}}',
+'passwordreset-text-one'           => 'Complete this form to receive a temporary password via email.',
+'passwordreset-text-many'          => '{{PLURAL:$1|Fill in one of the fields to receive a temporary password via email.}}',
 'passwordreset-legend'             => 'Reset password',
 'passwordreset-disabled'           => 'Password resets have been disabled on this wiki.',
 'passwordreset-emaildisabled'      => 'Email features have been disabled on this wiki.',
@@ -1863,7 +1862,7 @@ Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENA
 'showingresultsnum'                => "Showing below {{PLURAL:$3|'''1''' result|'''$3''' results}} starting with #'''$2'''.",
 'showingresultsheader'             => "{{PLURAL:$5|Result '''$1''' of '''$3'''|Results '''$1 - $2''' of '''$3'''}} for '''$4'''",
 'nonefound'                        => "'''Note:''' Only some namespaces are searched by default.
-Try prefixing your query with ''all:'' to search all content (including talk pages, templates, etc), or use the desired namespace as prefix.",
+Try prefixing your query with ''all:'' to search all content (including talk pages, templates, etc.), or use the desired namespace as prefix.",
 'search-nonefound'                 => 'There were no results matching the query.',
 'powersearch'                      => 'Advanced search',
 'powersearch-legend'               => 'Advanced search',
@@ -1900,7 +1899,6 @@ Note that their indexes of {{SITENAME}} content may be out of date.',
 'preferences-summary'           => '', # do not translate or duplicate this message to other languages
 'mypreferences'                 => 'Preferences',
 'prefs-edits'                   => 'Number of edits:',
-'prefsnologin'                  => 'Not logged in',
 'prefsnologintext2'             => 'Please $1 to set user preferences.',
 'changepassword'                => 'Change password',
 'changepassword-summary'        => '', # do not translate or duplicate this message to other languages
@@ -2211,6 +2209,9 @@ Your email address is not revealed when other users contact you.',
 'recentchanges-label-minor'         => 'This is a minor edit',
 'recentchanges-label-bot'           => 'This edit was performed by a bot',
 'recentchanges-label-unpatrolled'   => 'This edit has not yet been patrolled',
+'recentchanges-label-plusminus'     => 'The page size changed by this number of bytes',
+'recentchanges-legend-newpage'      => '(also see [[Special:NewPages|list of new pages]])',
+'recentchanges-legend-plusminus'    => "(''±123'')",
 'rcnote'                            => "Below {{PLURAL:$1|is '''1''' change|are the last '''$1''' changes}} in the last {{PLURAL:$2|day|'''$2''' days}}, as of $5, $4.",
 'rcnotefrom'                        => "Below are the changes since '''$2''' (up to '''$1''' shown).",
 'rclistfrom'                        => 'Show new changes starting from $1',
@@ -3224,7 +3225,7 @@ It may have already been undeleted.',
 $1',
 'undelete-show-file-confirm'   => 'Are you sure you want to view the deleted revision of the file "<nowiki>$1</nowiki>" from $2 at $3?',
 'undelete-show-file-submit'    => 'Yes',
-'undelete-revisionrow'         => '$1 $2 ($3) $4 . . $5 $6 $7', # only translate this message to other languages if you have to change it
+'undelete-revision-row'         => '$1 $2 ($3) $4 . . $5 $6 $7 $8 $9', # only translate this message to other languages if you have to change it
 
 # Namespace form on various pages
 'namespace'                     => 'Namespace:',
@@ -5147,4 +5148,20 @@ Otherwise, you can use the easy form below. Your comment will be added to the pa
 'limitreport-expensivefunctioncount'       => 'Expensive parser function count',
 'limitreport-expensivefunctioncount-value' => '$1/$2', # only translate this message to other languages if you have to change it
 
+# ExpandTemplates
+'expandtemplates'                  => 'Expand templates',
+'expand_templates_intro'           => 'This special page takes text and expands all templates in it recursively.
+It also expands supported parser functions like
+<code><nowiki>{{</nowiki>#language:…}}</code> and variables like
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+In fact, it expands pretty much everything in double-braces.',
+'expand_templates_title'           => 'Context title, for {{FULLPAGENAME}}, etc.:',
+'expand_templates_input'           => 'Input text:',
+'expand_templates_output'          => 'Result',
+'expand_templates_xml_output'      => 'XML output',
+'expand_templates_ok'              => 'OK',
+'expand_templates_remove_comments' => 'Remove comments',
+'expand_templates_remove_nowiki'   => 'Suppress <nowiki> tags in result',
+'expand_templates_generate_xml'    => 'Show XML parse tree',
+'expand_templates_preview'         => 'Preview',
 );
index cc4e418..8f6dcfa 100644 (file)
@@ -95,7 +95,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Malbona_titolo' ),
        'Blankpage'                 => array( 'Malplena_paĝo' ),
        'Block'                     => array( 'Forbari_IP-adreson' ),
-       'Blockme'                   => array( 'Forbari_min' ),
        'Booksources'               => array( 'Citoj_el_libroj' ),
        'BrokenRedirects'           => array( 'Rompitaj_alidirektiloj' ),
        'Categories'                => array( 'Kategorioj' ),
@@ -107,10 +106,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Krei_konton' ),
        'Deadendpages'              => array( 'Paĝoj_sen_interna_ligilo' ),
        'DeletedContributions'      => array( 'Forigitaj_kontribuoj' ),
-       'Disambiguations'           => array( 'Apartigiloj' ),
        'DoubleRedirects'           => array( 'Duoblaj_alidirektiloj' ),
        'EditWatchlist'             => array( 'Redakti_atentaron' ),
        'Emailuser'                 => array( 'Retpoŝti_uzanton' ),
+       'ExpandTemplates'           => array( 'Malfaldi_ŝablonon' ),
        'Export'                    => array( 'Elporti', 'Eksporti' ),
        'Fewestrevisions'           => array( 'Plej_malmultaj_revizioj' ),
        'FileDuplicateSearch'       => array( 'Serĉi_pri_duoblaj_dosieroj' ),
@@ -581,7 +580,7 @@ $1',
 'helppage' => 'Help:Enhavo',
 'mainpage' => 'Ĉefpaĝo',
 'mainpage-description' => 'Ĉefpaĝo',
-'policy-url' => 'Project:Konsiletoj',
+'policy-url' => 'Project:Regularo',
 'portal' => 'Komunuma portalo',
 'portal-url' => 'Project:Komunuma portalo',
 'privacy' => 'Regularo pri respekto de la privateco',
@@ -597,8 +596,6 @@ $1',
 'ok' => 'Ek!',
 'retrievedfrom' => 'Elŝutita el  "$1"',
 'youhavenewmessages' => 'Por vi estas $1 ($2).',
-'newmessageslink' => 'novaj mesaĝoj',
-'newmessagesdifflink' => 'ŝanĝoj kompare kun antaŭlasta versio',
 'youhavenewmessagesfromusers' => 'Riceviĝis $1 de {{PLURAL:$3|alia uzanto|$3 uzantoj}} ($2).',
 'youhavenewmessagesmanyusers' => 'Riceviĝis $1 de multaj uzantoj ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|nova mesaĝo|novaj mesaĝoj}}',
@@ -1376,7 +1373,7 @@ Detaloj troveblos en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}
 # Search results
 'searchresults' => 'Serĉrezultoj',
 'searchresults-title' => 'Serĉrezultoj por "$1"',
-'searchresulttext' => 'Por pliaj informoj kiel priserĉi la {{SITENAME}}n, vidu [[{{MediaWiki:Helppage}}|serĉi en {{SITENAME}}]].',
+'searchresulttext' => 'Por pliaj informoj pri serĉado en {{SITENAME}} vidu [[{{MediaWiki:Helppage}}|{{int:help}}]]..',
 'searchsubtitle' => 'Vi serĉis "\'\'\'[[$1]]\'\'\'" ([[Special:Prefixindex/$1|ĉiuj paĝoj komence de "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|ĉiuj paĝoj ligantaj al "$1"]])',
 'searchsubtitleinvalid' => 'Serĉmendo "$1"',
 'toomanymatches' => 'Tro da serĉo-trafoj estis trovitaj; bonvolu provi malsaman serĉomendon.',
@@ -1441,7 +1438,6 @@ indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> a
 'preferences' => 'Preferoj',
 'mypreferences' => 'Preferoj',
 'prefs-edits' => 'Nombro de redaktoj:',
-'prefsnologin' => 'Ne jam salutis!',
 'changepassword' => 'Ŝanĝi pasvorton',
 'prefs-skin' => 'Etoso',
 'skin-preview' => 'Antaŭrigardo',
@@ -1730,6 +1726,7 @@ indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> a
 'recentchanges-label-minor' => 'Ĉi tiu estas eta redakto',
 'recentchanges-label-bot' => 'Ĉi tiu redakto estis farita per roboto.',
 'recentchanges-label-unpatrolled' => 'Ĉi tiu redakto ne jam estis patrolata.',
+'recentchanges-legend-newpage' => '$1 - nova paĝo',
 'rcnote' => "Jen la {{PLURAL:$1|lasta '''1''' ŝanĝo|lastaj '''$1''' ŝanĝoj}} dum la {{PLURAL:$2|lasta tago|lastaj '''$2''' tagoj}}, ekde $5, $4.",
 'rcnotefrom' => "Jen la ŝanĝoj ekde '''$2''' (lastaj ĝis '''$1''').",
 'rclistfrom' => 'Montri novajn ŝanĝojn ekde "$1"',
@@ -2952,9 +2949,9 @@ se vi volus kontribui al la komuna MediaWiki-asimilado.',
 'allmessagesnotsupportedDB' => '{{ns:special}}:Allmessages ne subtenata ĉar la variablo wgUseDatabaseMessages estas malkonektita.',
 'allmessages-filter-legend' => 'Filtri',
 'allmessages-filter' => 'Filtri laŭ ŝanĝada stato',
-'allmessages-filter-unmodified' => 'Neŝanĝitaĵoj',
+'allmessages-filter-unmodified' => 'Neŝanĝitaj',
 'allmessages-filter-all' => 'Ĉio',
-'allmessages-filter-modified' => 'Ŝanĝitaĵoj',
+'allmessages-filter-modified' => 'Ŝanĝitaj',
 'allmessages-prefix' => 'Filtri laŭ prefikso:',
 'allmessages-language' => 'Lingvo:',
 'allmessages-filter-submit' => 'Ek!',
@@ -4173,4 +4170,20 @@ Aŭ vi povas uzi la facilan formularon sube. Via komento estos aldonita al la pa
 'duration-centuries' => '$1 {{PLURAL:$1|jarcento|jarcentoj}}',
 'duration-millennia' => '$1 {{PLURAL:$1|jarmilo|jarmiloj}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Ampleksigi ŝablonojn',
+'expand_templates_intro' => 'Ĉi tiu speciala paĝo traktas tekston kaj ampleksigas ĉiujn ŝablonojn en ĝi rekursie.
+Ĝi ankaŭ ampleksigas sintaksajn funkciojn kiel
+<code><nowiki>{{</nowiki>#language:…}}</code> kaj variablojn kiel
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. Fakte preskaŭ iujn ajn en duoblaj krampoj.',
+'expand_templates_title' => 'Kunteksta titolo, por {{FULLPAGENAME}}, ktp.:',
+'expand_templates_input' => 'Enigita teksto:',
+'expand_templates_output' => 'Rezulto',
+'expand_templates_xml_output' => 'XML-eligo',
+'expand_templates_ok' => 'Ek!',
+'expand_templates_remove_comments' => 'Forigi komentojn',
+'expand_templates_remove_nowiki' => 'Nuligi <nowiki> etikedojn en rezulto',
+'expand_templates_generate_xml' => 'Montri XML-sintaksarbon',
+'expand_templates_preview' => 'Antaŭrigardo',
+
 );
index e9d8d4a..fa6ef2d 100644 (file)
@@ -139,12 +139,12 @@ $namespaceGenderAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'UsuariosActivos' ),
        'Allmessages'               => array( 'TodosLosMensajes' ),
+       'AllMyUploads'              => array( 'TodasMisSubidas', 'TodosMisArchivos' ),
        'Allpages'                  => array( 'Todas', 'Todas_las_páginas' ),
        'Ancientpages'              => array( 'PáginasAntiguas', 'Páginas_antiguas' ),
        'Badtitle'                  => array( 'Título_incorrecto' ),
-       'Blankpage'                 => array( 'BlanquearPágina', 'Blanquear_página' ),
+       'Blankpage'                 => array( 'PáginaEnBlanco', 'BlanquearPágina', 'Blanquear_página', 'Página_en_blanco' ),
        'Block'                     => array( 'Bloquear' ),
-       'Blockme'                   => array( 'Bloquearme' ),
        'Booksources'               => array( 'FuentesDeLibros', 'Fuentes_de_libros' ),
        'BrokenRedirects'           => array( 'RedireccionesRotas', 'Redirecciones_rotas' ),
        'Categories'                => array( 'Categorías' ),
@@ -156,10 +156,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Crear_una_cuenta', 'CrearCuenta' ),
        'Deadendpages'              => array( 'PáginasSinSalida', 'Páginas_sin_salida' ),
        'DeletedContributions'      => array( 'ContribucionesBorradas', 'Contribuciones_Borradas' ),
-       'Disambiguations'           => array( 'Desambiguaciones', 'Desambiguación' ),
        'DoubleRedirects'           => array( 'RedireccionesDobles', 'Redirecciones_dobles' ),
        'EditWatchlist'             => array( 'EditarSeguimiento' ),
        'Emailuser'                 => array( 'Enviar_correo_electrónico', 'MandarEmailUsuario' ),
+       'ExpandTemplates'           => array( 'Sustituir_plantillas', 'Sustituidor_de_plantillas', 'Expandir_plantillas' ),
        'Export'                    => array( 'Exportar' ),
        'Fewestrevisions'           => array( 'MenosEdiciones', 'Menos_ediciones' ),
        'FileDuplicateSearch'       => array( 'BuscarArchivosDuplicados', 'Buscar_archivos_duplicados' ),
@@ -201,9 +201,12 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'PáginasProtegidas', 'Páginas_protegidas' ),
        'Protectedtitles'           => array( 'TítulosProtegidos', 'Títulos_protegidos' ),
        'Randompage'                => array( 'Aleatoria', 'Aleatorio', 'Página_aleatoria' ),
+       'RandomInCategory'          => array( 'Aleatorio_en_categoría' ),
        'Randomredirect'            => array( 'RedirecciónAleatoria', 'Redirección_aleatoria' ),
        'Recentchanges'             => array( 'CambiosRecientes', 'Cambios_recientes' ),
        'Recentchangeslinked'       => array( 'CambiosEnEnlazadas', 'Cambios_en_enlazadas' ),
+       'Redirect'                  => array( 'Redirigir' ),
+       'ResetTokens'               => array( 'ReestablecerClaves' ),
        'Revisiondelete'            => array( 'BorrarRevisión', 'Borrar_revisión' ),
        'Search'                    => array( 'Buscar' ),
        'Shortpages'                => array( 'PáginasCortas', 'Páginas_cortas' ),
@@ -222,6 +225,7 @@ $specialPageAliases = array(
        'Unusedtemplates'           => array( 'PlantillasSinUso', 'Plantillas_sin_uso' ),
        'Unwatchedpages'            => array( 'PáginasSinVigilar', 'Páginas_sin_vigilar' ),
        'Upload'                    => array( 'SubirArchivo', 'Subir_archivo' ),
+       'UploadStash'               => array( 'ArchivosEscondidos', 'FicherosEscondidos' ),
        'Userlogin'                 => array( 'Entrar', 'Entrada_del_usuario' ),
        'Userlogout'                => array( 'Salida_del_usuario', 'Salir' ),
        'Userrights'                => array( 'PermisosUsuarios', 'Permisos_de_usuarios' ),
@@ -284,6 +288,8 @@ $magicWords = array(
        'fullpagenamee'             => array( '1', 'NOMBRECOMPLETODEPAGINAC', 'NOMBRECOMPLETODEPÁGINAC', 'FULLPAGENAMEE' ),
        'subpagename'               => array( '1', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ),
        'subpagenamee'              => array( '1', 'NOMBREDESUBPAGINAC', 'NOMBREDESUBPÁGINAC', 'SUBPAGENAMEE' ),
+       'rootpagename'              => array( '1', 'NOMBREDEPAGINARAIZ', 'NOMBREDEPÁGINARAÍZ', 'ROOTPAGENAME' ),
+       'rootpagenamee'             => array( '1', 'NOMBREDEPAGINARAIZC', 'NOMBREDEPÁGINARAÍZC', 'ROOTPAGENAMEE' ),
        'basepagename'              => array( '1', 'NOMBREDEPAGINABASE', 'NOMBREDEPÁGINABASE', 'BASEPAGENAME' ),
        'basepagenamee'             => array( '1', 'NOMBREDEPAGINABASEC', 'NOMBREDEPÁGINABASEC', 'BASEPAGENAMEE' ),
        'talkpagename'              => array( '1', 'NOMBREDEPÁGINADEDISCUSIÓN', 'NOMBREDEPAGINADEDISCUSION', 'NOMBREDEPAGINADISCUSION', 'NOMBREDEPÁGINADISCUSIÓN', 'TALKPAGENAME' ),
@@ -384,10 +390,10 @@ $messages = array(
 'tog-extendwatchlist' => 'Expandir la lista de seguimiento a todos los cambios, no sólo a los más recientes',
 'tog-usenewrc' => 'Agrupar los cambios por página en los cambios recientes y en la lista de seguimiento (requiere JavaScript)',
 'tog-numberheadings' => 'Numerar automáticamente los encabezados',
-'tog-showtoolbar' => 'Mostrar la barra de edición (requiere JavaScript)',
-'tog-editondblclick' => 'Editar las páginas con doble clic (requiere JavaScript)',
-'tog-editsection' => 'Habilitar la edición de secciones mediante el enlace [editar]',
-'tog-editsectiononrightclick' => 'Habilitar la edición de secciones pulsando el botón derecho en los títulos de secciones (requiere JavaScript)',
+'tog-showtoolbar' => 'Mostrar la barra de edición',
+'tog-editondblclick' => 'Editar las páginas al pulsar dos veces en ellos con el ratón',
+'tog-editsection' => 'Activar la edición de secciones mediante el enlace [editar]',
+'tog-editsectiononrightclick' => 'Activar la edición de secciones pulsando el botón derecho en los títulos de secciones',
 'tog-showtoc' => 'Mostrar el índice (para páginas con más de 3 encabezados)',
 'tog-rememberpassword' => 'Recordar mi nombre de usuario y contraseña entre sesiones en este navegador (por un máximo de $1 {{PLURAL:$1|día|días}})',
 'tog-watchcreations' => 'Añadir las páginas que cree y los archivos que suba a mi lista de seguimento',
@@ -405,7 +411,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Mostrar el número de usuarios que la vigilan',
 'tog-oldsig' => 'Firma actual:',
 'tog-fancysig' => 'Tratar la firma como wikitexto (sin un enlace automático)',
-'tog-uselivepreview' => 'Usar previsualización en vivo (requiere JavaScript) (experimental)',
+'tog-uselivepreview' => 'Usar previsualización dinámica (experimental)',
 'tog-forceeditsummary' => 'Avisarme cuando grabe la página sin introducir un resumen de edición',
 'tog-watchlisthideown' => 'Ocultar mis ediciones en la lista de seguimiento',
 'tog-watchlisthidebots' => 'Ocultar las ediciones de bots en la lista de seguimiento',
@@ -428,7 +434,7 @@ $messages = array(
 # Font style option in Special:Preferences
 'editfont-style' => 'Estilo de tipografía del área de edición:',
 'editfont-default' => 'Predeterminado del navegador',
-'editfont-monospace' => 'Tipografía monoespaciada',
+'editfont-monospace' => 'Tipo de letra monoespaciado',
 'editfont-sansserif' => 'Tipo de letra de palo seco',
 'editfont-serif' => 'Tipo de letra con serifas',
 
@@ -443,7 +449,7 @@ $messages = array(
 'sun' => 'dom',
 'mon' => 'lun',
 'tue' => 'mar',
-'wed' => 'mie',
+'wed' => 'mié',
 'thu' => 'jue',
 'fri' => 'vie',
 'sat' => 'sab',
@@ -475,7 +481,7 @@ $messages = array(
 'feb' => 'feb',
 'mar' => 'mar',
 'apr' => 'abr',
-'may' => 'mayo',
+'may' => 'may',
 'jun' => 'jun',
 'jul' => 'jul',
 'aug' => 'ago',
@@ -498,10 +504,10 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Categoría|Categorías}}',
-'category_header' => 'Artículos en la categoría «$1»',
+'category_header' => 'Páginas en la categoría «$1»',
 'subcategories' => 'Subcategorías',
 'category-media-header' => 'Archivos multimedia en la categoría «$1»',
-'category-empty' => "''La categoría no contiene actualmente ningún artículo o archivo multimedia.''",
+'category-empty' => "''La categoría no contiene ninguna página o archivo.''",
 'hidden-categories' => '{{PLURAL:$1|Categoría escondida|Categorías escondidas}}',
 'hidden-category-category' => 'Categorías ocultas',
 'category-subcat-count' => '{{PLURAL:$2|Esta categoría solo contiene la siguiente subcategoría.|Esta categoría contiene {{PLURAL:$1|la siguiente subcategoría|las siguientes $1 subcategorías}}, de un total de $2.}}',
@@ -511,8 +517,8 @@ $messages = array(
 'category-file-count' => '{{PLURAL:$2|Esta categoría contiene solamente el siguiente archivo.|{{PLURAL:$1|El siguiente archivo pertenece|Los siguientes $1 archivos pertenecen}} a esta categoría, de un total de $2.}}',
 'category-file-count-limited' => '{{PLURAL:$1|El siguiente fichero pertenece|Los siguientes $1 ficheros pertenecen}} a esta categoría.',
 'listingcontinuesabbrev' => 'cont.',
-'index-category' => 'Páginas indexadas',
-'noindex-category' => 'Páginas no indexadas',
+'index-category' => 'Páginas indizadas',
+'noindex-category' => 'Páginas no indizadas',
 'broken-file-category' => 'Páginas con enlaces rotos a archivos',
 
 'about' => 'Acerca de',
@@ -521,7 +527,7 @@ $messages = array(
 'cancel' => 'Cancelar',
 'moredotdotdot' => 'Más...',
 'morenotlisted' => 'Esta lista no está completa.',
-'mypage' => 'Mi página',
+'mypage' => 'Página',
 'mytalk' => 'Discusión',
 'anontalk' => 'Discusión para esta IP',
 'navigation' => 'Navegación',
@@ -535,7 +541,7 @@ $messages = array(
 'qbmyoptions' => 'Mis páginas',
 'qbspecialpages' => 'Páginas especiales',
 'faq' => 'Preguntas más frecuentes',
-'faqpage' => 'Project:FAQ',
+'faqpage' => 'Project:P+F',
 
 # Vector skin
 'vector-action-addsection' => 'Nueva sección',
@@ -549,7 +555,7 @@ $messages = array(
 'vector-view-edit' => 'Editar',
 'vector-view-history' => 'Ver historial',
 'vector-view-view' => 'Leer',
-'vector-view-viewsource' => 'Ver fuente',
+'vector-view-viewsource' => 'Ver código',
 'actions' => 'Acciones',
 'namespaces' => 'Espacios de nombres',
 'variants' => 'Variantes',
@@ -589,7 +595,7 @@ $messages = array(
 'talkpagelinktext' => 'Discusión',
 'specialpage' => 'Página especial',
 'personaltools' => 'Herramientas personales',
-'postcomment' => 'Nueva sección',
+'postcomment' => 'Sección nueva',
 'articlepage' => 'Ver artículo',
 'talk' => 'Discusión',
 'views' => 'Vistas',
@@ -630,7 +636,7 @@ $1',
 'disclaimers' => 'Aviso legal',
 'disclaimerpage' => 'Project:Limitación general de responsabilidad',
 'edithelp' => 'Ayuda de edición',
-'helppage' => 'Help:Contenidos',
+'helppage' => 'Help:Contenido',
 'mainpage' => 'Página principal',
 'mainpage-description' => 'Página principal',
 'policy-url' => 'Project:Políticas',
@@ -649,32 +655,30 @@ $1',
 'ok' => 'Aceptar',
 'retrievedfrom' => 'Obtenido de «$1»',
 'youhavenewmessages' => 'Tienes $1 ($2).',
-'newmessageslink' => 'mensajes nuevos',
-'newmessagesdifflink' => 'última modificación',
 'youhavenewmessagesfromusers' => 'Tienes $1 de {{PLURAL:$3|otro usuario|$3 usuarios}} ($2).',
 'youhavenewmessagesmanyusers' => 'Tienes $1 de muchos usuarios ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|un nuevo mensaje|mensajes nuevos}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|última modificación|últimos cambios}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un mensaje nuevo|999=mensajes nuevos}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|último cambio|999=últimos cambios}}',
 'youhavenewmessagesmulti' => 'Tienes mensajes nuevos en $1',
 'editsection' => 'editar',
 'editold' => 'editar',
-'viewsourceold' => 'ver código fuente',
+'viewsourceold' => 'ver código',
 'editlink' => 'modificar',
-'viewsourcelink' => 'ver fuente',
+'viewsourcelink' => 'ver código',
 'editsectionhint' => 'Editar sección: $1',
 'toc' => 'Contenido',
 'showtoc' => 'mostrar',
 'hidetoc' => 'ocultar',
-'collapsible-collapse' => 'Ocultar',
-'collapsible-expand' => 'Mostrar',
+'collapsible-collapse' => 'Contraer',
+'collapsible-expand' => 'Expandir',
 'thisisdeleted' => '¿Ver o restaurar $1?',
-'viewdeleted' => '¿Deseas ver $1?',
+'viewdeleted' => '¿Quieres ver $1?',
 'restorelink' => '{{PLURAL:$1|una edición borrada|$1 ediciones borradas}}',
-'feedlinks' => 'Sindicación:',
-'feed-invalid' => 'Tipo de subscripción a sindicación de noticias inválida.',
-'feed-unavailable' => 'Las fuentes web no están disponibles',
-'site-rss-feed' => '$1 Fuente RSS',
-'site-atom-feed' => 'Feed Atom de $1',
+'feedlinks' => 'Canal:',
+'feed-invalid' => 'El tipo de canal de suscripción no es válido.',
+'feed-unavailable' => 'Los canales de sindicación no están disponibles',
+'site-rss-feed' => 'Canal RSS de $1',
+'site-atom-feed' => 'Canal Atom de $1',
 'page-rss-feed' => 'Canal RSS «$1»',
 'page-atom-feed' => 'Canal Atom «$1»',
 'red-link-title' => '$1 (la página no existe)',
@@ -684,7 +688,7 @@ $1',
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Página',
 'nstab-user' => 'Página {{GENDER:{{ROOTPAGENAME}}|del usuario|de la usuaria}}',
-'nstab-media' => 'Media',
+'nstab-media' => 'Multimedia',
 'nstab-special' => 'Página especial',
 'nstab-project' => 'Página del proyecto',
 'nstab-image' => 'Archivo',
@@ -694,8 +698,8 @@ $1',
 'nstab-category' => 'Categoría',
 
 # Main script and global functions
-'nosuchaction' => 'No existe tal acción',
-'nosuchactiontext' => 'La acción especificada en la dirección es inválida.
+'nosuchaction' => 'No existe esa acción',
+'nosuchactiontext' => 'La acción especificada en la dirección no es válida.
 Es posible que hayas escrito mal la URL o que hayas seguido un enlace incorrecto. Esto también podría indicar un error en el software utilizado en {{SITENAME}}.',
 'nosuchspecialpage' => 'No existe esa página especial',
 'nospecialpagetext' => '<strong>Ha solicitado una página especial inexistente.</strong>
@@ -754,9 +758,9 @@ Puede que contenga uno o más caracteres que no se pueden usar en los títulos.'
 'wrong_wfQuery_params' => 'Parámetros incorrectos para wfQuery()<br />
 Función: $1<br />
 Consulta: $2',
-'viewsource' => 'Ver fuente',
-'viewsource-title' => 'Ver el código fuente de «$1»',
-'actionthrottled' => 'Acción bloqueada',
+'viewsource' => 'Ver código',
+'viewsource-title' => 'Ver el código de «$1»',
+'actionthrottled' => 'Acción limitada',
 'actionthrottledtext' => "Como medida contra el ''spam'', la acción que estás realizando está limitada a un número determinado de veces en un periodo corto de tiempo, y has excedido ese límite. Por favor inténtalo de nuevo en unos minutos.",
 'protectedpagetext' => 'Esta página ha sido protegida para evitar su edición u otras acciones.',
 'viewsourcetext' => 'Puedes ver y copiar el código fuente de esta página:',
@@ -783,7 +787,8 @@ El administrador que lo ha bloqueado ofrece esta explicación: "$3".',
 'invalidtitle-knownnamespace' => 'Título no válido con el espacio de nombres "$2" y el texto "$3"',
 'invalidtitle-unknownnamespace' => 'Título no válido con número de espacio de nombres desconocido  $1  y el texto "$2"',
 'exception-nologin' => 'No has iniciado sesión',
-'exception-nologin-text' => 'Esta página o acción requiere que inicies sesión en este wiki.',
+'exception-nologin-text' => '[[Special:Userlogin|Inicia sesión]] para acceder a esta página o acción.',
+'exception-nologin-text-manual' => 'Necesitas $1 para acceder a esta página o acción.',
 
 # Virus scanner
 'virus-badscanner' => "Error de configuración: Antivirus desconocido: ''$1''",
@@ -827,7 +832,7 @@ No olvides personalizar tus [[Special:Preferences|preferencias de {{SITENAME}}]]
 'nologinlink' => 'Crear una cuenta',
 'createaccount' => 'Crear una cuenta',
 'gotaccount' => '¿Ya tienes una cuenta? $1.',
-'gotaccountlink' => 'Entrar',
+'gotaccountlink' => 'Iniciar sesión',
 'userlogin-resetlink' => '¿Olvidaste tus datos de acceso?',
 'userlogin-resetpassword-link' => '¿Has olvidado tu contraseña?',
 'helplogin-url' => 'Help:Inicio de sesión',
@@ -850,13 +855,13 @@ Usa el formulario de abajo para iniciar sesión como otro usuario.',
 'createacct-imgcaptcha-ph' => 'Escribe el texto de arriba',
 'createacct-submit' => 'Crea tu cuenta',
 'createacct-another-submit' => 'Crear otra cuenta',
-'createacct-benefit-heading' => '{{SITENAME}} lo construye gente como tú.',
+'createacct-benefit-heading' => '{{SITENAME}} es hecha por gente como tú.',
 'createacct-benefit-body1' => '{{PLURAL:$1|edición|ediciones}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|página|páginas}}',
 'createacct-benefit-body3' => '{{PLURAL:$1|colaborador reciente|colaboradores recientes}}',
 'badretype' => 'Las contraseñas no coinciden.',
 'userexists' => 'El nombre de usuario indicado ya está en uso.
-Por favor escoge un nombre diferente.',
+Elige un nombre diferente.',
 'loginerror' => 'Error de inicio de sesión',
 'createacct-error' => 'Error al crear la cuenta',
 'createaccounterror' => 'No se pudo crear la cuenta: $1',
@@ -911,7 +916,7 @@ Hasta que lo hagas, las siguientes funciones no estarán disponibles.',
 Por favor, escribe una dirección en el formato adecuado o deja el campo en blanco.',
 'cannotchangeemail' => 'Las direcciones de la correo electrónico de las cuentas de usuario no puedes cambiarse en esta wiki.',
 'emaildisabled' => 'Este sitio no puede enviar mensajes de correo electrónico.',
-'accountcreated' => 'Cuenta creada',
+'accountcreated' => 'Se ha creado la cuenta',
 'accountcreatedtext' => 'La cuenta de usuario de [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) ha sido creada.',
 'createaccount-title' => 'Creación de cuenta para {{SITENAME}}',
 'createaccount-text' => 'Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2».
@@ -1038,16 +1043,16 @@ Deberías hacerlo si accidentalmente la has compartido con alguien o si su cuent
 'subject' => 'Asunto/encabezado:',
 'minoredit' => 'Esta es una edición menor',
 'watchthis' => 'Vigilar esta página',
-'savearticle' => 'Grabar la página',
+'savearticle' => 'Guardar la página',
 'preview' => 'Previsualizar',
 'showpreview' => 'Mostrar previsualización',
-'showlivepreview' => 'Previsualización inmediata',
-'showdiff' => 'Mostrar cambios',
+'showlivepreview' => 'Previsualización dinámica',
+'showdiff' => 'Mostrar los cambios',
 'anoneditwarning' => "'''Aviso:''' No has iniciado sesión con una cuenta de usuario.
 Tu dirección IP se almacenará en el historial de ediciones de la página.",
 'anonpreviewwarning' => "''No has iniciado sesión con una cuenta de usuario. Al guardar los cambios se almacenará tu dirección IP en el historial de edición de la página.''",
 'missingsummary' => "'''Atención:''' No has escrito un resumen de edición. Si haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
-'missingcommenttext' => 'Por favor, introduce un texto debajo.',
+'missingcommenttext' => 'Escribe un comentario a continuación.',
 'missingcommentheader' => "'''Recordatorio:''' No has escrito un título para este comentario. Si haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
 'summary-preview' => 'Previsualización del resumen:',
 'subject-preview' => 'Previsualización del tema/título:',
@@ -1090,7 +1095,7 @@ Quizá ha sido movida o borrada mientras visitabas la página.',
 'loginreqtitle' => 'Es necesario iniciar sesión',
 'loginreqlink' => 'iniciar sesión',
 'loginreqpagetext' => 'Debes $1 para ver otras páginas.',
-'accmailtitle' => 'La contraseña ha sido enviada.',
+'accmailtitle' => 'Se ha enviado la contraseña',
 'accmailtext' => 'Se ha enviado a $2 una contraseña generada aleatoriamente para [[User talk:$1|$1]].
 
 La contraseña para esta nueva cuenta puede cambiarse en [[Special:ChangePassword|la página destinada para ello]] después de haber iniciado sesión.',
@@ -1147,10 +1152,10 @@ Si el problema persiste, [[Special:UserLogout|cierra la sesión]] y vuelve a ide
 Se rechazó la edición para evitar que el texto de la página se corrompa.
 Esto sucede en ocasiones cuando se usa un servicio de proxy anónimo defectuoso.'''",
 'edit_form_incomplete' => "'''Algunas partes del formulario de edición no llegaron al servidor, comprueba que tus ediciones están intactas e inténtalo de nuevo'''.",
-'editing' => 'Editando $1',
-'creating' => 'Creando la página $1',
-'editingsection' => 'Editando $1 (sección)',
-'editingcomment' => 'Editando $1 (nueva sección)',
+'editing' => 'Editar $1',
+'creating' => 'Crear la página $1',
+'editingsection' => 'Editar $1 (sección)',
+'editingcomment' => 'Editar $1 (sección nueva)',
 'editconflict' => 'Conflicto de edición: $1',
 'explainconflict' => "Alguien más ha cambiado esta página desde que empezaste a editarla.
 El área de texto superior contiene el texto de la página como existe actualmente.
@@ -1279,8 +1284,8 @@ Leyenda: '''(act)''' = diferencias con la versión actual,
 '''(ant)''' = diferencias con la versión anterior, '''m''' = edición menor",
 'history-fieldset-title' => 'Buscar en el historial',
 'history-show-deleted' => 'Solo ediciones ocultadas',
-'histfirst' => 'Primeras',
-'histlast' => 'Ã\9altimas',
+'histfirst' => 'primeras',
+'histlast' => 'últimas',
 'historysize' => '({{PLURAL:$1|1 byte|$1 bytes}})',
 'historyempty' => '(vacío)',
 
@@ -1329,10 +1334,10 @@ Aún tiene la posibilidad de verla; puede ampliar los detalles en el [{{fullurl:
 'revdelete-nooldid-text' => 'No se ha especificado una revisión o revisiones destino sobre las que realizar esta función.',
 'revdelete-nologtype-title' => 'ningún nombre dado',
 'revdelete-nologtype-text' => 'No has especificado ningún nombre para ejecutar esta acción.',
-'revdelete-nologid-title' => 'Entrada de registro inválida',
+'revdelete-nologid-title' => 'Entrada de registro no válida',
 'revdelete-nologid-text' => 'Tampoco has especificado un objetivo de eventos para ejecutar esta función o la entrada especificada no existe.',
-'revdelete-no-file' => 'El fichero especificado no existe.',
-'revdelete-show-file-confirm' => '¿Realmente deseas ver la revisión borrada del archivo "<nowiki>$1</nowiki>" del $2 a las $3?',
+'revdelete-no-file' => 'El archivo especificado no existe.',
+'revdelete-show-file-confirm' => '¿Quieres ver la revisión borrada del archivo «<nowiki>$1</nowiki>» del $2 a las $3?',
 'revdelete-show-file-submit' => 'Sí',
 'revdelete-selected' => "'''{{PLURAL:$2|Revisión seleccionada|Revisiones seleccionadas}} de [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Seleccionado un evento|Seleccionados eventos}}:'''",
@@ -1351,8 +1356,8 @@ Otros administradores de {{SITENAME}} aún podrán acceder al contenido oculto y
 'revdelete-hide-user' => 'Nombre/IP del editor',
 'revdelete-hide-restricted' => 'Suprimir datos a los administradores así como al resto',
 'revdelete-radio-same' => '(no cambiar)',
-'revdelete-radio-set' => 'Visible',
-'revdelete-radio-unset' => 'Oculto',
+'revdelete-radio-set' => 'Oculta',
+'revdelete-radio-unset' => 'Visible',
 'revdelete-suppress' => 'Suprimir datos a los administradores así como al resto',
 'revdelete-unsuppress' => 'Eliminar restricciones de revisiones restauradas',
 'revdelete-log' => 'Motivo:',
@@ -1383,9 +1388,9 @@ No tiene acceso a él.',
 ** Comentario o información personal inapropiados
 ** Nombre de usuario inapropiado
 ** Información potencialmente injuriosa o calumniante',
-'revdelete-otherreason' => 'Otra/adicional razón:',
-'revdelete-reasonotherlist' => 'Otra razón',
-'revdelete-edit-reasonlist' => 'Editar razones de borrado',
+'revdelete-otherreason' => 'Otro motivo:',
+'revdelete-reasonotherlist' => 'Otro motivo',
+'revdelete-edit-reasonlist' => 'Editar motivos de borrado',
 'revdelete-offender' => 'Autor de la revisión:',
 
 # Suppression log
@@ -1416,7 +1421,7 @@ Nota que usar los enlaces de navegación borrará las selecciones de esta column
 'mergehistory-autocomment' => 'Fusionando [[:$1]] en [[:$2]]',
 'mergehistory-comment' => 'Fusionando [[:$1]] en [[:$2]]: $3',
 'mergehistory-same-destination' => 'Las páginas de origen y destino no pueden ser la misma',
-'mergehistory-reason' => 'Razón:',
+'mergehistory-reason' => 'Motivo:',
 
 # Merge log
 'mergelog' => 'Registro de fusiones',
@@ -1509,12 +1514,12 @@ Mientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índice
 'preferences' => 'Preferencias',
 'mypreferences' => 'Preferencias',
 'prefs-edits' => 'Cantidad de ediciones:',
-'prefsnologin' => 'No has iniciado sesión',
+'prefsnologintext2' => 'Necesitas $1 para definir las preferencias del usuario.',
 'changepassword' => 'Cambiar contraseña',
 'prefs-skin' => 'Apariencia',
 'skin-preview' => 'Previsualizar',
 'datedefault' => 'Sin preferencia',
-'prefs-beta' => 'Características de prueba',
+'prefs-beta' => 'Funciones en pruebas',
 'prefs-datetime' => 'Fecha y hora',
 'prefs-labs' => 'Características de los laboratorios',
 'prefs-user-pages' => 'Páginas de usuario',
@@ -1524,7 +1529,7 @@ Mientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índice
 'prefs-watchlist-days' => 'Número de días a mostrar en la lista de seguimiento:',
 'prefs-watchlist-days-max' => 'Máximo $1 {{PLURAL:$1|día|días}}',
 'prefs-watchlist-edits' => 'Número de ediciones a mostrar en la lista expandida:',
-'prefs-watchlist-edits-max' => 'Máximo: 1000',
+'prefs-watchlist-edits-max' => 'Cantidad máxima: 1000',
 'prefs-watchlist-token' => 'Ficha de lista de seguimiento:',
 'prefs-misc' => 'Miscelánea',
 'prefs-resetpass' => 'Cambiar contraseña',
@@ -1550,7 +1555,7 @@ Mientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índice
 Cualquier persona que la conozca podría leer tu lista, así que no la compartas.
 [[Special:ResetTokens|Pulsa aquí si necesitas restablecerla]].',
 'savedprefs' => 'Se han guardado tus preferencias.',
-'timezonelegend' => 'Zona horaria:',
+'timezonelegend' => 'Huso horario:',
 'localtime' => 'Hora local:',
 'timezoneuseserverdefault' => 'Usar la hora del servidor ($1)',
 'timezoneuseoffset' => 'Otra (especifica la diferencia horaria)',
@@ -1559,7 +1564,7 @@ Cualquier persona que la conozca podría leer tu lista, así que no la compartas
 'guesstimezone' => 'Rellenar a partir de la hora del navegador',
 'timezoneregion-africa' => 'África',
 'timezoneregion-america' => 'América',
-'timezoneregion-antarctica' => 'Antártica',
+'timezoneregion-antarctica' => 'Antártida',
 'timezoneregion-arctic' => 'Ártico',
 'timezoneregion-asia' => 'Asia',
 'timezoneregion-atlantic' => 'Océano Atlántico',
@@ -1588,13 +1593,13 @@ Esto no se puede deshacer.',
 'yourlanguage' => 'Idioma:',
 'yourvariant' => 'Variante lingüística del contenido:',
 'prefs-help-variant' => 'Tu variante u ortografía preferida para mostrar las páginas de contenido de este wiki.',
-'yournick' => 'Nueva firma:',
+'yournick' => 'Firma nueva:',
 'prefs-help-signature' => 'Los comentarios en páginas de discusión deberían firmarse con «<nowiki>~~~~</nowiki>», que se convertirá en tu firma con fecha y hora.',
 'badsig' => 'El código de tu firma no es válido; comprueba las etiquetas HTML.',
 'badsiglength' => 'Tu firma es muy larga.
 Debe contener un máximo de {{PLURAL:$1|un carácter|$1 caracteres}}.',
-'yourgender' => '¿Cómo prefieres ser descrito/a?',
-'gender-unknown' => 'Prefiero no especificar',
+'yourgender' => 'Sexo:',
+'gender-unknown' => 'Prefiero no especificarlo',
 'gender-male' => 'Masculino',
 'gender-female' => 'Femenino',
 'prefs-help-gender' => 'Opcional: empleado para que sea usado correctamente el género por parte del software. Esta información será pública.',
@@ -1681,7 +1686,7 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'right-createpage' => 'Crear páginas que no sean páginas de discusión',
 'right-createtalk' => 'Crear páginas de discusión',
 'right-createaccount' => 'Crear cuentas de usuario nuevas',
-'right-minoredit' => 'Marcar ediciones como «menores»',
+'right-minoredit' => 'Marcar ediciones como menores',
 'right-move' => 'Trasladar páginas',
 'right-move-subpages' => 'Trasladar páginas con sus subpáginas',
 'right-move-rootuserpages' => 'Trasladar páginas de usuario raíz',
@@ -1807,6 +1812,7 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'recentchanges-label-minor' => 'Esta es una edición menor',
 'recentchanges-label-bot' => 'Esta edición fue realizada por un robot',
 'recentchanges-label-unpatrolled' => 'Esta edición todavía no se ha patrullado',
+'recentchanges-legend-newpage' => '$1 - página nueva',
 'rcnote' => "Debajo {{PLURAL:$1|hay '''1''' cambio efectuado|están los últimos '''$1''' cambios efectuados}} en  {{PLURAL:$2|el último día|los últimos '''$2''' días}}, hasta el $4, $5.",
 'rcnotefrom' => 'A continuación se muestran los cambios desde <b>$2</b> (hasta <b>$1</b>).',
 'rclistfrom' => 'Mostrar nuevos cambios desde $1',
@@ -3210,6 +3216,7 @@ Puedes ver su código fuente',
 Permite añadir una razón al resumen de edición.',
 'tooltip-preferences-save' => 'Guardar las preferencias',
 'tooltip-summary' => 'Introduce un breve resumen',
+'interlanguage-link-title' => '$1 ($2)',
 
 # Stylesheets
 'common.css' => '/* El CSS colocado en esta página será aplicado a todas las apariencias */',
@@ -3274,6 +3281,7 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-length' => 'Longitud de la página (en bytes)',
 'pageinfo-article-id' => 'Identificador ID de la página',
 'pageinfo-language' => 'Idioma de la página',
+'pageinfo-content-model' => 'Modelo de contenido de la página',
 'pageinfo-robot-policy' => 'Indización por robots',
 'pageinfo-robot-index' => 'Permitido',
 'pageinfo-robot-noindex' => 'No permitido',
@@ -3362,7 +3370,7 @@ Ejecutarlo podría comprometer la seguridad de su equipo.",
 'svg-long-desc' => 'archivo SVG, nominalmente $1 × $2 píxeles, tamaño de archivo: $3',
 'svg-long-desc-animated' => 'Archivo SVG animado, nominalmente de $1 × $2 píxeles, tamaño del archivo: $3',
 'svg-long-error' => 'Archivo SVG no válido: $1',
-'show-big-image' => 'Resolución original',
+'show-big-image' => 'Archivo original',
 'show-big-image-preview' => 'Tamaño de esta previsualización: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Otra resolución|Otras resoluciones}}: $1.',
 'show-big-image-size' => '$1 × $2 píxeles',
@@ -3926,6 +3934,7 @@ Confirma que realmente quieres volver a crear esta página.",
 
 # Separators for various lists, etc.
 'comma-separator' => ',&#32;',
+'quotation-marks' => '«$1»',
 
 # Multipage image navigation
 'imgmultipageprev' => '← página anterior',
@@ -4057,7 +4066,7 @@ Has recibido [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Licencia Pública
 
 # Special:SpecialPages
 'specialpages' => 'Páginas especiales',
-'specialpages-note-top' => 'Leyenda:',
+'specialpages-note-top' => 'Leyenda',
 'specialpages-note' => '* Páginas especiales normales
 * <span class="mw-specialpagerestricted">Páginas especiales restringidas.</span>
 * <span class="mw-specialpagecached">Páginas especiales en caché (podrían ser obsoletas).</span>',
@@ -4101,6 +4110,7 @@ Has recibido [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Licencia Pública
 'tags-active-header' => '¿Activo?',
 'tags-hitcount-header' => 'Cambios etiquetados',
 'tags-active-yes' => 'Sí',
+'tags-active-no' => 'No',
 'tags-edit' => 'editar',
 'tags-hitcount' => '$1 {{PLURAL:$1|cambio|cambios}}',
 
@@ -4273,4 +4283,19 @@ En otro caso, puedes usar el siguiente formulario. Tu comentario será añadido
 'limitreport-expansiondepth' => 'Profundidad máxima de expansión',
 'limitreport-expensivefunctioncount' => 'Cuenta de la funcion expansiva del analizador',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Expandir plantillas',
+'expand_templates_intro' => 'Esta página especial toma un texto wiki y expande todas sus plantillas recursivamente.
+También expande las funciones sintácticas como <code><nowiki>{{</nowiki>#language:…}}</code>, y variables como
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. De hecho, expande casi cualquier cosa que esté entre llaves dobles.',
+'expand_templates_title' => 'Título de la página, útil para expandir <nowiki>{{PAGENAME}}</nowiki> o similares',
+'expand_templates_input' => 'Texto a expandir:',
+'expand_templates_output' => 'Resultado:',
+'expand_templates_xml_output' => 'Salida XML',
+'expand_templates_ok' => 'Aceptar',
+'expand_templates_remove_comments' => 'Eliminar comentarios (<!-- ... -->)',
+'expand_templates_remove_nowiki' => 'Suprimir <nowiki> etiquetas en resultado',
+'expand_templates_generate_xml' => 'Mostrar el árbol XML.',
+'expand_templates_preview' => 'Previsualización',
+
 );
index 0eea9d8..880ab63 100644 (file)
@@ -55,6 +55,7 @@ $namespaceAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'Teguskasutajad' ),
        'Allmessages'               => array( 'Kõik_sõnumid' ),
+       'AllMyUploads'              => array( 'Kõik_minu_failid' ),
        'Allpages'                  => array( 'Kõik_leheküljed' ),
        'Ancientpages'              => array( 'Vanimad_leheküljed' ),
        'Blankpage'                 => array( 'Tühi_leht' ),
@@ -70,10 +71,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Konto_loomine' ),
        'Deadendpages'              => array( 'Edasipääsuta_leheküljed' ),
        'DeletedContributions'      => array( 'Kustutatud_kaastöö' ),
-       'Disambiguations'           => array( 'Täpsustusleheküljed' ),
        'DoubleRedirects'           => array( 'Kahekordsed_ümbersuunamised' ),
        'EditWatchlist'             => array( 'Jälgimisloendi_redigeerimine' ),
        'Emailuser'                 => array( 'E-kirja_saatmine' ),
+       'ExpandTemplates'           => array( 'Mallide_hõrendamine' ),
        'Export'                    => array( 'Lehekülgede_eksport' ),
        'Fewestrevisions'           => array( 'Vähim_muudatusi' ),
        'FileDuplicateSearch'       => array( 'Faili_duplikaatide_otsimine', 'Otsi_faili_duplikaate' ),
@@ -97,6 +98,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIME_otsing' ),
        'Mostcategories'            => array( 'Enim_kategoriseeritud' ),
        'Mostimages'                => array( 'Kõige_kasutatumad_failid' ),
+       'Mostinterwikis'            => array( 'Enim_keelelinke' ),
        'Mostlinked'                => array( 'Kõige_viidatumad_leheküljed' ),
        'Mostlinkedcategories'      => array( 'Kõige_viidatumad_kategooriad' ),
        'Mostlinkedtemplates'       => array( 'Kõige_viidatumad_mallid' ),
@@ -117,9 +119,12 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Kaitstud_leheküljed' ),
        'Protectedtitles'           => array( 'Kaitstud_pealkirjad' ),
        'Randompage'                => array( 'Juhuslik_artikkel' ),
+       'RandomInCategory'          => array( 'Juhuslik_kategoorias' ),
        'Randomredirect'            => array( 'Juhuslik_ümbersuunamine' ),
        'Recentchanges'             => array( 'Viimased_muudatused' ),
        'Recentchangeslinked'       => array( 'Seotud_muudatused' ),
+       'Redirect'                  => array( 'Ümbersuunamine' ),
+       'ResetTokens'               => array( 'Lubade_lähtestamine' ),
        'Revisiondelete'            => array( 'Muudatuse_kustutamine', 'Kustuta_muudatus' ),
        'Search'                    => array( 'Otsimine', 'Otsi' ),
        'Shortpages'                => array( 'Lühikesed_leheküljed' ),
@@ -199,6 +204,7 @@ $magicWords = array(
        'pagenamee'                 => array( '1', 'LEHEKÜLJENIMI1', 'PAGENAMEE' ),
        'namespace'                 => array( '1', 'NIMERUUM', 'NAMESPACE' ),
        'namespacee'                => array( '1', 'NIMERUUM1', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'NIMERUUMINUMBER', 'NAMESPACENUMBER' ),
        'talkspace'                 => array( '1', 'ARUTELUNIMERUUM', 'TALKSPACE' ),
        'talkspacee'                => array( '1', 'ARUTELUNIMERUUM1', 'TALKSPACEE' ),
        'subjectspace'              => array( '1', 'SISUNIMERUUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
@@ -207,6 +213,8 @@ $magicWords = array(
        'fullpagenamee'             => array( '1', 'KOGULEHEKÜLJENIMI1', 'FULLPAGENAMEE' ),
        'subpagename'               => array( '1', 'ALAMLEHEKÜLJENIMI', 'SUBPAGENAME' ),
        'subpagenamee'              => array( '1', 'ALAMLEHEKÜLJENIMI1', 'SUBPAGENAMEE' ),
+       'rootpagename'              => array( '1', 'JUURLEHEKÜLJENIMI', 'ROOTPAGENAME' ),
+       'rootpagenamee'             => array( '1', 'JUURLEHEKÜLJENIMI1', 'ROOTPAGENAMEE' ),
        'basepagename'              => array( '1', 'NIMERUUMITANIMI', 'BASEPAGENAME' ),
        'basepagenamee'             => array( '1', 'NIMERUUMITANIMI1', 'BASEPAGENAMEE' ),
        'talkpagename'              => array( '1', 'ARUTELUNIMI', 'TALKPAGENAME' ),
@@ -249,7 +257,10 @@ $magicWords = array(
        'pagesinnamespace'          => array( '1', 'LEHEKÜLGINIMERUUMIS', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
        'numberofadmins'            => array( '1', 'ÜLEMAMÄÄR', 'NUMBEROFADMINS' ),
        'formatnum'                 => array( '0', 'ARVUVORMINDUS', 'FORMATNUM' ),
+       'special'                   => array( '0', 'eri', 'special' ),
+       'speciale'                  => array( '0', 'eri1', 'speciale' ),
        'defaultsort'               => array( '1', 'JÄRJESTA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'FAILITEE:', 'FILEPATH:' ),
        'hiddencat'                 => array( '1', '__PEIDETUDKAT__', '__HIDDENCAT__' ),
        'pagesincategory'           => array( '1', 'LEHEKÜLGIKATEGOORIAS', 'PAGESINCATEGORY', 'PAGESINCAT' ),
        'index'                     => array( '1', 'INDEKSIGA', '__INDEX__' ),
@@ -477,7 +488,7 @@ $messages = array(
 'returnto' => 'Naase lehele $1',
 'tagline' => 'Allikas: {{SITENAME}}',
 'help' => 'Juhend',
-'search' => 'Otsimine',
+'search' => 'Otsing',
 'searchbutton' => 'Otsi',
 'go' => 'Mine',
 'searcharticle' => 'Mine',
@@ -567,19 +578,17 @@ Vaata [[Special:Version|versiooni lehekülge]].',
 'pagetitle' => '$1 – {{SITENAME}}',
 'retrievedfrom' => 'Pärit leheküljelt "$1"',
 'youhavenewmessages' => 'Sulle on $1 ($2).',
-'newmessageslink' => 'uusi sõnumeid',
-'newmessagesdifflink' => 'viimane muudatus',
 'youhavenewmessagesfromusers' => 'Sulle on $1 {{PLURAL:$3|ühelt|$3}} kasutajalt ($2).',
 'youhavenewmessagesmanyusers' => 'Sulle on $1 paljudelt kasutajatelt ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|uus sõnum|uusi sõnumeid}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|viimane muudatus|viimased muudatused}}',
+'newmessageslinkplural' => '{{PLURAL:$1|uus sõnum|999=uusi sõnumeid}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|viimane muudatus|999=viimased muudatused}}',
 'youhavenewmessagesmulti' => 'Sulle on uusi sõnumeid $1',
 'editsection' => 'muuda',
 'editold' => 'redigeeri',
 'viewsourceold' => 'vaata lähteteksti',
-'editlink' => 'redigeeri',
+'editlink' => 'muuda',
 'viewsourcelink' => 'vaata lähteteksti',
-'editsectionhint' => 'Redigeeri alaosa "$1"',
+'editsectionhint' => 'Muuda alaosa "$1"',
 'toc' => 'Sisukord',
 'showtoc' => 'näita',
 'hidetoc' => 'peida',
@@ -591,10 +600,10 @@ Vaata [[Special:Version|versiooni lehekülge]].',
 'feedlinks' => 'Sööde:',
 'feed-invalid' => 'Vigane vootüüp.',
 'feed-unavailable' => 'Uudisvood ei ole saadaval.',
-'site-rss-feed' => '$1 RSS-toide',
-'site-atom-feed' => '$1 Atom-toide',
-'page-rss-feed' => '"$1" RSS-toide',
-'page-atom-feed' => '"$1" Atom-toide',
+'site-rss-feed' => '$1 (RSS-voog)',
+'site-atom-feed' => '$1 Atom-voog',
+'page-rss-feed' => '$1 (RSS-voog)',
+'page-atom-feed' => '$1 (Atom-voog)',
 'red-link-title' => '$1 (pole veel kirjutatud)',
 'sort-descending' => 'Järjesta laskuvalt',
 'sort-ascending' => 'Järjesta tõusvalt',
@@ -700,7 +709,8 @@ Administraator lukustas selle järgmisel põhjusel: "$3".',
 'invalidtitle-knownnamespace' => 'Vigane pealkiri nimeruumis "$2" tekstiga "$3"',
 'invalidtitle-unknownnamespace' => 'Vigane pealkiri nimeruuminumbriga $1 ja tekstiga "$2"',
 'exception-nologin' => 'Sisse logimata',
-'exception-nologin-text' => 'Selle lehekülje või toimingu jaoks pead selles vikis olema sisse loginud.',
+'exception-nologin-text' => 'Selle lehekülje või toimingu jaoks [[Special:Userlogin|logi]] palun sisse.',
+'exception-nologin-text-manual' => 'Pead $1, et sellele leheküljele või toimingule ligi pääseda.',
 
 # Virus scanner
 'virus-badscanner' => "Viga konfiguratsioonis: tundmatu viirusetõrje: ''$1''",
@@ -915,7 +925,7 @@ Peaksid load lähtestama, kui jagasid neid kogemata või kui su konto on kellegi
 'resettokens-legend' => 'Lubade lähtestamine',
 'resettokens-tokens' => 'Load:',
 'resettokens-token-label' => '$1 (praegune väärtus: $2)',
-'resettokens-watchlist-token' => '[[Special:Watchlist|Jälgimisloendis olevatel lehekülgedel tehtud muudatuste]] võrgutoite (Atom/RSS) luba',
+'resettokens-watchlist-token' => '[[Special:Watchlist|Jälgimisloendis olevatel lehekülgedel tehtud muudatuste]] veebivoo (Atom/RSS) luba',
 'resettokens-done' => 'Load lähtestatud.',
 'resettokens-resetbutton' => 'Lähtesta valitud load',
 
@@ -931,7 +941,7 @@ Peaksid load lähtestama, kui jagasid neid kogemata või kui su konto on kellegi
 'headline_sample' => 'Pealkiri',
 'headline_tip' => '2. taseme pealkiri',
 'nowiki_sample' => 'Sisesta vormindamata tekst',
-'nowiki_tip' => 'Ignoreeri viki vormindust',
+'nowiki_tip' => 'Ignoreeri vikivormindust',
 'image_sample' => 'Näidis.jpg',
 'image_tip' => 'Pilt',
 'media_sample' => 'Näidis.ogg',
@@ -1120,6 +1130,7 @@ Tundub, et see on kustutatud.',
 'edit-already-exists' => 'Ei saanud alustada uut lehekülge.
 See on juba olemas.',
 'defaultmessagetext' => 'Sõnumi vaiketekst',
+'content-failed-to-parse' => 'Ebaõnnestus $1i mudeli $2-tüüpi sisu liigendamine: $3',
 'invalid-content-data' => 'Vigased sisuandmed',
 'content-not-allowed-here' => 'Lehekülg [[$2]] ei või sisaldada $1i.',
 'editwarning-warning' => 'Sellelt leheküljelt lahkumise tõttu võivad tehtud muudatused kaotsi minna.
@@ -1134,9 +1145,8 @@ Kui oled sisse loginud, saad selle hoiatuse eelistuste alaosas "Toimetamine" kee
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Hoiatus:''' See lehekülg kasutab liialt palju aeglustavaid laiendusfunktsioone. Neid võiks kasutada vähem kui {{PLURAL:$2|ühel|$2}} korral, praegu on kasutatud {{PLURAL:$1|ühel|$1}} korral.",
 'expensive-parserfunction-category' => 'Liiga palju aeglasi laiendusfunktsioone kasutavad leheküljed',
-'post-expand-template-inclusion-warning' => "'''Hoiatus:''' Väljakutsutavate mallide hulk on liiga suur.
-Mistõttu osasid malle ei näidata.",
-'post-expand-template-inclusion-category' => 'Leheküljed, milledel on mallide väljakutsumise limiit ületatud',
+'post-expand-template-inclusion-warning' => "'''Hoiatus:''' Väljakutsutavate mallide hulk on liiga suur, mõningaid malle ei näidata.",
+'post-expand-template-inclusion-category' => 'Leheküljed, kus mallide väljakutsumise limiit on ületatud',
 'post-expand-template-argument-warning' => "'''Hoiatus:''' See lehekülg sisaldab argumendina vähemalt üht malli, mille määratud maht on liiga suur.
 Need argumendid on välja jäetud.",
 'post-expand-template-argument-category' => 'Malli vahele jäetud argumente sisaldavad leheküljed',
@@ -1413,7 +1423,7 @@ Pane tähele, et Google'is talletatud {{GRAMMAR:genitive|{{SITENAME}}}} sisu võ
 'preferences' => 'Eelistused',
 'mypreferences' => 'Eelistused',
 'prefs-edits' => 'Redigeerimiste arv:',
-'prefsnologin' => 'Sisse logimata',
+'prefsnologintext2' => 'Pead $1, et oma eelistusi muuta.',
 'changepassword' => 'Muuda parool',
 'prefs-skin' => 'Kujundus',
 'skin-preview' => 'eelvaade',
@@ -1450,7 +1460,7 @@ Pane tähele, et Google'is talletatud {{GRAMMAR:genitive|{{SITENAME}}}} sisu võ
 'recentchangesdays-max' => 'Ülemmäär $1 {{PLURAL:$1|päev|päeva}}',
 'recentchangescount' => 'Mitut redaktsiooni vaikimisi näidata:',
 'prefs-help-recentchangescount' => 'See käib viimaste muudatuste, lehekülgede ajalugude ja logide kohta.',
-'prefs-help-watchlist-token2' => 'See on sinu jälgimisloendi võrgutoite salavõti.
+'prefs-help-watchlist-token2' => 'See on sinu jälgimisloendi veebivoo salavõti.
 Igaüks, kes seda teab, saab lugeda sinu jälgimisloendit. Seega ära jaga seda.
 [[Special:ResetTokens|Klõpsa siia, kui sul on vaja see lähtestada]].',
 'savedprefs' => 'Sinu eelistused on salvestatud.',
@@ -1709,10 +1719,12 @@ See teave on avalik.',
 'recentchanges-summary' => 'Jälgi sellel leheküljel viimaseid muudatusi.',
 'recentchanges-noresult' => 'Selles ajavahemikus pole tehtud neile kriteeriumitele vastavaid muudatusi.',
 'recentchanges-feed-description' => 'Jälgi vikisse tehtud viimaseid muudatusi.',
-'recentchanges-label-newpage' => 'See muudatus lõi uue lehekülje',
-'recentchanges-label-minor' => 'See on pisiparandus',
-'recentchanges-label-bot' => 'Selle muudatuse sooritas robot',
+'recentchanges-label-newpage' => 'Uus lehekülg',
+'recentchanges-label-minor' => 'Pisiparandus',
+'recentchanges-label-bot' => 'Roboti tehtud muudatus',
 'recentchanges-label-unpatrolled' => 'Seda muudatust ei ole veel kontrollitud',
+'recentchanges-label-plusminus' => 'Lehekülje suuruse muutus baitides',
+'recentchanges-legend-newpage' => '(vaata ka [[Special:NewPages|uute lehekülgede loendit]])',
 'rcnote' => "Allpool on esitatud {{PLURAL:$1|'''1''' muudatus|viimased '''$1''' muudatust}} viimase {{PLURAL:$2|päeva|'''$2''' päeva}} jooksul seisuga $4, kell $5.",
 'rcnotefrom' => "Allpool on toodud muudatused alates: '''$2''' (näidatakse kuni '''$1''' muudatust)",
 'rclistfrom' => 'Näita muudatusi alates: $1',
@@ -2416,7 +2428,7 @@ Redigeerijaga ühenduse võtmine:
 e-post: $PAGEEDITOR_EMAIL
 viki: $PAGEEDITOR_WIKI
 
-Seni kuni sa seda lehte ei külasta, selle lehega seotud toimingute kohta sulle uusi teavitus-e-kirju ei saadeta. Jälgimisloendis saaksid kõigi jälgitavate lehekülgedega seotud teavitussätted ka lähtestada.
+Seni kuni sa sisselogituna seda lehekülge ei külasta, selle leheküljega seotud toimingute kohta sulle uusi teavituse e-kirju ei saadeta. Jälgimisloendis saaksid kõigi jälgitavate lehekülgedega seotud teavitussätted ka lähtestada.
 
 Abivalmilt
 {{GRAMMAR:genitive|{{SITENAME}}}} teavitussüsteem
@@ -3038,13 +3050,13 @@ Palun ürita uuesti.',
 'tooltip-pt-mytalk' => 'Sinu arutelulehekülg',
 'tooltip-pt-anontalk' => 'Arutelu sellelt IP-aadressilt tehtud muudatuste kohta',
 'tooltip-pt-preferences' => 'Sinu eelistused',
-'tooltip-pt-watchlist' => 'Lehekülgede loend, mida jälgid muudatuste osas',
+'tooltip-pt-watchlist' => 'Lehekülgede loend, mille muudatusi jälgid',
 'tooltip-pt-mycontris' => 'Sinu kaastööde loend',
 'tooltip-pt-login' => 'Me julgustame teid sisse logima, kuid see pole kohustuslik.',
 'tooltip-pt-anonlogin' => 'Me julgustame teid sisse logima, kuid see pole kohustuslik.',
 'tooltip-pt-logout' => 'Logi välja',
 'tooltip-ca-talk' => 'Selle artikli arutelu',
-'tooltip-ca-edit' => 'Saad seda lehekülge redigeerida. Palun kasuta enne salvestamist eelvaadet.',
+'tooltip-ca-edit' => 'Sa saad seda lehekülge muuta. Palun kasuta enne salvestamist eelvaadet.',
 'tooltip-ca-addsection' => 'Lisa uus alaosa',
 'tooltip-ca-viewsource' => 'See lehekülg on kaitstud.
 Saad vaadata selle lähteteksti.',
@@ -3068,9 +3080,9 @@ Saad vaadata selle lähteteksti.',
 'tooltip-n-randompage' => 'Mine juhuslikule leheküljele',
 'tooltip-n-help' => 'Kuidas redigeerida',
 'tooltip-t-whatlinkshere' => 'Kõik viki leheküljed, mis siia viitavad',
-'tooltip-t-recentchangeslinked' => 'Viimased muudatused lehekülgedel, milledele on siit viidatud',
-'tooltip-feed-rss' => 'Selle lehekülje RSS-toide',
-'tooltip-feed-atom' => 'Selle lehekülje Atom-toide',
+'tooltip-t-recentchangeslinked' => 'Viimased muudatused lehekülgedel, millele on siit viidatud',
+'tooltip-feed-rss' => 'Selle lehekülje RSS-voog',
+'tooltip-feed-atom' => 'Selle lehekülje Atom-voog',
 'tooltip-t-contributions' => 'Kuva selle kasutaja kaastöö',
 'tooltip-t-emailuser' => 'Saada sellele kasutajale e-kiri',
 'tooltip-t-upload' => 'Laadi faile üles',
@@ -3091,7 +3103,7 @@ Saad vaadata selle lähteteksti.',
 'tooltip-save' => 'Salvesta muudatused',
 'tooltip-preview' => 'Näita tehtavaid muudatusi. Palun kasutage seda enne salvestamist!',
 'tooltip-diff' => 'Näita tehtavaid muudatusi.',
-'tooltip-compareselectedversions' => 'Näita erinevusi kahe selle lehe valitud versiooni vahel.',
+'tooltip-compareselectedversions' => 'Näita erinevusi selle lehe kahe valitud versiooni vahel.',
 'tooltip-watch' => 'Lisa see lehekülg oma jälgimisloendisse',
 'tooltip-watchlistedit-normal-submit' => 'Eemalda leheküljed',
 'tooltip-watchlistedit-raw-submit' => 'Uuenda jälgimisloendit',
@@ -3326,6 +3338,7 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-orientation' => 'Orientatsioon',
 'exif-samplesperpixel' => 'Komponentide arv',
 'exif-planarconfiguration' => 'Andmejärjestus',
+'exif-ycbcrsubsampling' => 'Y-i ja C diskreetimissuhe',
 'exif-ycbcrpositioning' => 'Y- ja C-positsioonimine',
 'exif-xresolution' => 'Horisontaalne eraldus',
 'exif-yresolution' => 'Vertikaalne eraldus',
@@ -3369,13 +3382,18 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-aperturevalue' => 'APEX-avaarv',
 'exif-brightnessvalue' => 'APEX-heledus',
 'exif-exposurebiasvalue' => 'Särituse mõju',
-'exif-subjectdistance' => 'Subjekti kaugus',
+'exif-maxaperturevalue' => 'Vähim ava',
+'exif-subjectdistance' => 'Põhimotiivi kaugus',
 'exif-meteringmode' => 'Mõõtmisviis',
 'exif-lightsource' => 'Valgusallikas',
 'exif-flash' => 'Välk',
 'exif-focallength' => 'Fookuskaugus',
+'exif-subjectarea' => 'Põhimotiivi ala',
 'exif-flashenergy' => 'Välgu võimsus',
-'exif-subjectlocation' => 'Subjekti asukoht',
+'exif-focalplanexresolution' => 'Fokaaltasandi laius',
+'exif-focalplaneyresolution' => 'Fokaaltasandi kõrgus',
+'exif-focalplaneresolutionunit' => 'Fokaaltasandi eraldusühik',
+'exif-subjectlocation' => 'Põhimotiivi asukoht',
 'exif-exposureindex' => 'Särituse number',
 'exif-sensingmethod' => 'Tundlikustamismeetod',
 'exif-filesource' => 'Faili päritolu',
@@ -3391,6 +3409,7 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-saturation' => 'Küllastus',
 'exif-sharpness' => 'Teravus',
 'exif-devicesettingdescription' => 'Seadme seadistuste kirjeldus',
+'exif-subjectdistancerange' => 'Põhimotiivi kaugusvahemik',
 'exif-imageuniqueid' => 'Pildi ainuline identifikaator',
 'exif-gpsversionid' => 'GPS-tähise versioon',
 'exif-gpslatituderef' => 'Põhja- või lõunalaius',
@@ -3406,12 +3425,19 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-gpsdop' => 'Mõõtmise täpsus',
 'exif-gpsspeedref' => 'Kiirusühik',
 'exif-gpsspeed' => 'GPS-vastuvõtja kiirus',
-'exif-gpstrack' => 'Liikumise suund',
+'exif-gpstrackref' => 'Liikumissuuna tüüp',
+'exif-gpstrack' => 'Liikumissuund',
+'exif-gpsimgdirectionref' => 'Pildi suuna tüüp',
 'exif-gpsimgdirection' => 'Pildi suund',
 'exif-gpsmapdatum' => 'Geodeetiline alus',
+'exif-gpsdestlatituderef' => 'Poolkera (laius)',
 'exif-gpsdestlatitude' => 'Kujutatud koha laius',
+'exif-gpsdestlongituderef' => 'Poolkera (pikkus)',
 'exif-gpsdestlongitude' => 'Kujutatud koha pikkus',
-'exif-gpsdestdistance' => 'Sihtmärgi kaugus',
+'exif-gpsdestbearingref' => 'Sihtpunkti suuna tüüp',
+'exif-gpsdestbearing' => 'Sihtpunkti suund',
+'exif-gpsdestdistanceref' => 'Sihtpunkti kauguse ühik',
+'exif-gpsdestdistance' => 'Sihtpunkti kaugus',
 'exif-gpsprocessingmethod' => 'GPS-töötlusmeetodi nimi',
 'exif-gpsareainformation' => 'GPS-ala nimi',
 'exif-gpsdatestamp' => 'GPS kuupäev',
@@ -3433,8 +3459,11 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-objectname' => 'Lühipealkiri',
 'exif-specialinstructions' => 'Erijuhised',
 'exif-headline' => 'Pealkiri',
+'exif-credit' => 'Päritolu/Annetaja',
 'exif-source' => 'Allikas',
+'exif-editstatus' => 'Pildi toimetusolek',
 'exif-urgency' => 'Pakilisus',
+'exif-fixtureidentifier' => 'Tugiandmete nimi',
 'exif-locationdest' => 'Kujutatud asukoht',
 'exif-locationdestcode' => 'Kujutatud asukoha kood',
 'exif-objectcycle' => 'Päeva osa, milleks meediafail on ette nähtud',
@@ -3446,6 +3475,7 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-iimsupplementalcategory' => 'Lisakategooriad',
 'exif-datetimeexpires' => 'Mitte kasutada hiljem kui',
 'exif-datetimereleased' => 'Avaldamiskuupäev',
+'exif-originaltransmissionref' => 'Algse edastuskoha kood',
 'exif-identifier' => 'Identifikaator',
 'exif-lens' => 'Kasutatud objektiiv',
 'exif-serialnumber' => 'Kaamera seerianumber',
@@ -3479,6 +3509,9 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 
 # Exif attributes
 'exif-compression-1' => 'Pakkimata',
+'exif-compression-2' => 'CCITT G3 ühemõõtmeline muudetud Hoffmani sarikodeerimine',
+'exif-compression-3' => 'CCITT G3 faksikodeerimine',
+'exif-compression-4' => 'CCITT G4 faksikodeerimine',
 
 'exif-copyrighted-true' => 'Kaitstud',
 'exif-copyrighted-false' => 'Autoriõiguslik seisund määramata',
@@ -3494,7 +3527,8 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-orientation-7' => 'Pööratud 90° päripäeva ja püstselt ümberpööratud',
 'exif-orientation-8' => 'Pööratud 90° päripäeva',
 
-'exif-planarconfiguration-2' => 'tasapinnaline vorm',
+'exif-planarconfiguration-1' => 'järjestikvorming',
+'exif-planarconfiguration-2' => 'kihiline vorming',
 
 'exif-colorspace-65535' => 'Kalibreerimata',
 
@@ -3505,6 +3539,8 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-exposureprogram-2' => 'Tavaprogramm',
 'exif-exposureprogram-3' => 'Ava prioriteet',
 'exif-exposureprogram-4' => 'Katiku prioriteet',
+'exif-exposureprogram-5' => 'Loovprogramm (ülekaalus väljasügavus)',
+'exif-exposureprogram-6' => 'Aktiivprogramm (ülekaalus lühike säriaeg)',
 'exif-exposureprogram-7' => 'Portree töörežiim (lähifotode jaoks, taust fookusest väljas)',
 'exif-exposureprogram-8' => 'Maastiku töörežiim (maastikupiltide jaoks, taust on teravdatud)',
 
@@ -3552,13 +3588,17 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-focalplaneresolutionunit-2' => 'toll',
 
 'exif-sensingmethod-1' => 'Määramata',
-'exif-sensingmethod-2' => 'Ühe-kiibiga värvisensor',
-'exif-sensingmethod-3' => 'Kahe-kiibiga värvisensor',
-'exif-sensingmethod-4' => 'Kolme-kiibiga värvisensor',
-'exif-sensingmethod-7' => 'Kolmerealine sensor',
+'exif-sensingmethod-2' => 'Ühe kiibiga värviandur',
+'exif-sensingmethod-3' => 'Kahe kiibiga värviandur',
+'exif-sensingmethod-4' => 'Kolme kiibiga värviandur',
+'exif-sensingmethod-5' => 'Jadavärviandur',
+'exif-sensingmethod-7' => 'Trilineaarne andur',
+'exif-sensingmethod-8' => 'Lineaarne jadavärviandur',
 
 'exif-filesource-3' => 'Digitaalne fotokaamera',
 
+'exif-scenetype-1' => 'Pildistatud otse',
+
 'exif-customrendered-0' => 'Tavatöötlus',
 'exif-customrendered-1' => 'Kohandatud töötlus',
 
@@ -3610,6 +3650,7 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|meeter|meetrit}} allpool merepinda',
 
 'exif-gpsstatus-a' => 'Mõõtmine pooleli',
+'exif-gpsstatus-v' => 'Koostalitlevus',
 
 'exif-gpsmeasuremode-2' => '2-mõõtmeline ulatus',
 'exif-gpsmeasuremode-3' => '3-mõõtmeline ulatus',
@@ -3893,9 +3934,8 @@ GNU Üldise Avaliku Litsentsi [{{SERVER}}{{SCRIPTPATH}}/COPYING eksemplar] peaks
 
 # Special:SpecialPages
 'specialpages' => 'Erileheküljed',
-'specialpages-note' => '* Harilikud erileheküljed
-* <span class="mw-specialpagerestricted">Piiranguga erileheküljed</span>
-* <span class="mw-specialpagecached">Uuendamata sisuga erileheküljed (ei pruugi enam kasutuses olla)</span>',
+'specialpages-note' => '* Harilikud erileheküljed.
+* <span class="mw-specialpagerestricted">Piiranguga erileheküljed.</span>',
 'specialpages-group-maintenance' => 'Hooldusaruanded',
 'specialpages-group-other' => 'Teised erileheküljed',
 'specialpages-group-login' => 'Sisselogimine ja konto loomine',
@@ -4108,4 +4148,21 @@ Kui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajan
 'limitreport-expansiondepth' => 'Suurim hõrendussügavus',
 'limitreport-expensivefunctioncount' => 'Kulukate parserifunktsioonide arv',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Mallide hõrendamine',
+'expand_templates_intro' => 'See erilehekülg hõrendab siia sisestatud tekstis kõik mallid rekursiivselt.
+Samuti hõrendab see parserifunktsioonid nagu
+<code><nowiki>{{</nowiki>#language:…}}</code> ja muutujad nagu
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Õigupoolest hõrendab see kahekordsete looksulgude vahel pea kõike.',
+'expand_templates_title' => 'Sisu pealkiri, näiteks {{FULLPAGENAME}} jaoks:',
+'expand_templates_input' => 'Sisendtekst:',
+'expand_templates_output' => 'Tulemus',
+'expand_templates_xml_output' => 'XML-väljund',
+'expand_templates_ok' => 'Hõrenda',
+'expand_templates_remove_comments' => 'Eemalda selgitavad märkused',
+'expand_templates_remove_nowiki' => 'Ära näita tulemuses <nowiki>-silte',
+'expand_templates_generate_xml' => 'Näita XML sõelumispuud',
+'expand_templates_preview' => 'Eelvaade',
+
 );
index 338fb38..0aae185 100644 (file)
@@ -55,14 +55,12 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'OrrialdeZaharrak' ),
        'Blankpage'                 => array( 'OrrialdeZuria' ),
        'Block'                     => array( 'Blokeatu' ),
-       'Blockme'                   => array( 'BlokeaNazazu' ),
        'BrokenRedirects'           => array( 'HautsitakoBirzuzenketak' ),
        'Categories'                => array( 'Kategoriak' ),
        'ChangePassword'            => array( 'PasahitzaAldatu' ),
        'Confirmemail'              => array( 'EmailaBaieztatu' ),
        'Contributions'             => array( 'Ekarpenak' ),
        'CreateAccount'             => array( 'KontuaSortu' ),
-       'Disambiguations'           => array( 'Argipenak' ),
        'DoubleRedirects'           => array( 'BirzuzenketaBikoitzak' ),
        'Emailuser'                 => array( 'LankideEmaila' ),
        'Export'                    => array( 'Esportatu' ),
@@ -398,8 +396,6 @@ $1',
 'ok' => 'Ados',
 'retrievedfrom' => '"$1"(e)tik jasota',
 'youhavenewmessages' => '$1 dauzkazu ($2).',
-'newmessageslink' => 'Mezu berriak',
-'newmessagesdifflink' => 'azken aldaketa ikusi',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|Beste erabiltzaile baten|$3 erabiltzaileren}} $1 ($2).',
 'youhavenewmessagesmanyusers' => 'Hainbat erabiltzaileren $1 ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|Mezu berri bat duzu|Mezu berriak dituzu}}',
@@ -1219,7 +1215,6 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 'preferences' => 'Hobespenak',
 'mypreferences' => 'Hobespenak',
 'prefs-edits' => 'Aldaketa kopurua:',
-'prefsnologin' => 'Saioa hasi gabe',
 'changepassword' => 'Pasahitza aldatu',
 'prefs-skin' => 'Itxura',
 'skin-preview' => 'Aurrebista',
@@ -1501,6 +1496,7 @@ Informazio hau publikoa da.',
 'recentchanges-label-minor' => 'Hau aldaketa txikia da',
 'recentchanges-label-bot' => 'Aldaketa hau bot batek egin du',
 'recentchanges-label-unpatrolled' => 'Aldaketa hau ez da oraindik patruilatua izan',
+'recentchanges-legend-newpage' => '$1 - orrialde berria',
 'rcnote' => "Beheko azken {{PLURAL:$2|eguneko|'''$2''' egunetako}} azken {{PLURAL:$1|aldaketa|'''$1''' aldaketak}} hurrengo datan egin ziren: $5, $4.",
 'rcnotefrom' => 'Jarraian azaltzen diren aldaketak data honetatik aurrerakoak dira: <b>$2</b> (gehienez <b>$1</b> erakusten dira).',
 'rclistfrom' => 'Erakutsi $1 ondorengo aldaketa berriak',
@@ -3727,4 +3723,20 @@ Halaber [[Special:EditWatchlist|aldatzaile estandarra]] erabil dezakezu.',
 # Image rotation
 'rotate-comment' => 'Irudia erlojuaren norantzan {{PLURAL:$1|gradu 1|$1 gradu}} biratua izan da',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Txantiloi ordezkatzailea',
+'expand_templates_intro' => 'Aparteko orrialde honek modu errekurtsiboan txantiloiak ordezkatu egiten ditu.
+Funtzioak ere ordezkatu egiten ditu, hala nola
+<code><nowiki>{{</nowiki>#language:…}}</code>, eta
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code> bezalako aldagaiak ere.
+Kortxete bikoitzarekin hobeto egiten da lan.',
+'expand_templates_title' => 'Izenburua ({{FULLPAGENAME}} ordezkatzeko, eta abar):',
+'expand_templates_input' => 'Sarrerako testua:',
+'expand_templates_output' => 'Emaitza',
+'expand_templates_xml_output' => 'XML irteera',
+'expand_templates_ok' => 'Ados',
+'expand_templates_remove_comments' => 'Iruzkinak kendu',
+'expand_templates_generate_xml' => 'Erakutsi XML parse zuhaitza',
+'expand_templates_preview' => 'Aurreikusi',
+
 );
index 7d7c386..c793efe 100644 (file)
@@ -254,8 +254,6 @@ $messages = array(
 'ok' => 'Dalcuerdu',
 'retrievedfrom' => 'Arrecuperau dendi "$1"',
 'youhavenewmessages' => 'Tiinis $1 ($2).',
-'newmessageslink' => 'nuevus mensahis',
-'newmessagesdifflink' => 'úrtimu chambu',
 'youhavenewmessagesmulti' => 'Tiinis nuevus mensahis en $1',
 'editsection' => 'eital',
 'editold' => 'eital',
@@ -784,7 +782,6 @@ Asigurati e qu'esti chambu mantenga la continuiá el estorial la páhina.",
 'preferences' => 'Preferéncias',
 'mypreferences' => 'Las mis preferéncias',
 'prefs-edits' => "Númiru d'eicionis:",
-'prefsnologin' => "Nu t'alcuentras rustriu",
 'changepassword' => 'Chambal consínia',
 'prefs-skin' => 'Aparéncia',
 'skin-preview' => 'Previsoreal',
@@ -2362,4 +2359,7 @@ Pol favol, confirma si rialmenti quieis gorvel a crial la páhina.",
 'revdelete-unrestricted' => 'las restricionis a los çahorilis án siu esborrás',
 'rightsnone' => '(dengunu)',
 
+# Special:ExpandTemplates
+'expand_templates_preview' => 'Previsoreal',
+
 );
index c2264f8..6895dd2 100644 (file)
@@ -81,34 +81,34 @@ $namespaceAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'کاربران_فعال' ),
        'Allmessages'               => array( 'تمام_پیغام‌ها' ),
+       'AllMyUploads'              => array( 'همهٔ_بارگذاری‌های_من', 'همه_بارگذاری‌های_من' ),
        'Allpages'                  => array( 'تمام_صفحه‌ها' ),
        'Ancientpages'              => array( 'صفحه‌های_قدیمی' ),
        'Badtitle'                  => array( 'عنوان_بد' ),
        'Blankpage'                 => array( 'صفحه_خالی' ),
        'Block'                     => array( 'بستن_نشانی_آی‌پی' ),
-       'Blockme'                   => array( 'بستن_من' ),
        'Booksources'               => array( 'منابع_کتاب' ),
        'BrokenRedirects'           => array( 'تغییرمسیرهای_خراب' ),
        'Categories'                => array( 'رده‌ها' ),
        'ChangeEmail'               => array( 'تغییر_رایانامه' ),
        'ChangePassword'            => array( 'از_نو_کردن_گذرواژه' ),
        'ComparePages'              => array( 'مقایسه_صفحات' ),
-       'Confirmemail'              => array( 'تایید_رایانامه' ),
+       'Confirmemail'              => array( 'تأیید_رایانامه' ),
        'Contributions'             => array( 'مشارکت‌ها' ),
        'CreateAccount'             => array( 'ایجاد_حساب_کاربری' ),
        'Deadendpages'              => array( 'صفحه‌های_بن‌بست' ),
        'DeletedContributions'      => array( 'مشارکت‌های_حذف_شده' ),
-       'Disambiguations'           => array( 'ابهام‌زدایی' ),
        'DoubleRedirects'           => array( 'تغییرمسیرهای_دوتایی' ),
        'EditWatchlist'             => array( 'ویرایش_فهرست_پی‌گیری‌ها' ),
        'Emailuser'                 => array( 'نامه_به_کاربر' ),
+       'ExpandTemplates'           => array( 'گسترش_الگوها' ),
        'Export'                    => array( 'برون_بری_صفحه' ),
        'Fewestrevisions'           => array( 'کمترین_نسخه' ),
        'FileDuplicateSearch'       => array( 'جستجوی_پرونده_تکراری' ),
        'Filepath'                  => array( 'مسیر_پرونده' ),
-       'Import'                    => array( 'درون_ریزی_صفحه' ),
-       'Invalidateemail'           => array( 'باطل_کردن_رایانامه' ),
-       'JavaScriptTest'            => array( 'تست_جاوا_اسکریپت' ),
+       'Import'                    => array( 'درونریزی_صفحه' ),
+       'Invalidateemail'           => array( 'باطلکردن_رایانامه' ),
+       'JavaScriptTest'            => array( 'تست_جاوااسکریپت' ),
        'BlockList'                 => array( 'فهرست_بستن_نشانی_آی‌پی' ),
        'LinkSearch'                => array( 'جستجوی_پیوند' ),
        'Listadmins'                => array( 'فهرست_مدیران' ),
@@ -137,6 +137,7 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'بارگذاری‌های_من' ),
        'Newimages'                 => array( 'تصاویر_جدید' ),
        'Newpages'                  => array( 'صفحه‌های_تازه' ),
+       'PagesWithProp'             => array( 'صفحه‌های_با_خاصیت' ),
        'PasswordReset'             => array( 'بازنشاندن_گذرواژه' ),
        'PermanentLink'             => array( 'پیوند_دائمی' ),
        'Popularpages'              => array( 'صفحه‌های_محبوب' ),
@@ -144,11 +145,13 @@ $specialPageAliases = array(
        'Prefixindex'               => array( 'نمایه_پیشوندی' ),
        'Protectedpages'            => array( 'صفحه‌های_محافظت_شده' ),
        'Protectedtitles'           => array( 'عنوان‌های_محافظت_شده' ),
-       'Randompage'                => array( 'صفحه_تصادفی' ),
+       'Randompage'                => array( 'صفحهٔ_تصادفی' ),
+       'RandomInCategory'          => array( 'تصادفی_در_رده' ),
        'Randomredirect'            => array( 'تغییرمسیر_تصادفی' ),
        'Recentchanges'             => array( 'تغییرات_اخیر' ),
        'Recentchangeslinked'       => array( 'تغییرات_مرتبط' ),
        'Redirect'                  => array( 'تغییرمسیر' ),
+       'ResetTokens'               => array( 'بازنشانی_نشانه‌ها' ),
        'Revisiondelete'            => array( 'حذف_نسخه' ),
        'Search'                    => array( 'جستجو' ),
        'Shortpages'                => array( 'صفحه‌های_کوتاه' ),
@@ -230,6 +233,8 @@ $magicWords = array(
        'fullpagenamee'             => array( '1', 'نام‌کامل‌صفحه‌کد', 'نام_کامل_صفحه_کد', 'FULLPAGENAMEE' ),
        'subpagename'               => array( '1', 'نام‌زیرصفحه', 'نام_زیرصفحه', 'SUBPAGENAME' ),
        'subpagenamee'              => array( '1', 'نام‌زیرصفحه‌کد', 'نام_زیرصفحه_کد', 'SUBPAGENAMEE' ),
+       'rootpagename'              => array( '1', 'نام_صفحه_ریشه', 'ROOTPAGENAME' ),
+       'rootpagenamee'             => array( '1', 'نام_صفحه_ریشه_ای', 'ROOTPAGENAMEE' ),
        'basepagename'              => array( '1', 'نام‌صفحه‌مبنا', 'نام_صفحه_مبنا', 'BASEPAGENAME' ),
        'basepagenamee'             => array( '1', 'نام‌صفحه‌مبناکد', 'نام_صفحه_مبنا_کد', 'BASEPAGENAMEE' ),
        'talkpagename'              => array( '1', 'نام‌صفحه‌بحث', 'نام_صفحه_بحث', 'TALKPAGENAME' ),
@@ -249,6 +254,7 @@ $magicWords = array(
        'img_center'                => array( '1', 'وسط', 'center', 'centre' ),
        'img_framed'                => array( '1', 'قاب', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'بی‌قاب', 'بیقاب', 'بی_قاب', 'frameless' ),
+       'img_lang'                  => array( '1', 'زبان=$1', 'lang=$1' ),
        'img_page'                  => array( '1', 'صفحه=$1', 'صفحه_$1', 'page=$1', 'page $1' ),
        'img_upright'               => array( '1', 'ایستاده', 'ایستاده=$1', 'ایستاده_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'حاشیه', 'border' ),
@@ -262,6 +268,7 @@ $magicWords = array(
        'img_text_bottom'           => array( '1', 'متن-پایین', 'text-bottom' ),
        'img_link'                  => array( '1', 'پیوند=$1', 'link=$1' ),
        'img_alt'                   => array( '1', 'جایگزین=$1', 'alt=$1' ),
+       'img_class'                 => array( '1', 'کلاس=$1', 'class=$1' ),
        'int'                       => array( '0', 'ترجمه:', 'INT:' ),
        'sitename'                  => array( '1', 'نام‌وبگاه', 'نام_وبگاه', 'SITENAME' ),
        'ns'                        => array( '0', 'فن:', 'NS:' ),
@@ -269,6 +276,7 @@ $magicWords = array(
        'localurl'                  => array( '0', 'نشانی:', 'LOCALURL:' ),
        'localurle'                 => array( '0', 'نشانی‌کد:', 'نشانی_کد:', 'LOCALURLE:' ),
        'articlepath'               => array( '0', 'مسیرمقاله', 'مسیر_مقاله', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'شناسه_صفحه', 'PAGEID' ),
        'server'                    => array( '0', 'سرور', 'کارساز', 'SERVER' ),
        'servername'                => array( '0', 'نام‌کارساز', 'نام_کارساز', 'نام‌سرور', 'نام_سرور', 'SERVERNAME' ),
        'scriptpath'                => array( '0', 'مسیرسند', 'مسیر_سند', 'SCRIPTPATH' ),
@@ -316,6 +324,7 @@ $magicWords = array(
        'padleft'                   => array( '0', 'لبه‌چپ', 'لبه_چپ', 'PADLEFT' ),
        'padright'                  => array( '0', 'لبه‌راست', 'لبه_راست', 'PADRIGHT' ),
        'special'                   => array( '0', 'ویژه', 'special' ),
+       'speciale'                  => array( '0', 'ویژه_ای', 'speciale' ),
        'defaultsort'               => array( '1', 'ترتیب:', 'ترتیب‌پیش‌فرض:', 'ترتیب_پیش_فرض:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
        'filepath'                  => array( '0', 'مسیرپرونده:', 'مسیر_پرونده:', 'FILEPATH:' ),
        'tag'                       => array( '0', 'برچسب', 'tag' ),
@@ -333,6 +342,10 @@ $magicWords = array(
        'url_query'                 => array( '0', 'دستور', 'QUERY' ),
        'defaultsort_noerror'       => array( '0', 'بدون‌خطا', 'بدون_خطا', 'noerror' ),
        'defaultsort_noreplace'     => array( '0', 'جایگزین‌نکن', 'جایگزین_نکن', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', 'همه', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'صفحات', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'زیررده‌ها', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'پرونده‌ها', 'files' ),
 );
 
 $digitTransformTable = array(
@@ -713,12 +726,10 @@ $1',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'برگرفته از «$1»',
 'youhavenewmessages' => '$1 دارید ($2).',
-'newmessageslink' => 'پیام‌های جدید',
-'newmessagesdifflink' => 'آخرین تغییر',
 'youhavenewmessagesfromusers' => 'شما از {{PLURAL:$3|یک کاربر دیگر|$3  کاربر}} $1 دارید ($2).',
 'youhavenewmessagesmanyusers' => 'شما از تعدادی کاربر $1 دارید ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|پیام جدید}}',
-'newmessagesdifflinkplural' => '{{formatnum:$1}} {{PLURAL:$1|تغییر|تغییر}} اخیر',
+'newmessageslinkplural' => '{{PLURAL:$1|پیام جدید|999=پیام‌های جدید}}',
+'newmessagesdifflinkplural' => '{{formatnum:$1}} {{PLURAL:$1|تغییر|999=تغییر}} اخیر',
 'youhavenewmessagesmulti' => 'پیام‌های جدیدی در $1 دارید.',
 'editsection' => 'ویرایش',
 'editold' => 'ویرایش',
@@ -853,7 +864,8 @@ $2',
 'invalidtitle-knownnamespace' => 'عنوان نامعتبر با فضای نام «$2» و متن «$3»',
 'invalidtitle-unknownnamespace' => 'عنوان نامعتبر با فضای نام ناشناختهٔ شمارهٔ $1 و متن «$2»',
 'exception-nologin' => 'به سامانه وارد نشده‌اید',
-'exception-nologin-text' => 'دسترسی به این صفحه یا انجام این عمل در این ویکی نیازمند وارد شدن به سیستم  است.',
+'exception-nologin-text' => 'لطفاً به سامانه [[Special:Userlogin|وارد شوید]] تا بتوانید به این صفحه دسترسی داشته باشید.',
+'exception-nologin-text-manual' => 'لطفاً  $1  تا بتوانید به این صفحه یا عمل دسترسی داشته باشید.',
 
 # Virus scanner
 'virus-badscanner' => "پیکربندی بد: پویشگر ویروس ناشناخته: ''$1''",
@@ -863,7 +875,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''اکنون شما ثبت خروج کرده‌اید.'''
 توجه داشته باشید که تا حافظهٔ نهان مرورگرتان را پاک نکنید، بعضی از صفحات ممکن است همچنان به گونه‌ای نمایش یابند که انگار وارد شده‌اید.",
-'welcomeuser' => 'خوشامدید، $1!',
+'welcomeuser' => 'خوشامدید $1!',
 'welcomecreation-msg' => 'حساب کاربری شما ایجاد شده است.
 فراموش نکنید که [[Special:Preferences|ترجیحات {{SITENAME}}]] خود را تغییر دهید.',
 'yourname' => 'نام کاربری:',
@@ -1419,7 +1431,7 @@ $2
 'revdelete-suppress-text' => "فرونشانی باید '''تنها''' برای موارد زیر استفاده شود:
 * اطلاعات به طور بالقوه افتراآمیز
 * اطلاعات نامناسب شخصی
-*: ''نشانی منزل، شماره تلفن، شماره تامین اجتماعی و غیره.''",
+*: ''نشانی منزل، شماره تلفن، کد ملی و غیره.''",
 'revdelete-legend' => 'تنظیم محدودیت‌های پیدایی',
 'revdelete-hide-text' => 'متن نسخه',
 'revdelete-hide-image' => 'نهفتن محتویات پرونده',
@@ -1428,8 +1440,8 @@ $2
 'revdelete-hide-user' => 'نام کاربری/نشانی آی‌پی',
 'revdelete-hide-restricted' => 'فرونشانی اطلاعات برای مدیران به همراه دیگران',
 'revdelete-radio-same' => '(بدون تغییر)',
-'revdelete-radio-set' => 'Ù\86Ù\85اÛ\8cان',
-'revdelete-radio-unset' => 'Ù\85Ø®Ù\81Û\8c',
+'revdelete-radio-set' => 'Ù¾Ù\86Ù\87ان',
+'revdelete-radio-unset' => 'Ù\86Ù\85اÛ\8cاÙ\86',
 'revdelete-suppress' => 'از دسترسی مدیران به داده نیز مانند سایر کاربران جلوگیری به عمل آید.',
 'revdelete-unsuppress' => 'خاتمهٔ محدودیت‌ها در مورد نسخه‌های انتخاب شده',
 'revdelete-log' => 'دلیل:',
@@ -1585,7 +1597,7 @@ $1",
 'preferences' => 'ترجیحات',
 'mypreferences' => 'ترجیحات',
 'prefs-edits' => 'تعداد ویرایش‌ها:',
-'prefsnologin' => 'به سامانه وارد نشده‌اید',
+'prefsnologintext2' => 'لطفاً  $1  برای تنظیم ترجیحات کاربر.',
 'changepassword' => 'تغییر گذرواژه',
 'prefs-skin' => 'پوسته',
 'skin-preview' => 'پیش‌نمایش',
@@ -1760,7 +1772,7 @@ $1",
 'right-createpage' => 'ایجاد صفحه (در مورد صفحه‌های غیر بحث)',
 'right-createtalk' => 'ایجاد صفحه‌های بحث',
 'right-createaccount' => 'ایجاد حساب‌های کاربری',
-'right-minoredit' => 'علامت‌زدن ویرایش‌ها به عنوان جزئی',
+'right-minoredit' => 'علامت‌زدن ویرایش‌ها بهعنوان جزئی',
 'right-move' => 'انتقال صفحه',
 'right-move-subpages' => 'انتقال صفحه‌ها به همراه زیر‌صفحه‌هایشان',
 'right-move-rootuserpages' => 'انتقال صفحه‌های کاربری سرشاخه',
@@ -1886,6 +1898,9 @@ $1",
 'recentchanges-label-minor' => 'این ویرایش جزئی‌است',
 'recentchanges-label-bot' => 'این ویرایش را یک ربات انجام داده‌است',
 'recentchanges-label-unpatrolled' => 'این ویرایش هنوز گشت‌زنی نشده‌است',
+'recentchanges-label-plusminus' => 'حجم صفحه به اندازه این بایت‌ها تغییر یافته‌است',
+'recentchanges-legend-newpage' => '(همچنین به [[Special:NewPages|فهرست صفحات جدید]] نگاه کنید)',
+'recentchanges-legend-plusminus' => "('' ±۱۲۳'')",
 'rcnote' => "در زیر {{PLURAL:$1|'''۱''' تغییر|آخرین '''$1''' تغییر}} در آخرین {{PLURAL:$2|روز|'''$2''' روز}} را، تا $4 ساعت $5 می‌بینید.",
 'rcnotefrom' => 'در زیر تغییرات از تاریخ <b>$2</b> آمده‌اند (تا <b>$1</b> مورد نشان داده می‌شود).',
 'rclistfrom' => 'نمایش تغییرات جدید با شروع از $1',
@@ -2616,7 +2631,7 @@ $PAGEINTRO $NEWPAGE
 نامه: $PAGEEDITOR_EMAIL
 ویکی: $PAGEEDITOR_WIKI
 
-تا هنگامی که به صفحه سر نزده‌اید، در صورت رخ‌دادنِ احتمالیِ تغییراتِ بیشتر، اعلانیه‌ای برای شما فرستاده نخواهد شد.
+تا هنگامی که به صفحه سر نزده‌اید، در صورت رخ‌دادنِ احتمالیِ فعالیت بیشتر، تا زمانی که در با کاربریتان در سیستم هستید، اعلانیه‌ای برای شما فرستاده نخواهد شد.
 شما همچنین می‌توانید در صفحهٔ پی‌گیری‌های خود پرچم‌های مربوط به آگاهی‌رسانی را صفر کنید همچنین می‌توانید پرچم‌های آگاهی‌سازی را بازنشانی کنید.
 
 دوستدار شما، سامانهٔ آگاهی‌رسانی {{SITENAME}}
@@ -3313,6 +3328,7 @@ $2',
 'tooltip-undo' => '«خنثی‌سازی» این ویرایش را خنثی می‌کند و جعبهٔ ویرایش را در حالت پیش‌نمایش باز می‌کند تا افزودن دلیل در خلاصهٔ ویرایش ممکن شود.',
 'tooltip-preferences-save' => 'ذخیره کردن ترجیحات',
 'tooltip-summary' => 'خلاصه‌ای وارد کنید',
+'interlanguage-link-title' => '$1–$2',
 
 # Stylesheets
 'common.css' => '/* دستورات این بخش همهٔ کاربران را تحت تاثیر قرار می‌دهند. */',
@@ -3357,6 +3373,7 @@ $2',
 'pageinfo-length' => 'حجم صفحه  (بایت)',
 'pageinfo-article-id' => 'شناسهٔ صفحه',
 'pageinfo-language' => 'زبان محتوای صفحه',
+'pageinfo-content-model' => 'ساختار محتوای صفحه',
 'pageinfo-robot-policy' => '‌فهرست‌کردن توسط ربات‌ها',
 'pageinfo-robot-index' => 'مجاز',
 'pageinfo-robot-noindex' => 'نامجاز',
@@ -3444,7 +3461,7 @@ $1',
 'svg-long-desc' => 'پروندهٔ اس‌وی‌جی، با ابعاد <span dir="ltr">$1 × $2</span> پیکسل، اندازهٔ پرونده: $3',
 'svg-long-desc-animated' => 'پروندهٔ اس‌وی‌جی متحرک، با ابعاد <span dir="ltr">$1 × $2</span> پیکسل، اندازهٔ پرونده: $3',
 'svg-long-error' => 'پرونده SVG نامجاز: $1',
-'show-big-image' => 'تصویر با تفکیک‌پذیری بالاتر',
+'show-big-image' => 'پروندهٔ اصلی',
 'show-big-image-preview' => 'اندازهٔ این پیش‌نمایش: $1.',
 'show-big-image-other' => '{{PLURAL:$2|کیفیت|کیفیت‌های}} دیگر: $1.',
 'show-big-image-size' => '<span dir="ltr">$1 × $2</span> پیکسل',
@@ -4015,6 +4032,7 @@ $5
 'semicolon-separator' => '؛&#32;',
 'comma-separator' => '،&#32;',
 'percent' => '$1٪',
+'quotation-marks' => '$1',
 
 # Multipage image navigation
 'imgmultipageprev' => '&rarr; صفحهٔ پیشین',
@@ -4208,8 +4226,9 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'صفحه‌های ویژه',
+'specialpages-note-top' => 'شرح علائم',
 'specialpages-note' => '* صفحه‌های ویژهٔ عادی.
-* <strong class="mw-specialpagerestricted">صفحه‌های ویژهٔ محدودشده.</strong>',
+* <span class="mw-specialpagerestricted">صفحه‌های ویژهٔ محدودشده.</span>',
 'specialpages-group-maintenance' => 'گزارش‌های نگهداری',
 'specialpages-group-other' => 'سایر صفحه‌های ویژه',
 'specialpages-group-login' => 'ورود / ثبت نام',
@@ -4421,4 +4440,17 @@ $5
 'limitreport-expansiondepth' => 'بیشترین عمق گسترش',
 'limitreport-expensivefunctioncount' => 'تعداد تابع تجزیه‌گر پرمصرف',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'بسط‌دادن الگوها',
+'expand_templates_intro' => 'این صفحهٔ ویژه متنی را دریافت کرده و تمام الگوهای به‌کاررفته در آن را به طور بازگشتی بسط می‌دهد. همچنین تابع‌های تجزیه چون <code><nowiki>{{</nowiki>#language:…}}</code> و متغیرهایی چون  <code><nowiki>{{</nowiki>CURRENTDAY}}</code> را هم بسط می‌دهد — در واقع تقریباً هرچه را که داخل دوآکولاد باشد. این کار با صدازدن مرحلهٔ تجزیهٔ مربوط در خود مدیاویکی صورت می‌گیرد.',
+'expand_templates_title' => 'عنوان موضوع، برای {{FULLPAGENAME}} و غیره:',
+'expand_templates_input' => 'متن ورودی:',
+'expand_templates_output' => 'نتیجه',
+'expand_templates_xml_output' => 'خروجی XML',
+'expand_templates_ok' => 'تأیید',
+'expand_templates_remove_comments' => 'حذف ملاحظات',
+'expand_templates_remove_nowiki' => 'خنثی کردن تگ‌های <nowiki> در نتیجه',
+'expand_templates_generate_xml' => 'نمایش درخت تجزیهٔ XML',
+'expand_templates_preview' => 'پیش‌نمایش',
+
 );
index 88054fe..c4434b7 100644 (file)
@@ -76,7 +76,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Kelpaamaton_otsikko' ),
        'Blankpage'                 => array( 'Tyhjä_sivu' ),
        'Block'                     => array( 'Estä' ),
-       'Blockme'                   => array( 'Estä_minut' ),
        'Booksources'               => array( 'Kirjalähteet' ),
        'BrokenRedirects'           => array( 'Virheelliset_ohjaukset', 'Virheelliset_uudelleenohjaukset' ),
        'Categories'                => array( 'Luokat' ),
@@ -88,10 +87,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Luo_tunnus' ),
        'Deadendpages'              => array( 'Linkittömät_sivut' ),
        'DeletedContributions'      => array( 'Poistetut_muokkaukset' ),
-       'Disambiguations'           => array( 'Täsmennyssivut' ),
        'DoubleRedirects'           => array( 'Kaksinkertaiset_ohjaukset', 'Kaksinkertaiset_uudelleenohjaukset' ),
        'EditWatchlist'             => array( 'Muokkaa_tarkkailulistaa' ),
        'Emailuser'                 => array( 'Lähetä_sähköpostia' ),
+       'ExpandTemplates'           => array( 'Mallineiden_laajennus' ),
        'Export'                    => array( 'Vie_sivuja' ),
        'Fewestrevisions'           => array( 'Vähiten_muokatut_sivut' ),
        'FileDuplicateSearch'       => array( 'Kaksoiskappaleiden_haku' ),
@@ -134,6 +133,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Suojatut_sivut' ),
        'Protectedtitles'           => array( 'Suojatut_sivunimet' ),
        'Randompage'                => array( 'Satunnainen_sivu' ),
+       'RandomInCategory'          => array( 'Satunnainen_sivu_luokasta' ),
        'Randomredirect'            => array( 'Satunnainen_ohjaus', 'Satunnainen_uudelleenohjaus' ),
        'Recentchanges'             => array( 'Tuoreet_muutokset' ),
        'Recentchangeslinked'       => array( 'Linkitetyt_muutokset' ),
@@ -227,8 +227,8 @@ $magicWords = array(
        'img_center'                => array( '1', 'keskitetty', 'keski', 'center', 'centre' ),
        'img_framed'                => array( '1', 'kehys', 'kehystetty', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'kehyksetön', 'frameless' ),
-       'img_page'                  => array( '1', 'sivu=$1', 'sivu $1', 'page=$1', 'page $1' ),
-       'img_upright'               => array( '1', 'yläoikea', 'yläoikea=$1', 'yläoikea $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_page'                  => array( '1', 'sivu=$1', 'sivu_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'yläoikea', 'yläoikea=$1', 'yläoikea_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'reunus', 'border' ),
        'img_baseline'              => array( '1', 'perustaso', 'baseline' ),
        'img_sub'                   => array( '1', 'alaindeksi', 'sub' ),
@@ -592,12 +592,10 @@ $1',
 'pagetitle' => '$1 – {{SITENAME}}',
 'retrievedfrom' => 'Haettu osoitteesta $1',
 'youhavenewmessages' => 'Sinulle on $1 ($2).',
-'newmessageslink' => 'uusia viestejä',
-'newmessagesdifflink' => 'viimeisin muutos',
 'youhavenewmessagesfromusers' => 'Sinulle on $1 {{PLURAL:$3|toiselta käyttäjältä|$3 käyttäjältä}} ($2).',
 'youhavenewmessagesmanyusers' => 'Sinulle on $1 uusia viestejä useilta käyttäjiltä ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|uusi viesti|uusia viestejä}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|viimeinen muutos|viimeiset muutokset}}',
+'newmessageslinkplural' => '{{PLURAL:$1|uusi viesti|999=uusia viestejä}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|viimeinen muutos|999=viimeiset muutokset}}',
 'youhavenewmessagesmulti' => 'Sinulla on uusia viestejä sivuilla $1',
 'editsection' => 'muokkaa',
 'editold' => 'muokkaa',
@@ -937,9 +935,9 @@ Väliaikainen salasana: $2',
 
 # Special:ResetTokens
 'resettokens' => 'Uudista avaimet',
-'resettokens-text' => 'Tällä sivulla voit uudistaa avaimesi, jotka mahdollistavat pääsyn käyttäjätunnukseesi liittyviin tiettyihin yksityisiin tietoihin.
+'resettokens-text' => "Tällä sivulla voit uudistaa avaimesi (''eng.'' reset tokens), jotka mahdollistavat pääsyn käyttäjätunnukseesi liittyviin tiettyihin yksityisiin tietoihin.
 
-Sinun pitäisi tehdä tämä, jos olet vahingossa jakanut avaimet jonkun kanssa tai jos käyttäjätunnuksesi on vaarannettu.',
+Sinun pitäisi tehdä tämä, jos olet vahingossa jakanut avaimet jonkun kanssa tai jos käyttäjätunnuksesi on vaarannettu.",
 'resettokens-no-tokens' => 'Avaimia ei ole uudistettavaksi.',
 'resettokens-legend' => 'Uudista avaimet',
 'resettokens-tokens' => 'Avaimet:',
@@ -1427,7 +1425,6 @@ Kokeile lisätä haun alkuun ''all:'', niin haku kohdistuu kaikkeen sisältöön
 'preferences' => 'Asetukset',
 'mypreferences' => 'Asetukset',
 'prefs-edits' => 'Muokkauksia',
-'prefsnologin' => 'Et ole kirjautunut sisään.',
 'prefsnologintext2' => 'Sinun pitää $1 ennen kuin voit muuttaa käyttäjän asetuksia.',
 'changepassword' => 'Salasanan vaihto',
 'prefs-skin' => 'Ulkoasu',
@@ -1725,6 +1722,8 @@ Tämä tieto on julkinen.',
 'recentchanges-label-minor' => 'Tämä on pieni muutos',
 'recentchanges-label-bot' => 'Tämän muutoksen suoritti botti',
 'recentchanges-label-unpatrolled' => 'Tätä muutosta ei ole vielä tarkastettu',
+'recentchanges-label-plusminus' => 'Sivun koon muutos tavuina',
+'recentchanges-legend-newpage' => '(katso myös [[Special:NewPages|lista uusista sivuista]])',
 'rcnote' => 'Alla on {{PLURAL:$1|yksi muutos|$1 tuoreinta muutosta}} {{PLURAL:$2|yhden päivän|$2 viime päivän}} ajalta $4 kello $5 asti.',
 'rcnotefrom' => 'Alla on muutokset <b>$2</b> lähtien. Enintään <b>$1</b> merkintää näytetään.',
 'rclistfrom' => 'Näytä uudet muutokset $1 alkaen',
@@ -2965,14 +2964,16 @@ $2',
 
 # Special:Import
 'import' => 'Tuo sivuja',
-'importinterwiki' => 'Tuo sivuja muista wikeistä',
-'import-interwiki-text' => 'Valitse wiki ja sivun nimi. Versioiden päivämäärät ja muokkaajat säilytetään. Kaikki wikienväliset tuonnit kirjataan [[Special:Log/import|tuontilokiin]].',
+'importinterwiki' => 'Tuo sivuja muista wikeistä (transwiki import)',
+'import-interwiki-text' => 'Valitse wiki ja sivun nimi tuontia varten.
+Versioiden päivämäärät ja muokkaajien nimet säilyvät ennallaan. 
+Kaikki wikienväliset tuontitapahtumat kirjataan [[Special:Log/import|tuontilokiin]].',
 'import-interwiki-source' => 'Lähdewiki/sivu:',
-'import-interwiki-history' => 'Kopioi sivun koko historia',
-'import-interwiki-templates' => 'Liitä kaikki mallineet',
+'import-interwiki-history' => 'Kopioi sivun koko historia ja kaikki versiot',
+'import-interwiki-templates' => 'Ota mukaan kaikki mallineet',
 'import-interwiki-submit' => 'Tuo',
 'import-interwiki-namespace' => 'Kohdenimiavaruus:',
-'import-interwiki-rootpage' => 'Tuo annetun sivun alasivuiksi (valinnainen):',
+'import-interwiki-rootpage' => 'Kohteessa oleva perussivu (valinnainen):',
 'import-upload-filename' => 'Tiedostonimi:',
 'import-comment' => 'Kommentti:',
 'importtext' => 'Vie sivuja lähdewikistä käyttäen [[Special:Export|vientityökalua]].
@@ -2994,7 +2995,7 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'importuploaderrorpartial' => 'Tuontitiedoston tallennus epäonnistui. Tiedostosta oli lähetetty vain osa.',
 'importuploaderrortemp' => 'Tuontitiedoston tallennus epäonnistui. Väliaikaistiedostojen kansio puuttuu.',
 'import-parse-failure' => 'XML-tuonti epäonnistui jäsennysvirheen takia.',
-'import-noarticle' => 'Ei tuotavaa sivua.',
+'import-noarticle' => 'Ei sivua tuotavaksi!',
 'import-nonewrevisions' => 'Kaikki versiot on tuotu aiemmin.',
 'xml-error-string' => '$1 rivillä $2, sarakkeessa $3 (tavu $4): $5',
 'import-upload' => 'Tallenna XML-tiedosto',
@@ -3007,16 +3008,16 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'import-error-invalid' => 'Sivua $1 ei tuotu, koska sen nimi ei kelpaa.',
 'import-error-unserialize' => 'Versiota $2 sivusta $1 ei voida jakaa osiin. Version ilmoitettiin käyttävän sisältömallia $3 ja sarjoitusmuotoilua $4.',
 'import-options-wrong' => '{{PLURAL:$2|Väärä asetus|Väärät asetukset}}: <nowiki>$1</nowiki>',
-'import-rootpage-invalid' => 'Annettu sivun nimi ei kelpaa.',
-'import-rootpage-nosubpage' => 'Annetun sivun nimiavaruus $1 ei salli alasivuja.',
+'import-rootpage-invalid' => 'Annettu perussivun nimi ei kelpaa.',
+'import-rootpage-nosubpage' => 'Annetun perussivun nimiavaruus "$1" ei salli alasivuja.',
 
 # Import log
 'importlogpage' => 'Tuontiloki',
-'importlogpagetext' => 'Loki toisista wikeistä tuoduista sivuista.',
-'import-logentry-upload' => 'toi tiedoston [[$1]] tallentamalla sen',
+'importlogpagetext' => 'Loki ylläpitäjien toisista wikeistä tuomista sivuista, joissa on muokkaushistoriaa.',
+'import-logentry-upload' => 'toi sivun [[$1]] tiedostomuodossa',
 'import-logentry-upload-detail' => '{{PLURAL:$1|yksi versio|$1 versiota}}',
 'import-logentry-interwiki' => 'toi toisesta wikistä sivun $1',
-'import-logentry-interwiki-detail' => '{{PLURAL:$1|yksi versio|$1 versiota}} wikistä $2',
+'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|versio|versiota}} tuotiin wikistä $2',
 
 # JavaScriptTest
 'javascripttest' => 'JavaScriptin testaus',
@@ -3973,7 +3974,7 @@ Sinun olisi pitänyt saada [{{SERVER}}{{SCRIPTPATH}}/COPYING kopio GNU General P
 'tag-filter-submit' => 'Suodata',
 'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Merkintä|Merkinnät}}]]: $2)',
 'tags-title' => 'Merkinnät',
-'tags-intro' => 'Tämä sivu luetteloi merkinnät, joilla ohjelmisto voi merkitä muokkauksia, ja niiden tarkoitukset.',
+'tags-intro' => "Tämä sivu luetteloi ne merkinnät (''eng.'' tags), joilla ohjelmisto voi merkitä muokkauksia, ja niiden tarkoitukset.",
 'tags-tag' => 'Merkintänimi',
 'tags-display-header' => 'Näkyvyys muutosluetteloissa',
 'tags-description-header' => 'Täysi kuvaus tarkoituksesta',
@@ -4146,6 +4147,22 @@ Muussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|tavu|tavua}}',
 'limitreport-templateargumentsize' => 'Mallineen argumenttien koko',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|tavu|tavua}}',
-'limitreport-expansiondepth' => 'Suurin laajennussyvyys',
+'limitreport-expansiondepth' => 'Highest expansion depth',
+
+# Special:ExpandTemplates
+'expandtemplates' => 'Mallineiden laajennus',
+'expand_templates_intro' => 'Tämä toimintosivu ottaa syötteekseen tekstiä ja laajentaa kaikki mallineet rekursiivisesti sekä jäsenninfunktiot, kuten
+<code><nowiki>{{</nowiki>#language:...}}</code>, ja -muuttujat, kuten
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Toisin sanoen melkein kaiken, joka on kaksoisaaltosulkeiden sisällä.',
+'expand_templates_title' => 'Otsikko (esimerkiksi muuttujaa {{FULLPAGENAME}} varten)',
+'expand_templates_input' => 'Teksti',
+'expand_templates_output' => 'Tulos',
+'expand_templates_xml_output' => 'XML-tuloste',
+'expand_templates_ok' => 'Laajenna',
+'expand_templates_remove_comments' => 'Poista kommentit',
+'expand_templates_remove_nowiki' => 'Poista <nowiki>-tagit tulosteesta',
+'expand_templates_generate_xml' => 'Näytä XML-jäsennyspuu',
+'expand_templates_preview' => 'Esikatselu',
 
 );
index 942761a..b779082 100644 (file)
@@ -59,7 +59,6 @@ $specialPageAliases = array(
        'Categories'                => array( 'Bólkar' ),
        'Contributions'             => array( 'Brúkaraíkast' ),
        'Deadendpages'              => array( 'Gøtubotns síður' ),
-       'Disambiguations'           => array( 'Síður við fleirfaldum týdningi' ),
        'DoubleRedirects'           => array( 'Tvífaldað ávísing' ),
        'Emailuser'                 => array( 'Send t-post til brúkara' ),
        'Export'                    => array( 'Útflutningssíður' ),
@@ -386,12 +385,10 @@ Sí [[Special:Version|versjón síða]].',
 'ok' => 'Í lagi',
 'retrievedfrom' => 'Heintað frá "$1"',
 'youhavenewmessages' => 'Tú hevur $1 ($2).',
-'newmessageslink' => 'nýggj boð',
-'newmessagesdifflink' => 'seinasta broyting',
 'youhavenewmessagesfromusers' => 'Tú hevur $1 frá {{PLURAL:$3|øðrum brúkara|$3 brúkarum}} ($2).',
 'youhavenewmessagesmanyusers' => 'Tú hevur $1 frá fleiri brúkarum ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|eini nýggj boð|nýggj boð}}',
-'newmessagesdifflinkplural' => 'seinasta {{PLURAL:$1|broyting|broytingar}}',
+'newmessageslinkplural' => '{{PLURAL:$1|eini nýggj boð|999=nýggj boð}}',
+'newmessagesdifflinkplural' => 'seinasta {{PLURAL:$1|broyting|999=broytingar}}',
 'youhavenewmessagesmulti' => 'Tú hevur nýggj boð á $1',
 'editsection' => 'rætta',
 'editold' => 'rætta',
@@ -443,6 +440,8 @@ Hetta kann eisini benda á ein feil í software'ini sum {{SITENAME}} brúkar.",
 # General errors
 'error' => 'Villa',
 'databaseerror' => 'Villa í dátagrunni',
+'databaseerror-query' => 'Fyrispurningur: $1',
+'databaseerror-function' => 'Funksjón: $1',
 'databaseerror-error' => 'Feilur: $1',
 'laggedslavemode' => "'''Ávaring:''' Síðan inniheldur møguliga ikki nýggjar dagføringar.",
 'readonly' => 'Dátubasan er stongd fyri skriving',
@@ -519,7 +518,8 @@ Umboðsstjórin sum stongdi hana, gav hesa frágreiðing: "$3".',
 'invalidtitle-knownnamespace' => 'Ógyldugt heiti við navnaøki "$2" og teksti "$3"',
 'invalidtitle-unknownnamespace' => 'Ógyldigt heiti við ókendum navnaøkis tali $1 og teksti "$2"',
 'exception-nologin' => 'Tú ert ikki loggað/ur inn',
-'exception-nologin-text' => 'Henda síða ella tað tú ætlar at gera kremvur at tú ert innritað/ur á hesa wiki.',
+'exception-nologin-text' => 'Vinarliga [[Special:Userlogin|rita inn]] fyri at fáa atgongd til hesa síðu ella handling.',
+'exception-nologin-text-manual' => 'Vinarliga $1 fyri at fáa atgongd til hesa síðu ella handling.',
 
 # Virus scanner
 'virus-badscanner' => "Konfiguratións villa: Ókendur virus skannari: ''$1''",
@@ -1076,8 +1076,8 @@ Tú kanst síggja munin; smálutir eru at finna í [{{fullurl:{{#Special:Log}}/s
 'revdelete-hide-user' => 'Brúkaranavn/IP adressa hjá tí sum rættar',
 'revdelete-hide-restricted' => 'Síggj burtur frá data frá administratorum líka væl sum frá øðrum',
 'revdelete-radio-same' => '(ikki broyta)',
-'revdelete-radio-set' => 'Sjónligt',
-'revdelete-radio-unset' => 'Fjalt',
+'revdelete-radio-set' => 'Fjalt',
+'revdelete-radio-unset' => 'Sjónligt',
 'revdelete-suppress' => 'Síggj burtur frá data frá administratorum líka væl sum frá øðrum',
 'revdelete-unsuppress' => 'Tak burtur avmarkingar á endurskaptum versjónum',
 'revdelete-log' => 'Orsøk:',
@@ -1226,7 +1226,6 @@ Legg til merkis, at teirra innihaldsyvirlit av {{SITENAME}} kann vera gamalt og
 'preferences' => 'Innstillingar',
 'mypreferences' => 'Innstillingar',
 'prefs-edits' => 'Tal av rættingum:',
-'prefsnologin' => 'Tú hevur ikki ritað inn',
 'changepassword' => 'Broyt loyniorð',
 'prefs-skin' => 'Hamur',
 'skin-preview' => 'Forskoðan',
@@ -1505,6 +1504,7 @@ Tín t-post adressa verður ikki avdúkað, tá aðrir brúkarir seta seg í sam
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|broyting|broytingar}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|síðan seinastu vitjan}}',
 'enhancedrc-history' => 'søga',
 'recentchanges' => 'Seinastu broytingar',
 'recentchanges-legend' => 'Nýligar broytingar møguleikar',
@@ -1515,6 +1515,7 @@ Tín t-post adressa verður ikki avdúkað, tá aðrir brúkarir seta seg í sam
 'recentchanges-label-minor' => 'Hetta er ein lítil rætting',
 'recentchanges-label-bot' => 'Henda rætting varð gjørd av einum botti',
 'recentchanges-label-unpatrolled' => 'Henda rætting er ikki blivin eftirkannað enn',
+'recentchanges-legend-newpage' => '(sí eisini [[Special:NewPages|yvirlit yvir nýggjar síður]])',
 'rcnote' => "Niðanfyri {{PLURAL:$1|stendur '''1''' tann seinasta broytingin|standa '''$1''' tær seinastu broytingarnar}} {{PLURAL:$2|seinasta dagin|seinastu '''$2''' dagarnar}}, frá $5, $4.",
 'rcnotefrom' => "Niðanfyri standa broytingarnar síðani '''$2''', (upp til '''$1''' er sýndar).",
 'rclistfrom' => 'Sýn nýggjar broytingar byrjandi við $1',
@@ -1773,6 +1774,7 @@ Tú kanst eisini royna aftur, tá tað ikki eru so nógv í gongd her í senn.',
 'listfiles_size' => 'Stødd',
 'listfiles_description' => 'Frágreiðing',
 'listfiles_count' => 'Versjónir',
+'listfiles-latestversion' => 'Galdandi versjón',
 'listfiles-latestversion-yes' => 'Ja',
 'listfiles-latestversion-no' => 'Nei',
 
@@ -1978,6 +1980,7 @@ Víðaristilling verður nú gjørd til [[$2]].',
 'listusers' => 'Brúkaralisti',
 'listusers-editsonly' => 'Vís bara brúkarar sum hava gjørt rættingar',
 'listusers-creationsort' => 'Bólkað eftir stovningardegnum',
+'listusers-desc' => 'Sortera í minkandi raðfylgju',
 'usereditcount' => '$1 {{PLURAL:$1|rætting|rættingar}}',
 'usercreated' => '{{GENDER:$3|Upprættað}} hin $1 kl. $2',
 'newpages' => 'Nýggjar síður',
@@ -2333,6 +2336,7 @@ Sí [[Special:Log/delete|slettingarloggin]] fyri at síggja seinastu strikingar
 'undelete-search-prefix' => 'Vís síður sum byrja við:',
 'undelete-search-submit' => 'Leita',
 'undelete-no-results' => 'Ongar síður sum passaðu til vóru funnar í arkivinum yvir slettaðar síður.',
+'undelete-error' => 'Feilur hendi meðan síðan skuldi endurstovnast',
 'undelete-show-file-submit' => 'Ja',
 
 # Namespace form on various pages
@@ -2738,7 +2742,7 @@ Vinarliga royn aftur.',
 'tooltip-n-randompage' => 'Far til tilvildarliga síðu',
 'tooltip-n-help' => 'Staðið har tú fært hjálp',
 'tooltip-t-whatlinkshere' => 'Yvirlit yvir allar wikisíður, ið slóða higar',
-'tooltip-t-recentchangeslinked' => 'Broytingar á síðum, ið slóða higar, í seinastuni',
+'tooltip-t-recentchangeslinked' => 'Seinastu broytingar á síðum, ið slóða higar',
 'tooltip-feed-rss' => 'RSS-fóðurið til hesa síðuna',
 'tooltip-feed-atom' => 'Atom-fóðurið til hesa síðuna',
 'tooltip-t-contributions' => 'Skoða yvirlit yvir íkast hjá hesum brúkara',
@@ -2881,7 +2885,7 @@ Vinarliga royn aftur.',
 'svg-long-desc' => 'SVG fíle, nominelt $1 × $2 pixel, fíle stødd: $3',
 'svg-long-desc-animated' => 'Animerað SVG fíla, nominelt $1 × $2 pixels, fílustødd: $3',
 'svg-long-error' => 'Ógyldug SVG fíla: $1',
-'show-big-image' => 'Full upploysn',
+'show-big-image' => 'Upprunafíla',
 'show-big-image-preview' => 'Stødd av hesi forskoðan: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Onnur upploysn|Aðrar upploysnir}}: $1.',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|ramma|rammur}}',
@@ -3232,4 +3236,9 @@ Hendan váttanarkoda fer úr gildi tann $4.',
 'duration-decades' => '$1 {{PLURAL:$1|áratíggju}}',
 'duration-centuries' => '$1 {{PLURAL:$1|øld|øldir}}',
 
+# Special:ExpandTemplates
+'expand_templates_output' => 'Úrslit',
+'expand_templates_ok' => 'Í lagi',
+'expand_templates_preview' => 'Forskoðan',
+
 );
index ccd4cfb..f53bf94 100644 (file)
@@ -137,20 +137,20 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'MauvaisTitre', 'Mauvais_titre' ),
        'Blankpage'                 => array( 'Page_blanche', 'PageBlanche' ),
        'Block'                     => array( 'Bloquer', 'Blocage' ),
-       'Blockme'                   => array( 'Bloquez-moi', 'Bloquezmoi' ),
        'Booksources'               => array( 'Ouvrages_de_référence', 'Ouvrages_de_reference', 'Ouvragesderéférence', 'Ouvragesdereference', 'Recherche_ISBN', 'Recherche_isbn', 'RechercheISBN', 'Rechercheisbn' ),
        'BrokenRedirects'           => array( 'Redirections_cassées', 'RedirectionCassées', 'Redirections_cassees', 'RedirectionsCassees' ),
        'Categories'                => array( 'Catégories' ),
        'ChangeEmail'               => array( 'ChangerCouriel', 'Changer_courrielw' ),
        'ChangePassword'            => array( 'Changement_du_mot_de_passe', 'ChangementDuMotDePasse' ),
+       'ComparePages'              => array( 'Comparer_des_pages' ),
        'Confirmemail'              => array( 'Confirmer_l\'adresse_de_contact', 'Confirmer_le_courriel', 'ConfirmerLeCourriel' ),
        'CreateAccount'             => array( 'Créer_un_compte', 'CréerUnCompte', 'CréerCompte' ),
        'Deadendpages'              => array( 'Pages_en_impasse', 'PagesEnImpasse' ),
        'DeletedContributions'      => array( 'Contributions_supprimées', 'ContributionsSupprimées', 'ContributionSupprimees' ),
-       'Disambiguations'           => array( 'Homonymies', 'Homonymie', 'Pages_d\'homonymie' ),
        'DoubleRedirects'           => array( 'Doubles_redirections', 'DoublesRedirections', 'Redirections_doubles', 'RedirectionsDoubles' ),
        'EditWatchlist'             => array( 'Éditer_Liste_de_suivi', 'ÉditerListeDeSuivi' ),
        'Emailuser'                 => array( 'Envoyer_un_courriel', 'EnvoyerUnCourriel', 'Courriel', 'Envoyer_un_e-mail', 'EnvoyerUnEMail', 'E-mail', 'EMail' ),
+       'ExpandTemplates'           => array( 'ExpansionDesModèles' ),
        'Export'                    => array( 'Exporter', 'Exportation' ),
        'Fewestrevisions'           => array( 'Pages_les_moins_modifiées', 'PagesLesMoinsModifiées', 'Pages_les_moins_modifiees', 'PagesLesMoinsModifiees', 'Les_moins_modifiés', 'LesMoinsModifiés', 'Les_moins_modifies', 'LesMoinsModifies' ),
        'FileDuplicateSearch'       => array( 'Recherche_fichier_en_double', 'RechercheFichierEnDouble' ),
@@ -183,6 +183,7 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mes_discussions', 'Mesdiscussions' ),
        'Newimages'                 => array( 'Nouveaux_fichiers', 'NouveauxFichiers', 'Nouvelles_images', 'NouvellesImages' ),
        'Newpages'                  => array( 'Nouvelles_pages', 'NouvellesPages', 'Pages_récentes', 'PagesRécentes', 'Pages_recentes', 'PagesRecentes' ),
+       'PagesWithProp'             => array( 'Pages_avec_la_propriété' ),
        'PasswordReset'             => array( 'Réinitialisation_du_mot_de_passe', 'RéinitialisationDuMotDePasse' ),
        'PermanentLink'             => array( 'LienPermanent', 'Lien_permanent' ),
        'Popularpages'              => array( 'Pages_les_plus_visitées', 'Pages_les_plus_visitees', 'Pageslesplusvisitées', 'Pageslesplusvisitees' ),
@@ -191,9 +192,11 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Pages_protégées', 'PagesProtégées', 'Pages_protegees', 'PagesProtegees' ),
        'Protectedtitles'           => array( 'Titres_protégés', 'TitresProtégés', 'Titres_proteges', 'TitresProteges' ),
        'Randompage'                => array( 'Page_au_hasard', 'PageAuHasard', 'Au_hasard', 'AuHasard', 'Aléatoire', 'Aleatoire' ),
+       'RandomInCategory'          => array( 'Page_au_hasard_dans_une_catégorie' ),
        'Randomredirect'            => array( 'Redirection_au_hasard', 'Redirect_au_hasard', 'Redirectionauhasard', 'Redirectauhasard', 'Redirection_aléatoire', 'Redirect_aléatoire', 'Redirectionaléatoire', 'Redirectaléatoire', 'Redirection_aleatoire', 'Redirect_aleatoire', 'Redirectionaleatoire', 'Redirectaleatoire' ),
        'Recentchanges'             => array( 'Modifications_récentes', 'Modifications_recentes', 'ModificationsRécentes', 'ModificationsRecentes' ),
        'Recentchangeslinked'       => array( 'Suivi_des_liens', 'SuiviDesLiens' ),
+       'Redirect'                  => array( 'Redirection' ),
        'Revisiondelete'            => array( 'Versions_supprimées', 'Versions_supprimees', 'Versionsupprimées', 'Versionsupprimees' ),
        'Search'                    => array( 'Recherche', 'Rechercher', 'Chercher' ),
        'Shortpages'                => array( 'Pages_courtes', 'PagesCourtes' ),
@@ -273,6 +276,8 @@ $magicWords = array(
        'fullpagenamee'             => array( '1', 'NOMPAGECOMPLETX', 'FULLPAGENAMEE' ),
        'subpagename'               => array( '1', 'NOMSOUSPAGE', 'SUBPAGENAME' ),
        'subpagenamee'              => array( '1', 'NOMSOUSPAGEX', 'SUBPAGENAMEE' ),
+       'rootpagename'              => array( '1', 'NOMPAGERACINE', 'ROOTPAGENAME' ),
+       'rootpagenamee'             => array( '1', 'NOMPAGERACINEX', 'ROOTPAGENAMEE' ),
        'basepagename'              => array( '1', 'NOMBASEDEPAGE', 'BASEPAGENAME' ),
        'basepagenamee'             => array( '1', 'NOMBASEDEPAGEX', 'BASEPAGENAMEE' ),
        'talkpagename'              => array( '1', 'NOMPAGEDISCUSSION', 'TALKPAGENAME' ),
@@ -287,9 +292,10 @@ $magicWords = array(
        'img_center'                => array( '1', 'centré', 'center', 'centre' ),
        'img_framed'                => array( '1', 'cadre', 'encadré', 'encadre', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'sans_cadre', 'non_encadré', 'non_encadre', 'frameless' ),
-       'img_upright'               => array( '1', 'redresse', 'redresse=$1', 'redresse $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_lang'                  => array( '1', 'langue=$1', 'lang=$1' ),
+       'img_upright'               => array( '1', 'redresse', 'redresse=$1', 'redresse_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'bordure', 'border' ),
-       'img_baseline'              => array( '1', 'ligne_de_base', 'base', 'baseline' ),
+       'img_baseline'              => array( '1', 'ligne-de-base', 'base', 'baseline' ),
        'img_sub'                   => array( '1', 'indice', 'ind', 'sub' ),
        'img_super'                 => array( '1', 'exposant', 'exp', 'super', 'sup' ),
        'img_top'                   => array( '1', 'haut', 'top' ),
@@ -298,12 +304,14 @@ $magicWords = array(
        'img_bottom'                => array( '1', 'bas', 'bottom' ),
        'img_text_bottom'           => array( '1', 'bas-texte', 'bas-txt', 'text-bottom' ),
        'img_link'                  => array( '1', 'lien=$1', 'link=$1' ),
+       'img_class'                 => array( '1', 'classe=$1', 'class=$1' ),
        'sitename'                  => array( '1', 'NOMSITE', 'SITENAME' ),
        'ns'                        => array( '0', 'ESPACEN:', 'NS:' ),
        'nse'                       => array( '0', 'ESPACENX:', 'NSE:' ),
        'localurl'                  => array( '0', 'URLLOCALE:', 'LOCALURL:' ),
        'localurle'                 => array( '0', 'URLLOCALEX:', 'LOCALURLE:' ),
        'articlepath'               => array( '0', 'CHEMINARTICLE', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'IDPAGE', 'PAGEID' ),
        'server'                    => array( '0', 'SERVEUR', 'SERVER' ),
        'servername'                => array( '0', 'NOMSERVEUR', 'SERVERNAME' ),
        'scriptpath'                => array( '0', 'CHEMINSCRIPT', 'SCRIPTPATH' ),
@@ -327,6 +335,8 @@ $magicWords = array(
        'plural'                    => array( '0', 'PLURIEL:', 'PLURAL:' ),
        'fullurl'                   => array( '0', 'URLCOMPLETE:', 'FULLURL:' ),
        'fullurle'                  => array( '0', 'URLCOMPLETEX:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'URLCANONIQUE:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'URLCANONIQUEX:', 'CANONICALURLE:' ),
        'lcfirst'                   => array( '0', 'INITMINUS:', 'LCFIRST:' ),
        'ucfirst'                   => array( '0', 'INITMAJUS:', 'INITCAPIT:', 'UCFIRST:' ),
        'lc'                        => array( '0', 'MINUS:', 'LC:' ),
@@ -334,6 +344,7 @@ $magicWords = array(
        'raw'                       => array( '0', 'BRUT:', 'RAW:' ),
        'displaytitle'              => array( '1', 'AFFICHERTITRE', 'DISPLAYTITLE' ),
        'rawsuffix'                 => array( '1', 'BRUT', 'B', 'R' ),
+       'nocommafysuffix'           => array( '0', 'SANSSEP', 'NOSEP' ),
        'newsectionlink'            => array( '1', '__LIENNOUVELLESECTION__', '__NEWSECTIONLINK__' ),
        'nonewsectionlink'          => array( '1', '__AUCUNLIENNOUVELLESECTION__', '__NONEWSECTIONLINK__' ),
        'currentversion'            => array( '1', 'VERSIONACTUELLE', 'CURRENTVERSION' ),
@@ -350,6 +361,7 @@ $magicWords = array(
        'padleft'                   => array( '0', 'BOURRAGEGAUCHE', 'BOURREGAUCHE', 'PADLEFT' ),
        'padright'                  => array( '0', 'BOURRAGEDROITE', 'BOURREDROITE', 'PADRIGHT' ),
        'special'                   => array( '0', 'spécial', 'special' ),
+       'speciale'                  => array( '0', 'spéciale', 'speciale' ),
        'defaultsort'               => array( '1', 'CLEFDETRI:', 'CLEDETRI:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
        'filepath'                  => array( '0', 'CHEMIN:', 'FILEPATH:' ),
        'tag'                       => array( '0', 'balise', 'tag' ),
@@ -362,8 +374,11 @@ $magicWords = array(
        'protectionlevel'           => array( '1', 'NIVEAUDEPROTECTION', 'PROTECTIONLEVEL' ),
        'url_path'                  => array( '0', 'CHEMIN', 'PATH' ),
        'url_query'                 => array( '0', 'QUESTION', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'sanserreur', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'sansremplacer', 'noreplace' ),
        'pagesincategory_all'       => array( '0', 'tous', 'all' ),
-       'pagesincategory_files'     => array( '0', 'fichier', 'files' ),
+       'pagesincategory_subcats'   => array( '0', 'souscats', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'fichiers', 'files' ),
 );
 
 $bookstoreList = array(
@@ -666,11 +681,9 @@ $1",
 'ok' => 'Valider',
 'retrievedfrom' => 'Récupérée de « $1 »',
 'youhavenewmessages' => 'Vous avez $1 ($2).',
-'newmessageslink' => 'de nouveaux messages',
-'newmessagesdifflink' => 'dernière modification',
 'youhavenewmessagesfromusers' => "Vous avez $1 {{PLURAL:$3|d'un autre utilisateur|de $3 autres utilisateurs}} ($2).",
 'youhavenewmessagesmanyusers' => 'Vous avez $1 de nombreux utilisateurs ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|un message|de nouveaux messages}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un nouveau message|de nouveaux messages}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|dernière modification|dernières modifications}}',
 'youhavenewmessagesmulti' => 'Vous avez de nouveaux messages sur $1.',
 'editsection' => 'modifier',
@@ -765,7 +778,7 @@ Aucune explication n'a été fournie.",
 'badtitle' => 'Mauvais titre',
 'badtitletext' => 'Le titre de la page demandée est invalide, vide, ou il s’agit d’un titre inter-langue ou inter-projet mal formé. Il contient peut-être un ou plusieurs caractères qui ne peuvent pas être utilisés dans les titres.',
 'perfcached' => 'Les données suivantes sont en cache et peuvent ne pas être à jour. Un maximum de {{PLURAL:$1|un résultat|$1 résultats}} est disponible dans le cache.',
-'perfcachedts' => 'Les données suivantes sont en cache et ont été mises à jour pour la dernière fois à $1. Un maximum de {{PLURAL:$4|un résultat|$4 résultats}} est disponible dans le cache.',
+'perfcachedts' => 'Les données suivantes sont en cache et ont été mises à jour pour la dernière fois le $1. Un maximum de {{PLURAL:$4|un résultat est disponible|$4 résultats sont disponibles}} dans le cache.',
 'querypage-no-updates' => 'Les mises à jour pour cette page sont actuellement désactivées. Les données ci-dessous ne sont pas mises à jour.',
 'wrong_wfQuery_params' => 'Paramètres incorrects sur wfQuery()<br />
 Fonction : $1<br />
@@ -1508,7 +1521,6 @@ Essayez en utilisant le préfixe ''all:'' pour rechercher dans tout le contenu (
 'preferences' => 'Préférences',
 'mypreferences' => 'Préférences',
 'prefs-edits' => 'Nombre de modifications :',
-'prefsnologin' => 'Non connecté',
 'prefsnologintext2' => 'Veuillez $1 pour définir les préférences utilisateur.',
 'changepassword' => 'Changer de mot de passe',
 'prefs-skin' => 'Habillage',
@@ -1808,6 +1820,9 @@ Cette information sera publique.',
 'recentchanges-label-minor' => 'Cette modification est mineure',
 'recentchanges-label-bot' => 'Cette modification a été effectuée par un robot.',
 'recentchanges-label-unpatrolled' => "Cette modification n'a pas encore été patrouillée.",
+'recentchanges-label-plusminus' => 'La taille de la page a changé de ce nombre d’octets',
+'recentchanges-legend-newpage' => '(voir aussi la [[Special:NewPages|liste des nouvelles pages]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "Voici {{PLURAL:$1|la dernière modification effectuée|les $1 dernières modifications effectuées}} durant {{PLURAL:$2|la dernière journée|les <b>$2</b> derniers jours}} jusqu'à $5 le $4.",
 'rcnotefrom' => "Voici les modifications effectuées depuis le '''$2''' ('''$1''' au maximum).",
 'rclistfrom' => 'Afficher les nouvelles modifications depuis le $1.',
@@ -4369,4 +4384,21 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'limitreport-expansiondepth' => 'Plus grande profondeur d’expansion',
 'limitreport-expensivefunctioncount' => 'Nombre de fonctions d’analyse coûteuses',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Expansion des modèles',
+'expand_templates_intro' => "Cette page spéciale accepte un texte wiki source et permet de réaliser récursivement l’expansion des modèles qu’il contient.
+Elle réalise aussi l’expansion des fonctions du parseur telles que
+<code><nowiki>{{</nowiki>#language:...}}</code> et des variables telles que
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+En fait, elle réalise l'expansion de pratiquement tout ce qui est encadré par des doubles accolades.",
+'expand_templates_title' => 'Titre de la page, si le code utilise {{FULLPAGENAME}}, etc. :',
+'expand_templates_input' => 'Texte wiki source :',
+'expand_templates_output' => 'Texte wiki obtenu après expansion',
+'expand_templates_xml_output' => 'Résultat intermédiaire de l’analyse, au format XML',
+'expand_templates_ok' => 'Valider',
+'expand_templates_remove_comments' => 'Supprimer les commentaires',
+'expand_templates_remove_nowiki' => 'Supprime les marqueurs <nowiki> dans le résultat',
+'expand_templates_generate_xml' => 'Voir l’arborescence d’analyse XML',
+'expand_templates_preview' => 'Aperçu du rendu',
+
 );
index df78848..bce0091 100644 (file)
@@ -59,7 +59,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Pâges_les_muens_dèrriérement_changiês', 'PâgesLesMuensDèrriérementChangiês' ),
        'Blankpage'                 => array( 'Pâge_voueda', 'PâgeVoueda' ),
        'Block'                     => array( 'Blocar', 'Blocâjo' ),
-       'Blockme'                   => array( 'Blocâd-mè', 'BlocâdMè' ),
        'Booksources'               => array( 'Ôvres_de_refèrence', 'ÔvresDeRefèrence' ),
        'BrokenRedirects'           => array( 'Redirèccions_câsses', 'RedirèccionsCâsses' ),
        'Categories'                => array( 'Catègories' ),
@@ -69,9 +68,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Fâre_un_compto', 'FâreUnCompto' ),
        'Deadendpages'              => array( 'Pâges_en_cul-de-sac', 'PâgesEnCulDeSac' ),
        'DeletedContributions'      => array( 'Contribucions_suprimâs', 'ContribucionsSuprimâs' ),
-       'Disambiguations'           => array( 'Homonimia', 'Homonimies', 'Pâges_d\'homonimia', 'PâgesDHomonimia' ),
        'DoubleRedirects'           => array( 'Redirèccions_dobles', 'RedirèccionsDobles' ),
        'Emailuser'                 => array( 'Mandar_un_mèssâjo', 'MandarUnMèssâjo', 'Mèssâjo' ),
+       'ExpandTemplates'           => array( 'Èxpension_des_modèlos', 'ÈxpensionDesModèlos' ),
        'Export'                    => array( 'Èxportar', 'Èxportacion' ),
        'Fewestrevisions'           => array( 'Pâges_les_muens_changiês', 'PâgesLesMuensChangiês' ),
        'FileDuplicateSearch'       => array( 'Rechèrche_des_fichiérs_en_doblo', 'RechèrcheDesFichiérsEnDoblo' ),
@@ -111,6 +110,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Pâges_protègiês', 'PâgesProtègiês' ),
        'Protectedtitles'           => array( 'Titros_protègiês', 'TitrosProtègiês' ),
        'Randompage'                => array( 'Pâge_a_l\'hasârd', 'PâgeALHasârd' ),
+       'RandomInCategory'          => array( 'Pâge_a_l\'hasârd_dens_una_catègorie', 'PâgeALHasârdDensUnaCatègorie' ),
        'Randomredirect'            => array( 'Redirèccion_a_l\'hasârd', 'RedirèccionALHasârd' ),
        'Recentchanges'             => array( 'Dèrriérs_changements', 'DèrriérsChangements' ),
        'Recentchangeslinked'       => array( 'Survelyence_des_lims', 'SurvelyenceDesLims' ),
@@ -582,8 +582,6 @@ Vêde la [[Special:Version|pâge de les vèrsions]].',
 'ok' => 'D’acôrd',
 'retrievedfrom' => 'Rècupèrâye de « $1 »',
 'youhavenewmessages' => 'Vos éd de $1 ($2).',
-'newmessageslink' => 'mèssâjos novéls',
-'newmessagesdifflink' => 'dèrriér changement',
 'youhavenewmessagesfromusers' => 'Vos éd $1 {{PLURAL:$3|d’un ôtr’utilisator|de $3 ôtros utilisators}} ($2).',
 'youhavenewmessagesmanyusers' => 'Vos éd $1 d’un mouél d’utilisators ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|un mèssâjo novél|de mèssâjos novéls}}',
@@ -1448,7 +1446,6 @@ Notâd que lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
 'preferences' => 'Prèferences',
 'mypreferences' => 'Prèferences',
 'prefs-edits' => 'Nombro de changements :',
-'prefsnologin' => 'Pas branchiê',
 'changepassword' => 'Changiér lo contresegno',
 'prefs-skin' => 'Habelyâjo',
 'skin-preview' => 'Prèvêre',
@@ -1724,6 +1721,7 @@ Se vos chouèsésséd de lo balyér, serat empleyê por vos atribuar voutres ôv
 'recentchanges-label-minor' => 'O est un petiôt changement',
 'recentchanges-label-bot' => 'Ceti changement est étâ fêt per un robot',
 'recentchanges-label-unpatrolled' => 'Ceti changement est p’oncor étâ gouardâ',
+'recentchanges-legend-newpage' => '$1 - pâge novèla',
 'rcnote' => "Vê-que {{PLURAL:$1|lo dèrriér changement fêt|los '''$1''' dèrriérs changements fêts}} pendent {{PLURAL:$2|lo jorn passâ|los '''$2''' jorns passâs}} tant qu’a $5 lo $4.",
 'rcnotefrom' => "Vê-que los changements fêts dês lo '''$2''' (tant qu’a '''$1''' montrâs).",
 'rclistfrom' => 'Montrar los novéls changements dês lo $1',
@@ -4210,4 +4208,21 @@ Vos devriâd avêr reçu un [{{SERVER}}{{SCRIPTPATH}}/COPYING ègzemplèro de la
 'duration-centuries' => '$1 sièclo{{PLURAL:$1||s}}',
 'duration-millennia' => '$1 milènèro{{PLURAL:$1||s}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Èxpension des modèlos',
+'expand_templates_intro' => 'Ceta pâge spèciâla accèpte un vouiquitèxto sôrsa et pèrmèt de rèalisar rècursivament l’èxpension des modèlos que contint.
+Rèalise asse-ben l’èxpension de les fonccions du parsor coment
+<code><nowiki>{{</nowiki>#language:...<nowiki>}}</nowiki></code> et de les variâbles prèdèfenies coment
+<code><nowiki>{{</nowiki>CURRENTDAY<nowiki>}}</nowiki></code> — en veré praticament tot cen qu’est encâdrâ per des dobles colâdes.
+Rèalise cen en apelent los étâjos succèssifs que vont avouéc du parsor de MediaWiki lui-mémo.',
+'expand_templates_title' => 'Titro de la pâge, se lo code utilise {{FULLPAGENAME}}, etc. :',
+'expand_templates_input' => 'Vouiquitèxto sôrsa :',
+'expand_templates_output' => 'Rèsultat',
+'expand_templates_xml_output' => 'Rèsultat u format XML',
+'expand_templates_ok' => 'D’acôrd',
+'expand_templates_remove_comments' => 'Suprimar los comentèros',
+'expand_templates_remove_nowiki' => 'Suprime les balises <nowiki> dens lo rèsultat',
+'expand_templates_generate_xml' => 'Fâre vêre l’âbro du parsor u format XML',
+'expand_templates_preview' => 'Prèvisualisacion du rendu',
+
 );
index d62dadd..7e25267 100644 (file)
@@ -297,12 +297,10 @@ Luke efter bi't [[Special:Version|werjuunssidj]]",
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'Faan „$1“',
 'youhavenewmessages' => 'Dü heest $1 ($2).',
-'newmessageslink' => 'nei bööd',
-'newmessagesdifflink' => 'Leest änring',
 'youhavenewmessagesfromusers' => 'Dü heest $1 faan {{PLURAL:$3|en öödern brüker|$3 ööder brükern}} ($2).',
 'youhavenewmessagesmanyusers' => 'Dü heest $1 faan flook ööder brükern ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|ian nei nooracht|nei noorachten}}',
-'newmessagesdifflinkplural' => 'leetst {{PLURAL:$1|feranrang|feranrangen}}',
+'newmessageslinkplural' => '{{PLURAL:$1|ian nei bööd|999=nei bööd}}',
+'newmessagesdifflinkplural' => 'leetst {{PLURAL:$1|feranrang|999=feranrangen}}',
 'youhavenewmessagesmulti' => 'Dü heest nei bööd üüb $1',
 'editsection' => 'Bewerke',
 'editold' => 'Bewerke',
@@ -432,7 +430,8 @@ Di grünj faan di administraator as: „$3“.',
 'invalidtitle-knownnamespace' => 'Ferkiard auerskraft uun di nöömrüm „$2“ an tekst „$3“',
 'invalidtitle-unknownnamespace' => 'Ferkiard auerskraft uun di ünbekäänd nöömrüm „$1“ an tekst „$2“',
 'exception-nologin' => 'Ei uunmeldet',
-'exception-nologin-text' => 'Det könst dü bluas bewerke, wan dü uunmeldet beest.',
+'exception-nologin-text' => 'Wees so gud an [[Special:Userlogin|melde di uun]], am detdiar sidj of aktjuun ütjtufeeren.',
+'exception-nologin-text-manual' => 'Wees so gud an $1 , am detdiar sidj of aktjuun ütjtufeeren.',
 
 # Virus scanner
 'virus-badscanner' => "Ferkiard iinstelang: Ünbekäänd wiirenscanner: ''$1''",
@@ -985,8 +984,8 @@ Dü könst di ferskeel uunluke. Wan dü muar wed wel, luke iin uun't [{{fullurl:
 'revdelete-hide-user' => 'Brükernööm/IP-adres faan di brüker',
 'revdelete-hide-restricted' => 'Dooten uk för administratooren an öödern fersteeg',
 'revdelete-radio-same' => '(ei feranre)',
-'revdelete-radio-set' => 'Tu sen',
-'revdelete-radio-unset' => 'Ferbürgen',
+'revdelete-radio-set' => 'Ferbürgen',
+'revdelete-radio-unset' => 'Tu sen',
 'revdelete-suppress' => "Grünj för't striken uk för administratooren an öödern fersteeg",
 'revdelete-unsuppress' => 'Weder iinsteld werjuunen luasmaage',
 'revdelete-log' => 'Grünj:',
@@ -1139,7 +1138,7 @@ Dü könst det uun't [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'preferences' => 'Iinstelangen',
 'mypreferences' => 'Iinstelangen',
 'prefs-edits' => 'Taal faan feranrangen:',
-'prefsnologin' => 'Ei uunmeldet',
+'prefsnologintext2' => 'Wees so gud an $1 , am din brüker-iinstelangen fäästtuleien.',
 'changepassword' => 'Paaswurd feranre',
 'prefs-skin' => 'Skak',
 'skin-preview' => 'Föörskau',
@@ -1437,6 +1436,9 @@ Arken koon det lees.',
 'recentchanges-label-minor' => 'Letj feranrang',
 'recentchanges-label-bot' => 'Feranrang faan en bot',
 'recentchanges-label-unpatrolled' => 'Detdiar feranrang as noch ei efterluket wurden',
+'recentchanges-label-plusminus' => 'Feranert sidjengrate (am soföl bytes)',
+'recentchanges-legend-newpage' => "(luke uk bi't [[Special:NewPages|list mä nei sidjen]])",
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "Diar {{PLURAL:$1|stäänt det leetst feranrang|stun a leetst '''$1''' feranrangen}} faan a leetst {{PLURAL:$2|dai|'''$2''' daar}}. Stant: $4, am a klook $5.",
 'rcnotefrom' => "Diar wurd a feranrangen sant '''$2'''uunwiset (ei muar üs '''$1''' feranrangen).",
 'rclistfrom' => 'Bluas feranrangen sant $1 wise.',
@@ -2139,7 +2141,7 @@ Kontakt tu di bewerker:
 E-mail: $PAGEEDITOR_EMAIL
 Wiki: $PAGEEDITOR_WIKI
 
-Di wurd iarst ans nian e-mails muar tu detdiar sidj schüürd, bit dü det sidj weder beschükst. Üüb din list faan sidjen, diar dü uun\'t uug behual wel, könst dü a noorachtenkääntiaken weder turagsaat.
+Di wurd iarst ans nian e-mails muar tu detdiar sidj schüürd, bit dü det sidj weder uunmeldet beschükst. Üüb din list faan sidjen, diar dü uun\'t uug behual wel, könst dü a noorachtenkääntiaken weder turagsaat.
 
 Dan frinjelk {{SITENAME}}-noorachten siinst
 
@@ -2920,7 +2922,7 @@ $1",
 'svg-long-desc' => 'SVG-datei, grate: $1 × $2 pixel, dateigrate: $3',
 'svg-long-desc-animated' => 'Animiaret SVG-datei, grate $1 × $2 pixel, dateigrate: $3',
 'svg-long-error' => 'Ferkiard SVG-datei: $1',
-'show-big-image' => 'Huuger apliasang',
+'show-big-image' => 'Originaal datei',
 'show-big-image-preview' => 'Grate faan detdiar föörskaubil: $1.',
 'show-big-image-other' => 'Ööder {{PLURAL:$2|apliasang|apliasangen}}: $1.',
 'show-big-image-size' => '$1 × $2 pixel',
@@ -3607,9 +3609,9 @@ An det woort so brükt: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special
 
 # Special:SpecialPages
 'specialpages' => 'Spezial-sidjen',
+'specialpages-note-top' => 'Legend',
 'specialpages-note' => '* Normool spezial-sidjen
-* <span class="mw-specialpagerestricted">Spezial-sidjen mä tugripsrochten</span>
-* <span class="mw-specialpagecached">Spezial-sidjen uun a cache (As ferlicht ei muar aktuel.)</span>',
+* <span class="mw-specialpagerestricted">Spezial-sidjen mä tugripsrochten</span>',
 'specialpages-group-maintenance' => 'Werksteedsidjen',
 'specialpages-group-other' => 'Ööder spezial-sidjen',
 'specialpages-group-login' => 'Melde di uun of skriiw di iin',
@@ -3823,4 +3825,18 @@ An det woort so brükt: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special
 'limitreport-expansiondepth' => 'Maksimaal ütjwidjangsjipde',
 'limitreport-expensivefunctioncount' => 'Taal faan apwendag parser-funktjuunen',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Föörlaagen ütjwidje',
+'expand_templates_intro' => 'Üüb detdiar spezial-sidj wurd a föörlaagen faan di tekst rekursiif ütjwidjet.
+Uk parser-funktjuunen liküs <code><nowiki>{{</nowiki>#language:…}}</code> an wariaabeln liküs <code><nowiki>{{</nowiki>CURRENTDAY}}</code> wurd ferwerket - det ment ales, wat tesken dobelt sleufen stäänt.',
+'expand_templates_title' => 'Kontekst-tiitel, för {{FULLPAGENAME}} asw.:',
+'expand_templates_input' => 'Skriiwfial:',
+'expand_templates_output' => 'Resultaat',
+'expand_templates_xml_output' => 'XML-resultaat',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Komentaaren wechnem',
+'expand_templates_remove_nowiki' => "<nowiki>-tags uun't resultaat ei uunwise",
+'expand_templates_generate_xml' => 'XML-parser-buum uunwise',
+'expand_templates_preview' => 'Föörskau',
+
 );
index 90f3c69..2fab5cf 100644 (file)
@@ -51,7 +51,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Contribûts', 'ContribûtsUtent' ),
        'CreateAccount'             => array( 'CreeIdentitât' ),
        'Deadendpages'              => array( 'PagjinisCenceJessude' ),
-       'Disambiguations'           => array( 'Omonimiis' ),
        'DoubleRedirects'           => array( 'ReIndreçamentsDoplis' ),
        'Emailuser'                 => array( 'MandeEmail' ),
        'Export'                    => array( 'Espuarte' ),
@@ -98,8 +97,8 @@ $specialPageAliases = array(
        'Unusedtemplates'           => array( 'ModeiNoDoprâts' ),
        'Unwatchedpages'            => array( 'PagjinisNoTignudisDiVoli' ),
        'Upload'                    => array( 'Cjame' ),
-       'Userlogin'                 => array( 'Jentre', 'Login' ),
-       'Userlogout'                => array( 'Jes', 'Logout' ),
+       'Userlogin'                 => array( 'Jentre' ),
+       'Userlogout'                => array( 'Jes' ),
        'Userrights'                => array( 'PermèsUtents' ),
        'Wantedcategories'          => array( 'CategoriisDesideradis' ),
        'Watchlist'                 => array( 'TignudisDiVoli' ),
@@ -340,8 +339,6 @@ $messages = array(
 'ok' => 'Va ben',
 'retrievedfrom' => 'Cjapât fûr di $1',
 'youhavenewmessages' => 'Tu âs $1 ($2).',
-'newmessageslink' => 'gnûfs messaçs',
-'newmessagesdifflink' => 'difarencis cu la penultime revision',
 'youhavenewmessagesmulti' => 'Tu âs gnûfs messaçs su $1',
 'editsection' => 'cambie',
 'editold' => 'cambie',
@@ -705,7 +702,6 @@ Leiende: (cur) = difarencis cun la version atuâl, (prec) = difarencis cun la ve
 'preferences' => 'Preferencis',
 'mypreferences' => 'Preferencis',
 'prefs-edits' => 'Numar di cambiaments fats:',
-'prefsnologin' => 'No tu sês jentrât',
 'changepassword' => 'Gambie peraule clâf',
 'prefs-skin' => 'Mascare',
 'skin-preview' => 'Anteprime',
@@ -1676,4 +1672,11 @@ Se il file al è stât cambiât rispiet al so stât origjinâl, cualchi informaz
 # API errors
 'api-error-unclassified' => 'Al è capitât un erôr no cognossût',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Espant i modei',
+'expand_templates_output' => 'Risultât',
+'expand_templates_ok' => 'Va ben',
+'expand_templates_remove_comments' => 'Gjave i coments',
+'expand_templates_preview' => 'Anteprime',
+
 );
index 1bf830f..c3ddfec 100644 (file)
@@ -75,7 +75,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Meidogger-bydragen', 'Meidogger bydragen', 'Bydragen', 'Brûker bydragen' ),
        'CreateAccount'             => array( 'Nije ynstellings oanmeitsje', 'Nijeynstellingsoanmeitsje' ),
        'Deadendpages'              => array( 'Siden sûnder keppelings', 'Siden sûnder ferwizings', 'Siden sûnder links' ),
-       'Disambiguations'           => array( 'Betsjuttingssiden', 'Trochferwizings' ),
        'DoubleRedirects'           => array( 'Dûbele trochferwizings', 'Dûbeletrochferwizings' ),
        'Emailuser'                 => array( 'Skriuw meidogger', 'Skriuw dizze brûker', 'Skriuw dizze meidogger' ),
        'Export'                    => array( 'Eksportearje' ),
@@ -387,8 +386,6 @@ $1",
 'ok' => 'Goed',
 'retrievedfrom' => 'Untfongen fan "$1"',
 'youhavenewmessages' => 'Jo hawwe $1 ($2).',
-'newmessageslink' => 'nije berjochten',
-'newmessagesdifflink' => 'ferskil mei foarlêste ferzje',
 'youhavenewmessagesmulti' => 'Jo hawwe nije berjochten op $1',
 'editsection' => 'bewurkje',
 'editold' => 'bewurkje',
@@ -950,7 +947,6 @@ Jo kinne ek in nammerûmte as foarheaksel brûke.",
 'preferences' => 'Ynstellings',
 'mypreferences' => 'Myn foarkarynstellings',
 'prefs-edits' => 'Tal bewurkings:',
-'prefsnologin' => 'Net oanmeld',
 'changepassword' => 'Wachtwurd feroarje',
 'prefs-skin' => 'Side-oansjen',
 'skin-preview' => 'Proefbyld',
@@ -1182,6 +1178,7 @@ Jo kinne ek oaren de mûglikheid jaan kontakt mei jo op te nimmen troch in ferwi
 'recentchanges-label-minor' => 'Dit is in tekstwiziging',
 'recentchanges-label-bot' => 'Dizze wiziging is troch in robot makke',
 'recentchanges-label-unpatrolled' => 'Dizze wiziging is noch net neisjûn',
+'recentchanges-legend-newpage' => '$1 - nije side',
 'rcnote' => "Dit {{PLURAL:$1|is de lêste feroaring|binne de lêste '''$1''' feroarings}} yn de lêste {{PLURAL:$2|dei|'''$2''' dagen}}, fan $4 $5.",
 'rcnotefrom' => 'Dit binne de feroarings sûnt <b>$2</b> (maksimaal <b>$1</b>).',
 'rclistfrom' => 'Jou nije feroarings, begjinnende mei $1',
index a7ef5b4..a72fa86 100644 (file)
@@ -344,8 +344,6 @@ $messages = array(
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Aisghabháil ó "$1"',
 'youhavenewmessages' => 'Tá $1 agat ($2).',
-'newmessageslink' => 'teachtaireachtaí nua',
-'newmessagesdifflink' => 'difear ón leasú leathdhéanach',
 'youhavenewmessagesmulti' => 'Tá teachtaireachtaí nua agat ar $1',
 'editsection' => 'athraigh',
 'editold' => 'athraigh',
@@ -821,7 +819,6 @@ Bain triail as ''all:'' a chur roimh d'iarratas chun an t-inneachar ar fad (leat
 # Preferences page
 'preferences' => 'Sainroghanna',
 'mypreferences' => 'Sainroghanna',
-'prefsnologin' => 'Níl tú logáilte isteach',
 'changepassword' => "Athraigh d'fhocal faire",
 'prefs-skin' => 'Craiceann',
 'skin-preview' => 'Réamhamharc',
@@ -959,6 +956,7 @@ do chuid dreachtaí a chur i leith tusa.',
 'recentchanges-feed-description' => 'Rianaigh na n-athruite vicí is déanaí sa fotha seo.',
 'recentchanges-label-minor' => 'Mionathrú é seo',
 'recentchanges-label-bot' => 'Chomhlíon róbó an t-athrú seo',
+'recentchanges-legend-newpage' => '$1 - leathanach nua',
 'rcnote' => "Is {{PLURAL:$1|é seo a leanas <strong>an t-athrú amháin</strong>|iad seo a leanas na <strong>$1</strong> athruithe is déanaí}} {{PLURAL:$2|ar feadh an lae dheireanaigh|ar feadh na '''$2''' lá deireanacha}}, as $5, $4.",
 'rcnotefrom' => 'Is iad seo a leanas na hathruithe ó <b>$2</b> (go dti <b>$1</b> taispeánaithe).',
 'rclistfrom' => 'Taispeáin athruithe nua ó $1 anuas.',
@@ -2215,4 +2213,8 @@ Rachaidh an cód deimhnithe seo as feidhm ag $4.',
 # Search suggestions
 'searchsuggest-search' => 'Cuardaigh',
 
+# Special:ExpandTemplates
+'expand_templates_remove_comments' => 'Scrios nótaí tráchta',
+'expand_templates_preview' => 'Réamhamharc',
+
 );
index 443952b..89a37be 100644 (file)
@@ -61,7 +61,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Katılmaklar' ),
        'CreateAccount'             => array( 'EsapYarat', 'EsapAç' ),
        'Deadendpages'              => array( 'BaalantısızYazılar', 'BaalantısızSayfalar', 'BaalantısızYapraklar' ),
-       'Disambiguations'           => array( 'MaanaAydınnatmak', 'MaanaAydınnatma' ),
        'DoubleRedirects'           => array( 'İkiKeräYönnendirmäler', 'İkiKeräYönnendirmeler' ),
        'Listadmins'                => array( 'İzmetliListası' ),
        'Listbots'                  => array( 'BotListası' ),
@@ -306,8 +305,6 @@ $messages = array(
 'ok' => 'TAMAN',
 'retrievedfrom' => 'Alındı "$1"dän',
 'youhavenewmessages' => 'Var eni $1 ($2).',
-'newmessageslink' => 'eni mesajlar',
-'newmessagesdifflink' => 'Bitki diişmäk',
 'youhavenewmessagesmulti' => "$1'de eni mesajınız var.",
 'editsection' => 'diiştir',
 'editold' => 'diiştir',
index 1c9943d..6d90acc 100644 (file)
@@ -284,8 +284,6 @@ $1',
 'ok' => '做得',
 'retrievedfrom' => '版本页 "$1"',
 'youhavenewmessages' => '倷有 $1 ($2).',
-'newmessageslink' => '新消息',
-'newmessagesdifflink' => '最晏𠮶改动',
 'youhavenewmessagesmulti' => '$1 上有倷𠮶新消息',
 'editsection' => '编写',
 'editold' => '编写',
@@ -763,7 +761,6 @@ $2',
 'preferences' => '参数设置',
 'mypreferences' => '偶𠮶参数设置',
 'prefs-edits' => '编辑数:',
-'prefsnologin' => '哈冇登入',
 'changepassword' => '改过密码',
 'prefs-skin' => '皮',
 'skin-preview' => '(预览)',
index fc551a2..1aa9cb9 100644 (file)
@@ -32,7 +32,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( '老早嗰頁面' ),
        'BrokenRedirects'           => array( '壞吥嗰重定向頁' ),
        'CreateAccount'             => array( '新建隻帳戶' ),
-       'Disambiguations'           => array( '多義項' ),
        'Fewestrevisions'           => array( '最少改動嗰頁面' ),
        'Longpages'                 => array( '莽文章' ),
        'Mostcategories'            => array( '最多分類嗰頁面' ),
@@ -306,8 +305,6 @@ $1',
 'ok' => '做得',
 'retrievedfrom' => '版本頁「$1」',
 'youhavenewmessages' => '汝有 $1 ($2).',
-'newmessageslink' => '新消息',
-'newmessagesdifflink' => '頂晏嗰改動',
 'youhavenewmessagesmulti' => '$1 上有倷嗰新消息',
 'editsection' => '編寫',
 'editold' => '編寫',
@@ -785,7 +782,6 @@ $2',
 'preferences' => '參數設置',
 'mypreferences' => '我嗰參數設置',
 'prefs-edits' => '編輯數:',
-'prefsnologin' => '哈冇登入',
 'changepassword' => '改過密碼',
 'prefs-skin' => '皮',
 'skin-preview' => '(預覽)',
index ebffa19..6e255c7 100644 (file)
@@ -309,8 +309,6 @@ Seall air [[Special:Version|duilleag an tionndaidh]].',
 'ok' => 'Ceart ma-thà',
 'retrievedfrom' => 'Air a tharraing à "$1"',
 'youhavenewmessages' => 'Tha $1 ($2) agad.',
-'newmessageslink' => 'teachdaireachdan ùra',
-'newmessagesdifflink' => 'mùthadh mu dheireadh',
 'youhavenewmessagesfromusers' => 'Tha $1 o {{PLURAL:$3|aon chleachdaiche|$3 chleachdaiche|$3 cleachdaichean|$3 cleachdaiche}} agad ($2).',
 'youhavenewmessagesmanyusers' => 'Tha $1 agad o iomadh cleachdaiche ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|aon teachdaireachd ùr|$1 theachdaireachd ùr|$1 teachdaireachdan ùra|$1 teachdaireachd ùr}}',
@@ -1173,7 +1171,6 @@ Faodaidh gum bi inneacsan susbaint {{SITENAME}} tuilleadh 's sean ge-tà.",
 'preferences' => 'Roghainnean',
 'mypreferences' => 'Na roghainnean agam',
 'prefs-edits' => 'Co mheud deasachadh:',
-'prefsnologin' => 'Chan eil thu air clàradh a-steach',
 'changepassword' => 'Atharraich facal-faire',
 'prefs-skin' => 'Bian',
 'skin-preview' => 'Ro-shealladh',
index 9b82053..6762273 100644 (file)
@@ -68,12 +68,12 @@ $dateFormats = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'Usuarios_activos' ),
        'Allmessages'               => array( 'Todas_as_mensaxes' ),
+       'AllMyUploads'              => array( 'Todas_as_miñas_cargas', 'Todos_os_meus_ficheiros' ),
        'Allpages'                  => array( 'Todas_as_páxinas' ),
        'Ancientpages'              => array( 'Páxinas_máis_antigas' ),
        'Badtitle'                  => array( 'Título_incorrecto' ),
        'Blankpage'                 => array( 'Baleirar_a_páxina' ),
        'Block'                     => array( 'Bloquear', 'Bloquear_o_enderezo_IP', 'Bloquear_o_usuario' ),
-       'Blockme'                   => array( 'Bloquearme' ),
        'Booksources'               => array( 'Fontes_bibliográficas' ),
        'BrokenRedirects'           => array( 'Redireccións_rotas' ),
        'Categories'                => array( 'Categorías' ),
@@ -85,10 +85,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Crear_unha_conta' ),
        'Deadendpages'              => array( 'Páxinas_mortas' ),
        'DeletedContributions'      => array( 'Contribucións_borradas' ),
-       'Disambiguations'           => array( 'Homónimos' ),
        'DoubleRedirects'           => array( 'Redireccións_dobres' ),
        'EditWatchlist'             => array( 'Editar_a_lista_de_vixilancia' ),
        'Emailuser'                 => array( 'Correo_electrónico' ),
+       'ExpandTemplates'           => array( 'Expandir_os_modelos' ),
        'Export'                    => array( 'Exportar' ),
        'Fewestrevisions'           => array( 'Páxinas_con_menos_revisións' ),
        'FileDuplicateSearch'       => array( 'Procura_de_ficheiros_duplicados' ),
@@ -137,6 +137,7 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Cambios_recentes' ),
        'Recentchangeslinked'       => array( 'Cambios_relacionados' ),
        'Redirect'                  => array( 'Redirección' ),
+       'ResetTokens'               => array( 'Restablecer_os_pases' ),
        'Revisiondelete'            => array( 'Revisións_borradas' ),
        'Search'                    => array( 'Procurar' ),
        'Shortpages'                => array( 'Páxinas_curtas' ),
@@ -175,7 +176,7 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORZAROÍNDICE__', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__ÍNDICE__', '__TDC__', '__SUMÁRIO__', '__SUMARIO__', '__TOC__' ),
        'noeditsection'             => array( '0', '__SECCIÓNSNONEDITABLES__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NAOEDITARSECAO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
-       'currentmonth'              => array( '1', 'MESACTUAL', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth'              => array( '1', 'MESACTUAL', 'MESACTUAL2', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'MESACTUAL1', 'MESATUAL1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'NOMEDOMESACTUAL', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
        'currentmonthabbrev'        => array( '1', 'ABREVIATURADOMESACTUAL', 'MESATUALABREV', 'MESATUALABREVIADO', 'ABREVIATURADOMESATUAL', 'CURRENTMONTHABBREV' ),
@@ -185,7 +186,7 @@ $magicWords = array(
        'currentyear'               => array( '1', 'ANOACTUAL', 'ANOATUAL', 'CURRENTYEAR' ),
        'currenttime'               => array( '1', 'DATAEHORAACTUAIS', 'HORARIOATUAL', 'CURRENTTIME' ),
        'currenthour'               => array( '1', 'HORAACTUAL', 'HORAATUAL', 'CURRENTHOUR' ),
-       'localmonth'                => array( '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth'                => array( '1', 'MESLOCAL', 'MESLOCAL2', 'LOCALMONTH', 'LOCALMONTH2' ),
        'localmonth1'               => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
        'localmonthname'            => array( '1', 'NOMEDOMESLOCAL', 'LOCALMONTHNAME' ),
        'localmonthabbrev'          => array( '1', 'ABREVIATURADOMESLOCAL', 'MESLOCALABREV', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV' ),
@@ -204,10 +205,15 @@ $magicWords = array(
        'numberofviews'             => array( '1', 'NÚMERODEVISITAS', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
        'pagename'                  => array( '1', 'NOMEDAPÁXINA', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
        'namespace'                 => array( '1', 'ESPAZODENOMES', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
+       'namespacenumber'           => array( '1', 'NÚMERODOESPAZODENOMES', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'ESPAZODECONVERSA', 'PAGINADEDISCUSSAO', 'PÁGINADEDISCUSSÃO', 'TALKSPACE' ),
+       'subjectspace'              => array( '1', 'ESPAZODECONTIDO', 'PAGINADECONTEUDO', 'PAGINADECONTEÚDO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
        'fullpagename'              => array( '1', 'NOMECOMPLETODAPÁXINA', 'NOMECOMPLETODAPAGINA', 'NOMECOMPLETODAPÁGINA', 'FULLPAGENAME' ),
        'subpagename'               => array( '1', 'NOMEDASUBPÁXINA', 'NOMEDASUBPAGINA', 'NOMEDASUBPÁGINA', 'SUBPAGENAME' ),
+       'rootpagename'              => array( '1', 'NOMEDAPÁXINARAÍZ', 'ROOTPAGENAME' ),
        'basepagename'              => array( '1', 'NOMEDAPÁXINABASE', 'NOMEDAPAGINABASE', 'NOMEDAPÁGINABASE', 'BASEPAGENAME' ),
        'talkpagename'              => array( '1', 'NOMEDAPÁXINADECONVERSA', 'NOMEDAPAGINADEDISCUSSAO', 'NOMEDAPÁGINADEDISCUSSÃO', 'TALKPAGENAME' ),
+       'subjectpagename'           => array( '1', 'NOMEDAPÁXINADECONTIDO', 'NOMEDAPAGINADECONTEUDO', 'NOMEDAPÁGINADECONTEÚDO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
        'img_thumbnail'             => array( '1', 'miniatura', 'miniaturadaimaxe', 'miniaturadaimagem', 'thumbnail', 'thumb' ),
        'img_manualthumb'           => array( '1', 'miniatura=$1', 'miniaturadaimaxe=$1', 'miniaturadaimagem=$1', 'thumbnail=$1', 'thumb=$1' ),
        'img_right'                 => array( '1', 'dereita', 'direita', 'right' ),
@@ -216,8 +222,10 @@ $magicWords = array(
        'img_center'                => array( '1', 'centro', 'center', 'centre' ),
        'img_framed'                => array( '1', 'conmarco', 'conbordo', 'marco', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'senmarco', 'senbordo', 'semmoldura', 'semborda', 'frameless' ),
-       'img_page'                  => array( '1', 'páxina=$1', 'páxina $1', 'página=$1', 'página $1', 'page=$1', 'page $1' ),
+       'img_page'                  => array( '1', 'páxina=$1', 'páxina_$1', 'página=$1', 'página $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'arribaádereita', 'arribaádereita=$1', 'arribaádereita_$1', 'superiordireito', 'superiordireito=$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'bordo', 'borda', 'border' ),
+       'img_baseline'              => array( '1', 'liñadebase', 'linhadebase', 'baseline' ),
        'img_top'                   => array( '1', 'arriba', 'acima', 'top' ),
        'img_text_top'              => array( '1', 'texto-arriba', 'text-top' ),
        'img_middle'                => array( '1', 'medio', 'meio', 'middle' ),
@@ -226,16 +234,38 @@ $magicWords = array(
        'img_link'                  => array( '1', 'ligazón=$1', 'ligação=$1', 'link=$1' ),
        'img_class'                 => array( '1', 'clase=$1', 'class=$1' ),
        'sitename'                  => array( '1', 'NOMEDOSITIO', 'NOMEDOSITE', 'NOMEDOSÍTIO', 'SITENAME' ),
-       'localurl'                  => array( '0', 'URLLOCAL', 'LOCALURL:' ),
+       'localurl'                  => array( '0', 'URLLOCAL:', 'LOCALURL:' ),
        'articlepath'               => array( '0', 'RUTADOARTIGO', 'ARTICLEPATH' ),
        'pageid'                    => array( '0', 'IDDAPÁXINA', 'PAGEID' ),
        'server'                    => array( '0', 'SERVIDOR', 'SERVER' ),
        'servername'                => array( '0', 'NOMEDOSERVIDOR', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'RUTADAESCRITURA', 'CAMINHODOSCRIPT', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'RUTADOESTILO', 'STYLEPATH' ),
        'grammar'                   => array( '0', 'GRAMÁTICA:', 'GRAMMAR:' ),
        'gender'                    => array( '0', 'SEXO:', 'GENERO', 'GÊNERO', 'GENDER:' ),
-       'displaytitle'              => array( '1', 'AMOSAROTÍTULO', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
+       'currentweek'               => array( '1', 'SEMANAACTUAL', 'SEMANAATUAL', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'SEMANALOCAL', 'LOCALWEEK' ),
+       'revisionid'                => array( '1', 'IDDAREVISIÓN', 'IDDAREVISAO', 'IDDAREVISÃO', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'DÍADAREVISIÓN', 'DIADAREVISAO', 'DIADAREVISÃO', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'DÍADAREVISIÓN2', 'DIADAREVISAO2', 'DIADAREVISÃO2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'MESDAREVISIÓN', 'MESDAREVISAO', 'MÊSDAREVISÃO', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'MESDAREVISIÓN1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'ANODAREVISIÓN', 'ANODAREVISAO', 'ANODAREVISÃO', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'DATAEHORADAREVISIÓN', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'USUARIODAREVISIÓN', 'USUARIODAREVISAO', 'USUÁRIODAREVISÃO', 'REVISIONUSER' ),
+       'fullurl'                   => array( '0', 'URLCOMPLETO:', 'FULLURL:' ),
+       'canonicalurl'              => array( '0', 'URLCANÓNICO:', 'CANONICALURL:' ),
+       'lcfirst'                   => array( '0', 'PRIMEIRAMINÚSCULA:', 'PRIMEIRAMINUSCULA:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'PRIMEIRAMAIÚSCULA:', 'PRIMEIRAMAIUSCULA:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'MINÚSCULA:', 'MINUSCULA', 'MINÚSCULA', 'MINUSCULAS', 'MINÚSCULAS', 'LC:' ),
+       'uc'                        => array( '0', 'MAIÚSCULA:', 'MAIUSCULA', 'MAIÚSCULA', 'MAIUSCULAS', 'MAIÚSCULAS', 'UC:' ),
+       'raw'                       => array( '0', 'ENBRUTO:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'AMOSAROTÍTULO', 'MOSTRAROTÍTULO', 'EXIBETITULO', 'EXIBETÍTULO', 'DISPLAYTITLE' ),
        'newsectionlink'            => array( '1', '__LIGAZÓNDANOVASECCIÓN__', '__LINKDENOVASECAO__', '__LINKDENOVASEÇÃO__', '__LIGACAODENOVASECAO__', '__LIGAÇÃODENOVASEÇÃO__', '__NEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'VERSIÓNACTUAL', 'REVISAOATUAL', 'REVISÃOATUAL', 'CURRENTVERSION' ),
        'language'                  => array( '0', '#LINGUA:', '#IDIOMA:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'LINGUADOCONTIDO', 'IDIOMADOCONTIDO', 'IDIOMADOCONTEUDO', 'IDIOMADOCONTEÚDO', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'PÁXINASNOESPAZODENOMES:', 'PAGINASNOESPACONOMINAL', 'PÁGINASNOESPAÇONOMINAL', 'PAGINASNODOMINIO', 'PÁGINASNODOMÍNIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
        'numberofadmins'            => array( '1', 'NÚMERODEADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
        'special'                   => array( '0', 'especial', 'special' ),
        'defaultsort'               => array( '1', 'ORDENAR:', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
@@ -244,6 +274,7 @@ $magicWords = array(
        'pagesincategory'           => array( '1', 'PÁXINASNACATEGORÍA', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
        'pagesize'                  => array( '1', 'TAMAÑODAPÁXINA', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
        'url_path'                  => array( '0', 'RUTA', 'PATH' ),
+       'url_query'                 => array( '0', 'PESCUDA', 'QUERY' ),
        'pagesincategory_all'       => array( '0', 'todos', 'all' ),
        'pagesincategory_pages'     => array( '0', 'páxinas', 'pages' ),
        'pagesincategory_subcats'   => array( '0', 'subcategorías', 'subcats' ),
@@ -527,12 +558,10 @@ $1',
 'ok' => 'Aceptar',
 'retrievedfrom' => 'Traído desde "$1"',
 'youhavenewmessages' => 'Ten $1 ($2).',
-'newmessageslink' => 'mensaxes novas',
-'newmessagesdifflink' => 'diferenzas coa revisión anterior',
 'youhavenewmessagesfromusers' => 'Ten $1 {{PLURAL:$3|doutro usuario|de $3 usuarios}} ($2).',
 'youhavenewmessagesmanyusers' => 'Ten $1 de moitos usuarios ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|unha mensaxe nova|mensaxes novas}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|última modificación|últimas modificacións}}',
+'newmessageslinkplural' => '{{PLURAL:$1|unha mensaxe nova|999=mensaxes novas}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|última modificación|999=últimas modificacións}}',
 'youhavenewmessagesmulti' => 'Ten mensaxes novas en $1',
 'editsection' => 'editar',
 'editold' => 'editar',
@@ -664,7 +693,8 @@ O administrador que bloqueou o repositorio achegou este motivo: "$3".',
 'invalidtitle-knownnamespace' => 'Título inválido co espazo de nomes "$2" e o texto "$3"',
 'invalidtitle-unknownnamespace' => 'Título inválido cun número de espazo de nomes, $1, descoñecido e o texto "$2"',
 'exception-nologin' => 'Non accedeu ao sistema',
-'exception-nologin-text' => 'Esta páxina ou acción necesita que vostede acceda ao sistema neste wiki.',
+'exception-nologin-text' => '[[Special:Userlogin|Acceda ao sistema]] para poder realizar esa acción ou acceder a esa páxina.',
+'exception-nologin-text-manual' => 'Debe $1 para poder realizar esa acción ou acceder a esa páxina.',
 
 # Virus scanner
 'virus-badscanner' => "Configuración errónea: escáner de virus descoñecido: ''$1''",
@@ -1404,8 +1434,8 @@ Note que os seus índices do contido de {{SITENAME}} poden estar desactualizados
 'preferences' => 'Preferencias',
 'mypreferences' => 'Preferencias',
 'prefs-edits' => 'Número de edicións:',
-'prefsnologin' => 'Non accedeu ao sistema',
-'changepassword' => 'Cambiar o meu contrasinal',
+'prefsnologintext2' => 'Debe $1 para definir as preferencias de usuario.',
+'changepassword' => 'Cambiar o contrasinal',
 'prefs-skin' => 'Aparencia',
 'skin-preview' => 'Vista previa',
 'datedefault' => 'Ningunha preferencia',
@@ -1704,6 +1734,9 @@ Se escolle dalo utilizarase para atribuírlle o seu traballo.',
 'recentchanges-label-minor' => 'Esta é unha edición pequena',
 'recentchanges-label-bot' => 'Esta edición foi realizada por un bot',
 'recentchanges-label-unpatrolled' => 'Esta edición aínda non foi comprobada',
+'recentchanges-label-plusminus' => 'O tamaño da páxina variou este número de bytes',
+'recentchanges-legend-newpage' => '(véxase tamén a [[Special:NewPages|lista de páxinas novas]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "A continuación {{PLURAL:$1|móstrase '''1''' cambio|móstranse os últimos '''$1''' cambios}} {{PLURAL:$2|no último día|nos últimos '''$2''' días}} ata o $4 ás $5.",
 'rcnotefrom' => "A continuación móstranse os cambios feitos desde o '''$3''' ás '''$4''' (móstranse '''$1''' como máximo).",
 'rclistfrom' => 'Mostrar os cambios novos desde o $1',
@@ -2035,7 +2068,7 @@ Tamén pode reintentalo cando haxa menos actividade.',
 'imagelinks' => 'Uso do ficheiro',
 'linkstoimage' => '{{PLURAL:$1|A seguinte páxina liga|As seguintes $1 páxinas ligan}} con esta imaxe:',
 'linkstoimage-more' => 'Máis {{PLURAL:$1|dunha páxina liga|de $1 páxinas ligan}} con este ficheiro.
-A seguinte lista só amosa {{PLURAL:$1|a primeira páxina que liga|as primeiras $1 páxina que ligan}} con el.
+A seguinte lista só mostra {{PLURAL:$1|a primeira páxina que liga|as primeiras $1 páxina que ligan}} con el.
 Hai dispoñible [[Special:WhatLinksHere/$2|unha lista completa]].',
 'nolinkstoimage' => 'Ningunha páxina liga con este ficheiro.',
 'morelinkstoimage' => 'Ver [[Special:WhatLinksHere/$1|máis ligazóns]] cara a este ficheiro.',
@@ -2387,7 +2420,7 @@ O enderezo de correo electrónico que inseriu [[Special:Preferences|nas súas pr
 'mywatchlist' => 'Lista de vixilancia',
 'watchlistfor2' => 'De $1 $2',
 'nowatchlist' => 'Non ten elementos na súa lista de vixilancia.',
-'watchlistanontext' => 'Faga o favor de $1 ao sistema para ver ou editar os elementos da súa lista de vixilancia.',
+'watchlistanontext' => 'Debe $1 para ver ou editar os elementos da súa lista de vixilancia.',
 'watchnologin' => 'Non accedeu ao sistema',
 'watchnologintext' => 'Debe [[Special:UserLogin|acceder ao sistema]] para modificar a súa lista de vixilancia.',
 'addwatch' => 'Engadir á lista vixilancia',
@@ -2443,9 +2476,9 @@ Pode contactar co editor:
 por correo electrónico: $PAGEEDITOR_EMAIL
 no wiki: $PAGEEDITOR_WIKI
 
-Non se producirán novas notificacións cando haxa novos cambios ata que vostede visite a páxina. Pode borrar os indicadores de aviso de notificación para o conxunto das páxinas marcadas na súa lista de vixilancia.
+Non se producirán máis notificacións en caso de que haxa actividade nova ata que acceda ao sistema e visite a páxina. Pode restablecer os indicadores de aviso de notificación para o conxunto das páxinas marcadas na súa lista de vixilancia.
 
-       O sistema de avisos de {{SITENAME}}
+O sistema de avisos de {{SITENAME}}
 
 --
 Para cambiar as notificacións por correo electrónico, visite
@@ -2561,8 +2594,8 @@ Pode mudar o nivel de protección da páxina pero iso non afectará á protecci
 'protect-expiry-indefinite' => 'indefinido',
 'protect-cascade' => 'Protexer as páxinas incluídas nesta (protección en serie)',
 'protect-cantedit' => 'Non pode modificar os niveis de protección desta páxina porque non ten os permisos necesarios para editala.',
-'protect-othertime' => 'Outro período:',
-'protect-othertime-op' => 'outro período',
+'protect-othertime' => 'Outra duración:',
+'protect-othertime-op' => 'outra duración',
 'protect-existing-expiry' => 'Período de caducidade actual: $2 ás $3',
 'protect-otherreason' => 'Outro motivo:',
 'protect-otherreason-op' => 'Outro motivo',
@@ -2725,7 +2758,7 @@ Explique a razón específica do bloqueo (por exemplo, citando as páxinas concr
 'ipbemailban' => 'Impedir que o usuario envíe correos electrónicos',
 'ipbenableautoblock' => 'Bloquear automaticamente o último enderezo IP utilizado por este usuario, e calquera outro enderezo desde o que intente editar',
 'ipbsubmit' => 'Bloquear este usuario',
-'ipbother' => 'Outro período de tempo:',
+'ipbother' => 'Outra duración:',
 'ipboptions' => '2 horas:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 ano:1 year,para sempre:infinite',
 'ipbotheroption' => 'outra',
 'ipbotherreason' => 'Outro motivo:',
@@ -3774,7 +3807,7 @@ Por favor, comprobe que no enderezo de correo electrónico non haxa caracteres i
 O programa de correo informa do seguinte: $1',
 'confirmemail_invalid' => 'O código de confirmación non é válido.
 Pode ser que caducase.',
-'confirmemail_needlogin' => 'Necesita $1 para confirmar o seu enderezo de correo electrónico.',
+'confirmemail_needlogin' => 'Debe $1 para confirmar o seu enderezo de correo electrónico.',
 'confirmemail_success' => 'Confirmouse o seu enderezo de correo electrónico. Agora xa pode [[Special:UserLogin|acceder ao sistema]] e facer uso do wiki.',
 'confirmemail_loggedin' => 'Xa se confirmou o seu enderezo de correo electrónico.',
 'confirmemail_error' => 'Houbo un problema ao gardar a súa confirmación.',
@@ -3851,6 +3884,7 @@ Por favor, confirme que realmente quere recrear esta páxina.",
 
 # Separators for various lists, etc.
 'colon-separator' => ':&#32;',
+'quotation-marks' => '"$1"',
 
 # Multipage image navigation
 'imgmultipageprev' => '← páxina anterior',
@@ -3983,6 +4017,7 @@ Debería recibir [{{SERVER}}{{SCRIPTPATH}}/COPYING unha copia da licenza públic
 
 # Special:SpecialPages
 'specialpages' => 'Páxinas especiais',
+'specialpages-note-top' => 'Lenda',
 'specialpages-note' => '* Páxinas especiais normais.
 * <span class="mw-specialpagerestricted">Páxinas especiais restrinxidas.</span>',
 'specialpages-group-maintenance' => 'Informes de mantemento',
@@ -4006,7 +4041,7 @@ Debería recibir [{{SERVER}}{{SCRIPTPATH}}/COPYING unha copia da licenza públic
 'external_image_whitelist' => ' #Deixe esta liña tal e como está<pre>
 #Poña embaixo fragmentos de expresións regulares (tan só a parte que vai entre //)
 #Isto coincidirá cos enderezos URL das imaxes externas (hotlinked)
-#Aquelas que coincidan serán amosadas como imaxes, senón, só será amosada unha ligazón cara a esta
+#Aquelas que coincidan mostraranse como imaxes, senón, só se mostrará unha ligazón cara a esta
 #As liñas que comecen por "#" son comentarios
 #Non diferencia entre maiúsculas e minúsculas
 
@@ -4197,4 +4232,21 @@ En caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario
 'limitreport-expansiondepth' => 'Máxima profundidade de expansión',
 'limitreport-expensivefunctioncount' => 'Número de funcións de análise custosas',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Expandir os modelos',
+'expand_templates_intro' => 'Esta páxina especial toma texto e expande todos os modelos dentro del recursivamente.
+Tamén expande as funcións de análise como
+<code><nowiki>{{</nowiki>#language:…}}</code> e variables como
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+De feito, expande case calquera cousa entre dúas chaves.',
+'expand_templates_title' => 'Título do contexto, para {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Texto de entrada:',
+'expand_templates_output' => 'Resultado',
+'expand_templates_xml_output' => 'Saída XML',
+'expand_templates_ok' => 'Aceptar',
+'expand_templates_remove_comments' => 'Eliminar os comentarios',
+'expand_templates_remove_nowiki' => 'Suprimir as etiquetas <nowiki> no resultado',
+'expand_templates_generate_xml' => 'Mostrar as árbores de análise XML',
+'expand_templates_preview' => 'Vista previa',
+
 );
index 6b20bea..4acdb41 100644 (file)
@@ -164,7 +164,7 @@ $messages = array(
 'jumptosearch' => 'sod',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
-'aboutsite' => '(Thollachea) babtint',
+'aboutsite' => '{{SITENAME}} babtint',
 'aboutpage' => 'Project:Vixoiavixim',
 'copyrightpage' => '{{ns:project}}:Prat-hokk',
 'currentevents' => 'Chalu ghoddnneo',
@@ -190,8 +190,6 @@ $messages = array(
 'ok' => 'Zait',
 'retrievedfrom' => '"$1" savn prapt kelam',
 'youhavenewmessages' => 'Tumkam $1 ($2) asat.',
-'newmessageslink' => 'nove sondex',
-'newmessagesdifflink' => 'nimannem bodlop',
 'editsection' => 'sudar',
 'editold' => 'sudar',
 'viewsourceold' => 'mull poloi',
@@ -527,7 +525,8 @@ Hachem [$2 failichem vivron panan] asleli vivron khala dilea:',
 'watch' => 'Sadur rav',
 'watchthispage' => 'Hea panar dixtt dovor',
 'unwatch' => 'Nodor kadd',
-'watchlist-details' => '{{PLURAL:$1|$1 pan tujea sadurvollerint asa|$1 panam tujea sadurvollerint asat}} , ulovpachim panam meznastanam.',
+'watchlist-details' => 'Tujea sadurvollerint {{PLURAL:$1|$1 pan asa|$1 panam asat}}, ulovpachim panam mezonastanam.',
+'wlheader-showupdated' => "Tujea fatle bhette san bodol'lean tim panam '''datt''' dakhoileant.",
 'wlshowlast' => 'Xevottchim $1 voram $2 dis $3 dakhoi',
 'watchlist-options' => 'Sadurvollericheo poryay',
 
@@ -681,6 +680,9 @@ Tujean tachem mull pollonv ieta',
 'tooltip-undo' => '"Rodd\' kor" sudharop portita ani sudharopak Zholok ritin ukodta. Tem saran karon zoddunk dita.',
 'tooltip-summary' => 'Mottvo sar ghal',
 
+# Info page
+'pageinfo-toolboxlink' => 'Panachi mahiti',
+
 # Browsing diffs
 'previousdiff' => '←  Adlo sudar',
 'nextdiff' => 'Fuddlem bodlop →',
@@ -689,7 +691,7 @@ Tujean tachem mull pollonv ieta',
 'file-info-size' => '$1 × $2 pixelam, failicho akar: $3, MIME prokar: $4',
 'file-nohires' => 'Odhik bariksai na.',
 'svg-long-desc' => 'SVG fail, nanvak $1 × $2 pixeli, failcho akar: $3',
-'show-big-image' => 'Akhi bariksai',
+'show-big-image' => 'Mull fail',
 
 # Bad image list
 'bad_image_list' => 'Akar oso asa:
@@ -749,4 +751,7 @@ Zori tor hi failik bodol'lam zalear kai mahiti bodololem failik sarkem mell khai
 # Special:Tags
 'tag-filter' => '[[Special:Tags|Dospi]] challni:',
 
+# Search suggestions
+'searchsuggest-search' => 'Sod',
+
 );
index 653b9cf..9a4a2c1 100644 (file)
@@ -290,8 +290,6 @@ $1',
 'ok' => 'εἶεν',
 'retrievedfrom' => 'Ἀνακτηθεῖσα ὑπὸ "$1"',
 'youhavenewmessages' => 'Ἔχεις $1 ($2).',
-'newmessageslink' => 'νέας ἀγγελίας',
-'newmessagesdifflink' => 'ἐσχάτη μεταβολή',
 'youhavenewmessagesmulti' => 'Νέας εἰσί σοι ἀγγελίας ἐν $1',
 'editsection' => 'μεταγράφειν',
 'editold' => 'μεταγράφειν',
@@ -826,7 +824,6 @@ $1",
 'preferences' => 'Προαιρέσεις',
 'mypreferences' => 'Αἱ προαιρέσεις μου',
 'prefs-edits' => 'Τοσοῦται αἱ μεταβολαί:',
-'prefsnologin' => 'Μὴ συνδεδεμένος',
 'changepassword' => 'Ἀλλάττειν σύνθημα',
 'prefs-skin' => 'Ἐμφάνισις',
 'skin-preview' => 'Προεπισκοπεῖν',
@@ -1070,6 +1067,7 @@ $1",
 'recentchanges-label-minor' => 'Ἥδε μικρὰ μεταγραφή ἐστιν',
 'recentchanges-label-bot' => 'Ἥδε ἡ μεταγραφὴ ἐτελέσθη ὑπὸ αὐτομάτου τινός',
 'recentchanges-label-unpatrolled' => 'Ἥδε ἡ μεταγραφὴ μὴ ἐλεγμένη ἐστίν',
+'recentchanges-legend-newpage' => '$1 - νέα δέλτος',
 'rcnote' => "Κατωτέρω {{PLURAL:$1|ἐστὶ '''1''' ἀλλαγὴ|εἰσὶν αἱ τελευταῖαι '''$1''' ἀλλαγαὶ}} ἐν {{PLURAL:$2|τῇ τελευταίᾳ ἡμέρᾳ|ταῖς τελευταίαις '''$2''' ἡμέραις}}, ἕως καὶ $5, $4.",
 'rcnotefrom' => "Ἰδοῦ αἱ ἀλλαγαὶ ἐκ τοῦ '''$2''' (ἕως τὸ '''$1''').",
 'rclistfrom' => 'Δεικνύναι νέας ἀλλαγάς. Ἐκκίνησις ἐκ τοῦ $1',
@@ -2667,4 +2665,10 @@ $5
 'searchsuggest-search' => 'Ζητεῖν',
 'searchsuggest-containing' => 'περιέχον...',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Ἐπεκτείνειν τὰ πρότυπα',
+'expand_templates_output' => 'Ἀποτέλεσμα',
+'expand_templates_ok' => 'εἶεν',
+'expand_templates_preview' => 'Προθεώρησις',
+
 );
index 3d6fbd0..aa24766 100644 (file)
@@ -36,7 +36,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Nit-gültige_Sytename' ),
        'Blankpage'                 => array( 'Läärsyte' ),
        'Block'                     => array( 'Sperre' ),
-       'Blockme'                   => array( 'Proxy-Sperre' ),
        'Booksources'               => array( 'ISBN-Suech' ),
        'BrokenRedirects'           => array( 'Kaputti_Wyterlaitige' ),
        'Categories'                => array( 'Kategorie' ),
@@ -48,10 +47,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Benutzerchonto_aaleege' ),
        'Deadendpages'              => array( 'Sackgassesyte' ),
        'DeletedContributions'      => array( 'Gleschti_Byytreeg' ),
-       'Disambiguations'           => array( 'Begriffschlärigsverwyys' ),
        'DoubleRedirects'           => array( 'Doppleti_Wyterlaitige' ),
        'EditWatchlist'             => array( 'Bearbeitigslischt_bearbeite' ),
        'Emailuser'                 => array( 'E-Mail' ),
+       'ExpandTemplates'           => array( 'Vorlage_expandiere' ),
        'Export'                    => array( 'Exportiere' ),
        'Fewestrevisions'           => array( 'Syte_wo_am_wenigschte_bearbeitet_sin' ),
        'FileDuplicateSearch'       => array( 'Datei-Duplikat-Suech' ),
@@ -93,6 +92,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Gschitzti_Syte' ),
        'Protectedtitles'           => array( 'Gsperrti_Titel' ),
        'Randompage'                => array( 'Zuefelligi_Syte' ),
+       'RandomInCategory'          => array( 'Zuefelligi_Kategori' ),
        'Randomredirect'            => array( 'Zuefelligi_Wyterleitig' ),
        'Recentchanges'             => array( 'Letschti_Änderige' ),
        'Recentchangeslinked'       => array( 'Änderige_an_verlinkte_Syte' ),
@@ -408,12 +408,10 @@ Di maximal Wartezyt fir e Lock isch umme',
 'ok' => 'OK',
 'retrievedfrom' => 'Vun "$1"',
 'youhavenewmessages' => 'Du hesch $1 ($2).',
-'newmessageslink' => 'nöji Nachrichte',
-'newmessagesdifflink' => 'Unterschid',
 'youhavenewmessagesfromusers' => 'Du hesch $1 vu {{PLURAL:$3|eme andere Benutzer|$3 Benutzer}} ($2).',
 'youhavenewmessagesmanyusers' => 'Du hesch $1 vu vil Benutzer ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|e neji Nochricht|neji Nochrichte}}',
-'newmessagesdifflinkplural' => 'letschti {{PLURAL:$1|Änderig|Änderige}}',
+'newmessageslinkplural' => '{{PLURAL:$1|e neji Nochricht|999=neji Nochrichte}}',
+'newmessagesdifflinkplural' => 'letschti {{PLURAL:$1|Änderig|999=Änderige}}',
 'youhavenewmessagesmulti' => 'Si hen neui Nochrichte: $1',
 'editsection' => 'ändere',
 'editold' => 'Ändre',
@@ -537,7 +535,8 @@ Dr Administrator, wu dr Schrybzuegriff gsperrt het, het dää Grund aagee: „$3
 'invalidtitle-knownnamespace' => 'Nit-gültige Titel mit Namensruum „$2“ un Text „$3“',
 'invalidtitle-unknownnamespace' => 'Ungültige Titel mit unbekannte Namensruumnummer $1 un Text „$2“',
 'exception-nologin' => 'Nit aagmäldet',
-'exception-nologin-text' => 'Fir die Syte oder Aktion muesch aagmäldet syy.',
+'exception-nologin-text' => 'Du muesch Di [[Special:Userlogin|aamälde]] go die Syte oder Aktion ufruefe chenne.',
+'exception-nologin-text-manual' => 'Du muesch Di $1 go die Syte oder Aktion ufruefe chenne.',
 
 # Virus scanner
 'virus-badscanner' => "Fählerhafti Konfiguration: Virescanner, wu nid bekannt isch: ''$1''",
@@ -738,7 +737,7 @@ Du sottsch di aamälden un e nej Passwort vergee. Wänn eber ander die Aafrog gs
 Temporär Passwort: $2',
 'passwordreset-emailsent' => 'E Passwort-Zrucksetzig isch per E-Mail verschickt wore.',
 'passwordreset-emailsent-capture' => 'E Passwort-Zrucksetzigs-Mail isch vergschickt worde, un isch unte aazeigt.',
-'passwordreset-emailerror-capture' => 'Die Erinnerigsmail, wo unte aazeigt isch, isch generiert worde, aber de Versand aa de Benutzer isch gschyyteret: $1',
+'passwordreset-emailerror-capture' => 'Die unten angezeigte Passwortzrucksetzigsmail, wu unten aazeigt wird, isch generiert wore, aber dr Versand an {{GENDER:$2|dr Benutzer|d Benutzeri}} het nit funktioniert: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'E-Mail-Adräss ändre',
@@ -748,9 +747,23 @@ Temporär Passwort: $2',
 'changeemail-oldemail' => 'Aktuelli E-Mail-Adräss',
 'changeemail-newemail' => 'Nöii E-Mail-Adräss:',
 'changeemail-none' => '(nyt)',
+'changeemail-password' => 'Dy {{SITENAME}}-Passwort:',
 'changeemail-submit' => 'E-Mail Adräss ändre',
 'changeemail-cancel' => 'Abbräche',
 
+# Special:ResetTokens
+'resettokens' => 'Token zrucksetze',
+'resettokens-text' => 'Du chasch Token zrucksetze, wu Dir dr Zuegriff uf bstimmti privati Date megli mache, wu mit Dym Benutzerkonto do verchnipft sin.
+
+Des sottsch nume mache, wänn Du d Token us Versää mit eberem teilt hesch oder Dy Konto gfehrdet isch.',
+'resettokens-no-tokens' => 'S git kei Token zum Zrucksetze.',
+'resettokens-legend' => 'Token zrucksetze',
+'resettokens-tokens' => 'Token:',
+'resettokens-token-label' => '$1 (aktuälle Wärt: $2)',
+'resettokens-watchlist-token' => 'Token fir dr Webfeed (Atom/RSS) vu dr [[Special:Watchlist|Änderigen an Syten uf Dyre Beobachtuislischt]]',
+'resettokens-done' => 'Token zruckgsetzt.',
+'resettokens-resetbutton' => 'Uusgwehlti Token zrucksetze',
+
 # Edit page toolbar
 'bold_sample' => 'fetti Schrift',
 'bold_tip' => 'Fetti Schrift',
@@ -908,7 +921,7 @@ Hiemit gisch du zue, das du dä Tekscht '''sälber gschribe''' hesch, das der Te
 Si verspräche uns usserdäm, dass Si des alles selber gschribe oder vo nere Quälle kopiert hen, wo Public Domain odr sunscht frei isch (lueg $1 für Details).
 '''SETZE SI DO OHNI ERLAUBNIS KEINI URHEBERRÄCHTLICH GSCHÜTZTI WÄRK INE!'''",
 'longpageerror' => "'''Fähler: Dä Täxt, wu Du spychere wit, isch {{PLURAL:$1|ei Kilobyte|$1 Kilobyte}} groß. Des isch greßer wie s erlaubt Maximum vu {{PLURAL:$2|eim Kilobyte|$2 Kilobyte}}.''' S Spychere isch nit megli.",
-'readonlywarning' => "'''Achtung: Die Datebank isch fir Wartigsarbete gesperrt. Wäge däm chenne Dyyni Änderige im Momänt nid gspicheret wäre.
+'readonlywarning' => "'''Achtig: D Datebank isch fir Wartigsarbete gesperrt. Wäge däm chenne Dyyni Änderige im Momänt nit gspycheret wäre.
 Sichere de Täxt bitte lokal uf Dyynem Computer un versuech speter nomol, d Änderige z ibertrage.'''
 
 Grund fir d Sperri: $1",
@@ -946,13 +959,14 @@ Zue Dyyre Information sihsch do s Lesch-Logbuech vo däre Syte:",
 Si isch schyns glescht wore.',
 'edit-conflict' => 'Bearbeitigskonflikt.',
 'edit-no-change' => 'Dyyni Bearbeitig isch ignoriert wore, wel kei Änderig am Täxt gmacht woren isch.',
+'postedit-confirmation' => 'Dyy Bearbeitig isch gspycheret wore.',
 'edit-already-exists' => 'Di nej Syte het nid chenne aaglait wäre, wel s si scho git.',
 'defaultmessagetext' => 'Standardtext',
 'content-failed-to-parse' => 'Parse vum Inhalt $2 fir Modell $1 fählgschlaa: $3',
 'invalid-content-data' => 'Uugiltigi Inhaltsdate',
 'content-not-allowed-here' => 'Dr Inhalt „$1“ isch uf dr Syte [[$2]] nit erlaubt',
 'editwarning-warning' => 'Wänn Du die Syte verlosch, cha s syy, ass Du alli Bearbeitige verliersch, wu Du do dra gmacht hesch.
-Wänn Du aagmäldet bisch, chasch s Anzeige vu däre Warnig im „{{int:prefs-editing}}“-Beryych vu Dyyne Yystelligen abstelle.',
+Wänn Du aagmäldet bisch, chasch s Anzeige vu däre Warnig im „Bearbeite“-Beryych vu Dyyne Yystelligen abstelle.',
 
 # Content models
 'content-model-wikitext' => 'Wikitext',
@@ -985,6 +999,7 @@ S {{PLURAL:$2|derf nid meh wie ein Ufruef|derfe nid meh wie $1 Ufruef}} gee.',
 'undo-failure' => 'D Änderig het nid chenne ruckgängig gmacht wäre, wel dää Abschnitt mittlerwyli gänderet woren isch.',
 'undo-norev' => 'D Bearbeitig het nid chenne ruckgängig gmacht wäre, wel si nid vorhande oder glescht isch.',
 'undo-summary' => 'D Änderig $1 vu [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) isch ruckgängig gmacht wore.',
+'undo-summary-username-hidden' => 'Änderig $1 vun eme versteckte Benutzer ruckgängig gmacht.',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Benutzerkonto cha nid aagleit wäre.',
@@ -1233,7 +1248,6 @@ Einzelheite chasch im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'preferences' => 'Yystellige',
 'mypreferences' => 'Yystellige',
 'prefs-edits' => 'Aazahl vu dr Bearbeitige:',
-'prefsnologin' => 'Nid aagmäldet',
 'changepassword' => 'Passwort ändere',
 'prefs-skin' => 'Benutzeroberflechi',
 'skin-preview' => 'Vorschou',
@@ -1504,6 +1518,7 @@ Des cha nimmi ruckgängig gmacht wäre.',
 'recentchanges-label-minor' => 'Des isch e chleini Änderig',
 'recentchanges-label-bot' => 'Die Bearbeitig isch dur e Bott uusgfiert wore',
 'recentchanges-label-unpatrolled' => 'Die Bearbeitig isch nonig vun eme Fäldhieter aagluegt wore',
+'recentchanges-legend-newpage' => '$1 - neji Syte',
 'rcnote' => "Azeigt {{PLURAL:$1|wird '''1''' Änderig|wärde di letschte '''$1''' Änderige}} {{PLURAL:$2|vom letschte Tag|i de letschte '''$2''' Täg}} (Stand: $4, $5)",
 'rcnotefrom' => 'Des sin d Ändrige syter <b>$2</b> (bis zem <b>$1</b> zeigt).',
 'rclistfrom' => '<small>Nöji Änderige ab $1 aazeige (UTC)</small>',
@@ -3783,4 +3798,17 @@ Sunscht chasch au s eifach Formular unte nutze. Dyy Kommentar wird, zämme mit D
 'duration-centuries' => '$1 {{PLURAL:$1|Johrhundert|Johrhundert}}',
 'duration-millennia' => '$1 {{PLURAL:$1|Jahrtöusert|Jahrtöusert}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Vorlage expandiere',
+'expand_templates_intro' => 'In däre Spezialsyte cha Täxt yygee wäre und alli Vorlage in ere wäre rekursiv expandiert. Au Parserfunkione wie <nowiki>{{</nowiki>#language:…}} un Variable wie <nowiki>{{</nowiki>CURRENTDAY}} wäre usgwärtet - faktisch alles was in dopplete gschweifte Chlammere din isch. Des gschiht dur dr Ufruef vu dr jewyylige Parser-Phase in MediaWiki.',
+'expand_templates_title' => 'Kontexttitel, fir {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Yygabfäld:',
+'expand_templates_output' => 'Ergebnis',
+'expand_templates_xml_output' => 'XML-Usgab',
+'expand_templates_ok' => 'Uusfiere',
+'expand_templates_remove_comments' => 'Kommentar useneh',
+'expand_templates_remove_nowiki' => '<nowiki>-Befähl im Ergebnis unterdrucke',
+'expand_templates_generate_xml' => 'Zeig XML-Parser-Baum',
+'expand_templates_preview' => 'Vorschou',
+
 );
index f36a514..a8dfd2d 100644 (file)
@@ -63,9 +63,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'ખાતું_ખોલો' ),
        'Deadendpages'              => array( 'મૃતાંતપાનાં' ),
        'DeletedContributions'      => array( 'હટાવેલાં_યોગદાન' ),
-       'Disambiguations'           => array( 'અસંદિગ્ધતા' ),
        'DoubleRedirects'           => array( 'દ્વિ_પુનઃમાર્ગદર્શન' ),
        'Emailuser'                 => array( 'સભ્યનેઇમેલ' ),
+       'ExpandTemplates'           => array( 'શ્રેણીવિસ્તારો' ),
        'Export'                    => array( 'નિકાસ' ),
        'Fewestrevisions'           => array( 'લઘુત્તમ_પુનરાવર્તન' ),
        'FileDuplicateSearch'       => array( 'ફાઇલપ્રતિકૃતિ_શોધ' ),
@@ -430,12 +430,10 @@ $1',
 'ok' => 'મંજૂર',
 'retrievedfrom' => '"$1"થી લીધેલું',
 'youhavenewmessages' => 'તમારા માટે $1 ($2).',
-'newmessageslink' => 'નવીન સંદેશાઓ',
-'newmessagesdifflink' => 'છેલ્લો ફેરફાર',
 'youhavenewmessagesfromusers' => 'આપને માટે {{PLURAL:$3|અન્ય સભ્ય|$3 અન્ય સભ્યો}} તરફથી $1 છે. ($2).',
 'youhavenewmessagesmanyusers' => 'આપને માટે ઘણાં સભ્યો તરફથી $1 છે ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|નવો સંદેશો|નવા સંદેશા}}',
-'newmessagesdifflinkplural' => 'છેલ્લા {{PLURAL:$1|ફેરફાર|ફેરફારો}}',
+'newmessageslinkplural' => '{{PLURAL:$1|નવà«\8b àª¸àª\82દà«\87શà«\8b«¯à«¯à«¯=નવા àª¸àª\82દà«\87શા}}',
+'newmessagesdifflinkplural' => 'àª\9bà«\87લà«\8dલા {{PLURAL:$1|ફà«\87રફાર|૯૯૯=ફà«\87રફારà«\8b}}',
 'youhavenewmessagesmulti' => 'તમારા માટે $1 ઉપર નવા સંદેશાઓ છે',
 'editsection' => 'ફેરફાર કરો',
 'editold' => 'ફેરફાર કરો',
@@ -1281,7 +1279,6 @@ $1",
 'preferences' => 'પસંદ',
 'mypreferences' => 'પસંદગીઓ',
 'prefs-edits' => 'સંપાદનોની સંખ્યા',
-'prefsnologin' => 'પ્રવેશ કરેલ નથી',
 'prefsnologintext2' => 'તમારી પસંદગીઓ પસંદ કરવા માટે કૃપયા $1.',
 'changepassword' => 'ગુપ્તસંજ્ઞા બદલો',
 'prefs-skin' => 'ફલક',
@@ -2282,13 +2279,14 @@ $PAGEINTRO $NEWPAGE
 ઇ-મેલ: $PAGEEDITOR_EMAIL
 વિકિ: $PAGEEDITOR_WIKI
 
-જ્યાં સુધી તમે આ પાનાની મુલાકાત નહી લો ત્યાં સુધી તેમાં ભવિષ્યમાં થનાર કોઇ પણ ફેરફારની સૂચના તમને મળશે નહિ.
+àª\9cà«\8dયાàª\82 àª¸à«\81ધà«\80 àª¤àª®à«\87 àª²à«\8bàª\97àª\88ન àª¥àª\88 àª\86 àªªàª¾àª¨àª¾àª¨à«\80 àª®à«\81લાàª\95ાત àª¨àª¹à«\80 àª²à«\8b àª¤à«\8dયાàª\82 àª¸à«\81ધà«\80 àª¤à«\87માàª\82 àª­àªµàª¿àª·à«\8dયમાàª\82 àª¥àª¨àª¾àª° àª\95à«\8bàª\87 àªªàª£ àª«à«\87રફારનà«\80 àª¸à«\82àª\9aના àª¤àª®àª¨à«\87 àª®àª³àª¶à«\87 àª¨àª¹àª¿.
 તમે તમારી ધ્યાન સૂચિમાં તમે જોયેલા પાના સંબંધી સૂચનાને લાગતા વિલપોમાં ફેરફાર કરી શકો છો.
 
+
 આપની વિશ્વાસુ {{SITENAME}} સૂચના પ્રણાલી   
  
 --
-e-mail notification settings બદલવા માટે મુલાકાત લો
+email notification settings બદલવા માટે મુલાકાત લો
 {{canonicalurl:{{#special:Preferences}}}}
 
 તમારી ધ્યાનસૂચિના  વિક્લ્પ ગોઠવણ માટે મુલાકાત લો
@@ -3669,7 +3667,7 @@ $5
 'autosumm-blank' => 'પાનું ખાલી કરી દેવાયું',
 'autosumm-replace' => 'માહિતીને "$1" થી બદલી',
 'autoredircomment' => '[[$1]] પર દિશાનિર્દેશિત',
-'autosumm-new' => '$1થà«\80 àª¶àª°à«\82 àª¥àª¤à«\81àª\82 àª¨àªµà«\81àª\82 àªªàª¾àª¨à«\81àª\82 àª¬àª¾àª¨વ્યું',
+'autosumm-new' => '$1થà«\80 àª¶àª°à«\82 àª¥àª¤à«\81àª\82 àª¨àªµà«\81àª\82 àªªàª¾àª¨à«\81àª\82 àª¬àª¨àª¾વ્યું',
 
 # Live preview
 'livepreview-loading' => 'લવાઇ રહ્યું છે...',
@@ -3878,7 +3876,7 @@ $5
 'revdelete-uname-unhid' => 'વપરાશકર્તા નામ છુપાવેલ નથીં',
 'revdelete-restricted' => 'પ્રબઁધકોના ફેરફાર કરવા પર પ્રતિબંધ મુકાયો',
 'revdelete-unrestricted' => 'પ્રબંધકોના ફેરફાર કરવા પર પ્રતિબંધ હટાવાયો.',
-'logentry-move-move' => '$1એ {{GENDER:$2|ખસેડાયું }} પાના $3ને $4 પર ખસેડ્યું',
+'logentry-move-move' => '$1એ $3ને $4 પર {{GENDER:$2|ખસેડ્યું}}',
 'logentry-move-move-noredirect' => '$1 એ દિશાનિર્દેશન છોડ્યા વગર પાના $3ને $4 પર {{GENDER:$2|વાળ્યું}}',
 'logentry-move-move_redir' => '$1એ દિશાનિર્દેશન કરીને પાના $3ને $4 પર {{GENDER:$2|ખસેડ્યું}}',
 'logentry-move-move_redir-noredirect' => '$1એ દિશાનિર્દેશન કરીને પાના $3ને $4 પર {{GENDER:$2|વાળ્યું}} પણ પાછળ દિશાનિર્દેશન છોડ્યું નહી',
@@ -3973,4 +3971,8 @@ $5
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|બાઇટ|બાઇટ્સ}}',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|બાઇટ|બાઇટ્સ}}',
 
+# Special:ExpandTemplates
+'expand_templates_output' => 'પરિણામ:',
+'expand_templates_ok' => 'મંજૂર',
+
 );
index b0453c8..716bbb5 100644 (file)
@@ -266,8 +266,6 @@ $messages = array(
 'ok' => 'OK',
 'retrievedfrom' => 'Feddynit ass "$1"',
 'youhavenewmessages' => 'Ta $1 ayd ($2).',
-'newmessageslink' => 'çhaghteraghtyn noa',
-'newmessagesdifflink' => "caghlaa s'jerree",
 'youhavenewmessagesmulti' => 'Ta çhaghteraghtyn noa ayd er $1',
 'editsection' => 'reagh',
 'editold' => 'reagh',
@@ -609,7 +607,6 @@ My t'ou uss son ronsaghey dagh cooid (as shen goaill stiagh duillagyn resooney,
 'preferences' => 'Tosheeaghtyn',
 'mypreferences' => 'My hosheeaghtyn',
 'prefs-edits' => 'Earroo caghlaaghyn:',
-'prefsnologin' => 'Cha nel oo loggit stiagh',
 'changepassword' => 'Fockle yn arrey y cheaghley',
 'prefs-skin' => 'Crackan',
 'skin-preview' => 'Roie-haishbynys',
@@ -1478,4 +1475,8 @@ Bee adsyn elley follit dy seyr-obbragh.<br />
 'searchsuggest-search' => 'Ronsaghey',
 'searchsuggest-containing' => 'goaill stiagh...',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'OK',
+'expand_templates_preview' => 'Roie-haishbynys',
+
 );
index c0dc165..34097c7 100644 (file)
@@ -16,6 +16,8 @@
  * @author Xiaomingyan
  */
 
+$fallback = 'zh-hant';
+
 $messages = array(
 # User preference toggles
 'tog-underline' => '鏈接加底線:',
@@ -289,8 +291,6 @@ $1',
 'ok' => '做得',
 'retrievedfrom' => '來自"$1"',
 'youhavenewmessages' => '汝有$1($2)。',
-'newmessageslink' => '新消息',
-'newmessagesdifflink' => '上擺更改',
 'youhavenewmessagesfromusers' => '汝有來自{{PLURAL:$3|另一位用戶|$3位用戶}}嘅$1($2)。',
 'youhavenewmessagesmanyusers' => '汝有來自多位用戶嘅$1( $2 )。',
 'newmessageslinkplural' => '{{PLURAL:$1|一條新信息|新信息}}',
@@ -897,7 +897,6 @@ Liá-chhṳ chhà-fûng he yù $1 só fûng ke. Tông-chûng ke ngièn-yîn he '
 # Preferences page
 'preferences' => '偏好設定',
 'mypreferences' => '偏好設定',
-'prefsnologin' => '還吂登入',
 'changepassword' => '更改密碼',
 'prefs-skin' => '外皮',
 'skin-preview' => '預覽',
index 02a781d..13d61b5 100644 (file)
@@ -276,8 +276,6 @@ $messages = array(
 'ok' => 'Hiki nō',
 'retrievedfrom' => 'Kiʻi ʻia mai "$1"',
 'youhavenewmessages' => 'He $1 ($2) kāu.',
-'newmessageslink' => 'mau memo hou',
-'newmessagesdifflink' => 'loli hope',
 'youhavenewmessagesmulti' => 'He mau memo kou ma $1',
 'editsection' => 'e ho‘ololi',
 'editold' => 'e ho‘ololi',
@@ -857,4 +855,8 @@ Hiki iā ʻoe ke ʻikena i kāna molekumu.',
 # Special:Tags
 'tags-edit' => 'e hoʻololi',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Hiki nō',
+'expand_templates_preview' => 'Nāmua',
+
 );
index e4957e7..685f641 100644 (file)
@@ -12,6 +12,7 @@
  * @author Dekel E
  * @author Drorsnir
  * @author Guycn1
+ * @author Guycn2
  * @author Hoo
  * @author Ijon
  * @author Inkbug
@@ -65,12 +66,12 @@ $namespaceGenderAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'משתמשים_פעילים' ),
        'Allmessages'               => array( 'הודעות_המערכת' ),
+       'AllMyUploads'              => array( 'כל_ההעלאות_שלי' ),
        'Allpages'                  => array( 'כל_הדפים' ),
        'Ancientpages'              => array( 'דפים_מוזנחים' ),
        'Badtitle'                  => array( 'כותרת_שגויה' ),
        'Blankpage'                 => array( 'דף_ריק' ),
        'Block'                     => array( 'חסימה', 'חסימת_כתובת', 'חסימת_משתמש' ),
-       'Blockme'                   => array( 'חסום_אותי' ),
        'Booksources'               => array( 'משאבי_ספרות', 'משאבי_ספרות_חיצוניים' ),
        'BrokenRedirects'           => array( 'הפניות_לא_תקינות', 'הפניות_שבורות' ),
        'Categories'                => array( 'קטגוריות', 'רשימת_קטגוריות' ),
@@ -82,10 +83,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'הרשמה_לחשבון' ),
        'Deadendpages'              => array( 'דפים_ללא_קישורים' ),
        'DeletedContributions'      => array( 'תרומות_מחוקות' ),
-       'Disambiguations'           => array( 'פירושונים', 'דפי_פירושונים' ),
        'DoubleRedirects'           => array( 'הפניות_כפולות' ),
        'EditWatchlist'             => array( 'עריכת_רשימת_המעקב' ),
        'Emailuser'                 => array( 'שליחת_דואר_למשתמש' ),
+       'ExpandTemplates'           => array( 'פריסת_תבניות' ),
        'Export'                    => array( 'ייצוא', 'ייצוא_דפים' ),
        'Fewestrevisions'           => array( 'הגרסאות_המעטות_ביותר', 'הדפים_בעלי_מספר_העריכות_הנמוך_ביותר' ),
        'FileDuplicateSearch'       => array( 'חיפוש_קבצים_כפולים' ),
@@ -130,10 +131,12 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'דפים_מוגנים' ),
        'Protectedtitles'           => array( 'כותרות_מוגנות' ),
        'Randompage'                => array( 'אקראי', 'דף_אקראי' ),
+       'RandomInCategory'          => array( 'דף_אקראי_בקטגוריה' ),
        'Randomredirect'            => array( 'הפניה_אקראית' ),
        'Recentchanges'             => array( 'שינויים_אחרונים' ),
        'Recentchangeslinked'       => array( 'שינויים_בדפים_המקושרים' ),
        'Redirect'                  => array( 'הפניה' ),
+       'ResetTokens'               => array( 'איפוס_אסימונים' ),
        'Revisiondelete'            => array( 'מחיקת_ושחזור_גרסאות' ),
        'Search'                    => array( 'חיפוש' ),
        'Shortpages'                => array( 'דפים_קצרים' ),
@@ -153,7 +156,7 @@ $specialPageAliases = array(
        'Unwatchedpages'            => array( 'דפים_שאינם_במעקב' ),
        'Upload'                    => array( 'העלאה', 'העלאת_קובץ_לשרת' ),
        'UploadStash'               => array( 'מאגר_העלאות' ),
-       'Userlogin'                 => array( 'כניסה_לחשבון', 'כניסה', 'כניסה_/_הרשמה_לחשבון' ),
+       'Userlogin'                 => array( 'כניסה_לחשבון', 'כניסה' ),
        'Userlogout'                => array( 'יציאה_מהחשבון', 'יציאה' ),
        'Userrights'                => array( 'ניהול_הרשאות_משתמש', 'הפיכת_משתמש_למפעיל_מערכת', 'הענקת_או_ביטול_הרשאת_בוט' ),
        'Version'                   => array( 'גרסה', 'גרסת_התוכנה' ),
@@ -637,12 +640,10 @@ $1',
 'backlinksubtitle' => '→ $1',
 'retrievedfrom' => 'מקור: $1',
 'youhavenewmessages' => 'יש לך $1 ($2).',
-'newmessageslink' => 'הודעות חדשות',
-'newmessagesdifflink' => 'השוואה לגרסה הקודמת',
 'youhavenewmessagesfromusers' => 'יש לך $1 {{PLURAL:$3|ממשתמש אחר|מ־$3 משתמשים}} ($2).',
 'youhavenewmessagesmanyusers' => 'יש לך $1 ממשתמשים רבים ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|הודעה חדשה|הודעות חדשות}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|שינוי אחרון|שינויים אחרונים}}',
+'newmessageslinkplural' => '{{PLURAL:$1|הודעה חדשה|999=הודעות חדשות}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|שינוי אחרון|999=שינויים אחרונים}}',
 'youhavenewmessagesmulti' => 'יש לך הודעות חדשות ב־$1',
 'editsection' => 'עריכה',
 'editold' => 'עריכה',
@@ -1501,7 +1502,6 @@ $1",
 'preferences' => 'העדפות',
 'mypreferences' => 'העדפות',
 'prefs-edits' => 'מספר עריכות:',
-'prefsnologin' => 'לא נכנסת לחשבון',
 'prefsnologintext2' => 'אנא $1 כדי לשנות העדפות משתמש.',
 'changepassword' => 'שינוי סיסמה',
 'prefs-skin' => 'עיצוב',
@@ -1804,6 +1804,9 @@ $1",
 'recentchanges-label-minor' => 'זוהי עריכה משנית',
 'recentchanges-label-bot' => 'עריכה זו בוצעה על ידי בוט',
 'recentchanges-label-unpatrolled' => 'עריכה זו טרם נבדקה',
+'recentchanges-label-plusminus' => 'מספר הבתים שבו השתנה גודל הדף',
+'recentchanges-legend-newpage' => '(ראו גם [[Special:NewPages|רשימת דפים חדשים]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "להלן {{PLURAL:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{PLURAL:$2|ביום האחרון|ביומיים האחרונים|ב־$2 הימים האחרונים}}, עד $5, $4:",
 'rcnotefrom' => 'להלן <b>$1</b> השינויים האחרונים שבוצעו החל מתאריך <b>$2</b>:',
 'rclistfrom' => 'הצגת שינויים חדשים החל מ־$1',
@@ -2332,7 +2335,7 @@ $1',
 'notargettitle' => 'אין דף מטרה',
 'notargettext' => 'לא ציינתם דף מטרה או משתמש לגביו תבוצע פעולה זו.',
 'nopagetitle' => 'אין דף מטרה כזה',
-'nopagetext' => 'דף המטרה שציינתם אינו קיים.',
+'nopagetext' => 'דף המטרה שציינת אינו קיים.',
 'pager-newer-n' => '{{PLURAL:$1|הבאה|$1 הבאות}}',
 'pager-older-n' => '{{PLURAL:$1|הקודמת|$1 הקודמות}}',
 'suppress' => 'הסתרה',
@@ -2969,7 +2972,7 @@ $1',
 במקרים אלו, תצטרכו להעביר או לשלב את הדפים באופן ידני, אם תרצו.',
 'movearticle' => 'העברת דף:',
 'moveuserpage-warning' => "'''אזהרה:''' אתם עומדים להעביר דף משתמש. שימו לב שרק הדף יועבר וששם המשתמש '''לא''' ישתנה.",
-'movenologin' => 'לא נכנסתם לחשבון',
+'movenologin' => 'לא נכנסת לחשבון',
 'movenologintext' => 'עליכם [[Special:UserLogin|להיכנס לחשבון]] כדי להעביר דפים.',
 'movenotallowed' => 'אינכם מורשים להעביר דפים.',
 'movenotallowedfile' => 'אינכם מורשים להעביר קבצים.',
@@ -3153,13 +3156,13 @@ $2',
 'javascripttest-qunit-heading' => 'מערך בדיקות QUnit ל־JavaScript של מדיה־ויקי',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => '×\93×£ ×\94×\9eשת×\9eש ×©×\9c×\9b×\9d',
+'tooltip-pt-userpage' => '×\93×£ ×\94×\9eשת×\9eש ×©×\9c×\9a',
 'tooltip-pt-anonuserpage' => 'דף המשתמש של משתמש אנונימי זה',
-'tooltip-pt-mytalk' => '×\93×£ ×\94ש×\99×\97×\94 ×©×\9c×\9b×\9d',
+'tooltip-pt-mytalk' => '×\93×£ ×\94ש×\99×\97×\94 ×©×\9c×\9a',
 'tooltip-pt-anontalk' => 'שיחה על תרומות המשתמש האנונימי',
-'tooltip-pt-preferences' => '×\94×\94×¢×\93פ×\95ת ×©×\9c×\9b×\9d',
+'tooltip-pt-preferences' => '×\94×\94×¢×\93פ×\95ת ×©×\9c×\9a',
 'tooltip-pt-watchlist' => 'רשימת הדפים שאתם עוקבים אחרי השינויים בהם',
-'tooltip-pt-mycontris' => 'רש×\99×\9eת ×\94תר×\95×\9e×\95ת ×©×\9c×\9b×\9d',
+'tooltip-pt-mycontris' => 'רש×\99×\9eת ×\94תר×\95×\9e×\95ת ×©×\9c×\9a',
 'tooltip-pt-login' => 'מומלץ להירשם, אך אין חובה לעשות כן',
 'tooltip-pt-anonlogin' => 'מומלץ להירשם, אך אין חובה לעשות כן',
 'tooltip-pt-logout' => 'יציאה מהחשבון',
@@ -3208,7 +3211,7 @@ $2',
 'tooltip-ca-nstab-help' => 'צפייה בדף העזרה',
 'tooltip-ca-nstab-category' => 'צפייה בדף הקטגוריה',
 'tooltip-minoredit' => 'סימון עריכה זו כמשנית',
-'tooltip-save' => 'שמירת השינויים שביצעתם',
+'tooltip-save' => 'שמירת השינויים שביצעת',
 'tooltip-preview' => 'תצוגה מקדימה, אנא השתמשו באפשרות זו לפני השמירה!',
 'tooltip-diff' => 'צפייה בשינויים שערכתם בטקסט',
 'tooltip-compareselectedversions' => 'צפייה בהשוואת שתי גרסאות של דף זה',
@@ -4353,4 +4356,21 @@ $5
 'limitreport-expansiondepth' => 'עומק הפריסה הגבוה ביותר',
 'limitreport-expensivefunctioncount' => 'מספר פונקציות המפענח שגוזלות משאבים',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'פריסת תבניות',
+'expand_templates_intro' => 'הדף המיוחד הזה מקבל כמות מסוימת של טקסט ופורס את כל התבניות שבתוכו באופן רקורסיבי.
+הוא גם פורס פונקציות מפענח כגון
+<code><nowiki>{{</nowiki>#תנאי:...}}</code>, ומשתנים כגון
+<code><nowiki>{{</nowiki>יום נוכחי}}</code>.
+למעשה, הוא פורס פחות או יותר כל דבר בסוגריים מסולסלים כפולים.',
+'expand_templates_title' => 'כותרת ההקשר לפענוח, בשביל משתנים כגון {{FULLPAGENAME}} וכדומה:',
+'expand_templates_input' => 'טקסט הקלט:',
+'expand_templates_output' => 'תוצאה',
+'expand_templates_xml_output' => 'פלט XML',
+'expand_templates_ok' => 'אישור',
+'expand_templates_remove_comments' => 'הסרת הערות',
+'expand_templates_remove_nowiki' => 'הסרת תגי <nowiki> בתוצאה',
+'expand_templates_generate_xml' => 'הצגת עץ הפענוח של XML',
+'expand_templates_preview' => 'תצוגה מקדימה',
+
 );
index 9acbedc..f2273ba 100644 (file)
@@ -79,10 +79,9 @@ $specialPageAliases = array(
        'Allmessages'               => array( 'सभी_सन्देश', 'सभी_संदेश' ),
        'Allpages'                  => array( 'सभी_पृष्ठ', 'सभी_पन्ने' ),
        'Ancientpages'              => array( 'पुराने_पृष्ठ', 'पुराने_पन्ने' ),
-       'Badtitle'                  => array( 'à¤\96़राब_शà¥\80रà¥\8dषà¤\95' ),
+       'Badtitle'                  => array( 'खराब_शीर्षक' ),
        'Blankpage'                 => array( 'रिक्त_पृष्ठ', 'खाली_पृष्ठ' ),
        'Block'                     => array( 'अवरोधन', 'आइ_पी_अवरोधन', 'सदस्य_अवरोधन' ),
-       'Blockme'                   => array( 'स्वावरोधन', 'स्व_अवरोधन', 'मुझे_रोकिये' ),
        'Booksources'               => array( 'पुस्तक_स्रोत', 'किताब_स्रोत' ),
        'BrokenRedirects'           => array( 'टूटे_पुनर्निर्देश', 'टूटे_अनुप्रेष' ),
        'Categories'                => array( 'श्रेणियाँ' ),
@@ -94,10 +93,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'खाता_बनाएँ', 'खाता_बनायें', 'खाता_खोलें' ),
        'Deadendpages'              => array( 'बन्द_पृष्ठ', 'बन्द_पन्ने' ),
        'DeletedContributions'      => array( 'हटाए_गए_योगदान', 'हटाये_गये_योगदान' ),
-       'Disambiguations'           => array( 'बहुविकल्पी_कड़ियाँ', 'बहुविकल्पित' ),
        'DoubleRedirects'           => array( 'दुगुने_पुनर्निर्देश', 'दुगुने_अनुप्रेष' ),
        'EditWatchlist'             => array( 'ध्यानसूची_सम्पादन', 'ध्यानसूची_संपादन', 'ध्यानसूची_सम्पादन_करें' ),
        'Emailuser'                 => array( 'ईमेल_करें', 'सदस्य_को_ईमेल_करें' ),
+       'ExpandTemplates'           => array( 'साँचे_खोलें', 'साँचे_बढ़ाएँ' ),
        'Export'                    => array( 'निर्यात' ),
        'Fewestrevisions'           => array( 'न्यूनतम_अवतरण', 'कम_सम्पादित_पृष्ठ' ),
        'FileDuplicateSearch'       => array( 'फ़ाइल_प्रति_खोज', 'फाइल_प्रति_खोज', 'संचिका_प्रति_खोज' ),
@@ -462,8 +461,6 @@ $1',
 'ok' => 'ठीक है',
 'retrievedfrom' => '"$1" से लिया गया',
 'youhavenewmessages' => 'आपके लिए $1 हैं। ($2)',
-'newmessageslink' => 'नए सन्देश',
-'newmessagesdifflink' => 'पिछला बदलाव',
 'youhavenewmessagesfromusers' => 'आपके लिये {{PLURAL:$3|एक अन्य सदस्य|$3 अन्य सदस्यों}} के $1 हैं। ($2)',
 'youhavenewmessagesmanyusers' => 'आपके लिये $1 हैं। ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|एक नया सन्देश|नये सन्देश}}',
@@ -1331,7 +1328,6 @@ $1",
 'preferences' => 'मेरी वरीयताएँ',
 'mypreferences' => 'पसंद',
 'prefs-edits' => 'संपादन संख्या:',
-'prefsnologin' => 'लॉग इन नहीं किया है',
 'changepassword' => 'कूटशब्द बदलें',
 'prefs-skin' => 'त्वचा',
 'skin-preview' => 'झलक',
@@ -1632,6 +1628,7 @@ HTML टैग की जाँच करें।',
 'recentchanges-label-minor' => 'यह एक छोटा सम्पादन है',
 'recentchanges-label-bot' => 'यह संपादन एक बॉट द्वारा किया गया था',
 'recentchanges-label-unpatrolled' => 'यह संपादन अभी जाँचा नहीं गया है',
+'recentchanges-legend-newpage' => '$1 - नया पन्ना',
 'rcnote' => "$5, $4 के पहले के '''$2''' {{PLURAL:$2|दिन|दिनों}} में  {{PLURAL:$1|हुआ '''$1''' बदलाव निम्न है| हुए '''$1''' बदलाव निम्न हैं}}।",
 'rcnotefrom' => "नीचे '''$2''' के बाद से ('''$1''' तक) हुए बदलाव दर्शाए गये हैं।",
 'rclistfrom' => '$1 से नये बदलाव दिखाएँ',
@@ -4094,4 +4091,20 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|शताब्दी}}',
 'duration-millennia' => '$1 {{PLURAL:$1|सहस्राब्दी}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'साँचा विस्तार',
+'expand_templates_intro' => 'यह विशेष पृष्ठ पाठ इनपुट लेता है और सभी साँचों को विस्तृत करता है।
+यह <code><nowiki>{{</nowiki>#language:…}}</code> जैसे पार्सर फंक्शनों और
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code> जैसे वेरियेबलों को भी विस्तृत करता है।
+यह दोहरे कोष्ठकों में दिया लगभग सब कुछ विस्तृत करता है।',
+'expand_templates_title' => 'कन्टेक्स्ट शीर्षक, जैसे {{FULLPAGENAME}} आदि के लिए:',
+'expand_templates_input' => 'इनपुट पाठ:',
+'expand_templates_output' => 'परिणाम',
+'expand_templates_xml_output' => 'XML आउटपुट',
+'expand_templates_ok' => 'ओके',
+'expand_templates_remove_comments' => 'टिप्पणी हटायें',
+'expand_templates_remove_nowiki' => 'परिणाम में <nowiki> टैग हटाएँ',
+'expand_templates_generate_xml' => 'XML का पार्स (parse) वृक्ष दर्शायें',
+'expand_templates_preview' => 'झलक',
+
 );
index 39719d2..00f5cfc 100644 (file)
@@ -308,8 +308,6 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => '"$1" se lawa gais hae',
 'youhavenewmessages' => 'Aapke pass hai $1 ($2).',
-'newmessageslink' => 'nawaa khabar',
-'newmessagesdifflink' => 'pahile waala badlao',
 'youhavenewmessagesfromusers' => 'Aap ke lage {{PLURAL:$3|duusra sadasya|$3 sadasya}} ke lage se $1 hae ($2).',
 'youhavenewmessagesmanyusers' => 'Aap ke lage dher sadasya se $1 hae ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ek nawaa sandes|nawaa sandes}}',
@@ -1169,7 +1167,6 @@ Yaad rakhna ki uu log ke {{SITENAME}} ke index saait purana hoi.',
 'preferences' => 'Pasand',
 'mypreferences' => 'Pasand',
 'prefs-edits' => 'Badlao ke number:',
-'prefsnologin' => 'Aap abhi logged in nai hai',
 'changepassword' => 'Pasword ke badlo',
 'prefs-skin' => 'Skin',
 'skin-preview' => 'Jhalak',
@@ -1464,6 +1461,7 @@ Iske $1 {{PLURAL:$1|character|characters}} se kamti rahe ke chaahi.',
 'recentchanges-label-minor' => 'Ii ek chhota badlao hae',
 'recentchanges-label-bot' => 'Ii badlao ke ek bot karis hae',
 'recentchanges-label-unpatrolled' => 'Ii badlao pe abhi pahraa nai dewa gais hae.',
+'recentchanges-legend-newpage' => '$1 - nawaa panna',
 'rcnote' => "Niche {{PLURAL:$1|hai '''1''' badlao|aakhri hai '''$1''' badlao}} pahile {{PLURAL:$2|din|'''$2''' din}}, $5, $4 talak.",
 'rcnotefrom' => "Niche '''$2''' se badlao hai ('''$1''' tak )",
 'rclistfrom' => '$1 se suruu kar ke nawaa badlao dekhao',
index 7cefd04..2b35ef2 100644 (file)
@@ -277,8 +277,6 @@ Lantawa ang [[Special:Version|panid sang mga bersiyon]].',
 'ok' => 'Sige',
 'retrievedfrom' => 'Ginkuha halin sa "$1"',
 'youhavenewmessages' => 'Ikaw may $1 ($2).',
-'newmessageslink' => 'mga bag-ong mensahe',
-'newmessagesdifflink' => 'nagligad nga ginbag-o',
 'youhavenewmessagesfromusers' => 'May yara ka sang $1 halin sa {{PLURAL:$3|lain nga manuggamit|$3 mga manuggamit}} ($2).',
 'youhavenewmessagesmanyusers' => 'May yara ka sang $1 halin sa madamo nga manuggamit ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|isa ka bag-o nga mensahe|bag-o nga mga mensahe}}',
@@ -1094,7 +1092,6 @@ Tandai nga ang ila nga palasulundan sang mga unod sang {{SITENAME}} mahimo nga m
 'preferences' => 'Mga Ginabasehan',
 'mypreferences' => 'Mga Ginabasehan',
 'prefs-edits' => 'Numero sang mga gin-ilisan:',
-'prefsnologin' => 'Wala naka-sulod',
 'changepassword' => 'Ilisan ang pasword',
 'prefs-skin' => 'Panit',
 'skin-preview' => 'Ipakita subong',
@@ -1931,4 +1928,7 @@ Ang iban ay pagataguon sang default.
 'revdelete-unrestricted' => 'ginkakas nga pagbawal sa mga administrador',
 'rightsnone' => '(wala)',
 
+# Special:ExpandTemplates
+'expand_templates_preview' => 'Ipakita subong',
+
 );
index 535dbc7..3d68980 100644 (file)
@@ -69,7 +69,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Stare_stranice' ),
        'Blankpage'                 => array( 'Prazna_stranica' ),
        'Block'                     => array( 'Blokiraj' ),
-       'Blockme'                   => array( 'Blokiraj_me' ),
        'Booksources'               => array( 'Traži_ISBN' ),
        'BrokenRedirects'           => array( 'Kriva_preusmjeravanja' ),
        'Categories'                => array( 'Kategorije' ),
@@ -79,7 +78,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Stvori_račun' ),
        'Deadendpages'              => array( 'Slijepe_ulice' ),
        'DeletedContributions'      => array( 'Obrisani_doprinosi' ),
-       'Disambiguations'           => array( 'Razdvojbe' ),
        'DoubleRedirects'           => array( 'Dvostruka_preusmjeravanja' ),
        'Emailuser'                 => array( 'Elektronička_pošta', 'E-mail' ),
        'Export'                    => array( 'Izvezi' ),
@@ -590,8 +588,6 @@ $1',
 'ok' => 'U redu',
 'retrievedfrom' => 'Dobavljeno iz "$1"',
 'youhavenewmessages' => 'Imate $1 ($2).',
-'newmessageslink' => 'nove poruke',
-'newmessagesdifflink' => 'zadnja promjena na stranici za razgovor',
 'youhavenewmessagesfromusers' => 'Imate $1 {{PLURAL:$3||od $3 suradnika|od $3 suradnika}} ($2).',
 'youhavenewmessagesmanyusers' => 'Imate $1 od više suradnika ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|$1 nove poruke|$1 novih poruka}}',
@@ -1410,7 +1406,6 @@ Više informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{F
 'preferences' => 'Postavke',
 'mypreferences' => 'Moje postavke',
 'prefs-edits' => 'Broj uređivanja:',
-'prefsnologin' => 'Niste prijavljeni',
 'changepassword' => 'Promjena lozinke',
 'prefs-skin' => 'Izgled',
 'skin-preview' => 'Pregled',
@@ -1695,6 +1690,7 @@ Ne smije biti duži od $1 {{PLURAL:$1|znaka|znaka|znakova}}.',
 'recentchanges-label-minor' => 'Ovo je manja izmjena',
 'recentchanges-label-bot' => 'Ovu izmjenu napravio je bot',
 'recentchanges-label-unpatrolled' => 'Ova izmjena još nije pregledana',
+'recentchanges-legend-newpage' => '$1 - nova stranica',
 'rcnote' => "{{PLURAL:$1|Slijedi zadnja '''$1''' promjena|Slijede zadnje '''$1''' promjene|Slijedi zadnjih '''$1''' promjena}} u {{PLURAL:$2|zadnjem '''$2''' danu|zadnja '''$2''' dana|zadnjih '''$2''' dana}}, od $5, $4.",
 'rcnotefrom' => 'Slijede promjene od <b>$2</b> (prikazano ih je do <b>$1</b>).',
 'rclistfrom' => 'Prikaži nove promjene počevši od $1',
@@ -4126,4 +4122,20 @@ Inače, možete ispuniti jednostavan obrazac u nastavku. Vaš komentar biti će
 # Image rotation
 'rotate-comment' => 'Sliku je $1 zaokrenuo za {{PLURAL:$1|stupanj|stupnja|stupnjeva}} u smjeru kazaljke na satu.',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Prikaz sadržaja predložaka',
+'expand_templates_intro' => 'Ova posebna stranica omogućuje unos wikiteksta i prikazuje njegov rezultat,
+uključujući i (rekurzivno, tj. potpuno) sve uključene predloške u wikitekstu.
+Prikazuje i rezultate funkcija kao <nowiki>{{</nowiki>#language:...}} i varijabli
+kao <nowiki>{{</nowiki>CURRENTDAY}}. Funkcionira pozivanjem parsera same MedijeWiki.',
+'expand_templates_title' => 'Kontekstni naslov stranice, za {{FULLPAGENAME}} i sl.:',
+'expand_templates_input' => 'Ulazni tekst:',
+'expand_templates_output' => 'Rezultat',
+'expand_templates_xml_output' => 'XML kod',
+'expand_templates_ok' => 'Prikaži',
+'expand_templates_remove_comments' => 'Ukloni komentare',
+'expand_templates_remove_nowiki' => 'Ukloni <nowiki> tagove u rezultatima.',
+'expand_templates_generate_xml' => 'Prikaži XML stablo',
+'expand_templates_preview' => 'Vidi kako će izgledati',
+
 );
index dce4671..a72e2a5 100644 (file)
@@ -70,7 +70,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Najstarše_strony' ),
        'Blankpage'                 => array( 'Prózdna_strona' ),
        'Block'                     => array( 'Blokować' ),
-       'Blockme'                   => array( 'Blokowanje_proksijow' ),
        'Booksources'               => array( 'Pytanje_po_ISBN' ),
        'BrokenRedirects'           => array( 'Skóncowane_daleposrědkowanja' ),
        'Categories'                => array( 'Kategorije' ),
@@ -80,7 +79,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Konto_wutworić' ),
        'Deadendpages'              => array( 'Strony_bjez_wotkazow' ),
        'DeletedContributions'      => array( 'Zničene_přinoški' ),
-       'Disambiguations'           => array( 'Rozjasnjenja_wjazmyslnosće' ),
        'DoubleRedirects'           => array( 'Dwójne_daleposrědkowanja' ),
        'Emailuser'                 => array( 'E-Mejl' ),
        'Export'                    => array( 'Eksport' ),
@@ -428,12 +426,10 @@ $1',
 'ok' => 'W porjadku',
 'retrievedfrom' => 'Z "$1"',
 'youhavenewmessages' => 'Maš $1 ($2).',
-'newmessageslink' => 'nowe powěsće',
-'newmessagesdifflink' => 'poslednja změna',
 'youhavenewmessagesfromusers' => 'Maš $1 wot {{PLURAL:$3|druheho wužiwarja|$3 wužiwarjow|$3 wužiwarjow|$3 wužiwarjow}} ($2).',
 'youhavenewmessagesmanyusers' => 'Maš $1 wot wjele wužiwarjow ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|nowu powěsć|nowej powěsći|nowe powěsće}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|poslednja změna|poslednjej změnje|poslednje změny|poslednje změny}}',
+'newmessageslinkplural' => '{{PLURAL:$1|nowu powěsć|999=nowej powěsći|999=nowe powěsći}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|poslednja změna|999=poslednjej změnje|999=poslednje změny}}',
 'youhavenewmessagesmulti' => 'Maš nowe powěsće: $1',
 'editsection' => 'wobdźěłać',
 'editold' => 'wobdźěłać',
@@ -485,6 +481,9 @@ Płaćiwe specialne strony hodźa so pod [[Special:SpecialPages|lisćinu special
 # General errors
 'error' => 'Zmylk',
 'databaseerror' => 'Zmylk w datowej bance',
+'databaseerror-text' => 'Zmylk w datowej bance je wustupił.
+To móže na programowy zmylk w softwarje pokazać.',
+'databaseerror-textcl' => 'Zmylk w datowej bance je wustupił.',
 'databaseerror-query' => 'Wotprašenje: $1',
 'databaseerror-function' => 'Funkcija: $1',
 'databaseerror-error' => 'Zmylk: $1',
@@ -521,6 +520,7 @@ Móže być, zo je hižo wot někoho druheho wušmórnjena.',
 'cannotdelete-title' => 'Strona "$1" njehodźi so zhašeć',
 'delete-hook-aborted' => 'Zhašenje přez hoku přetorhnjene.
 Njeje žane wujasnjenje podała.',
+'no-null-revision' => 'Nowa nulowa wersija za stronu "$1" njeda so wutworić',
 'badtitle' => 'Wopačny titul',
 'badtitletext' => 'Požadane mjeno strony běše njepłaćiwy, prózdny abo njekorektny titul z mjezyrěčneho abo interwikijoweho wotkaza. Snano wobsahuje jedne znamješko abo wjacore znamješka, kotrež w titulach dowolene njejsu.',
 'perfcached' => 'Slědowace daty pochadźeja z pufrowaka a njejsu snano cyle aktualne. Maksimalnje {{PLURAL:$1|jedyn wuslědk|$1 wuslědkaj|$1 wuslědki|$1 wuslědkow}} w pufrowaku k dispoziciji {{PLURAL:$1|steji|stejitej|steja|steji}}.',
@@ -688,6 +688,8 @@ Móžeš tutu zdźělenku ignorować, jeli so wužiwarske konto zmylnje wutwori
 'login-abort-generic' => 'Twoje přizjewjenje njebě wuspěšne - přetorhnjene',
 'loginlanguagelabel' => 'Rěč: $1',
 'suspicious-userlogout' => 'Twoje naprašowanje za wotzjewjenje bu wotpokazane, dokelž zda so, jako by so přez wobškodźeny wobhladowak abo pufrowacy proksy pósłało',
+'createacct-another-realname-tip' => '* Woprawdźite mjeno je opcionalne.
+Jeli jo podaš, budźe so to wužiwać, zo by přinoški přirjadowało.',
 
 # Email sending
 'php-mail-error-unknown' => 'Njeznaty zmylk w PHP-funkciji mail()',
@@ -758,6 +760,16 @@ Nachwilne hesło: $2',
 
 # Special:ResetTokens
 'resettokens' => 'Tokeny wróćo stajić',
+'resettokens-text' => 'Móžeš tokeny wróćo stajić, kotrež přistup na wěste priwatne daty dowoleja, kotrež su z twojim kontom zwjazane.
+
+Ty dyrbjał zo činić, jeli sy je zmylnje z někim dźělił abo jelic twoje konto je so napadało.',
+'resettokens-no-tokens' => 'Tokeny za wróćostajenje njejsu.',
+'resettokens-legend' => 'Tokeny wróćo stajić',
+'resettokens-tokens' => 'Tokeny:',
+'resettokens-token-label' => '$1 (aktualna hódnota: $2)',
+'resettokens-watchlist-token' => 'Token za webkanal (Atom/RSS) [[Special:Watchlist|změnow na stronach w twojich wobkedźbowankach]]',
+'resettokens-done' => 'Tokeny wróćostajene.',
+'resettokens-resetbutton' => 'Wubrane tokeny wróćo stajić',
 
 # Edit page toolbar
 'bold_sample' => 'Tučny tekst',
@@ -1070,8 +1082,9 @@ Móžeš sej tutón rozdźěl wobhladać; podrobnosće namakaš w [{{fullurl:{{#
 Druzy administratorojo na {{GRAMMAR:lokatiw|{{SITENAME}}}} móža hišće na schowany tekst přistup měć a jón z pomocu samsneho interfejsa wobnowić, chibazo tež přidatne prawa su wobmjezowane.",
 'revdelete-confirm' => 'Prošu potwjerdź, zo chceš to činić, zo rozumiš konsekwency a zo činiš to po [[{{MediaWiki:Policy-url}}|prawidłach]].',
 'revdelete-suppress-text' => "Potłóčenje dyrbjało so '''jenož''' za slědowace pady wužiwać:
+* Potencielnje křiwdźace informacije
 * Njepřihódne wosobinske informacije
-*: ''bydlenske adresy a telefonowe čisła, čisła socialneho zawěsćenja atd.''",
+*: ''Bydlenske adresy a telefonowe čisła, čisła socialneho zawěsćenja atd.''",
 'revdelete-legend' => 'Wobmjezowanja za widźomnosć nastajić',
 'revdelete-hide-text' => 'Tekst wersije',
 'revdelete-hide-image' => 'Wobsah wobraza schować',
@@ -1236,7 +1249,7 @@ Spytaj swoje naprašowanje z prefiksom ''all:'' wužiwać, zo by wšón wobsah (
 'preferences' => 'Nastajenja',
 'mypreferences' => 'Nastajenja',
 'prefs-edits' => 'Ličba změnow:',
-'prefsnologin' => 'Njepřizjewjeny',
+'prefsnologintext2' => 'Dyrbiš so $1, zo by wužiwarske nastajenja postajił.',
 'changepassword' => 'Hesło změnić',
 'prefs-skin' => 'Drasta',
 'skin-preview' => 'Přehlad',
@@ -1273,6 +1286,9 @@ Spytaj swoje naprašowanje z prefiksom ''all:'' wužiwać, zo by wšón wobsah (
 'recentchangesdays-max' => '(Maksimalnje $1 {{PLURAL:$1|dźeń|dnjej|dny|dnjow}})',
 'recentchangescount' => 'Ličba stronow, kotraž ma so po standardźe pokazać:',
 'prefs-help-recentchangescount' => 'To zapřijima aktualne změny, stawizny stronow a protokole.',
+'prefs-help-watchlist-token2' => 'To je tajny kluč k webkanalej twojich wobkedźbowankow.
+Něchtó, kotryž jón znaje, móže twoje wobkedźbowanki čitać, njedźěl jón tohodla.
+[[Special:ResetTokens|Klikń tu, jeli dybiš jón wróćo stajić]].',
 'savedprefs' => 'Nastajenja buchu składowane.',
 'timezonelegend' => 'Časowe pasmo:',
 'localtime' => 'Lokalny čas:',
@@ -1321,7 +1337,9 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'gender-unknown' => 'Nochcu ničo wo tym podać',
 'gender-male' => 'Wón wobdźěłuje wikistrony',
 'gender-female' => 'Wona wobdźěłuje wikistrony',
-'prefs-help-gender' => 'Opcionalny: wužiwa so za po splahu specifiske narěčenje přez softwaru. Tuta informacija budźe zjawna.',
+'prefs-help-gender' => 'Tute podaće je opcionalne:
+Softwara wužiwa jeho hódnotu, zo by će z pomocu wotpowědneho gramatikaliskeho roda narěčała a druhich na tebje pokazała.
+Tuta informacija budźe zjawna.',
 'email' => 'E-mejl',
 'prefs-help-realname' => '* Woprawdźite mjeno (opcionalne): jeli so rozsudźiš to zapodać, budźe to so wužiwać, zo by tebi woprawnjenje za twoje dźěło dało.',
 'prefs-help-email' => 'E-mejlowa adresa je opcionalna, ale zmóžnja ći nowe hesło emejlować, jeli sy swoje hesło zabył.',
@@ -1342,6 +1360,7 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'prefs-displayrc' => 'Zwobraznjenske opcije',
 'prefs-displaysearchoptions' => 'Zwobraznjenske opcije',
 'prefs-displaywatchlist' => 'Zwobraznjenske opcije',
+'prefs-tokenwatchlist' => 'Token',
 'prefs-diffs' => 'Rozdźěle',
 'prefs-help-prefershttps' => 'Tute nastajenje so po twojim přichodnym přizjewjenju wuskutkuje.',
 
@@ -1415,7 +1434,7 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'right-reupload-shared' => 'Dataje w hromadźe wužiwanej repozitoriju lokalnje přepisać',
 'right-upload_by_url' => 'Dataju z URL-adresy nahrać',
 'right-purge' => 'Pufrowak sydła za stronu bjez wobkrućenskeje strony wuprózdnić',
-'right-autoconfirmed' => 'Połzaškitane strony wobdźěłać',
+'right-autoconfirmed' => 'Žane wobmjezowanje přez IP-bazowane limity',
 'right-bot' => 'Ma so jako awtomatiski proces wobjednać',
 'right-nominornewtalk' => 'Snadne změny k diskusijnym stronam zwobraznjenje nowych powěsćow wuwołać njedać',
 'right-apihighlimits' => 'Wyše limity wi API-naprašowanjach wužiwać',
@@ -1436,7 +1455,7 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'right-ipblock-exempt' => 'Blokowanja IP, awtomatiske blokowanje a blokowanja wobwodow wobeńć',
 'right-proxyunbannable' => 'Automatiske blokowanja proksyjow wobeńć',
 'right-unblockself' => 'Swójske blokowanje zběhnyć',
-'right-protect' => 'Škitowe schodźenki změnić a škitanu stronu wobdźěłać',
+'right-protect' => 'Škitowe schodźenki změnić a z kaskadami škitane strony wobdźěłać',
 'right-editprotected' => 'Strony wobdźěłać, kotrež su přez "{{int:protect-level-sysop}}" škitane',
 'right-editsemiprotected' => 'Strony wobdźěłać, kotrež su přez "{{int:protect-level-autoconfirmed}}" škitane',
 'right-editinterface' => 'Wužiwarski powjerch wobdźěłać',
@@ -1529,6 +1548,9 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'recentchanges-label-minor' => 'To je snadna změna',
 'recentchanges-label-bot' => 'Tuta změna bu přez roboćik přewjedźena',
 'recentchanges-label-unpatrolled' => 'Tuta změnu hišće njebu přepruwowana',
+'recentchanges-label-plusminus' => 'Změnjena wulkosć strony (w bajtach)',
+'recentchanges-legend-newpage' => '(hlej tež [[Special:NewPages|lisćinu nowych stronow]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "Deleka {{PLURAL:$1|je '''1''' změna|stej poslednjej '''$1''' změnje|su poslednje '''$1''' změny|je poslednich '''$1''' změnow}} za {{PLURAL:$2|posledni dźeń|poslednjej '''$2''' dnjej|poslednje '''$2''' dny|poslednich '''$2''' dnjow}}, staw wot $4, $5.",
 'rcnotefrom' => "Deleka so změny wot '''$2''' pokazuja (hač k '''$1''').",
 'rclistfrom' => 'Nowe změny pokazać, započinajo z $1',
@@ -1924,6 +1946,7 @@ Snano chceš wopisanje na jeje [$2 stronje datajoweho wopisanja] wobdźěłać.'
 'randomincategory' => 'Připadna strona w kategoriji',
 'randomincategory-invalidcategory' => '"$1" płaćiwe kategorijowe mjeno njeje.',
 'randomincategory-nopages' => 'W kategoriji [[:Category:$1|$1]] žane strony njejsu.',
+'randomincategory-selectcategory' => 'Připadna strona z kategorija: $1 $2',
 'randomincategory-selectcategory-submit' => 'Wotesłać',
 
 # Random redirect
@@ -1956,6 +1979,8 @@ Snano chceš wopisanje na jeje [$2 stronje datajoweho wopisanja] wobdźěłać.'
 'pageswithprop-text' => 'Tuta strona nalistuje strony, kotrež wěstu kajkosć strony wužiwaja.',
 'pageswithprop-prop' => 'Mjeno kajkosće:',
 'pageswithprop-submit' => 'Wotpósłać',
+'pageswithprop-prophidden-long' => 'Hódnota kajkosće dołheho teksta schowana ($1)',
+'pageswithprop-prophidden-binary' => 'binarna kajkostna hódnota schowana ($1)',
 
 'doubleredirects' => 'Dwójne daleposrědkowanja',
 'doubleredirectstext' => 'Tuta strona nalistuje strony, kotrež k druhim daleposrědkowanskim stronam dale posrědkuja.
@@ -2012,6 +2037,7 @@ Kóžda rjadka wobsahuje wotkazy k prěnjemu a druhemu daleposrědkowanju kaž t
 'mostrevisions' => 'Nastawki z najwjace wersijemi',
 'prefixindex' => 'Wšě strony z prefiksom',
 'prefixindex-namespace' => 'Wšě strony z prefiksom (mjenowy rum $1)',
+'prefixindex-strip' => 'Prefiks w lisćinje wotrězać',
 'shortpages' => 'Krótke nastawki',
 'longpages' => 'Dołhe nastawki',
 'deadendpages' => 'Nastawki bjez wotkazow',
@@ -2245,7 +2271,7 @@ Staj so z wobdźěłarjom do zwiska:
 e-mejl: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Njebudu žane druhe zdźělenki w padźe dalšich změnow, chibazo wopytaš tutu stronu.
+Njebudu žane druhe zdźělenki w padźe dalšeje aktiwity, chibazo wopytaš tutu stronu. mjeztym zo sy přizjewjeny.
 Móžeš tež zdźělenske marki za wšě swoje wobkedźbowane strony we swojich wobkedźbowankach wróćo stajić.
 
 Twój přećelny zdźělenski system {{GRAMMAR:genitiw|{{SITENAME}}}}
@@ -2311,7 +2337,7 @@ Prošu potwjerdź, zo maš wotpohlad to činić, zo rozumiš sćěwki a zo to wo
 Poslednja změna bě wot wužiwarja [[User:$3|$3]] ([[User talk:$3|Diskusija]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Zjeće wobdźěłanja bě: \"''\$1''\".",
 'revertpage' => 'Změny [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]) cofnjene a nawróćene k poslednjej wersiji wužiwarja [[User:$1|$1]]',
-'revertpage-nouser' => 'Staji změny wot (wužiwarske mjeno wotstronjene) na předchadnu wersiju wot [[User:$1|$1]] wróćo',
+'revertpage-nouser' => 'Změny su so wot schowaneho wužiwarja anulowali a předchadna wersija wužiwarja {{GENDER:$1|[[User:$1|$1]]}} je so wobnowiła',
 'rollback-success' => 'Změny wužiwarja $1 cofnjene; wróćo na wersiju wužiwarja $2.',
 
 # Edit tokens
@@ -2896,6 +2922,7 @@ $2',
 'tooltip-undo' => 'anuluje tutu změnu a wočinja wobdźěłowanski formular w přehladowym modusu. Zmóžnja přičinu w zjeću přidać.',
 'tooltip-preferences-save' => 'Nastajenja składować',
 'tooltip-summary' => 'Zapodaj krótke zjeće',
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/* CSS w tutej dataji budźe so na wšěch stronow wuskutkować. */',
@@ -3545,7 +3572,7 @@ Tute wobkrućenski kod spadnje $4.',
 'confirmemail_body_set' => 'Něchtó, najskerje ty, wot IP-adresy $1,
 je e-mejlowu adresu konta "$2" na {{GRAMMAR:lokatiw|{{SITENAME}}}} na tutu adresu stajił.
 
-Zo by wobkrućił, zo tute konto ći woprawdźe słuša a zo bychu so e-mejlowe funkcije na {{GRAMMAR:lokatiw|{{SITENAME}}}} znowa aktiwizowali, wočiń tutón wotkaz w swojim wobhladowaku:
+Zo by wobkrućił, zo tute konto ći woprawdźe słuša a zo bychu so e-mejlowe funkcije na {{GRAMMAR:lokatiw|{{SITENAME}}}} aktiwizowali, wočiń tutón wotkaz w swojim wobhladowaku:
 
 $3
 
@@ -3753,7 +3780,7 @@ Ty měł [{{SERVER}}{{SCRIPTPATH}}/COPYING kopiju licency GNU General Public Lic
 'tags' => 'Płaćiwe taflički změnow',
 'tag-filter' => 'Filter [[Special:Tags|tafličkow]]:',
 'tag-filter-submit' => 'Filter',
-'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Značka|Značce|Znački}]]: $2)',
+'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Značka|Značce|Znački}}]]: $2)',
 'tags-title' => 'Taflički',
 'tags-intro' => 'Tuta strona nalistuje taflički, z kotrymiž softwara móže změnu markěrować a jich woznam.',
 'tags-tag' => 'Mjeno taflički',
@@ -3920,6 +3947,7 @@ Hewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so s
 'rotate-comment' => 'Wobraz wo $1 {{PLURAL:$1|stopjeń|stopnjej|stopnje|stopnjow}} w směrje časnika wjerćany',
 
 # Limit report
+'limitreport-title' => 'Profilowanske daty parsera:',
 'limitreport-cputime' => 'Časowe wužiwanje CPU',
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|sekunda|sekundźe|sekundy|sekundow}}',
 'limitreport-walltime' => 'Wužiwanje woprawdźiteho časa',
@@ -3931,5 +3959,19 @@ Hewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so s
 'limitreport-templateargumentsize' => 'Wulkosć předłohoweho argumenta',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bajt|bajtaj|bajty|bajtow}}',
 'limitreport-expansiondepth' => 'Najwyša ekspansijowa hłubokosć',
+'limitreport-expensivefunctioncount' => 'Ličba naročnych parserowych funkcijow',
+
+# Special:ExpandTemplates
+'expandtemplates' => 'Předłohi ekspandować',
+'expand_templates_intro' => 'Na tutej specialnej stronje móžeš tekst zapodać a wšitke do njeje zapřijate předłohi so rekursiwnje ekspanduja. Tež funkcije parsera kaž <code><nowiki>{{</nowiki>#language:...}}</code> a wariable kaž <code><nowiki>{{</nowiki>CURRENTDAY}}</code> so wuhódnočeja – faktisce wšo, štož steji mjezy dwójnymaj wopušatymaj spinkomaj.',
+'expand_templates_title' => 'Kontekstowy titul, za {{FULLPAGENAME}} atd.:',
+'expand_templates_input' => 'Tekst zapodać:',
+'expand_templates_output' => 'Wuslědk',
+'expand_templates_xml_output' => 'Wudaće XML',
+'expand_templates_ok' => 'W porjadku',
+'expand_templates_remove_comments' => 'Komentary wotstronić',
+'expand_templates_remove_nowiki' => 'Taflički <nowiki> we wuslědku potłóčić',
+'expand_templates_generate_xml' => 'Analyzowy štom XML pokazać',
+'expand_templates_preview' => 'Přehlad',
 
 );
index 0360773..2328f58 100644 (file)
@@ -48,7 +48,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'MovèTit' ),
        'Blankpage'                 => array( 'PajVid' ),
        'Block'                     => array( 'Bloke', 'BlokeIP', 'BlokeItilizatè' ),
-       'Blockme'                   => array( 'BlokeM' ),
        'Booksources'               => array( 'SousLiv' ),
        'BrokenRedirects'           => array( 'RedireksyonKase' ),
        'Categories'                => array( 'Kategori' ),
@@ -59,9 +58,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'KreyeKont' ),
        'Deadendpages'              => array( 'PajEnpas' ),
        'DeletedContributions'      => array( 'SiprimeKontribisyon' ),
-       'Disambiguations'           => array( 'Tokay' ),
        'DoubleRedirects'           => array( 'RedireksyonDoub' ),
        'Emailuser'                 => array( 'ImèlItilizatè' ),
+       'ExpandTemplates'           => array( 'EtannModèl' ),
        'Export'                    => array( 'Ekspòte' ),
        'Fewestrevisions'           => array( 'MwensRevizyon' ),
        'FileDuplicateSearch'       => array( 'ChacheFichyeDoub' ),
@@ -103,6 +102,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'PajPwoteje' ),
        'Protectedtitles'           => array( 'TitPwoteje' ),
        'Randompage'                => array( 'Oaza', 'PajOaza' ),
+       'RandomInCategory'          => array( 'OazaNanKategori' ),
        'Randomredirect'            => array( 'RedireksyonOaza' ),
        'Recentchanges'             => array( 'ChanjmanResan' ),
        'Recentchangeslinked'       => array( 'LyenChanjmanResan', 'ChanjmanAk' ),
@@ -396,8 +396,6 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Rekipere depi « $1 »',
 'youhavenewmessages' => 'Ou genyen $1 ($2).',
-'newmessageslink' => 'nouvo mesaj',
-'newmessagesdifflink' => 'dènye chanjman',
 'youhavenewmessagesmulti' => 'Ou genyen nouvo mesaj sou $1.',
 'editsection' => 'modifye',
 'editold' => 'modifye',
index eeff46e..1550e04 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Hibás_címek' ),
        'Blankpage'                 => array( 'Üres_lap' ),
        'Block'                     => array( 'Blokkolás' ),
-       'Blockme'                   => array( 'Blokkolj' ),
        'Booksources'               => array( 'Könyvforrások' ),
        'BrokenRedirects'           => array( 'Nem_létező_lapra_mutató_átirányítások', 'Hibás_átirányítások' ),
        'Categories'                => array( 'Kategóriák' ),
@@ -92,10 +91,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Szerkesztői_fiók_létrehozása', 'Felhasználói_fiók_létrehozása' ),
        'Deadendpages'              => array( 'Zsákutcalapok' ),
        'DeletedContributions'      => array( 'Törölt_szerkesztések' ),
-       'Disambiguations'           => array( 'Egyértelműsítő_lapok' ),
        'DoubleRedirects'           => array( 'Kettős_átirányítások', 'Dupla_átirányítások' ),
        'EditWatchlist'             => array( 'Figyelőlista_szerkesztése' ),
        'Emailuser'                 => array( 'E-mail_küldése', 'E-mail_küldése_ezen_szerkesztőnek' ),
+       'ExpandTemplates'           => array( 'Sablonok_kibontása' ),
        'Export'                    => array( 'Lapok_exportálása' ),
        'Fewestrevisions'           => array( 'Legkevesebbet_szerkesztett_lapok' ),
        'FileDuplicateSearch'       => array( 'Duplikátumok_keresése' ),
@@ -588,8 +587,6 @@ További információkat a [[Special:Version|verzióinformációs lapon]] talál
 'ok' => 'OK',
 'retrievedfrom' => 'A lap eredeti címe: „$1”',
 'youhavenewmessages' => '$1 a vitalapodon! ($2 külön is megtekintheted.)',
-'newmessageslink' => 'új üzenet vár',
-'newmessagesdifflink' => 'az utolsó üzenetet',
 'youhavenewmessagesfromusers' => '$2 kaptál {{PLURAL:$3|egy|$3}} szerkesztőtől $1!',
 'youhavenewmessagesmanyusers' => '$2 kaptál több szerkesztőtől $1.',
 'newmessageslinkplural' => '{{PLURAL:$1||}}a vitalapodon',
@@ -1405,7 +1402,6 @@ Ezt általában egy elavult, törölt oldalra mutató laptörténeti hivatkozás
 'preferences' => 'Beállítások',
 'mypreferences' => 'Beállítások',
 'prefs-edits' => 'Szerkesztéseid száma:',
-'prefsnologin' => 'Nem jelentkeztél be',
 'changepassword' => 'Jelszócsere',
 'prefs-skin' => 'Felület',
 'skin-preview' => 'előnézet',
@@ -1686,6 +1682,7 @@ A műveletet nem lehet visszavonni.',
 'recentchanges-label-minor' => 'Ez egy apró szerkesztés',
 'recentchanges-label-bot' => 'Ezt a szerkesztést egy bot hajtotta végre',
 'recentchanges-label-unpatrolled' => 'Ezt a szerkesztést még nem ellenőrizték',
+'recentchanges-legend-newpage' => '$1 – új lap',
 'rcnote' => "Alább az utolsó '''{{PLURAL:$2|egy|$2}}''' nap utolsó '''{{PLURAL:$1|egy|$1}}''' változtatása látható. A lap generálásának időpontja $4, $5.",
 'rcnotefrom' => 'Alább a <b>$2</b> óta történt változtatások láthatóak (<b>$1</b> db).',
 'rclistfrom' => '$1 után történt változtatások megtekintése',
@@ -4068,4 +4065,18 @@ A MediaWikit abban a reményben terjesztjük, hogy hasznos lesz, de GARANCIA NÉ
 # Image rotation
 'rotate-comment' => 'Elforgattam a képet $1 fokkal, az óramutató járásával megegyező irányban',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Sablonok kibontása',
+'expand_templates_intro' => 'Ez a speciális lap a bevitt szövegekben megkeresi a sablonokat és rekurzívan kibontja őket.
+Kibontja az elemző függvényeket (pl. <nowiki>{{</nowiki>#language:...}}), és a változókat (pl. <nowiki>{{</nowiki>CURRENTDAY}}) is – mindent, ami a kettős kapcsos zárójelek között van.',
+'expand_templates_title' => 'Szöveg címe, például {{FULLPAGENAME}} sablonhoz:',
+'expand_templates_input' => 'Vizsgálandó szöveg',
+'expand_templates_output' => 'Eredmény',
+'expand_templates_xml_output' => 'XML kimenet',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Megjegyzések eltávolítása',
+'expand_templates_remove_nowiki' => '<nowiki> tagek mellőzése az eredményben',
+'expand_templates_generate_xml' => 'XML elemzési fa mutatása',
+'expand_templates_preview' => 'Előnézet',
+
 );
index cd294b5..47f7404 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Ahmed-Najib-Biabani-Ibrahimkhel
  * @author Chaojoker
+ * @author M hamlet
  * @author Nemo bis
  * @author Pandukht
  * @author Reedy
@@ -205,14 +206,12 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'Բոլորէջերը' ),
        'Ancientpages'              => array( 'Ամենահինէջերը' ),
        'Block'                     => array( 'Արգելափակել այփին' ),
-       'Blockme'                   => array( 'Արգելափակել' ),
        'Booksources'               => array( 'Գրքայինաղբյուրները' ),
        'BrokenRedirects'           => array( 'Կոտրվածվերահղումները' ),
        'Categories'                => array( 'Կատեգորիաները' ),
        'ChangePassword'            => array( 'Նորգաղտնաբառ' ),
        'Contributions'             => array( 'Ներդրումները' ),
        'Deadendpages'              => array( 'Հղումչպարունակողէջերը' ),
-       'Disambiguations'           => array( 'Երկիմաստէջերը' ),
        'DoubleRedirects'           => array( 'Կրկնակիվերահղումները' ),
        'Emailuser'                 => array( 'Գրելնամակ' ),
        'Export'                    => array( 'Արտահանելէջերը' ),
@@ -284,16 +283,16 @@ $messages = array(
 'tog-extendwatchlist' => 'Ընդարձակել հսկացանկը՝ ցույց տալով բոլոր փոփոխությունները, այլ ոչ միայն վերջինները',
 'tog-usenewrc' => 'Խմբավորել փոփոխությունները Վերջին փոփոխություններում և հսկացանկում (պահանջում է JavaScript)',
 'tog-numberheadings' => 'Ինքնաթվագրել վերնագրերը',
-'tog-showtoolbar' => 'Ցույց տալ խմբագրումների գործիքների վահանակը (JavaScript)',
-'tog-editondblclick' => 'Խմբագրել էջերը կրկնակի մատնահարմամբ (JavaScript)',
+'tog-showtoolbar' => 'Ցույց տալ խմբագրումների գործիքների վահանակը',
+'tog-editondblclick' => 'Խմբագրել էջերը կրկնակի մատնահարմամբ',
 'tog-editsection' => 'Ցույց տալ [խմբագրել] հղումը ամեն բաժնի համար',
-'tog-editsectiononrightclick' => 'Խմբագրել բաժինները վերնագրի աջ մատնահարմամբ (JavaScript)',
+'tog-editsectiononrightclick' => 'Խմբագրել բաժինները վերնագրի աջ մատնահարմամբ',
 'tog-showtoc' => 'Ցույց տալ բովանդակությունը (3  կամ ավել վերնագրեր ունեցող էջերի համար)',
 'tog-rememberpassword' => 'Հիշել իմ մուտքագրված տվյալներն այս համակարգչում ($1 {{PLURAL:$1|օրից}} ոչ ավել ժամկետով)',
 'tog-watchcreations' => 'Ավելացնել իմ ստեղծած էջերը և բեռնած նիշքերը հսկացանկին',
 'tog-watchdefault' => 'Ավելացնել իմ խմբագրած էջերը և նիշքերը հսկացանկին',
 'tog-watchmoves' => 'Ավելացնել իմ վերնավանած էջերը և նիշքերը հսկացանկին',
-'tog-watchdeletion' => 'Ավելացնել իմ ջնջած էջերը հսկացանկին',
+'tog-watchdeletion' => 'Ավելացնել իմ ջնջած էջերը և նիշքերը իմ հսկացանկին',
 'tog-minordefault' => 'Նշել խմբագրումները որպես չնչին ըստ լռության',
 'tog-previewontop' => 'Ցույց տալ նախադիտումը խմբագրման դաշտից առաջ',
 'tog-previewonfirst' => 'Նախադիտել մինչև առաջին խմբագրությունը',
@@ -418,6 +417,7 @@ $messages = array(
 'newwindow' => '(բացվելու է նոր պատուհանի մեջ)',
 'cancel' => 'Բեկանել',
 'moredotdotdot' => 'Ավելին...',
+'morenotlisted' => 'Այս ցանկը լիարժեք չէ։',
 'mypage' => 'Իմ էջը',
 'mytalk' => 'Քննարկում',
 'anontalk' => 'Քննարկում այս IP-հասցեի համար',
@@ -473,6 +473,7 @@ $messages = array(
 'create-this-page' => 'Ստեղծել այս էջը',
 'delete' => 'Ջնջել',
 'deletethispage' => 'Ջնջել այս էջը',
+'undeletethispage' => 'Վերականգնել այս էջը',
 'undelete_short' => 'Վերականգնել {{PLURAL:$1|մեկ խմբագրում|$1 խմբագրում}}',
 'viewdeleted_short' => 'Դիտել {{PLURAL:$1|ջնջված խմբագրում}}',
 'protect' => 'Պաշտպանել',
@@ -544,14 +545,13 @@ $1',
 'pagetitle' => '$1 — {{SITENAME}}',
 'retrievedfrom' => 'Ստացված է «$1» էջից',
 'youhavenewmessages' => 'Դուք ունեք $1 ($2)։',
-'newmessageslink' => 'Նոր հաղորդագրություն',
-'newmessagesdifflink' => 'վերջին փոփոխությունը',
-'newmessageslinkplural' => '{{PLURAL:$1|նոր հաղորդագրություն|նոր հաղորդագրություններ}}',
-'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|փոփոխում|փոփոխումներ}}',
+'youhavenewmessagesmanyusers' => 'Դուք ունեք $1 մի քանի օգտագործողից ($2)։',
+'newmessageslinkplural' => '{{PLURAL:$1|նոր հաղորդագրություն|999=նոր հաղորդագրություններ}}',
+'newmessagesdifflinkplural' => 'վերջին {{PLURAL:$1|փոփոխում|999=փոփոխումներ}}',
 'youhavenewmessagesmulti' => 'Դուք նոր ուղերձներ եք ստացել $1 վրա',
 'editsection' => 'խմբագրել',
 'editold' => 'խմբագրել',
-'viewsourceold' => 'Õ¤Õ«Õ¿Õ¥Õ¬ Õ¾Õ«Ö\84Õ«Õ¯Õ¸Õ¤Õ¥Ö\80Õ¨',
+'viewsourceold' => 'դիտել վիքիկոդը',
 'editlink' => 'խմբագրել',
 'viewsourcelink' => 'դիտել ելատեքստը',
 'editsectionhint' => 'Խմբագրել բաժինը. $1',
@@ -600,6 +600,12 @@ $1',
 # General errors
 'error' => 'Սխալ',
 'databaseerror' => 'Տվյալների բազայի սխալ',
+'databaseerror-text' => 'Տվյալների բազայի հարցման սխալ է առաջացել։
+Սա կարող է ծրագրային բագի պատճառով լինել։',
+'databaseerror-textcl' => 'Տվյալների բազայի հարցման սխալ է առաջացել։',
+'databaseerror-query' => 'Հարցում՝ $1',
+'databaseerror-function' => 'Ֆունկցիա՝ $1',
+'databaseerror-error' => 'Սխալ՝ $1',
 'laggedslavemode' => 'Զգուշացում. էջը կարող է չպարունակել վերջին փոփոխությունները։',
 'readonly' => 'Տվյալների բազան կողպված է',
 'enterlockreason' => 'Նշեք կողպման պատճառը և մոտավոր ժամկետը',
@@ -639,7 +645,7 @@ $1',
 'wrong_wfQuery_params' => 'Անթույլատրելի պարամետրեր wfQuery() ֆունկցիայի համար<br />
 Ֆունկցիա՝ $1<br />
 Հայցում՝ $2',
-'viewsource' => 'Ô´Õ«Õ¿Õ¥Õ¬ Õ¾Õ«Ö\84Õ«Õ¯Õ¸Õ¤Õ¥Ö\80Õ¨',
+'viewsource' => 'Դիտել վիքիկոդը',
 'viewsource-title' => 'Դիտել $1 էջի աղբյուրը',
 'actionthrottled' => 'Գործողությունը արգելափակվեց',
 'actionthrottledtext' => 'Որպես հակա-սպամային միջոց, այս գործողության չափից շատ կատարումը կարճ ժամանակահատվածի ընթացքում սահմանափակված է։ Խնդրում ենք փորձել կրկին մի քանի րոպե անց։',
@@ -656,11 +662,14 @@ $2',
 'namespaceprotected' => 'Դուք չունեք «$1» անվանատարածքի էջերի խմբագրման իրավունք։',
 'customcssprotected' => 'Դուք չեք կարող խմբագրել այս CSS էջը, քանի որ այն պարունակում է այլ մասնակցի անձնական նախընտրանքներ։',
 'customjsprotected' => 'Դուք չեք կարող խմբագրել այս ՋավաՍկրիպտ էջը, քանի որ այն պարունակում է այլ մասնակցի անձնական նախընտրանքներ։',
+'mycustomcssprotected' => 'Դուք բավարար իրավունքներ չունեք այս CSS էջը խմբագրելու համար։',
+'mycustomjsprotected' => 'Դուք բավարար իրավունքներ չունեք այս JavaScript էջը խմբագրելու համար։',
+'mypreferencesprotected' => 'Դուք բավարար իրավունքներ չունեք Ձեր նախընտրությունները խմբագրելու համար։',
 'ns-specialprotected' => '«{{ns:special}}» անվանատարածքի էջերը չեն կարող խմբագրվել։',
 'titleprotected' => "Այս անվանմամբ էջի ստեղծումը արգելվել է [[User:$1|$1]] մասնակցի կողմից։
 Տրված պատճառն է՝ ''$2''։",
 'exception-nologin' => 'Չեք մտել համակարգ',
-'exception-nologin-text' => 'Ô±ÕµÕ½ Õ§Õ»Õ¨ Õ¤Õ«Õ¿Õ¥Õ¬Õ¸Ö\82 Õ¯Õ¡Õ´ Õ£Õ¸Ö\80Õ®Õ¸Õ²Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶ Õ¯Õ¡Õ¿Õ¡Ö\80Õ¥Õ¬Õ¸Ö\82 Õ°Õ¡Õ´Õ¡Ö\80 Õ¤Õ¸Ö\82Ö\84 ÕºÕ¥Õ¿Ö\84 Õ§ Õ´Õ¸Ö\82Õ¿Ö\84 Õ£Õ¸Ö\80Õ®Õ¥Ö\84 Õ¡ÕµÕ½ Õ¾Õ«Ö\84Õ«։',
+'exception-nologin-text' => 'Ô½Õ¶Õ¤Ö\80Õ¸Ö\82Õ´ Õ¥Õ¶Ö\84, [[Special:Userlogin|Õ´Õ¸Ö\82Õ¿Ö\84 Õ£Õ¸Ö\80Õ®Õ¥Ö\84]]Õ\9d Õ¡ÕµÕ½ Õ§Õ»Õ¨ Õ¤Õ«Õ¿Õ¥Õ¬Õ¸Ö\82 Õ¯Õ¡Õ´ Õ£Õ¸Ö\80Õ®Õ¸Õ²Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶Õ¨ Õ¯Õ¡Õ¿Õ¡Ö\80Õ¥Õ¬Õ¸Ö\82 Õ°Õ¡Õ´Õ¡Ö\80։',
 
 # Virus scanner
 'virus-badscanner' => "Սխալ կարգավորւմ։ Անծանոթ վիրուսների զննիչ. ''$1''",
@@ -677,6 +686,7 @@ $2',
 'yourname' => 'Մասնակցի անուն՝',
 'userlogin-yourname' => 'Մասնակցային անուն',
 'userlogin-yourname-ph' => 'Մուտքագրեք ձեր մասնակցային անունը',
+'createacct-another-username-ph' => 'Մուտքագրեք մասնակցի անունը',
 'yourpassword' => 'Գաղտնաբառ՝',
 'userlogin-yourpassword' => 'Գաղտնաբառ',
 'userlogin-yourpassword-ph' => 'Մուտքագրեք ձեր գաղտնաբառը',
@@ -706,11 +716,13 @@ $2',
 'gotaccount' => "Դուք արդեն գրանցվա՞ծ եք։ '''$1'''։",
 'gotaccountlink' => 'Մուտք գործեք համակարգ',
 'userlogin-resetlink' => 'Մոռացե՞լ եք Ձեր հաշվի տվյալները։',
-'userlogin-resetpassword-link' => 'Զրոյացնել ձեր գաղտնաբառը։',
+'userlogin-resetpassword-link' => 'Մոռացե՞լ եք գաղտնաբառը',
+'userlogin-createanother' => 'Ստեղծել այլ հաշիվ',
 'createacct-join' => 'Մուտքագրեք Ձեր տեղեկությունները ստորև',
 'createacct-emailrequired' => 'Էլ–փոստի հասցե',
 'createacct-emailoptional' => 'Էլ–փոստի հասցե (ոչ պարտադիր)',
 'createacct-email-ph' => 'Մուտքագրեք ձեր էլ–փոստի հասցեն',
+'createacct-another-email-ph' => 'Մուտքագրեք էլ․ փոստի հասցեն',
 'createaccountmail' => 'Օգտագործել ժամանակավոր պատահական գաղտնաբառ, որը կուղարկվի ձեր էլ–փոստի հասցեին։',
 'createacct-realname' => 'Իրական անուն (պարտադիր չէ)',
 'createaccountreason' => 'Պատճառը՝',
@@ -1217,11 +1229,12 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'preferences' => 'Նախընտրություններ',
 'mypreferences' => 'Նախընտրություններ',
 'prefs-edits' => 'Խմբագրումների քանակը.',
-'prefsnologin' => 'Դուք չեք մտել համակարգ',
+'prefsnologintext2' => 'Նախընտրությունները փոփոխելու համար անհրաժեշտ է $1։',
 'changepassword' => 'Փոխել գաղտնաբառը',
 'prefs-skin' => 'Տեսք',
 'skin-preview' => 'նախադիտել',
 'datedefault' => 'Առանց նախընտրության',
+'prefs-beta' => 'Փորձնական հնարավորություններ',
 'prefs-datetime' => 'Օր ու ժամ',
 'prefs-personal' => 'Անձնական',
 'prefs-rc' => 'Վերջին փոփոխություններ',
@@ -1402,6 +1415,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'recentchanges-label-minor' => 'Սա չնչին խմբագրում է',
 'recentchanges-label-bot' => 'Այս խմբագրումը կատարվել է բոտի կողմից',
 'recentchanges-label-unpatrolled' => 'Այս խմբագրումը դեռ չի պարեկվել',
+'recentchanges-legend-newpage' => '$1 - նոր էջ',
 'rcnote' => 'Ստորև բերված են վերջին <strong>$1</strong> փոփոխությունները վերջին <strong>$2</strong> {{PLURAL:$2|օրվա|օրվա}} ընթացքում՝ $5, $4-ի դրությամբ։',
 'rcnotefrom' => "Ստորև բերված են փոփոխությունները սկսած՝ '''$2''' (մինչև՝ '''$1''')։",
 'rclistfrom' => 'Ցույց տալ նոր փոփոխությունները սկսած $1',
@@ -2691,6 +2705,7 @@ $3
 
 # Special:Version
 'version' => 'ՄեդիաՎիքի տարբերակը',
+'version-poweredby-credits' => "Այս վիքին աշխատում է '''[https://www.mediawiki.org/ MediaWiki]'''֊ով, copyright © 2001-$1 $2։",
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'Փնտրել կրկնօրինակ պատկերներ',
@@ -2706,7 +2721,7 @@ $3
 # Special:SpecialPages
 'specialpages' => 'Սպասարկող էջեր',
 'specialpages-note' => '* Հասարակ հատուկ էջեր։
-* <strong class="mw-specialpagerestricted">Սահմանափակված հատուկ էջեր։</strong>',
+* <span class="mw-specialpagerestricted">Սահմանափակված հատուկ էջեր։</span>',
 'specialpages-group-maintenance' => 'Տեխնիկական սպասարկման տեղեկատուներ',
 'specialpages-group-other' => 'Այլ հատուկ էջեր',
 'specialpages-group-login' => 'Մտնել / Գրանցվել',
@@ -2791,4 +2806,7 @@ $3
 'duration-centuries' => '$1 {{PLURAL:$1|դար}}',
 'duration-millennia' => '$1 {{PLURAL:$1|հազարամյակ}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Կաղապարների ընդարձակում',
+
 );
index ca29db1..4549604 100644 (file)
@@ -53,7 +53,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Titulo_invalide' ),
        'Blankpage'                 => array( 'Pagina_vacue' ),
        'Block'                     => array( 'Blocar', 'Blocar_IP', 'Blocar_usator' ),
-       'Blockme'                   => array( 'Blocar_me' ),
        'Booksources'               => array( 'Fontes_de_libros' ),
        'BrokenRedirects'           => array( 'Redirectiones_rupte' ),
        'Categories'                => array( 'Categorias' ),
@@ -65,10 +64,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Crear_conto' ),
        'Deadendpages'              => array( 'Paginas_sin_exito' ),
        'DeletedContributions'      => array( 'Contributiones_delite' ),
-       'Disambiguations'           => array( 'Disambiguationes' ),
        'DoubleRedirects'           => array( 'Redirectiones_duple' ),
        'EditWatchlist'             => array( 'Modificar_observatorio' ),
        'Emailuser'                 => array( 'Inviar_e-mail_a_un_usator' ),
+       'ExpandTemplates'           => array( 'Expander_patronos' ),
        'Export'                    => array( 'Exportar' ),
        'Fewestrevisions'           => array( 'Le_minus_versiones' ),
        'FileDuplicateSearch'       => array( 'Recerca_de_files_duplice' ),
@@ -110,6 +109,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Paginas_protegite' ),
        'Protectedtitles'           => array( 'Titulos_protegite' ),
        'Randompage'                => array( 'Aleatori', 'Pagina_aleatori' ),
+       'RandomInCategory'          => array( 'Aleatori_in_categoria' ),
        'Randomredirect'            => array( 'Redirection_aleatori' ),
        'Recentchanges'             => array( 'Modificationes_recente' ),
        'Recentchangeslinked'       => array( 'Modificationes_recente_ligate', 'Modificationes_connexe' ),
@@ -419,12 +419,10 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Obtenite de "$1"',
 'youhavenewmessages' => 'Tu ha $1 ($2).',
-'newmessageslink' => 'nove messages',
-'newmessagesdifflink' => 'ultime modification',
 'youhavenewmessagesfromusers' => 'Tu ha $1 de {{PLURAL:$3|un altere usator|$3 usatores}} ($2).',
 'youhavenewmessagesmanyusers' => 'Tu ha $1 de multe usatores ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|un nove message|$1 nove messages}}',
-'newmessagesdifflinkplural' => 'ultime {{PLURAL:$1|modification|modificationes}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un nove message|999=nove messages}}',
+'newmessagesdifflinkplural' => 'ultime {{PLURAL:$1|modification|999=modificationes}}',
 'youhavenewmessagesmulti' => 'Tu ha nove messages in $1',
 'editsection' => 'modificar',
 'editold' => 'modificar',
@@ -556,7 +554,8 @@ Le administrator qui lo blocava offereva iste explication: "$3".',
 'invalidtitle-knownnamespace' => 'Titulo invalide con spatio de nomines "$2" e texto "$3"',
 'invalidtitle-unknownnamespace' => 'Titulo invalide con spatio de nomines incognite $1 e texto "$2"',
 'exception-nologin' => 'Non identificate',
-'exception-nologin-text' => 'Iste pagina o action necessita que tu aperi session in iste wiki.',
+'exception-nologin-text' => '[[Special:Userlogin|Aperi session]] pro poter acceder a iste pagina o action.',
+'exception-nologin-text-manual' => 'Es necessari $1 pro poter acceder a iste pagina o action.',
 
 # Virus scanner
 'virus-badscanner' => "Configuration incorrecte: programma antivirus non cognoscite: ''$1''",
@@ -875,7 +874,7 @@ Per favor entra e valida tu adresse de e-mail per medio de tu [[Special:Preferen
 'nosuchsectiontext' => 'Tu ha tentate modificar un section que non existe.
 Illo pote haber essite displaciate o delite durante que tu legeva le pagina.',
 'loginreqtitle' => 'Identification necessari',
-'loginreqlink' => 'aperir un session',
+'loginreqlink' => 'aperir session',
 'loginreqpagetext' => 'Tu debe $1 pro poter vider altere paginas.',
 'accmailtitle' => 'Contrasigno inviate.',
 'accmailtext' => "Un contrasigno generate aleatorimente pro [[User talk:$1|$1]] ha essite inviate a $2. Illo pote esser cambiate in le pagina ''[[Special:ChangePassword|Cambiar contrasigno]]'' post que tu ha aperite un session.",
@@ -1308,7 +1307,7 @@ Nota que lor indices del contento de {{SITENAME}} pote esser obsolete.',
 'preferences' => 'Preferentias',
 'mypreferences' => 'Preferentias',
 'prefs-edits' => 'Numero de modificationes:',
-'prefsnologin' => 'Tu non ha aperite un session',
+'prefsnologintext2' => 'Es necessari $1 pro definir le preferentias de usator.',
 'changepassword' => 'Cambiar contrasigno',
 'prefs-skin' => 'Apparentia',
 'skin-preview' => 'Previsualisation',
@@ -1608,6 +1607,8 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut
 'recentchanges-label-minor' => 'Isto es un modification minor',
 'recentchanges-label-bot' => 'Iste modification ha essite effectuate per un robot',
 'recentchanges-label-unpatrolled' => 'Iste modification non ha ancora essite patruliate',
+'recentchanges-label-plusminus' => 'Le dimension del pagina ha cambiate de iste numero de bytes',
+'recentchanges-legend-newpage' => '(vide etiam le [[Special:NewPages|lista de nove paginas]])',
 'rcnote' => "Infra es {{PLURAL:$1|'''1''' modification|le ultime '''$1''' modificationes}} in le ultime {{PLURAL:$2|die|'''$2''' dies}}, actualisate le $4 a $5.",
 'rcnotefrom' => 'infra es le modificationes a partir de <b>$2</b> (usque a <b>$1</b>).',
 'rclistfrom' => 'Monstrar nove modificationes a partir de $1',
@@ -2350,7 +2351,7 @@ Pro contactar le redactor:
 mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Tu non recipera altere notificationes de activitate si tu non visita iste pagina. Tu pote anque reinitialisar le optiones de notification pro tote le paginas in tu observatorio.
+Tu non recipera altere notificationes de activitate si tu non visita iste pagina con session aperte. Tu pote anque reinitialisar le optiones de notification pro tote le paginas in tu observatorio.
 
 Le systema de notification de {{SITENAME}}, a tu servicio
 
@@ -3895,9 +3896,9 @@ Vos deberea haber recipite [{{SERVER}}{{SCRIPTPATH}}/COPYING un exemplar del Lic
 
 # Special:SpecialPages
 'specialpages' => 'Paginas special',
+'specialpages-note-top' => 'Legenda',
 'specialpages-note' => '* Paginas special normal.
-* <span class="mw-specialpagerestricted">Paginas special restringite.</span>
-* <span class="mw-specialpagecached">Paginas special del cache (poterea esser obsolete).</span>',
+* <span class="mw-specialpagerestricted">Paginas special restringite.</span>',
 'specialpages-group-maintenance' => 'Reportos de mantenentia',
 'specialpages-group-other' => 'Altere paginas special',
 'specialpages-group-login' => 'Aperir session / crear conto',
@@ -4110,4 +4111,21 @@ Si non, tu pote usar le formulario facile hic infra. Tu commento essera addite a
 'limitreport-expansiondepth' => 'Maxime profunditate de expansion',
 'limitreport-expensivefunctioncount' => 'Numero de functiones analysator costose',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Expander patronos',
+'expand_templates_intro' => 'Iste pagina special prende texto e expande recursivemente tote le patronos in illo.
+Illo expande etiam le functiones del analysator syntactic como
+<code><nowiki>{{</nowiki>#language:…}}</code>, e variabiles como
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+De facto, illo expande quasi toto inter accolladas duple.',
+'expand_templates_title' => 'Titulo de contexto, pro {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Texto de entrata:',
+'expand_templates_output' => 'Resultato',
+'expand_templates_xml_output' => 'Output XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Eliminar commentos',
+'expand_templates_remove_nowiki' => 'Supprimer le etiquettas <nowiki> in le resultato',
+'expand_templates_generate_xml' => 'Monstrar arbore syntactic XML',
+'expand_templates_preview' => 'Previsualisation',
+
 );
index 063d09e..d2afb2a 100644 (file)
@@ -135,7 +135,7 @@ $magicWords = array(
        'subjectpagename'           => array( '1', 'NAMAHALAMANUTAMA', 'NAMAHALAMANARTIKEL', 'NAMMANTAMA', 'NAMMANTIKEL', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
        'subjectpagenamee'          => array( '1', 'NAMAHALAMANUTAMAE', 'NAMAHALAMANARTIKELE', 'NAMMANTAMAE', 'NAMMANTIKELE', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
        'msg'                       => array( '0', 'PSN:', 'PESAN:', 'MSG:' ),
-       'subst'                     => array( '0', 'GNT:', 'GANTI:', 'SUBST:' ),
+       'subst'                     => array( '0', 'GNT:', 'GANTI:', 'TUKAR:', 'SUBST:' ),
        'msgnw'                     => array( '0', 'TPL:', 'MSGNW:' ),
        'img_thumbnail'             => array( '1', 'jmpl', 'jempol', 'mini', 'miniatur', 'thumbnail', 'thumb' ),
        'img_manualthumb'           => array( '1', 'jmpl=$1', 'jempol=$1', 'mini=$1', 'miniatur=$1', 'thumbnail=$1', 'thumb=$1' ),
@@ -145,8 +145,9 @@ $magicWords = array(
        'img_center'                => array( '1', 'pus', 'pusat', 'center', 'centre' ),
        'img_framed'                => array( '1', 'bing', 'bingkai', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'nirbing', 'tanpabingkai', 'frameless' ),
-       'img_page'                  => array( '1', 'hal=$1', 'halaman=$1', 'hal $1', 'halaman $1', 'page=$1', 'page $1' ),
-       'img_upright'               => array( '1', 'lurus', 'lurus=$1', 'lurus $1', 'tegak', 'tegak=$1', 'tegak $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_lang'                  => array( '1', 'bhs=$1', 'lang=$1' ),
+       'img_page'                  => array( '1', 'hal=$1', 'halaman=$1', 'hal_$1', 'halaman_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'lurus', 'lurus=$1', 'lurus_$1', 'tegak', 'tegak=$1', 'tegak_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'tepi', 'batas', 'border' ),
        'img_baseline'              => array( '1', 'gada', 'garis_dasar', 'baseline' ),
        'img_sub'                   => array( '1', 'upa', 'sub' ),
@@ -164,8 +165,8 @@ $magicWords = array(
        'server'                    => array( '0', 'PELADEN', 'SERVER' ),
        'servername'                => array( '0', 'NAMAPELADEN', 'NAMASERVER', 'NAMPEL', 'SERVERNAME' ),
        'scriptpath'                => array( '0', 'LOKASISKRIP', 'SCRIPTPATH' ),
-       'grammar'                   => array( '0', 'TATABAHASA', 'TASA', 'GRAMMAR:' ),
-       'gender'                    => array( '0', 'JANTINA', 'GENDER:' ),
+       'grammar'                   => array( '0', 'TATABAHASA:', 'TASA:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'JANTINA:', 'GENDER:' ),
        'notitleconvert'            => array( '0', '__TANPAKONVERSIJUDUL__', '__NIRKODUL__', '__NOTITLECONVERT__', '__NOTC__' ),
        'nocontentconvert'          => array( '0', '__TANPAKONVERSIISI__', '__NIRKOSI__', '__NOCONTENTCONVERT__', '__NOCC__' ),
        'currentweek'               => array( '1', 'MINGGUKINI', 'MIKIN', 'CURRENTWEEK' ),
@@ -218,6 +219,9 @@ $magicWords = array(
        'staticredirect'            => array( '1', '__PENGALIHANSTATIK__', '__PENGALIHANSTATIS__', '__PETIK__', '__PETIS__', '__STATICREDIRECT__' ),
        'protectionlevel'           => array( '1', 'TINGKATPERLINDUNGAN', 'TIPER', 'PROTECTIONLEVEL' ),
        'formatdate'                => array( '0', 'formattanggal', 'formatdate', 'dateformat' ),
+       'pagesincategory_all'       => array( '0', 'semua', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'halaman', 'pages' ),
+       'pagesincategory_files'     => array( '0', 'berkas', 'files' ),
 );
 
 $specialPageAliases = array(
@@ -228,7 +232,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Judul_yang_buruk' ),
        'Blankpage'                 => array( 'Halaman_kosong', 'HalamanKosong' ),
        'Block'                     => array( 'Blokir_pengguna', 'BlokirPengguna' ),
-       'Blockme'                   => array( 'Blokir_saya', 'BlokirSaya' ),
        'Booksources'               => array( 'Sumber_buku', 'SumberBuku' ),
        'BrokenRedirects'           => array( 'Pengalihan_rusak', 'PengalihanRusak' ),
        'Categories'                => array( 'Daftar_kategori', 'DaftarKategori', 'Kategori' ),
@@ -240,10 +243,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Buat_akun', 'BuatAkun' ),
        'Deadendpages'              => array( 'Halaman_buntu', 'HalamanBuntu' ),
        'DeletedContributions'      => array( 'Kontribusi_yang_dihapus', 'KontribusiDihapus' ),
-       'Disambiguations'           => array( 'Disambiguasi' ),
        'DoubleRedirects'           => array( 'Pengalihan_ganda', 'PengalihanGanda' ),
        'EditWatchlist'             => array( 'Sunting_daftar_pantauan' ),
        'Emailuser'                 => array( 'Surel_pengguna', 'SurelPengguna' ),
+       'ExpandTemplates'           => array( 'Kembangkan_templat', 'KembangkanTemplat' ),
        'Export'                    => array( 'Ekspor_halaman', 'Ekspor' ),
        'Fewestrevisions'           => array( 'Perubahan_tersedikit', 'PerubahanTersedikit' ),
        'FileDuplicateSearch'       => array( 'Pencarian_berkas_duplikat', 'PencarianBerkasDuplikat' ),
@@ -286,6 +289,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Halaman_yang_dilindungi', 'HalamanDilindungi' ),
        'Protectedtitles'           => array( 'Judul_yang_dilindungi', 'JudulDilindungi' ),
        'Randompage'                => array( 'Halaman_sembarang', 'HalamanSembarang' ),
+       'RandomInCategory'          => array( 'Sembarang_di_kategori', 'SembarangDiKategori' ),
        'Randomredirect'            => array( 'Pengalihan_sembarang', 'PengalihanSembarang' ),
        'Recentchanges'             => array( 'Perubahan_terbaru', 'PerubahanTerbaru', 'RC', 'PT' ),
        'Recentchangeslinked'       => array( 'Perubahan_terkait', 'PerubahanTerkait' ),
@@ -618,8 +622,6 @@ $1',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'Diperoleh dari "$1"',
 'youhavenewmessages' => 'Anda mempunyai $1 ($2).',
-'newmessageslink' => 'pesan baru',
-'newmessagesdifflink' => 'perubahan terakhir',
 'youhavenewmessagesfromusers' => 'Anda memiliki $1 dari {{PLURAL:$3|$3 pengguna lain}} ($2).',
 'youhavenewmessagesmanyusers' => 'Anda memiliki $1 dari pengguna lain ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|pesan baru}}',
@@ -1463,7 +1465,6 @@ Perlu diingat bahwa indeks Google untuk konten {{SITENAME}} mungkin belum mencak
 'preferences' => 'Preferensi',
 'mypreferences' => 'Preferensi',
 'prefs-edits' => 'Jumlah suntingan:',
-'prefsnologin' => 'Belum masuk log',
 'changepassword' => 'Ganti kata sandi',
 'prefs-skin' => 'Kulit',
 'skin-preview' => 'Pratayang',
@@ -1767,6 +1768,7 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'recentchanges-label-minor' => 'Ini adalah suntingan kecil',
 'recentchanges-label-bot' => 'Suntingan ini dilakukan oleh bot',
 'recentchanges-label-unpatrolled' => 'Suntingan ini belum terpatroli',
+'recentchanges-legend-newpage' => '$1 - halaman baru',
 'rcnote' => "Berikut adalah {{PLURAL:$1|'''1'''|'''$1'''}} perubahan terbaru dalam {{PLURAL:$2|'''1''' hari|'''$2''' hari}} terakhir, sampai $4 pukul $5.",
 'rcnotefrom' => 'Di bawah ini adalah perubahan sejak <strong>$2</strong> (ditampilkan sampai <strong>$1</strong> perubahan).',
 'rclistfrom' => 'Perlihatkan perubahan terbaru sejak $1',
@@ -3318,7 +3320,7 @@ Jika dijalankan, sistem Anda akan berisiko terserang.",
 'svg-long-desc' => 'Berkas SVG, nominal $1 × $2 piksel, besar berkas: $3',
 'svg-long-desc-animated' => 'Berkas SVG animasi, biasanya $1 x $2 piksel, ukuran gambar: $3',
 'svg-long-error' => 'Berkas SVG tidak sah: $1',
-'show-big-image' => 'Resolusi penuh',
+'show-big-image' => 'Ukuran asli',
 'show-big-image-preview' => 'Ukuran pratayang ini: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Resolusi|Resolusi}} lain: $1.',
 'show-big-image-size' => '$1 × $2 piksel',
@@ -4350,4 +4352,17 @@ Jika tidak, Anda dapat menggunakan formulir mudah di bawah ini. Komentar Anda ak
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bita|bita}}',
 'limitreport-expensivefunctioncount' => 'Perhitungan fungsi parser yang mahal',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Pengembangan templat',
+'expand_templates_intro' => 'Halaman istimewa ini mengambil teks dan mengembangkan semua templat di dalamnya secara rekursif. Halaman ini juga menerjemahkan semua fungsi parser seperti <code><nowiki>{{</nowiki>#language:…}}</code> dan variabel seperti <code><nowiki>{{</nowiki>CURRENTDAY}}</code>. Bahkan bisa dibilang mengembangkan segala sesuatu yang berada di antara dua tanda kurung.',
+'expand_templates_title' => 'Judul konteks, untuk {{FULLPAGENAME}} dan lain-lain:',
+'expand_templates_input' => 'Teks masukan:',
+'expand_templates_output' => 'Hasil',
+'expand_templates_xml_output' => 'Hasil XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Buang komentar',
+'expand_templates_remove_nowiki' => 'Tidak menampilkan tag <nowiki> pada hasilnya',
+'expand_templates_generate_xml' => 'Tampilkan pohon parser XML',
+'expand_templates_preview' => 'Pratayang',
+
 );
index ced2e20..6c3b7ee 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Jmb
  * @author Kaganer
+ * @author Makuba
  * @author Malafaya
  * @author Reedy
  * @author Remember the dot
@@ -43,7 +44,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Págines_antiqui' ),
        'Blankpage'                 => array( 'Págine_in_blanc' ),
        'Block'                     => array( 'Blocar', 'Blocar_IP', 'Blocar_usator' ),
-       'Blockme'                   => array( 'Blocar_in_mi_self' ),
        'Booksources'               => array( 'Fontes_de_libres' ),
        'BrokenRedirects'           => array( 'Redirectionmentes_ínperfect' ),
        'ChangePassword'            => array( 'Change_parol-clave' ),
@@ -53,7 +53,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Crear_conto' ),
        'Deadendpages'              => array( 'Págines_moderat' ),
        'DeletedContributions'      => array( 'Contributiones_deletet' ),
-       'Disambiguations'           => array( 'Disambiguitones' ),
        'DoubleRedirects'           => array( 'Redirectionmentes_duplic' ),
        'EditWatchlist'             => array( 'Redacter_liste_de_págines_vigilat' ),
        'Emailuser'                 => array( 'Email_de_usator' ),
@@ -139,17 +138,17 @@ $messages = array(
 'tog-hideminor' => 'Ocultar redactiones minori in nov changes',
 'tog-hidepatrolled' => 'Ocultar redactiones vigilat in nov changes',
 'tog-newpageshidepatrolled' => 'Ocultar págines vigilat de liste de nov págines',
-'tog-usenewrc' => 'Usar nov changes augmentat (exige JavaScript)',
+'tog-usenewrc' => 'Ordinar changes in «Recent changes» e li liste de vigila secun págines',
 'tog-numberheadings' => 'Auto-numerar rublicas',
-'tog-showtoolbar' => 'Monstrar barre de utensile de redaction (exige JavaScript)',
-'tog-editondblclick' => 'Redacter págines in clacca duplic (exige JavaScript)',
+'tog-showtoolbar' => 'Monstrar barre de redactional utensiles',
+'tog-editondblclick' => 'Redacter págines per duplic clacca',
 'tog-editsection' => 'Permisser redaction de division usant catenunes [redacter]',
-'tog-editsectiononrightclick' => 'Permisser redaction de division per clacca dextri in titules de division (exige JavaScript)',
+'tog-editsectiononrightclick' => 'Redacter singul sectiones per dextri clacca',
 'tog-showtoc' => 'Monstrar tabelle de contenetes (por págines che plu de 3 divisiones)',
 'tog-rememberpassword' => 'Memorar mi registre in ti computator (por um max de $1 {{PLURAL:$1|die|dies}})',
-'tog-watchcreations' => 'Adjunter págines que yo crear por mi liste de págines vigilat',
-'tog-watchdefault' => 'Adjunter págines que yo redacter por mi liste de págines vigilat',
-'tog-watchmoves' => 'Adjunter págines que yo mover por mi liste de págines vigilat',
+'tog-watchcreations' => 'Automaticmen viligar págines e files, queles yo ha creat.',
+'tog-watchdefault' => 'Automaticmen vigilar págines e files, queles yo ha redactet.',
+'tog-watchmoves' => 'Automaticmen vigilar págines e files, queles yo move.',
 'tog-watchdeletion' => 'Adjunter págines que yo deleter por mi liste de págines vigilat',
 'tog-minordefault' => 'Marcar omni li redactiones minori per contumacie',
 'tog-previewontop' => 'Monstrar prevision ante de buxe de redaction',
@@ -159,9 +158,9 @@ $messages = array(
 'tog-enotifusertalkpages' => 'Inviar me e-mail quande mi págine de discussion es changeat',
 'tog-enotifrevealaddr' => 'Revelar mi adresse de e-mail in notificationes de e-mail',
 'tog-shownumberswatching' => 'Monstrar li númere de usatores vigilant',
-'tog-oldsig' => 'Prevision de signature in existentie:',
+'tog-oldsig' => 'Existent subscrition:',
 'tog-fancysig' => 'Tractar signature quam textu wiki (sin un catenun auto-crate)',
-'tog-uselivepreview' => 'Usar prevision in vivi (exige JavaScript) (experimental)',
+'tog-uselivepreview' => 'Strax monstrar prevision (experimental)',
 'tog-forceeditsummary' => 'Suggester me quande intrar un redaction che summarium in blanc',
 'tog-watchlisthideown' => 'Ocultar mi redactiones del liste de págines vigilat',
 'tog-watchlisthidebots' => 'Ocultar redactiones de machine del liste de págines vigilat',
@@ -174,15 +173,23 @@ $messages = array(
 'tog-showhiddencats' => 'Monstrar categories ne visibil',
 'tog-noconvertlink' => 'Desvalidar conversion de titul de catenun',
 'tog-norollbackdiff' => 'Omisser change pos de efectuar un rollback',
+'tog-prefershttps' => 'Sempre usar un secur connection, si tui session es activ.',
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Nequande',
-'underline-default' => 'Criterie de navigator',
+'underline-default' => 'secun li usatori surfacie o li navigator',
+
+# Font style option in Special:Preferences
+'editfont-style' => 'Styl del lítteres in li redactional fenestre:',
+'editfont-default' => 'Standard del navigator',
+'editfont-monospace' => 'Lítteres con egal largitá',
+'editfont-sansserif' => 'Lítteres sin serifes',
+'editfont-serif' => 'Lítteres con serifes',
 
 # Dates
 'sunday' => 'soledí',
 'monday' => 'lunedí',
-'tuesday' => 'mardí',
+'tuesday' => 'martedí',
 'wednesday' => 'mercurdí',
 'thursday' => 'jovedí',
 'friday' => 'venerdí',
@@ -198,7 +205,7 @@ $messages = array(
 'february' => 'februar',
 'march' => 'marte',
 'april' => 'april',
-'may_long' => 'may',
+'may_long' => 'mai',
 'june' => 'junio',
 'july' => 'julí',
 'august' => 'august',
@@ -210,9 +217,9 @@ $messages = array(
 'february-gen' => 'februar',
 'march-gen' => 'marte',
 'april-gen' => 'april',
-'may-gen' => 'may',
+'may-gen' => 'mai',
 'june-gen' => 'junio',
-'july-gen' => 'juli',
+'july-gen' => 'julí',
 'august-gen' => 'august',
 'september-gen' => 'septembre',
 'october-gen' => 'octobre',
@@ -222,7 +229,7 @@ $messages = array(
 'feb' => 'feb',
 'mar' => 'mar',
 'apr' => 'apr',
-'may' => 'may',
+'may' => 'mai',
 'jun' => 'jun',
 'jul' => 'jul',
 'aug' => 'aug',
@@ -230,6 +237,18 @@ $messages = array(
 'oct' => 'oct',
 'nov' => 'nov',
 'dec' => 'dec',
+'january-date' => '$1 januar',
+'february-date' => '$1 februar',
+'march-date' => '$1 marte',
+'april-date' => '$1 april',
+'may-date' => '$1 mai',
+'june-date' => '$1 junio',
+'july-date' => '$1 julí',
+'august-date' => '$1 august',
+'september-date' => '$1 septembre',
+'october-date' => '$1 octobre',
+'november-date' => '$1 novembre',
+'december-date' => '$1 decembre',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Categorie|Categories}}',
@@ -237,26 +256,34 @@ $messages = array(
 'subcategories' => 'Subcategories',
 'category-media-header' => 'Multimedia in categorie "$1"',
 'category-empty' => "''Ti categorie currentmen ne contene págines o media.''",
-'hidden-categories' => '{{PLURAL:$1|Categorie ocultat|Categories ocultat}}',
+'hidden-categories' => '{{PLURAL:$1|Celat categorie|Celat categories}}',
+'hidden-category-category' => 'Celat categories',
 'category-subcat-count' => '{{PLURAL:$2|Ti categorie ha solmen li sequent subcategorie.|Ti categorie ha li sequent {{PLURAL:$1|subcategorie|$1 subcategories}}, de un total de $2.}}',
+'category-subcat-count-limited' => 'Ti-ci categorie contene li secuent {{PLURAL:$1|subcategorie|$1 subcategories}}.',
 'category-article-count' => '{{PLURAL:$2|Ti categorie contene solmen li sequent págine.|Li sequent {{PLURAL:$1|págine es|$1 págine es}} in ti categorie, de un total de $2.}}',
+'category-article-count-limited' => 'Li secuent {{PLURAL:$1|págine|$1 pagines}} es contenet in ti-ci categorie:',
 'category-file-count' => '{{PLURAL:$2|Ti categorie contene solmen li sequent file.|Li sequent {{PLURAL:$1|file es|$1 files es}} in ti categorie, de un total de $2.}}',
+'category-file-count-limited' => 'Li secuent {{PLURAL:$1|file|$1 files}} es contenet in ti-ci categorie:',
 'listingcontinuesabbrev' => 'cont.',
+'index-category' => 'Indexat págines',
 'noindex-category' => 'Págines ne indexet',
+'broken-file-category' => 'Págines con ruptet file-links.',
 
 'about' => 'Concernent',
 'article' => 'Articul',
-'newwindow' => '(inaugurar in nov planca de fenestre)',
+'newwindow' => '(es apertet in un nov fenestre)',
 'cancel' => 'Anullar',
 'moredotdotdot' => 'Plu...',
-'mypage' => 'Mi págine',
-'mytalk' => 'Mi discussion',
+'morenotlisted' => 'Ti liste ne es complet.',
+'mypage' => 'Págine',
+'mytalk' => 'Conversation',
 'anontalk' => 'Discussion por ti ci IP',
 'navigation' => 'Navigation',
 'and' => '&#32;e',
 
 # Cologne Blue skin
 'qbfind' => 'Constatar',
+'qbbrowse' => 'Travider',
 'qbedit' => 'Redacter',
 'qbpageoptions' => 'Págine de optiones',
 'qbmyoptions' => 'Mi optiones',
@@ -270,16 +297,17 @@ $messages = array(
 'vector-action-protect' => 'Gardar',
 'vector-action-undelete' => 'Restituer',
 'vector-action-unprotect' => 'Desgardar',
-'vector-simplesearch-preference' => 'Premisser suggestiones de sercha argumentat (pelle Vector solmen)',
+'vector-simplesearch-preference' => 'Simplificat serch-liste (solmen Vector)',
 'vector-view-create' => 'Crear',
 'vector-view-edit' => 'Redacter',
-'vector-view-history' => 'Vider historie',
+'vector-view-history' => 'Historie de versiones',
 'vector-view-view' => 'Leer',
 'vector-view-viewsource' => 'Vider fonte',
 'actions' => 'Actiones',
 'namespaces' => 'Spacies de nómine',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Navigational menú',
 'errorpagetitle' => 'Errore',
 'returnto' => 'Retornar a $1.',
 'tagline' => 'De {{SITENAME}}',
@@ -289,41 +317,48 @@ $messages = array(
 'go' => 'Ear',
 'searcharticle' => 'Ear',
 'history' => 'Historie',
-'history_short' => 'Historie',
+'history_short' => 'Historie de versiones',
 'updatedmarker' => 'modernisat desde mi ultim visitation',
-'printableversion' => 'Version por impression',
-'permalink' => 'Catenun permanent',
+'printableversion' => 'Version a printar',
+'permalink' => 'Permanent referentie',
+'print' => 'Printar',
+'view' => 'Leer',
 'edit' => 'Redacter',
 'create' => 'Crear',
 'editthispage' => 'Redacter',
+'create-this-page' => 'Crear ti págine',
 'delete' => 'Deleter',
 'deletethispage' => 'Deleter ti págine',
+'undeletethispage' => 'Restaurar ti págine',
 'undelete_short' => 'Restaurar {{PLURAL:$1|1 modification|$1 modificationes}}',
+'viewdeleted_short' => 'Vider {{PLURAL:$1|un deletet version|$1 deletet versiones}}',
 'protect' => 'Gardar',
-'protect_change' => 'Change',
+'protect_change' => 'changer',
 'protectthispage' => 'Gardar ti págine',
 'unprotect' => 'Changear protection',
 'unprotectthispage' => 'Changear protection de ti págine',
 'newpage' => 'Nov págine',
 'talkpage' => 'Parlar in ti págine',
-'talkpagelinktext' => 'Discussion',
+'talkpagelinktext' => 'Conversation',
 'specialpage' => 'Págine special',
-'personaltools' => 'Utensiles personal',
+'personaltools' => 'Mi utensiles',
 'postcomment' => 'Nov division',
 'articlepage' => 'Vider li articul',
 'talk' => 'Discussion',
-'views' => 'Vistas',
-'toolbox' => 'Buxe de utensiles',
+'views' => 'Aspectes',
+'toolbox' => 'Utensiles',
 'userpage' => 'Vider págine del usator',
 'projectpage' => 'Vider págine de projecte',
 'imagepage' => 'Vider li págine de figura',
+'mediawikipage' => 'Vider págine de missagies',
 'templatepage' => 'Vider li págine de avise',
 'viewhelppage' => 'Vider págine de auxilie',
+'categorypage' => 'Vider categorial págine',
 'viewtalkpage' => 'Vider discussion',
 'otherlanguages' => 'Altri lingues',
 'redirectedfrom' => '(Redirectet de $1)',
 'redirectpagesub' => 'Págine de redirecterion',
-'lastmodifiedat' => 'Ti págine esset per ultim témpor redactet in $1, in $2.',
+'lastmodifiedat' => 'Ti-ci págine ha redactet in ultim li $1, clocca $2.',
 'viewcount' => 'Ti págine ha esset accesset {{PLURAL:$1|un vez|$1 vezes}}.',
 'protectedpage' => 'Un protectet págine',
 'jumpto' => 'Saltar a:',
@@ -337,19 +372,19 @@ $1',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'Concernent {{SITENAME}}',
-'aboutpage' => 'Project:Concernent',
-'copyright' => 'Contenete disponibil sub $1.',
+'aboutpage' => 'Project:Concernent_{{SITENAME}}',
+'copyright' => 'Contenete attiņibil sub $1, si ne altrimen indicat.',
 'copyrightpage' => '{{ns:project}}:Jure editorial',
-'currentevents' => 'Eventus current',
-'currentevents-url' => 'Project:Eventus current',
+'currentevents' => 'Actual evenimentes',
+'currentevents-url' => 'Project:Actual evenimentes',
 'disclaimers' => 'Advertimentes',
-'disclaimerpage' => 'Project:Advertimentes comun',
-'edithelp' => 'Redacter auxilie',
+'disclaimerpage' => 'Project:Advertimentes',
+'edithelp' => 'Redactori auxilie',
 'helppage' => 'Help:Contenete',
-'mainpage' => 'Págine principal',
-'mainpage-description' => 'Págine principal',
-'portal' => 'Págine de comunité',
-'portal-url' => 'Project:Págine de comunité',
+'mainpage' => 'Principal págine',
+'mainpage-description' => 'Principal págine',
+'portal' => 'Portale del communité',
+'portal-url' => 'Project:Portale del communité',
 'privacy' => 'Politica de privatie',
 'privacypage' => 'Project:Politica de privatie',
 
@@ -357,18 +392,16 @@ $1',
 'versionrequiredtext' => 'Version $1 de MediaWiki es exiget por usar ti págine.
 Vider [[Special:Version|págine de version]].',
 
-'retrievedfrom' => 'Recuperat de "$1"',
+'retrievedfrom' => 'Cargat de «$1»',
 'youhavenewmessages' => 'Vu have $1 ($2).',
-'newmessageslink' => 'nov missages',
-'newmessagesdifflink' => 'vider missages antiqui',
 'youhavenewmessagesmulti' => 'Vu have nov missages in $1',
 'editsection' => 'redacter',
 'editold' => 'redacter',
 'viewsourceold' => 'vider fonte',
 'editlink' => 'redacter',
 'viewsourcelink' => 'vider fonte',
-'editsectionhint' => 'Redacter division: $1',
-'toc' => 'Contenetes',
+'editsectionhint' => 'Redacter section: $1',
+'toc' => 'Contenete',
 'showtoc' => 'monstrar',
 'hidetoc' => 'ocultar',
 'thisisdeleted' => 'Vider o restaurar $1?',
@@ -378,9 +411,9 @@ Vider [[Special:Version|págine de version]].',
 'red-link-title' => '$1 (págine ne existe)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Articul',
+'nstab-main' => 'Págine',
 'nstab-user' => 'Págine de usator',
-'nstab-special' => 'Págine special',
+'nstab-special' => 'Special págine',
 'nstab-project' => 'Págine de projecte',
 'nstab-image' => 'Figura',
 'nstab-mediawiki' => 'Missage',
@@ -390,12 +423,13 @@ Vider [[Special:Version|págine de version]].',
 
 # General errors
 'error' => 'Erra',
-'missing-article' => 'Li funde de datas ne constatat li textu de un págine que it posse constatar, nominat "$1" $2.
+'missing-article' => 'Li textu de «$1» $2 ne ha esset trovat in li data-base.
+
+It es possibil, que ti págine ha esset deleet o movet.
 
-Ti es usualmen causat per sequent un diferentie ne modernisat o catenun de historie por un págine que ha esset deletet.
 
-Si ti ne es li casu, vu posse have constatat un bug in li software.
-Pleser raporta it por un [[Special:ListUsers/sysop|administrator]], formant note de li URL.',
+Si to ne es just, tu ha forsan trovat un erra in li programma.
+Ples raporta it a un [[Special:ListUsers/sysop|administrator]], notante li URL.',
 'missingarticle-rev' => '(revision#: $1)',
 'unexpected' => 'Valor ínexpectat: "$1"="$2".',
 'badtitle' => 'Titul mal',
@@ -415,9 +449,9 @@ Li motive dat es "\'\'$2\'\'".',
 'virus-unknownscanner' => 'antivírus desconosset:',
 
 # Login and logout pages
-'logouttext' => "'''Vu ha terminat vor session.'''
-Vu posse continuar usar {{SITENAME}} anonimimen, o vu posse <span class='plainlinks'>[$1 aperter un session denov]</span> quam li sam usator o quam un diferent usator.
-Nota que alcun págines posse continuar esser monstrat quam si vu esset registrat, til que vu vacua li cache de tui navigator.",
+'logouttext' => "'''Tu ha terminat tui session.'''
+
+Nota, que alcun págines posse continualmen esser monstrat quasi tu vell ancor esser inregistrat, til que tu vacua li cache de tui navigator.",
 'yourname' => 'Nómine de usator:',
 'yourpassword' => 'Parol-clave:',
 'yourpasswordagain' => 'Parol-clave denov:',
@@ -429,7 +463,7 @@ Nota que alcun págines posse continuar esser monstrat quam si vu esset registra
 'userlogin' => 'Crear un conto o intrar',
 'userloginnocreate' => 'Intrar',
 'logout' => 'Surtida',
-'userlogout' => 'Surtida',
+'userlogout' => 'Surtir',
 'notloggedin' => 'Vu ne ha intrat',
 'nologin' => 'Ne have un conto? $1.',
 'nologinlink' => 'Crear un conto',
@@ -465,27 +499,27 @@ Por preventer misusa, solmen un parol-clave amemora va esser inviat per {{PLURAL
 'passwordreset-username' => 'Vor nómine usatori',
 
 # Edit page toolbar
-'bold_sample' => 'Textu in nigri',
-'bold_tip' => 'Textu in nigri',
-'italic_sample' => 'Textu cursivmen',
-'italic_tip' => 'Textu cursivmen',
-'link_sample' => 'Titul de catenun',
-'link_tip' => 'Catenun intern',
-'extlink_sample' => 'http://www.example.com titul de catenun',
-'extlink_tip' => 'Catenun extern (memorar prefixe http://)',
-'headline_sample' => 'Division de nivelle 2',
-'headline_tip' => 'Division de nivelle 2',
-'nowiki_sample' => 'Ignorar formate wiki',
+'bold_sample' => 'Nigri textu',
+'bold_tip' => 'Nigri textu',
+'italic_sample' => 'Cursiv textu',
+'italic_tip' => 'Cursiv textu',
+'link_sample' => 'Nómine de referentie',
+'link_tip' => 'Intern referentie',
+'extlink_sample' => 'http://www.example.com nómine del referentie',
+'extlink_tip' => 'Extern referentie (ne oblivia prefixar http://)',
+'headline_sample' => 'Titul de nivell 2',
+'headline_tip' => 'Titul de nivell 2',
+'nowiki_sample' => 'Intrar ínformatat textu ci.',
 'nowiki_tip' => 'Ignorar formate wiki',
-'image_tip' => 'File fixat',
-'media_tip' => 'Catenun in file de multimedia',
-'sig_tip' => 'Tui signature che hor e date',
-'hr_tip' => 'Linea horizontal (use sin excess)',
+'image_tip' => 'Fixat file',
+'media_tip' => 'Referentie a un multimedial file.',
+'sig_tip' => 'Tui subscrit con hor e date',
+'hr_tip' => 'Horizontal linea (ples usar sin excess)',
 
 # Edit pages
-'summary' => 'Summarium:',
+'summary' => 'Resummation:',
 'subject' => 'Tema/Division:',
-'minoredit' => 'Ti es un redaction minori',
+'minoredit' => 'To es un bagatellic change',
 'watchthis' => 'Vigilar ti págine',
 'savearticle' => 'Conservar págine',
 'preview' => 'Prevision',
@@ -503,12 +537,10 @@ Tui adresse de IP va esser registrat in historico de redactiones de ti págine."
 'newarticletext' => "Vu have sequet un catenun por un págine que ne existe ancor.
 Por crear li págine, comensa tippant in li buxe in infra (vider li [[{{MediaWiki:Helppage}}|págine de auxilie]] por plu informationes).
 Si vu es ci per errore, clacca in li buton '''retornar''' in tui navigator.",
-'noarticletext' => 'Vi currentmen ne textu in ti págine.
-Vu posse [[Special:Search/{{PAGENAME}}|serchar por ti titul de págine]] in altri págines,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serchar li diariumes relatet], o [{{fullurl:{{FULLPAGENAME}}|action=edit}} redacter ti págine]</span>.',
-'noarticletext-nopermission' => 'Vi currentmen ne textu in ti págine.
-Vu posse [[Special:Search/{{PAGENAME}}|serchar por titul de ti págine]] in altri págines,
-o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serchar li diariumes relatet]</span>.',
+'noarticletext' => 'Actualmen ti-ci págine ancor ne contene alquel textu.
+Tu posse <span class="plainlinks">[{{fullurl:{{FULLPAGENAME}}|action=edit}} redacter]</span> it, [[Special:Search/{{PAGENAME}}|serchar]] su titul in altri págines o regardar li relatent <span class="plainlinks">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} logs]</span>.',
+'noarticletext-nopermission' => 'Actualmen ti págine ne contene textu e tu ne have permission crear ti págine.
+Tu posse [[Special:Search/{{PAGENAME}}|serchar]] su titul sur altri págines o regardar li <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} relatent logs].</span>',
 'userpage-userdoesnotexist' => 'Conto de usator "$1" ne es registrat.
 Pleser controla si vu cari crear/redacter ti págine.',
 'userpage-userdoesnotexist-view' => 'Conto de usator "$1" ne es registrat.',
@@ -538,7 +570,7 @@ Li ultim intrada in li historico es sub li condition infra por referentie:",
 'templatesused' => '{{PLURAL:$1|Avise|Avises}} usat in ti págine:',
 'templatesusedpreview' => '{{PLURAL:$1|Avise|Avises}} usat in ti prevision:',
 'templatesusedsection' => '{{PLURAL:$1|Avise|Avises}} usat in ti division:',
-'template-protected' => '(gardat)',
+'template-protected' => '(protectet)',
 'template-semiprotected' => '(medie-gardat)',
 'hiddencategories' => 'Ti págine es un membre de {{PLURAL:$1|1 categorie ocultat|$1 categories ocultat}}:',
 'permissionserrorstext-withaction' => 'Vu ne have permission por $2, por li sequent {{PLURAL:$1|motive|motives}}:',
@@ -550,9 +582,8 @@ Li deletion e diarium de movement por li págine es sub li condition ci por conv
 Li deletion e diarium de movement por li págine es sub li condition in infra por referentie.',
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning' => "'''Advertiment:''' Avise que include dimension es anc grand.
-Alcun avises va ne esser includet.",
-'post-expand-template-inclusion-category' => 'Págines u avise que include dimension es excedet',
+'post-expand-template-inclusion-warning' => "'''Advertiment:''' Li grandore del includet shablones es tro grand. Alcun shablones ne posse esser includet.",
+'post-expand-template-inclusion-category' => 'Págines, in queles li maximal grandore del includet shablones es excedet',
 'post-expand-template-argument-warning' => "'''Advertiment:''' Ti págine contene in un minim argumente de avise quel ha un anc mensura de expansion grand.
 Tis argumentes have esset omisset.",
 'post-expand-template-argument-category' => 'Págines contenent argumentes de avise omisset',
@@ -566,10 +597,10 @@ Tis argumentes have esset omisset.",
 # History pages
 'viewpagelogs' => 'Vider diariumes por ti págine',
 'currentrev' => 'Ultim revision',
-'currentrev-asof' => 'Ultim revision quam de $1',
+'currentrev-asof' => 'Actual version de $2, clocca $3',
 'revisionasof' => 'Revision de $1',
 'revision-info' => 'Revision de $1 e il ha fabricat de $2',
-'previousrevision' => '← Revision antiqui',
+'previousrevision' => '← Anteyan version',
 'nextrevision' => 'Revision sequent →',
 'currentrevisionlink' => 'Ultim revision',
 'cur' => 'hod',
@@ -581,17 +612,17 @@ Tis argumentes have esset omisset.",
 Legende: '''({{int:cur}})''' = diferenties che ultim revision, '''({{int:last}})''' = diferenties que antecede li revision, '''{{int:minoreditletter}}''' = redaction minori.",
 'history-fieldset-title' => 'Historie de navigation',
 'history-show-deleted' => 'Deletet solmen',
-'histfirst' => 'Plu antiqui',
-'histlast' => 'Plu recent',
+'histfirst' => 'max veľi',
+'histlast' => 'max nov',
 
 # Revision feed
 'history-feed-item-nocomment' => '$1 in $2',
 
 # Revision deletion
 'rev-delundel' => 'monstrar/ocultar',
-'revdel-restore' => 'change visibilitá',
-'revdel-restore-deleted' => 'revisiones deletet',
-'revdel-restore-visible' => 'revisiones visibil',
+'revdel-restore' => 'changer visibilitá',
+'revdel-restore-deleted' => 'deletet revisiones',
+'revdel-restore-visible' => 'visibil revisiones',
 
 # Suppression log
 'suppressionlog' => 'Diarium de supression',
@@ -609,19 +640,19 @@ Vider li [[Special:IPBlockList|liste de bloc de IP]] por li liste de bloces e ba
 'diff-multi' => '({{PLURAL:$1|Un revision intermediari|$1 revisiones intermediari}} per {{PLURAL:$2|un usator|$2 usatores}} ne monstrat)',
 
 # Search results
-'searchresults' => 'Serchar resultates',
-'searchresults-title' => 'Serchar resultates por "$1"',
+'searchresults' => 'Serch-resultates',
+'searchresults-title' => 'Serch-resultates por «$1»',
 'toomanymatches' => 'Anc mult concurses esset retornat, pleser prova un question diferent',
 'titlematches' => 'Resultates in li titules de págines',
 'textmatches' => 'Resultates in textu de págines',
-'prevn' => '{{PLURAL:$1|$1}} anteriori',
-'nextn' => 'proxim {{PLURAL:$1|$1}}',
-'prevn-title' => 'Anteriori $1 {{PLURAL:$1|resultate|resultates}}',
-'nextn-title' => 'Proxim $1 {{PLURAL:$1|resultate|resultates}}',
+'prevn' => 'anteyan {{PLURAL:$1|$1}}',
+'nextn' => 'secuent {{PLURAL:$1|$1}}',
+'prevn-title' => 'Anteyan $1 {{PLURAL:$1|resultate|resultates}}',
+'nextn-title' => 'Secuent $1 {{PLURAL:$1|resultate|resultates}}',
 'shown-title' => 'Monstrar $1 {{PLURAL:$1|resultate|resultates}} per págine',
-'viewprevnext' => 'Vider ($1 {{int:pipe-separator}} $2) ($3)',
+'viewprevnext' => 'Monstrar ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Vi un págine nominat \"[[:\$1]]\" in ti wiki.'''",
-'searchmenu-new' => "'''Crear li págine \"[[:\$1]]\" in ti wiki!'''",
+'searchmenu-new' => "'''Crear li págine «[[:$1]]» in ti wiki.'''",
 'searchprofile-articles' => 'Págines de contenete',
 'searchprofile-project' => 'Auxilie e Págines de projecte',
 'searchprofile-images' => 'Multimedia',
@@ -629,24 +660,23 @@ Vider li [[Special:IPBlockList|liste de bloc de IP]] por li liste de bloces e ba
 'searchprofile-advanced' => 'Avansat',
 'searchprofile-articles-tooltip' => 'Serchar in $1',
 'searchprofile-project-tooltip' => 'Serchar in $1',
-'searchprofile-images-tooltip' => 'Serchar por files',
-'searchprofile-everything-tooltip' => 'Serchar omni li contenete (includent págines de discussion)',
-'searchprofile-advanced-tooltip' => 'Serchar in spacies de nómine de hábitu',
+'searchprofile-images-tooltip' => 'Serchar files',
+'searchprofile-everything-tooltip' => 'Serchar in li tot contenete (includent págines de conversation)',
+'searchprofile-advanced-tooltip' => 'Serchar in special spacies de nómine',
 'search-result-size' => '$1 ({{PLURAL:$2|1 parol|$2 paroles}})',
 'search-result-category-size' => '{{PLURAL:$1|1 membre|$1 membres}} ({{PLURAL:$2|1 subcategory|$2 subcategories}}, {{PLURAL:$3|1 file|$3 files}})',
-'search-redirect' => '(redirectet de $1)',
-'search-section' => '(division $1)',
-'search-suggest' => 'Vu intentet: $1',
+'search-redirect' => '(redirection de «$1»)',
+'search-section' => '(section $1)',
+'search-suggest' => 'Esque tu ha intentet: «$1»?',
 'searchrelated' => 'relatet',
-'searchall' => 'Omni',
-'showingresultsheader' => "{{PLURAL:$5|Resultate '''$1''' de '''$3'''|Resultates '''$1 - $2''' de '''$3'''}} por '''$4'''",
-'search-nonefound' => 'Ne esset constatat resultates por li question.',
+'searchall' => 'omni',
+'showingresultsheader' => "{{PLURAL:$5|Resultate '''$1''' de '''$3'''|Resultates '''$1  $2''' de '''$3'''}} por '''$4'''",
+'search-nonefound' => 'Tu sercha ne ha trovat un resultate.',
 'powersearch' => 'Serchar avansat',
 
 # Preferences page
 'preferences' => 'Preferenties',
-'mypreferences' => 'Mi preferenties',
-'prefsnologin' => 'Vu ne ha intrat',
+'mypreferences' => 'Preferenties',
 'changepassword' => 'Modificar passa-parol',
 'skin-preview' => 'Prevision',
 'saveprefs' => 'Conservar',
@@ -738,21 +768,21 @@ Tui adresse de e-mail ne es revelat quande altri usatores contacter vu.',
 'rclinks' => 'Monstrar li $1 ultim modificationes fat durante li $2 ultim dies<br />$3.',
 'diff' => 'dif',
 'hist' => 'hist',
-'hide' => 'Ocultar',
+'hide' => 'Celar',
 'show' => 'Monstrar',
 'minoreditletter' => 'm',
 'newpageletter' => 'N',
 'boteditletter' => 'b',
-'rc-enhanced-expand' => 'Monstar detallies (exige JavaScript)',
+'rc-enhanced-expand' => 'Monstrar detaľes (per JavaScript)',
 'rc-enhanced-hide' => 'Ocultar detallies',
 
 # Recent changes linked
 'recentchangeslinked' => 'Changes referet',
 'recentchangeslinked-feed' => 'Relatet modificationes',
-'recentchangeslinked-toolbox' => 'Changes referet',
+'recentchangeslinked-toolbox' => 'Changes in referentiat págines',
 'recentchangeslinked-title' => 'Changes relatet por "$1"',
-'recentchangeslinked-summary' => "Ti es un liste de changes fat recentmen por págines ligat de un págine specificat (o por membres de un categorie specificat).
-Págines in [[Special:Watchlist|tui liste de págines vigilat]] es '''nigri'''.",
+'recentchangeslinked-summary' => "To es un liste del nov changes in li referentiat págines (respectivmen in li membres del categorie).
+Págines in [[Special:Watchlist|tui liste de vigilat págines]] es '''nigri'''.",
 'recentchangeslinked-page' => 'Nómine de págine:',
 'recentchangeslinked-to' => 'Monstrar changes por págines ligat por li págine disposit in vice',
 
@@ -826,22 +856,22 @@ Vu posse provar in un témpor minu activ.',
 
 # File description page
 'file-anchor-link' => 'Figura',
-'filehist' => 'Historic de figura',
-'filehist-help' => 'Clacca in un date/témpor por vider li file quam it aparit in ti témpor.',
+'filehist' => 'Versiones del file',
+'filehist-help' => 'Clacca a un date/témpore por vider ti version.',
 'filehist-revert' => 'reverter',
-'filehist-current' => 'current',
-'filehist-datetime' => 'Date/Témpor',
+'filehist-current' => 'actual',
+'filehist-datetime' => 'Version de',
 'filehist-thumb' => 'Miniatura',
-'filehist-thumbtext' => 'Miniatura por version quam de $1',
+'filehist-thumbtext' => 'Miniatura por li version de $2, clocca $3',
 'filehist-user' => 'Usator',
 'filehist-dimensions' => 'Dimensiones',
 'filehist-filesize' => 'Mesura de file',
-'filehist-comment' => 'Comentarie',
-'imagelinks' => 'Usu del file',
+'filehist-comment' => 'Commentarie',
+'imagelinks' => 'Usada del file',
 'linkstoimage' => 'Li sequent {{PLURAL:$1|catenun de págine|$1 catenunes de págines}} por ti file:',
 'nolinkstoimage' => 'Hay nequant págine que liga por ti file.',
-'sharedupload-desc-here' => 'Ti file es de $1 e posse esser usat per altri projectes.
-Li descrition es in li [$2 págine de descrition del file] ta e es monstrat in infra.',
+'sharedupload-desc-here' => 'Ti file es de $1 e posse esser usat de altri projectes.
+Li descrition in su [$2 págine de descrition] es monstrat in infra.',
 'uploadnewversion-linktext' => 'Cargar un nov version de ti file',
 
 # File deletion
@@ -862,7 +892,7 @@ Li descrition es in li [$2 págine de descrition del file] ta e es monstrat in i
 'unusedtemplateswlh' => 'altri catenunes',
 
 # Random page
-'randompage' => 'Págine sporadic',
+'randompage' => 'Págine in hasard',
 
 # Statistics
 'statistics' => 'Statistica',
@@ -942,11 +972,11 @@ Li descrition es in li [$2 págine de descrition del file] ta e es monstrat in i
 
 # Special:AllPages
 'allpages' => 'Omni li págines',
-'alphaindexline' => '$1 til $2',
+'alphaindexline' => '$1 till $2',
 'nextpage' => 'Proxim págine ($1)',
 'prevpage' => 'Ultim págine ($1)',
 'allarticles' => 'Omni li articules',
-'allpagessubmit' => 'Ear',
+'allpagessubmit' => 'Applicar',
 
 # Special:Categories
 'categories' => 'Categories',
@@ -973,8 +1003,8 @@ Li descrition es in li [$2 págine de descrition del file] ta e es monstrat in i
 'usermessage-template' => 'MediaWiki:UserMessage',
 
 # Watchlist
-'watchlist' => 'Liste de págines vigilat',
-'mywatchlist' => 'Mi liste de págines vigilat',
+'watchlist' => 'Vigilat págines',
+'mywatchlist' => 'Vigilat págines',
 'watchlistfor2' => 'Por $1 $2',
 'watchlistanontext' => 'Pleser $1 por vider o redacter articules in tui liste de págines vigilat.',
 'watchnologin' => 'Vu ne ha intrat',
@@ -1081,11 +1111,11 @@ $1',
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Contributiones de usator',
+'contributions' => 'Contributiones de {{GENDER:$1|usator|usatoressa}}',
 'contributions-title' => 'Contributiones de usator por $1',
-'mycontris' => 'Mi contributiones',
-'contribsub2' => 'Por $1 ($2)',
-'uctop' => '(prim)',
+'mycontris' => 'Contributiones',
+'contribsub2' => 'De {{GENDER:$3|$1}} ($2)',
+'uctop' => '(actual)',
 'month' => 'De mensu (e anterioris):',
 'year' => 'De annu (e anterioris):',
 
@@ -1101,35 +1131,35 @@ $1',
 'sp-contributions-submit' => 'Serchar',
 
 # What links here
-'whatlinkshere' => 'Quo catenunes ci',
+'whatlinkshere' => 'Referenties a ti-ci págine',
 'whatlinkshere-title' => 'Págines quo liga por "$1"',
 'whatlinkshere-page' => 'Págine:',
 'linkshere' => "Li sequent págines liga por '''[[:$1]]''':",
 'nolinkshere' => "Nequant págine liga por '''[[:$1]]'''.",
 'isredirect' => 'págine de redirecterion',
 'istemplate' => 'inclusion',
-'isimage' => 'catenun de figura',
+'isimage' => 'referentie a un file',
 'whatlinkshere-prev' => '{{PLURAL:$1|anterior|$1 anterioris}}',
 'whatlinkshere-next' => '{{PLURAL:$1|proxim|proxim $1}}',
 'whatlinkshere-links' => '← catenunes',
 'whatlinkshere-hideredirs' => '$1 redirectiones',
 'whatlinkshere-hidetrans' => '$1 transclusiones',
 'whatlinkshere-hidelinks' => '$1 catenunes',
-'whatlinkshere-hideimages' => '$1 catenunes de figura',
+'whatlinkshere-hideimages' => '$1 referenties a picturas.',
 'whatlinkshere-filters' => 'Filtres',
 
 # Block/unblock
 'blockip' => 'Blocar usator',
 'ipbreason' => 'Motive:',
-'ipboptions' => '2 hores:2 hours,1 die:1 day,3 dies:3 days,1 semane:1 week,2 semanes:2 weeks,1 mensu:1 month,3 mensues:3 months,6 mensues:6 months,1 annu:1 year,inprecise:infinite',
+'ipboptions' => '2 hores:2 hours,1 die:1 day,3 dies:3 days,1 semane:1 week,2 semanes:2 weeks,1 mensu:1 month,3 mensus:3 months,6 mensus:6 months,1 annu:1 year,ínfinit:infinite',
 'ipbotheroption' => 'altri',
 'ipblocklist' => 'Usatores blocat',
 'ipblocklist-submit' => 'Serchar',
 'infiniteblock' => 'infinit',
 'blocklink' => 'blocar',
 'unblocklink' => 'desblocar',
-'change-blocklink' => 'change bloc',
-'contribslink' => 'contribs',
+'change-blocklink' => 'changer blocada',
+'contribslink' => 'contributiones',
 'blocklogpage' => 'Diarium de bloc',
 'blocklogentry' => '"[[$1]]" hat blocat che un témpor de expiration de $2 $3',
 'block-log-flags-nocreate' => 'creation de conto debilisat',
@@ -1170,69 +1200,69 @@ Pleser fuse les manualmen.'''",
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Tui págine de usator',
 'tooltip-pt-anonuserpage' => 'Li págine de usator por li adresse de IP vu es redactent quam',
-'tooltip-pt-mytalk' => 'Tui págine de discussion',
+'tooltip-pt-mytalk' => 'Tui págine de conversation',
 'tooltip-pt-anontalk' => 'Discussion pri redactiones de adresses de IP',
 'tooltip-pt-preferences' => 'Tui preferenties',
-'tooltip-pt-watchlist' => 'Li liste de págines quo vu controla li changes',
+'tooltip-pt-watchlist' => 'Liste de vigilat págines',
 'tooltip-pt-mycontris' => 'Liste de tui contributiones',
-'tooltip-pt-login' => 'Vu es incorageat por crear un conto; támen, it ne esser mandatorio',
+'tooltip-pt-login' => 'Tu es incorrageat crear un conto, ma to ne es un deventie.',
 'tooltip-pt-anonlogin' => 'Vu es incorageat por crear un conto; támen, it ne esser mandatorio',
-'tooltip-pt-logout' => 'Surtida',
-'tooltip-ca-talk' => 'Discussion pri li contenete de págine',
-'tooltip-ca-edit' => 'Vu posse redacter ti págine. Pleser usar li buton "Monstrar prevision" ante de conservar',
-'tooltip-ca-addsection' => 'Comensar un nov division',
-'tooltip-ca-viewsource' => 'Ti págine es gardat. Vu posse vider li contenete',
-'tooltip-ca-history' => 'Revisiones passat de ti págine',
+'tooltip-pt-logout' => 'Surtir',
+'tooltip-ca-talk' => 'Discussion pri li articul.',
+'tooltip-ca-edit' => 'Redacter ti págine. Ples usar li buton de prevision antequam conservar.',
+'tooltip-ca-addsection' => 'Comensar un nov section',
+'tooltip-ca-viewsource' => 'Ti págine es protectet. Ma tu posse vider e copiar su fonte.',
+'tooltip-ca-history' => 'Passat versiones de ti págine',
 'tooltip-ca-protect' => 'Gardar ti págine',
 'tooltip-ca-unprotect' => 'Desgardar ti págine',
 'tooltip-ca-delete' => 'Deleter ti págine',
 'tooltip-ca-undelete' => 'Restaurar li redactiones executet pro ti págine ante de it esser deletet',
 'tooltip-ca-move' => 'Mover ti págine',
-'tooltip-ca-watch' => 'Adjunter ti págine pro tui liste de págines vigilat',
+'tooltip-ca-watch' => 'Adjunter ti págine a tui liste de vigilat págines',
 'tooltip-ca-unwatch' => 'Desvigilar ti págine de tui liste de págines vigilat',
 'tooltip-search' => 'Serchar {{SITENAME}}',
 'tooltip-search-go' => 'Ear por un págine che ti nómine exact, si it exister',
-'tooltip-search-fulltext' => 'Serchar págines che ti textu',
-'tooltip-p-logo' => 'Visita li págine principal',
-'tooltip-n-mainpage' => 'Visita li págine principal',
-'tooltip-n-mainpage-description' => 'Visita li págine principal',
-'tooltip-n-portal' => 'Pri li projecte, quo vu posse executer, u constatar coses',
-'tooltip-n-currentevents' => 'Constata funde de information sur eventus current',
-'tooltip-n-recentchanges' => 'Li liste de nov changes vice wiki',
-'tooltip-n-randompage' => 'Cargar un págine sporadic',
-'tooltip-n-help' => 'Li loco por constatar auxilie',
-'tooltip-t-whatlinkshere' => 'Liste de omni págines que liga quel por ci',
-'tooltip-t-recentchangeslinked' => 'Nov changes in págines ligat in ti págine',
+'tooltip-search-fulltext' => 'Serchar págines, queles contene ti textu',
+'tooltip-p-logo' => 'Principal págine',
+'tooltip-n-mainpage' => 'Monstrar li principal págine',
+'tooltip-n-mainpage-description' => 'Visitar li principal págine',
+'tooltip-n-portal' => 'Pri li projecte, quo tu posse far, u tu posse trovar alquó',
+'tooltip-n-currentevents' => 'Fundal informationes pri actual evenimentes',
+'tooltip-n-recentchanges' => 'Liste de nov changes in li wiki',
+'tooltip-n-randompage' => 'Cargar un págine in hasard',
+'tooltip-n-help' => 'Monstrar un págine de auxilie',
+'tooltip-t-whatlinkshere' => 'Liste de omni págines ligant a ci.',
+'tooltip-t-recentchangeslinked' => 'Nov changes in págines ligat fro ti págine',
 'tooltip-feed-rss' => 'Feed RSS por ti págine',
 'tooltip-feed-atom' => 'Feed atom por ti págine',
 'tooltip-t-contributions' => 'Vider li liste de contributiones de ti usator',
 'tooltip-t-emailuser' => 'Inviar un e-mail por ti usator',
 'tooltip-t-upload' => 'Cargar files',
-'tooltip-t-specialpages' => 'Liste de omni págines special',
-'tooltip-t-print' => 'Version por impression de ti págine',
-'tooltip-t-permalink' => 'Catenun permanent por ti revision de págine',
-'tooltip-ca-nstab-main' => 'Vider li págine de contenete',
+'tooltip-t-specialpages' => 'Liste de omni special págines',
+'tooltip-t-print' => 'Printabil version de ti-ci págine',
+'tooltip-t-permalink' => 'Permanent referentie a ti version del págine',
+'tooltip-ca-nstab-main' => 'Vider li articul',
 'tooltip-ca-nstab-user' => 'Vider li págine de usator',
 'tooltip-ca-nstab-media' => 'Vider li págine de media',
 'tooltip-ca-nstab-special' => 'Ti es un págine special, vu ne posse redacter it',
 'tooltip-ca-nstab-project' => 'Vider li págine de projecte',
 'tooltip-ca-nstab-image' => 'Vider li págine de figura',
 'tooltip-ca-nstab-mediawiki' => 'Vider li missage de sistema',
-'tooltip-ca-nstab-template' => 'Vider li avise',
+'tooltip-ca-nstab-template' => 'Monstrar li shablone',
 'tooltip-ca-nstab-help' => 'Vider li págine de auxilie',
-'tooltip-ca-nstab-category' => 'Vider li págine de categorie',
+'tooltip-ca-nstab-category' => 'Monstrar li categorial págine',
 'tooltip-minoredit' => 'Marcar to ci quam un redaction minori',
 'tooltip-save' => 'Conservar tui changes',
-'tooltip-preview' => 'Monstrar tui changes, pleser usar ante de conservar!',
+'tooltip-preview' => 'Previder tui changes. Ples usar to antequam conservar!',
 'tooltip-diff' => 'Monstrar quel changes vu executet in li textu',
 'tooltip-compareselectedversions' => 'Vider li differenties inter li du revisiones selectet de ti págine',
 'tooltip-watch' => 'Adjunter ti págine por tui liste de págines vigilat',
 'tooltip-recreate' => 'Recrear li págine por plan anteriori de delete',
 'tooltip-upload' => 'Comensar cargament de file',
-'tooltip-rollback' => '"Rollback" reverte redaction(es) de ti págine executet per li ultim contributor in un claccar',
-'tooltip-undo' => '"Undo" reverte ti redaction e inaugura li forme de redaction in modo de prevision. It concede adjuntent un rason in li summarium.',
+'tooltip-rollback' => 'Desfá omni ultim changes del págine, queles ha esset executet del sam usator, per un sol clacca',
+'tooltip-undo' => '«Desfar» reverte solmen ti-ci redaction e monstra li resultate in prevision, porque tu posse indicar un rason in li linea de resumé.',
 'tooltip-preferences-save' => 'Conservar preferenties',
-'tooltip-summary' => 'Intrar un summarium curt',
+'tooltip-summary' => 'Ples intrar un curt resummation.',
 
 # Stylesheets
 'vector.css' => '/* CSS colocat ci va afectar usatores de pelle Vector */',
@@ -1250,7 +1280,7 @@ Pleser fuse les manualmen.'''",
 'file-info-size' => '$1 × $2 pixeles, dimension de file: $3, tip MIME: $4',
 'file-nohires' => 'Nequant resolution max alt disponibil.',
 'svg-long-desc' => '(file SVG, nominalmen $1 × $2 pixeles, mesura de file: $3)',
-'show-big-image' => 'Resolution complet',
+'show-big-image' => 'Original file',
 
 # Special:NewFiles
 'newimages' => 'Galerie de nov images',
@@ -1260,11 +1290,11 @@ Pleser fuse les manualmen.'''",
 'video-dims' => '$1, $2×$3',
 
 # Bad image list
-'bad_image_list' => 'Li formate es quam seque:
+'bad_image_list' => 'Formate:
 
-Solmen listar detallies (lineas comensant che *) es considerat.
-Li prim catenun in un linea deve esser un catenun por un file maliciosi.
-Alqual catenunes subsequent in li linea identic es considerat por esser exceptiones, i.e. págines u li file posse ocurrer in linea identic.',
+Solmen lineas comensant per un * es considerat.
+Strax pos li * deve secuer un referentie a un mal file.
+Secuent referenties in li sam linea defini exceptiones, u li file es leyalmen monstrat.',
 
 # Metadata
 'metadata' => 'Metadata',
@@ -1287,7 +1317,7 @@ Altri va esser ocultat per contumacie.
 
 # External editor support
 'edit-externally' => 'Redacter ti file usant un aplication extern',
-'edit-externally-help' => '(Vider li [https://www.mediawiki.org/wiki/Manual:External_editors instructiones de installation] por plu information)',
+'edit-externally-help' => '(Vide li [https://www.mediawiki.org/wiki/Manual:External_editors instructiones de installation] por plu mult information)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'omni',
@@ -1360,7 +1390,7 @@ Vu posse anc [[Special:EditWatchlist|usar li redactor uniform]].',
 'version-software-version' => 'Version',
 
 # Special:SpecialPages
-'specialpages' => 'Págines special',
+'specialpages' => 'Special págines',
 'specialpages-group-maintenance' => 'Raportes de conservation',
 'specialpages-group-other' => 'Altri págines special',
 'specialpages-group-login' => 'Intrar / crear conto',
index bd009a8..626ea8d 100644 (file)
@@ -331,8 +331,6 @@ Lé [[Special:Version|ụdì ihü]].',
 'ok' => 'Ngwanu',
 'retrievedfrom' => "Wefụtàrà ya shí ''$1''",
 'youhavenewmessages' => 'I nwèrè $1 ($2).',
-'newmessageslink' => 'Ozi ohúrù',
-'newmessagesdifflink' => 'mkpete azu ihe gbanwere',
 'youhavenewmessagesmulti' => 'Inwere eziohu na $1',
 'editsection' => 'mèzi',
 'editold' => 'mèzi',
@@ -746,7 +744,6 @@ Nwàné ótù okwu íshí na ihe Í nè tú jí ''háníle:'' Í tuó ihe nílé
 # Preferences page
 'preferences' => 'Otu ha dosẹrẹ ihe',
 'mypreferences' => 'Otú m shị na dose ihem',
-'prefsnologin' => 'I bátà bò',
 'changepassword' => 'Gbanwe okwu éjị à gáfe',
 'prefs-skin' => 'Akpụkpọ',
 'skin-preview' => 'Lètú',
@@ -865,6 +862,7 @@ Nwàné ótù okwu íshí na ihe Í nè tú jí ''háníle:'' Í tuó ihe nílé
 'recentchanges-legend' => 'Nràlụ màkà Ihe gbanwere ubwá',
 'recentchanges-feed-description' => 'Chóputà ihe ógẹ ǹsò na wiki ímé órírí nke á.',
 'recentchanges-label-minor' => 'Ihe bu orü ntakírí',
+'recentchanges-legend-newpage' => '$1 - ihü ohúrù',
 'rcnote' => "Na àlà {{PLURAL:$1|bu gbanwere '''1'''|bu gbanwere mgbèdè nke '''$1'''}} na mgbèdè {{PLURAL:$2|chi|chi '''$2'''}}, na mgbe $5, $4.",
 'rclistfrom' => 'Zìrí ihe gbanwere ọhúrù shí $1',
 'rcshowhideminor' => 'orü ntákírí $1',
@@ -1738,4 +1736,7 @@ Nke ozor gí zonari na áká onwe ha.
 # Search suggestions
 'searchsuggest-search' => 'Chọwa',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Ngwanu',
+
 );
index 10100b8..68acfcc 100644 (file)
@@ -309,8 +309,6 @@ Kitaen ti [[Special:Version|panid ti bersion]].',
 'ok' => 'Sige',
 'retrievedfrom' => 'Naala manipud idiay "$1"',
 'youhavenewmessages' => 'Addaanka ti $1 ($2).',
-'newmessageslink' => 'dagiti baro a mensahe',
-'newmessagesdifflink' => 'naudi a sinukatan',
 'youhavenewmessagesfromusers' => 'Adda $1 manipud {{PLURAL:$3|ti sabali nga agar-aramat|kadagiti $3 a sabsabali nga agar-aramat}} ($2).',
 'youhavenewmessagesmanyusers' => 'Adda $1 manipud kadagiti adu nga agar-aramat ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|baro a mensahem|dagiti baro a mensahem}}',
@@ -1196,7 +1194,6 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 'preferences' => 'Kakaykayatan',
 'mypreferences' => 'Kakaykayatan',
 'prefs-edits' => 'Bilang dagiti inurnos:',
-'prefsnologin' => 'Saan a nakastrek',
 'changepassword' => 'Baliwan ti kontrasenias',
 'prefs-skin' => 'Kudil',
 'skin-preview' => 'Ipadas',
@@ -3954,4 +3951,21 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'limitreport-expansiondepth' => 'Kangatuan a panagpadakkel ti kauneg',
 'limitreport-expensivefunctioncount' => 'Bilang ti nangina nga annong ti parser',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Palawaen dagiti plantilia',
+'expand_templates_intro' => 'Daytoy nga espesial a panid ket agala ti testo ken palawaenna amin dagiti plantilia iti unegna a minaig iti daytoy.
+Palawaenna pay dagiti nasuportaran a parser a pamay-an a kas ti
+<code><nowiki>{{</nowiki>#language:…}}</code> ken dagiti nadumaduma a kita a kas ti
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. 
+Iti kinapudno, palawaenna amin dagiti adda ti doble a tukol.',
+'expand_templates_title' => 'Titulo ti kontesto, para iti {{FULLPAGENAME}} kdpy.:',
+'expand_templates_input' => 'Maikabil a testo:',
+'expand_templates_output' => 'Nagbanagan',
+'expand_templates_xml_output' => 'XML a maiparang',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Ikkaten dagiti komentario',
+'expand_templates_remove_nowiki' => 'Parmeken dagiti <nowiki> nga etiketa kadagiti nagbanagan',
+'expand_templates_generate_xml' => 'Iparang ti XML parse a kayo',
+'expand_templates_preview' => 'Pamadasan',
+
 );
index 282416e..378afdf 100644 (file)
@@ -213,7 +213,7 @@ $messages = array(
 'articlepage' => 'Йоазув тӀа бӀаргтасса',
 'talk' => 'Дувцам',
 'views' => 'БӀаргтассамаш',
-'toolbox' => 'Ð\93Ó\80орсаш',
+'toolbox' => 'Ð\93Ó\80ирсаш',
 'userpage' => 'Дакъалаьцачунна оагӀуве бӀаргтасса',
 'projectpage' => 'Хьахьоадайтама оагӀуве бӀаргтасса',
 'imagepage' => 'Паьла оагӀув тӀа бӀаргтасса',
@@ -264,8 +264,6 @@ $messages = array(
 'ok' => 'ХӀаа',
 'retrievedfrom' => '"$1" ГӀувам',
 'youhavenewmessages' => 'Оаш $1 ($2) дӀайийцад',
-'newmessageslink' => 'керда хоамаш',
-'newmessagesdifflink' => 'тӀехьара хувцамаш',
 'youhavenewmessagesmulti' => 'Оаш $1чу керда хоамаш дӀайийцад',
 'editsection' => 'хувца',
 'editold' => 'хувца',
@@ -464,7 +462,7 @@ $messages = array(
 'history-fieldset-title' => 'Искара бӀаргтасса',
 'history-show-deleted' => 'ДӀадаьккхараш мара',
 'histfirst' => 'къаьнараш',
-'histlast' => 'ха яннараш',
+'histlast' => 'кердараш',
 'historyempty' => '(даьсса)',
 
 # Revision feed
@@ -555,7 +553,6 @@ $messages = array(
 # Preferences page
 'preferences' => 'Оттамаш',
 'mypreferences' => 'Оттамаш',
-'prefsnologin' => 'Шо чудаьнна дац',
 'changepassword' => 'КъайладIоaгIа дIахувцар',
 'prefs-skin' => 'БIагала куц',
 'skin-preview' => 'Хьажа',
@@ -864,8 +861,8 @@ $messages = array(
 'contributions' => '{{GENDER:$1|Дакъалаьцархочунна}} къахьегам',
 'contributions-title' => '$1 дакъалаьцархочунна къахьегам',
 'mycontris' => 'Са къахьегам',
-'contribsub2' => '$1 ($2) баь болх',
-'uctop' => '(тIехьара)',
+'contribsub2' => '{{GENDER:$3|$1}} ($2) баь болх',
+'uctop' => '(xIанзара)',
 'month' => 'Цхьа бутт хьалхагIа (кхы хьалхагIа)',
 'year' => 'Цхьа шу хьалхагIа (кхы хьалхагIа):',
 
@@ -1027,7 +1024,7 @@ $messages = array(
 'file-info-size' => '$1 × $2 фихсам, паьла дустам: $3, MIME-тайп: $4',
 'file-nohires' => 'Укхал доккхагIа доржам дац',
 'svg-long-desc' => 'SVG-паьл, $1 × $2 фихелашца, паьла дустам: $3',
-'show-big-image' => 'Ð¥Ñ\8cадоккÑ\85адаÑ\8c сурт',
+'show-big-image' => 'Ð¥Ñ\8cалÑ\85агIаÑ\80а сурт',
 
 # Special:NewFiles
 'noimages' => 'Суртaш бIаргагуш дац.',
index 257c0bc..db812d1 100644 (file)
@@ -337,8 +337,6 @@ Videz [[Special:Version|versiono-pagino]].',
 'ok' => 'O.K.',
 'retrievedfrom' => 'Obtenita de "$1"',
 'youhavenewmessages' => 'Vu havas $1 ($2).',
-'newmessageslink' => 'nova mesaji',
-'newmessagesdifflink' => 'lasta chanjo',
 'youhavenewmessagesmulti' => 'Vu havas nova mesaji ye $1',
 'editsection' => 'redaktar',
 'editold' => 'redaktar',
@@ -691,7 +689,6 @@ Probez prefixizar vua demando kun ''all:'' por serchar omna kontenajo (inkluzant
 'preferences' => 'Preferaji',
 'mypreferences' => 'Preferaji',
 'prefs-edits' => 'Nombro di redaktaji:',
-'prefsnologin' => 'Vu ne eniris',
 'changepassword' => 'Chanjar pasovorto',
 'prefs-skin' => 'Pelo',
 'skin-preview' => 'Pre-videz',
@@ -810,6 +807,7 @@ Ol mustas ne havar plu kam $1 {{PLURAL:$1|litero|literi}}.',
 'recentchanges-label-newpage' => 'Ca redaktajo kreis nova pagino',
 'recentchanges-label-minor' => 'Ica es mikra redaktajo',
 'recentchanges-label-bot' => 'Ta chanjo facita da bot',
+'recentchanges-legend-newpage' => '$1 - nova pagino',
 'rcnote' => "Infre esas la lasta {{PLURAL:$1|'''1''' chanjo|'''$1''' chanji}} dum la lasta {{PLURAL:$2|dio|'''$2''' dii}} ye $5, $4.",
 'rcnotefrom' => "Infre esas la lasta chanji depos '''$2''' (montrita til '''$1''').",
 'rclistfrom' => 'Montrar nova chanji startante de $1',
@@ -1552,4 +1550,9 @@ Vu darfos adjuntar kauso en la rezumo.',
 'searchsuggest-search' => 'Serchez',
 'searchsuggest-containing' => 'quan kontenas...',
 
+# Special:ExpandTemplates
+'expand_templates_output' => 'Rezulto',
+'expand_templates_ok' => 'O.K.',
+'expand_templates_preview' => 'Previdar',
+
 );
index 84e90f8..a5f2b8b 100644 (file)
@@ -139,7 +139,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Elstu_síður' ),
        'Blankpage'                 => array( 'Auð_síða' ),
        'Block'                     => array( 'Banna_vistföng' ),
-       'Blockme'                   => array( 'Banna_mig' ),
        'Booksources'               => array( 'Bókaheimildir' ),
        'BrokenRedirects'           => array( 'Brotnar_tilvísanir' ),
        'Categories'                => array( 'Flokkar' ),
@@ -151,7 +150,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Búa_til_aðgang' ),
        'Deadendpages'              => array( 'Botnlangar' ),
        'DeletedContributions'      => array( 'Eydd_framlög' ),
-       'Disambiguations'           => array( 'Tenglar_í_aðgreiningarsíður' ),
        'DoubleRedirects'           => array( 'Tvöfaldar_tilvísanir' ),
        'EditWatchlist'             => array( 'Breyta_vaktlista' ),
        'Emailuser'                 => array( 'Senda_tölvupóst' ),
@@ -507,8 +505,6 @@ Sjá [[Special:Version|útgáfusíðuna]].',
 'ok' => 'Í lagi',
 'retrievedfrom' => 'Sótt frá „$1“',
 'youhavenewmessages' => 'Þú hefur fengið $1 ($2).',
-'newmessageslink' => 'ný skilaboð',
-'newmessagesdifflink' => 'síðasta breyting',
 'youhavenewmessagesfromusers' => 'Þú hefur $1 frá {{PLURAL:$3|öðrum notanda|$3 notendum}} ($2)',
 'youhavenewmessagesmanyusers' => 'Þú hefur $1 frá mörgum notendum ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ein|}} ný skilaboð',
@@ -1356,7 +1352,6 @@ Athugaðu að skrár þeirra yfir {{SITENAME}}-efni kunna að vera úreltar.',
 'preferences' => 'Stillingar',
 'mypreferences' => 'Mínar stillingar',
 'prefs-edits' => 'Fjöldi breytinga:',
-'prefsnologin' => 'Ekki innskráður',
 'changepassword' => 'Breyta lykilorði',
 'prefs-skin' => 'Þema',
 'skin-preview' => 'Forskoða',
@@ -1652,6 +1647,7 @@ Tölvupóstfang þitt er ekki gefið upp þegar aðrir notendur hafa samband vi
 'recentchanges-label-minor' => 'Þetta er minniháttar breyting',
 'recentchanges-label-bot' => 'Þessi breytingar var gerð af vélmenni',
 'recentchanges-label-unpatrolled' => 'Þessi breyting hefur ekki verið yfirfarin',
+'recentchanges-legend-newpage' => '$1 - ný síða',
 'rcnote' => "Að neðan {{PLURAL:$1|er '''1''' breyting|eru síðustu '''$1''' breytingar}} síðast {{PLURAL:$2|liðinn dag|liðna '''$2''' daga}}, frá $5, $4.",
 'rcnotefrom' => "Að neðan eru breytingar síðan '''$2''' (allt að '''$1''' sýndar).",
 'rclistfrom' => 'Sýna breytingar frá og með $1',
@@ -3711,6 +3707,9 @@ Vinsamlegast staðfestu að þú viljir endurvekja hana.',
 'confirm-unwatch-button' => 'Í lagi',
 'confirm-unwatch-top' => 'Fjarlægja þessa síðu af vaktlistanum þínum?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '„$1”',
+
 # Multipage image navigation
 'imgmultipageprev' => '← fyrri síða',
 'imgmultipagenext' => 'næsta síða →',
@@ -4024,4 +4023,12 @@ Ef ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemd
 'limitreport-walltime' => 'Rauntímanotkun',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekúnda|sekúndur}}',
 
+# Special:ExpandTemplates
+'expand_templates_input' => 'Inntakstexti:',
+'expand_templates_output' => 'Útkoma',
+'expand_templates_xml_output' => 'XML-úttak',
+'expand_templates_ok' => 'Í lagi',
+'expand_templates_remove_comments' => 'Fjarlægja athugasemdir',
+'expand_templates_preview' => 'Forskoða',
+
 );
index 06ef669..107d65b 100644 (file)
@@ -121,7 +121,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'TitoloErrato' ),
        'Blankpage'                 => array( 'PaginaVuota' ),
        'Block'                     => array( 'Blocca' ),
-       'Blockme'                   => array( 'BloccaProxy' ),
        'Booksources'               => array( 'RicercaISBN' ),
        'BrokenRedirects'           => array( 'RedirectErrati' ),
        'Categories'                => array( 'Categorie' ),
@@ -133,10 +132,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'CreaAccount' ),
        'Deadendpages'              => array( 'PagineSenzaUscita' ),
        'DeletedContributions'      => array( 'ContributiCancellati' ),
-       'Disambiguations'           => array( 'Disambigua' ),
        'DoubleRedirects'           => array( 'RedirectDoppi' ),
        'EditWatchlist'             => array( 'ModificaOsservati', 'ModificaOsservatiSpeciali', 'ModificaListaSeguiti' ),
        'Emailuser'                 => array( 'InviaEMail' ),
+       'ExpandTemplates'           => array( 'EspandiTemplate' ),
        'Export'                    => array( 'Esporta' ),
        'Fewestrevisions'           => array( 'PagineConMenoRevisioni' ),
        'FileDuplicateSearch'       => array( 'CercaFileDuplicati' ),
@@ -180,6 +179,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'PagineProtette' ),
        'Protectedtitles'           => array( 'TitoliProtetti' ),
        'Randompage'                => array( 'PaginaCasuale' ),
+       'RandomInCategory'          => array( 'CasualeInCategoria' ),
        'Randomredirect'            => array( 'RedirectCasuale' ),
        'Recentchanges'             => array( 'UltimeModifiche' ),
        'Recentchangeslinked'       => array( 'ModificheCorrelate' ),
@@ -201,8 +201,9 @@ $specialPageAliases = array(
        'Unusedtemplates'           => array( 'TemplateNonUsati' ),
        'Unwatchedpages'            => array( 'PagineNonOsservate' ),
        'Upload'                    => array( 'Carica' ),
-       'Userlogin'                 => array( 'Entra', 'Login' ),
-       'Userlogout'                => array( 'Esci', 'Logout' ),
+       'UploadStash'               => array( 'CodaCaricamenti' ),
+       'Userlogin'                 => array( 'Entra' ),
+       'Userlogout'                => array( 'Esci' ),
        'Userrights'                => array( 'PermessiUtente' ),
        'Version'                   => array( 'Versione' ),
        'Wantedcategories'          => array( 'CategorieRichieste' ),
@@ -564,12 +565,10 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Estratto da "$1"',
 'youhavenewmessages' => 'Hai $1 ($2).',
-'newmessageslink' => 'nuovi messaggi',
-'newmessagesdifflink' => 'ultima modifica',
 'youhavenewmessagesfromusers' => 'Hai $1 da {{PLURAL:$3|un altro utente|$3 utenti}} ($2).',
 'youhavenewmessagesmanyusers' => 'Hai $1 da molti utenti ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|un nuovo messaggio|nuovi messaggi}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|ultima modifica|ultime modifiche}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un nuovo messaggio|999=nuovi messaggi}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ultima modifica|999=ultime modifiche}}',
 'youhavenewmessagesmulti' => 'Hai nuovi messaggi su $1',
 'editsection' => 'modifica',
 'editold' => 'modifica',
@@ -794,7 +793,7 @@ Assicurati di avere attivato i cookie, ricarica questa pagina e riprova.",
 'passwordtooshort' => 'Le password devono contenere almeno {{PLURAL:$1|1 carattere|$1 caratteri}}.',
 'password-name-match' => 'La password deve essere diversa dal nome utente.',
 'password-login-forbidden' => "L'uso di questo nome utente e password è stato proibito.",
-'mailmypassword' => 'Invia una nuova password al mio indirizzo e-mail',
+'mailmypassword' => 'Invia una nuova password al mio indirizzo email',
 'passwordremindertitle' => 'Servizio Password Reminder di {{SITENAME}}',
 'passwordremindertext' => 'Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l\'invio di una nuova password di accesso a {{SITENAME}} ($4).
 Una password temporanea per l\'utente "$2" è stata impostata a "$3".
@@ -1397,7 +1396,6 @@ I dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{
 'preferences' => 'Preferenze',
 'mypreferences' => 'preferenze',
 'prefs-edits' => 'Modifiche effettuate:',
-'prefsnologin' => 'Accesso non effettuato',
 'prefsnologintext2' => "Si prega di $1 per impostare le preferenze dell'utente.",
 'changepassword' => 'Cambia password',
 'prefs-skin' => 'Aspetto grafico (skin)',
@@ -1696,6 +1694,9 @@ Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
 'recentchanges-label-minor' => 'Questa è una modifica minore',
 'recentchanges-label-bot' => 'Questa modifica è stata effettuata da un bot',
 'recentchanges-label-unpatrolled' => 'Questa modifica non è stata ancora verificata',
+'recentchanges-label-plusminus' => 'La dimensione della pagina è cambiata di questo numero di byte',
+'recentchanges-legend-newpage' => "(vedi anche [[Special:NewPages|l'elenco delle nuove pagine]])",
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "Di seguito {{PLURAL:$1|è elencata la modifica più recente apportata|sono elencate le '''$1''' modifiche più recenti apportate}} al sito {{PLURAL:$2|nelle ultime 24 ore|negli scorsi '''$2''' giorni}}; i dati sono aggiornati alle $5 del $4.",
 'rcnotefrom' => "Di seguito sono elencate le modifiche apportate a partire da '''$2''' (fino a '''$1''').",
 'rclistfrom' => 'Mostra le modifiche apportate a partire da $1',
@@ -2318,9 +2319,9 @@ Potrebbero esserci [[{{MediaWiki:Listgrouprights-helppage}}|ulteriori informazio
 'mailnologin' => 'Nessun indirizzo cui inviare il messaggio',
 'mailnologintext' => 'Per inviare messaggi e-mail ad altri utenti è necessario [[Special:UserLogin|accedere al sito]] e aver registrato un indirizzo valido nelle proprie [[Special:Preferences|preferenze]].',
 'emailuser' => "Scrivi all'utente",
-'emailuser-title-target' => 'Invia una e-mail a questo {{GENDER:$1|utente}}',
-'emailuser-title-notarget' => 'Invia una e-mail a un utente',
-'emailpage' => "Invia un messaggio e-mail all'utente",
+'emailuser-title-target' => 'Invia una email a questo {{GENDER:$1|utente}}',
+'emailuser-title-notarget' => 'Invia una email a un utente',
+'emailpage' => "Invia un messaggio email all'utente",
 'emailpagetext' => 'Usare il modulo sottostante per inviare un messaggio e-mail all\'{{GENDER:$1|utente}} indicato. L\'indirizzo specificato nelle [[Special:Preferences|preferenze]] del mittente apparirà nel campo "Da:" del messaggio per consentire al destinatario di rispondere direttamente.',
 'usermailererror' => "L'oggetto mail ha restituito l'errore:",
 'defemailsubject' => 'Messaggio da {{SITENAME}} dall\'utente "$1"',
@@ -2344,7 +2345,7 @@ Potrebbero esserci [[{{MediaWiki:Listgrouprights-helppage}}|ulteriori informazio
 'emailccsubject' => 'Copia del messaggio inviato a $1: $2',
 'emailsent' => 'Messaggio inviato',
 'emailsenttext' => 'Il messaggio e-mail è stato inviato.',
-'emailuserfooter' => 'Questa e-mail è stata inviata da $1 a $2 attraverso la funzione "Invia un messaggio e-mail all\'utente" su {{SITENAME}}.',
+'emailuserfooter' => 'Questa email è stata inviata da $1 a $2 attraverso la funzione "Invia un messaggio email all\'utente" su {{SITENAME}}.',
 
 # User Messenger
 'usermessage-summary' => 'Messaggio di sistema',
@@ -2678,7 +2679,7 @@ Indicare il motivo specifico per il quale si procede al blocco (per esempio, cit
 ** Nome utente non consono',
 'ipb-hardblock' => 'Impedisci agli utenti registrati di contribuire da questo indirizzo IP',
 'ipbcreateaccount' => 'Impedisci la registrazione',
-'ipbemailban' => "Impedisci all'utente l'invio di e-mail",
+'ipbemailban' => "Impedisci all'utente l'invio di email",
 'ipbenableautoblock' => "Blocca automaticamente l'ultimo indirizzo IP usato dall'utente e i successivi con cui vengono tentate modifiche",
 'ipbsubmit' => "Blocca l'utente",
 'ipbother' => 'Durata non in elenco:',
@@ -3040,7 +3041,7 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'tooltip-feed-rss' => 'Feed RSS per questa pagina',
 'tooltip-feed-atom' => 'Feed Atom per questa pagina',
 'tooltip-t-contributions' => 'Lista dei contributi di questo utente',
-'tooltip-t-emailuser' => 'Invia un messaggio e-mail a questo utente',
+'tooltip-t-emailuser' => 'Invia un messaggio email a questo utente',
 'tooltip-t-upload' => 'Carica file multimediali',
 'tooltip-t-specialpages' => 'Lista di tutte le pagine speciali',
 'tooltip-t-print' => 'Versione stampabile di questa pagina',
@@ -3704,7 +3705,7 @@ I collegamenti successivi, sulla stessa riga, sono considerati come eccezioni (o
 'confirmemail_pending' => "Il codice di conferma è già stato spedito via posta elettronica; se l'account è stato
 creato di recente, si prega di attendere l'arrivo del codice per qualche minuto prima
 di tentare di richiederne uno nuovo.",
-'confirmemail_send' => 'Invia un codice di conferma via e-mail.',
+'confirmemail_send' => 'Invia un codice di conferma via email.',
 'confirmemail_sent' => 'Messaggio e-mail di conferma inviato.',
 'confirmemail_oncreate' => "Un codice di conferma è stato spedito all'indirizzo
 di posta elettronica indicato. Il codice non è necessario per accedere al sito,
@@ -4141,4 +4142,21 @@ Esempi: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revi
 'limitreport-expansiondepth' => 'Massima profondità di espansione',
 'limitreport-expensivefunctioncount' => 'Numero funzioni parser dispendiose',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Espansione dei template',
+'expand_templates_intro' => 'Questa pagina speciale elabora un testo espandendo tutti i template presenti.
+Calcola inoltre il risultato delle funzioni supportate dal parser come
+<code><nowiki>{{</nowiki>#language:…}}</code> e delle variabili di sistema quali
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>,
+vale a dire praticamente tutto ciò che si trova tra doppie parentesi graffe.',
+'expand_templates_title' => 'Contesto (per {{FULLPAGENAME}} ecc.):',
+'expand_templates_input' => 'Testo da espandere:',
+'expand_templates_output' => 'Risultato',
+'expand_templates_xml_output' => 'Output in formato XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Ignora i commenti',
+'expand_templates_remove_nowiki' => 'Elimina il tag <nowiki> nel risultato',
+'expand_templates_generate_xml' => 'Mostra albero sintattico XML',
+'expand_templates_preview' => 'Anteprima',
+
 );
index aaca932..650df9e 100644 (file)
@@ -120,7 +120,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( '不正なページ名' ),
        'Blankpage'                 => array( '白紙ページ' ),
        'Block'                     => array( '投稿ブロック', 'ブロック' ),
-       'Blockme'                   => array( '自己ブロック' ),
        'Booksources'               => array( '文献資料', '書籍情報源' ),
        'BrokenRedirects'           => array( '迷子のリダイレクト', '壊れたリダイレクト' ),
        'Categories'                => array( 'カテゴリ', 'カテゴリ一覧' ),
@@ -132,10 +131,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'アカウント作成', 'アカウントの作成' ),
        'Deadendpages'              => array( '有効なページへのリンクがないページ', '行き止まりページ' ),
        'DeletedContributions'      => array( '削除された投稿記録', '削除された投稿履歴', '削除歴' ),
-       'Disambiguations'           => array( '曖昧さ回避のページ', '曖昧さ回避' ),
        'DoubleRedirects'           => array( '二重リダイレクト', '二重転送' ),
        'EditWatchlist'             => array( 'ウォッチリストの編集', 'ウォッチリスト編集' ),
        'Emailuser'                 => array( 'メール送信', 'ウィキメール' ),
+       'ExpandTemplates'           => array( 'テンプレートを展開' ),
        'Export'                    => array( 'データ書き出し', 'データー書き出し', 'エクスポート' ),
        'Fewestrevisions'           => array( '編集履歴の少ないページ', '版の少ない項目', '版の少ないページ' ),
        'FileDuplicateSearch'       => array( '重複ファイル検索' ),
@@ -180,10 +179,12 @@ $specialPageAliases = array(
        'Protectedpages'            => array( '保護されているページ' ),
        'Protectedtitles'           => array( '作成保護されているページ名' ),
        'Randompage'                => array( 'おまかせ表示' ),
+       'RandomInCategory'          => array( 'カテゴリ内おまかせ表示', 'カテゴリ中のランダムなページ' ),
        'Randomredirect'            => array( 'おまかせリダイレクト', 'おまかせ転送' ),
        'Recentchanges'             => array( '最近の更新', '最近更新したページ' ),
        'Recentchangeslinked'       => array( '関連ページの更新状況', 'リンク先の更新状況' ),
        'Redirect'                  => array( '転送', 'リダイレクト' ),
+       'ResetTokens'               => array( 'トークンの再設定' ),
        'Revisiondelete'            => array( '版指定削除', '特定版削除' ),
        'Search'                    => array( '検索' ),
        'Shortpages'                => array( '短いページ' ),
@@ -642,12 +643,10 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => '「$1」から取得',
 'youhavenewmessages' => '$1があります ($2)。',
-'newmessageslink' => '新着メッセージ',
-'newmessagesdifflink' => '最新の差分',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|他の利用者|$3 人の利用者}}からの$1があります ($2)。',
 'youhavenewmessagesmanyusers' => '多数の利用者からの$1があります ($2)。',
 'newmessageslinkplural' => '{{PLURAL:$1|新着メッセージ}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|最新の差分|最新版までの差分}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|最新の差分|999=最新版までの差分}}',
 'youhavenewmessagesmulti' => '$1に新着メッセージがあります',
 'editsection' => '編集',
 'editold' => '編集',
@@ -865,9 +864,9 @@ $2',
 {{SITENAME}}では利用者のログインに Cookie を使用します。
 ご使用のブラウザーでは Cookie が無効になっています。
 Cookie を有効にしてから、新しい利用者名とパスワードでログインしてください。',
-'nocookieslogin' => '{{SITENAME}}ではログインにCookieを使用します。
-Cookieを無効にしているようです。
-Cookieを有効にしてから、もう一度試してください。',
+'nocookieslogin' => '{{SITENAME}}ではログインに Cookie を使用します。
+Cookie を無効にしているようです。
+Cookie を有効にしてから、もう一度試してください。',
 'nocookiesfornew' => '発信元を確認できなかったため、アカウントは作成されませんでした。
 Cookieを有効にしていることを確認して、このページを再読込してもう一度試してください。',
 'nocookiesforlogin' => '{{int:nocookieslogin}}',
@@ -1535,7 +1534,6 @@ $1",
 'preferences' => '個人設定',
 'mypreferences' => '個人設定',
 'prefs-edits' => '編集回数:',
-'prefsnologin' => 'ログインしていません',
 'prefsnologintext2' => '個人設定を変更するには$1してください。',
 'changepassword' => 'パスワードの変更',
 'prefs-skin' => '外装',
@@ -1842,6 +1840,9 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'recentchanges-label-minor' => 'これは細部の編集です',
 'recentchanges-label-bot' => 'この編集はボットによって行われました',
 'recentchanges-label-unpatrolled' => 'この編集はまだ巡回されていません',
+'recentchanges-label-plusminus' => 'ページ サイズの増減 (バイト単位)',
+'recentchanges-legend-newpage' => '([[Special:NewPages|新しいページ一覧]]も参照してください)',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "$4 $5 までの{{PLURAL:$2|'''$2'''日間}}になされた{{PLURAL:$1|'''$1'''件の変更}}は以下の通りです。",
 'rcnotefrom' => "以下は'''$2'''以降の更新です (最大 '''$1''' 件)。",
 'rclistfrom' => '$1以降の更新を表示する',
@@ -4087,6 +4088,7 @@ $5
 'pipe-separator' => '&#32;|&#32;',
 'word-separator' => '&#32;',
 'parentheses' => '($1)',
+'quotation-marks' => '「$1」',
 
 # Multipage image navigation
 'imgmultipageprev' => '&larr;前ページ',
@@ -4502,4 +4504,20 @@ MediaWikiは、有用であることを期待して配布されていますが
 'limitreport-expansiondepth' => '展開の最大深さ',
 'limitreport-expensivefunctioncount' => '高負荷パーサー関数の数',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'テンプレートを展開',
+'expand_templates_intro' => 'この特別ページは、入力したテキストに含まれるすべてのテンプレートを再帰的に展開します。
+<code><nowiki>{{</nowiki>#language:…}}</code> のようなパーサー関数や、
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code> のような変数も展開します。
+つまり、二重中括弧で囲まれたものほぼすべてを展開します。',
+'expand_templates_title' => '{{FULLPAGENAME}} などで使用するページ名:',
+'expand_templates_input' => '展開するテキスト:',
+'expand_templates_output' => '展開結果',
+'expand_templates_xml_output' => 'XML 出力',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'コメントを除去',
+'expand_templates_remove_nowiki' => '結果に含まれる <nowiki> タグを表示しない',
+'expand_templates_generate_xml' => 'XML 構文解析ツリーを表示',
+'expand_templates_preview' => 'プレビュー',
+
 );
index 8e7a041..eb674e9 100644 (file)
@@ -270,8 +270,6 @@ Si [[Special:Version|voerjan piej]].',
 'ok' => 'OK',
 'retrievedfrom' => 'Richriiv frahn "$1"',
 'youhavenewmessages' => 'Yu gat $1 ($2).',
-'newmessageslink' => 'nyuu mechiz',
-'newmessagesdifflink' => 'laas chienj',
 'youhavenewmessagesmulti' => 'Yu gat nyuu mechiz pahn $1',
 'editsection' => 'edit',
 'editold' => 'edit',
index 818acc5..07f6c36 100644 (file)
@@ -315,8 +315,6 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Sumber artikel iki saka kaca situs web: "$1"',
 'youhavenewmessages' => 'Panjenengan kagungan $1 ($2).',
-'newmessageslink' => 'warta énggal',
-'newmessagesdifflink' => 'mirsani bédané saka révisi sadurungé',
 'youhavenewmessagesfromusers' => 'Sampéyan nduwé $1 saka  {{PLURAL:$3|panganggo liya|$3 panganggo}} ($2).',
 'youhavenewmessagesmanyusers' => 'Sampéyang nduwé $1 saka akèh panganggo ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|layang anyar|layang anyar}}',
@@ -1064,7 +1062,6 @@ Rinciané bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'preferences' => 'Preferensi (pilihan)',
 'mypreferences' => 'Préferènsi',
 'prefs-edits' => 'Gunggungé suntingan:',
-'prefsnologin' => 'Durung mlebu log',
 'changepassword' => 'Ganti tembung sandi',
 'prefs-skin' => 'Kulit',
 'skin-preview' => 'Pratilik',
@@ -1339,6 +1336,7 @@ Alamat layang èlèktronik Sampéyan ora dituduhaké nalika wong liya ngubungi S
 'recentchanges-label-minor' => 'Iki suntingan sithik',
 'recentchanges-label-bot' => 'Suntingan iki diayahi déning bot',
 'recentchanges-label-unpatrolled' => 'Suntingan iki durung dipatroli',
+'recentchanges-legend-newpage' => '$1 - kaca anyar',
 'rcnote' => 'Ing ngisor iki kapacak {{PLURAL:$1|pangowahan|owah-owahan}} pungkasan ing  <strong>$2</strong> dina pungkasan ing $5, $4.',
 'rcnotefrom' => 'Ing ngisor iki owah-owahan wiwit <strong>$2</strong> (kapacak nganti <strong>$1</strong> owah-owahan).',
 'rclistfrom' => 'Saiki nuduhaké owah-owahan wiwit tanggal $1',
@@ -3662,4 +3660,21 @@ Utawa, Sampéyan bisa nganggo pormulir gampang ngisor. Tanggepan Sampéyan bakal
 # Image rotation
 'rotate-comment' => 'Gambar diubengaké $1 {{PLURAL:$1|drajat|drajat}} sak arah domé jam',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Cithakan dikembangaké',
+'expand_templates_intro' => 'Kaca astaméwa iki njupuk sawetara tèks lan ngembangaké kabèh cithakan sajroning iku sacara rékursif.
+Kaca iki uga ngembangaké fungsi parser kaya ta
+<nowiki>{{</nowiki>#language:…}}, lan variabel kaya ta
+<nowiki>{{</nowiki>CURRENTDAY}}&mdash;sajatiné mèh kabèh sing ana ing antara rong tandha kurung akolade.
+Perkara iki dilakokaké caranémawa nyeluk tahapan parser sing rélévan saka MediaWiki dhéwé.',
+'expand_templates_title' => 'Irah-irahan kontèks, kanggo {{FULLPAGENAME}} lan sabanjuré:',
+'expand_templates_input' => 'Tèks sumber:',
+'expand_templates_output' => 'Pituwas (kasil)',
+'expand_templates_xml_output' => 'Pituwas XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Busaken komentar',
+'expand_templates_remove_nowiki' => 'Brèdèl tag <nowiki> nèng asilé',
+'expand_templates_generate_xml' => 'Tuduhna uwit parser XML',
+'expand_templates_preview' => 'Pratayang',
+
 );
index b8bd501..a9b5b32 100644 (file)
@@ -66,7 +66,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'ცუდი_სათაური' ),
        'Blankpage'                 => array( 'ცარიელი_გვერდი' ),
        'Block'                     => array( 'დაბლოკვა' ),
-       'Blockme'                   => array( 'დამბლოკე' ),
        'BrokenRedirects'           => array( 'გაწყვეტილი_გადამისამართება' ),
        'Categories'                => array( 'კატეგორიები' ),
        'ChangeEmail'               => array( 'ელ-ფოსტის_შეცვლა' ),
@@ -75,7 +74,6 @@ $specialPageAliases = array(
        'Confirmemail'              => array( 'ელ-ფოსტის_დადასტურება' ),
        'Contributions'             => array( 'წვლილი' ),
        'CreateAccount'             => array( 'ანგარიშის_შექმნა' ),
-       'Disambiguations'           => array( 'მრავალმნიშვნელოვნება' ),
        'DoubleRedirects'           => array( 'ორმაგი_გადამისამართება' ),
        'EditWatchlist'             => array( 'კონტროლის_სიის_რედაქტირება' ),
        'Emailuser'                 => array( 'მიწერა_მომხმარებელს' ),
@@ -447,8 +445,6 @@ $1',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'მოძიებულია „$1“-დან',
 'youhavenewmessages' => 'თქვენ გაქვთ $1 ($2).',
-'newmessageslink' => 'ახალი შეტყობინებები',
-'newmessagesdifflink' => 'განსხვავება წინა ვერსიასთან',
 'youhavenewmessagesfromusers' => 'თქვენ გაქვთ $1 {{PLURAL:$3|სხვა მომხმარებლისგან|$3 მომხმარებლებისგან}} ($2).',
 'youhavenewmessagesmanyusers' => 'თქვენ გაქვთ $1 ბევრი მომხმარებლისგან ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ახალი შეტყობინება|ახალი შეტყობინება}}',
@@ -1163,7 +1159,7 @@ $1",
 'revdelete-show-no-access' => 'ჩანაწერის გახსნის შეცდომა $2-დან, $1: ეს ჩანაწერი მონიშნულია როგორც «შეზღუდული». თქვენ მას ვერ იხილავთ.',
 'revdelete-modify-no-access' => 'ჩანაწერის გასწორების შეცდომა $2-დან, $1: ეს ჩანაწერი მონიშნულია როგორც «შეზღუდული». თქვენ მას ვერ იხილავთ.',
 'revdelete-modify-missing' => 'შეცდომა ID $1 ნაწეის რედაქტირებისას, იგი არ იმყოფება მონაცემთა ბაზაში!',
-'revdelete-no-change' => "'''ყურადღება:''' ჩანაწერს $2, $1 უკვე ავს მოთხოვნილი ხილვადობის კონფიგურაცია.",
+'revdelete-no-change' => "'''á\83§á\83£á\83 á\83\90á\83\93á\83¦á\83\94á\83\91á\83\90:''' á\83©á\83\90á\83\9cá\83\90á\83¬á\83\94á\83 á\83¡ $2, $1 á\83£á\83\99á\83\95á\83\94 á\83\90á\83¥á\83\95á\83¡ á\83\9bá\83\9dá\83\97á\83®á\83\9dá\83\95á\83\9cá\83\98á\83\9aá\83\98 á\83®á\83\98á\83\9aá\83\95á\83\90á\83\93á\83\9dá\83\91á\83\98á\83¡ á\83\99á\83\9dá\83\9cá\83¤á\83\98á\83\92á\83£á\83 á\83\90á\83ªá\83\98á\83\90.",
 'revdelete-concurrent-change' => 'შეცდომა ჩანაწერის შესწორებისას $2-დან, $1: მისი სტატუსი უკვე შეცვლილია სხვა ვინმეს მიერ თქვენი რედაქირეის სესიის დროს.
 თხოვთ შეამოწმოთ ყველა ჟღნალი',
 'revdelete-only-restricted' => 'თქვენ ვერ დამალავთ ჩანაწერს ($2 $1) ადმინისტრატორისგან მანამ, სანამ არ აირჩევთ დამალვის სხვა პარამეტრებს.',
@@ -1295,7 +1291,6 @@ $1",
 'preferences' => 'კონფიგურაცია',
 'mypreferences' => 'კონფიგურაცია',
 'prefs-edits' => 'რედაქციების რაოდენობა:',
-'prefsnologin' => 'შესული არ ხართ',
 'changepassword' => 'პაროლის შეცვლა',
 'prefs-skin' => 'გარეკანი',
 'skin-preview' => 'წინასწარი გადახედვა',
@@ -1588,6 +1583,7 @@ $1",
 'recentchanges-label-minor' => 'ეს არის მცირე შესწორება',
 'recentchanges-label-bot' => 'ეს არის ბოტის რედაქტირება',
 'recentchanges-label-unpatrolled' => 'ეს რედაქტირება გადაუმოწმებელია',
+'recentchanges-legend-newpage' => '$1 - ახალი გვერდი',
 'rcnote' => "ქვემოთ იხილეთ ბოლო '''$1''' ცვლილება უკანასკნელი '''$2''' დღის მანძილზე, $5, $4 მდგომარეობით.",
 'rcnotefrom' => "ქვემოთ მოყვანილია ცვლილებები '''$2'''-დან (ნაჩვენებია '''$1''').",
 'rclistfrom' => 'ახალი ცვლილებების ჩვენება დაწყებული $1-დან',
@@ -1994,7 +1990,7 @@ $1',
 'statistics-pages' => 'გვერდები',
 'statistics-pages-desc' => 'ვიკის ყველა გვერდი, განხილვის, გადამისამართების და სხვ. ჩათვლით.',
 'statistics-files' => 'ატვირთული ფაილები',
-'statistics-edits' => 'á\83\92á\83\95á\83\94á\83 á\83\93á\83\98á\83¡ á\83¨á\83\94á\83¡á\83¬á\83\9dá\83 á\83\94á\83\91á\83\94á\83\91á\83\98 á\83\9eá\83 á\83\9dá\83\94á\83¥á\83¢á\83\98á\83¡ {{SITENAME}} á\83¨á\83\94á\83¥á\83\9bá\83\9cá\83\98á\83¡ á\83¨á\83\94á\83\9bá\83\93á\83\94á\83\92',
+'statistics-edits' => 'á\83\92á\83\95á\83\94á\83 á\83\93á\83\98á\83¡ á\83¨á\83\94á\83¡á\83¬á\83\9dá\83 á\83\94á\83\91á\83\94á\83\91á\83\98 á\83\9bá\83\90á\83¡ á\83¨á\83\94á\83\9bá\83\93á\83\94á\83\92 á\83 á\83\90á\83ª á\83¨á\83\94á\83\98á\83¥á\83\9bá\83\9cá\83\90 á\83\9eá\83 á\83\9dá\83\94á\83¥á\83¢á\83\98 {{SITENAME}}',
 'statistics-edits-average' => 'რედაქტირების საერთო რაოდენობა გვერდზე',
 'statistics-views-total' => 'სულ ხილვა',
 'statistics-views-total-desc' => 'სათვალავში არ მიიღება არარსებული და სამუშაო გვერდების გადახედვა',
@@ -4102,4 +4098,15 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|ბაიტი}}',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|ბაიტი}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'გაშლილი თარგები',
+'expand_templates_title' => 'კონტექსტის სათაური, {{FULLPAGENAME}}-სთვის და ა.შ.:',
+'expand_templates_input' => 'შესაყვანი ტექსტი:',
+'expand_templates_output' => 'შედეგი',
+'expand_templates_xml_output' => 'XML-ის გამოტანა',
+'expand_templates_ok' => 'შესრულება',
+'expand_templates_remove_comments' => 'კომენტარების წაშლა',
+'expand_templates_remove_nowiki' => 'ტეგების დათრგუნვა <nowiki> შედეგში',
+'expand_templates_preview' => 'წინა',
+
 );
index 67a0e57..d519ac2 100644 (file)
@@ -54,7 +54,6 @@ $specialPageAliases = array(
        'Categories'                => array( 'Kategoriyalar' ),
        'Contributions'             => array( 'Paydalanıwshı u\'lesi' ),
        'Deadendpages'              => array( 'Hesh betke siltemeytug\'ın betler' ),
-       'Disambiguations'           => array( 'Ko\'p ma\'nisliler' ),
        'DoubleRedirects'           => array( 'Qos burıwshılar' ),
        'Emailuser'                 => array( 'Xat jiberiw' ),
        'Export'                    => array( 'Eksport' ),
@@ -385,8 +384,6 @@ $messages = array(
 'ok' => 'OK',
 'retrievedfrom' => '"$1" saytınan alıng\'an',
 'youhavenewmessages' => 'Sizge $1 bar ($2).',
-'newmessageslink' => "jan'a xabarlar",
-'newmessagesdifflink' => "aqırg'ı o'zgeris",
 'youhavenewmessagesmulti' => "$1 betinde sizge jan'a xabarlar bar",
 'editsection' => "o'zgertiw",
 'editold' => "o'zgertiw",
@@ -849,7 +846,6 @@ Barlıq mag'lıwmat tu'rin (sonın' ishinde sa'wbet betlerdi, shablonlardı h.t.
 'preferences' => 'Sazlawlar',
 'mypreferences' => "Menin' sazlawlarım",
 'prefs-edits' => "O'zgertiwler sanı:",
-'prefsnologin' => 'Kirilmegen',
 'changepassword' => "Paroldi o'zgertiw",
 'prefs-skin' => "Sırtqı ko'rinis",
 'skin-preview' => 'Korip al',
@@ -1037,6 +1033,7 @@ Barlıq mag'lıwmat tu'rin (sonın' ishinde sa'wbet betlerdi, shablonlardı h.t.
 'recentchanges-label-minor' => "Bul kishi o'zgeris",
 'recentchanges-label-bot' => "Bul o'zgeristi bot kiritti",
 'recentchanges-label-unpatrolled' => "Bul o'zgeris ele baqlanbag'an",
+'recentchanges-legend-newpage' => '$1 - taza bet',
 'rcnote' => "To'mende $4, $5 waqtındag'ı aqırg'ı {{PLURAL:$2|ku'ndegi|'''$2''' ku'ndegi}} {{PLURAL:$1|'''1''' o'zgeris ko'rsetilgen|aqırg'ı '''$1''' o'zgeris ko'rsetilgen}}.",
 'rcnotefrom' => "To'mende '''$2''' baslap '''$1''' shekemgi o'zgerisler ko'rsetilgen.",
 'rclistfrom' => "$1 waqtınan baslap jan'a o'zgerisler ko'rset",
index c0defe4..ec45e1d 100644 (file)
@@ -300,8 +300,6 @@ $1',
 'ok' => 'Seɣbel',
 'retrievedfrom' => 'Yettwaddem seg "$1"',
 'youhavenewmessages' => 'Ɣur-k $1 ($2).',
-'newmessageslink' => 'Izen amaynut',
-'newmessagesdifflink' => 'Abeddel aneggaru',
 'youhavenewmessagesfromusers' => 'Tesɛiḍ $1 n {{PLURAL:$3|useqdac nniḍen|$3 iseqdacen nniḍen}} ( $2 ).',
 'youhavenewmessagesmanyusers' => 'Tesɛiḍ $1 n aṭas n iseqdacen ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|izen amaynut|inzan imaynuten}}',
@@ -1045,7 +1043,6 @@ Tzemreḍ ad affeḍ tilɣa deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPA
 'preferences' => 'Isemyifiyen',
 'mypreferences' => 'Isemyifiyen inu',
 'prefs-edits' => 'Amḍan n ibeddlilen :',
-'prefsnologin' => 'Ur tekcimeḍ ara',
 'changepassword' => 'Beddel awal n tbaḍnit',
 'prefs-skin' => 'Aglim',
 'skin-preview' => 'Pre-timeẓriwt',
index f60e227..d96e86b 100644 (file)
@@ -310,8 +310,6 @@ $1',
 'ok' => 'ОК',
 'retrievedfrom' => 'Къыздырахар: "$1"',
 'youhavenewmessages' => 'КъыпхуэкӀуауэ уиӀэ $1 ($2).',
-'newmessageslink' => 'тхыгъэщIэхэр',
-'newmessagesdifflink' => 'иужьрей зэхъуэкІыныгъэр',
 'youhavenewmessagesmulti' => 'КъыпхуэкӀуауэ уиӀэ тхыгъэщӀэхэр $1 идеж',
 'editsection' => 'гъэтэрэзын',
 'editold' => 'гъэтэрэзын',
@@ -970,7 +968,6 @@ $1",
 'preferences' => 'Зэгъэзэхуэпхъэхэр',
 'mypreferences' => 'Си зэгъэзэхуэгъуэхэр',
 'prefs-edits' => 'Гъэтэрэзыгъуэхэм я бжыгъэр:',
-'prefsnologin' => 'Системэм зыкъебгъэцӀыхуакъым',
 'prefs-skin' => 'ЗэфӀэгъувэным и теухуапхъэ',
 'prefs-datetime' => 'Махуэмрэ зэманымрэ',
 'prefs-personal' => 'Ныбжыгъуэ къэӀохугъуэ',
index 8277cb3..f4efb63 100644 (file)
 $fallback = 'ur';
 $rtl = true;
 
+$namespaceNames = array(
+       NS_MAIN             => '',
+       NS_MEDIA            => 'میڈیا',
+       NS_SPECIAL          => 'خاص',
+       NS_TALK             => 'مشقولگی',
+       NS_USER             => 'ممبار/یوزر',
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'ربطو خط کشیدگی',
@@ -269,8 +277,6 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => '‘‘$1’’ نقل کاردو',
 'youhavenewmessages' => 'تہ بچے ای $1 شیر۔ ($2)',
-'newmessageslink' => 'نوغ پیغامات',
-'newmessagesdifflink' => 'تـجـدیـد مـاقـبل آخـراری فـرق',
 'youhavenewmessagesmulti' => 'ء$1 تہ بچے نوغ نوغ پیغامات شینی',
 'editsection' => 'ترمیم',
 'editold' => 'ترمیم',
index 9f5ee67..f338c06 100644 (file)
@@ -310,8 +310,6 @@ $1',
 'pagetitle-view-mainpage' => '',
 'retrievedfrom' => '"$1" ra ard',
 'youhavenewmessages' => 'Yê sıma $1 ($2) esto.',
-'newmessageslink' => 'mesacê newey',
-'newmessagesdifflink' => 'vurnaiso peyên',
 'youhavenewmessagesmulti' => '$1 de mesacê sımaê newey estê',
 'editsection' => 'bıvurne',
 'editold' => 'bıvurne',
@@ -765,7 +763,6 @@ Diqet kerê, beno ke tedeestê {{SITENAME}} uza endi rozane niyê.",
 'preferences' => 'Tercihi',
 'mypreferences' => 'Tercihê mı',
 'prefs-edits' => 'Numra vurnaisun:',
-'prefsnologin' => 'Cı nêkota',
 'changepassword' => 'Parola bıvurne',
 'prefs-skin' => 'Çerme',
 'skin-preview' => 'Verqayt',
@@ -904,6 +901,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'recentchanges-label-minor' => 'No zu vurnaiso qıckeko',
 'recentchanges-label-bot' => 'No vurnais terefê zu boti ra bi',
 'recentchanges-label-unpatrolled' => 'No vurnais hona çım ra ranêvêrdo',
+'recentchanges-legend-newpage' => '$1 - pela newiye',
 'rcnote' => "Cêr {{PLURAL:$1|'''1''' vurnaiso peyên|'''$1''' vurnaisê peyêni}} be {{PLURAL:$2|roza peyêne|'''$2''' rozunê peyênunê}} $5, $4 ra estê.",
 'rcnotefrom' => "Cêr de vurnayîşê esto ke '''$2''' ra raver  (heta '''$1''' mucnayiyo).",
 'rclistfrom' => '$1 ra hata nıka vurnaisunê newu bıasne',
index 774da5e..e96812a 100644 (file)
@@ -311,7 +311,6 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'بارلىق_بەتتەر' ),
        'Ancientpages'              => array( 'ەسكى_بەتتەر' ),
        'Block'                     => array( 'جايدى_بۇعاتتاۋ', 'IP_بۇعاتتاۋ' ),
-       'Blockme'                   => array( 'وزدىكتىك_بۇعاتتاۋ', 'وزدىك_بۇعاتتاۋ', 'مەنى_بۇعاتتاۋ' ),
        'Booksources'               => array( 'كىتاپ_قاينارلارى' ),
        'BrokenRedirects'           => array( 'جارامسىز_ايداعىشتار', 'جارامسىز_ايداتۋلار' ),
        'Categories'                => array( 'ساناتتار' ),
@@ -320,7 +319,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'ۇلەسى' ),
        'CreateAccount'             => array( 'جاڭا_تىركەلگى', 'تىركەلگى_جاراتۋ' ),
        'Deadendpages'              => array( 'تۇيىق_بەتتەر' ),
-       'Disambiguations'           => array( 'ايرىقتى_بەتتەر' ),
        'DoubleRedirects'           => array( 'شىنجىرلى_ايداعىشتار', 'شىنجىرلى_ايداتۋلار' ),
        'Emailuser'                 => array( 'حات_جىبەرۋ' ),
        'Export'                    => array( 'سىرتقا_بەرۋ' ),
@@ -606,8 +604,6 @@ $messages = array(
 'pagetitle' => '$1 — {{SITENAME}}',
 'retrievedfrom' => '«$1» بەتىنەن الىنعان',
 'youhavenewmessages' => 'سىزگە $1 بار ($2).',
-'newmessageslink' => 'جاڭا حابارلار',
-'newmessagesdifflink' => 'سوڭعى وزگەرىسىنە',
 'youhavenewmessagesmulti' => '$1 دەگەندە جاڭا حابارلار بار',
 'editsection' => 'وڭدەۋ',
 'editold' => 'وڭدەۋ',
@@ -1127,7 +1123,6 @@ $3 كەلتىرىلگەن سەبەبى: ''$2''",
 'preferences' => 'باپتالىمدار',
 'mypreferences' => 'باپتالىمدارىم',
 'prefs-edits' => 'وڭدەمە سانى:',
-'prefsnologin' => 'كىرمەگەنسىز',
 'changepassword' => 'قۇپىييا ٴسوزدى وزگەرتۋ',
 'prefs-skin' => 'مانەرلەر',
 'skin-preview' => 'قاراپ شىعۋ',
@@ -2837,4 +2832,20 @@ $5
 'revdelete-unrestricted' => 'اكىمشىلەردەن تىيىمداردى الاستادى',
 'rightsnone' => '(ەشقانداي)',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'ۇلگىلەردى ۇلعايتۋ',
+'expand_templates_intro' => 'وسى قۇرال ارنايى بەتى الدەبىر ٴماتىندى الادى دا,
+بۇنىڭ ىشىندەگى بارلىق كىرىكتەلگەن ۇلگىلەردى مەيلىنشە ۇلعايتادى.
+مىنا <nowiki>{{#language:...}} سىيياقتى جوڭدەتۋ فۋنكتسىييالارىن دا, جانە {{CURRENTDAY}}
+سىيياقتى اينامالىلارىن دا ۇلعايتادى (ناقتى ايتقاندا, قوس قابات ساداق جاقشالار اراسىنداعى بارلىعىن).
+بۇنى ٴوز MediaWiki باعدارلاماسىنان قاتىستى جوڭدەتۋ ساتىن شاقىرىپ ىستەلىنەدى.',
+'expand_templates_title' => 'ٴماتىن ارالىق اتاۋى ({{FULLPAGENAME}} ت.ب. بەتتەر ٴۇشىن):',
+'expand_templates_input' => 'كىرىس ٴماتىنى:',
+'expand_templates_output' => 'ناتىيجەسى',
+'expand_templates_xml_output' => 'XML شىعارۋى',
+'expand_templates_ok' => 'جارايدى',
+'expand_templates_remove_comments' => 'ماندەمەلەرىن الاستاتىپ?',
+'expand_templates_generate_xml' => 'XML وڭدەتۋ بۇتاقتارىن كورسەت',
+'expand_templates_preview' => 'قاراپ شىعۋ',
+
 );
index 6616e8b..af2b638 100644 (file)
@@ -281,7 +281,6 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'Барлық_беттер' ),
        'Ancientpages'              => array( 'Ескі_беттер' ),
        'Block'                     => array( 'Жайды_бұғаттау', 'IP_бұғаттау' ),
-       'Blockme'                   => array( 'Өздіктік_бұғаттау', 'Өздік_бұғаттау', 'Мені_бұғаттау' ),
        'Booksources'               => array( 'Кітап_қайнарлары' ),
        'BrokenRedirects'           => array( 'Жарамсыз_айдағыштар', 'Жарамсыз_айдатулар' ),
        'Categories'                => array( 'Санаттар' ),
@@ -290,7 +289,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Үлесі' ),
        'CreateAccount'             => array( 'Жаңа_тіркелгі', 'Тіркелгі_Жарату' ),
        'Deadendpages'              => array( 'Тұйық_беттер' ),
-       'Disambiguations'           => array( 'Айрықты_беттер' ),
        'DoubleRedirects'           => array( 'Шынжырлы_айдағыштар', 'Шынжырлы_айдатулар' ),
        'Emailuser'                 => array( 'Хат_жіберу' ),
        'Export'                    => array( 'Сыртқа_беру' ),
@@ -635,12 +633,10 @@ $1',
 'pagetitle' => '$1 — {{SITENAME}}',
 'retrievedfrom' => '«$1» бетінен алынған',
 'youhavenewmessages' => 'Сізде $1 бар ($2).',
-'newmessageslink' => 'жаңа хабарламалар',
-'newmessagesdifflink' => 'соңғы өзгерiсіне',
 'youhavenewmessagesfromusers' => 'Сіз {{PLURAL:$3|басқа қатысушыдан|$3 қатысушыдан}} $1 алдыңыз ($2).',
 'youhavenewmessagesmanyusers' => 'Сіз бірнеше қатысушыдан $1 алдыңыз ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|жаңа хабарлама|жаңа хабарламалар}}',
-'newmessagesdifflinkplural' => 'соңғы {{PLURAL:$1|өзгеріс|өзгерістер}}',
+'newmessageslinkplural' => '{{PLURAL:$1|жаңа хабарлама|999=жаңа хабарламалар}}',
+'newmessagesdifflinkplural' => 'соңғы {{PLURAL:$1|өзгеріс|999=өзгерістер}}',
 'youhavenewmessagesmulti' => '$1 дегенде жаңа хабарламалар бар',
 'editsection' => 'өңдеу',
 'editold' => 'өңдеу',
@@ -766,7 +762,7 @@ $2',
 'invalidtitle-knownnamespace' => '"$2" есім кеңістік түрі және  "$3" мәтіні жарамсыз',
 'invalidtitle-unknownnamespace' => 'Нөмері $1 белгісіз есім кеңістік түрі және "$2" мәтіні жарамсыз',
 'exception-nologin' => 'Кірмегенсіз',
-'exception-nologin-text' => 'Бұл бет немесе әрекет бұл уикиге кіріуіңізді міндеттейді.',
+'exception-nologin-text' => 'Бұл әрекетке немесе бетке қатынау үшін [[Special:Userlogin|кіріңіз]].',
 
 # Virus scanner
 'virus-badscanner' => 'Дұрыс емес ішқұрылым. Белгісіз вирус сканері: $1',
@@ -814,9 +810,10 @@ $2',
 'gotaccount' => "Бұған дейін тіркеліп пе едіңіз? '''$1'''.",
 'gotaccountlink' => 'Кіріңіз',
 'userlogin-resetlink' => 'Қатысушы атын не құпия сөзді ұмыттыңыз ба?',
-'userlogin-resetpassword-link' => 'Құпия сөздіңізді ысыру',
+'userlogin-resetpassword-link' => 'Құпия сөздіңізді ұмыттыңыз ба?',
 'helplogin-url' => 'Help:Тіркелу',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Тіркелуге көмек]]',
+'userlogin-createanother' => 'Басқа тіркелгі жасау',
 'createacct-join' => 'Төменге өзіңіз туралы ақпарат енгізіңіз.',
 'createacct-another-join' => 'Төменге жаңа тіркелгі туралы ақпарат енгізіңіз.',
 'createacct-emailrequired' => 'Е-пошта мекен-жайы:',
@@ -1248,8 +1245,8 @@ $3 келтірілген себебі: ''$2''",
 'revdelete-hide-user' => 'Өңдеуші атын (IP мекенжайын) жасыр',
 'revdelete-hide-restricted' => 'Осы тиымдарды әкімшілерге қолдану және бұл тілдесуді құлыптау',
 'revdelete-radio-same' => '(өзгертпе)',
-'revdelete-radio-set' => 'Ð\98Ó\99',
-'revdelete-radio-unset' => 'Ð\96оÒ\9b',
+'revdelete-radio-set' => 'Ð\96аÑ\81Ñ\8bÑ\80Ñ\8bлÒ\93ан',
+'revdelete-radio-unset' => 'Ð\9aÓ©Ñ\80Ñ\81еÑ\82Ñ\96лген',
 'revdelete-suppress' => 'Деректерді баршаға ұқсас әкімшілерден де шеттету',
 'revdelete-unsuppress' => 'Қалпына келтірілген түзетулерден тиымдарды аластау',
 'revdelete-log' => 'Себебі:',
@@ -1382,7 +1379,6 @@ $1",
 'preferences' => 'Баптаулар',
 'mypreferences' => 'Баптаулар',
 'prefs-edits' => 'Өңдеме саны:',
-'prefsnologin' => 'Кірмегенсіз',
 'changepassword' => 'Құпия сөзді өзгерту',
 'prefs-skin' => 'Мәнерлер',
 'skin-preview' => 'Қарап шығу',
@@ -1666,6 +1662,7 @@ $1",
 'recentchanges-label-minor' => 'Бұл шағын өңдеме',
 'recentchanges-label-bot' => 'Бұл өңдемені бот жасады.',
 'recentchanges-label-unpatrolled' => 'Бұл өңдеме әлі тексеруден өтпеді.',
+'recentchanges-legend-newpage' => '$1 - жаңа бет',
 'rcnote' => "Төменде $5, $4 кезіне дейінгі соңғы {{PLURAL:$2|күндегі|'''$2''' күндегі}}, {{PLURAL:$1| '''1''' өзгеріс|соңғы '''$1''' өзгеріс}}  көрсетіледі.",
 'rcnotefrom' => "Төменде '''$2''' кезінен бергі ('''$1''' жеткенше дейін) өзгерістер көрсетіледі.",
 'rclistfrom' => '$1 кезінен бергі жаңа өзгерістерді көрсет.',
@@ -2469,7 +2466,7 @@ $1',
 # Contributions
 'contributions' => '{{GENDER:$1|Қатысушы}} үлестері',
 'contributions-title' => '$1 есімді қатысушының үлесі',
-'mycontris' => 'ҮлеÑ\81Ñ\82еÑ\80',
+'mycontris' => 'ҮлеÑ\81Ñ\96м',
 'contribsub2' => '$1 ($2) үлесі',
 'nocontribs' => 'Осы іздеу шартына сәйкес өзгерістер табылған жоқ.',
 'uctop' => '(ағымдағы)',
@@ -3749,4 +3746,20 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|ғасыр|ғасыр}}',
 'duration-millennia' => '$1 {{PLURAL:$1|мың жылдық|мың жылдық}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Үлгілерді ұлғайту',
+'expand_templates_intro' => 'Осы құрал арнайы беті әлдебір мәтінді алады да,
+бұның ішіндегі барлық кіріктелген үлгілерді мейлінше ұлғайтады.
+Мына <nowiki>{{</nowiki>#language:...}} сияқты жөңдету функцияларын да, және <nowiki>{{</nowiki>CURRENTDAY}}
+сияқты айнамалыларын да ұлғайтады (нақты айтқанда, қос қабат садақ жақшалар арасындағы барлығын).
+Бұны өз MediaWiki бағдарламасынан қатысты жөңдету сатын шақырып істелінеді.',
+'expand_templates_title' => 'Мәтін аралық атауы ({{FULLPAGENAME}} т.б. беттер үшін):',
+'expand_templates_input' => 'Кіріс мәтіні:',
+'expand_templates_output' => 'Нәтижесі',
+'expand_templates_xml_output' => 'XML шығаруы',
+'expand_templates_ok' => 'Жарайды',
+'expand_templates_remove_comments' => 'Мәндемелерін аластатып?',
+'expand_templates_generate_xml' => 'XML өңдету бұтақтарын көрсет',
+'expand_templates_preview' => 'Қарап шығу',
+
 );
index 0d1114c..42acac4 100644 (file)
@@ -276,7 +276,6 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'Barlıq_better' ),
        'Ancientpages'              => array( 'Eski_better' ),
        'Block'                     => array( 'Jaýdı_buğattaw', 'IP_buğattaw' ),
-       'Blockme'                   => array( 'Özdiktik_buğattaw', 'Özdik_buğattaw', 'Meni_buğattaw' ),
        'Booksources'               => array( 'Kitap_qaýnarları' ),
        'BrokenRedirects'           => array( 'Jaramsız_aýdağıştar', 'Jaramsız_aýdatwlar' ),
        'Categories'                => array( 'Sanattar' ),
@@ -285,7 +284,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Ülesi' ),
        'CreateAccount'             => array( 'Jaña_tirkelgi', 'Tirkelgi_Jaratw' ),
        'Deadendpages'              => array( 'Tuýıq_better' ),
-       'Disambiguations'           => array( 'Aýrıqtı_better' ),
        'DoubleRedirects'           => array( 'Şınjırlı_aýdağıştar', 'Şınjırlı_aýdatwlar' ),
        'Emailuser'                 => array( 'Xat_jiberw' ),
        'Export'                    => array( 'Sırtqa_berw' ),
@@ -569,8 +567,6 @@ $messages = array(
 'pagetitle' => '$1 — {{SITENAME}}',
 'retrievedfrom' => '«$1» betinen alınğan',
 'youhavenewmessages' => 'Sizge $1 bar ($2).',
-'newmessageslink' => 'jaña xabarlar',
-'newmessagesdifflink' => 'soñğı özgerisine',
 'youhavenewmessagesmulti' => '$1 degende jaña xabarlar bar',
 'editsection' => 'öñdew',
 'editold' => 'öñdew',
@@ -1090,7 +1086,6 @@ Añğartpa: {{SITENAME}} torabınıñ mağlumat tizbeleri eskirgen bolwı mümki
 'preferences' => 'Baptalımdar',
 'mypreferences' => 'Baptalımdarım',
 'prefs-edits' => 'Öñdeme sanı:',
-'prefsnologin' => 'Kirmegensiz',
 'changepassword' => 'Qupïya sözdi özgertw',
 'prefs-skin' => 'Mänerler',
 'skin-preview' => 'Qarap şığw',
@@ -2796,4 +2791,20 @@ Tağı da [[Special:EditWatchlist|qalıpalğan öñdewişti paýdalana]] alasız
 'revdelete-unrestricted' => 'äkimşilerden tïımdardı alastadı',
 'rightsnone' => '(eşqandaý)',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Ülgilerdi ulğaýtw',
+'expand_templates_intro' => 'Osı qural arnaýı beti äldebir mätindi aladı da,
+bunıñ işindegi barlıq kiriktelgen ülgilerdi meýlinşe ulğaýtadı.
+Mına <nowiki>{{</nowiki>#language:...}} sïyaqtı jöñdetw fwnkcïyaların da, jäne <nowiki>{{</nowiki>CURRENTDAY}}
+sïyaqtı aýnamalıların da ulğaýtadı (naqtı aýtqanda, qos qabat sadaq jaqşalar arasındağı barlığın).
+Bunı öz MediaWiki bağdarlamasınan qatıstı jöñdetw satın şaqırıp istelinedi.',
+'expand_templates_title' => 'Mätin aralıq atawı ({{FULLPAGENAME}} t.b. better üşin):',
+'expand_templates_input' => 'Kiris mätini:',
+'expand_templates_output' => 'Nätïjesi',
+'expand_templates_xml_output' => 'XML şığarwı',
+'expand_templates_ok' => 'Jaraýdı',
+'expand_templates_remove_comments' => 'Mändemelerin alastatıp?',
+'expand_templates_generate_xml' => 'XML öñdetw butaqtarın körset',
+'expand_templates_preview' => 'Qarap şığw',
+
 );
index 052c972..ebef206 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'ទំព័រចាស់ៗ' ),
        'Blankpage'                 => array( 'ទំព័រទទេ' ),
        'Block'                     => array( 'រាំងខ្ទប់IP' ),
-       'Blockme'                   => array( 'រាំងខ្ទប់' ),
        'Booksources'               => array( 'ប្រភពសៀវភៅ' ),
        'BrokenRedirects'           => array( 'ការបញ្ជូនបន្តដែលខូច' ),
        'Categories'                => array( 'ចំណាត់ថ្នាក់ក្រុម' ),
@@ -111,7 +110,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'បង្កើតគណនី' ),
        'Deadendpages'              => array( 'ទំព័រទាល់' ),
        'DeletedContributions'      => array( 'ការរួមចំណែកដែលត្រូវបានលុបចោល' ),
-       'Disambiguations'           => array( 'ចំណងជើងស្រដៀងគ្នា' ),
        'DoubleRedirects'           => array( 'ការបញ្ជូនបន្តទ្វេដង' ),
        'Emailuser'                 => array( 'អ្នកប្រើប្រាស់អ៊ីមែល' ),
        'Export'                    => array( 'នាំចេញ' ),
@@ -541,8 +539,6 @@ $1',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'បានពី "$1"',
 'youhavenewmessages' => 'អ្នកមាន $1 ($2)។',
-'newmessageslink' => 'សារថ្មីៗ',
-'newmessagesdifflink' => 'បន្លាស់ប្ដូរចុងក្រោយ',
 'youhavenewmessagesfromusers' => 'អ្នកមាន $1 ទទួលបានពី {{PLURAL:$3|អ្នកប្រើប្រាស់ម្នាក់|អុ្នកប្រើប្រាស់ចំនួន $3 នាក់}} ($2)។',
 'youhavenewmessagesmanyusers' => 'អ្នកមាន $1 ទទួលបានពីអ្នកប្រើប្រាស់ជាច្រើន ($2)។',
 'newmessageslinkplural' => '{{PLURAL:$1|សារថ្មីមួយ|សារថ្មី}}',
@@ -795,7 +791,7 @@ $2',
 
 សូម​កត់ឈ្មោះចូល​ម្តងទៀត​បន្ទាប់ពី​អ្នក​បាន​ទទួល​ពាក្យសម្ងាត់ថ្មីនោះ។',
 'blocked-mailpassword' => 'អាសយដ្ឋានIPត្រូវបានហាមឃាត់មិនអោយធ្វើការកែប្រែ និងមិនអនុញ្ញាតឱ្យប្រើប្រាស់មុខងារសង្គ្រោះពាក្យសម្ងាត់ដើម្បីបង្ការការបំពានទេ។',
-'eauthentsent' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\95á\9f\92á\9e\91á\9f\80á\9e\84á\9e\95á\9f\92á\9e\91á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85â\80\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\85á\9e»á\9f\87á\9e\8fá\9f\92á\9e\9aá\9eហើយ។
+'eauthentsent' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\95á\9f\92á\9e\91á\9f\80á\9e\84á\9e\95á\9f\92á\9e\91á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85â\80\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\87á\9e¼á\9e\93ហើយ។
 
 មុននឹងមាន​អ៊ីមែលផ្សេងមួយទៀត​ត្រូវផ្ញើទៅ​គណនីនេះ អ្នកត្រូវតែ​ធ្វើតាមសេចក្តីណែនាំ​ក្នុងអ៊ីមែល​នោះ ដើម្បីបញ្ជាក់ថា​គណនីបច្ចុប្បន្ន​ពិតជា​របស់អ្នកពិតប្រាកដមែន។',
 'throttled-mailpassword' => 'អ៊ីមែលប្ដូរពាក្យសម្ងាត់ត្រូវបានផ្ញើទៅឱ្យអ្នកតាំងពី{{PLURAL:$1|មួយម៉ោង|$1ម៉ោង}}មុននេះហើយ។
@@ -1236,7 +1232,7 @@ $2
 * ព័ត៌មាន​ផ្ទាល់​ខ្លួន​ ឯកជន​មិន​សមរម្យ​
 *: ''អាសយដ្ឋាននៃ​គេហដ្ឋាន​​ ​លេខ​ទូរស័ព្ទ និងលេខ​សន្តិសុខ​សង្គម​ជាដើម​''",
 'revdelete-legend' => 'ដាក់កំហិតគំហើញ',
-'revdelete-hide-text' => 'á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e\83á\9f\92á\9e\9bá\9e¶á\9e\93á\9f\83កំណែប្រែ',
+'revdelete-hide-text' => 'á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e¢á\9e\8fá\9f\92á\9e\90á\9e\94á\9e\91កំណែប្រែ',
 'revdelete-hide-image' => 'បិទបាំងខ្លឹមសារនៃឯកសារ',
 'revdelete-hide-name' => 'បិទបាំងសកម្មភាពនិងគោលដៅ',
 'revdelete-hide-comment' => 'កែប្រែចំណារពន្យល់',
@@ -1399,7 +1395,6 @@ $1",
 'preferences' => 'ចំណង់ចំណូលចិត្ត',
 'mypreferences' => 'ចំណង់ចំណូលចិត្ត​',
 'prefs-edits' => 'ចំនួនកំណែប្រែ៖',
-'prefsnologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
 'changepassword' => 'ប្តូរពាក្យសម្ងាត់',
 'prefs-skin' => 'សំបក',
 'skin-preview' => 'មើលជាមុន',
@@ -1666,8 +1661,8 @@ $1",
 'action-block' => 'ហាមឃាត់អ្នកប្រើប្រាស់នេះមិនឱ្យធ្វើការកែប្រែ',
 'action-protect' => 'ប្ដូរកម្រិតការពារសម្រាប់ទំព័រនេះ',
 'action-rollback' => 'ត្រឡប់យ៉ាងរហ័សនូវកំណែប្រែទំព័រវិសេសណាមួយ​ដែលធ្វើឡើងដោយ​អ្នកប្រើប្រាស់ចុងក្រោយគេ។',
-'action-import' => 'á\9e\93á\9e¶á\9f\86á\9e\85á\9e¼á\9e\9bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\96á\9e¸á\9e\9cá\9e·á\9e\82á\9e¸á\9e\95á\9f\92á\9e\9fá\9f\81á\9e\84á\9e\98á\9e½á\9e\99á\9e\91á\9f\80á\9e\8f',
-'action-importupload' => 'á\9e\93á\9e¶á\9f\86á\9e\85á\9e¼á\9e\9bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\96á\9e¸á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\91á\9e»á\9e\80á\9e¡á\9e¾á\9e\84',
+'action-import' => 'នាំចូលទំព័រពីវិគីផ្សេងមួយទៀត',
+'action-importupload' => 'នាំចូលទំព័រពីឯកសារដែលបានផ្ទុកឡើង',
 'action-patrol' => 'ចំណាំកំណែប្រែរបស់អ្នកដទៃថាបានល្បាត',
 'action-autopatrol' => 'ផ្ដល់សិទ្ធិឱ្យគេចំណាំកំណែរបស់អ្នកថាបានល្បាត',
 'action-unwatchedpages' => 'មើលបញ្ជីនៃទំព័រមិនតាមដាន',
@@ -1693,6 +1688,7 @@ $1",
 'recentchanges-label-minor' => 'នេះជាការកែប្រែតិចតួចមួយប៉ុណ្ណោះ',
 'recentchanges-label-bot' => 'ការកែប្រែនេះត្រូវបានធ្វើឡើងដោយរូបយន្ត',
 'recentchanges-label-unpatrolled' => 'ការកែប្រែនេះមិនទាន់ត្រូវបានល្បាតទេ',
+'recentchanges-legend-newpage' => '$1 - ទំព័រថ្មី',
 'rcnote' => "ខាងក្រោម​នេះ​ជា​{{PLURAL:$1|១បន្លាស់ប្ដូរ|'''$1'''បន្លាស់ប្ដូរ}}​ចុងក្រោយក្នុងរយៈពេល​{{PLURAL:$2|ថ្ងៃ|'''$2'''ថ្ងៃ}}​ចុងក្រោយគិតត្រឹម$5 $4 ។",
 'rcnotefrom' => "ខាងក្រោមនេះជាបន្លាស់ប្ដូរនានាគិតចាប់តាំងពី '''$2''' (បង្ហាញអតិបរមាចំនួន '''$1''')។",
 'rclistfrom' => 'បង្ហាញបន្លាស់ប្ដូរថ្មីៗចាប់តាំងពី $1',
@@ -2160,6 +2156,7 @@ $1',
 'listusers' => 'បញ្ជីអ្នកប្រើប្រាស់',
 'listusers-editsonly' => 'បង្ហាញតែអ្នកប្រើប្រាស់ដែលបានកែប្រែអត្ថបទប៉ុណ្ណោះ',
 'listusers-creationsort' => 'តម្រៀបតាមលំដាប់កាលបរិច្ឆេទបង្កើត',
+'listusers-desc' => 'តម្រៀបជាលំដាប់ពីលើចុះក្រោម',
 'usereditcount' => '$1 {{PLURAL:$1|កំណែប្រែ|កំណែប្រែ}}',
 'usercreated' => '{{GENDER:$3|បានបង្កើត}}នៅ$1  $2',
 'newpages' => 'ទំព័រថ្មីៗ',
@@ -3801,4 +3798,12 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|សតវត្សរ៍|សតវត្សរ៍}}',
 'duration-millennia' => '$1 {{PLURAL:$1|សហសវត្សរ៍|សហសវត្សរ៍}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'ពង្រីកទំព័រគំរូ',
+'expand_templates_input' => 'សរសេរឃ្លា',
+'expand_templates_output' => 'លទ្ធផល',
+'expand_templates_ok' => 'យល់ព្រម',
+'expand_templates_remove_comments' => 'ដកចេញ វិចារនានា',
+'expand_templates_preview' => 'បង្ហាញការមើលជាមុន',
+
 );
index 6d4357f..c8ff643 100644 (file)
@@ -332,8 +332,6 @@ $messages = array(
 'ok' => 'ಸರಿ',
 'retrievedfrom' => '"$1" ಇಂದ ಪಡೆಯಲ್ಪಟ್ಟಿದೆ',
 'youhavenewmessages' => 'ನಿಮಗೆ $1 ಇವೆ ($2).',
-'newmessageslink' => 'ಹೊಸ ಸಂದೇಶಗಳು',
-'newmessagesdifflink' => 'ಕೊನೆಯ ಬದಲಾವಣೆ',
 'newmessagesdifflinkplural' => 'ಕಡೆಯ {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಗಳು}}',
 'youhavenewmessagesmulti' => '$1 ಅಲ್ಲಿ ನಿಮಗೆ ಹೊಸ ಸಂದೇಶಗಳಿವೆ',
 'editsection' => 'ಬದಲಾಯಿಸಿ',
@@ -918,7 +916,6 @@ $2',
 'preferences' => 'ಪ್ರಾಶಸ್ತ್ಯಗಳು',
 'mypreferences' => 'ಪ್ರಾಶಸ್ತ್ಯಗಳು',
 'prefs-edits' => 'ಸಂಪಾದನೆಗಳ ಸಂಖ್ಯೆ:',
-'prefsnologin' => 'ಲಾಗಿನ್ ಆಗಿಲ್ಲ',
 'changepassword' => 'ಪ್ರವೇಶ ಪದ ಬದಲಾಯಿಸಿ',
 'prefs-skin' => 'ಚರ್ಮ',
 'skin-preview' => 'ಮುನ್ನೋಟ',
@@ -2209,4 +2206,7 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|ಶತಮಾನ|ಶತಮಾನಗಳು}}',
 'duration-millennia' => '$1 {{PLURAL:$1|ಸಹಸ್ರಮಾನ|ಸಹಸ್ರಮಾನಗಳು}}',
 
+# Special:ExpandTemplates
+'expand_templates_preview' => 'ಮುನ್ನೋಟ',
+
 );
index 195b4a1..cd5d2db 100644 (file)
@@ -41,7 +41,7 @@
 
 $namespaceNames = array(
        NS_MEDIA            => '미디어',
-       NS_SPECIAL          => '특수기능',
+       NS_SPECIAL          => '특수',
        NS_TALK             => '토론',
        NS_USER             => '사용자',
        NS_USER_TALK        => '사용자토론',
@@ -59,7 +59,8 @@ $namespaceNames = array(
 );
 
 $namespaceAliases = array(
-       '특'  => NS_SPECIAL,
+       '특' => NS_SPECIAL,
+       '특수기능' => NS_SPECIAL,
        'MediaWiki토론' => NS_MEDIAWIKI_TALK,
        '그림' => NS_FILE,
        '파일토론' => NS_FILE_TALK,
@@ -68,12 +69,12 @@ $namespaceAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( '활동적인사용자' ),
        'Allmessages'               => array( '모든메시지' ),
+       'AllMyUploads'              => array( '모든내올린파일', '모든내파일' ),
        'Allpages'                  => array( '모든문서' ),
        'Ancientpages'              => array( '오래된문서' ),
        'Badtitle'                  => array( '잘못된제목', '인식불가제목', '잘못된이름', '인식불가이름' ),
        'Blankpage'                 => array( '빈문서' ),
        'Block'                     => array( '차단', 'IP차단', '사용자차단' ),
-       'Blockme'                   => array( '자기차단', '자가차단' ),
        'Booksources'               => array( '책찾기' ),
        'BrokenRedirects'           => array( '끊긴넘겨주기' ),
        'Categories'                => array( '분류' ),
@@ -85,19 +86,19 @@ $specialPageAliases = array(
        'CreateAccount'             => array( '계정만들기', '가입' ),
        'Deadendpages'              => array( '막다른문서' ),
        'DeletedContributions'      => array( '삭제된기여' ),
-       'Disambiguations'           => array( '동음이의', '동음이의문서' ),
        'DoubleRedirects'           => array( '이중넘겨주기' ),
        'EditWatchlist'             => array( '주시문서목록편집' ),
        'Emailuser'                 => array( '이메일보내기' ),
+       'ExpandTemplates'           => array( '틀전개' ),
        'Export'                    => array( '내보내기' ),
        'Fewestrevisions'           => array( '역사짧은문서' ),
-       'FileDuplicateSearch'       => array( '중복파일찾기' ),
+       'FileDuplicateSearch'       => array( '중복파일검색', '중복파일찾기' ),
        'Filepath'                  => array( '파일경로', '그림경로' ),
        'Import'                    => array( '가져오기' ),
        'Invalidateemail'           => array( '이메일인증취소', '이메일인증해제' ),
        'JavaScriptTest'            => array( '자바스크립트시험', '자바스크립트테스트' ),
-       'BlockList'                 => array( 'ì°¨ë\8b¨ë\90\9cì\82¬ì\9a©ì\9e\90', 'ì°¨ë\8b¨ëª©ë¡\9d', 'IPì°¨ë\8b¨ëª©ë¡\9d' ),
-       'LinkSearch'                => array( '링크찾기', '링크검색' ),
+       'BlockList'                 => array( 'ì°¨ë\8b¨ëª©ë¡\9d', 'IPì°¨ë\8b¨ëª©ë¡\9d', 'ì°¨ë\8b¨ë\90\9cì\82¬ì\9a©ì\9e\90' ),
+       'LinkSearch'                => array( '링크검색', '링크찾기' ),
        'Listadmins'                => array( '관리자', '관리자목록' ),
        'Listbots'                  => array( '봇', '봇목록' ),
        'Listfiles'                 => array( '파일', '그림', '파일목록', '그림목록' ),
@@ -109,7 +110,7 @@ $specialPageAliases = array(
        'Lonelypages'               => array( '외톨이문서', '홀로된문서' ),
        'Longpages'                 => array( '긴문서' ),
        'MergeHistory'              => array( '역사합치기' ),
-       'MIMEsearch'                => array( 'MIME찾기', 'MIME검색' ),
+       'MIMEsearch'                => array( 'MIME검색', 'MIME찾기' ),
        'Mostcategories'            => array( '많이분류된문서' ),
        'Mostimages'                => array( '많이쓰는파일', '많이쓰는그림' ),
        'Mostinterwikis'            => array( '인터위키많은문서' ),
@@ -133,12 +134,14 @@ $specialPageAliases = array(
        'Protectedpages'            => array( '보호된문서' ),
        'Protectedtitles'           => array( '만들기보호된문서', '생성보호된문서' ),
        'Randompage'                => array( '임의문서' ),
+       'RandomInCategory'          => array( '분류에있는임의문서' ),
        'Randomredirect'            => array( '임의넘겨주기' ),
        'Recentchanges'             => array( '최근바뀜' ),
        'Recentchangeslinked'       => array( '링크최근바뀜' ),
        'Redirect'                  => array( '넘겨주기' ),
+       'ResetTokens'               => array( '토큰재설정' ),
        'Revisiondelete'            => array( '특정판삭제' ),
-       'Search'                    => array( '찾기', '검색' ),
+       'Search'                    => array( '검색', '찾기' ),
        'Shortpages'                => array( '짧은문서' ),
        'Specialpages'              => array( '특수문서', '특수기능' ),
        'Statistics'                => array( '통계' ),
@@ -155,7 +158,7 @@ $specialPageAliases = array(
        'Unusedtemplates'           => array( '안쓰는틀', '쓰이지않는틀' ),
        'Unwatchedpages'            => array( '주시안되는문서' ),
        'Upload'                    => array( '올리기', '파일올리기', '그림올리기', '업로드' ),
-       'UploadStash'               => array( '올린비공개파일' ),
+       'UploadStash'               => array( '올린비공개파일', '비공개로올린파일' ),
        'Userlogin'                 => array( '로그인' ),
        'Userlogout'                => array( '로그아웃' ),
        'Userrights'                => array( '권한조정', '관리자하기', '봇하기' ),
@@ -239,6 +242,7 @@ $magicWords = array(
        'img_center'                => array( '1', '가운데', 'center', 'centre' ),
        'img_framed'                => array( '1', '프레임', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', '프레임없음', 'frameless' ),
+       'img_lang'                  => array( '1', '언어=$1', 'lang=$1' ),
        'img_page'                  => array( '1', '문서=$1', 'page=$1', 'page $1' ),
        'img_upright'               => array( '1', '위오른쪽', '위오른쪽=$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', '테두리', 'border' ),
@@ -281,6 +285,7 @@ $magicWords = array(
        'revisionyear'              => array( '1', '판년', 'REVISIONYEAR' ),
        'revisiontimestamp'         => array( '1', '판타임스탬프', 'REVISIONTIMESTAMP' ),
        'revisionuser'              => array( '1', '판사용자', 'REVISIONUSER' ),
+       'revisionsize'              => array( '1', '판크기', 'REVISIONSIZE' ),
        'plural'                    => array( '0', '복수:', '복수형:', 'PLURAL:' ),
        'fullurl'                   => array( '0', '전체주소:', 'FULLURL:' ),
        'fullurle'                  => array( '0', '전체주소E:', 'FULLURLE:' ),
@@ -505,7 +510,7 @@ $messages = array(
 
 # Cologne Blue skin
 'qbfind' => '찾기',
-'qbbrowse' => '탐색',
+'qbbrowse' => '찾아보기',
 'qbedit' => '편집',
 'qbpageoptions' => '문서 기능',
 'qbmyoptions' => '내 사용자 문서',
@@ -536,7 +541,7 @@ $messages = array(
 'tagline' => '{{SITENAME}}',
 'help' => '도움말',
 'search' => '검색',
-'searchbutton' => '찾기',
+'searchbutton' => '검색',
 'go' => '보기',
 'searcharticle' => '보기',
 'history' => '문서 역사',
@@ -625,14 +630,12 @@ $1',
 
 'ok' => '확인',
 'retrievedfrom' => '원본 주소 "$1"',
-'youhavenewmessages' => '다른 사용자가 $1에 글을 남겼습니다. ($2)',
-'newmessageslink' => '사용자 토론',
-'newmessagesdifflink' => '마지막으로 바뀐 내용',
-'youhavenewmessagesfromusers' => '{{PLURAL:$3|다른 사용자가|사용자 $3명이}} $1에 글을 남겼습니다. ($2)',
-'youhavenewmessagesmanyusers' => '여러 사용자가 $1에 글을 남겼습니다. ($2)',
-'newmessageslinkplural' => '{{PLURAL:$1|사용자 토론}}',
+'youhavenewmessages' => '다른 사용자가 남긴 $1가 있습니다. ($2)',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|다른 사용자가|사용자 $3명이}} 남긴 $1가 있습니다. ($2)',
+'youhavenewmessagesmanyusers' => '여러 사용자가 남긴 $1가 있습니다. ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|새 메시지}}',
 'newmessagesdifflinkplural' => '마지막으로 {{PLURAL:$1|바뀐 내용}}',
-'youhavenewmessagesmulti' => '다른 사용자가 $1에 글을 남겼습니다',
+'youhavenewmessagesmulti' => '다른 사용자가 $1에 남긴 새 메시지가 있습니다',
 'editsection' => '편집',
 'editold' => '편집',
 'viewsourceold' => '원본 보기',
@@ -697,9 +700,10 @@ URL을 잘못 입력하였거나, 잘못된 링크를 따라갔을 수 있습니
 관리자가 데이터베이스를 잠글 때 남긴 메시지는 다음과 같습니다: $1',
 'missing-article' => '데이터베이스에서 "$1" 문서의 $2 텍스트를 찾지 못했습니다.
 
\82­ì \9cë\90\9c ë¬¸ì\84\9cì\9d\98 ì\97­ì\82¬/ë¹\84êµ\90 ë¬¸ì\84\9c를 보려고 시도할 때 이러한 문제가 발생할 수 있습니다.
\82­ì \9cë\90\9c ë¬¸ì\84\9cì\9d\98 ì\98¤ë\9e\98ë\90\9c ì°¨ì\9d´ë\82\98 ì\97­ì\82¬ ë§\81í\81¬를 보려고 시도할 때 이러한 문제가 발생할 수 있습니다.
 
-또는, 프로그램 버그가 발생했을 수도 있습니다. [[Special:ListUsers/sysop|관리자]]에게 오류가 나는 URL을 알려주세요.',
+그렇지 않다면, 소프트웨어에 버그가 발생했을 수도 있습니다.
+[[Special:ListUsers/sysop|관리자]]에게 URL을 참조하여 알려주세요.',
 'missingarticle-rev' => '(판번호: $1)',
 'missingarticle-diff' => '(차이: $1, $2)',
 'readonly_lag' => '슬레이브 데이터베이스가 마스터 서버의 자료를 새로 고치는 중입니다. 데이터베이스가 자동으로 잠겨 있습니다.',
@@ -1080,9 +1084,9 @@ $1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대
 'accmailtitle' => '비밀번호를 보냈습니다',
 'accmailtext' => '[[User talk:$1|$1]] 사용자의 비밀번호가 임의로 만들어져 $2(으)로 보냈습니다. 로그인하고 나서 [[Special:ChangePassword|비밀번호를 바꿀]] 수 있습니다.',
 'newarticle' => '(새 문서)',
-'newarticletext' => "ì\9d´ ë¬¸ì\84\9cë\8a\94 ì\95\84ì§\81 ë§\8cë\93¤ì\96´ì§\80ì§\80 ì\95\8aì\95\98습니다.
-새 문서를 만들려면 아래의 상자에 문서 내용을 입력하면 됩니다(자세한 내용은 [[{{MediaWiki:Helppage}}|도움말]]을 읽어 주세요).
-ë§\8cì\95½ ì\9e\98못 ì°¾ì\95\84ì\98¨ ë¬¸ì\84\9cë\9d¼ë©´ ì\9b¹ 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
+'newarticletext' => "ì\95\84ì§\81 ì\97\86ë\8a\94 ë¬¸ì\84\9cì\9d\98 ë§\81í\81¬ë¥¼ ë\94°ë\9d¼ì\99\94습니다.
+새 문서를 만들려면 아래 상자에 내용을 입력하면 됩니다. (자세한 내용은 [[{{MediaWiki:Helppage}}|도움말 문서]]를 참고하세요)
+ë§\8cì\95½ ì\9e\98못 ì°¾ì\95\84ì\99\94ë\8b¤ë©´, 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
 'anontalkpagetext' => '----
 여기는 계정을 만들지 않았거나 사용하고 있지 않은 익명 사용자를 위한 토론 문서입니다.
 익명 사용자를 구별하기 위해서는 숫자로 된 IP 주소를 사용해야만 합니다.
@@ -1440,8 +1444,8 @@ $1",
 
 # Search results
 'searchresults' => '검색 결과',
-'searchresults-title' => '"$1"에 대한 찾기 결과',
-'searchresulttext' => '{{SITENAME}} 검색에 대한 자세한 정보는 [[{{MediaWiki:Helppage}}|{{int:help}}]] 문서를 참고하세요.',
+'searchresults-title' => '"$1"에 대한 검색 결과',
+'searchresulttext' => '{{SITENAME}} 검색에 대한 자세한 정보는 [[{{MediaWiki:Helppage}}|{{int:help}}]] 문서를 참고하세요.',
 'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' 문서를 검색하고 있습니다. ([[Special:Prefixindex/$1|이름이 "$1" 접두어로 시작하는 문서 목록]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" 문서를 가리키는 문서 목록]])',
 'searchsubtitleinvalid' => "'''$1''' 검색어로 검색했습니다",
 'toomanymatches' => '일치하는 결과가 너무 많습니다. 다른 검색어를 입력해주세요.',
@@ -1458,16 +1462,16 @@ $1",
 'searchmenu-legend' => '검색 설정',
 'searchmenu-exists' => "'''이 위키에 \"[[:\$1]]\"의 이름을 가진 문서가 있습니다.'''",
 'searchmenu-new' => "'''이 위키에 \"[[:\$1]]\" 문서를 만드세요!'''",
-'searchmenu-prefix' => '[[Special:PrefixIndex/$1|이 접두어로 시작하는 문서 찾기]]',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|이 접두어로 시작하는 문서 찾아보기]]',
 'searchprofile-articles' => '본문',
 'searchprofile-project' => '도움말 및 프로젝트 문서',
 'searchprofile-images' => '멀티미디어',
-'searchprofile-everything' => '모든 문서 찾기',
+'searchprofile-everything' => '모든 문서',
 'searchprofile-advanced' => '고급',
 'searchprofile-articles-tooltip' => '$1에서 검색',
-'searchprofile-project-tooltip' => '$1에서 찾기',
+'searchprofile-project-tooltip' => '$1에서 검색',
 'searchprofile-images-tooltip' => '파일 검색',
-'searchprofile-everything-tooltip' => '토론 문서를 포함한 모든 문서 찾기',
+'searchprofile-everything-tooltip' => '토론 문서를 포함한 모든 문서 검색',
 'searchprofile-advanced-tooltip' => '다음 설정한 이름공간에서 검색',
 'search-result-size' => '$1 ({{PLURAL:$2|1 단어|$2 단어}})',
 'search-result-category-size' => '{{PLURAL:$1|문서 1개|문서 $1개}}, {{PLURAL:$2|하위 분류 1개|하위 분류 $2개}}, {{PLURAL:$3|파일 1개|파일 $3개}}',
@@ -1480,16 +1484,17 @@ $1",
 'search-interwiki-more' => '(더 보기)',
 'search-relatedarticle' => '관련',
 'mwsuggest-disable' => '검색 제안 비활성화',
-'searcheverything-enable' => '모든 이름공간에서 찾기',
+'searcheverything-enable' => '모든 이름공간에서 검색',
 'searchrelated' => '관련',
 'searchall' => '모두',
 'showingresults' => "'''$2'''번 부터의 {{PLURAL:$1|결과 '''1'''개|결과 '''$1'''개}}입니다.",
 'showingresultsnum' => "'''$2'''번 부터의 {{PLURAL:$3|결과 '''1'''개|결과 '''$3'''개}} 입니다.",
 'showingresultsheader' => "'''$4''' 검색어에 대하여 {{PLURAL:$5|결과 '''$3'''개 중 '''$1'''개|결과 '''$3'''개 중 '''$1 - $2'''번째}}를 보여 주고 있습니다",
-'nonefound' => "'''참고''': 몇개의 이름공간만 기본으로 검색하는 범위입니다. 토론이나 틀 등의 모든 자료를 검색하려면 접두어로 '''all:''' 어떤 이름공간을 위해서는 접두어로 그 이름공간을 쓸 수 있습니다.",
-'search-nonefound' => '찾기 결과가 없습니다.',
+'nonefound' => "'''참고''': 일부 이름공간만 기본으로 검색합니다.
+토론 문서나 틀 등의 모든 내용을 검색하려면 접두어로 '''all:'''를 시도하거나, 원하는 이름공간을 접두어로 사용하세요.",
+'search-nonefound' => '검색어와 일치하는 결과가 없습니다.',
 'powersearch' => '고급 검색',
-'powersearch-legend' => '고급 찾기',
+'powersearch-legend' => '고급 검색',
 'powersearch-ns' => '다음 이름공간에서 검색:',
 'powersearch-redir' => '넘겨주기 목록',
 'powersearch-field' => '검색',
@@ -1500,13 +1505,12 @@ $1",
 'searchdisabled' => '{{SITENAME}} 검색이 비활성화되어 있습니다.
 검색이 작동하지 않는 동안에는 Google(구글)을 통해 검색할 수 있습니다.
 검색 엔진의 내용은 최신이 아닐 수 있다는 점을 참고하세요.',
-'search-error' => '는 동안 오류가 발생했습니다: $1',
+'search-error' => '검색하는 동안 오류가 발생했습니다: $1',
 
 # Preferences page
 'preferences' => '사용자 환경 설정',
 'mypreferences' => '환경 설정',
 'prefs-edits' => '편집 횟수:',
-'prefsnologin' => '로그인하지 않음',
 'prefsnologintext2' => '사용자 환경 설정을 설정하려면 $1하십시오.',
 'changepassword' => '비밀번호 바꾸기',
 'prefs-skin' => '스킨',
@@ -1809,6 +1813,8 @@ HTML 태그를 확인하세요.',
 'recentchanges-label-minor' => '사소한 편집',
 'recentchanges-label-bot' => '봇의 편집',
 'recentchanges-label-unpatrolled' => '아직 검토하지 않은 편집',
+'recentchanges-label-plusminus' => '바이트로 표기된 바뀐 문서 크기',
+'recentchanges-legend-newpage' => '([[Special:NewPages|새 문서의 목록]]도 참고하세요)',
 'rcnote' => "다음은 $4 $5 까지의 {{PLURAL:$2|'''$2'''일}}동안 {{PLURAL:$1|바뀐 문서 '''$1'''개입니다}}.",
 'rcnotefrom' => "다음은 '''$2'''에서부터 바뀐 문서 '''$1'''개입니다.",
 'rclistfrom' => '$1 이래로 새로 바뀐 문서 보기',
@@ -2139,7 +2145,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'filehist-dimensions' => '크기',
 'filehist-filesize' => '파일 크기',
 'filehist-comment' => '덧글',
-'filehist-missing' => 'í\8c\8cì\9d¼ì\9d\84 ì°¾ì\9d\84 ì\88\98 없음',
+'filehist-missing' => 'í\8c\8cì\9d¼ì\9d´ 없음',
 'imagelinks' => '이 파일을 사용하는 문서',
 'linkstoimage' => '다음 {{PLURAL:$1|문서 $1개}}가 이 파일을 가리키고 있습니다:',
 'linkstoimage-more' => '$1개 이상의 {{PLURAL:$1|문서}}가 이 파일을 가리키고 있습니다.
@@ -2199,7 +2205,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 # MIME search
 'mimesearch' => 'MIME 검색',
-'mimesearch-summary' => 'MIME 타입에 해당하는 파일을 찾습니다.
+'mimesearch-summary' => 'MIME 유형에 해당하는 파일을 검색합니다.
 다음 형태로 입력해주세요: 내용종류/하위종류, 예를 들어 <code>image/jpeg</code>',
 'mimetype' => 'MIME 종류:',
 'download' => '다운로드',
@@ -2347,7 +2353,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'notargettitle' => '해당하는 문서 없음',
 'notargettext' => '기능을 수행할 대상 문서나 사용자를 지정하지 않았습니다.',
 'nopagetitle' => '해당하는 문서 없음',
-'nopagetext' => 'ì°¾ë\8a\94 문서가 존재하지 않습니다.',
+'nopagetext' => 'ì§\80ì \95í\95\9c ë\8c\80ì\83\81 문서가 존재하지 않습니다.',
 'pager-newer-n' => '{{PLURAL:$1|다음 1개|다음 $1개}}',
 'pager-older-n' => '{{PLURAL:$1|이전 1개|이전 $1개}}',
 'suppress' => '오버사이트',
@@ -2357,7 +2363,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'booksources' => '책 찾기',
 'booksources-search-legend' => '책 원본 검색',
 'booksources-isbn' => 'ISBN:',
-'booksources-go' => '찾기',
+'booksources-go' => '검색',
 'booksources-text' => '아래의 목록은 새 책이나 중고 책을 판매하는 바깥 사이트로, 원하는 책의 정보를 얻을 수 있습니다.',
 'booksources-invalid-isbn' => '입력한 ISBN이 잘못된 것으로 보입니다. 원본과 대조해 보세요.',
 
@@ -2412,7 +2418,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 # Special:LinkSearch
 'linksearch' => '바깥 링크 검색',
-'linksearch-pat' => '찾기 패턴:',
+'linksearch-pat' => '검색 패턴:',
 'linksearch-ns' => '이름공간:',
 'linksearch-ok' => '검색',
 'linksearch-text' => '"*.wikipedia.org"와 같이 와일드 카드를 사용할 수 있습니다.
@@ -2741,10 +2747,10 @@ $1',
 [[Special:Log/delete|삭제 기록]]에서 최근의 삭제와 되살리기 기록을 볼 수 있습니다.",
 'undelete-header' => '최근에 삭제한 문서에 대한 기록은 [[Special:Log/delete|여기]]에서 볼 수 있습니다.',
 'undelete-search-title' => '삭제된 문서 검색',
-'undelete-search-box' => '삭제된 문서 찾기',
+'undelete-search-box' => '삭제된 문서 검색',
 'undelete-search-prefix' => '다음으로 시작하는 문서 보기:',
 'undelete-search-submit' => '검색',
-'undelete-no-results' => 'ì\82­ì \9cë\90\9c ë¬¸ì\84\9c ë³´ì¡´ì\97\90ì\84\9c ì\9d¼ì§\80하는 문서를 찾을 수 없습니다.',
+'undelete-no-results' => 'ì\82­ì \9cë\90\9c ë¬¸ì\84\9c ë³´ì¡´ì\97\90ì\84\9c ì\9d¼ì¹\98하는 문서를 찾을 수 없습니다.',
 'undelete-filename-mismatch' => '타임스탬프가 $1인 파일의 버전을 되살릴 수 없습니다: 파일 이름이 일치하지 않습니다.',
 'undelete-bad-store-key' => '타임스탬프가 $1인 파일의 버전을 되살릴 수 없습니다: 파일이 삭제되기 전에 사라졌습니다.',
 'undelete-cleanup-error' => '사용되지 않는 보존된 파일 "$1"을 삭제하는 데 오류가 발생했습니다.',
@@ -2869,7 +2875,7 @@ $1',
 'unblocked-id' => '$1 차단이 해제되었습니다.',
 'blocklist' => '차단된 사용자 목록',
 'ipblocklist' => '차단된 사용자',
-'ipblocklist-legend' => '차단 중인 사용자 찾기',
+'ipblocklist-legend' => '차단 사용자 찾기',
 'blocklist-userblocks' => '계정에 대한 차단 숨기기',
 'blocklist-tempblocks' => '기한이 정해진 차단을 숨기기',
 'blocklist-addressblocks' => '단일 IP 차단을 숨기기',
@@ -3099,7 +3105,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 
 # Thumbnails
 'thumbnail-more' => '실제 크기로',
-'filemissing' => '파일 사라짐',
+'filemissing' => '파일이 없음',
 'thumbnail_error' => '섬네일을 만드는 중 오류 발생: $1',
 'thumbnail_error_remote' => '$1에서 반환한 오류 메시지:
 $2',
@@ -3109,7 +3115,7 @@ $2',
 'thumbnail-dest-create' => '대상 경로에 섬네일을 저장할 수 없습니다.',
 'thumbnail_invalid_params' => '섬네일 매개변수가 잘못되었습니다.',
 'thumbnail_dest_directory' => '새 목적 디렉터리를 만들 수 없습니다.',
-'thumbnail_image-type' => 'í\95´ë\8b¹ í\8c\8cì\9d¼ í\98\95ì\8b\9dì\9d\80 ì§\80ì\9b\90í\95\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤',
+'thumbnail_image-type' => '그림 í\98\95ì\8b\9dì\9d´ ì§\80ì\9b\90ë\90\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤',
 'thumbnail_gd-library' => 'GD 라이브러리 설정이 잘못되었습니다: $1 함수를 찾을 수 없습니다.',
 'thumbnail_image-missing' => '파일을 찾을 수 없습니다: $1',
 
@@ -3435,7 +3441,7 @@ $1',
 'minutes' => '$1분',
 'hours' => '$1시간',
 'days' => '$1일',
-'weeks' => '{{PLURAL:$1|$1주}}',
+'weeks' => '$1주',
 'months' => '$1달',
 'years' => '$1년',
 'ago' => '$1 전',
@@ -3470,8 +3476,8 @@ Variants for Chinese language
 
 # Metadata
 'metadata' => '메타데이터',
-'metadata-help' => '이 파일은 카메라나 스캐너에서 기록한 부가 정보를 가지고 있습니다.
-프로그램에서 파일을 편집할 경우, 새로 저장한 그림 파일에 일부 부가 정보가 빠질 수 있습니다.',
+'metadata-help' => '이 파일은 그 파일을 만들거나 디지털화하는 데 사용되는 카메라나 스캐너에서 기록한 부가 정보를 가지고 있습니다.
+프로그램에서 파일을 편집할 경우, 새로 저장한 파일에 일부 부가 정보가 빠질 수 있습니다.',
 'metadata-expand' => '자세한 정보 보이기',
 'metadata-collapse' => '자세한 정보 숨기기',
 'metadata-fields' => '파일 메타데이터 표가 접혀 있을 때, 이 메시지에 올라와 있는 다음 속성값만이 기본적으로 보이게 됩니다.
@@ -3657,7 +3663,7 @@ Variants for Chinese language
 'exif-preferredattributionname' => '이 저작물을 이용할 때 보일 저작자 이름',
 'exif-pngfilecomment' => 'PNG 파일 주석',
 'exif-disclaimer' => '면책 조항',
-'exif-contentwarning' => '콘텐츠 경고',
+'exif-contentwarning' => '내용 경고',
 'exif-giffilecomment' => 'GIF 파일 주석',
 'exif-intellectualgenre' => '항목 종류',
 'exif-subjectnewscode' => '주제 코드',
@@ -3884,7 +3890,7 @@ Variants for Chinese language
 'exif-urgency-other' => '사용자 정의 ($1)',
 
 # External editor support
-'edit-externally' => '이 파일을 바깥 프로그램을 사용해서 편집하기',
+'edit-externally' => '이 파일을 바깥 어플리케이션을 사용해 편집하기',
 'edit-externally-help' => '(자세한 정보는 [https://www.mediawiki.org/wiki/Manual:External_editors 설치 방법]을 참고하세요)',
 
 # 'all' in various places, this might be different for inflected languages
@@ -3905,7 +3911,7 @@ Variants for Chinese language
 'confirmemail_send' => '인증 코드를 메일로 보내기',
 'confirmemail_sent' => '인증 이메일을 보냈습니다.',
 'confirmemail_oncreate' => '확인 이메일을 보냈습니다.
-이 확인 과정은 로그인하는 데에 필요하지는 않지만, 위키 프로그램에서 제공하는 이메일 기능을 사용하기 위해서 필요합니다.',
+이 확인 과정은 로그인하는 데에 필요하지는 않지만, 위키에서 제공하는 이메일 기능을 사용하기 위해서 필요합니다.',
 'confirmemail_sendfailed' => '{{SITENAME}}에서 인증 이메일을 보낼 수 없습니다.
 이메일 주소를 잘못 입력했는지 확인해주세요.
 
@@ -3988,6 +3994,9 @@ $5
 'confirm-unwatch-button' => '확인',
 'confirm-unwatch-top' => '이 문서를 주시문서 목록에서 뺄까요?',
 
+# Separators for various lists, etc.
+'quotation-marks' => '“$1”',
+
 # Multipage image navigation
 'imgmultipageprev' => '← 이전 페이지',
 'imgmultipagenext' => '다음 페이지 →',
@@ -4078,13 +4087,13 @@ $5
 'version-poweredby-credits' => "이 위키는 '''[https://www.mediawiki.org/ MediaWiki]'''를 기반으로 작동합니다. Copyright © 2001-$1 $2.",
 'version-poweredby-others' => '그 외 다른 개발자',
 'version-poweredby-translators' => 'translatewiki.net 번역자',
-'version-credits-summary' => '[[Special:Version|미디어위키]]에 기여한 다음 사람í\95\9cí\85\8c ê°\90ì\82¬ë\93\9c립ë\8b\88ë\8b¤.',
+'version-credits-summary' => '[[Special:Version|미디어위키]]에 기여한 다음 사람ì\97\90ê²\8c ê°\90ì\82¬ë\93\9c립ë\8b\88ë\8b¤.',
 'version-license-info' => "미디어위키는 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 파일을 재배포하거나 수정할 수 있습니다.
 
 미디어위키가 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''. 자세한 내용은 GNU 일반 공중 사용 허가서 전문을 참고하십시오.
 
 당신은 이 프로그램을 통해 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 일반 공중 사용 허가서 전문]을 받았습니다. 그렇지 않다면, 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' => '설치된 소프트웨어',
 'version-software-product' => '제품',
 'version-software-version' => '버전',
 'version-entrypoints' => 'URL 진입점',
@@ -4097,7 +4106,7 @@ $5
 'redirect' => '파일, 사용자나 판 ID별 넘겨주기',
 'redirect-legend' => '파일이나 문서로 넘겨주기',
 'redirect-summary' => '이 특수 문서는 파일(파일 이름을 지정), 문서(판 ID를 지정)나 사용자 문서(사용자 ID를 정수로 지정)로 넘겨줍니다. 사용법: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], 혹은 [[{{#Special:Redirect}}/user/101]].',
-'redirect-submit' => '기',
+'redirect-submit' => '기',
 'redirect-lookup' => '찾을 종류:',
 'redirect-value' => '값:',
 'redirect-user' => '사용자 ID',
@@ -4107,7 +4116,7 @@ $5
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => '중복된 파일 검색',
-'fileduplicatesearch-summary' => '파일 해시값을 이용해 중복 파일을 찾습니다.',
+'fileduplicatesearch-summary' => '파일 해시값을 이용해 중복 파일을 검색합니다.',
 'fileduplicatesearch-legend' => '중복 검색',
 'fileduplicatesearch-filename' => '파일 이름:',
 'fileduplicatesearch-submit' => '검색',
@@ -4118,6 +4127,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => '특수 문서 목록',
+'specialpages-note-top' => '범례',
 'specialpages-note' => '* 일반 특수 문서입니다.
 * <span class="mw-specialpagerestricted">제한된 특수 문서입니다.</span>',
 'specialpages-group-maintenance' => '관리용 목록',
@@ -4203,7 +4213,7 @@ $5
 
 # SQLite database support
 'sqlite-has-fts' => '$1 (본문 전체 검색 지원)',
-'sqlite-no-fts' => '$1 (본문은 찾기에서 제외)',
+'sqlite-no-fts' => '$1 (본문 전체 검색 지원 제외)',
 
 # New logging system
 'logentry-delete-delete' => '$1 사용자가 $3 문서를 {{GENDER:$2|삭제했습니다}}',
@@ -4332,4 +4342,20 @@ $5
 'limitreport-expansiondepth' => '최대 전개 깊이',
 'limitreport-expensivefunctioncount' => '부하 높은 파서 함수 수',
 
+# Special:ExpandTemplates
+'expandtemplates' => '틀 전개',
+'expand_templates_intro' => '이 특수 문서는 글의 모든 틀을 끝까지 풀어 줍니다.
+<code><nowiki>{{</nowiki>#language:…}}</code> 같은 파서 함수나
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code> 같은 변수를 풀어줍니다.
+사실 두개의 중괄호 사이에 있는 것은 거의 모두 풀어줍니다.',
+'expand_templates_title' => '문서 이름 ({{FULLPAGENAME}} 등):',
+'expand_templates_input' => '전개할 내용:',
+'expand_templates_output' => '결과',
+'expand_templates_xml_output' => 'XML 출력',
+'expand_templates_ok' => '확인',
+'expand_templates_remove_comments' => '주석 제거',
+'expand_templates_remove_nowiki' => '결과에서 <nowiki> 태그를 숨기기',
+'expand_templates_generate_xml' => 'XML 구문 트리 보기',
+'expand_templates_preview' => '미리 보기',
+
 );
index 1901e4a..1d2463e 100644 (file)
@@ -165,8 +165,6 @@ $messages = array(
 
 'retrievedfrom' => 'Öшмöс "$1"',
 'youhavenewmessages' => 'Тэныт локтiс $1 ($2).',
-'newmessageslink' => 'виль юöррез',
-'newmessagesdifflink' => 'медбöрьяись вильмöтöм',
 'youhavenewmessagesmulti' => '$1 юкöтын тэ понда мыйкö эм',
 'editsection' => 'мöдкодьсьöтны',
 'editold' => 'мöдкодьсьöтны',
index 147c5ee..7892a93 100644 (file)
@@ -45,7 +45,6 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'Бютеу_бетле' ),
        'Blankpage'                 => array( 'Бош_бет' ),
        'Block'                     => array( 'Блок_эт' ),
-       'Blockme'                   => array( 'Мени_блок_эт' ),
        'Booksources'               => array( 'Китабланы_къайнакълары' ),
        'BrokenRedirects'           => array( 'Джыртылгъан_редиректле' ),
        'Categories'                => array( 'Категорияла' ),
@@ -57,7 +56,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Тергеу_джазыуну_къура', 'Къошулуучуну_къура', 'Регистрация_эт' ),
        'Deadendpages'              => array( 'Чыкъмазча_бетле' ),
        'DeletedContributions'      => array( 'Кетерилген_къошум' ),
-       'Disambiguations'           => array( 'Кёб_магъаналы' ),
        'DoubleRedirects'           => array( 'Экили_редирект' ),
        'EditWatchlist'             => array( 'Кёздеги_тизмени_тюрлендир' ),
        'Emailuser'                 => array( 'Къошулуучугъа_джазма', 'Джазма_ий' ),
@@ -383,8 +381,6 @@ $1',
 'ok' => 'ОК',
 'retrievedfrom' => 'Чыкъгъаны — «$1»',
 'youhavenewmessages' => 'Сизге $1 келдиле ($2).',
-'newmessageslink' => 'джангы билдириуле',
-'newmessagesdifflink' => 'сюзюу бетигизни ахыр тюрлениую',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|Башха бир къошулуучудан|$3 къошулуучудан}} сеннге $1 келди ($2).',
 'youhavenewmessagesmanyusers' => 'Талай къошулуучудан $1 барды. ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|джангы билдириу|джангы билдириуле}}',
@@ -1167,7 +1163,6 @@ $1",
 'preferences' => 'Джарашдырыула',
 'mypreferences' => 'Джарашдырыула',
 'prefs-edits' => 'Тюрлендириулени саны:',
-'prefsnologin' => 'Системагъа кесигизни танытмагъансыз',
 'changepassword' => 'Паролну ауушдур',
 'prefs-skin' => 'Джасауу',
 'skin-preview' => 'Ал къарау',
@@ -1447,6 +1442,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'recentchanges-label-minor' => 'Бу гитче тюрлениудю',
 'recentchanges-label-bot' => 'Бу тюрлендириуню бот этгенди',
 'recentchanges-label-unpatrolled' => 'Бу тюрлендириу алкъын патруль этилинмегенди',
+'recentchanges-legend-newpage' => '$1 — джангы бет',
 'rcnote' => '$4 $5 заманнга, арт {{PLURAL:$1|1|$1}} тюрлениу {{PLURAL:$2|1|$2}}  кюнню ичинде',
 'rcnotefrom' => 'Тюбюрекде <strong>$2</strong> башлаб (<strong>$1</strong> дери) тюрлендириуле кёрюнедиле',
 'rclistfrom' => '$1 башлаб джангы тюрлениулени кёргюз',
@@ -3685,4 +3681,7 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 'duration-centuries' => '$1 {{PLURAL:$1|ёмюр}}',
 'duration-millennia' => '$1 {{PLURAL:$1|мингджыллыкъ}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Шаблонланы ачыу',
+
 );
index be848a7..e914148 100644 (file)
@@ -112,7 +112,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Ahl_Atikelle' ),
        'Blankpage'                 => array( 'Leddijje_Sigge' ),
        'Block'                     => array( 'IP-Sperre' ),
-       'Blockme'                   => array( 'Proxy-Sperre' ),
        'Booksources'               => array( 'ISBN', 'Böcher', 'Böösher' ),
        'BrokenRedirects'           => array( 'Ömleitunge_en_et_Leere' ),
        'Categories'                => array( 'Saachjruppe' ),
@@ -123,7 +122,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Aanmelde', 'Medmaacher_wääde', 'Metmaacher_wääde' ),
        'Deadendpages'              => array( 'Sigge_ohne_Links_dren' ),
        'DeletedContributions'      => array( 'Fotjeschmeße' ),
-       'Disambiguations'           => array( 'Wat-es-dat-Sigge', 'Watt_ėßß_datt?' ),
        'DoubleRedirects'           => array( 'Ömleitunge_op_Ömleitunge' ),
        'Emailuser'                 => array( 'Email', 'E-mail' ),
        'Export'                    => array( 'Expocht' ),
@@ -488,8 +486,6 @@ $1',
 'pagetitle' => '$1 — {{SITENAME}}',
 'retrievedfrom' => 'Di Sigg heh stamp vun „$1“.',
 'youhavenewmessages' => 'Do häs $1 ($2).',
-'newmessageslink' => 'neu Metdeilunge op Dinger Klaafsigg',
-'newmessagesdifflink' => 'Ungerscheid zor vürletzte Version',
 'youhavenewmessagesfromusers' => 'Do häs $1 vun {{PLURAL:$3|enem|$3|keinem}} andere Metmaacher ($2)',
 'youhavenewmessagesmanyusers' => 'Do häs $1 vun andere Metmaacher ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|en neuje Nohreesch|neu Nohreeschte|kein neuje Nohreeschte}}',
@@ -1445,7 +1441,6 @@ dat dänne ehr Daate topaktoell sin,
 'preferences' => 'ming Enstellunge',
 'mypreferences' => 'Enstellunge',
 'prefs-edits' => 'Aanzahl Änderunge am Wiki:',
-'prefsnologin' => 'Nit enjelogg',
 'changepassword' => 'Passwood *',
 'prefs-skin' => 'Et Ussinn',
 'skin-preview' => 'Vör-Ansich',
@@ -1731,6 +1726,7 @@ dat dänne ehr Daate topaktoell sin,
 'recentchanges-label-minor' => 'Heh dat es en Mini-Änderung',
 'recentchanges-label-bot' => 'Di Änderung es fun enem Bot jemaat woode',
 'recentchanges-label-unpatrolled' => 'Heh di Änderung es noch nit nohjeloort',
+'recentchanges-legend-newpage' => '$1 - neu Sigg',
 'rcnote' => '{{PLURAL:$1|Heh es de letzte Änderung us|Heh sin de letzte <strong>$1</strong> Änderunge us|Et jit <strong>kei</strong> Änderunge en}} {{PLURAL:$2|däm letzte Daach|de letzte <strong>$2</strong> Dääsch|dä Zick}} vum <strong>$4</strong> aff <strong>$5</strong> Uhr beß jetz.',
 'rcnotefrom' => 'Hee {{PLURAL:$1|es ein|sin bes op <strong>$1</strong>|es keine}} fun de Änderunge zick dem <strong>$3</strong> öm <strong>$4</strong> Uhr opjelėß.',
 'rclistfrom' => 'Zeich de Änderunge vum $1 aan',
@@ -4364,4 +4360,21 @@ Wat De doh enjiß, kütt met Dingem Metmaachername un Dingem Brauser op die Sigg
 'limitreport-expensivefunctioncount' => 'Oproofe vun „düüre“ Fonxjuhne em Paaser',
 'limitreport-expensivefunctioncount-value' => '$1 vun $2',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Schablone üvverpröfe',
+'expand_templates_intro' => 'Heh di Extrasigg nemmp Täx aan un lühß alle Oproofe vun <code lang="en"><nowiki>{{</nowiki>&nbsp;…&nbsp;}}</code> Klammere op.
+Och verschaachtelte.
+Derbei jehüüere enschtalleete Paaserfunxjuhne, alsu esu jät wi
+<code lang="en"><nowiki>{{</nowiki>#language:…}}</code>, udder Varijaable, dat es esu jät wi
+<code lang="en"><nowiki>{{</nowiki>CURRENTDAY}}</code>.',
+'expand_templates_title' => 'Dä Siggetitel, also wat för {{FULLPAGENAME}} uew. enjeföllt weed:',
+'expand_templates_input' => 'Wat De üvverpröfe wells:',
+'expand_templates_output' => 'Wat erus kütt es',
+'expand_templates_xml_output' => 'XML ußjevve',
+'expand_templates_ok' => 'Lohß Jonn!',
+'expand_templates_remove_comments' => 'De ėnner Kommentare fottloohße',
+'expand_templates_remove_nowiki' => 'Donn de <nowiki>-Befähle ongerdröcke en dämm, wadd_eruß kütt',
+'expand_templates_generate_xml' => 'Och dä XML-Parser-Boum zeije',
+'expand_templates_preview' => 'Vör-Aansich',
+
 );
index cc09f47..bca1072 100644 (file)
@@ -83,7 +83,7 @@ $magicWords = array(
        'notoc'                     => array( '0', '_NAVEROKTUNE_', '__NOTOC__' ),
        'nogallery'                 => array( '0', '_GALERÎTUNE_', '__NOGALLERY__' ),
        'toc'                       => array( '0', '_NAVEROK_', '__TOC__' ),
-       'currentmonth1'             => array( '1', 'MEHANIHA1', 'CURRENTMONTH1' ),
+       'currentmonth1'             => array( '1', 'MEHA_NIHA_1', 'CURRENTMONTH1' ),
        'currentday'                => array( '1', 'ROJA_NIHA', 'CURRENTDAY' ),
        'currentday2'               => array( '1', 'ROJA_NIHA2', 'CURRENTDAY2' ),
        'currenttime'               => array( '1', 'DEMA_NIHA', 'CURRENTTIME' ),
@@ -105,6 +105,8 @@ $magicWords = array(
        'language'                  => array( '0', '#ZIMAN', '#LANGUAGE:' ),
        'numberofadmins'            => array( '1', 'HEJMARA_RÊVEBERAN', 'NUMBEROFADMINS' ),
        'special'                   => array( '0', 'taybet', 'special' ),
+       'pagesincategory_all'       => array( '0', 'hemû', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'rûpel', 'pages' ),
 );
 
 $messages = array(
@@ -350,8 +352,6 @@ $messages = array(
 'ok' => 'Baş e',
 'retrievedfrom' => 'Ji "$1" hatiye standin.',
 'youhavenewmessages' => '$1 yên te hene ($2).',
-'newmessageslink' => 'Peyamên nû',
-'newmessagesdifflink' => 'cudayî ji guhertoya berê',
 'youhavenewmessagesfromusers' => 'Ji {{PLURAL:$3|bikarhênerekê/î|$3 bikarhêneran}}, ji bo te $1 ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|peyameke nû heye|peyamên nû hene}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|guherandin|guherandinên dawî}}',
@@ -878,7 +878,6 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'preferences' => 'Tercîhên min',
 'mypreferences' => 'Tercihên min',
 'prefs-edits' => 'Hejmarê guherandinan:',
-'prefsnologin' => 'Xwe tomar nekir',
 'changepassword' => 'Şîfreyê biguherîne',
 'prefs-skin' => 'Pêste',
 'skin-preview' => 'Pêşdîtin',
@@ -1055,6 +1054,7 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'recentchanges-legend' => 'Vebijarkên guherandinên dawî',
 'recentchanges-summary' => 'Guhertinên herî dawî yên wîkiyê li ser vê rûpelê bişopîne.',
 'recentchanges-label-minor' => 'Ev guhertineka biçûk e',
+'recentchanges-legend-newpage' => '$1 - rûpela nû',
 'rcnote' => "Jêr {{PLURAL:$1|guherandinek|'''$1''' guherandinên dawî}} di {{PLURAL:$2|rojê|'''$2''' rojên dawî}} de ji $3 şûnde tên nîşan dan.",
 'rclistfrom' => 'Guherandinên ji $1 şûnde nîşan bide',
 'rcshowhideminor' => 'Guherandinên biçûk $1',
@@ -2182,4 +2182,9 @@ Ji kerema xwe zanibe ku tu bi rastî dixwazî vê rûpelê dîsa çêkî.",
 'searchsuggest-search' => 'Lêgerîn',
 'searchsuggest-containing' => 'dihundirîne...',
 
+# Special:ExpandTemplates
+'expand_templates_output' => 'Encam',
+'expand_templates_ok' => 'Baş e',
+'expand_templates_preview' => 'Pêşdîtin',
+
 );
index 99fa094..6fd75d9 100644 (file)
@@ -60,14 +60,13 @@ $namespaceAliases = array(
 );
 
 $specialPageAliases = array(
-       'Activeusers'               => array( 'DevnydhyoryonByw' ),
+       'Activeusers'               => array( 'DevnydhyoryonVyw' ),
        'Allmessages'               => array( 'OllMessajys' ),
        'Allpages'                  => array( 'OllFolennow' ),
        'Ancientpages'              => array( 'FolennowKoth' ),
        'Badtitle'                  => array( 'TitelDrog' ),
        'Blankpage'                 => array( 'FolenWag' ),
        'Block'                     => array( 'Difenna' ),
-       'Blockme'                   => array( 'GulOwDifen' ),
        'Booksources'               => array( 'PennfentynyowLyver' ),
        'BrokenRedirects'           => array( 'DaskedyansowTerrys' ),
        'Categories'                => array( 'Klassys' ),
@@ -79,10 +78,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'FormyaAkont' ),
        'Deadendpages'              => array( 'FolennowFordhDhall' ),
        'DeletedContributions'      => array( 'KevrohowDiles' ),
-       'Disambiguations'           => array( 'Diamstyryansow' ),
        'DoubleRedirects'           => array( 'DaswedyansowDewblek' ),
-       'EditWatchlist'             => array( 'ChanjyaOwRolGolya' ),
+       'EditWatchlist'             => array( 'ChanjyaOwRolWolya' ),
        'Emailuser'                 => array( 'EbostyaDevnydhyer' ),
+       'ExpandTemplates'           => array( 'BrasheSkantlyns' ),
        'Export'                    => array( 'Esperthi' ),
        'Fewestrevisions'           => array( 'AnLyhaAmendyansow' ),
        'Filepath'                  => array( 'HynsAnFolen' ),
@@ -153,36 +152,36 @@ $specialPageAliases = array(
        'Wantedfiles'               => array( 'RestrennowHwansus' ),
        'Wantedpages'               => array( 'FolennowHwansus' ),
        'Wantedtemplates'           => array( 'SkantlynsHwansus' ),
-       'Watchlist'                 => array( 'Rol_golya' ),
+       'Watchlist'                 => array( 'Rol_wolya' ),
        'Whatlinkshere'             => array( 'OwKevrennaOmma' ),
        'Withoutinterwiki'          => array( 'HebInterwiki' ),
 );
 
 $magicWords = array(
-       'redirect'                  => array( '0', '#DASWEDYANS', '#REDIRECT' ),
+       'redirect'                  => array( '0', '#DASKEDYANS', '#REDIRECT' ),
        'numberofpages'             => array( '1', 'NIVERAFOLENNOW', 'NUMBEROFPAGES' ),
        'numberofarticles'          => array( '1', 'NIVERAERTHYGLOW', 'NUMBEROFARTICLES' ),
        'numberoffiles'             => array( '1', 'NIVERARESTRENNOW', 'NUMBEROFFILES' ),
        'numberofusers'             => array( '1', 'NIVERADHEVNYDHYORYON', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'       => array( '1', 'NIVERADHEVNYDHYORYONVEW', 'NUMBEROFACTIVEUSERS' ),
+       'numberofactiveusers'       => array( '1', 'NIVERADHEVNYDHYORYONVYW', 'NUMBEROFACTIVEUSERS' ),
        'numberofedits'             => array( '1', 'NIVERAJANJYOW', 'NUMBEROFEDITS' ),
-       'numberofviews'             => array( '1', 'NIVERAWELOW', 'NUMBEROFVIEWS' ),
+       'numberofviews'             => array( '1', 'NIVERAWELYANSOW', 'NUMBEROFVIEWS' ),
        'pagename'                  => array( '1', 'HANOWANFOLEN', 'PAGENAME' ),
        'fullpagename'              => array( '1', 'HANOWLEUNANFOLEN', 'FULLPAGENAME' ),
        'img_thumbnail'             => array( '1', 'skeusennik', 'thumbnail', 'thumb' ),
        'img_manualthumb'           => array( '1', 'skeusennik=$1', 'thumbnail=$1', 'thumb=$1' ),
        'img_right'                 => array( '1', 'dyhow', 'right' ),
-       'img_left'                  => array( '1', 'cledh', 'left' ),
+       'img_left'                  => array( '1', 'kledh', 'left' ),
        'img_none'                  => array( '1', 'nagonan', 'none' ),
-       'img_center'                => array( '1', 'cresel', 'center', 'centre' ),
+       'img_center'                => array( '1', 'kresel', 'center', 'centre' ),
        'img_framed'                => array( '1', 'fremys', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'hebfram', 'frameless' ),
        'img_page'                  => array( '1', 'folen=$1', 'folen_$1', 'page=$1', 'page $1' ),
        'img_top'                   => array( '1', 'gwartha', 'top' ),
-       'img_text_top'              => array( '1', 'text-gwartha', 'text-top' ),
-       'img_middle'                => array( '1', 'cres', 'middle' ),
+       'img_text_top'              => array( '1', 'tekst-gwartha', 'text-top' ),
+       'img_middle'                => array( '1', 'kres', 'middle' ),
        'img_bottom'                => array( '1', 'goles', 'bottom' ),
-       'img_text_bottom'           => array( '1', 'text-goles', 'text-bottom' ),
+       'img_text_bottom'           => array( '1', 'tekst-goles', 'text-bottom' ),
        'img_link'                  => array( '1', 'kevren=$1', 'link=$1' ),
        'sitename'                  => array( '1', 'HANOWANWIASVA', 'SITENAME' ),
        'pageid'                    => array( '0', 'IDANFOLEN', 'PAGEID' ),
@@ -190,18 +189,18 @@ $magicWords = array(
        'servername'                => array( '0', 'HANOWANSERVYER', 'SERVERNAME' ),
        'grammar'                   => array( '0', 'GRAMASEK:', 'GRAMMAR:' ),
        'fullurl'                   => array( '0', 'URLLEUN:', 'FULLURL:' ),
-       'displaytitle'              => array( '1', 'DISQWEDHESANTITEL', 'DISPLAYTITLE' ),
+       'displaytitle'              => array( '1', 'DISKWEDHESANTITEL', 'DISPLAYTITLE' ),
        'language'                  => array( '0', '#YETH:', '#LANGUAGE:' ),
        'numberofadmins'            => array( '1', 'NIVERAVENYSTRORYON', 'NUMBEROFADMINS' ),
        'special'                   => array( '0', 'arbennek', 'special' ),
-       'filepath'                  => array( '0', 'HENSANFOLEN:', 'FILEPATH:' ),
-       'hiddencat'                 => array( '1', '__CLASSCUDHYS__', '__HIDDENCAT__' ),
-       'pagesincategory'           => array( '1', 'RESTRENNOWYNCLASS', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                  => array( '1', 'MENSANRESTREN', 'PAGESIZE' ),
+       'filepath'                  => array( '0', 'HYNSANFOLEN:', 'FILEPATH:' ),
+       'hiddencat'                 => array( '1', '__KLASSKUDHYS__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'RESTRENNOWYNKLASS', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'MYNSANRESTREN', 'PAGESIZE' ),
        'index'                     => array( '1', '__MENEGVA__', '__INDEX__' ),
        'noindex'                   => array( '1', '__HEBMENEGVA__', '__NOINDEX__' ),
        'numberingroup'             => array( '1', 'NIVERYNBAGAS', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'url_path'                  => array( '0', 'HENS', 'PATH' ),
+       'url_path'                  => array( '0', 'HYNS', 'PATH' ),
        'pagesincategory_all'       => array( '0', 'oll', 'all' ),
        'pagesincategory_pages'     => array( '0', 'folennow', 'pages' ),
 );
@@ -451,8 +450,6 @@ $1',
 'ok' => 'Sur',
 'retrievedfrom' => 'Daskevys dhyworth "$1"',
 'youhavenewmessages' => "$1 a'gas beus ($2).",
-'newmessageslink' => 'Messajys nowyth',
-'newmessagesdifflink' => 'chanj diwettha',
 'youhavenewmessagesfromusers' => "Hwi a'gas beus $1 dhyworth {{PLURAL:$3|devnydhyer aral|$3 devnydhyer}} ($2).",
 'youhavenewmessagesmanyusers' => "Hwi a'gas beus $1 dhyworth lies devnydhyer ($2).",
 'newmessageslinkplural' => '{{PLURAL:$1|messach nowyth|messajys nowyth}}',
@@ -971,6 +968,7 @@ Ny dhiskwedhir agas trigva ebost pan gestaffo devnydhyoryon erel dhywgh.',
 'recentchanges-label-minor' => 'Chanj byhan yw hemma',
 'recentchanges-label-bot' => 'Gwrys veu an chanj-ma gans bott',
 'recentchanges-label-unpatrolled' => 'Ny veu an chanj-ma patrolyes hwath',
+'recentchanges-legend-newpage' => '$1 - folen nowyth',
 'rcnote' => "A-woles yma {{PLURAL:$1|'''1''' janj|an '''$1''' chanjyow diwettha}} y'n {{PLURAL:$2|dydh|'''$2''' dydh}} diwettha, a-dhia $5, $4.",
 'rclistfrom' => 'Diskwedhes chanjyow nowyth yn unn dhalleth dhyworth $1.',
 'rcshowhideminor' => '$1 chanjyow byhan',
index 0926c66..3f97368 100644 (file)
@@ -297,8 +297,6 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => '"$1" булагынан алынды',
 'youhavenewmessages' => 'Сизге $1 ($2) бар.',
-'newmessageslink' => 'жаңы билдирүүлөр',
-'newmessagesdifflink' => 'соңку өзгөрүү',
 'youhavenewmessagesfromusers' => 'Сиз {{PLURAL:$3|колдонуучудан|$3 колдонуучу}} $1 алдыңыз ($2).',
 'youhavenewmessagesmanyusers' => 'Көп колдонуучулардан сиз $1 алдыңыз ($2).',
 'newmessageslinkplural' => 'жаңы {{PLURAL:$1|билдирүү| билдирүүлөр}}',
@@ -784,7 +782,6 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'preferences' => 'Ырастоолор',
 'mypreferences' => 'Ырастоолор',
 'prefs-edits' => 'Өзгөртүүлөрдүн саны',
-'prefsnologin' => 'Системге кирген жоксуз',
 'changepassword' => 'Сырсөздү өзгөртүү',
 'prefs-skin' => 'Тема',
 'skin-preview' => 'Алдын ала көрүү',
index b8e451b..df82069 100644 (file)
@@ -78,7 +78,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Paginae_veterrimae' ),
        'Blankpage'                 => array( 'Pagina_vacua' ),
        'Block'                     => array( 'Usorem_obstruere' ),
-       'Blockme'                   => array( 'Usor_obstructus' ),
        'Booksources'               => array( 'Librorum_fontes' ),
        'BrokenRedirects'           => array( 'Redirectiones_fractae' ),
        'Categories'                => array( 'Categoriae' ),
@@ -88,9 +87,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Rationem_creare' ),
        'Deadendpages'              => array( 'Paginae_sine_nexu' ),
        'DeletedContributions'      => array( 'Conlationes_deletae', 'Conlationes_usoris_deletae' ),
-       'Disambiguations'           => array( 'Paginae_disambiguationis', 'Disambiguationes' ),
        'DoubleRedirects'           => array( 'Redirectiones_duplices' ),
        'Emailuser'                 => array( 'Litteras_electronicas_usori_mittere', 'Littera_electronica' ),
+       'ExpandTemplates'           => array( 'Formulas_resolvere' ),
        'Export'                    => array( 'Exportare', 'Paginas_exportare' ),
        'Fewestrevisions'           => array( 'Paginae_minime_mutatae' ),
        'FileDuplicateSearch'       => array( 'Quaerere_fasciculos_duplices', 'Quaerere_imagines_duplices' ),
@@ -417,12 +416,10 @@ Vide [[Special:Version|paginam versionis]].',
 'ok' => 'Age',
 'retrievedfrom' => 'Receptum de "$1"',
 'youhavenewmessages' => 'Habes $1 ($2).',
-'newmessageslink' => 'nuntia nova',
-'newmessagesdifflink' => 'dissimilia post mutationem ultimam',
 'youhavenewmessagesfromusers' => 'Habes $1 ab {{PLURAL:$3|uno usore alio|usoribus $3}} ($2).',
 'youhavenewmessagesmanyusers' => 'Habes $1 a multis usoribus ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|nuntium novum|nuntia nova}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|dissimilitudo|dissimilitudines}} post mutationem ultimam',
+'newmessageslinkplural' => '{{PLURAL:$1|nuntium novum|999=nuntia nova}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|dissimilitudo|999=dissimilitudines}} post mutationem ultimam',
 'youhavenewmessagesmulti' => 'Habes nuntia nova in $1',
 'editsection' => 'recensere',
 'editold' => 'recensere',
@@ -934,7 +931,6 @@ Conare praefixare tua inquisitionem cum ''all:'' ut quaeras contenta omnia (pagi
 'preferences' => 'Praeferentiae',
 'mypreferences' => 'Praeferentiae',
 'prefs-edits' => 'Numerus recensionum:',
-'prefsnologin' => 'Conventum non est apertum',
 'changepassword' => 'Tesseram mutare',
 'prefs-skin' => 'Aspectum',
 'skin-preview' => 'Praevisum',
@@ -1147,6 +1143,7 @@ Si vis id dare, opera tua tibi ascribentur.',
 'recentchanges-label-minor' => 'Haec est recensio minor',
 'recentchanges-label-bot' => 'Hanc emendationem automaton fecit',
 'recentchanges-label-unpatrolled' => 'Haec recensio nondum est examinata',
+'recentchanges-legend-newpage' => '(vide etiam [[Special:NewPages|indicem paginarum novarum]])',
 'rcnote' => "Subter {{PLURAL:$1|est '''1''' nuper mutatum|sunt '''$1''' nuperrime mutata}} in {{PLURAL:$2|die proximo|'''$2''' diebus proximis}} ex $5, $4.",
 'rcnotefrom' => "Subter sunt '''$1''' nuperrime mutata in proxima '''$2''' die.",
 'rclistfrom' => 'Monstrare mutata nova incipiens ab $1',
@@ -2467,6 +2464,7 @@ Quaesumus, adfirma ut iterum hanc paginam crees.",
 
 # Search suggestions
 'searchsuggest-search' => 'Quaerere',
+'searchsuggest-containing' => 'continens...',
 
 # API errors
 'api-error-empty-file' => 'Fasciculus inmissus vacuus est.',
@@ -2477,4 +2475,7 @@ Quaesumus, adfirma ut iterum hanc paginam crees.",
 'api-error-mustbeloggedin' => 'Ad fasciculos inmittendos conventum aperire necesse est.',
 'api-error-unknownerror' => 'Error incognitus: "$1".',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Formulas resolvere',
+
 );
index af5e5eb..7e31f50 100644 (file)
@@ -80,7 +80,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'HojasViejas' ),
        'Blankpage'                 => array( 'VaziarHoja' ),
        'Block'                     => array( 'Bloquear' ),
-       'Blockme'                   => array( 'Bloquearme' ),
        'Booksources'               => array( 'FuentesDeLivros' ),
        'BrokenRedirects'           => array( 'DireksionesBozeadas' ),
        'Categories'                => array( 'Katēggorías' ),
@@ -91,10 +90,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'KrîarCuento' ),
        'Deadendpages'              => array( 'HojasSinAtamientos' ),
        'DeletedContributions'      => array( 'AjustamientosEfassados' ),
-       'Disambiguations'           => array( 'Apartamiento_de_senso' ),
        'DoubleRedirects'           => array( 'DireksionesDobles' ),
        'EditWatchlist'             => array( 'TrocarLista_de_Akavidamiento' ),
        'Emailuser'                 => array( 'MandarLetralUsador' ),
+       'ExpandTemplates'           => array( 'AlargarXabblones' ),
        'Export'                    => array( 'AktarearAfuera' ),
        'Fewestrevisions'           => array( 'MankoEddisyones' ),
        'FileDuplicateSearch'       => array( 'BuscarDosyasDobles' ),
@@ -423,8 +422,6 @@ $messages = array(
 'ok' => 'DE ACORDDO',
 'retrievedfrom' => 'Acòjido del adhresso "$1"',
 'youhavenewmessages' => 'Tienes $1 ($2).',
-'newmessageslink' => 'mesajes nuevos',
-'newmessagesdifflink' => 'el trocamiento de alcabo',
 'youhavenewmessagesmulti' => 'Tienes messajes nuevos en $1',
 'editsection' => 'troca',
 'editold' => 'troca',
index c36381e..cea0406 100644 (file)
@@ -57,7 +57,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Falschen_Titel' ),
        'Blankpage'                 => array( 'Eidel_Säit' ),
        'Block'                     => array( 'Spären' ),
-       'Blockme'                   => array( 'Mech_spären' ),
        'Booksources'               => array( 'Bicher_mat_hirer_ISBN_sichen' ),
        'BrokenRedirects'           => array( 'Futtis_Viruleedungen' ),
        'Categories'                => array( 'Kategorien' ),
@@ -69,10 +68,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Benotzerkont_opmaachen' ),
        'Deadendpages'              => array( 'Sakgaasse-Säiten' ),
        'DeletedContributions'      => array( 'Geläschte_Kontributiounen' ),
-       'Disambiguations'           => array( 'Homonymie' ),
        'DoubleRedirects'           => array( 'Duebel_Viruleedungen' ),
        'EditWatchlist'             => array( 'Iwwerwaachungslëscht_änneren' ),
        'Emailuser'                 => array( 'Dësem_Benotzer_eng_E-Mail_schécken' ),
+       'ExpandTemplates'           => array( 'Schablounen_erweideren' ),
        'Export'                    => array( 'Exportéieren' ),
        'Fewestrevisions'           => array( 'Säite_mat_de_mannsten_Ännerungen' ),
        'FileDuplicateSearch'       => array( 'No_duebele_Fichieren_sichen' ),
@@ -116,6 +115,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Protegéiert_Säiten' ),
        'Protectedtitles'           => array( 'Gespaarte_Säiten' ),
        'Randompage'                => array( 'Zoufälleg_Säit' ),
+       'RandomInCategory'          => array( 'Zoufälleg_Säit_aus_der_Kategorie' ),
        'Randomredirect'            => array( 'Zoufälleg_Viruleedung' ),
        'Recentchanges'             => array( 'Rezent_Ännerungen' ),
        'Recentchangeslinked'       => array( 'Ännerungen_op_verlinkte_Säiten' ),
@@ -460,12 +460,10 @@ Kuckt d'[[Special:Version|Versiounssäit]].",
 'ok' => 'OK',
 'retrievedfrom' => 'Vun „$1“',
 'youhavenewmessages' => 'Dir hutt $1 ($2).',
-'newmessageslink' => 'nei Messagen',
-'newmessagesdifflink' => 'Lescht Ännerung',
 'youhavenewmessagesfromusers' => 'Dir hutt $1 vu(n) {{PLURAL:$3|engem anere Benotzer|$3 anere Benotzer}} ($2).',
 'youhavenewmessagesmanyusers' => 'Dir hutt $1 vu ville Benotzer ($2)',
-'newmessageslinkplural' => '{{PLURAL:$1|een neie Message|nei Message}}',
-'newmessagesdifflinkplural' => 'lescht {{PLURAL:$1|Ännerung|Ännerungen}}',
+'newmessageslinkplural' => '{{PLURAL:$1|een neie Message|999=nei Messagen}}',
+'newmessagesdifflinkplural' => 'lescht {{PLURAL:$1|Ännerung|999=Ännerungen}}',
 'youhavenewmessagesmulti' => 'Dir hutt nei Messagen op $1',
 'editsection' => 'änneren',
 'editold' => 'änneren',
@@ -594,7 +592,8 @@ Den Administrateur den d\'Schreiwe gespaart huet, huet dës Erklärung uginn: "$
 'invalidtitle-knownnamespace' => 'Net valabelen Titel mam Nummraum "$2" a mam Text "$3"',
 'invalidtitle-unknownnamespace' => 'Net valabelen Titel mat der onbekannter Nummraum-Zuel $1 a mam Text "$2"',
 'exception-nologin' => 'Net ageloggt',
-'exception-nologin-text' => 'Dës Säit oder Aktioun erfuerdert datt Dir op dëser Wiki ageloggt sidd.',
+'exception-nologin-text' => '[[Special:Userlogin|Loggt Iech w.e.g. a]] fir op dës Säit oder dës Aktioun zougräifen ze kënnen.',
+'exception-nologin-text-manual' => 'Dir musst Iech $1 fir dës Säit kucken ze kënne respektiv fir dës Aktioun ze maachen.',
 
 # Virus scanner
 'virus-badscanner' => "Schlecht Konfiguratioun: onbekannte Virescanner: ''$1''",
@@ -1138,8 +1137,8 @@ Dir kënnt dësen Ënnerscheed gesinn; Detailer fannt Dir am [{{fullurl:{{#Speci
 'revdelete-show-file-submit' => 'Jo',
 'revdelete-selected' => "'''{{PLURAL:$2|Gewielt Versioun|Gewielt Versioune}} vu(n) [[:$1]] :'''",
 'logdelete-selected' => "'''Ausgewielten {{PLURAL:$1|Evenement|Evenementer}} aus dem Logbuch:'''",
-'revdelete-text' => "'''Geläschte Versiounen oder aner geläschte Bestanddeeler sinn net méi ëffentlech zougänglech, si stinn awer weiderhin an der Versiounsgeschicht vun der Säit.'''
-Aner {{SITENAME}}-Administrateure kënnen de geläschten Inhalt oder aner geläschte Bestanddeeler weiderhi gesinn a restauréieren, et sief, et gouf festgeluecht, datt déi Limitatioune vum Accès och fir Administrateure gëllen.",
+'revdelete-text' => "'''Geläscht Versiounen oder aner geläscht Bestanddeeler sinn net méi ëffentlech zougänglech, si stinn awer weiderhin an der Versiounsgeschicht vun der Säit.'''
+Aner {{SITENAME}}-Administrateure kënnen de geläschten Inhalt oder aner geläscht Bestanddeeler weiderhi gesinn a restauréieren, et sief, et gouf festgeluecht, datt déi Limitatioune vum Accès och fir Administrateure gëllen.",
 'revdelete-confirm' => "Confirméiert w.e.g. datt Dir dat maache wëllt, datt Dir d'Konsequenze verstitt an datt Dir dëst an Aklang mat de [[{{MediaWiki:Policy-url}}|Richtlinne]] maacht.",
 'revdelete-suppress-text' => "Ënnerdréckung sollt '''nëmmen''' an dëse Fäll benotzt ginn:
 * Informatiounen déi beleidege kéinten
@@ -1193,7 +1192,7 @@ Kuckt w.e.g. an de Logbicher no.",
 
 # Suppression log
 'suppressionlog' => 'Lëscht vun de verstoppten a geläschte Säiten',
-'suppressionlogtext' => 'Ënnendrënner ass eng Lëscht vun de geläschte Säiten a Spären a vun den Administrateuren verstopptem Inhalt.
+'suppressionlogtext' => 'Ënnendrënner ass eng Lëscht vun de geläschte Säiten a Spären an Inhalt dee vun den Administrateure verstoppt gouf.
 Kuckt [[Special:BlockList|Lëscht vun Späre]] fir déi aktuell Spären.',
 
 # History merging
@@ -1312,7 +1311,7 @@ Detailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'preferences' => 'Astellungen',
 'mypreferences' => 'Astellungen',
 'prefs-edits' => 'Zuel vun den Ännerungen:',
-'prefsnologin' => 'Net ageloggt',
+'prefsnologintext2' => 'Dir musst Iech $1 fir Är Benotzerastellunge festzeleeën',
 'changepassword' => 'Passwuert änneren',
 'prefs-skin' => 'Skin',
 'skin-preview' => 'Kucken',
@@ -1422,6 +1421,7 @@ Dës Informatioun ass ëffentlech.",
 'prefs-displayrc' => 'Optioune vun deem wat gewise gëtt',
 'prefs-displaysearchoptions' => 'Optioune vum Affichage',
 'prefs-displaywatchlist' => 'Optioune vun deem wat gewise gëtt',
+'prefs-tokenwatchlist' => 'Token',
 'prefs-diffs' => 'Ënnerscheeder',
 'prefs-help-prefershttps' => 'Dës Astellung gëtt déi nächste Kéier wierksam wou Dir Iech ageloggt.',
 
@@ -1609,6 +1609,8 @@ Dës Informatioun ass ëffentlech.",
 'recentchanges-label-minor' => 'Dëst ass eng kleng Ännerung',
 'recentchanges-label-bot' => 'Dës Ännerung gouf vun engem Bot gemaacht',
 'recentchanges-label-unpatrolled' => 'Dës Ännerung gouf nach net nogekuckt',
+'recentchanges-legend-newpage' => '(kuckt och [[Special:NewPages|Lëscht vun den neie Säiten]])',
+'recentchanges-legend-plusminus' => "''(±123)''",
 'rcnote' => "Hei {{PLURAL:$1|ass déi lescht Ännerung|sinn déi lescht '''$1''' Ännerungen}} {{PLURAL:$2|vum leschten Dag|vun de leschten '''$2''' Deeg}}, Stand: $4 ëm $5 Auer.",
 'rcnotefrom' => "Ugewise ginn d'Ännerunge vum '''$2''' un (maximal '''$1''' Ännerunge gi gewisen).",
 'rclistfrom' => 'Nei Ännerunge vu(n) $1 u weisen',
@@ -1660,9 +1662,9 @@ Säite vun [[Special:Watchlist|Ärer Iwwerwaachungslëscht]] si '''fett''' gesch
 
 Hei fannt Dir en Extrait aus dem Läsch- a Réckel-Logbuch fir dëse Fichier.",
 'uploadtext' => "Benotzt dëse Formulaire, fir nei Fichieren eropzelueden.
-Gitt op d'[[Special:FileList|Lëscht vun den eropgeluedene Fichieren]], fir no Fichieren ze sichen déi virdrun eropgeluede goufen, Eropluedunge fannt dir an der [[Special:Log/upload|Lëscht vun den eropgeluedene Fichieren]], geläschte Fichieren am [[Special:Log/delete|Läschlog]].
+Gitt op d'[[Special:FileList|Lëscht vun den eropgeluedene Fichieren]], fir no Fichieren ze sichen déi virdrun eropgeluede goufen, Eropluedunge fannt dir an der [[Special:Log/upload|Lëscht vun den eropgeluedene Fichieren]], geläscht Fichiere stinn am [[Special:Log/delete|Läschlog]].
 
-Fir e '''Bild''' op enger Säit zu benotzen, schreift amplaz vum Bild eng vun dëse Formelen:
+Fir e '''Bild''' op enger Säit ze benotzen, schreift amplaz vum Bild eng vun dëse Formelen:
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichier.jpg]]</nowiki></code>''' fir déi ganz Versioun vum Fichier ze benotzen
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichier.png|200px|thumb|left|alt text]]</nowiki></code>''' fir eng 200 Pixel breet Versioun an enger Këscht am lénke Rand mat 'alt text' als Beschreiwung
 * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fichier.ogg]]</nowiki></code>''' fir e Fichier direkt ze verlinken ouni de Fichier ze weisen",
@@ -2318,7 +2320,7 @@ Den Editeur kontaktéieren:
 E-Mail: $PAGEEDITOR_EMAIL
 Wiki: $PAGEEDITOR_WIKI
 
-Et gi soulaang keng weider Maile geschéckt, bis Dir d\'Säit nees emol besicht hutt.
+Et gi soulaang keng weider Maile geschéckt, bis Dir d\'Säit nees emol besicht hutt wärend deem Dir ageloggt sidd.
 Op Ärer Iwwerwaachungslëscht kënnt Dir all Benoorichtigungsmarkeren zesummen zErécksetzen.
 
 
@@ -2330,7 +2332,7 @@ Fir d\'Astellungen op Ären E-Mailbenoriichtigungen z\'änneren, besicht w.e.g.
 {{canonicalurl:{{#special:Preferences}}}}
 
 
-Fir d\'Astellungen vun Ärer Iwwerwaachungslëscht z\'änneren, besicht w.e.g.
+Fir d\'Astellunge vun Ärer Iwwerwaachungslëscht z\'änneren, besicht w.e.g.
 {{canonicalurl:Special:Watchlist/edit}}
 
 Feedback a weider Hëllef:
@@ -2481,10 +2483,10 @@ Fir nëmmen eng bestëmmte Versioun vun der Säit ze restauréieren, markéiert
 'undeleterevisions' => '{{PLURAL:$1|1 Versioun|$1 Versiounen}} archivéiert',
 'undeletehistory' => 'Wann Dir dës Säit restauréiert, ginn och all déi al Versioune restauréiert.
 Wann zanter dem Läschen eng nei Säit mat dem selwechten Numm ugeluecht gouf, ginn déi restauréiert Versioune chronologesch an den Historique agedroen.',
-'undeleterevdel' => "D'Restauratioun gëtt net gemaach wann dëst dozou féiert datt déi aktuell Versioun vun der Säit oder vum Fichier deelweis geläscht gëtt.
-A sou Fäll däerf déi neiste Versioun net markéiert ginn oder déi neiste geläschte Versioun muss nees ugewise ginn.",
+'undeleterevdel' => "D'Restauratioun gëtt net gemaach wann dat dozou féiert datt déi aktuell Versioun vun der Säit oder vum Fichier deelweis geläscht gëtt.
+A sou Fäll däerf déi neist Versioun net markéiert ginn oder déi neist geläscht Versioun muss nees ugewise ginn.",
 'undeletehistorynoadmin' => "Dës Säit gouf geläscht. De Grond fir d'Läsche gesitt der ënnen, zesumme mat der Iwwersiicht vun den eenzele Versioune vun der Säit an hiren Auteuren. Déi verschidden Textversioune kënnen awer just vun Administrateure gekuckt a restauréiert ginn.",
-'undelete-revision' => 'Geläschte Versioun vu(n) $1 (Versioun vum $4 um $5 Auer) vum $3:',
+'undelete-revision' => 'Geläscht Versioun vu(n) $1 (Versioun vum $4 um $5 Auer) vum $3:',
 'undeleterevision-missing' => "Ongëlteg oder Versioun déi feelt. Entweder ass de Link falsch oder d'Versioun gouf aus dem Archiv restauréiert oder geläscht.",
 'undelete-nodiff' => 'Et si keng méi al Versiounen do.',
 'undeletebtn' => 'Restauréieren',
@@ -2516,7 +2518,7 @@ Am [[Special:Log/delete|Läsch-Logbuch]] fannt Dir déi geläscht a restauréier
 'undelete-error-long' => 'Beim Restauréiere vun engem Fichier goufe Feeler fonnt:
 
 $1',
-'undelete-show-file-confirm' => '!Sidd Dir sécher, datt dir eng geläschte Versioun vum Fichier „<nowiki>$1</nowiki>“ vum $2 ëm $3 Auer gesi wëllt?',
+'undelete-show-file-confirm' => 'Sidd Dir sécher, datt dir eng geläscht Versioun vum Fichier „<nowiki>$1</nowiki>“ vum $2 um $3 Auer gesi wëllt?',
 'undelete-show-file-submit' => 'Jo',
 
 # Namespace form on various pages
@@ -3111,7 +3113,7 @@ Fëllt dëst '''NET''' aus!",
 'log-show-hide-patrol' => 'Kontroll-Logbuch $1',
 
 # Image deletion
-'deletedrevision' => 'Al, geläschte Versioun $1',
+'deletedrevision' => 'Al, geläscht Versioun vu(n) $1',
 'filedeleteerror-short' => 'Feeler beim Läsche vum Fichier: $1',
 'filedeleteerror-long' => 'Bäim Läsche vum Fichier si Feeler festgestallt ginn:
 
@@ -3814,9 +3816,9 @@ Gebrauch: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/re
 
 # Special:SpecialPages
 'specialpages' => 'Spezialsäiten',
+'specialpages-note-top' => 'Erklärung',
 'specialpages-note' => '* Normal Spezialsäiten.
-* <span class="mw-specialpagerestricted">Spezialsäite fir Benotzer mat méi Rechter.</span>
-* <span class="mw-specialpagecached">Spezialsäiten aus dem Tëschespäicher (ka vereelst sinn).</span>',
+* <span class="mw-specialpagerestricted">Spezialsäite fir Benotzer mat méi Rechter.</span>',
 'specialpages-group-maintenance' => 'Maintenance-Rapporten',
 'specialpages-group-other' => 'Aner Spezialsäiten',
 'specialpages-group-login' => 'Aloggen / Benotzerkont uleeën',
@@ -4022,4 +4024,20 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|Byte|Byten}}',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|Byte|Byten}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Schablounen expandéieren',
+'expand_templates_intro' => 'Op dëser Spezialsäit kann Text agesat ginn an all Schablounen doran gi rekursiv expandéiert.
+Och Parserfonctioune wéi<code><nowiki>{{</nowiki>#language:…}}</code> a Variabele wéi
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>, ginn ausgewäert.
+Faktesch alles wat tëscht duebelen Accolade steet gëtt ausgewäert.',
+'expand_templates_title' => 'Titel vun der Säit, dëst kann nëtzlech si wa(nn) {{FULLPAGENAME}} benotzt gëtt:',
+'expand_templates_input' => 'Gitt ären Text hei an:',
+'expand_templates_output' => 'Resultat',
+'expand_templates_xml_output' => 'Resultat als XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Bemierkunge läschen',
+'expand_templates_remove_nowiki' => '<nowiki>-Taggen am Resultat suppriméieren',
+'expand_templates_generate_xml' => "Weis d'Struktur vum XML",
+'expand_templates_preview' => 'Kucken ouni ofzespäicheren',
+
 );
index 96e0bf8..849e641 100644 (file)
@@ -286,8 +286,6 @@ $messages = array(
 'ok' => 'ОК',
 'retrievedfrom' => 'Чешне "$1" я',
 'youhavenewmessages' => 'Квез $1 ($2) атанва.',
-'newmessageslink' => 'цӀийи чарар',
-'newmessagesdifflink' => 'Эхиримжи масакӀавилер',
 'youhavenewmessagesmulti' => '"$1"-да квез цӀийи чарар атанва.',
 'editsection' => 'Дуьзар хъувун',
 'editold' => 'Дуьзар хъувун',
@@ -621,7 +619,6 @@ $messages = array(
 'preferences' => 'Туькlуьрун',
 'mypreferences' => 'Зи низамарунар',
 'prefs-edits' => 'Дьузар хъувунрин кьадар',
-'prefsnologin' => 'Куьне гьахьнавач',
 'changepassword' => 'Парол дегишарун',
 'prefs-skin' => 'Къайдадиз ттунин тема',
 'skin-preview' => 'Сифтедин килигун',
index bf8f3fc..27d94f1 100644 (file)
@@ -228,8 +228,6 @@ $messages = array(
 'ok' => 'Oce',
 'retrievedfrom' => 'Retraeda de "$1"',
 'youhavenewmessages' => 'Tu ave $1 ($2).',
-'newmessageslink' => 'mesajes nova',
-'newmessagesdifflink' => 'cambia presedente',
 'youhavenewmessagesmulti' => 'Tu ave mesajes nova en $1',
 'editsection' => 'cambia',
 'editold' => 'edita',
@@ -955,4 +953,7 @@ Si la fix ia es cambiada de se stato orijinal, alga detalias pote no es clara en
 # Special:SpecialPages
 'specialpages' => 'Pajes spesial',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Oce',
+
 );
index b7bcdf1..7833d4d 100644 (file)
@@ -266,8 +266,6 @@ Kebera ku [[Special:Version|lukalala lw'empandika za MediaWiki]].",
 'ok' => 'Kale',
 'retrievedfrom' => 'Bino bigyidwa ku "$1"',
 'youhavenewmessages' => 'Ofunye $1 ($2).',
-'newmessageslink' => 'obubaka',
-'newmessagesdifflink' => "obusing'obupya",
 'youhavenewmessagesmulti' => 'Ku $1 bakuweerezza obubaka',
 'editsection' => 'kyusa',
 'editold' => 'kyusa',
index 3b12fe3..9183538 100644 (file)
@@ -58,7 +58,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Audste_pagina\'s' ),
        'Blankpage'                 => array( 'Laeg_pagina\'s' ),
        'Block'                     => array( 'Blokkere' ),
-       'Blockme'                   => array( 'Blokkeer_mich' ),
        'Booksources'               => array( 'Bookwinkele' ),
        'BrokenRedirects'           => array( 'Gebraoke_doorverwiezinge' ),
        'Categories'                => array( 'Categorieë' ),
@@ -68,7 +67,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Gebroeker_aonmake' ),
        'Deadendpages'              => array( 'Doedloupende_pagina\'s' ),
        'DeletedContributions'      => array( 'Eweggesjafde_biedrage' ),
-       'Disambiguations'           => array( 'Verdudelikingspagina\'s' ),
        'DoubleRedirects'           => array( 'Dobbel_doorverwiezinge' ),
        'Emailuser'                 => array( 'E-maile' ),
        'Export'                    => array( 'Exportere' ),
@@ -414,8 +412,6 @@ $1',
 'ok' => 'ok',
 'retrievedfrom' => 'Aafkómstig van "$1"',
 'youhavenewmessages' => 'Doe höbs $1 ($2).',
-'newmessageslink' => 'nuuj berichte',
-'newmessagesdifflink' => 'Lèste verangering',
 'youhavenewmessagesmulti' => 'Doe höbs nuuj berichte op $1',
 'editsection' => 'bewèrk',
 'editold' => 'bewirke',
@@ -1154,7 +1150,6 @@ Mèrk op dat hun indexe van {{SITENAME}} content e bietje gedatierd kint zien.',
 'preferences' => 'Veurkäöre',
 'mypreferences' => 'Mien veurkäöre',
 'prefs-edits' => 'Aantal bewèrkinge:',
-'prefsnologin' => 'Neet aangemèld',
 'changepassword' => 'Wachwaord verangere',
 'prefs-skin' => '{{SITENAME}}-uterlik',
 'skin-preview' => 'Veurbesjouwing',
@@ -1429,6 +1424,7 @@ Deze informatie is zichbaar veur angere gebroekers.',
 'recentchanges-label-minor' => "Dit is 'n klein bewirking",
 'recentchanges-label-bot' => "Dees bewirking is oetgeveurd door 'ne bot",
 'recentchanges-label-unpatrolled' => 'Dees bewirking is nog neet gekónterleerd',
+'recentchanges-legend-newpage' => '$1 - Nuuj pagina',
 'rcnote' => "Hiejónger {{PLURAL:$1|steit de lètste bewirking|staon de lètste '''$1''' bewirkinge}} van de aafgeloupe {{PLURAL:$2|daag|'''$2''' daag}}, op $4, um $5.",
 'rcnotefrom' => "Verangeringe sins <b>$2</b> (mit 'n maximum van <b>$1</b> verangeringe).",
 'rclistfrom' => 'Tuin de verangeringe vanaaf $1',
@@ -3668,4 +3664,18 @@ Anges kin se-n ouch \'t einvawdig formeleer hieónger gebroeke. Dien commentaar
 'duration-centuries' => '$1 {{PLURAL:$1|ieëf|ieëf}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Sjablone plekke',
+'expand_templates_intro' => "Dees speciaal pazjena laes de ingegaeve teks in en plektj (mitte functie subst) recursief alle sjablone in de teks. 't Plek ouch alle parserfuncties wie <nowiki>{{</nowiki>#language:...}} en variabele wie <nowiki>{{</nowiki>CURRENTDAY}} - vriejwaal al tösse dóbbel accolades.
+Hiej veur waere de relevante functies van de MediaWiki-parser gebroek.",
+'expand_templates_title' => 'Contekstitel, veur {{FULLPAGENAME}}, etc:',
+'expand_templates_input' => 'Inlaajteks:',
+'expand_templates_output' => 'Rezultaot',
+'expand_templates_xml_output' => 'XML-oetveur',
+'expand_templates_ok' => 'ok',
+'expand_templates_remove_comments' => 'Wis opmerkinge',
+'expand_templates_remove_nowiki' => "Óngerdrök <nowiki>-tags in 't resultaat",
+'expand_templates_generate_xml' => 'XML-parserboum bekieke',
+'expand_templates_preview' => 'Veurvertoeaning',
+
 );
index af13d6a..6a3f1f5 100644 (file)
@@ -55,7 +55,6 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'Tûtte e paggine' ),
        'Ancientpages'              => array( 'Paggine meno reçenti' ),
        'Block'                     => array( 'Blocca' ),
-       'Blockme'                   => array( 'BloccaProxy' ),
        'Booksources'               => array( 'RiçercaISBN' ),
        'Categories'                => array( 'Categorîe' ),
        'ChangePassword'            => array( 'Rimposta paròlla d\'ordine' ),
@@ -384,8 +383,6 @@ $1",
 'ok' => "D'accòrdio",
 'retrievedfrom' => 'Estræto da "$1"',
 'youhavenewmessages' => "Ti gh'æ $1 ($2).",
-'newmessageslink' => 'Nêuvi messaggi',
-'newmessagesdifflink' => 'urtima modiffica',
 'youhavenewmessagesfromusers' => "Ti g'hæ $1 da {{PLURAL:$3|un atro utente|$3 utenti}} ($2).",
 'youhavenewmessagesmanyusers' => "Ti g'hæ $1 da tanti utenti ($2).",
 'newmessageslinkplural' => '{{PLURAL:$1|un noeuvo messaggio|noeuvi messaggi}}',
index 5418d93..00ea60d 100644 (file)
@@ -159,8 +159,6 @@ $messages = array(
 
 'retrievedfrom' => 'Ulzõ vȯtštõd "$1"',
 'youhavenewmessages' => 'Täddõn um $1 ($2)',
-'newmessageslink' => 'ūži tīeūţidi',
-'newmessagesdifflink' => 'perri mõitõks',
 'editsection' => 'redigīer',
 'editold' => 'redigīerõgid',
 'viewsourceold' => 'vaņ ovāt-tekstõ',
index bf2409b..aa8317b 100644 (file)
@@ -75,7 +75,6 @@ $specialPageAliases = array(
        'BrokenRedirects'           => array( 'RedirezionS-cepada' ),
        'Categories'                => array( 'Categurij' ),
        'CreateAccount'             => array( 'CreaCünt' ),
-       'Disambiguations'           => array( 'Desambiguazion' ),
        'DoubleRedirects'           => array( 'RedirezionDubia' ),
        'Listadmins'                => array( 'ListaAministradur' ),
        'Listfiles'                 => array( 'Imagin' ),
@@ -344,8 +343,6 @@ $1",
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Utegnüü de "$1"',
 'youhavenewmessages' => "A gh'hii di $1 ($2).",
-'newmessageslink' => 'messagg növ',
-'newmessagesdifflink' => 'diferenza cun la versión de prima',
 'youhavenewmessagesmulti' => "Te gh'hee di messagg növ ins'el $1",
 'editsection' => 'mudifega',
 'editold' => 'mudifega',
@@ -739,6 +736,7 @@ Pröa a giuntagh denanz a la tò ricerca ''all:'' per cercà in tücc i namespac
 'recentchanges-label-minor' => "Quela chì l'è una mudifega piscinina.",
 'recentchanges-label-bot' => "Quela mudifega chì l'ha fada un bot",
 'recentchanges-label-unpatrolled' => "Quela mudifega chì a l'è stada mimga anmò verificada.",
+'recentchanges-legend-newpage' => '$1 - pagina növa',
 'rcnote' => "Chì de sota {{PLURAL:$1|gh'è '''1''' mudifega|a hinn i ültim '''$1''' mudifegh}} in di ültim {{PLURAL:$2|dì|'''$2''' dì}}, a partì dai $5 del $4.",
 'rcnotefrom' => "Chì de sota gh'è la lista di mudifegh de <b>$2</b> (fina a <b>$1</b>).",
 'rclistfrom' => 'Fà vidè i cambiament növ a partì de $1',
index 8d95c64..8e1a7d7 100644 (file)
@@ -42,7 +42,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'ການປະກອບສ່ວນ' ),
        'CreateAccount'             => array( 'ສ້າງບັນຊີ' ),
        'Deadendpages'              => array( 'ໜ້າທີ່ບໍ່ມີໜ້າໃດໂຍງມາ' ),
-       'Disambiguations'           => array( 'ແກ້ຄວາມກຳກວມ' ),
        'DoubleRedirects'           => array( 'ໂອນຊ້ອນ' ),
        'Listadmins'                => array( 'ລາຍຊື່ຜູ້ບໍລິຫານລະບົບ' ),
        'Listbots'                  => array( 'ລາຍຊື່ບອຕ' ),
@@ -294,8 +293,6 @@ $messages = array(
 'ok' => 'ຕົກລົງ',
 'retrievedfrom' => 'ຖອນມາຈາກ "$1"',
 'youhavenewmessages' => 'ທ່ານ ມີ $1 ($2).',
-'newmessageslink' => 'ຂໍ້ຄວາມໃໝ່',
-'newmessagesdifflink' => 'ການປ່ຽນແປງຫຼ້າສຸດ',
 'youhavenewmessagesmulti' => 'ທ່ານມີຂໍ້ຄວາມໃໝ່ ຢູ່ $1',
 'editsection' => 'ດັດແກ້',
 'editold' => 'ດັດແກ້',
@@ -954,4 +951,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:SpecialPages
 'specialpages' => 'ໜ້າພິເສດ',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'ຂະຫຍາຍແມ່ແບບ',
+
 );
index ae71cc6..4f23f6d 100644 (file)
@@ -207,8 +207,6 @@ $messages = array(
 'ok' => 'lumelisize',
 'retrievedfrom' => 'Bulukezi ye ng\'i di "$1"',
 'youhavenewmessages' => 'A sa pozefisize $1 ($2).',
-'newmessageslink' => 'nca mulumiwani',
-'newmessagesdifflink' => 'nca petuho te-i',
 'youhavenewmessagesmulti' => 'Nca $1 mulumiwani',
 'editsection' => "hloli ye ng'i",
 'editold' => "hloli ye ng'i",
@@ -459,7 +457,6 @@ Informasi: (bye) = petuho a nca selt,
 'preferences' => 'Petohoni di sebelu',
 'mypreferences' => 'Zwa petohoni di sebelu',
 'prefs-edits' => "Hloli ye ng'inabi:",
-'prefsnologin' => 'Ni menuhile',
 'prefs-skin' => 'PendiBe',
 'skin-preview' => 'PendiBe',
 'datedefault' => 'Ni di petohoni di sebelu',
index 74da0db..d55d4e2 100644 (file)
@@ -40,15 +40,18 @@ $messages = array(
 'tog-oldsig' => 'امضايی هيئش:',
 'tog-uselivepreview' => 'د پیش سیل زنه استفاده کو',
 'tog-watchlisthideown' => 'قام كو ويرايشت منه د',
+'tog-watchlisthideminor' => 'قام كو ويرايشت کؤچک منه د',
 'tog-diffonly' => 'بلگیایی که شومل فرخیا هارن نشون نیه',
 'tog-showhiddencats' => 'دسه يا قام بيئنه نشون بيه',
 
 'underline-always' => 'هميشه',
 'underline-never' => 'هيژوخت',
+'underline-default' => 'پوسه یا مرورگر پیش فرض',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'راساگه فونت شلک نه ویرایشت کو',
 'editfont-default' => 'مرورگر پیش بینی بیه',
+'editfont-monospace' => 'فونت تک بلگه ای',
 'editfont-sansserif' => 'سان سریف فونت',
 'editfont-serif' => 'فونت سريف',
 
@@ -129,6 +132,7 @@ $messages = array(
 'listingcontinuesabbrev' => 'دماله',
 'index-category' => 'بلگيا سيائه دار',
 'noindex-category' => 'بلگيا بی سيائه',
+'broken-file-category' => 'بلگیایی که هوم پیوند فایلیا اشکسه دارن',
 
 'about' => 'دباره',
 'article' => 'محتوا بلگه',
@@ -191,6 +195,7 @@ $messages = array(
 'delete' => 'حذف كردن',
 'deletethispage' => 'ای بلگه نه حذف بكيد',
 'undeletethispage' => 'ای بلگه نه حذف نكيد',
+'undelete_short' => 'پاک نکو {{جمی:$1|یه گل ویرایشت|$1 ویرایشتیا}}',
 'protect' => 'حمايت بكيد',
 'protect_change' => 'آلشت بكيد',
 'protectthispage' => 'ای بلگه نه حفاظت بكيد',
@@ -216,6 +221,7 @@ $messages = array(
 'viewtalkpage' => 'ديئن چك چنه يا',
 'otherlanguages' => 'د زونيا هنی',
 'redirectedfrom' => '(ورگشتن د$1)',
+'redirectpagesub' => 'بلگه دوباره ورگشتن',
 'lastmodifiedat' => 'ای بلگه تازه ايا وضع آلشت بيه د $1, د $2.',
 'viewcount' => 'ای بلگه قاول دسترسی بيه {{PLURAL:$1|once|$1 times}}.',
 'protectedpage' => 'بلگه حفاظت بيه',
@@ -251,8 +257,6 @@ $1',
 'ok' => 'خوئه',
 'retrievedfrom' => 'بازيافته د"$1"',
 'youhavenewmessages' => 'شما داريت $1($2)',
-'newmessageslink' => 'پيغوما تازه',
-'newmessagesdifflink' => 'آلشت آخری',
 'youhavenewmessagesmanyusers' => 'شما $1 د خيلی كاروريا داريت ($2).',
 'newmessagesdifflinkplural' => 'آخر {{PLURAL:$1|change|changes}}',
 'youhavenewmessagesmulti' => 'شما یه گل پیغوم تازه د $1 داریتو',
@@ -270,6 +274,7 @@ $1',
 'thisisdeleted' => 'دیئن یا ورگنين $1?',
 'viewdeleted' => 'دیئن$1?',
 'feedlinks' => 'غذا دهنه:',
+'feed-invalid' => 'نوع مشترک بین خورحو نامعتور',
 'site-rss-feed' => 'خورخو RSS سی $1',
 'site-atom-feed' => 'خور حون Atom سی $1',
 'page-rss-feed' => 'خورخو RSS سی «$1»',
@@ -297,6 +302,7 @@ $1',
 # General errors
 'error' => 'خطا',
 'databaseerror' => 'خطا د جاگه دونسمنيا',
+'databaseerror-text' => 'یه خطا جست کردن د پایگا داده پیش اوما.یه ممکنه یه در کار ونن د نرم اوزار پیش بیاره',
 'databaseerror-textcl' => 'خطاجست گرتن پايگاه دونسمنيا پيشومد كرده',
 'databaseerror-query' => 'نوم گشتن: $1',
 'databaseerror-function' => 'تابع:$1',
@@ -347,6 +353,7 @@ $1',
 'remembermypassword' => 'اومائن وا مئن منه د ای مرورگر د ویر داشتو(سی بیشترین$1{{PLURAL:$1|day|days}})',
 'userlogin-remembermypassword' => 'منه مئن سيستم وادار',
 'userlogin-signwithsecure' => 'د وصل بيئن امن استفاده كو',
+'yourdomainname' => 'پوشگیر شما:',
 'password-change-forbidden' => 'شما نتونید پاسوردیانه د ای ویکی آلشت بکید',
 'login' => 'اومائن',
 'nav-login-createaccount' => ' اومائن د سيستم/راس كردن حساو',
@@ -383,13 +390,16 @@ $1',
 'createacct-another-submit' => 'يه گل حساوهنی راست بكيد',
 'createacct-benefit-heading' => '{{نوم مالگه}} وه دس خلکی چی شما راس بیه.',
 'createacct-benefit-body1' => '{{جمی:$1|ویرایشت|ویرایشتا}}',
+'createacct-benefit-body2' => '{{جمی:$1|بلگه|بلگیا}}',
 'badretype' => 'پاسوردی که شما دئیته مطاوقت ناره',
 'userexists' => 'کارور نوم که وارد بیه د ایسه استفاده بوئه.
 لطف بکید یه گل نوم هنی انتخاو بکید',
 'loginerror' => 'خطا اومائن د سيستم',
 'createacct-error' => 'خطا راس كردن حساو',
 'createaccounterror' => 'نبوئه حساو راس بكيد:$1',
+'noname' => 'شما یه گل نوم کاروری خو ناریت',
 'loginsuccesstitle' => 'اومائن د سيستم موفق بی',
+'loginsuccess' => 'شما ایسه وارد بیته {{SITENAME}} د دعنوان "$1".\'',
 'nosuchusershort' => 'چنو کاروری وا ای نوم $1 نی ئیش.
 نیسنن تونه دوواره نئری بکیتو',
 'nouserspecified' => 'شما باید یه نوم کارور اختصاص بئیتو',
@@ -402,16 +412,19 @@ $1',
 'password-login-forbidden' => 'وه کار گرتن ای پاسوردو نوم کاروری ممنو بیه.',
 'mailmypassword' => 'رمز هنی نه ايميل بكيد',
 'passwordremindertitle' => 'پاسورد موقت تازه سی {{SITENAME}}',
+'noemail' => 'هیچ نشونی ایمیلی سی کارور $1 ضفط نبیه.',
 'noemailcreate' => 'شما باید یه نشونی نومه معتور فراهم بکید',
 'mailerror' => 'خطا داره کل موئه:$1',
 'emailconfirmlink' => 'نشونی ايملتو نه محكم بكيد',
 'emaildisabled' => 'ای مالگه نتونه ایمیل بفرسنه',
 'accountcreated' => 'حساو راس بی',
 'createaccount-title' => 'حساو راس کرده سی  {{SITENAME}}',
+'usernamehasherror' => 'نوم کاربری نتونه شومل نیسه یا هش بوئه',
 'login-abort-generic' => 'اومائن وامین تو شکست حرد-شکست حرده',
 'loginlanguagelabel' => 'زون:$1',
 
 # Email sending
+'php-mail-error-unknown' => "خطا ناشناس مئن تاوع  PHP's mail()",
 'user-mail-no-addy' => 'سی کل کردن ایمیل بی نشونه ایمیل صورت گرته',
 
 # Change password dialog
@@ -428,8 +441,11 @@ $1',
 'resetpass-temp-password' => 'رمز موقت:',
 
 # Special:PasswordReset
+'passwordreset' => 'د نۈ وارد كردن رمز',
 'passwordreset-legend' => 'د نۈ وارد كردن رمز',
 'passwordreset-username' => 'نوم كاروری:',
+'passwordreset-domain' => 'پوشگیر',
+'passwordreset-capture' => 'ایمیل نتیجه نه بوینیتو؟',
 'passwordreset-email' => 'نشونی ايميل',
 'passwordreset-emailsent' => 'پاسورد هنی سی ایمیل کل بیه.',
 
@@ -439,6 +455,7 @@ $1',
 'changeemail-oldemail' => 'نشونی ایمیل تازه باو:',
 'changeemail-newemail' => 'نشونی ایمیل تازه',
 'changeemail-none' => '(هيش كوم)',
+'changeemail-password' => 'شما {{SITENAME}} پاسورد:',
 'changeemail-submit' => 'آلشت کردن ایمیل',
 'changeemail-cancel' => 'رد كردن',
 
@@ -512,7 +529,9 @@ $1',
 پاک بیئن و جمشت سی ای بلگه سی راحتی تو فراهم بیه:",
 'moveddeleted-notice' => 'ای بلگه پاک بیه.
 پاک بین و جمشت ای بلگه سی سرچشمه دئین فراهم بیه',
+'edit-conflict' => 'مخالفت نه ویرایشت بکید',
 'postedit-confirmation' => 'ویرایشتتو ذخیره بی',
+'defaultmessagetext' => 'متن پیغوم پیش فرض',
 
 # Content models
 'content-model-wikitext' => 'ويكی متن',
@@ -529,6 +548,7 @@ $1',
 
 # History pages
 'viewpagelogs' => 'سی ای بلگه بوینتو.',
+'currentrev' => 'آخرین دوواره دیئن',
 'currentrev-asof' => 'آخرين دووار ديئن چی $1',
 'revisionasof' => 'دوواره ديئن $1',
 'revision-info' => 'دوواره سیل بیه چی $1 وا $2',
@@ -547,6 +567,7 @@ $1',
 'historyempty' => '(حالی)',
 
 # Revision feed
+'history-feed-title' => 'ویرگار دوواره دیئن',
 'history-feed-item-nocomment' => '$1 د
 $2',
 
@@ -554,17 +575,23 @@ $2',
 'rev-delundel' => 'آلشت وضئيت ديئن',
 'rev-showdeleted' => 'نشو دائن',
 'revdelete-show-file-submit' => 'هری',
-'revdelete-radio-set' => 'هری',
-'revdelete-radio-unset' => 'نه',
+'revdelete-hide-comment' => 'چکسه نه ویرایشت بکید',
+'revdelete-radio-same' => 'آلشت نکید',
+'revdelete-radio-set' => 'قام بیه',
+'revdelete-radio-unset' => 'دیینی',
 'revdelete-log' => 'دلیل:',
 'revdel-restore' => 'آلشت وضئيت ديئن',
 'revdel-restore-deleted' => 'پاك كردن مراجعيا',
 'revdel-restore-visible' => 'مراجعات ديئنی',
 'pagehist' => 'ويرگار بلگه',
+'deletedhist' => 'ویرگار پاک بیه',
+'revdelete-otherreason' => 'دلیل هنی:',
 'revdelete-reasonotherlist' => 'دلیل هنی',
+'revdelete-edit-reasonlist' => 'دلیلیا پاک کردنه نه ویرایشت بکید',
 
 # History merging
 'mergehistory-from' => 'بلگه سرچشمه:',
+'mergehistory-into' => 'بلگه مقصد:',
 'mergehistory-reason' => 'دليل:',
 
 # Merge log
@@ -582,6 +609,7 @@ $2',
 'searchresults' => 'نتيجه يا پی جوری',
 'searchresults-title' => 'نتيجه يا پی جوری سی "$1"',
 'searchsubtitleinvalid' => 'شما پی جوریت سی',
+'titlematches' => 'عنوان بلگه مطاوقت داره',
 'prevn' => 'وادما {{PLURAL:$1|$1}}',
 'nextn' => 'نيايی {{PLURAL:$1|$1}}',
 'prevn-title' => 'پيشتر $1 {{PLURAL:$1|نتيجه|نتيجيا}}',
@@ -624,26 +652,34 @@ $2',
 'preferences' => 'خصوصيات هنی',
 'mypreferences' => 'خصوصيات هنی',
 'prefs-edits' => 'شماره ویرایشتا:',
-'prefsnologin' => 'نبوئه وارد بوئيد',
 'changepassword' => 'پاسورد نه آلشت بكيت',
 'prefs-skin' => 'پوست',
 'skin-preview' => 'پیش سیل',
+'prefs-datetime' => 'وخت و زمون',
+'prefs-user-pages' => 'بلگیا كارور',
+'prefs-personal' => 'پروفایل کارور',
+'prefs-rc' => 'آلشتیا تازه باو',
+'prefs-watchlist' => 'سیل برگ',
 'prefs-misc' => 'شيوسن',
 'prefs-resetpass' => 'پاسورد نه آلشت بكيت',
+'prefs-changeemail' => 'نشونی ایمیل تو نه آلشت بکید',
 'saveprefs' => 'ذخيره كردن',
 'prefs-editing' => 'د حالت ويرايشت',
 'rows' => 'رديفيا:',
 'columns' => 'ستينا:',
 'searchresultshead' => 'پی جوری',
+'stub-threshold-disabled' => 'د كار ونن',
 'timezonelegend' => 'وخت راساگه',
 'localtime' => 'وخت ولاتی:',
 'timezoneuseserverdefault' => 'وخت راساگه',
+'timezoneoffset' => 'آفست:',
 'servertime' => 'وخت سرور:',
 'timezoneregion-africa' => 'افرقا',
 'timezoneregion-america' => 'امركا',
 'timezoneregion-antarctica' => 'قطو هار ونه',
 'timezoneregion-arctic' => 'قطو شمال',
 'timezoneregion-asia' => 'آسيا',
+'timezoneregion-atlantic' => 'جهون آو آتلانتیک',
 'timezoneregion-australia' => 'استراليا',
 'timezoneregion-europe' => 'اوروپا',
 'timezoneregion-indian' => 'جهوناو هند',
@@ -654,19 +690,53 @@ $2',
 'prefs-files' => 'فايلا',
 'youremail' => 'ايميل:',
 'yourrealname' => 'نوم راستكی:',
+'yourlanguage' => 'زون:',
+'yournick' => 'امضا تازه:',
+'email' => 'پیومک برقی',
 'prefs-help-email' => 'نشونی ایمیل اختیاری هئ.اما سی بازجست پاسورد دش نیاز بوئه.شما باید پاسوردتونه د ویر بوریت',
 'prefs-help-email-others' => 'شما می تونید سی پیوند گرتن تو وا نهایین ایمیل مئن یه هوم پیوند د بلگه کاروری یا بلگه چک چنه تو انتخاو بکید.
 نشونی ایمیلتو وختی که کاروریا هنی وا تو پیوند می گرن دیار نی.',
+'prefs-editor' => 'ويرايشتگر',
 'prefs-preview' => 'پیش سیل',
+'prefs-diffs' => 'فرخیا',
+
+# User rights
+'userrights-user-editname' => 'نوم كاروری ته وارد كو',
+'editusergroup' => 'ویرایشت گرویا کاروری',
+'userrights-editusergroup' => 'ویرایشت گرویا کاروری',
+'saveusergroups' => 'ذخیره کرد گرویا کاروری',
+'userrights-groupsmember' => 'اندوم:',
+'userrights-reason' => 'دليل:',
+
+# Groups
+'group' => 'گرو',
+'group-user' => 'کاروریا',
+'group-autoconfirmed' => 'کاروریا خودوادار',
+'group-bot' => 'بتیا',
+'group-sysop' => 'مدیریا',
+'group-bureaucrat' => 'بروکراتیا',
+'group-all' => '(همه)',
+
+# Rights
+'right-read' => 'حنن بلگیا',
+'right-edit' => 'ویرایشت بلگیا',
 
 # Special:Log/newusers
 'newuserlogpage' => 'راس بیه وا کارور',
 
 # Associated actions - in the sentence "You do not have permission to X"
+'action-read' => 'ای بلگه نه بحون',
 'action-edit' => 'ای بلگه نه ويرايشت بكيد',
+'action-createpage' => 'راس کردن بلگیا',
+'action-move' => 'لی بلگه جا وه جا کو',
+'action-delete' => 'ای بلگه نه پاک کو',
+'action-deleterevision' => 'ای بازدئین پاک کو',
+'action-undelete' => 'ای بلگه نه پاک نکو',
+'action-sendemail' => 'ایمیلیانه کل کو',
 
 # Recent changes
 'nchanges' => '$1 {{جمی:$1|آلشت|آلشتیا}}',
+'enhancedrc-history' => 'ويرگار',
 'recentchanges' => 'تغيريا تازه',
 'recentchanges-legend' => 'گزينه يا آلشتيا تازه',
 'recentchanges-feed-description' => 'دو بیشتر آلشتیا تازباو نه د ویکی که ها د هوال حون پیگری کو.',
@@ -691,6 +761,7 @@ $2',
 'minoreditletter' => 'م',
 'newpageletter' => 'ن',
 'boteditletter' => 'ب',
+'rc_categories_any' => 'هرکوم',
 'rc-enhanced-expand' => 'جزيات نشون بيئه',
 'rc-enhanced-hide' => 'جزياته قام كو',
 
@@ -706,16 +777,37 @@ $2',
 # Upload
 'upload' => 'بلم گير كردن فايلا',
 'uploadlogpage' => 'سوارکرد',
+'filename' => 'نوم فایل',
 'filedesc' => 'چكسته',
+'fileuploadsummary' => 'چکسه',
+'filesource' => 'سرچشمه:',
 'uploadedimage' => 'سوارکرد"[[$1]]"',
+'upload-source' => 'سرچشمه فایل',
+
+# img_auth script messages
+'img-auth-accessdenied' => 'دسرسی منع بی',
 
 'license' => 'ليانس دار بيئن',
 'license-header' => 'د شكل ليسانس دار بيئن',
 
+# Special:ListFiles
+'imgfile' => 'فايل',
+'listfiles_thumb' => 'بن کلکی',
+'listfiles_date' => 'تاريخ',
+'listfiles_name' => 'نوم',
+'listfiles_user' => 'كارور',
+'listfiles_size' => 'انازه',
+'listfiles_count' => 'نسقیا',
+'listfiles-latestversion' => 'نسقه تازه',
+'listfiles-latestversion-yes' => 'هری',
+'listfiles-latestversion-no' => 'نه',
+
 # File description page
 'file-anchor-link' => 'فايل',
 'filehist' => 'ويرگار فايل',
 'filehist-help' => 'ری  ويرگاريا بپورنيت تا نسقه مرتوط بونيت.',
+'filehist-deleteall' => 'همه نه پاک کو',
+'filehist-deleteone' => 'پاك كردن',
 'filehist-revert' => 'ورگنین',
 'filehist-current' => 'تازه باو',
 'filehist-datetime' => 'ويرگار/وخت',
@@ -723,6 +815,7 @@ $2',
 'filehist-thumbtext' => 'كؤچك كردن سی  نسقه چی $1',
 'filehist-user' => 'كارور',
 'filehist-dimensions' => 'بعديا',
+'filehist-filesize' => 'انازه فایل',
 'filehist-comment' => 'نظر',
 'imagelinks' => 'استفاده د فايل',
 'linkstoimage' => 'دمال بيه {{PLURAL:$1|ديس ونيا بلگه|$1 ديس ون بلگيا}} دای فایل:',
@@ -730,11 +823,34 @@ $2',
 'sharedupload-desc-here' => 'فایلی که د $1 شایت د مئن پروجیا هنی استفاده بیه.
 توضی دباره[$2 file description page] د هار نشو دئئه بیه',
 
+# File deletion
+'filedelete-comment' => 'دليل:',
+'filedelete-submit' => 'پاك كردن',
+
+# MIME search
+'download' => 'گرتن',
+
+# Unused templates
+'unusedtemplateswlh' => 'هوم پیوندیا هنی',
+
 # Random page
 'randompage' => 'بلگه بختكی',
 
+# Random page in category
+'randomincategory-selectcategory-submit' => 'رو',
+
 # Statistics
 'statistics' => 'آماريا',
+'statistics-pages' => 'بلگیا',
+'statistics-users-active' => 'کاروریا کارکو',
+
+'pageswithprop-submit' => 'رو',
+
+'brokenredirects-edit' => 'ویرایشت',
+'brokenredirects-delete' => 'پاك كردن',
+
+'withoutinterwiki-legend' => 'پیشون',
+'withoutinterwiki-submit' => 'نشون دائن',
 
 # Miscellaneous special pages
 'nbytes' => '$1{{PLURAL:$1|كلی|بايت|بايت}}',
index 15f7a9e..f0b02fb 100644 (file)
@@ -63,7 +63,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Seniausi_puslapiai' ),
        'Blankpage'                 => array( 'Tuščias_puslapis' ),
        'Block'                     => array( 'Blokuoti_IP' ),
-       'Blockme'                   => array( 'Užblokuoti_mane' ),
        'Booksources'               => array( 'Knygų_šaltiniai' ),
        'BrokenRedirects'           => array( 'Peradresavimai_į_niekur' ),
        'Categories'                => array( 'Kategorijos' ),
@@ -73,7 +72,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Sukurti_paskyrą' ),
        'Deadendpages'              => array( 'Puslapiai-aklavietės' ),
        'DeletedContributions'      => array( 'Ištrintas_indėlis' ),
-       'Disambiguations'           => array( 'Nukreipiamieji' ),
        'DoubleRedirects'           => array( 'Dvigubi_peradesavimai' ),
        'Emailuser'                 => array( 'Rašyti_laišką' ),
        'Export'                    => array( 'Eksportas' ),
@@ -458,8 +456,6 @@ $1',
 'ok' => 'Gerai',
 'retrievedfrom' => 'Gauta iš „$1“',
 'youhavenewmessages' => 'Jūs turite $1 ($2).',
-'newmessageslink' => 'naujų žinučių',
-'newmessagesdifflink' => 'paskutinis pakeitimas',
 'youhavenewmessagesfromusers' => 'Jūs gavote $1 nuo {{PLURAL:$3|kito vartotojo|$3 vartotojų}} ($2).',
 'youhavenewmessagesmanyusers' => 'Jūs turite $1 iš daugelio vartotojų ( $2 ) .',
 'newmessageslinkplural' => '{{PLURAL:$1|naują žinutę|naujų žinučių}}',
@@ -1264,7 +1260,6 @@ Prašome patikrinti sąrašus.',
 'preferences' => 'Nustatymai',
 'mypreferences' => 'Nustatymai',
 'prefs-edits' => 'Keitimų skaičius:',
-'prefsnologin' => 'Neprisijungęs',
 'changepassword' => 'Pakeisti slaptažodį',
 'prefs-skin' => 'Išvaizda',
 'skin-preview' => 'Peržiūra',
@@ -1551,6 +1546,7 @@ teisės",
 'recentchanges-label-minor' => 'Tai smulkus pakeitimas',
 'recentchanges-label-bot' => 'Šį keitimą atliko automatinė programa',
 'recentchanges-label-unpatrolled' => 'Šis keitimas dar nebuvo patikrintas',
+'recentchanges-legend-newpage' => '$1 - naujas puslapis',
 'rcnote' => "Žemiau yra {{PLURAL:$1|'''1''' pakeitimas|paskutiniai '''$1''' pakeitimai|paskutinių '''$1''' pakeitimų}} per {{PLURAL:$2|dieną|paskutiniąsias '''$2''' dienas|paskutiniųjų '''$2''' dienų}} skaičiuojant nuo $5, $4.",
 'rcnotefrom' => "Žemiau yra pakeitimai pradedant '''$2''' (rodoma iki '''$1''' pakeitimų).",
 'rclistfrom' => 'Rodyti naujus pakeitimus pradedant $1',
@@ -3940,4 +3936,10 @@ Kitu atveju, galite naudotis žemiau esančia paprastesne forma. Jūsų komentar
 'duration-centuries' => '$1 {{PLURAL:$1|amžius|amžiai|amžių}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tūkstantmetis|tūkstantmečiai|tūkstantmečių}}',
 
+# Special:ExpandTemplates
+'expand_templates_output' => 'Rezultatas',
+'expand_templates_ok' => 'Gerai',
+'expand_templates_remove_comments' => 'Pašalinti komentarus',
+'expand_templates_preview' => 'Peržiūra',
+
 );
index 564afea..9640eee 100644 (file)
@@ -205,8 +205,6 @@ $messages = array(
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Atdabuot nu "$1"',
 'youhavenewmessages' => 'Tu dabuoji $1 ($2).',
-'newmessageslink' => 'jaunus viestejumus',
-'newmessagesdifflink' => 'pādejā pataise',
 'editsection' => 'pataiseit',
 'editold' => 'pataiseit',
 'editlink' => 'pataiseit',
index 72e6c7b..a860c3b 100644 (file)
@@ -272,8 +272,6 @@ $1',
 'ok' => 'Aw le',
 'retrievedfrom' => '"$1" aṭanga lâk chhuah',
 'youhavenewmessages' => '($2) $1 i nei.',
-'newmessageslink' => 'thudawn thar',
-'newmessagesdifflink' => 'tihdanglam thar',
 'youhavenewmessagesfromusers' => 'Hmangtu dang {{PLURAL:$3|pakhat|$3}} hnên aṭang $1 i nei ($2)',
 'youhavenewmessagesmanyusers' => 'Hmangtu dang tamtak hnên aṭang $1 i nei nual ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|thudawn thar}}',
@@ -770,7 +768,6 @@ Google hmangin i lo zawng hrih thei ang.
 'preferences' => 'Duhdàn',
 'mypreferences' => 'Duhthlanna',
 'prefs-edits' => 'Siamţhat zât',
-'prefsnologin' => 'I la lût lo',
 'changepassword' => 'Thurûk thlâkna',
 'prefs-skin' => 'Vun',
 'skin-preview' => 'Enchhinna',
index 50694c0..f3e2af9 100644 (file)
@@ -324,8 +324,6 @@ $1',
 'ok' => 'Labi',
 'retrievedfrom' => 'Saturs iegūts no "$1"',
 'youhavenewmessages' => 'Tev ir $1 (skatīt $2).',
-'newmessageslink' => 'jauns vēstījums',
-'newmessagesdifflink' => 'pēdējā izmaiņa',
 'newmessageslinkplural' => '{{PLURAL:$1|jauns vēstījums|jauni vēstījumi}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|pēdējā izmaiņa|pēdējās izmaiņas}}',
 'youhavenewmessagesmulti' => 'Tev ir jauns ziņojums: $1',
@@ -1026,7 +1024,6 @@ Pagaidām vari meklēt, izmantojot Google vai Yahoo.
 'preferences' => 'Izvēles',
 'mypreferences' => 'Izvēles',
 'prefs-edits' => 'Izmaiņu skaits:',
-'prefsnologin' => 'Neesi iegājis',
 'changepassword' => 'Mainīt paroli',
 'prefs-skin' => 'Apdare',
 'skin-preview' => 'Priekšskats',
@@ -1295,6 +1292,7 @@ Ja tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu (
 'recentchanges-label-minor' => 'Šī ir maznozīmīga izmaiņa',
 'recentchanges-label-bot' => 'Šī ir bota veikta izmaiņa',
 'recentchanges-label-unpatrolled' => 'Šis labojums vēl nav pārbaudīts',
+'recentchanges-legend-newpage' => '$1 - jauna lapa',
 'rcnote' => 'Šobrīd ir {{PLURAL:$1|redzama pēdējā <strong>$1</strong> izmaiņa, kas izdarīta|redzamas pēdējās <strong>$1</strong> izmaiņas, kas izdarītas}} {{PLURAL:$2|pēdējā|pēdējās}} <strong>$2</strong> {{PLURAL:$2|dienā|dienās}} (līdz $4, $5).',
 'rcnotefrom' => "Šobrīd redzamas izmaiņas kopš '''$2''' (parādītas ne vairāk par '''$1''').",
 'rclistfrom' => 'Parādīt jaunas izmaiņas kopš $1',
@@ -3243,4 +3241,9 @@ Var arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].',
 'limitreport-templateargumentsize' => 'Veidnes argumenta izmērs',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|baits|baiti}}',
 
+# Special:ExpandTemplates
+'expand_templates_output' => 'Rezultāts',
+'expand_templates_ok' => 'Labi',
+'expand_templates_preview' => 'Pirmskats',
+
 );
index 24bb636..625229e 100644 (file)
@@ -34,7 +34,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( '增簿' ),
        'Deadendpages'              => array( '此無路也' ),
        'DeletedContributions'      => array( '已刪之積' ),
-       'Disambiguations'           => array( '釋義' ),
        'DoubleRedirects'           => array( '窮渡' ),
        'EditWatchlist'             => array( '治哨站' ),
        'Emailuser'                 => array( '遺書' ),
@@ -423,8 +422,6 @@ $1',
 'ok' => '可',
 'retrievedfrom' => '取自"$1"',
 'youhavenewmessages' => '有$1書至子書房也。($2)',
-'newmessageslink' => '新訊',
-'newmessagesdifflink' => '變更',
 'youhavenewmessagesfromusers' => '子有 $1 自 {{PLURAL:$3|一簿戶也|$3 簿戶也}} ($2)。',
 'youhavenewmessagesmanyusers' => '子有 $1 自多簿戶 ( $2 )',
 'newmessageslinkplural' => '{{PLURAL:$1|一新訊息|新訊息}}',
@@ -1094,7 +1091,6 @@ $1",
 'preferences' => '簿註',
 'mypreferences' => '簿註',
 'prefs-edits' => '數計:',
-'prefsnologin' => '未登簿',
 'changepassword' => '易符節',
 'prefs-skin' => '面版',
 'skin-preview' => '草覽',
@@ -1359,6 +1355,7 @@ $1",
 'recentchanges-label-minor' => '此乃細纂',
 'recentchanges-label-bot' => '此乃機纂',
 'recentchanges-label-unpatrolled' => '是纂未巡',
+'recentchanges-legend-newpage' => '$1 - 新頁',
 'rcnote' => "下為自$4$5起,'''$2'''日內'''$1'''近易也。",
 'rcnotefrom' => "下為自'''$2'''至'''$1'''之易也。",
 'rclistfrom' => '自$1起之易也',
index a936fc5..50aeb3f 100644 (file)
@@ -286,8 +286,6 @@ $1',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'प्राप्ति स्थल "$1"',
 'youhavenewmessages' => 'अहाँ लग अछि $1 ($2).',
-'newmessageslink' => 'नव संदेश सभ',
-'newmessagesdifflink' => 'अन्तिम परिवर्तन',
 'youhavenewmessagesmulti' => '$1 पर अहाँ लेल नव सन्देश अछि',
 'editsection' => 'संपादन करू',
 'editold' => 'सम्पादित करू',
@@ -1022,7 +1020,6 @@ $3 द्वारा देल कारण अछि ''$2''",
 'preferences' => 'विकल्प',
 'mypreferences' => 'खासमखास',
 'prefs-edits' => 'सम्पादनक संख्या',
-'prefsnologin' => 'सम्प्रवेशित नै',
 'changepassword' => 'कूटशब्द बदलू',
 'prefs-skin' => 'रूप',
 'skin-preview' => 'पूर्वावलोकन',
index e055ad8..93b6549 100644 (file)
@@ -289,8 +289,6 @@ Deleng [[Special:Version|kaca versi]].',
 'ok' => 'OK',
 'retrievedfrom' => 'Ditampa sekang "$1"',
 'youhavenewmessages' => 'Rika duwe $1 ($2).',
-'newmessageslink' => 'pesen anyar',
-'newmessagesdifflink' => 'owahan keri dhewek',
 'youhavenewmessagesfromusers' => 'Rika nduwe $1 sekang {{PLURAL:$3|panganggo liya|$3 panganggo}} ($2).',
 'youhavenewmessagesmanyusers' => 'Rika nduwe $1 sekang akeh panganggo ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|pesen anyar|pesen anyar}}',
@@ -978,7 +976,6 @@ Ningen Rika kudu eling nek indeks Google kanggo {{SITENAME}} bisa baen isine anu
 'preferences' => 'Preferensi',
 'mypreferences' => 'Preferensi',
 'prefs-edits' => 'Jumlah suntingan:',
-'prefsnologin' => 'Durung mlebu log',
 'changepassword' => 'Ganti tembung sandhi',
 'prefs-skin' => 'Kulit',
 'skin-preview' => 'Pratayang',
index b276079..5913c44 100644 (file)
@@ -59,7 +59,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'КунардоньЛопат' ),
        'Blankpage'                 => array( 'ШаваЛопа' ),
        'Block'                     => array( 'СёлгомаIP' ),
-       'Blockme'                   => array( 'Сёлгомак' ),
        'Booksources'               => array( 'КинигаЛисьмот' ),
        'BrokenRedirects'           => array( 'СиньтьфШашфтфксне' ),
        'Categories'                => array( 'Категориет' ),
@@ -69,7 +68,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Сёрматфтомс' ),
        'Deadendpages'              => array( 'ПеньЛопат' ),
        'DeletedContributions'      => array( 'НардафПутксне' ),
-       'Disambiguations'           => array( 'Лама Смусть' ),
        'DoubleRedirects'           => array( 'КафонзафШашфтфксне' ),
        'Emailuser'                 => array( 'АдресТиись' ),
        'Export'                    => array( 'Вимс' ),
@@ -398,8 +396,6 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => '"$1"ста сявф',
 'youhavenewmessages' => 'Тонь ули $1 ($2).',
-'newmessageslink' => 'Од сёрмат',
-'newmessagesdifflink' => 'мекольце полафтома',
 'youhavenewmessagesfromusers' => 'Тонь $1 {{PLURAL:$3|тага фкя тиить эзда|$3 тиихнень эзда}} ($2).',
 'youhavenewmessagesmanyusers' => 'Тонь $1 лама тиихнень эзда ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|од сёрма|од сёрмат}}',
@@ -1026,7 +1022,6 @@ $3 макссь туфталсь - ''$2''",
 'preferences' => 'Арафнематне',
 'mypreferences' => 'Монь латцемане',
 'prefs-edits' => 'Петнематнень лувсна:',
-'prefsnologin' => 'Апак сувак',
 'changepassword' => 'Сувама валть полафтомс',
 'prefs-skin' => 'Ванфонь латцема',
 'skin-preview' => 'Васень няфтема',
index b2b6621..7f0486f 100644 (file)
@@ -130,7 +130,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Pejy_antitra' ),
        'Blankpage'                 => array( 'Pejy_fotsy' ),
        'Block'                     => array( 'Hanakana' ),
-       'Blockme'                   => array( 'Sakano_ahy' ),
        'Booksources'               => array( 'Boky_loharano' ),
        'BrokenRedirects'           => array( 'Fihodinana_tapaka' ),
        'Categories'                => array( 'Sokajy' ),
@@ -141,7 +140,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Hamorona_kaonty' ),
        'Deadendpages'              => array( 'Pejy_tsy_misy_rohy' ),
        'DeletedContributions'      => array( 'Fandraisan\'anjara_voafafa' ),
-       'Disambiguations'           => array( 'Pejy_mitovy_anarana' ),
        'DoubleRedirects'           => array( 'Fihodinana_miroa' ),
        'EditWatchlist'             => array( 'Hanova_ny_pejy_arahana' ),
        'Emailuser'                 => array( 'Handefa_imailaka' ),
@@ -492,8 +490,6 @@ Mitaky version $1-n'i MediaWiki",
 'pagetitle' => '$1 - {{SITENAME}}',
 'retrievedfrom' => 'Hita tao amin\'ny "$1"',
 'youhavenewmessages' => 'Manana $1 ($2).',
-'newmessageslink' => 'hafatra vaovao',
-'newmessagesdifflink' => 'fanovana farany',
 'youhavenewmessagesfromusers' => "Manana $1 avy amin'ny mpikambana {{PLURAL:$3|hafa|$3}} ($2).",
 'youhavenewmessagesmanyusers' => "Manana $1 avy amin'ny mpikambana maro ($2).",
 'newmessageslinkplural' => '{{PLURAL:$1|hafatra iray|hafatra maro}}',
@@ -1343,7 +1339,6 @@ ihany no miseho amin'ny vokatry ny karoka).",
 'preferences' => 'Ny momba anao',
 'mypreferences' => 'Safidy',
 'prefs-edits' => 'isa ny fanovàna :',
-'prefsnologin' => 'Tsy tafiditra',
 'changepassword' => 'Hanova tenimiafina',
 'prefs-skin' => 'Endrika',
 'skin-preview' => 'Tsipalotra',
@@ -1638,6 +1633,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'recentchanges-label-minor' => 'Kely fotsiny ity fanovana ity',
 'recentchanges-label-bot' => "Nataon'ny rôbô ity fanovana ity.",
 'recentchanges-label-unpatrolled' => 'Ity fanovana ity dia mbola tsy voamarina',
+'recentchanges-legend-newpage' => '$1 - pejy vaovao',
 'rcnote' => "!Ity ny {{PLURAL:$1|fanovàna farany|fanovàna farany}} $1 natao nandritra ny <b>$2</b> andro, hatramin'ny $4 tamin'ny ora faha $5.",
 'rcnotefrom' => "Ity eto ambany ity ny lisitry ny vao niova manomboka ny <b>$2</b> (hatramin'ny <b>$1</b> no miseho).",
 'rclistfrom' => 'Asehoy izay vao niova manomboka ny $1',
index aa005f6..1c504f3 100644 (file)
@@ -230,7 +230,7 @@ $messages = array(
 'errorpagetitle' => 'Йоҥылыш',
 'returnto' => '$1 деке пӧртылаш.',
 'tagline' => '{{SITENAME}} гыч',
-'help' => 'Ð\9fолÑ\88Ñ\8bÑ\88',
+'help' => 'Полыш',
 'search' => 'Кычалмаш',
 'searchbutton' => 'Кычалаш',
 'go' => 'Куснаш',
@@ -298,8 +298,6 @@ $messages = array(
 'ok' => 'Йӧра',
 'retrievedfrom' => 'Налме вер — "$1"',
 'youhavenewmessages' => 'Тендан $1 уло ($2).',
-'newmessageslink' => 'У серыш',
-'newmessagesdifflink' => 'пытартыш тӧрлатымаш',
 'editsection' => 'тӧрлаташ',
 'editold' => 'тӧрлаташ',
 'viewsourceold' => 'тӱҥалтыш текстым ончалаш',
@@ -654,6 +652,7 @@ $messages = array(
 'recentchanges-label-minor' => 'Тиде изи тӧрлатымаш',
 'recentchanges-label-bot' => 'Тиде тӧрлатымашым бот ыштен',
 'recentchanges-label-unpatrolled' => 'Тиде тӧрлатымашым нигӧ терген огыл',
+'recentchanges-legend-newpage' => '$1 - у лаштык',
 'rcnote' => "Ӱлнӧ {{PLURAL:$1|'''1'''|'''$1'''}} вашталтыш пытартыш {{PLURAL:$2||'''$2'''}} кечылан, $5-лан, $4-лан.",
 'rcnotefrom' => "Ниже перечислены изменения с '''$2''' (не более '''$1''').",
 'rclistfrom' => '$1 гыч тӱҥалын у вашталтымашым ончыкташ',
@@ -1158,4 +1157,8 @@ $messages = array(
 
 #Размещайте фрагменты регулярных выражений над этой строчкой. Оставьте эту строчку такой, как она есть.</pre>',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Йӧра',
+'expand_templates_preview' => 'Ончылгоч ончымаш',
+
 );
index c6ddd82..ef2f2de 100644 (file)
@@ -21,7 +21,7 @@ $fallback = 'id';
 $namespaceNames = array(
        NS_MEDIA            => 'Media',
        NS_SPECIAL          => 'Istimewa',
-       NS_TALK             => 'Maota',
+       NS_TALK             => 'Rundiang',
        NS_USER             => 'Pangguno',
        NS_USER_TALK        => 'Rundiang_Pangguno',
        NS_PROJECT_TALK     => 'Rundiang_$1',
@@ -53,41 +53,43 @@ $namespaceAliases = array(
        'Pembicaraan_Bantuan'   => NS_HELP_TALK,
        'Kategori'              => NS_CATEGORY,
        'Pembicaraan_Kategori'  => NS_CATEGORY_TALK,
+
+       'Maota'                 => NS_TALK,
 );
 
 $specialPageAliases = array(
        'Activeusers'               => array( 'PanggunoAktip', 'Pangguno_aktip' ),
-       'Allmessages'               => array( 'PasanSistim', 'Pasan_sistem' ),
+       'Allmessages'               => array( 'PasanSistim', 'Pasan_sistim' ),
        'Allpages'                  => array( 'DaptaLaman', 'Dapta_laman' ),
        'Ancientpages'              => array( 'LamanLamo', 'Laman_lamo' ),
        'Badtitle'                  => array( 'JudulBuruak', 'Judul_indak_rancak' ),
        'Blankpage'                 => array( 'LamanKosong', 'Laman_kosong' ),
-       'Block'                     => array( 'Blokir', 'IPkanaiBlok', 'PanggunoTablokir' ),
-       'Blockme'                   => array( 'BlokDen', 'BlokirAmbo' ),
+       'Block'                     => array( 'Sakek', 'IPkanaiSakek', 'PanggunoTasakek' ),
        'Booksources'               => array( 'SumberBuku', 'Sumber_buku' ),
        'BrokenRedirects'           => array( 'PangaliahanRusak', 'Pangaliahan_rusak' ),
        'Categories'                => array( 'Kategori' ),
        'ChangeEmail'               => array( 'GantiSurel', 'Ganti_surel' ),
-       'ChangePassword'            => array( 'GantiSandi', 'TukaSandi', 'TukaKatoSandi' ),
+       'ChangePassword'            => array( 'GantiSandi', 'TukaKatoSandi' ),
        'ComparePages'              => array( 'BandiangkanLaman', 'Bandiangkan_laman' ),
        'Confirmemail'              => array( 'PastikanSurel', 'Pastikan_surel' ),
-       'Contributions'             => array( 'SuntiangPangguno', 'Suntiangan_pangguno' ),
+       'Contributions'             => array( 'SuntiangPangguno', 'Jariah' ),
        'CreateAccount'             => array( 'BuekAkun', 'Buek_akun' ),
        'Deadendpages'              => array( 'LamanBuntu', 'Laman_buntu' ),
        'DeletedContributions'      => array( 'SuntiangDihapuih', 'Suntiangan_kanai_hapuih' ),
-       'Disambiguations'           => array( 'SamoArti', 'Samo_arti' ),
-       'EditWatchlist'             => array( 'SuntiangDaptaPantau', 'Suntiang_dapta_pantau' ),
+       'DoubleRedirects'           => array( 'PangaliahanGanda', 'Pangaliahan_ganda' ),
+       'EditWatchlist'             => array( 'SuntiangPantauan', 'Suntiang_pantauan' ),
        'Emailuser'                 => array( 'SurelPangguno', 'Surel_pangguno' ),
        'Export'                    => array( 'Ekspor' ),
-       'Fewestrevisions'           => array( 'ParubahanTasaketek', 'Parubahan_tasaketek' ),
+       'Fewestrevisions'           => array( 'ParubahanTasangenek', 'Parubahan_tasangenek' ),
        'FileDuplicateSearch'       => array( 'CariBerkasDuplikat', 'Cari_berkas_duplikat' ),
        'Filepath'                  => array( 'LokasiBerkas', 'Lokasi_berkas' ),
        'Import'                    => array( 'Impor' ),
-       'Invalidateemail'           => array( 'BatalSurel', 'Batalkan_surel' ),
+       'Invalidateemail'           => array( 'BatalSurel', 'Batalan_surel' ),
        'JavaScriptTest'            => array( 'TesSkripJava', 'Tes_skrip_Java' ),
-       'BlockList'                 => array( 'DaptaBlokir', 'Dapta_pemblokiran', 'Dapta_IP_diblok' ),
-       'LinkSearch'                => array( 'CariTautan', 'Cari_tautan' ),
-       'Listadmins'                => array( 'DaptaPanguruih' ),
+       'BlockList'                 => array( 'DaptaSakek', 'Dapta_pemblokiran', 'Dapta_IP_disakek' ),
+       'LinkSearch'                => array( 'CariPautan', 'Cari_pautan' ),
+       'Listadmins'                => array( 'DaptaPanguruih', 'Dapta_panguruih' ),
+       'Listbots'                  => array( 'DaptaBot' ),
        'Listfiles'                 => array( 'DaptaBerkas', 'DaptaGamba' ),
        'Listgrouprights'           => array( 'DaptaHakKalompok', 'HakKalompokPangguno' ),
        'Listredirects'             => array( 'DaptaPangaliahan', 'Dapta_pangaliahan' ),
@@ -106,9 +108,58 @@ $specialPageAliases = array(
        'Mostlinkedtemplates'       => array( 'TemplatTautanTabanyak', 'TemplatAcokDipakai' ),
        'Mostrevisions'             => array( 'ParubahanTabanyak' ),
        'Movepage'                  => array( 'PindahLaman', 'Pindahkan_laman' ),
-       'Mycontributions'           => array( 'SuntianganAmbo', 'Suntiangan_ambo' ),
-       'Mypage'                    => array( 'LamanDenai', 'Laman_denai' ),
-       'Mytalk'                    => array( 'DiskusiAmbo' ),
+       'Mycontributions'           => array( 'JariahDenai', 'Jariah_Ambo' ),
+       'Mypage'                    => array( 'LamanDenai', 'Laman_Ambo' ),
+       'Mytalk'                    => array( 'RundiangDenai', 'Laman_rundiang__Ambo' ),
+       'Myuploads'                 => array( 'DenaiMuek', 'Nan_Ambo_muek' ),
+       'Newimages'                 => array( 'BerkasBaru', 'Berkas_baru' ),
+       'Newpages'                  => array( 'LamanBaru', 'Laman_baru' ),
+       'PagesWithProp'             => array( 'LamanJoProperti', 'Laman_jo_properti' ),
+       'PasswordReset'             => array( 'TukaSandi', 'Tuka_baliak_sandi' ),
+       'PermanentLink'             => array( 'PautanPamanen', 'Pautan_pamanen' ),
+       'Popularpages'              => array( 'LamanPopuler', 'Laman_populer' ),
+       'Preferences'               => array( 'Rujuakan' ),
+       'Prefixindex'               => array( 'DaptaAwalan' ),
+       'Protectedpages'            => array( 'LamanTalinduang', 'Laman_nan_dilinduang' ),
+       'Protectedtitles'           => array( 'JudulTalinduang' ),
+       'Randompage'                => array( 'LamanSumbarang' ),
+       'Randomredirect'            => array( 'PangaliahanSumbarang' ),
+       'Recentchanges'             => array( 'ParubahanBaru' ),
+       'Recentchangeslinked'       => array( 'ParubahanTakaik' ),
+       'Redirect'                  => array( 'Pangaliahan' ),
+       'Revisiondelete'            => array( 'HapuihRevisi' ),
+       'Search'                    => array( 'Cari', 'Pancarian' ),
+       'Shortpages'                => array( 'LamanPendek' ),
+       'Specialpages'              => array( 'LamanIstimewa' ),
+       'Unblock'                   => array( 'PambatalanSakek' ),
+       'Uncategorizedcategories'   => array( 'KategoriIndakTakategori' ),
+       'Uncategorizedimages'       => array( 'BerkasIndakTakategori' ),
+       'Uncategorizedpages'        => array( 'LamanIndakTakategori' ),
+       'Uncategorizedtemplates'    => array( 'TemplatIndakTakategori' ),
+       'Undelete'                  => array( 'BatalHapuih' ),
+       'Unlockdb'                  => array( 'BukakKunciBD' ),
+       'Unusedcategories'          => array( 'KategoriKosong' ),
+       'Unusedimages'              => array( 'BerkasIndakTapakai' ),
+       'Unusedtemplates'           => array( 'TemplatIndakTapakai' ),
+       'Unwatchedpages'            => array( 'LamanIndakTapantau' ),
+       'Upload'                    => array( 'Muek' ),
+       'Userlogin'                 => array( 'MasuakLog' ),
+       'Userlogout'                => array( 'KaluaLog' ),
+       'Userrights'                => array( 'HakPangguno' ),
+       'Wantedcategories'          => array( 'KategoriNanParalu' ),
+       'Wantedfiles'               => array( 'BerkasNanParalu' ),
+       'Wantedpages'               => array( 'LamanNanParalu' ),
+       'Wantedtemplates'           => array( 'TemplatNanParalu' ),
+       'Watchlist'                 => array( 'Pantauan' ),
+       'Whatlinkshere'             => array( 'PautanBaliak' ),
+       'Withoutinterwiki'          => array( 'InterwikiIndakAdo' ),
+);
+
+$magicWords = array(
+       'redirect'                  => array( '0', '#ALIAH', '#ALIH', '#REDIRECT' ),
+       'pagesincategory_all'       => array( '0', 'sado', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'laman', 'pages' ),
+       'pagesincategory_files'     => array( '0', 'berkas', 'files' ),
 );
 
 $messages = array(
@@ -386,8 +437,6 @@ $1',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'Didapek dari "$1"',
 'youhavenewmessages' => 'Sanak punyo $1 ($2).',
-'newmessageslink' => 'pasan baru',
-'newmessagesdifflink' => 'parubahan tarakhia',
 'youhavenewmessagesfromusers' => 'Sanak mandapek $1 dari {{PLURAL:$3|$3 pangguno}} ($2)',
 'youhavenewmessagesmanyusers' => 'Sanak mandapek $1 dari banyak pangguno ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|pasan baru}}',
@@ -1157,7 +1206,6 @@ Ingek indeks Google untuak {{SITENAME}} mungkin lah kadaluarsa.',
 'preferences' => 'Pangaturan',
 'mypreferences' => 'Pangaturan',
 'prefs-edits' => 'Jumlah suntiangan:',
-'prefsnologin' => 'Alun masuak log',
 'changepassword' => 'Tuka kato sandi',
 'prefs-skin' => 'Kulik',
 'skin-preview' => 'Caliak',
@@ -2648,4 +2696,13 @@ Sanak mustilah alah manarimo [{{SERVER}}{{SCRIPTPATH}}/COPYING salinan Lisensi P
 # Image rotation
 'rotate-comment' => 'Gambar diputa $1 {{PLURAL:$1|darajaik}} saarah jarum jam',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Pangambangan templat',
+'expand_templates_input' => 'Teks masuakan:',
+'expand_templates_output' => 'Hasil',
+'expand_templates_xml_output' => 'Hasil XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Hapuih komentar',
+'expand_templates_preview' => 'Pratonton',
+
 );
index 56b9a1d..4eb3ca2 100644 (file)
@@ -95,12 +95,12 @@ $dateFormats = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'АктивниКорисници' ),
        'Allmessages'               => array( 'СитеПораки' ),
+       'AllMyUploads'              => array( 'СитеМоиПодигања' ),
        'Allpages'                  => array( 'СитеСтраници' ),
        'Ancientpages'              => array( 'НајстариСтраници' ),
        'Badtitle'                  => array( 'Лошнаслов' ),
        'Blankpage'                 => array( 'ПразнаСтраница' ),
        'Block'                     => array( 'Блокирање', 'БлокIP', 'БлокирајКорисник' ),
-       'Blockme'                   => array( 'БлокирајМе' ),
        'Booksources'               => array( 'ПечатенИзвор' ),
        'BrokenRedirects'           => array( 'ПрекинатиПренасочувања' ),
        'Categories'                => array( 'Категории' ),
@@ -112,10 +112,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'СоздајКорисничкаСметка' ),
        'Deadendpages'              => array( 'ЌорсокакСтраници' ),
        'DeletedContributions'      => array( 'ИзбришаниПридонеси' ),
-       'Disambiguations'           => array( 'Појаснувања' ),
        'DoubleRedirects'           => array( 'ДвојниПренасочувања' ),
        'EditWatchlist'             => array( 'УредиНабљудувања' ),
        'Emailuser'                 => array( 'Пиши_е-пошта_на_корисникот' ),
+       'ExpandTemplates'           => array( 'ПрошириШаблони' ),
        'Export'                    => array( 'Извоз' ),
        'Fewestrevisions'           => array( 'НајмалкуРевизии' ),
        'FileDuplicateSearch'       => array( 'ПребарувањеДупликатПодатотека' ),
@@ -156,14 +156,16 @@ $specialPageAliases = array(
        'PermanentLink'             => array( 'ПостојанаВрска' ),
        'Popularpages'              => array( 'ПопуларниСтраници' ),
        'Preferences'               => array( 'Нагодувања' ),
-       'Prefixindex'               => array( 'Ð\98ндекÑ\81Ð\9dаÐ\9fÑ\80еÑ\84икÑ\81и' ),
+       'Prefixindex'               => array( 'Ð\98ндекÑ\81Ð\9dаÐ\9fÑ\80еÑ\82Ñ\81Ñ\82авки' ),
        'Protectedpages'            => array( 'ЗаштитениСтраници' ),
        'Protectedtitles'           => array( 'ЗаштитениНаслови' ),
        'Randompage'                => array( 'Случајна', 'СлучајнаСтраница' ),
+       'RandomInCategory'          => array( 'СлучајнаВоКатегорија' ),
        'Randomredirect'            => array( 'СлучајноПренасочување' ),
        'Recentchanges'             => array( 'СкорешниПромени' ),
        'Recentchangeslinked'       => array( 'ПоврзаниПромени' ),
        'Redirect'                  => array( 'Пренасочување' ),
+       'ResetTokens'               => array( 'ВратиОдновоЗнаци' ),
        'Revisiondelete'            => array( 'БришењеРевизија' ),
        'Search'                    => array( 'Барај' ),
        'Shortpages'                => array( 'КраткиСтраници' ),
@@ -254,6 +256,7 @@ $magicWords = array(
        'img_center'                => array( '1', 'центар', 'ц', 'center', 'centre' ),
        'img_framed'                => array( '1', 'рамка', 'ворамка', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'безрамка', 'frameless' ),
+       'img_lang'                  => array( '1', 'јаз=$1', 'lang=$1' ),
        'img_page'                  => array( '1', 'страница=$1', 'страница_$1', 'page=$1', 'page $1' ),
        'img_upright'               => array( '1', 'исправено', 'исправено=$1', 'исправено_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'граничник', 'граница', 'border' ),
@@ -293,6 +296,7 @@ $magicWords = array(
        'revisionyear'              => array( '1', 'ГОДИНАНАРЕВИЗИЈА', 'REVISIONYEAR' ),
        'revisiontimestamp'         => array( '1', 'ВРЕМЕНАРЕВИЗИЈА', 'REVISIONTIMESTAMP' ),
        'revisionuser'              => array( '1', 'КОРИСНИКНАНАРЕВИЗИЈА', 'REVISIONUSER' ),
+       'revisionsize'              => array( '1', 'ГОЛЕМИНАНАРЕВИЗИЈА', 'REVISIONSIZE' ),
        'plural'                    => array( '0', 'МНОЖИНА:', 'PLURAL:' ),
        'fullurl'                   => array( '0', 'ПОЛНАURL:', 'FULLURL:' ),
        'fullurle'                  => array( '0', 'ПОЛНАURLE:', 'FULLURLE:' ),
@@ -626,12 +630,10 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Преземено од „$1“',
 'youhavenewmessages' => 'Имате $1 ($2).',
-'newmessageslink' => 'нови пораки',
-'newmessagesdifflink' => 'скорешна промена',
 'youhavenewmessagesfromusers' => 'Имате $1 од {{PLURAL:$3|еден корисник|$3 корисници}} ($2).',
 'youhavenewmessagesmanyusers' => 'Имате $1 од многу корисници ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|нова порака|нови пораки}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|последна промена|последни промени}}',
+'newmessageslinkplural' => '{{PLURAL:$1|нова порака|999=нови пораки}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|последна промена|999=последни промени}}',
 'youhavenewmessagesmulti' => 'Имате нови пораки на $1',
 'editsection' => 'уреди',
 'editold' => 'уреди',
@@ -1503,7 +1505,6 @@ $1",
 'preferences' => 'Нагодувања',
 'mypreferences' => 'нагодувања',
 'prefs-edits' => 'Број на уредувања:',
-'prefsnologin' => 'Не сте најавени',
 'prefsnologintext2' => 'Треба да сте $1 за да можете да ги поставувате корисничките нагодувања.',
 'changepassword' => 'Смени лозинка',
 'prefs-skin' => 'Руво',
@@ -1805,6 +1806,9 @@ $1",
 'recentchanges-label-minor' => 'Ова е ситна промена',
 'recentchanges-label-bot' => 'Ова уредување е направено од бот',
 'recentchanges-label-unpatrolled' => 'Ова уредување сè уште не е испатролирано',
+'recentchanges-label-plusminus' => 'Промена на големината на страницата во бајти',
+'recentchanges-legend-newpage' => '(погл. и [[Special:NewPages|списокот на нови страници]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "Подолу {{PLURAL:$1|е прикажана '''1''' промена|се прикажани последните '''$1''' промени}} {{PLURAL:$2|за денес|во последниве '''$2''' дена}}, заклучно со $5, $4.",
 'rcnotefrom' => 'Подолу се промените од <b>$2</b> (се прикажуваат до <b>$1</b>).',
 'rclistfrom' => 'Прикажи нови промени почнувајќи од $1',
@@ -4254,8 +4258,7 @@ $5
 'specialpages' => 'Специјални страници',
 'specialpages-note-top' => 'Легенда',
 'specialpages-note' => '* Нормални специјални страници.
-* <span class="mw-specialpagerestricted">Ограничени специјални страници.</span>
-* <span class="mw-specialpagecached">Кеширани специјални страници (може да се застарени).</span>',
+* <span class="mw-specialpagerestricted">Ограничени специјални страници.</span>',
 'specialpages-group-maintenance' => 'Извештаи за одржување',
 'specialpages-group-other' => 'Други специјални страници',
 'specialpages-group-login' => 'Најава / регистрација',
@@ -4467,4 +4470,21 @@ $5
 'limitreport-expansiondepth' => 'Најголема длабочина на проширувањето',
 'limitreport-expensivefunctioncount' => 'Бр. на сложени парсерски функции',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Прошири шаблони',
+'expand_templates_intro' => 'Оваа специјална страница зема еден текст и рекурзивно ги проширува сите шаблони во него.
+Исто така проширува и парсерски функции како
+<code><nowiki>{{</nowiki>#language:…}}</code> и променливи како
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Всушност, го проширува сето она што стои во двојни аглести загради.',
+'expand_templates_title' => 'Наслов на контекстот, за {{FULLPAGENAME}} и тн.:',
+'expand_templates_input' => 'Влезен текст:',
+'expand_templates_output' => 'Извод',
+'expand_templates_xml_output' => 'XML излез',
+'expand_templates_ok' => 'ОК',
+'expand_templates_remove_comments' => 'Отстрани коментари',
+'expand_templates_remove_nowiki' => 'Притаи <nowiki> ознаки во резултатот',
+'expand_templates_generate_xml' => 'Прикажи XML дрво на парсирање',
+'expand_templates_preview' => 'Преглед',
+
 );
index b383d81..d44532c 100644 (file)
@@ -86,12 +86,12 @@ $namespaceAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'സജീവ_ഉപയോക്താക്കൾ' ),
        'Allmessages'               => array( 'സർവ്വസന്ദേശങ്ങൾ' ),
+       'AllMyUploads'              => array( 'എന്റെയെല്ലാഅപ്‌ലോഡുകളും', 'എന്റെയെല്ലാപ്രമാണങ്ങളും' ),
        'Allpages'                  => array( 'എല്ലാതാളുകളും' ),
        'Ancientpages'              => array( 'പുരാതന_താളുകൾ' ),
        'Badtitle'                  => array( 'മോശംതലക്കെട്ട്' ),
        'Blankpage'                 => array( 'ശൂന്യതാൾ' ),
        'Block'                     => array( 'തടയുക', 'ഐ.പി.തടയുക', 'ഉപയോക്തൃതടയൽ' ),
-       'Blockme'                   => array( 'എന്നെതടയുക' ),
        'Booksources'               => array( 'പുസ്തകസ്രോതസ്സുകൾ' ),
        'BrokenRedirects'           => array( 'പൊട്ടിയതിരിച്ചുവിടലുകൾ' ),
        'Categories'                => array( 'വർഗ്ഗങ്ങൾ' ),
@@ -103,10 +103,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'അംഗത്വമെടുക്കൽ' ),
        'Deadendpages'              => array( 'അന്ത്യസ്ഥാനത്തുള്ള_താളുകൾ' ),
        'DeletedContributions'      => array( 'മായ്ച്ച_സേവനങ്ങൾ' ),
-       'Disambiguations'           => array( 'വിവക്ഷിതങ്ങൾ' ),
        'DoubleRedirects'           => array( 'ഇരട്ടത്തിരിച്ചുവിടലുകൾ' ),
        'EditWatchlist'             => array( 'ശ്രദ്ധിക്കുന്നവയുടെപട്ടികതിരുത്തുക' ),
        'Emailuser'                 => array( 'ഉപയോക്തൃഇമെയിൽ' ),
+       'ExpandTemplates'           => array( 'ഫലകങ്ങൾ_വികസിപ്പിക്കുക' ),
        'Export'                    => array( 'കയറ്റുമതി' ),
        'Fewestrevisions'           => array( 'കുറഞ്ഞ_പുനരവലോകനങ്ങൾ' ),
        'FileDuplicateSearch'       => array( 'പ്രമാണത്തിന്റെ_അപരനുള്ള_തിരച്ചിൽ' ),
@@ -151,9 +151,12 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'സംരക്ഷിത_താളുകൾ' ),
        'Protectedtitles'           => array( 'സംരക്ഷിത_ശീർഷകങ്ങൾ' ),
        'Randompage'                => array( 'ക്രമരഹിതം', 'ക്രമരഹിതതാൾ' ),
+       'RandomInCategory'          => array( 'വർഗ്ഗത്തിൽനിന്ന്ക്രമരഹിതം' ),
        'Randomredirect'            => array( 'ക്രമരഹിതതിരിച്ചുവിടലുകൾ' ),
        'Recentchanges'             => array( 'സമീപകാലമാറ്റങ്ങൾ' ),
        'Recentchangeslinked'       => array( 'ബന്ധപ്പെട്ട_മാറ്റങ്ങൾ' ),
+       'Redirect'                  => array( 'തിരിച്ചുവിടൽ' ),
+       'ResetTokens'               => array( 'ചീട്ട്പുനഃസജ്ജീകരിക്കുക' ),
        'Revisiondelete'            => array( 'നാൾപ്പതിപ്പ്_മായ്ക്കൽ' ),
        'Search'                    => array( 'അന്വേഷണം' ),
        'Shortpages'                => array( 'ചെറിയ_താളുകൾ' ),
@@ -235,6 +238,8 @@ $magicWords = array(
        'fullpagenamee'             => array( '1', 'താളിന്റെമുഴുവൻപേര്സമഗ്രം', 'FULLPAGENAMEE' ),
        'subpagename'               => array( '1', 'അനുബന്ധതാളിന്റെപേര്‌', 'SUBPAGENAME' ),
        'subpagenamee'              => array( '1', 'അനുബന്ധതാളിന്റെപേര്സമഗ്രം', 'SUBPAGENAMEE' ),
+       'rootpagename'              => array( '1', 'മൂലതാളിന്റെപേര്', 'ROOTPAGENAME' ),
+       'rootpagenamee'             => array( '1', 'മൂലതാളിന്റെപേര്‌സമഗ്രം', 'ROOTPAGENAMEE' ),
        'basepagename'              => array( '1', 'അടിസ്ഥാനതാളിന്റെപേര്‌', 'BASEPAGENAME' ),
        'basepagenamee'             => array( '1', 'അടിസ്ഥാനതാളിന്റെപേര്‌സമഗ്രം', 'BASEPAGENAMEE' ),
        'talkpagename'              => array( '1', 'സംവാദതാളിന്റെപേര്‌', 'TALKPAGENAME' ),
@@ -254,6 +259,7 @@ $magicWords = array(
        'img_center'                => array( '1', 'നടുവിൽ', 'നടുക്ക്‌', 'center', 'centre' ),
        'img_framed'                => array( '1', 'ചട്ടം', 'ചട്ടത്തിൽ', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'ചട്ടരഹിതം', 'frameless' ),
+       'img_lang'                  => array( '1', 'ഭാഷ=$1', 'lang=$1' ),
        'img_page'                  => array( '1', 'താൾ=$1', 'താൾ_$1', 'page=$1', 'page $1' ),
        'img_upright'               => array( '1', 'നേരേകുത്തനെ', 'നേരേകുത്തനെ=$1', 'നേരേകുത്തനെ_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'അതിർവര', 'border' ),
@@ -268,8 +274,10 @@ $magicWords = array(
        'img_link'                  => array( '1', 'കണ്ണി=$1', 'link=$1' ),
        'img_alt'                   => array( '1', 'പകരം=$1', 'alt=$1' ),
        'img_class'                 => array( '1', 'ശ്രേണി=$1', 'class=$1' ),
+       'int'                       => array( '0', 'സമ്പർക്കം:', 'INT:' ),
        'sitename'                  => array( '1', 'സൈറ്റിന്റെപേര്', 'SITENAME' ),
        'ns'                        => array( '0', 'നാമേ:', 'NS:' ),
+       'nse'                       => array( '0', 'നാമേസ:', 'NSE:' ),
        'localurl'                  => array( '0', 'ലോക്കൽയുആർഎൽ:', 'LOCALURL:' ),
        'localurle'                 => array( '0', 'ലോക്കൽയുആർഎൽഇ:', 'LOCALURLE:' ),
        'articlepath'               => array( '0', 'ലേഖനപഥം', 'ARTICLEPATH' ),
@@ -296,12 +304,16 @@ $magicWords = array(
        'revisionuser'              => array( '1', 'അവസാനംതിരുത്തിയയാൾ', 'REVISIONUSER' ),
        'plural'                    => array( '0', 'ബഹുവചനം:', 'PLURAL:' ),
        'fullurl'                   => array( '0', 'പൂർണ്ണവിലാസം:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'പൂർണ്ണവിലാസംസമഗ്രം:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'കാനോനിക്കൽവിലാസം:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'കാനോനിക്കൽവിലാസംസമഗ്രം:', 'CANONICALURLE:' ),
        'raw'                       => array( '0', 'അസംസ്കൃതം:', 'RAW:' ),
        'displaytitle'              => array( '1', 'ശീർഷകംപ്രദർശിപ്പിക്കുക', 'തലക്കെട്ട്പ്രദർശിപ്പിക്കുക', 'DISPLAYTITLE' ),
        'rawsuffix'                 => array( '1', 'വ', 'R' ),
        'newsectionlink'            => array( '1', '__പുതിയവിഭാഗംകണ്ണി__', '__പുതിയഖണ്ഡിക്കണ്ണി__', '__NEWSECTIONLINK__' ),
        'nonewsectionlink'          => array( '1', '__പുതിയവിഭാഗംകണ്ണിവേണ്ട__', '__പുതിയഖണ്ഡിക്കണ്ണിവേണ്ട__', '__NONEWSECTIONLINK__' ),
        'currentversion'            => array( '1', 'ഈപതിപ്പ്', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'വിലാസഗൂഢീകരണം:', 'URLENCODE:' ),
        'currenttimestamp'          => array( '1', 'സമയമുദ്ര', 'CURRENTTIMESTAMP' ),
        'localtimestamp'            => array( '1', 'പ്രാദേശികസമയമുദ്ര', 'LOCALTIMESTAMP' ),
        'directionmark'             => array( '1', 'ദിശാസൂചിക', 'DIRECTIONMARK', 'DIRMARK' ),
@@ -615,12 +627,10 @@ $1',
 'ok' => 'ശരി',
 'retrievedfrom' => '"$1" എന്ന താളിൽനിന്നു ശേഖരിച്ചത്',
 'youhavenewmessages' => 'താങ്കൾക്ക് $1 ഉണ്ട് ($2).',
-'newmessageslink' => 'പുതിയ സന്ദേശങ്ങൾ',
-'newmessagesdifflink' => 'അവസാന മാറ്റം',
 'youhavenewmessagesfromusers' => 'താങ്കൾക്ക് {{PLURAL:$3|ഒരു ഉപയോക്താവ്|$3 ഉപയോക്താക്കൾ}} $1 ചേർത്തിട്ടുണ്ട് ($2).',
 'youhavenewmessagesmanyusers' => 'താങ്കൾക്ക് പലർ $1 ചേർത്തിട്ടുണ്ട് ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|à´ªàµ\81തിയ à´¸à´¨àµ\8dà´¦àµ\87à´¶à´\82|പുതിയ സന്ദേശങ്ങൾ}}',
-'newmessagesdifflinkplural' => 'അവസാന {{PLURAL:$1|മാറ്റം|മാറ്റങ്ങൾ}}',
+'newmessageslinkplural' => '{{PLURAL:$1|à´ªàµ\81തിയ à´\92à´°àµ\81 à´¸à´¨àµ\8dà´¦àµ\87à´¶à´\82|999=പുതിയ സന്ദേശങ്ങൾ}}',
+'newmessagesdifflinkplural' => 'അവസാന {{PLURAL:$1|മാറ്റം|999=മാറ്റങ്ങൾ}}',
 'youhavenewmessagesmulti' => 'താങ്കൾക്ക് $1 താളിൽ പുതിയ സന്ദേശങ്ങൾ ഉണ്ട്',
 'editsection' => 'തിരുത്തുക',
 'editold' => 'തിരുത്തുക',
@@ -761,7 +771,7 @@ $2',
 # Login and logout pages
 'logouttext' => "'''താങ്കൾ ഇപ്പോൾ {{SITENAME}} സംരംഭത്തിൽനിന്നും ലോഗൗട്ട് ചെയ്തിരിക്കുന്നു'''
 
-താà´\99àµ\8dà´\95ൾ à´µàµ\86à´¬àµ\8d à´¬àµ\8dà´°àµ\8cസറിന്റെ ക്യാഷെ ശൂന്യമാക്കിയിട്ടില്ലെങ്കിൽ ചില താളുകളിൽ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കുന്നതായി കാണിക്കാൻ സാധ്യതയുണ്ട്.",
+താà´\99àµ\8dà´\95ൾ à´µàµ\86à´¬àµ\8d à´¬àµ\8dà´°àµ\97സറിന്റെ ക്യാഷെ ശൂന്യമാക്കിയിട്ടില്ലെങ്കിൽ ചില താളുകളിൽ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കുന്നതായി കാണിക്കാൻ സാധ്യതയുണ്ട്.",
 'welcomeuser' => 'സ്വാഗതം, $1!',
 'welcomecreation-msg' => 'താങ്കളുടെ അംഗത്വം സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു.
 താങ്കളുടെ [[Special:Preferences|{{SITENAME}} ക്രമീകരണങ്ങളിൽ]] മാറ്റം വരുത്താൻ മറക്കരുത്.',
@@ -1449,7 +1459,6 @@ $1",
 'preferences' => 'ക്രമീകരണങ്ങൾ',
 'mypreferences' => 'ക്രമീകരണങ്ങൾ',
 'prefs-edits' => 'ആകെ തിരുത്തുകൾ:',
-'prefsnologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
 'prefsnologintext2' => 'താങ്കളുടെ ഉപയോക്തൃക്രമീകരണങ്ങൾ സജ്ജീകരിക്കാൻ ദയവായി $1.',
 'changepassword' => 'രഹസ്യവാക്ക് മാറ്റുക',
 'prefs-skin' => 'ദൃശ്യരൂപം',
@@ -1509,7 +1518,7 @@ $1",
 'timezoneregion-indian' => 'ഇന്ത്യൻ മഹാസമുദ്രം',
 'timezoneregion-pacific' => 'ശാന്തസമുദ്രം',
 'allowemail' => 'എനിക്ക് എഴുത്തയക്കാൻ മറ്റുള്ളവരെ അനുവദിക്കുക',
-'prefs-searchoptions' => 'തിരയàµ\81à´\95',
+'prefs-searchoptions' => 'തിരà´\9aàµ\8dà´\9aിൽ',
 'prefs-namespaces' => 'നാമമേഖലകൾ',
 'defaultns' => 'അല്ലെങ്കിൽ ഈ നാമമേഖലകളിൽ തിരയുക:',
 'default' => 'സ്വതേ',
@@ -1748,8 +1757,10 @@ $1",
 'recentchanges-feed-description' => 'ഈ ഫീഡ് ഉപയോഗിച്ച് വിക്കിയിലെ പുതിയ മാറ്റങ്ങൾ നിരീക്ഷിക്കുക.',
 'recentchanges-label-newpage' => 'ഒരു പുതിയ താൾ സൃഷ്ടിച്ചിരിക്കുന്നു',
 'recentchanges-label-minor' => 'ഇതൊരു ചെറിയ തിരുത്താണ്',
-'recentchanges-label-bot' => 'à´\87à´¤àµ\8aà´°àµ\81 à´¯à´¨àµ\8dà´¤àµ\8dà´°à´\82 à´¨à´\9fà´¤àµ\8dതിയ തിരുത്താണ്',
+'recentchanges-label-bot' => 'à´\87à´¤àµ\8d à´¯à´¨àµ\8dà´¤àµ\8dà´°à´\82 à´\9aàµ\86à´¯àµ\8dà´¤ തിരുത്താണ്',
 'recentchanges-label-unpatrolled' => 'ഇതുവരെ റോന്തു ചുറ്റപ്പെടാത്ത ഒരു തിരുത്താണിത്',
+'recentchanges-label-plusminus' => 'താളിന്റെ വലിപ്പം ഇത്രയും ബൈറ്റുകൾ മാറിയിരിക്കുന്നു',
+'recentchanges-legend-newpage' => '([[Special:NewPages|പുതിയ താളുകളുടെ പട്ടികയും]] കാണുക)',
 'rcnote' => "കഴിഞ്ഞ {{PLURAL:$2|ദിവസം|'''$2''' ദിവസങ്ങൾക്കുള്ളിൽ}} സംഭവിച്ച, {{PLURAL:$1|'''1''' തിരുത്തൽ|'''$1''' തിരുത്തലുകൾ}} താഴെക്കാണാം. ശേഖരിച്ച സമയം: $4, $5.",
 'rcnotefrom' => '<b>$2</b> മുതലുള്ള മാറ്റങ്ങൾ (<b>$1</b> എണ്ണം വരെ കാണാം).',
 'rclistfrom' => '$1 മുതലുള്ള മാറ്റങ്ങൾ പ്രദർശിപ്പിക്കുക',
@@ -2469,8 +2480,9 @@ $NEWPAGE
 മെയിൽ: $PAGEEDITOR_EMAIL
 വിക്കി: $PAGEEDITOR_WIKI
 
-താങ്കൾ ഈ താൾ സന്ദർശിക്കുന്നില്ലങ്കിൽ മറ്റ് അറിയിപ്പുകൾ ഒന്നുമുണ്ടാകുന്നതല്ല. ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക സന്ദർശിച്ചും ഉൾപ്പെട്ട താളുകളിലെ അറിയിപ്പ് മുദ്രകൾ താങ്കൾക്ക് പുനഃക്രമീകരിക്കാവുന്നതാണ്‌.
-             താങ്കളുടെ {{SITENAME}} സുഹൃദ് അറിയിപ്പ് സജ്ജീകരണം
+താങ്കൾ ലോഗിൻ ചെയ്ത് ഈ താൾ സന്ദർശിക്കുന്നില്ലങ്കിൽ മറ്റ് അറിയിപ്പുകൾ ഒന്നുമുണ്ടാകുന്നതല്ല. ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക സന്ദർശിച്ചും ഉൾപ്പെട്ട താളുകളിലെ അറിയിപ്പ് മുദ്രകൾ താങ്കൾക്ക് പുനഃക്രമീകരിക്കാവുന്നതാണ്‌.
+
+താങ്കളുടെ {{SITENAME}} സുഹൃദ് അറിയിപ്പ് സജ്ജീകരണം
 
 --
 ഇമെയിൽ അറിയിപ്പ് സജ്ജീകരണങ്ങളിൽ മാറ്റംവരുത്താൻ, സന്ദർശിക്കുക
@@ -3767,7 +3779,7 @@ $1',
 'limitall' => 'എല്ലാം',
 
 # Email address confirmation
-'confirmemail' => 'ഇ-മെയിൽ വിലാസം സ്ഥിരീകരിക്കൽ',
+'confirmemail' => 'ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കൽ',
 'confirmemail_noemail' => '[[Special:Preferences|താങ്കളുടെ ക്രമീകരണങ്ങളുടെ കൂടെ]] സാധുവായൊരു ഇ-മെയിൽ വിലാസം സജ്ജീകരിച്ചിട്ടില്ല.',
 'confirmemail_text' => '{{SITENAME}} സം‌രംഭത്തിൽ ഇ-മെയിൽ സൗകര്യം ഉപയോഗിക്കണമെങ്കിൽ താങ്കൾ താങ്കളുടെ ഇ-മെയിൽ വിലാസത്തിന്റെ സാധുത തെളിയിച്ചിരിക്കണം. താങ്കളുടെ ഇ-മെയിൽ വിലാസത്തിലേക്ക് സ്ഥിരീകരണ മെയിൽ അയക്കുവാൻ താഴെയുള്ള ബട്ടൺ അമർത്തുക. താങ്കൾക്ക് അയക്കുന്ന ഇ-മെയിലിൽ ഒരു സ്ഥിരീകരണ കോഡ് ഉണ്ട്. ആ കോഡിൽ അമർത്തിയാൽ താങ്കളുടെ വിലാസത്തിന്റെ സാധുത തെളിയിക്കപ്പെടും.',
 'confirmemail_pending' => 'താങ്കളുടെ അംഗത്വം ഈ അടുത്ത് ഉണ്ടാക്കിയതാണെങ്കിൽ,  ഒരു സ്ഥിരീകരണ കോഡ് താങ്കൾക്ക് ഇ-മെയിൽ ചെയ്തിട്ടുണ്ട്.  പുതിയ സ്ഥിരീകരണ കോഡ് ആവശ്യപ്പെടാൻ ശ്രമിക്കുന്നതിനു മുൻപ് ആദ്യത്തെ സ്ഥിരീകരണ കോഡിനായി കുറച്ച് സമയം കാത്തിരിക്കൂ.',
@@ -3992,8 +4004,7 @@ $5
 'specialpages' => 'പ്രത്യേക താളുകൾ',
 'specialpages-note-top' => 'സൂചന',
 'specialpages-note' => '* പൊതുവേ ഉപയോഗിക്കുന്ന പ്രത്യേക താളുകൾ.
-* <strong class="mw-specialpagerestricted">ഉപയോഗം പരിമിതപ്പെടുത്തിയിരിക്കുന്ന പ്രത്യേക താളുകൾ.</strong>
-* <span class="mw-specialpagecached">പ്രാദേശികമായി സംഭരിച്ചുപയോഗിക്കുന്ന പ്രത്യേക താളുകൾ.</span>',
+* <span class="mw-specialpagerestricted">ഉപയോഗം പരിമിതപ്പെടുത്തിയിരിക്കുന്ന പ്രത്യേക താളുകൾ.</span>',
 'specialpages-group-maintenance' => 'പരിചരണം ആവശ്യമായവ',
 'specialpages-group-other' => 'മറ്റു പ്രത്യേക താളുകൾ',
 'specialpages-group-login' => 'പ്രവേശിക്കുക / അംഗത്വമെടുക്കുക',
@@ -4206,4 +4217,20 @@ $5
 'limitreport-expansiondepth' => 'വികസിപ്പിക്കാനാവുന്ന ഉയർന്ന പരിധി',
 'limitreport-expensivefunctioncount' => 'വ്യയമേറിയ പാഴ്സർ ഫങ്ഷൻ എണ്ണം',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'ഫലകങ്ങൾ വികസിപ്പിക്കുക',
+'expand_templates_intro' => 'ഈ പ്രത്യേക താൾ, ചില എഴുത്തുകൾ എടുത്ത് എല്ലാ ഫലകങ്ങളും പുനരാവർത്തിത സ്വഭാവത്തോടെ വികസിപ്പിക്കുന്നു.
+<code><nowiki>{{</nowiki>#എങ്കിൽ:…}}</code> തുടങ്ങിയ പാഴ്‌സർ ഫങ്ഷനുകളും
+<code><nowiki>{{</nowiki>ഈദിവസം}}</code> തുടങ്ങിയ ചരങ്ങളും, ഈ താൾ വികസിപ്പിക്കുന്നുണ്ട്.
+ചുരുക്കിപറഞ്ഞാൽ ഇരട്ട കോഷ്ഠകങ്ങളിലുള്ള എന്തിനേയും വികസിപ്പിക്കുന്നു.',
+'expand_templates_title' => '{{FULLPAGENAME}} മുതലായവ എടുക്കാനായി ഉള്ളടക്കത്തിന്റെ തലക്കെട്ട്:',
+'expand_templates_input' => 'ഇൻപുട്ട് ടെക്സ്റ്റ്:',
+'expand_templates_output' => 'ഫലം',
+'expand_templates_xml_output' => 'എക്സ്.എം.എൽ. ഔട്ട്പുട്ട്',
+'expand_templates_ok' => 'ശരി',
+'expand_templates_remove_comments' => 'അഭിപ്രായങ്ങൾ ഒഴിവാക്കുക',
+'expand_templates_remove_nowiki' => 'ഫലങ്ങളിലെ <nowiki> റ്റാഗുകൾ ഒതുക്കുക',
+'expand_templates_generate_xml' => 'എക്സ്.എം.എൽ. പാഴ്‌സർ ട്രീ പ്രദർശിപ്പിക്കുക',
+'expand_templates_preview' => 'എങ്ങനെയുണ്ടെന്നു കാണുക',
+
 );
index 30d4020..784546c 100644 (file)
@@ -11,6 +11,7 @@
  * @author E.shijir
  * @author Kaganer
  * @author Meno25
+ * @author MongolWiki
  * @author Wisdom
  * @author לערי ריינהארט
  */
@@ -149,16 +150,16 @@ $messages = array(
 'dec' => '12-р сар',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Ангилал|Ангиллууд}}',
-'category_header' => '"$1" Ð°Ð½Ð³Ð¸Ð»Ð°Ð» Ð´Ð°Ñ\85Ñ\8c Ñ\85Ñ\83Ñ\83дÑ\81Ñ\83Ñ\83д',
-'subcategories' => 'Ð\94Ñ\8dд Ð°Ð½Ð³Ð¸Ð»Ð»Ñ\83Ñ\83д',
-'category-media-header' => '"$1" Ð°Ð½Ð³Ð¸Ð»Ð°Ð» Ð´Ð°Ñ\85Ñ\8c Ð¼ÐµÐ´Ð¸Ð° Ñ\84айлÑ\83Ñ\83д',
+'pagecategories' => '{{PLURAL:$1|Анги|Ангилал}}',
+'category_header' => '"$1" Ð°Ð½Ð³Ð¸Ð¹Ð½ Ð±Ò¯Ñ\80Ñ\8dлдÑ\8dÑ\85үүн',
+'subcategories' => 'Ð\90нгийн Ð±Ò¯Ð»Ñ\8dг',
+'category-media-header' => '"$1" Ð°Ð½Ð³Ð¸Ð¹Ð½ Ñ\84айл',
 'category-empty' => "''Одоогийн байдлаар энэ ангилалд хуудас, медиа файл байхгүй байна.''",
 'hidden-categories' => '{{PLURAL:$1|Нуугдсан ангилал|Нуугдсан ангиллууд}}',
 'hidden-category-category' => 'Нуугдсан ангиллууд',
-'category-subcat-count' => '{{PLURAL:$2|Энэ ангилалд дараах дэд ангилал л байна.|Энэ ангилалд нийт $2-с $1 дэд ангилал байна.}}',
+'category-subcat-count' => '{{PLURAL:$2|Энэ ангилалд дараах дэд ангилал л байна.|Энэ анги дотор $2 анги ангилагдснаас $1 нь ил харагдаж байна.}}',
 'category-subcat-count-limited' => 'Энэ ангилалд {{PLURAL:$1| дэд ангилал|$1-н дэд ангилалууд}} байна.',
-'category-article-count' => '{{PLURAL:$2|ЭнÑ\8d Ð°Ð½Ð³Ð¸Ð»Ð°Ð»Ð´ Ð´Ð°Ñ\80ааÑ\85 Ñ\85Ñ\83Ñ\83даÑ\81 Ð» Ð±Ð°Ð¹Ð½Ð°.|ЭнÑ\8d Ð°Ð½Ð³Ð¸Ð»Ð°Ð»Ð´ Ð½Ð¸Ð¹Ñ\82 $2-Ñ\81 Ð´Ð°Ñ\80ааÑ\85 $1 Ñ\85Ñ\83Ñ\83даÑ\81 байна.}}',
+'category-article-count' => '{{PLURAL:$2|ЭнÑ\8d Ð°Ð½Ð³Ð¸Ð´ Ð½Ñ\8dг Ñ\85Ñ\83Ñ\83даÑ\81 Ð±Ð°Ð¹Ð½Ð°.|Энд $2 Ñ\85Ñ\83Ñ\83даÑ\81 Ð°Ð½Ð³Ð¸Ð»Ð°Ð³Ð´Ð°Ð½ Ð¾Ñ\80Ñ\81нооÑ\81 $1 Ñ\85олбооÑ\81 Ð¸Ð» Ñ\85аÑ\80агдаж байна.}}',
 'category-article-count-limited' => 'Энэ ангилалд дараах {{PLURAL:$1|хуудас|$1 хуудаснууд}} байна.',
 'category-file-count' => '{{PLURAL:$2|Энэ ангилалд дараах файл л байна.|Энэ ангилалд нийт $2-с дараах $1 файл байна.}}',
 'category-file-count-limited' => 'Энэ ангилалд дараах {{PLURAL:$1|файл|$1 файлнууд}} байна.',
@@ -300,8 +301,6 @@ $1',
 'pagetitle' => '$1 - {{SITENAME}}',
 'retrievedfrom' => '"$1" хуудаснаас авсан',
 'youhavenewmessages' => 'Таньд $1 ($2) байна.',
-'newmessageslink' => 'шинэ мессеж',
-'newmessagesdifflink' => 'сүүлийн өөрчлөлт',
 'youhavenewmessagesfromusers' => 'Танд {{PLURAL:$3|өөр нэгэн хэрэглэгчээс |$3 хэрэглэгчээс}} $1 ирсэн байна ($2).',
 'youhavenewmessagesmanyusers' => 'Танд ($2) олон хэрэглэгчидээс $1.',
 'newmessageslinkplural' => '{{PLURAL:$1|нэг шинэ меммеж| шинэ мессеж}}',
@@ -343,7 +342,7 @@ $1',
 'nstab-mediawiki' => 'Мэдэгдэл',
 'nstab-template' => 'Загвар',
 'nstab-help' => 'Тусламж',
-'nstab-category' => 'Ангилал',
+'nstab-category' => 'Анги',
 
 # Main script and global functions
 'nosuchaction' => 'Тийм үйлдэл байхгүй байна',
@@ -1081,7 +1080,6 @@ $1",
 'preferences' => 'Хэрэглэгчийн тохиргоо',
 'mypreferences' => 'Миний тохиргоо',
 'prefs-edits' => 'Засваруудын тоо:',
-'prefsnologin' => 'Нэвтрээгүй байна',
 'changepassword' => 'Нууц үгээ солих',
 'prefs-skin' => 'Арьс',
 'skin-preview' => 'Урьдчилж харах',
@@ -1355,6 +1353,7 @@ $1 тэмдэгтээс богино байх ёстой.',
 'recentchanges-label-minor' => 'Энэ нь бага зэргийн засвар байна',
 'recentchanges-label-bot' => 'Энэ засварыг бот гүйцэтгэсэн байна',
 'recentchanges-label-unpatrolled' => 'Энэ засварыг одоогийн байдлаар манаагүй байна',
+'recentchanges-legend-newpage' => '$1 - шинэ хуудас',
 'rcnote' => "Доорх нь $5, $4-ий байдлаарх сүүлийн '''$2''' өдрийн турших '''$1''' засвар юм.",
 'rcnotefrom' => "Доорх нь '''$2'''-с хойших өөрчлөлтүүд ('''$1''' хүртэлхийг харуулав) юм.",
 'rclistfrom' => '$1-с хойших шинэ засваруудыг үзүүлэх',
@@ -1789,7 +1788,7 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 
 # Miscellaneous special pages
 'nbytes' => '$1 байт',
-'ncategories' => '$1 ангилал',
+'ncategories' => '$1 анги',
 'nlinks' => '$1 линк',
 'nmembers' => '$1 гишүүн',
 'nrevisions' => '$1 засвар',
@@ -1797,12 +1796,12 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'nimagelinks' => '$1 {{PLURAL:$1|хуудсанд|хуудсанд}} ашигласан',
 'specialpage-empty' => 'Энэ мэдүүлэгт үр дүн гарсангүй.',
 'lonelypages' => 'Өнчин хуудсууд',
-'lonelypagestext' => 'Энэ хуудсууд {{SITENAME}}-дахь бусад хуудсуудтай холбогдоогүй эсвэл заагаас хэтэрсэн байна.',
+'lonelypagestext' => 'Энэ хуудсууд {{SITENAME}}-дахь бусад хуудастай холбогдоогүй эсвэл заагаас хэтэрсэн байна.',
 'uncategorizedpages' => 'Ангилагдаагүй хуудсууд',
-'uncategorizedcategories' => 'Ангилагдаагүй ангиллууд',
+'uncategorizedcategories' => 'Ангилагдаагүй анги',
 'uncategorizedimages' => 'Ангилагдаагүй зургууд',
 'uncategorizedtemplates' => 'Ангилагдаагүй загварууд',
-'unusedcategories' => 'Ð\90Ñ\88иглагдаагүй Ð°Ð½Ð³Ð¸Ð»Ð»Ñ\83Ñ\83д',
+'unusedcategories' => 'ХооÑ\81он Ð°Ð½Ð³Ð¸',
 'unusedimages' => 'Ашиглагдаагүй файлууд',
 'popularpages' => 'Эрэлттэй хуудсууд',
 'wantedcategories' => 'Хэрэгцээт ангиллууд',
@@ -1889,11 +1888,11 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'cachedspecial-refresh-now' => 'Саяханы хуудсыг харах',
 
 # Special:Categories
-'categories' => 'Ангиллууд',
+'categories' => 'Анги',
 'categoriespagetext' => 'Дараах {{PLURAL:$1|ангилалд|ангиллуудад}} хуудас эсвэл медиа файл агуулагдаж байна.
 [[Special:UnusedCategories|Хэрэглэгдэхгүй байгаа]] ангиллуудыг энд харуулсангүй.
 [[Special:WantedCategories|Хэрэгтэй ангиллууд]] гэдгийг харна уу.',
-'categoriesfrom' => 'Хамгийн Ñ\8dÑ\85Ñ\8dлж Ñ\85аÑ\80Ñ\83Ñ\83лаÑ\85 ангилал:',
+'categoriesfrom' => 'ЭÑ\85ний ангилал:',
 'special-categories-sort-count' => 'тоогоор ялгах',
 'special-categories-sort-abc' => 'үсгийн дарааллаар ялгах',
 
@@ -2974,7 +2973,7 @@ $1',
 'exif-writer' => 'Бичсэн',
 'exif-languagecode' => 'Хэл',
 'exif-iimversion' => 'IIM хувилбар',
-'exif-iimcategory' => 'Ангилал',
+'exif-iimcategory' => 'Анги',
 'exif-datetimeexpires' => 'түүний дараа бүү хэрэглэ',
 'exif-datetimereleased' => 'Гарсан өдөр',
 'exif-originaltransmissionref' => '',
@@ -3455,4 +3454,9 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|зуун|зуун}}',
 'duration-millennia' => '$1 {{PLURAL:$1|мянган|мянган}}',
 
+# Special:ExpandTemplates
+'expand_templates_input' => 'Оруулах бичиг:',
+'expand_templates_output' => 'Үр дүн',
+'expand_templates_remove_comments' => 'Товч агуулгыг авч хаях',
+
 );
index 928f77b..c89a976 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'जुनी_पाने' ),
        'Blankpage'                 => array( 'कोरे_पान' ),
        'Block'                     => array( 'प्रतिबंध', 'अंकपत्ता_प्रतिबंध', 'सदस्य_प्रतिबंध' ),
-       'Blockme'                   => array( 'मला_प्रतिबंध_करा' ),
        'Booksources'               => array( 'पुस्तक_स्रोत' ),
        'BrokenRedirects'           => array( 'चुकीची_पुनर्निर्देशने' ),
        'Categories'                => array( 'वर्ग' ),
@@ -93,9 +92,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'सदस्य_नोंद' ),
        'Deadendpages'              => array( 'टोकाची_पाने' ),
        'DeletedContributions'      => array( 'वगळलेली_योगदाने' ),
-       'Disambiguations'           => array( 'निःसंदिग्धीकरण' ),
        'DoubleRedirects'           => array( 'दुहेरी_पुनर्निर्देशने' ),
        'Emailuser'                 => array( 'विपत्र_वापरकर्ता' ),
+       'ExpandTemplates'           => array( 'साचेविस्तारकरा' ),
        'Export'                    => array( 'निर्यात' ),
        'Fewestrevisions'           => array( 'कमीत_कमी_आवर्तने' ),
        'FileDuplicateSearch'       => array( 'दुहेरी_संचिका_शोध' ),
@@ -173,7 +172,7 @@ $magicWords = array(
        'nogallery'                 => array( '0', '__प्रदर्शननको__', '__NOGALLERY__' ),
        'forcetoc'                  => array( '0', '__अनुक्रमणिकाहवीच__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__अनुक्रमणिका__', '__TOC__' ),
-       'noeditsection'             => array( '0', '__असंपादनक्षम__', '__NOEDITSECTION__' ),
+       'noeditsection'             => array( '0', '__विभाà¤\97à¤\85सà¤\82पादनà¤\95à¥\8dषम__', '__NOEDITSECTION__' ),
        'currentmonth'              => array( '1', 'सद्यमहिना', 'सद्यमहिना२', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'सद्यमहिना१', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'सद्यमहिनानाव', 'CURRENTMONTHNAME' ),
@@ -207,6 +206,7 @@ $magicWords = array(
        'pagenamee'                 => array( '1', 'लेखानावव', 'PAGENAMEE' ),
        'namespace'                 => array( '1', 'नामविश्व', 'NAMESPACE' ),
        'namespacee'                => array( '1', 'नामविश्वा', 'नामविश्वाचे', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'नामविश्वक्रमांक', 'NAMESPACENUMBER' ),
        'talkspace'                 => array( '1', 'चर्चाविश्व', 'TALKSPACE' ),
        'talkspacee'                => array( '1', 'चर्चाविश्वा', 'चर्चाविश्वाचे', 'TALKSPACEE' ),
        'subjectspace'              => array( '1', 'विषयविश्व', 'लेखविश्व', 'SUBJECTSPACE', 'ARTICLESPACE' ),
@@ -233,8 +233,8 @@ $magicWords = array(
        'img_center'                => array( '1', 'मध्यवर्ती', 'center', 'centre' ),
        'img_framed'                => array( '1', 'चौकट', 'फ़्रेम', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'विनाचौकट', 'विनाफ़्रेम', 'frameless' ),
-       'img_page'                  => array( '1', 'पान=$1', 'पान $1', 'page=$1', 'page $1' ),
-       'img_upright'               => array( '1', 'उभा', 'उभा=$1', 'उभा $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_page'                  => array( '1', 'पान=$1', 'पान_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'उभा', 'उभा=$1', 'उभा_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'सीमा', 'border' ),
        'img_baseline'              => array( '1', 'तळरेषा', 'आधाररेषा', 'baseline' ),
        'img_sub'                   => array( '1', 'अधो', 'sub' ),
@@ -304,6 +304,11 @@ $magicWords = array(
        'staticredirect'            => array( '1', '__अविचलपुर्ननिर्देश__', '__STATICREDIRECT__' ),
        'protectionlevel'           => array( '1', 'सुरक्षास्तर', 'PROTECTIONLEVEL' ),
        'formatdate'                => array( '0', 'दिनांकनपद्धती', 'formatdate', 'dateformat' ),
+       'url_wiki'                  => array( '0', 'विकि', 'WIKI' ),
+       'pagesincategory_all'       => array( '0', 'सर्व', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'पाने', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'उपवर्ग', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'संचिका', 'files' ),
 );
 
 $digitTransformTable = array(
@@ -594,8 +599,6 @@ $1',
 'ok' => 'ठीक',
 'retrievedfrom' => '"$1" पासून हुडकले',
 'youhavenewmessages' => 'तुमच्यासाठी $1 आहे. ($2)',
-'newmessageslink' => 'नवीन संदेश',
-'newmessagesdifflink' => 'ताजा बदल',
 'youhavenewmessagesfromusers' => 'तुमच्यासाठी {{PLURAL:$3|इतर सदस्याकडून|$3 सदस्यांकडून}} $1 आहेत. ($2)',
 'youhavenewmessagesmanyusers' => 'तुमच्यासाठी बऱ्याच सदस्यांकडून $1 आहेत. ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|नवीन संदेश|नवीन संदेश}}',
@@ -1278,15 +1281,15 @@ $1",
 'deletedhist' => 'वगळलेला इतिहास',
 'revdelete-hide-current' => '$1 मधील $2 या वेळचे आवर्तन लपविण्यात त्रूटी : ते सद्य पुनरावर्तन आहे.
 ते लपवता येत नाही.',
-'revdelete-show-no-access' => '$2, $1 à¤\9aà¥\80 à¤µà¤¸à¥\8dतà¥\82 दाखवताना अडचण: ती "प्रतिबंधित" खूण असलेली आहे.
+'revdelete-show-no-access' => '$2, $1 à¤\9aà¥\80 à¤¬à¤¾à¤¬ दाखवताना अडचण: ती "प्रतिबंधित" खूण असलेली आहे.
 तुम्ही तिच्यापर्यंत पोचू शकत नाही.',
-'revdelete-modify-no-access' => '$2, $1 à¤\9aà¥\80 à¤µà¤¸à¥\8dतà¥\82 संपादताना अडचण: ती "प्रतिबंधित" खूण असलेली आहे.
+'revdelete-modify-no-access' => '$2, $1 à¤\9aà¥\80 à¤¬à¤¾à¤¬ संपादताना अडचण: ती "प्रतिबंधित" खूण असलेली आहे.
 तुम्ही तिच्यापर्यंत पोचू शकत नाही.',
-'revdelete-modify-missing' => 'वसà¥\8dतà¥\82 क्र. $1 ला संपादताना त्रुटी: ती माहितीकोषात नाही!',
-'revdelete-no-change' => "'''सà¥\82à¤\9aना:''' $2, $1 à¤\9aà¥\8dया à¤µà¤¸à¥\8dतà¥\82ने अगोदरच दृश्यता रुपरेषा मागितल्या आहेत.",
-'revdelete-concurrent-change' => '$2, $1 à¤\9aà¥\80 à¤µà¤¸à¥\8dतà¥\82 à¤¸à¤\82पादताना à¤\9aà¥\82à¤\95: à¤¤à¥\81मà¥\8dहà¥\80 à¤¤à¤¿à¤²à¤¾ à¤¸à¤\82पादताना à¤¦à¥\81सऱà¥\8dया à¤µà¥\8dयà¤\95à¥\8dतिनà¥\87 à¤µà¤¸à¥\8dतà¥\82स à¤¸à¤\82पादले असावे.
+'revdelete-modify-missing' => 'बाब क्र. $1 ला संपादताना त्रुटी: ती माहितीकोषात नाही!',
+'revdelete-no-change' => "'''सà¥\82à¤\9aना:''' $2, $1 à¤\9aà¥\8dया à¤¬à¤¾à¤¬à¥\80ने अगोदरच दृश्यता रुपरेषा मागितल्या आहेत.",
+'revdelete-concurrent-change' => '$2, $1 à¤\9aà¥\80 à¤¬à¤¾à¤¬ à¤¸à¤\82पादताना à¤\9aà¥\82à¤\95: à¤¤à¥\81मà¥\8dहà¥\80 à¤¤à¤¿à¤²à¤¾ à¤¸à¤\82पादताना à¤¦à¥\81सऱà¥\8dया à¤µà¥\8dयà¤\95à¥\8dतिनà¥\87  à¤¬à¤¾à¤¬à¥\80स à¤¸à¤\82पादिले असावे.
 कृपया याद्या तपासा.',
-'revdelete-only-restricted' => '$2, $1 à¤\9aà¥\80 à¤µà¤¸à¥\8dतà¥\82 à¤²à¤ªà¤µà¤¤à¤¾à¤¨à¤¾ à¤\9aà¥\82à¤\95: à¤¤à¥\81मà¥\8dहà¥\80 à¤\87तर à¤¦à¥\83शà¥\8dयता à¤ªà¤°à¥\8dयायाà¤\82ना à¤¨à¤¿à¤µà¤¡à¤²à¥\8dयाशिवाय à¤ªà¥\8dरà¤\9aालà¤\95ाà¤\82पासà¥\82न à¤µà¤¸à¥\8dतà¥\82 लपवू शकत नाही.',
+'revdelete-only-restricted' => '$2, $1 à¤\9aà¥\80 à¤¬à¤¾à¤¬ à¤²à¤ªà¤µà¤¤à¤¾à¤¨à¤¾ à¤\9aà¥\82à¤\95: à¤¤à¥\81मà¥\8dहà¥\80 à¤\87तर à¤¦à¥\83शà¥\8dयता à¤ªà¤°à¥\8dयायाà¤\82ना à¤¨à¤¿à¤µà¤¡à¤²à¥\8dयाशिवाय à¤ªà¥\8dरà¤\9aालà¤\95ाà¤\82पासà¥\82न à¤¬à¤¾à¤¬ लपवू शकत नाही.',
 'revdelete-reason-dropdown' => '* वगळण्याची सामान्य कारणे
 ** प्रताधिकार उल्लंघन
 ** अयोग्य टिप्पणी किंवा व्यक्तिगत माहिती
@@ -1368,7 +1371,7 @@ $1",
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|या उपसर्गानिशी असलेली पाने न्याहाळा]]',
 'searchprofile-articles' => 'आशय-पाने',
 'searchprofile-project' => 'साहाय्य व प्रकल्प पाने',
-'searchprofile-images' => 'मलà¥\8dà¤\9fिमà¥\80डिया',
+'searchprofile-images' => 'बहà¥\81माधà¥\8dयमà¥\87',
 'searchprofile-everything' => 'सगळे',
 'searchprofile-advanced' => 'प्रगत',
 'searchprofile-articles-tooltip' => '$1 मध्ये शोधा',
@@ -1378,11 +1381,11 @@ $1",
 'searchprofile-advanced-tooltip' => 'निवडलेल्या नामविश्वांमध्ये शोधा:',
 'search-result-size' => '$1 ({{PLURAL:$2|१ शब्द|$2 शब्द}})',
 'search-result-category-size' => '{{PLURAL:$1|१ सदस्य|$1 सदस्य}} ({{PLURAL:$2|१ उपवर्ग|$2 उपवर्ग}}, {{PLURAL:$3|1 संचिका|$3 संचिका}})',
-'search-result-score' => 'à¤\9cà¥\81ळणà¥\80: $1%',
+'search-result-score' => 'à¤\85नà¥\8dवरà¥\8dथà¤\95ता: $1%',
 'search-redirect' => '(पुनर्निर्देशन $1)',
 'search-section' => '(विभाग $1)',
 'search-suggest' => 'तुम्हाला हेच म्हणायचे का: $1',
-'search-interwiki-caption' => 'à¤\87तर प्रकल्प',
+'search-interwiki-caption' => 'सह प्रकल्प',
 'search-interwiki-default' => '$1चे निकाल:',
 'search-interwiki-more' => '(आणखी)',
 'search-relatedarticle' => 'जवळील',
@@ -1408,10 +1411,9 @@ $1",
 'search-error' => 'शोध घेतांना घडलेली त्रूटी:$1',
 
 # Preferences page
-'preferences' => 'माà¤\9dà¥\8dया à¤ªà¤¸à¤\82तà¥\80',
+'preferences' => 'पसà¤\82तà¥\80à¤\95à¥\8dरम',
 'mypreferences' => 'पसंतीक्रम',
 'prefs-edits' => 'संपादनांची संख्या:',
-'prefsnologin' => 'प्रवेश केलेला नाही',
 'changepassword' => 'परवलीचा शब्द बदला',
 'prefs-skin' => 'त्वचा',
 'skin-preview' => 'झलक',
@@ -1422,13 +1424,13 @@ $1",
 'prefs-user-pages' => 'सदस्य पान',
 'prefs-personal' => 'सदस्य व्यक्तिरेखा',
 'prefs-rc' => 'अलीकडील बदल',
-'prefs-watchlist' => 'नितà¥\8dय à¤ªà¤¹à¤¾à¤£à¥\8dयाà¤\9aà¥\80 सूची',
-'prefs-watchlist-days' => 'पहाऱà¥\8dयाà¤\9aà¥\8dया सूचीमध्ये दिसणाऱ्या दिवसांची संख्या:',
+'prefs-watchlist' => 'निरà¥\80à¤\95à¥\8dषणसूची',
+'prefs-watchlist-days' => 'निरà¥\80à¤\95à¥\8dषणसूचीमध्ये दिसणाऱ्या दिवसांची संख्या:',
 'prefs-watchlist-days-max' => 'जास्तीत जास्त $1 {{PLURAL:$1|दिवस|दिवस}}',
-'prefs-watchlist-edits' => 'वाढà¥\80व à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\8dया सूचीमध्ये दिसणाऱ्या संपादनांची संख्या:',
+'prefs-watchlist-edits' => 'वाढà¥\80व à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषणसूचीमध्ये दिसणाऱ्या संपादनांची संख्या:',
 'prefs-watchlist-edits-max' => 'अधिकतम अंक:  १०००.',
-'prefs-watchlist-token' => 'पहाऱà¥\8dयाà¤\9aà¥\8dया सूचीचा बिल्ला:',
-'prefs-misc' => 'à¤\87तर',
+'prefs-watchlist-token' => 'निरà¥\80à¤\95à¥\8dषणसूचीचा बिल्ला:',
+'prefs-misc' => 'à¤\95िरà¤\95à¥\8bळ',
 'prefs-resetpass' => 'परवलीचा शब्द बदला.',
 'prefs-changeemail' => 'विपत्रपत्ता बदला',
 'prefs-setemail' => 'तुमचा ई-मेल पत्ता लिहा.',
@@ -1445,9 +1447,9 @@ $1",
 'stub-threshold' => '<a href="#" class="stub">अंकुरीत दुव्यांच्या</a> रचनेची नांदी (बाईट्स):',
 'stub-threshold-disabled' => 'अक्षम केले',
 'recentchangesdays' => 'अलीकडील बदल मधील दाखवावयाचे दिवस:',
-'recentchangesdays-max' => 'जास्तीतजास्त $1 {{PLURAL:$1|दिवस|दिवस}}',
-'recentchangescount' => 'à¤\85लà¥\80à¤\95डà¥\80ल à¤¬à¤¦à¤², à¤\87तिहास à¤µ à¤¨à¥\8bà¤\82द à¤ªà¤¾à¤¨à¤¾à¤\82मधà¥\8dयà¥\87 à¤¦à¤¾à¤\96वायाच्या संपादनांची संख्या:',
-'prefs-help-recentchangescount' => 'यात à¤¨à¥\81à¤\95तà¥\87à¤\9a à¤\9dालà¥\87लà¥\87 à¤¬à¤¦à¤², à¤ªà¤¾à¤¨à¤¾à¤\82à¤\9aà¥\87 à¤\87तिहास à¤µ à¤¯à¤¾à¤¦à¥\8dया या गोष्टी असतात.',
+'recentchangesdays-max' => 'जास्तीतजास्त $1 {{PLURAL:$1|दिवस}}',
+'recentchangescount' => 'à¤\85विà¤\9aलरितà¥\8dया à¤¦à¤¾à¤\96वावयाच्या संपादनांची संख्या:',
+'prefs-help-recentchangescount' => 'यात à¤¨à¥\81à¤\95तà¥\87à¤\9a à¤\9dालà¥\87लà¥\87 à¤¬à¤¦à¤², à¤ªà¤¾à¤¨à¤¾à¤\82à¤\9aà¥\87 à¤\87तिहास à¤µ à¤¨à¥\8bà¤\82दà¥\80 या गोष्टी असतात.',
 'prefs-help-watchlist-token2' => "ही आपल्या निरिक्षणसूचीच्या 'वेब फिड'ची गुप्त चाबी आहे.ज्या कोणास त्याची माहिती होईल तो आपली निरिक्षणसूची बघू शकेल,म्हणुन कोणास यात सहभागी करून घेउ नका.[[Special:ResetTokens|पुनर्स्थापनाची आपणास गरज असल्यास येथे टिचकी द्या]].",
 'savedprefs' => 'तुमच्या पसंती जतन केल्या आहेत.',
 'timezonelegend' => 'वेळक्षेत्र',
@@ -1476,7 +1478,7 @@ $1",
 'prefs-custom-css' => 'सीएसएस पद्धत बदला',
 'prefs-custom-js' => 'जावास्क्रिप्ट पद्धत बदला',
 'prefs-common-css-js' => 'मिळून वापरलेले सर्व त्वचांसाठींचे सीएसएस / जावास्क्रिप्ट:',
-'prefs-reset-intro' => 'à¤\86पन à¤¦à¥\8dदà¥\80लà¥\87लà¥\87 à¤¸à¤°à¥\8dव à¤ªà¥\8dरà¥\80फà¥\8dरà¥\8dनà¥\8dसà¥\87सà¥\8d à¤µà¤ªà¤°à¥\8dनà¥\8dयासथि à¤¤à¥\81मà¥\8dहà¥\80 à¤¹à¥\87 à¤ªà¥\87à¤\9cà¥\8d à¤µà¤¾à¤ªरू शकता.',
+'prefs-reset-intro' => 'à¤\86पण à¤¯à¤¾ à¤ªà¤¾à¤¨à¤¾à¤\9aा à¤µà¤¾à¤ªà¤°, à¤¯à¤¾ à¤¸à¤\82à¤\95à¥\87तसà¥\8dथळà¤\9aà¥\8dया à¤\85विà¤\9aलनà¥\81सार, à¤\86पला à¤ªà¤¸à¤\82तà¥\80à¤\95à¥\8dरम à¤ªà¥\81नरà¥\8dसà¥\8dथापनà¥\87साठà¥\80 à¤\95रू शकता.',
 'prefs-emailconfirm-label' => 'विपत्र निश्चितीकरण:',
 'youremail' => 'विपत्र:',
 'username' => '{{GENDER:$1|सदस्यनाम}}:',
@@ -1505,7 +1507,7 @@ $1",
 'prefs-info' => 'मूलभूत माहिती',
 'prefs-i18n' => 'आंतरराष्ट्रीयीकरण',
 'prefs-signature' => 'स्वाक्षरी',
-'prefs-dateformat' => 'तारà¥\80à¤\96 à¤°à¤\9aना',
+'prefs-dateformat' => 'दिनाà¤\82à¤\95 à¤ªà¥\8dरारà¥\81पण',
 'prefs-timeoffset' => 'वेळ बरोबरी',
 'prefs-advancedediting' => 'सर्वसामान्य पर्याय',
 'prefs-editor' => 'संपादक',
@@ -1592,7 +1594,7 @@ $1",
 'right-upload_by_url' => 'एखाद्या URL वरील संचिकेचे अपभारण करा',
 'right-purge' => 'एखाद्या पानाची सय रिकामी करा',
 'right-autoconfirmed' => 'आयपी आधारित दर-मर्यादेचा प्रभाव पडु देऊ नका.',
-'right-bot' => 'सà¥\8dवयà¤\82à¤\9aलित à¤\95ारà¥\8dयाप्रमाणे वागणूक मिळवा',
+'right-bot' => 'सà¥\8dवयà¤\82à¤\9aलित à¤ªà¥\8dरणालà¥\80प्रमाणे वागणूक मिळवा',
 'right-nominornewtalk' => 'चर्चा पृष्ठावर छोटी संपादने जी नवीन चर्चा दर्शवितात ती नकोत',
 'right-apihighlimits' => 'API पृच्छांमध्ये उच्चतर मर्यादा वापरा',
 'right-writeapi' => 'लेखन एपीआय चा उपयोग',
@@ -1615,7 +1617,7 @@ $1",
 'right-protect' => 'सुरक्षा पातळी बदलवा व निपात-प्रतिबंधित पानांचे संपादन करा',
 'right-editprotected' => ' "{{int:protect-level-sysop}}"म्हणून नमुद केलेली सुरक्षित पाने संपादा',
 'right-editsemiprotected' => '"{{int:protect-level-autoconfirmed}}" म्हणून नमुद केलेली सुरक्षित पाने संपादा',
-'right-editinterface' => 'सदस्य पसंती बदला',
+'right-editinterface' => 'सदस्य पसंतीक्रम बदला',
 'right-editusercssjs' => 'इतर सदस्यांच्या CSS व JS संचिका संपादित करा',
 'right-editusercss' => 'इतर सदस्यांच्या CSS संचिका संपादित करा',
 'right-edituserjs' => 'इतर सदस्यांच्या JS संचिका संपादित करा',
@@ -1705,6 +1707,7 @@ $1",
 'recentchanges-label-minor' => 'हे एक किरकोळ संपादन आहे',
 'recentchanges-label-bot' => 'हे संपादन एका सांगकाम्याकडून केले गेले आहे',
 'recentchanges-label-unpatrolled' => 'हे संपादन अजून तपासल्या गेले नाही',
+'recentchanges-legend-newpage' => '$1 - नवीन पान',
 'rcnote' => "खाली $4, $5 पर्यंतचे गेल्या {{PLURAL:$2|'''१''' दिवसातील|'''$2''' दिवसांतील}} {{PLURAL:$1|शेवटचा '''1''' बदल|शेवटचे '''$1''' बदल}} दिलेले आहेत.",
 'rcnotefrom' => "खाली <b>$2</b> पासूनचे ('''$1''' पर्यंत) बदल दाखविले आहेत.",
 'rclistfrom' => '$1 नंतर केले गेलेले बदल दाखवा.',
@@ -4089,4 +4092,20 @@ $5
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|बाइट|बाइट्स}}',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|बाइट|बाइट्स}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'साचे वाढवा',
+'expand_templates_intro' => 'हे पान काही मजकूर घेऊन त्यातिल सर्व साचे वाढविते. तसेच हे पान पार्सर फंक्शन्स जसे की
+<nowiki>{{</nowiki>#language:...}}, व बदलणार्‍या किमती (variables) जसे की
+<nowiki>{{</nowiki>CURRENTDAY}}&mdash;म्हणजेच दोन ब्रेसेसमधील सर्व मजकूर वाढविते.
+मीडियाविकिमधून पार्सर स्टेज मागवून हे केले जाते.',
+'expand_templates_title' => '{{FULLPAGENAME}} वगैरे करीता, कन्टेक्स्ट शीर्षक:',
+'expand_templates_input' => 'इनपुट मजकूर:',
+'expand_templates_output' => 'निकाल',
+'expand_templates_xml_output' => 'XML चे आऊटपुट',
+'expand_templates_ok' => 'ठिक आहे',
+'expand_templates_remove_comments' => 'शेरा हटवा',
+'expand_templates_remove_nowiki' => 'निकालात <nowiki>खूणपतका दाखवू नका',
+'expand_templates_generate_xml' => 'XML चा पार्स (parse) वृक्ष दाखवा',
+'expand_templates_preview' => 'झलक',
+
 );
index e932cfc..817ddd3 100644 (file)
@@ -111,7 +111,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Laman_lapuk' ),
        'Blankpage'                 => array( 'Laman_kosong' ),
        'Block'                     => array( 'Sekat_IP' ),
-       'Blockme'                   => array( 'Sekat_saya' ),
        'Booksources'               => array( 'Sumber_buku' ),
        'BrokenRedirects'           => array( 'Lencongan_rosak', 'Pelencongan_rosak' ),
        'Categories'                => array( 'Kategori' ),
@@ -123,9 +122,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Buka_akaun' ),
        'Deadendpages'              => array( 'Laman_buntu' ),
        'DeletedContributions'      => array( 'Sumbangan_dihapuskan' ),
-       'Disambiguations'           => array( 'Penyahtaksaan', 'Nyahkekaburan' ),
        'DoubleRedirects'           => array( 'Lencongan_berganda', 'Pelencongan_berganda' ),
        'Emailuser'                 => array( 'E-mel_pengguna' ),
+       'ExpandTemplates'           => array( 'Kembangkan_templat' ),
        'Export'                    => array( 'Eksport' ),
        'Fewestrevisions'           => array( 'Semakan_tersikit' ),
        'FileDuplicateSearch'       => array( 'Cari_fail_berganda' ),
@@ -474,8 +473,6 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Diambil daripada "$1"',
 'youhavenewmessages' => 'Anda mempunyai $1 ($2).',
-'newmessageslink' => 'pesanan baru',
-'newmessagesdifflink' => 'perubahan terakhir',
 'youhavenewmessagesfromusers' => 'Anda menerima $1 daripada {{PLURAL:$3|seorang|$3 orang}} pengguna lain ($2).',
 'youhavenewmessagesmanyusers' => 'Anda menerima $1 daripada ramai pengguna ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|pesanan|pesanan-pesanan}} baru',
@@ -1314,7 +1311,6 @@ Cuba berikan awalan ''all:'' untuk mencari semua kandungan (termasuk laman perbi
 'preferences' => 'Keutamaan',
 'mypreferences' => 'Keutamaan',
 'prefs-edits' => 'Jumlah suntingan:',
-'prefsnologin' => 'Belum log masuk',
 'changepassword' => 'Tukar kata laluan',
 'prefs-skin' => 'Rupa',
 'skin-preview' => 'Pralihat',
@@ -1612,6 +1608,7 @@ Tindakan ini tidak boleh dibatalkan.',
 'recentchanges-label-minor' => 'Ini ialah suntingan kecil',
 'recentchanges-label-bot' => 'Suntingan ini dilakukan oleh bot',
 'recentchanges-label-unpatrolled' => 'Suntingan ini belum dirondai',
+'recentchanges-legend-newpage' => '$1 - laman baru',
 'rcnote' => "Yang berikut ialah '''$1''' perubahan terakhir sejak '''$2''' hari yang lalu sehingga $5, $4.",
 'rcnotefrom' => 'Yang berikut ialah semua perubahan sejak <b>$2</b> (sehingga <b>$1</b>).',
 'rclistfrom' => 'Papar perubahan sejak $1',
@@ -4063,4 +4060,21 @@ Ataupun, anda boleh menggunakan borang yang mudah di bawah. Ulasan anda akan dic
 'limitreport-expansiondepth' => 'Kedalaman peluasan terjauh',
 'limitreport-expensivefunctioncount' => 'Kiraan fungsi penghurai muatan tinggi',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Kembangkan templat',
+'expand_templates_intro' => 'Halaman khas ini mengambil teks dan mengembangkan semua templat di dalamnya secara rekursif.
+Ia juga mengembangkan fungsi-fungsi penghurai seperti
+<code><nowiki>{{</nowiki>#language:…}}</code>, dan pembolehubah-pembolehubah seperti
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Sebenarnya, ia mengembangkan segalanya dalam tanda kurung panah berganda.',
+'expand_templates_title' => 'Tajuk konteks, untuk {{FULLPAGENAME}} dan sebagainya:',
+'expand_templates_input' => 'Teks input:',
+'expand_templates_output' => 'Hasil',
+'expand_templates_xml_output' => 'Output XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Buang ulasan',
+'expand_templates_remove_nowiki' => 'Sekat tag <nowiki> dalam hasil',
+'expand_templates_generate_xml' => 'Papar pepohon hurai XML',
+'expand_templates_preview' => 'Pralihat',
+
 );
index d034f5f..b8d1705 100644 (file)
@@ -56,7 +56,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'TitluĦażin' ),
        'Blankpage'                 => array( 'PaġnaVojta' ),
        'Block'                     => array( 'BlokkaIP' ),
-       'Blockme'                   => array( 'Imblukkani' ),
        'Booksources'               => array( 'SorsiKotba' ),
        'BrokenRedirects'           => array( 'RindirizziMiksura' ),
        'Categories'                => array( 'Kategoriji' ),
@@ -67,9 +66,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'OħloqKont' ),
        'Deadendpages'              => array( 'PaġniWieqfa' ),
        'DeletedContributions'      => array( 'KontribuzzjonijietImħassra' ),
-       'Disambiguations'           => array( 'Diżambigwazzjoni' ),
        'DoubleRedirects'           => array( 'RindirizziDoppji' ),
        'Emailuser'                 => array( 'IbgħatUtent' ),
+       'ExpandTemplates'           => array( 'EspandiMudelli' ),
        'Export'                    => array( 'Esporta' ),
        'Fewestrevisions'           => array( 'L-InqasReviżjonijiet' ),
        'FileDuplicateSearch'       => array( 'FittexFajlDuplikat' ),
@@ -546,8 +545,6 @@ $1",
 'ok' => 'OK',
 'retrievedfrom' => 'Miġjub minn "$1"',
 'youhavenewmessages' => 'Għandek $1 ($2).',
-'newmessageslink' => 'messaġġi ġodda',
-'newmessagesdifflink' => 'l-aħħar bidla',
 'youhavenewmessagesmanyusers' => 'Għandek $1 mingħand ħafna utenti ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|messaġġ ġdid|messaġġi ġodda}}',
 'newmessagesdifflinkplural' => 'l-aħħar {{PLURAL:$1|bidla|bidliet}}',
@@ -1318,7 +1315,6 @@ Innota però li l-werreja tal-kontenut ta' {{SITENAME}} f'dawn is-siti, jistgħu
 'preferences' => 'Preferenzi',
 'mypreferences' => 'Preferenzi',
 'prefs-edits' => "Numru ta' modifiki:",
-'prefsnologin' => 'Għadek ma dħaltx ġewwa',
 'changepassword' => 'Ibdel il-password',
 'prefs-skin' => 'Aspett grafiku (skin)',
 'skin-preview' => 'dehra proviżorja',
@@ -1590,6 +1586,7 @@ Innota però li l-werreja tal-kontenut ta' {{SITENAME}} f'dawn is-siti, jistgħu
 'recentchanges-label-minor' => 'Din hi modifika minuri',
 'recentchanges-label-bot' => 'Din il-modifika ġiet effettwata minn bot',
 'recentchanges-label-unpatrolled' => 'Din il-modifika għadha ma ġietx verifikata',
+'recentchanges-legend-newpage' => '$1 - paġna ġdida',
 'rcnote' => "Hawn taħt {{PLURAL:$1|tinsab l-aktar modifika riċenti|jinsabu l-'''$1''' modifiki riċenti}} għas-sit fl-aħħar {{PLURAL:$2|24 siegħa|'''$2''' ġranet}}, id-dati ġew aġġornati fil-$5 ta' $4.",
 'rcnotefrom' => "Ħawn taħt jinsabu l-modifiki minn '''$2''' (sa '''$1''').",
 'rclistfrom' => 'Uri l-modifiki ġodda jibdew minn $1',
@@ -3841,4 +3838,21 @@ Flimkien ma' dan il-programm suppost kellek tirċievi [{{SERVER}}{{SCRIPTPATH}}/
 'duration-centuries' => '$1 {{PLURAL:$1|seklu|sekli}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennju|millennji}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Espandi l-mudelli',
+'expand_templates_intro' => "!Din il-paġna speċjali tieħu test u tkabbar il-mudelli kollha preżenti.
+Barra minn hekk, din tikkalkola r-riżultat tal-funzjonijiet ''parser'' bħal
+<code><nowiki>{{</nowiki>#language:…}}</code>, u varjabbli bħal
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Fil-fatt, din tespandi kważi dak kollu bejn żewġ parentesi.",
+'expand_templates_title' => 'Kuntest (għal {{FULLPAGENAME}} etċ.):',
+'expand_templates_input' => "Test ta' ''input'':",
+'expand_templates_output' => 'Riżultat',
+'expand_templates_xml_output' => "Riżultat f'format XML",
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Neħħi l-kummenti',
+'expand_templates_remove_nowiki' => "Ħassar it-''tags'' <nowiki> fir-riżultat",
+'expand_templates_generate_xml' => 'Uri siġra sintattika XML',
+'expand_templates_preview' => 'Dehra proviżorja',
+
 );
index d2284fc..a7a7ce7 100644 (file)
@@ -288,8 +288,6 @@ $messages = array(
 'ok' => 'OK',
 'retrievedfrom' => 'Sacado an "$1"',
 'youhavenewmessages' => 'Tu tenes $1 ($2).',
-'newmessageslink' => 'nuobas mensaiges',
-'newmessagesdifflink' => 'redadeira altaraçon',
 'youhavenewmessagesmulti' => 'Tenes nuobas mensaiges an $1',
 'editsection' => 'eiditar',
 'editold' => 'eiditar',
@@ -653,6 +651,7 @@ Causo l çponiblizes, este será outelizado pa te dar crédito pul tou trabalho.
 'recentchanges' => 'Redadeiras altaraçones',
 'recentchanges-legend' => 'Oupçones de las redadeiras altaraçones',
 'recentchanges-feed-description' => 'Acumpanha las redadeiras altaraçones de l biqui por esta semiente.',
+'recentchanges-legend-newpage' => '$1 - nuoba páigina',
 'rcnote' => "A seguir {{PLURAL:$1|stá listada '''ua''' altaraçon feita|stan '''$1''' altaraçones feitas}} {{PLURAL:$2|ne l redadeiro die|ne ls redadeiros '''$2''' dies}}, a partir de las $5 de $4.",
 'rcnotefrom' => 'Alteraçones feitas zde <b>$2</b> (amostradas até <b>$1</b>).',
 'rclistfrom' => 'Amostrar las noubas altaraçones a partir de $1',
index df5b28e..a5c791a 100644 (file)
@@ -325,8 +325,6 @@ $1',
 'ok' => 'အိုကေ',
 'retrievedfrom' => '"$1" မှ ရယူရန်',
 'youhavenewmessages' => 'သင့်တွင် $1 ($2) ရှိသည်။',
-'newmessageslink' => 'မက်ဆေ့ အသစ်',
-'newmessagesdifflink' => 'နောက်ဆုံးအပြောင်းအလဲ',
 'youhavenewmessagesmulti' => '$1 မှာ မက်ဆေ့အသစ်များ ရှိသည်',
 'editsection' => 'ပြင်​ဆင်​ရန်​',
 'editold' => 'ပြင်​ဆင်​ရန်​',
@@ -735,7 +733,6 @@ Try prefixing your query with ''all:'' to search all content (including talk pag
 'preferences' => '​ရွေး​ချယ်​စ​ရာ​များ​',
 'mypreferences' => '​ရွေး​ချယ်​စ​ရာ​များ​',
 'prefs-edits' => 'တည်းဖြတ်မှုအရေအတွက် -',
-'prefsnologin' => 'logged in ဝင်မထားပါ',
 'changepassword' => 'စကားဝှက် ပြောင်းရန်',
 'prefs-skin' => 'အသွင်အပြင်',
 'skin-preview' => 'နမူနာ',
index b42e051..4cffa42 100644 (file)
@@ -49,7 +49,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'ТюштяПингеньЛопат' ),
        'Blankpage'                 => array( 'ЧавоЛопа' ),
        'Block'                     => array( 'СаймасСаемсIP' ),
-       'Blockme'                   => array( 'СаймасСаемизь' ),
        'Booksources'               => array( 'КнигаЛисьмапрят' ),
        'BrokenRedirects'           => array( 'СинденьЛиявНевтемат' ),
        'Categories'                => array( 'Категорият' ),
@@ -58,6 +57,7 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'ТеемсШкамсСовамоТарка' ),
        'Deadendpages'              => array( 'ЛисемаСюлмавомаПевтемеЛопат' ),
        'DoubleRedirects'           => array( 'КавтоньКирданьЛиявНевтемат' ),
+       'ExpandTemplates'           => array( 'ПоладомсЛопаПарцунт' ),
        'Export'                    => array( 'Экспортировамс' ),
        'Fewestrevisions'           => array( 'ВесемедеАламокстьЛиякстомтозь' ),
        'Filepath'                  => array( 'ФайланьКи' ),
@@ -152,7 +152,7 @@ $magicWords = array(
        'img_center'                => array( '1', 'куншкасо', 'центр', 'center', 'centre' ),
        'img_framed'                => array( '1', 'кундсо', 'обрамить', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'кундовтомо', 'безрамки', 'frameless' ),
-       'img_page'                  => array( '1', 'лопа=$1', 'лопа $1', 'страница=$1', 'страница $1', 'страница $1', 'page=$1', 'page $1' ),
+       'img_page'                  => array( '1', 'лопа=$1', 'лопа_$1', 'страница=$1', 'страница_$1', 'страница $1', 'page=$1', 'page $1' ),
        'img_top'                   => array( '1', 'верькс', 'сверху', 'top' ),
        'img_text_top'              => array( '1', 'текст-верькс', 'текст-сверху', 'text-top' ),
        'img_middle'                => array( '1', 'куншка', 'посередине', 'middle' ),
@@ -193,13 +193,13 @@ $messages = array(
 'tog-hidepatrolled' => 'Кекшемс лувонь кирдиень витнеметнень-петнематнень чыяконь полавтнематнестэ',
 'tog-newpageshidepatrolled' => 'Кекшемс лувонь кирдиень ванстома лопатнень од лопань керьксэнть эйстэ',
 'tog-extendwatchlist' => 'Келейгавтомс сёрмадовксонь мельга ваномань сёрмалевксэнть невтевест весе полавтнематне, аволь ансяк чыеньсетне.',
-'tog-usenewrc' => 'Ð\9fÑ\83Ñ\80намÑ\81 Ð»Ð¸Ñ\8fкÑ\81Ñ\82омÑ\82омаÑ\82 Ð»Ð¾Ð¿Ð°Ð½Ñ\8c ÐºÐ¾Ñ\80Ñ\8fÑ\81 ÐºÑ\83Ñ\80онÑ\8c-кÑ\83Ñ\80онÑ\8c Ñ\87иенÑ\8c Ð¿Ð¾Ð»Ð°Ð²Ñ\82немаÑ\82неÑ\81Ñ\8d-ванома Ð»ÐµÐ¼Ñ\80иÑ\81Ñ\8cмеÑ\82неÑ\81Ñ\8d  (веÑ\88и JavaScript)',
-'tog-numberheadings' => 'Сёрмадовкс коняксос кадык сынсь ловома валтнэ путовить',
-'tog-showtoolbar' => 'Ð\9aедÑ\8cÑ\91нкÑ\81 Ð»Ð°Ð·Ð½Ñ\8dнÑ\82Ñ\8c Ð½ÐµÐ²Ñ\82емÑ\81 Ñ\81Ñ\91Ñ\80мадома Ñ\88каÑ\81Ñ\82о (JavaScript)',
-'tog-editondblclick' => 'Кавксть лепштязь совамс сёрмадовксонь витнеме-петнеме (JavaScript)',
+'tog-usenewrc' => 'Ð\9fÑ\83Ñ\80намÑ\81 Ð»Ð¸Ñ\8fкÑ\81Ñ\82омÑ\82омаÑ\82 Ð»Ð¾Ð¿Ð°Ð½Ñ\8c ÐºÐ¾Ñ\80Ñ\8fÑ\81 ÐºÑ\83Ñ\80онÑ\8c-кÑ\83Ñ\80онÑ\8c Ñ\87иенÑ\8c Ð¿Ð¾Ð»Ð°Ð²Ñ\82немаÑ\82неÑ\81Ñ\82Ñ\8d-ванома Ð»ÐµÐ¼Ñ\80иÑ\81Ñ\8cмеÑ\82неÑ\81Ñ\82Ñ\8d',
+'tog-numberheadings' => 'Сёрмадовксконяксос кадык сынсь ловома валтнэ путовить',
+'tog-showtoolbar' => 'Ð\9dевÑ\82емÑ\81 ÐºÐµÐ´Ñ\8cÑ\91нкÑ\81лазнÑ\8dнÑ\82Ñ\8c Ñ\81Ñ\91Ñ\80мадома Ñ\88каÑ\81Ñ\82о',
+'tog-editondblclick' => 'Кавксть лепштязь совамс сёрмадовксонь витнеме-петнеме',
 'tog-editsection' => 'Невтемс сюлмавома пенть «витемс» эрьва секциянтень-пельксэнтень',
-'tog-editsectiononrightclick' => 'Витнемс секциятнень-пелькстнэнь, лепштямс сёрмадовксонть лемензэ лангс чэерень витьёнсе повнэсэ  (JavaScript)',
-'tog-showtoc' => 'Невтемс сёрмадовкс потмокс (лопатненень, конатнесэ 3-до ламо сёрмадовкст)',
+'tog-editsectiononrightclick' => 'Витнемс секциятнень-пелькстнэнь, лепштямс сёрмадовксонть лемензэ лангс чеерень витьёнсе повнесэ',
+'tog-showtoc' => 'Невтемс сёрмадовкспотмокс (лопатненень, конатнесэ 3-до ламо сёрмадовкст)',
 'tog-rememberpassword' => 'Ледстемс совамо валом те бравзерсэнть (сех кувать $1 {{PLURAL:$1|чи|чить}})',
 'tog-watchcreations' => 'Совавтомс ванома лемрисьмезэнь монь теевть лопатнень ды сень, мезе йовкстан',
 'tog-watchdefault' => 'Совавтомс монь витевть лопатнень ванома лемрисьмезэнь',
@@ -216,7 +216,7 @@ $messages = array(
 'tog-shownumberswatching' => 'Невтемс зяро теицятнеде, конат аравтызь лопанть эсест ванома лемрисьментень',
 'tog-oldsig' => 'Уликс кедьпутовксось:',
 'tog-fancysig' => 'Лемпутовксось прок викитекст (сонсь теевиця сюлмавома певтеме)',
-'tog-uselivepreview' => 'Максомс эряй васнянь невтевкс (JavaScript) (Варчамонь)',
+'tog-uselivepreview' => 'Максомс эриця васнянь невтевкс (варчамонь сон)',
 'tog-forceeditsummary' => 'Невтик монень, мезе сёрмадомс витнемадо-петнемадо ёвтамонь вальминентень',
 'tog-watchlisthideown' => 'Кекшить монь теевть витневкстнэнь ванома лемрисьменть эйстэ',
 'tog-watchlisthidebots' => 'Кекшить бот витневкстнэнь-петневкстнэнь ванома лемрисьсенть эйстэ',
@@ -290,6 +290,18 @@ $messages = array(
 'oct' => 'Ожо',
 'nov' => 'Сун',
 'dec' => 'Аца',
+'january-date' => 'Якшамков $1',
+'february-date' => 'Даволков $1',
+'march-date' => 'Эйзюрков $1',
+'april-date' => 'Чадыков $1',
+'may-date' => 'Панжиков $1',
+'june-date' => 'Аштемков $1',
+'july-date' => 'Медьков $1',
+'august-date' => 'Умарьков $1',
+'september-date' => 'Таштамков $1',
+'october-date' => 'Ожоков $1',
+'november-date' => 'Сундерьков $1',
+'december-date' => 'Ацамков $1',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Категория|Категорият}}',
@@ -315,6 +327,7 @@ $messages = array(
 'newwindow' => '(панжови од вальмасо)',
 'cancel' => 'Саемс мекев',
 'moredotdotdot' => 'Седе ламо...',
+'morenotlisted' => 'Те лемрисьмесь апак прядо.',
 'mypage' => 'Монь лопам',
 'mytalk' => 'Кортнемам',
 'anontalk' => 'Кортамс те IP-нть марто',
@@ -368,7 +381,9 @@ $messages = array(
 'create-this-page' => 'Теик-шкик те лопанть',
 'delete' => 'Нардамс',
 'deletethispage' => 'Нардамс те лопанть',
+'undeletethispage' => 'Вельмевтемс мекев те лопанть',
 'undelete_short' => 'Велявтомс нардазенть {{PLURAL:$1|вейке витнема-петнема|$1 витнемат-петнемат}}',
+'viewdeleted_short' => 'Ваномс {{PLURAL:$1|нардазь вейке витнема-петнема|нардазь $1 витнемат-петнемат}}',
 'protect' => 'Аравтомс прянь ванстомас',
 'protect_change' => 'полавтомс',
 'protectthispage' => 'Аравтомс те лопанть ванстомас',
@@ -383,7 +398,7 @@ $messages = array(
 'articlepage' => 'Ваномс потмокслопанть',
 'talk' => 'Кортнеме',
 'views' => 'Ваномкат',
-'toolbox' => 'Кедьёнкс парго',
+'toolbox' => 'Кедьёнкст',
 'userpage' => 'Ваномонзо кирдицянть лопанзо',
 'projectpage' => 'Ваномонзо проектенть лопанть',
 'imagepage' => 'Ваномс файлань лопанть',
@@ -400,13 +415,18 @@ $messages = array(
 'protectedpage' => 'Те лопась ванстомасо',
 'jumpto' => 'Тёкадемс тей:',
 'jumptonavigation' => 'Новигациясь-лездамось',
-'jumptosearch' => 'вешнэме',
+'jumptosearch' => 'вешнеме',
+'view-pool-error' => 'Кежеть иляст са, сервертнень виест а сатыть ней.
+Пекень пек ламо теицят стараить ваномс те лопанть.
+Учокая аламос, мейле одов варчасак тезэнь совамонть.
+$1',
+'pool-queuefull' => 'Процесспулось пешксе',
 'pool-errorunknown' => 'Апак содань ильведькс',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => '{{SITENAME}} ланга',
 'aboutpage' => 'Project:Эстэдензэ',
-'copyright' => '$1-сто муят мезе тесэ.',
+'copyright' => '$1-сто муят мезе тесэ, бути лиякс апак ёвта.',
 'copyrightpage' => '{{ns:project}}:Ломанень видечинзэ',
 'currentevents' => 'Мезе ней моли',
 'currentevents-url' => 'Project:Мезе ней моли',
@@ -414,16 +434,17 @@ $messages = array(
 'disclaimerpage' => 'Project:Видечинь прякс кортнема',
 'edithelp' => 'Витнемань-петнемань лезкс',
 'helppage' => 'Help:Лопась мезе кирди',
-'mainpage' => 'Ð\9fÑ\80Ñ\8fкÑ\81лопа',
-'mainpage-description' => 'Ð\9fÑ\80Ñ\8fкÑ\81лопа',
+'mainpage' => 'Ð\9fÑ\80Ñ\8fвÑ\82лопа',
+'mainpage-description' => 'Ð\9fÑ\80Ñ\8fвÑ\82лопа',
 'policy-url' => 'Project:Политика',
 'portal' => 'Велень-сядонь вальма',
-'portal-url' => 'Project:Ð\92ейÑ\82Ñ\8cÑ\81Ñ\8dнÑ\8c Ð²Ð°Ð»Ñ\8cма',
+'portal-url' => 'Project:Вейсэнь вальма',
 'privacy' => 'Салавачинь политикась',
 'privacypage' => 'Project:Салавачинь политикась',
 
 'badaccess' => 'Меревемань асатыкс',
 'badaccess-group0' => 'Тонеть а мерить теемс мезе вешить.',
+'badaccess-groups' => 'Тевтеемась, конань вешить, тееви ансяк «$1» {{PLURAL:$2|куронь|куротнень}} теицятненень.',
 
 'versionrequired' => 'МедияВикинь $1 версиясь эряви',
 'versionrequiredtext' => 'МедияВикинь $1 версиясь эряви те лопанть тевс нолдамга.
@@ -432,8 +453,6 @@ $messages = array(
 'ok' => 'Маштови',
 'retrievedfrom' => 'Лисмапрясь "$1"-сто',
 'youhavenewmessages' => 'Тонеть сась $1 ($2).',
-'newmessageslink' => 'Од пачтямнэть',
-'newmessagesdifflink' => 'меельсе полавтома',
 'youhavenewmessagesmulti' => 'Од сёрминеть учить эйсэть $1-со',
 'editsection' => 'витнеме-петнеме',
 'editold' => 'витнеме-петнеме',
@@ -478,6 +497,7 @@ $messages = array(
 # General errors
 'error' => 'Ильведькс',
 'databaseerror' => 'Датабазань ильведькс',
+'databaseerror-error' => 'Ильведькс: $1',
 'laggedslavemode' => 'Ванок: Кизды, лопасонть материалось таштомсь.',
 'readonly' => 'Датабазась панжома экшсэ',
 'enterlockreason' => 'Сёрмадт мейс сёлгамс эряви, ды ёвтак, зярдо таго арьсят панжови',
@@ -523,9 +543,18 @@ $messages = array(
 # Login and logout pages
 'welcomeuser' => 'Совак, $1, инеськеть!',
 'yourname' => 'Теицянь лем:',
+'userlogin-yourname' => 'Совамовал',
+'userlogin-yourname-ph' => 'Совавтык совамовалот',
 'yourpassword' => 'Салава валот:',
+'userlogin-yourpassword' => 'салававал',
+'userlogin-yourpassword-ph' => 'Совавтык салававалот',
+'createacct-yourpassword-ph' => 'Совавтык салававал',
 'yourpasswordagain' => 'Омбоцеде сёрмадык кирдицянь леметь:',
+'createacct-yourpasswordagain' => 'Кемекстык салававалонть',
+'createacct-yourpasswordagain-ph' => 'Совавтык салававалонть одов',
 'remembermypassword' => 'Ледстемс совамом те бравзерсэнть (сех кувать $1 {{PLURAL:$1|чи|чить}})',
+'userlogin-remembermypassword' => 'Кирдемизь совавтозекс',
+'userlogin-signwithsecure' => 'Нолдак тевс ванстозь сюлмавкс',
 'yourdomainname' => 'Эсеть доменэть:',
 'password-change-forbidden' => 'Те викисэнть а полавтсак салававалот.',
 'login' => 'Совамо',
@@ -536,14 +565,23 @@ $messages = array(
 'logout' => 'Лисеме',
 'userlogout' => 'Лисеме',
 'notloggedin' => 'Апак соваво',
+'userlogin-noaccount' => 'Совамотаркат арась?',
+'userlogin-joinproject' => 'Совак «{{SITENAME}}» сайтэнь теицякс',
 'nologin' => "Совамотаркат арась? '''$1'''.",
 'nologinlink' => 'Тейть совамотарка',
 'createaccount' => 'Теемс теицянь од лопа',
 'gotaccount' => "Совамотаркат ули? '''$1'''.",
 'gotaccountlink' => 'Совамс',
 'userlogin-resetlink' => 'Совамо эрявикстнэнь стувтыть?',
-'createaccountmail' => 'Тейть кодамо понгсь салавань вал, кучик сонзэ ало максозь е-сёрмапаргонтень',
+'userlogin-resetpassword-link' => 'Салававалот стувтовсь?',
+'userlogin-createanother' => 'Шкак од совамотарка',
+'createaccountmail' => 'Тейть кодамо понгсь салававал, кучик сонзэ ало максозь е-сёрмапаргонтень',
 'createaccountreason' => 'Тувталось:',
+'createacct-reason' => 'Тувтал',
+'createacct-submit' => 'Шкик совамотаркат',
+'createacct-another-submit' => 'Шкак од совамотарка',
+'createacct-benefit-heading' => '«{{SITENAME}}» сайтэнть теизь тонь кондямо ломанть.',
+'createacct-benefit-body2' => '{{PLURAL:$1|лопа|лопат}}',
 'badretype' => 'Сёрмадыть салава валот кавксть: сынь аволь вейкеть.',
 'userexists' => 'Те лемесь уш саезь.
 Арсека эстеть лия, инеськеть.',
@@ -579,14 +617,14 @@ $messages = array(
 'noemailcreate' => 'Эряви максомс е-сёрмапарго, конась маштови',
 'passwordsent' => '$1 -нь е-сёрмань адресэнтень кучозь од совамо вал.<br />
 Инеськеть, кодак валось пачкоди, совака одов.',
-'eauthentsent' => 'Электрононь адресэзэть кучозь кемекстамонь е-сёрмине.<br /> Сонзэ эйсэ сёрмадозь мезе кода теемс. Ансяк седе мейле, зярдо невтик, адресэсь алкукс эсеть, карматано кучомо лия сёрмат.',
+'eauthentsent' => 'Электрононь сёрмапаргозот кучозь кемекстамонь е-сёрмине.<br /> Сонзэ эйсэ сёрмадозь мезе кода теемс. Ансяк седе мейле, зярдо невтик, сёрмапаргось алкукс эсеть, карматано кучомо лия сёрмат.',
 'mailerror' => 'Е-сёрма кучомсто ильведькс: $1',
 'acct_creation_throttle_hit' => 'Те викисэ тонь IP адресстэть совасть теицят, конат теисть {{PLURAL:$1|1 сёрмадовкс|$1 сёрмадовкст}} меельсе чынть перть, седе ламо полавтомат а мерить теемс истя зняронь шкань перть.
 Тень кисэ, те   IP адресэнть коряс седе тов а маштови теемс-шкамс од сёрмадовкст, зярс.',
-'emailauthenticated' => 'Е-сёрма паргот кемекстазель $2 чыстэ $3 цяссто.',
+'emailauthenticated' => 'Е-сёрмапаргот кемекстазель $2 чистэ $3 цяссто.',
 'emailconfirmlink' => 'Кемекстык е-сёрмапаргот',
 'accountcreated' => 'Совамо таркась теезь',
-'accountcreatedtext' => '$1-нь совицянь таркась теевсь-шкавсь.',
+'accountcreatedtext' => '[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|кортнема]]) совицянь таркась теевсь-шкавсь.',
 'loginlanguagelabel' => 'Кель: $1',
 
 # Email sending
@@ -600,7 +638,7 @@ $messages = array(
 'newpassword' => 'Од совамо валот:',
 'retypenew' => 'Сёрмадык омбоцеде совамо валот:',
 'resetpass_submit' => 'Тештик совамо валот ды совак',
-'changepassword-success' => 'Совамо валот полавтовсь теть! Совавтыть эйсэть системас...',
+'changepassword-success' => 'Совамовалот полавтовсь!',
 'resetpass_forbidden' => 'Совамо валтнэ а полавтовить',
 'resetpass-submit-loggedin' => 'Полавтомс совамо валот',
 'resetpass-submit-cancel' => 'Саемс мекев',
@@ -678,9 +716,9 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'loginreqlink' => 'совамс',
 'loginreqpagetext' => 'Лия лопань ванномга, эряви $1.',
 'accmailtitle' => 'Салавань вал кучозь.',
-'accmailtext' => "Кода понгсь теезь совамо вал [[User talk:$1|$1]]-нь туртов кучозь $2 адресэнтень.
+'accmailtext' => "Кода понгсь теезь совамовал [[User talk:$1|$1]]-нь туртов кучозь $2 сёрмапаргонтень.
 
-Те од совамо таркас совамо валось полавтови ''[[Special:ChangePassword|совамо валонь полавтома]]'' лопас совамодо мейле.",
+Те од совамо таркас совамовалось полавтови ''[[Special:ChangePassword|совамовалонь полавтома]]'' лопас совамодо мейле.",
 'newarticle' => '(Од)',
 'newarticletext' => "Молить налтке мельга сёрмадовксос, конась апак тее.
 Ули мелеть теемс сёрмадовкс, сёрмадт валт ало паргос (вант [[{{MediaWiki:Helppage}}|help page]] тесэ лездамо информация).
@@ -762,8 +800,8 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 Чарькодевтемат: (молиц.) = редямось молиця версиястонть; (и. молиц.) = редямось икеле молиця версиястонть; '''а''' = аволь седе ламо лиякстомтома.",
 'history-fieldset-title' => 'Ваномс лопанть юронзо-путовксонзо',
 'history-show-deleted' => 'Ансяк нардазь',
-'histfirst' => 'Ð\92аÑ\81енÑ\86е',
-'histlast' => 'Ð\9cеелÑ\8cÑ\81е',
+'histfirst' => 'веÑ\81емеде Ñ\83монÑ\8c',
+'histlast' => 'Ð\9cеелÑ\8cÑ\86е',
 'historysize' => '({{PLURAL:$1|1 байт|$1 байтт}})',
 'historyempty' => '(чаво)',
 
@@ -868,7 +906,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'search-interwiki-default' => '$1 савкс:',
 'search-interwiki-more' => '(седе ламо)',
 'search-relatedarticle' => 'Малавикс',
-'mwsuggest-disable' => 'Лоткавтомс "AJAX" превспутыенть',
+'mwsuggest-disable' => 'Лоткавтомс вешнемань превспутыенть',
 'searcheverything-enable' => 'Вешнемс весе лем потмотнестэ',
 'searchrelated' => 'малавикс',
 'searchall' => 'весе',
@@ -889,7 +927,6 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'preferences' => 'Аравтомат',
 'mypreferences' => 'Аравтомат',
 'prefs-edits' => 'Зяроксть витнезь-петнезь:',
-'prefsnologin' => 'Эзить сова',
 'changepassword' => 'Салавань валонь полавтома',
 'prefs-skin' => 'Неемань ладсема',
 'skin-preview' => 'Васнянь неевтезэ',
@@ -950,9 +987,9 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'badsiglength' => 'Кедень путомат пек кувака.
 Эйсэнзэ иляст уле $1 -до ламо {{PLURAL:$1|тешкст|тешкст}}.',
 'yourgender' => 'Сыметь (цёрань-тейтерень):',
-'gender-unknown' => 'апак Ð½ÐµÐ²Ñ\82е',
-'gender-male' => 'цёрань сыме',
-'gender-female' => 'Ð\90ванÑ\8c Ñ\81Ñ\8bме',
+'gender-unknown' => 'Ð\90 Ð¼ÐµÑ\80евлинÑ\8c',
+'gender-male' => 'Сон витни-петни викилопатнесэ',
+'gender-female' => 'Сон Ð²Ð¸Ñ\82ни-пеÑ\82ни Ð²Ð¸ÐºÐ¸Ð»Ð¾Ð¿Ð°Ñ\82неÑ\81Ñ\8d',
 'email' => 'Е-сёрма',
 'prefs-help-realname' => 'Алкуксонь леметь (арась мелеть, иляк путо): путсак, ды сон карми неявомо не таркатнесэ, косо тон тев теят.',
 'prefs-help-email' => 'Е-сёрмапаргот а эряви тешкстамс. Сон карми эрявомо ансяк салававалонь одов пачтямсто ёмавтындерясак неень салавань валот.',
@@ -1054,8 +1091,8 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'action-undelete' => 'вельмевтемс мекев те лопанть',
 'action-suppressionlog' => 'ваномс те теицянть тевнеде сёрмадовкс',
 'action-block' => 'кардамс те совицянть витнемадо-петнемадо',
-'action-import' => 'совавтомс те лопанть лия Викистэ',
-'action-importupload' => 'совавтомс те лопанть файлань йовкстамо юртсто',
+'action-import' => 'совавтомс тезэнь лопат лия Викистэ',
+'action-importupload' => 'совавтомс тезэнь лопат файлань путома юртсто',
 'action-mergehistory' => 'вейтьсэндямс те лопанть юронзо-путовксонзо',
 'action-userrights' => 'витнемс-петнемс совицянь весе видечитнень',
 'action-userrights-interwiki' => 'витнемс-петнемс лия викитнесэ теицянь видечитнень',
@@ -1071,6 +1108,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'recentchanges-label-minor' => 'Те а покшкэ витнемась-петнемась',
 'recentchanges-label-bot' => 'Те витнеманть-петнеманть теизе кона-кона бот',
 'recentchanges-label-unpatrolled' => '',
+'recentchanges-legend-newpage' => '(вантаять [[Special:NewPages|од лопань лемрисьме]])',
 'rcnote' => "$5, $4 шканть коряс муят алдо {{PLURAL:$1|Меельсе '''1''' лиякстомтоманть|Меельсе '''$1''' лиякстомтоматнень}}  меельсе {{PLURAL:$2|чинть|'''$2''' читнень}} шкасто.",
 'rcnotefrom' => "Ало невтезь  '''$2''' лиякстомтомасто саезь ('''$1''' видс).",
 'rclistfrom' => 'Невтемс од витьнематнень $1-нть эйстэ саезь.',
@@ -1090,7 +1128,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'boteditletter' => 'б',
 'rc_categories_any' => 'Кодамо илязо уле',
 'newsectionsummary' => '/* $1 */ од пелькс',
-'rc-enhanced-expand' => 'Невтемс седе ламо тень ланга (JavaScript эряви)',
+'rc-enhanced-expand' => 'Невтемс седе ламо тень ланга',
 'rc-enhanced-hide' => 'Кекшемс келейстэ ёвтазенть',
 'rc-old-title' => 'васня сёрмадозель «$1» лем марто',
 
@@ -1424,7 +1462,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'emailsenttext' => 'Е-сёрмасо пачтямнэть кучовсь.',
 
 # Watchlist
-'watchlist' => 'Ð\9cезе Ð¼ÐµÐ»Ñ\8cга Ð¼Ð¾Ð½ Ð²Ð°Ð½Ñ\81Ñ\82нÑ\8fн',
+'watchlist' => 'Ð\92анома Ð»ÐµÐ¼Ñ\80иÑ\81Ñ\8cме',
 'mywatchlist' => 'Мезе мельга мон ванстнян',
 'watchlistfor2' => '$1-нь туртов $2',
 'nowatchlist' => 'Ванома керьксэзэть мезеяк апак путо.',
@@ -1858,7 +1896,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'file-info-size' => '$1 × $2 пиксельть, файлонть-путовксонть сталмозо: $3, MIME типезе: $4',
 'file-nohires' => 'Арась версия покш разрешения марто.',
 'svg-long-desc' => 'SVG файла, $1 × $2 пиксельть, файланть покшолмазо: $3',
-'show-big-image' => 'Ð\9fеÑ\88кÑ\81е Ñ\82еевкÑ\81еÑ\81Ñ\8c',
+'show-big-image' => 'Ð\92аÑ\81енÑ\8c Ñ\84айла',
 'file-info-gif-looped' => 'кирьксэс аравтозь',
 'file-info-png-looped' => 'кирьксэс аравтозь',
 
@@ -2174,7 +2212,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'specialpages-group-highuse' => 'Пек тевс нолдазь лопат',
 'specialpages-group-pages' => 'Лопа керькст',
 'specialpages-group-pagetools' => 'Лопань кедьёнкст',
-'specialpages-group-wiki' => 'Викинь дата ды кедьйонкст',
+'specialpages-group-wiki' => 'Викинь дата ды кедьёнкст',
 'specialpages-group-redirects' => 'Башка тевень лопатнень ютавтома лия таркас',
 'specialpages-group-spam' => 'Шукш пачтнематнеде кедьёнкст',
 
@@ -2230,4 +2268,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'duration-centuries' => '$1 {{PLURAL:$1|пинге|пингеть}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тёжтьие|тёжтьиеть}}',
 
+# Special:ExpandTemplates
+'expand_templates_preview' => 'Васнянь неевтезэ',
+
 );
index c903256..13b8baf 100644 (file)
@@ -378,8 +378,6 @@ $2، $1',
 'ok' => 'خا',
 'retrievedfrom' => '"$1" جه بیته بیّه',
 'youhavenewmessages' => 'شما اتا $1 دانّی ($2).',
-'newmessageslink' => 'ترنه پیغوم‌ئون',
-'newmessagesdifflink' => 'پایانی دچی‌یه',
 'youhavenewmessagesfromusers' => 'شِما {{PLURAL:$3| کارور دیگه| $3  کارور}} $1 دارنی ($2).',
 'youhavenewmessagesmanyusers' => 'شما ات‌سری کارور جه $1 دارنی ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ترنه پیغوم|ترنه پیغوم}}',
@@ -668,7 +666,6 @@ $2، $1',
 # Preferences page
 'mypreferences' => 'مه خاستنی‌ئون',
 'prefs-edits' => 'تعداد دچی‌یه‌ئون:',
-'prefsnologin' => 'سیستم دله نمویی',
 'prefs-rc' => 'تازه دگاردسته‌ئون',
 'youremail' => 'شه مه Email:',
 'username' => 'کاروری نوم:',
index 8977481..1ab8959 100644 (file)
@@ -302,8 +302,6 @@ $messages = array(
 'ok' => 'Nopan iti',
 'retrievedfrom' => 'Ōquīzqui ītech  "$1"',
 'youhavenewmessages' => 'Tiquimpiya $1 ($2).',
-'newmessageslink' => 'yancuīc tlahcuilōltzintli',
-'newmessagesdifflink' => 'achto tlapatlaliztli',
 'youhavenewmessagesmulti' => 'Tiquimpiya yancuīc tlahcuilōlli īpan $1',
 'editsection' => 'ticpatlāz',
 'editold' => 'ticpatlāz',
@@ -630,7 +628,6 @@ Hueliz ōmopolo huiqui nozo ōmozacac.
 'preferences' => 'Tlaēlēhuiliztli',
 'mypreferences' => 'Notlaēlēhuiliz',
 'prefs-edits' => 'Tlapatlaliztli tlapōhualli:',
-'prefsnologin' => 'Ahmo ōtimocalac',
 'changepassword' => 'Ticpatlāz motlahtōlichtacāyo',
 'skin-preview' => 'Xiquitta quemeh yez',
 'datedefault' => 'Ayāc tlanequiliztli',
@@ -1507,4 +1504,8 @@ Niman tihuelīti [[Special:UserLogin|timocalaqui]] auh ticpactiāz huiquitica.',
 'api-error-uploaddisabled' => 'Sèuhtok in êkawilistli ìpan inìn wiki.',
 'api-error-verification-error' => 'Inìn èwalli welis îtlakauhtok, noso âmò kualli motzòwîtok.',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Cualli',
+'expand_templates_preview' => 'Xiquitta achtochīhualiztli',
+
 );
index 432caf8..bbb922c 100644 (file)
@@ -12,6 +12,8 @@
  * @author Kaihsu
  */
 
+$fallback = 'cdo, zh-hant';
+
 $datePreferences = array(
        'default',
        'ISO 8601',
index 649b386..db67e15 100644 (file)
@@ -269,8 +269,6 @@ $messages = array(
 'ok' => 'OK',
 'retrievedfrom' => 'Estratto \'e "$1"',
 'youhavenewmessages' => 'Haje $1 ($2).',
-'newmessageslink' => "nove 'mmasciàte",
-'newmessagesdifflink' => "differenze cu 'a revisione precedente",
 'youhavenewmessagesmulti' => 'Tiene nuove mmasciate $1',
 'editsection' => 'càgna',
 'editold' => 'càgna',
index c126dda..03bf9e1 100644 (file)
@@ -104,7 +104,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Ugyldig_tittel' ),
        'Blankpage'                 => array( 'Blank_side' ),
        'Block'                     => array( 'Blokker', 'Blokker_IP', 'Blokker_bruker' ),
-       'Blockme'                   => array( 'Blokker_meg' ),
        'Booksources'               => array( 'Bokkilder' ),
        'BrokenRedirects'           => array( 'Ødelagte_omdirigeringer' ),
        'Categories'                => array( 'Kategorier' ),
@@ -116,10 +115,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Opprett_konto' ),
        'Deadendpages'              => array( 'Blindveisider' ),
        'DeletedContributions'      => array( 'Slettede_bidrag' ),
-       'Disambiguations'           => array( 'Pekere' ),
        'DoubleRedirects'           => array( 'Doble_omdirigeringer' ),
        'EditWatchlist'             => array( 'Rediger_overvåkningsliste' ),
        'Emailuser'                 => array( 'E-post' ),
+       'ExpandTemplates'           => array( 'Utvid_maler' ),
        'Export'                    => array( 'Eksporter' ),
        'Fewestrevisions'           => array( 'Færrest_revisjoner' ),
        'FileDuplicateSearch'       => array( 'Filduplikatsøk' ),
@@ -161,6 +160,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Beskyttede_sider' ),
        'Protectedtitles'           => array( 'Beskyttede_titler' ),
        'Randompage'                => array( 'Tilfeldig', 'Tilfeldig_side' ),
+       'RandomInCategory'          => array( 'Tilfeldig_fra_kategori' ),
        'Randomredirect'            => array( 'Tilfeldig_omdirigering' ),
        'Recentchanges'             => array( 'Siste_endringer' ),
        'Recentchangeslinked'       => array( 'Relaterte_endringer' ),
@@ -590,8 +590,6 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Hentet fra «$1»',
 'youhavenewmessages' => 'Du har $1 ($2).',
-'newmessageslink' => 'nye meldinger',
-'newmessagesdifflink' => 'siste endring',
 'youhavenewmessagesfromusers' => 'Du har $1 fra {{PLURAL:$3|en annen bruker| $3 brukere}} ($2).',
 'youhavenewmessagesmanyusers' => 'Du har $1 fra mange brukere ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|en ny melding|nye meldinger}}',
@@ -881,7 +879,7 @@ Du kan ha allerede byttet passordet, eller bedt om et nytt midlertidig passord.'
 'resetpass-abort-generic' => 'Endring av passord har blitt avbrutt av en utvidelse.',
 
 # Special:PasswordReset
-'passwordreset' => 'Passordresetting',
+'passwordreset' => 'Tilbakestilling av passord',
 'passwordreset-text-one' => 'Fyll ut skjemaet for å tilbakestille passordet',
 'passwordreset-text-many' => '{{PLURAL:$1|Fyll inn et av datafeltene for å tilbakestille passordet ditt.}}',
 'passwordreset-legend' => 'Nullstill passord',
@@ -1436,7 +1434,6 @@ For å søke i alle, bruk prefikset ''all:'' (inkluderer diskusjonssider, maler,
 'preferences' => 'Innstillinger',
 'mypreferences' => 'Innstillinger',
 'prefs-edits' => 'Antall redigeringer:',
-'prefsnologin' => 'Ikke logget inn',
 'changepassword' => 'Endre passord',
 'prefs-skin' => 'Utseende',
 'skin-preview' => 'Forhåndsvisning',
@@ -1735,6 +1732,7 @@ Informasjonen vil være offentlig.',
 'recentchanges-label-minor' => 'Dette er en mindre endring',
 'recentchanges-label-bot' => 'Denne redigeringen ble gjort av en bot',
 'recentchanges-label-unpatrolled' => 'Denne redigeringen har ikke blitt patruljert ennå',
+'recentchanges-legend-newpage' => '$1 – ny side',
 'rcnote' => "Nedenfor vises {{PLURAL:$1|'''1''' endring|de siste '''$1''' endringene}} fra {{PLURAL:$2|det siste døgnet|de siste '''$2''' døgnene}}, per $5 $4.",
 'rcnotefrom' => "Nedenfor er endringene siden '''$2''' (opp til '''$1''' vises).",
 'rclistfrom' => 'Vis nye endringer med start fra $1',
@@ -1742,7 +1740,7 @@ Informasjonen vil være offentlig.',
 'rcshowhidebots' => '$1 roboter',
 'rcshowhideliu' => '$1 innloggede brukere',
 'rcshowhideanons' => '$1 anonyme brukere',
-'rcshowhidepatr' => '$1 godkjente endringer',
+'rcshowhidepatr' => '$1 patruljerte endringer',
 'rcshowhidemine' => '$1 mine endringer',
 'rclinks' => 'Vis siste $1 endringer i de siste $2 dagene<br />$3',
 'diff' => 'diff',
@@ -3220,20 +3218,20 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 'skinname-modern' => 'Moderne',
 
 # Patrolling
-'markaspatrolleddiff' => 'Godkjenn endringen',
-'markaspatrolledtext' => 'Godkjenn denne siden',
-'markedaspatrolled' => 'Merket som godkjent',
-'markedaspatrolledtext' => 'Den valgte revisjonen av [[:$1]] har blitt markert som patruljert.',
+'markaspatrolleddiff' => 'Merk som patruljert',
+'markaspatrolledtext' => 'Merk denne siden som patruljert',
+'markedaspatrolled' => 'Merket som patruljert',
+'markedaspatrolledtext' => 'Den valgte revisjonen av [[:$1]] har blitt merket som patruljert.',
 'rcpatroldisabled' => 'Siste endringer-patruljering er slått av',
 'rcpatroldisabledtext' => 'Siste endringer-patruljeringsfunksjonen er slått av.',
-'markedaspatrollederror' => 'Kan ikke merke som godkjent',
-'markedaspatrollederrortext' => 'Du må spesifisere en versjon å merke som godkjent.',
-'markedaspatrollederror-noautopatrol' => 'Du kan ikke merke dine egne endringer som godkjente.',
+'markedaspatrollederror' => 'Kunne ikke merke som patruljert',
+'markedaspatrollederrortext' => 'Du må spesifisere en versjon å merke som patruljert.',
+'markedaspatrollederror-noautopatrol' => 'Du har ikke lov å merke dine egne endringer som patruljerte.',
 'markedaspatrollednotify' => 'Denne endringen av $1 har blitt patruljert.',
 'markedaspatrollederrornotify' => 'Patruljering feilet.',
 
 # Patrol log
-'patrol-log-page' => 'Godkjenningslogg',
+'patrol-log-page' => 'Patruljeringslogg',
 'patrol-log-header' => 'Dette er en logg over patruljerte sideversjoner.',
 'log-show-hide-patrol' => '$1 patruljeringslogg',
 
@@ -4190,4 +4188,21 @@ Om det ikke er tilfellet, kan du bruke det enkle skjemaet som du finner under. K
 'limitreport-expansiondepth' => 'Største ekspansjonsdybde',
 'limitreport-expensivefunctioncount' => 'Antall kostbare parserfunksjoner',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Utvid maler',
+'expand_templates_intro' => 'Denne spesialsiden tar tekst og utvider rekusivt alle maler brukt i teksten. 
+Den utvider også alle parserfunksjoner som 
+<code><nowiki>{{</nowiki>#language:…}}</code>, og variabler som 
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Faktisk utvider den det meste innkapslet i doble krøllparenteser.',
+'expand_templates_title' => 'Konteksttittel, for {{FULLPAGENAME}}, etc.:',
+'expand_templates_input' => 'Skriv inn tekst:',
+'expand_templates_output' => 'Resultat',
+'expand_templates_xml_output' => 'XML-resultat',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Fjern kommentarer',
+'expand_templates_remove_nowiki' => 'Ikke vis <nowiki>-merkelapper i resultatet',
+'expand_templates_generate_xml' => 'Vis parsetre som XML',
+'expand_templates_preview' => 'Forhåndsvisning',
+
 );
index 68cade5..17732af 100644 (file)
@@ -138,7 +138,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Ole Sieden' ),
        'Blankpage'                 => array( 'Leddige Sied' ),
        'Block'                     => array( 'Blocken' ),
-       'Blockme'                   => array( 'Proxy-Sparr' ),
        'Booksources'               => array( 'ISBN-Söök' ),
        'BrokenRedirects'           => array( 'Kaputte Redirects' ),
        'Categories'                => array( 'Kategorien' ),
@@ -147,7 +146,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Bidrääg' ),
        'CreateAccount'             => array( 'Brukerkonto anleggen' ),
        'Deadendpages'              => array( 'Sackstraatsieden' ),
-       'Disambiguations'           => array( 'Mehrdüdige Begrepen' ),
        'DoubleRedirects'           => array( 'Dubbelte Redirects' ),
        'Emailuser'                 => array( 'E-Mail an Bruker' ),
        'Export'                    => array( 'Exporteren' ),
@@ -473,8 +471,6 @@ $1",
 'ok' => 'OK',
 'retrievedfrom' => 'Vun „$1“',
 'youhavenewmessages' => 'Du hest $1 ($2).',
-'newmessageslink' => 'Ne’e Narichten',
-'newmessagesdifflink' => 'Ünnerscheed to vörher',
 'youhavenewmessagesmulti' => 'Du hest ne’e Narichten op $1',
 'editsection' => 'ännern',
 'editold' => 'ännern',
@@ -1118,7 +1114,6 @@ de aver nich jümmer den aktuellsten Stand weerspegelt.<p>',
 'preferences' => 'Instellen',
 'mypreferences' => 'För mi Instellen',
 'prefs-edits' => 'Wo faken du in dit Wiki Sieden ännert hest:',
-'prefsnologin' => 'Nich anmellt',
 'changepassword' => 'Passwoort ännern',
 'prefs-skin' => 'Utsehn vun de Steed',
 'skin-preview' => 'Vörschau',
@@ -3103,4 +3098,20 @@ Du kannst ok de [[Special:EditWatchlist|normale Sied to’n Ännern]] bruken.',
 'revdelete-unrestricted' => 'Inschränkungen för Administraters rutnahmen',
 'rightsnone' => '(kene)',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Vörlagen oplösen',
+'expand_templates_intro' => 'Mit disse Spezialsied köönt Vörlagen in ingeven Text in Wikitext ümwannelt warrn.
+Ok Parserfunkschonen so as
+<nowiki>{{</nowiki>#language:…}}, un Variabeln so as
+<nowiki>{{</nowiki>CURRENTDAY}} warrt ümwannelt. Also so temlich allens, wat twischen swiefte Klammern steit.
+Dorto warrt de nödigen Parser-Phasen in MediaWiki direkt opropen.',
+'expand_templates_title' => 'Kontexttitel, för {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Inputtext:',
+'expand_templates_output' => 'Resultat',
+'expand_templates_xml_output' => 'XML-Utgaav',
+'expand_templates_ok' => 'Los',
+'expand_templates_remove_comments' => 'Kommentaren rutnehmen',
+'expand_templates_generate_xml' => 'XML-Parser-Boom wiesen',
+'expand_templates_preview' => 'Vörschau',
+
 );
index 2b9accd..f8fc34a 100644 (file)
@@ -75,13 +75,14 @@ $bookstoreList = array(
 
 #!!# Translation <b>HLEERSTE:</b> is used more than once for <a href="#mw-sp-magic-lcfirst">lcfirst</a> and <a href="#mw-sp-magic-ucfirst">ucfirst</a>.
 $magicWords = array(
-       'redirect'                  => array( '0', '#DEURVERWIEZING', '#DOORVERWIJZING', '#REDIRECT' ),
+       'redirect'                  => array( '0', '#DEURVERWIEZING', '#DUURVERWIEZING', '#DOORVERWIJZING', '#REDIRECT' ),
        'notoc'                     => array( '0', '__GIENONDERWARPEN__', '__GEENINHOUD__', '__NOTOC__' ),
-       'nogallery'                 => array( '0', '__GIENGALLERIEJE__', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
-       'forcetoc'                  => array( '0', '__FORSEERONDERWARPEN__', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
+       'nogallery'                 => array( '0', '__GIENGALLERIEJE__', '__GIENGALDERIEJE__', '__GEEN_GALERIJ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__FORSEERONDERWARPEN_', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__ONDERWARPEN__', '__INHOUD__', '__TOC__' ),
        'noeditsection'             => array( '0', '__GIENBEWARKSEKSIE__', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
-       'currentmonth'              => array( '1', 'DISSEMAOND', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth'              => array( '1', 'DISSEMAOND', 'DISSEMAOND2', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'DISSEMAOND1', 'HUIDIGEMAAND1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'DISSEMAONDNAAM', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
        'currentmonthnamegen'       => array( '1', 'DISSEMAONDGEN', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
        'currentmonthabbrev'        => array( '1', 'DISSEMAONDAOFK', 'HUIDIGEMAANDAFK', 'CURRENTMONTHABBREV' ),
@@ -102,35 +103,38 @@ $magicWords = array(
        'localyear'                 => array( '1', 'LOKAALJAOR', 'PLAATSELIJKJAAR', 'LOKAALJAAR', 'LOCALYEAR' ),
        'localtime'                 => array( '1', 'LOKALETIED', 'PLAATSELIJKETIJD', 'LOKALETIJD', 'LOCALTIME' ),
        'localhour'                 => array( '1', 'LOKAALURE', 'PLAATSELIJKUUR', 'LOKAALUUR', 'LOCALHOUR' ),
-       'numberofpages'             => array( '1', 'ANTALPAGINAS', 'ANTALPAGINA\'S', 'ANTALPAGINA’S', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
+       'numberofpages'             => array( '1', 'ANTALZIEJEN', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S', 'NUMBEROFPAGES' ),
        'numberofarticles'          => array( '1', 'ANTALARTIKELS', 'AANTALARTIKELEN', 'NUMBEROFARTICLES' ),
        'numberoffiles'             => array( '1', 'ANTALBESTANDEN', 'AANTALBESTANDEN', 'NUMBEROFFILES' ),
        'numberofusers'             => array( '1', 'ANTALGEBRUKERS', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
        'numberofactiveusers'       => array( '1', 'ANTALAKTIEVEGEBRUKERS', 'AANTALACTIEVEGEBRUIKERS', 'ACTIEVEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
        'numberofedits'             => array( '1', 'ANTALBEWARKINGEN', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
        'numberofviews'             => array( '1', 'ANTALKERENBEKEKEN', 'AANTALKERENBEKEKEN', 'NUMBEROFVIEWS' ),
-       'pagename'                  => array( '1', 'PAGINANAAM', 'PAGENAME' ),
-       'pagenamee'                 => array( '1', 'PAGINANAAME', 'PAGENAMEE' ),
+       'pagename'                  => array( '1', 'ZIEDNAAM', 'PAGINANAAM', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'ZIEDNAAME', 'PAGINANAAME', 'PAGENAMEE' ),
        'namespace'                 => array( '1', 'NAAMRUUMTE', 'NAAMRUIMTE', 'NAMESPACE' ),
        'namespacee'                => array( '1', 'NAAMRUUMTEE', 'NAAMRUIMTEE', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'NAAMRUUMTENUMMER', 'NAAMRUIMTENUMMER', 'NAMESPACENUMBER' ),
        'talkspace'                 => array( '1', 'OVERLEGRUUMTE', 'OVERLEGRUIMTE', 'TALKSPACE' ),
        'talkspacee'                => array( '1', 'OVERLEGRUUMTEE', 'OVERLEGRUIMTEE', 'TALKSPACEE' ),
        'subjectspace'              => array( '1', 'ONDERWARPRUUMTE', 'ARTIKELRUUMTE', 'ONDERWERPRUIMTE', 'ARTIKELRUIMTE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
        'subjectspacee'             => array( '1', 'ONDERWARPRUUMTEE', 'ARTIKELRUUMTEE', 'ONDERWERPRUIMTEE', 'ARTIKELRUIMTEE', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
-       'fullpagename'              => array( '1', 'HELEPAGINANAAM', 'VOLLEDIGEPAGINANAAM', 'FULLPAGENAME' ),
-       'fullpagenamee'             => array( '1', 'HELEPAGINANAAME', 'VOLLEDIGEPAGINANAAME', 'FULLPAGENAMEE' ),
-       'subpagename'               => array( '1', 'DEELPAGINANAAM', 'SUBPAGENAME' ),
-       'subpagenamee'              => array( '1', 'DEELPAGINANAAME', 'SUBPAGENAMEE' ),
+       'fullpagename'              => array( '1', 'HELEZIEDNAAM', 'VOLLEDIGEPAGINANAAM', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'HELEZIEDNAAME', 'VOLLEDIGEPAGINANAAME', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'DEELZIEDNAAM', 'DEELPAGINANAAM', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'DEELZIEDNAAME', 'DEELPAGINANAAME', 'SUBPAGENAMEE' ),
+       'rootpagename'              => array( '1', 'ROOTZIEDNAAM', 'ROOTPAGINANAAM', 'ROOTPAGENAME' ),
+       'rootpagenamee'             => array( '1', 'ROOTZIEDNAAME', 'ROOTPAGINANAAME', 'ROOTPAGENAMEE' ),
        'basepagename'              => array( '1', 'BAOSISPAGINANAAM', 'BASISPAGINANAAM', 'BASEPAGENAME' ),
        'basepagenamee'             => array( '1', 'BAOSISPAGINANAAME', 'BASISPAGINANAAME', 'BASEPAGENAMEE' ),
        'talkpagename'              => array( '1', 'OVERLEGPAGINANAAM', 'TALKPAGENAME' ),
        'talkpagenamee'             => array( '1', 'OVERLEGPAGINANAAME', 'TALKPAGENAMEE' ),
-       'subjectpagename'           => array( '1', 'ONDERWARPPAGINANAAM', 'ARTIKELPAGINANAAM', 'ONDERWERPPAGINANAAM', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'          => array( '1', 'ONDERWARPPAGINANAAME', 'ARTIKELPAGINANAAME', 'ONDERWERPPAGINANAAME', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'ONDERWARPZIEDNAAM', 'ARTIKELZIEDNAAM', 'ONDERWERPPAGINANAAM', 'ARTIKELPAGINANAAM', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'ONDERWARZIEDNAAME', 'ARTIKELZIEDNAAME', 'ONDERWERPPAGINANAAME', 'ARTIKELPAGINANAAME', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
        'msg'                       => array( '0', 'BERICHT:', 'MSG:' ),
        'subst'                     => array( '0', 'VERVANG:', 'VERV:', 'SUBST:' ),
        'msgnw'                     => array( '0', 'BERICHTNW', 'MSGNW:' ),
-       'img_thumbnail'             => array( '1', 'miniatuur', 'duumnegel', 'doemnaegel', 'thumbnail', 'thumb' ),
+       'img_thumbnail'             => array( '1', 'duum', 'doem', 'miniatuur', 'mini', 'thumbnail', 'thumb' ),
        'img_manualthumb'           => array( '1', 'miniatuur=$1', 'duumnegel=$1', 'doemnaegel=$1', 'thumbnail=$1', 'thumb=$1' ),
        'img_right'                 => array( '1', 'rechts', 'right' ),
        'img_left'                  => array( '1', 'links', 'left' ),
@@ -138,7 +142,7 @@ $magicWords = array(
        'img_center'                => array( '1', 'esentreerd', 'gecentreerd', 'center', 'centre' ),
        'img_framed'                => array( '1', 'umraand', 'omkaderd', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'kaoderloos', 'kaderloos', 'frameless' ),
-       'img_page'                  => array( '1', 'pagina=$1', 'pagina_$1', 'pagina $1', 'page=$1', 'page $1' ),
+       'img_page'                  => array( '1', 'zied=$1', 'zied_$1', 'pagina=$1', 'pagina $1', 'page=$1', 'page $1' ),
        'img_upright'               => array( '1', 'rechtop', 'rechtop=$1', 'rechtop$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'raand', 'rand', 'border' ),
        'img_baseline'              => array( '1', 'grondliende', 'grondlijn', 'baseline' ),
@@ -147,7 +151,7 @@ $magicWords = array(
        'img_middle'                => array( '1', 'midden', 'middle' ),
        'img_bottom'                => array( '1', 'benejen', 'beneden', 'bottom' ),
        'img_text_bottom'           => array( '1', 'tekste-benejen', 'tekst-beneden', 'text-bottom' ),
-       'img_link'                  => array( '1', 'verwiezing=$1', 'verwijzing=$1', 'koppeling=$1', 'link=$1' ),
+       'img_link'                  => array( '1', 'verwiezing=$1', 'koppeling=$1', 'verwijzing=$1', 'link=$1' ),
        'sitename'                  => array( '1', 'WEBSTEENAAM', 'SITENAAM', 'SITENAME' ),
        'ns'                        => array( '0', 'NR:', 'NS:' ),
        'localurl'                  => array( '0', 'LOKALEURL', 'LOCALURL:' ),
@@ -157,30 +161,32 @@ $magicWords = array(
        'stylepath'                 => array( '0', 'STIELPAD', 'STIJLPAD', 'STYLEPATH' ),
        'grammar'                   => array( '0', 'GRAMMATIKA:', 'GRAMMATICA:', 'GRAMMAR:' ),
        'gender'                    => array( '0', 'GESLACHTE:', 'GESLACHT:', 'GENDER:' ),
-       'notitleconvert'            => array( '0', '__GIENTITELKONVERSIE__', '__GIENTC__', '__GEENTITELCONVERSIE__', '__GEENTC__', '__GEENPAGINANAAMCONVERSIE__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'          => array( '0', '__GIENINHOUDKONVERSIE__', '__GIENIC__', '__GEENINHOUDCONVERSIE__', '__GEENIC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'notitleconvert'            => array( '0', '__GIENTITELKONVERSIE__', '__GIENTK__', '__GEENPAGINANAAMCONVERSIE__', '__GEENTITELCONVERSIE__', '__GEENTC__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__GIENINHOUDKONVERSIE__', '__GIENIK__', '__GEENINHOUDCONVERSIE__', '__GEENIC__', '__NOCONTENTCONVERT__', '__NOCC__' ),
        'currentweek'               => array( '1', 'DISSEWEKE', 'HUIDIGEWEEK', 'CURRENTWEEK' ),
        'currentdow'                => array( '1', 'DISSEDVDW', 'HUIDIGEDVDW', 'CURRENTDOW' ),
        'localweek'                 => array( '1', 'LOKALEWEKE', 'PLAATSELIJKEWEEK', 'LOKALEWEEK', 'LOCALWEEK' ),
        'localdow'                  => array( '1', 'LOKALEDVDW', 'PLAATSELIJKEDVDW', 'LOCALDOW' ),
-       'revisionid'                => array( '1', 'REVISIEID', 'REVISIE-ID', 'VERSIEID', 'REVISIONID' ),
-       'revisionday'               => array( '1', 'REVISIEDAG', 'VERSIEDAG', 'REVISIONDAY' ),
-       'revisionday2'              => array( '1', 'REVISIEDAG2', 'VERSIEDAG2', 'REVISIONDAY2' ),
-       'revisionmonth'             => array( '1', 'REVISIEMAOND', 'VERSIEMAAND', 'REVISIONMONTH' ),
-       'revisionyear'              => array( '1', 'REVISIEJAOR', 'VERSIEJAAR', 'REVISIONYEAR' ),
-       'revisiontimestamp'         => array( '1', 'REVISIETIEDSTEMPEL', 'VERSIETIJD', 'REVISIONTIMESTAMP' ),
+       'revisionid'                => array( '1', 'VERSIEID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'VERSIEDAG', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'VERSIEDAG2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'VERSIEMAOND', 'VERSIEMAAND', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'VERSIEMAOND1', 'VERSIEMAAND1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'VERSIEJAOR', 'VERSIEJAAR', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'VERSIETIEDSTEMPEL', 'VERSIETIJD', 'REVISIONTIMESTAMP' ),
        'revisionuser'              => array( '1', 'VERSIEGEBRUKER', 'VERSIEGEBRUIKER', 'REVISIONUSER' ),
        'plural'                    => array( '0', 'MEERVOUD:', 'PLURAL:' ),
-       'fullurl'                   => array( '0', 'HELEURL', 'VOLLEDIGEURL', 'VOLLEDIGEURL:', 'FULLURL:' ),
-       'fullurle'                  => array( '0', 'HELEURLE', 'VOLLEDIGEURLE', 'VOLLEDIGEURLE:', 'FULLURLE:' ),
+       'fullurl'                   => array( '0', 'HELEURL', 'VOLLEDIGEURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'HELEURLE', 'VOLLEDIGEURLE:', 'FULLURLE:' ),
        'lcfirst'                   => array( '0', 'KLEERSTE:', 'LCFIRST:' ),
        'ucfirst'                   => array( '0', 'GLEERSTE:', 'HLEERSTE:', 'UCFIRST:' ),
        'lc'                        => array( '0', 'KL:', 'LC:' ),
        'uc'                        => array( '0', 'HL:', 'UC:' ),
        'raw'                       => array( '0', 'RAUW:', 'RUW:', 'RAW:' ),
-       'displaytitle'              => array( '1', 'TEUNTITEL', 'TOONTITEL', 'TITELTONEN', 'WEERGEGEVENTITEL', 'DISPLAYTITLE' ),
-       'newsectionlink'            => array( '1', '__NIEJESECTIEVERWIEZING__', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'          => array( '1', '__GIENNIEJKOPJENVERWIEZING__', '__GEENNIEUWKOPJEVERWIJZING__', '__GEENNIEUWESECTIELINK__', '__GEENNIEUWKOPJEKOPPELING__', '__NONEWSECTIONLINK__' ),
+       'displaytitle'              => array( '1', 'TEUNTITEL', 'WEERGEGEVENTITEL', 'TOONTITEL', 'DISPLAYTITLE' ),
+       'nocommafysuffix'           => array( '0', 'GIENSCHEIDINGSTEKEN', 'GEENSCHEIDINGSTEKEN', 'NOSEP' ),
+       'newsectionlink'            => array( '1', '__NIEJESEKSIEVERWIEZING__', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__GIENNIEJKOPJENVERWIEZING__', '__GEENNIEUWKOPJEKOPPELING__', '__GEENNIEUWESECTIELINK__', '__GEENNIEUWKOPJEVERWIJZING__', '__NONEWSECTIONLINK__' ),
        'currentversion'            => array( '1', 'DISSEVERSIE', 'HUIDIGEVERSIE', 'CURRENTVERSION' ),
        'urlencode'                 => array( '0', 'URLKODEREN', 'URLCODEREN', 'CODEERURL', 'URLENCODE:' ),
        'anchorencode'              => array( '0', 'ANKERKODEREN', 'ANKERCODEREN', 'CODEERANKER', 'ANCHORENCODE' ),
@@ -189,7 +195,7 @@ $magicWords = array(
        'directionmark'             => array( '1', 'RICHTINGMARKERING', 'RICHTINGSMARKERING', 'DIRECTIONMARK', 'DIRMARK' ),
        'language'                  => array( '0', '#TAAL:', '#LANGUAGE:' ),
        'contentlanguage'           => array( '1', 'INHOUDSTAAL', 'INHOUDTAAL', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'          => array( '1', 'PAGINASINNAAMRUUMTE', 'PAGINA’SINNAAMRUUMTE', 'PAGINA\'SINNAAMRUUMTE', 'PAGINASINNAAMRUIMTE', 'PAGINA’SINNAAMRUIMTE', 'PAGINA\'SINNAAMRUIMTE', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'pagesinnamespace'          => array( '1', 'ZIEJENINNAAMRUUMTE', 'PAGINASINNAAMRUIMTE', 'PAGINA’SINNAAMRUIMTE', 'PAGINA\'SINNAAMRUIMTE', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
        'numberofadmins'            => array( '1', 'ANTALBEHEERDERS', 'AANTALBEHEERDERS', 'AANTALADMINS', 'NUMBEROFADMINS' ),
        'formatnum'                 => array( '0', 'FORMATTEERNUM', 'NUMFORMATTEREN', 'FORMATNUM' ),
        'padleft'                   => array( '0', 'LINKSOPVULLEN', 'PADLEFT' ),
@@ -199,36 +205,43 @@ $magicWords = array(
        'filepath'                  => array( '0', 'BESTAANDSPAD:', 'BESTANDSPAD:', 'FILEPATH:' ),
        'tag'                       => array( '0', 'etiket', 'label', 'tag' ),
        'hiddencat'                 => array( '1', '__VERBÖRGENKAT__', '__VERBORGENCAT__', '__HIDDENCAT__' ),
-       'pagesincategory'           => array( '1', 'PAGINASINKATEGORIE', 'PAGINASINKAT', 'PAGINASINCATEGORIE', 'PAGINASINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                  => array( '1', 'PAGINAGROOTTE', 'PAGESIZE' ),
+       'pagesincategory'           => array( '1', 'ZIEJENINKATEGORIE', 'PAGINASINCATEGORIE', 'PAGINASINCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'ZIEDGROOTTE', 'PAGINAGROOTTE', 'PAGESIZE' ),
        'noindex'                   => array( '1', '__GIENINDEX__', '__GEENINDEX__', '__NOINDEX__' ),
        'numberingroup'             => array( '1', 'ANTALINGROEP', 'AANTALINGROEP', 'NUMBERINGROUP', 'NUMINGROUP' ),
        'staticredirect'            => array( '1', '__STAOTIESEDEURVERWIEZING__', '__STATISCHEDOORVERWIJZING__', '__STATISCHEREDIRECT__', '__STATICREDIRECT__' ),
        'protectionlevel'           => array( '1', 'BEVEILIGINGSNIVO', 'BEVEILIGINGSNIVEAU', 'PROTECTIONLEVEL' ),
        'formatdate'                => array( '0', 'daotumopmaak', 'datumopmaak', 'formatdate', 'dateformat' ),
        'url_query'                 => array( '0', 'ZEUKOPDRACHTE', 'ZOEKOPDRACHT', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'gienfout', 'geenfout', 'noerror' ),
+       'pagesincategory_pages'     => array( '0', 'ziejen', 'paginas', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'onderkategorieen', 'ondercategorieen', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'bestaanden', 'bestanden', 'files' ),
 );
 
 $specialPageAliases = array(
        'Activeusers'               => array( 'Aktieve_gebrukers' ),
        'Allmessages'               => array( 'Alle_systeemteksten' ),
-       'Allpages'                  => array( 'Alle_pagina\'s' ),
-       'Ancientpages'              => array( 'Oudste_pagina\'s' ),
-       'Blankpage'                 => array( 'Lege_pagina' ),
-       'Block'                     => array( 'Blokkeer_IP' ),
-       'Blockme'                   => array( 'Blokkeer_mien' ),
+       'Allpages'                  => array( 'Alle_ziejen' ),
+       'Ancientpages'              => array( 'Oudste_ziejen' ),
+       'Badtitle'                  => array( 'Verkeerde_ziednaam' ),
+       'Blankpage'                 => array( 'Lege_zied' ),
+       'Block'                     => array( 'Blokkeren' ),
        'Booksources'               => array( 'Boekinformasie' ),
        'BrokenRedirects'           => array( 'Ebreuken_deurverwiezingen' ),
        'Categories'                => array( 'Kategorieën' ),
+       'ChangeEmail'               => array( 'Netpost_wiezigen' ),
        'ChangePassword'            => array( 'Wachtwoord_wiezigen' ),
+       'ComparePages'              => array( 'Ziejen_vergelieken' ),
        'Confirmemail'              => array( 'Netpost_bevestigen' ),
        'Contributions'             => array( 'Biedragen' ),
        'CreateAccount'             => array( 'Gebruker_anmaken' ),
        'Deadendpages'              => array( 'Gien_verwiezingen' ),
        'DeletedContributions'      => array( 'Vort-edaone_gebrukersbiedragen' ),
-       'Disambiguations'           => array( 'Deurverwiespagina\'s' ),
        'DoubleRedirects'           => array( 'Dubbele_deurverwiezingen' ),
+       'EditWatchlist'             => array( 'Volglieste_bewarken' ),
        'Emailuser'                 => array( 'Bericht_sturen' ),
+       'ExpandTemplates'           => array( 'Mallen_substitueren' ),
        'Export'                    => array( 'Uutvoeren' ),
        'Fewestrevisions'           => array( 'Minste_bewarkingen' ),
        'FileDuplicateSearch'       => array( 'Dubbele_bestaanden_zeuken' ),
@@ -245,50 +258,53 @@ $specialPageAliases = array(
        'Listusers'                 => array( 'Gebrukerslieste' ),
        'Lockdb'                    => array( 'Databanke_blokkeren' ),
        'Log'                       => array( 'Logboeken' ),
-       'Lonelypages'               => array( 'Weespagina\'s' ),
+       'Lonelypages'               => array( 'Weesziejen' ),
        'Longpages'                 => array( 'Lange_artikels' ),
        'MergeHistory'              => array( 'Geschiedenisse_bie_mekaar_doon' ),
        'MIMEsearch'                => array( 'MIME-zeuken' ),
        'Mostcategories'            => array( 'Meeste_kategorieën' ),
        'Mostimages'                => array( 'Meestgebruukten_bestaanden' ),
-       'Mostlinked'                => array( 'Meest_naor_verwezen_pagina\'s' ),
+       'Mostinterwikis'            => array( 'Meeste_interwikiverwiezingen' ),
+       'Mostlinked'                => array( 'Meest_naor_verwezen_ziejen' ),
        'Mostlinkedcategories'      => array( 'Meestgebruukten_kategorieën' ),
        'Mostlinkedtemplates'       => array( 'Meestgebruken_mallen' ),
        'Mostrevisions'             => array( 'Meeste_bewarkingen' ),
-       'Movepage'                  => array( 'Herneum_pagina' ),
+       'Movepage'                  => array( 'Zied_herneumen' ),
        'Mycontributions'           => array( 'Mien_biedragen' ),
-       'Mypage'                    => array( 'Mien_gebrukerspagina' ),
+       'Mypage'                    => array( 'Mien_gebrukerszied' ),
        'Mytalk'                    => array( 'Mien_overleg' ),
-       'Myuploads'                 => array( 'Mien_in-elaojen_bestanen' ),
+       'Myuploads'                 => array( 'Mien_in-elaojen_bestaanden' ),
        'Newimages'                 => array( 'Nieje_bestaanden' ),
-       'Newpages'                  => array( 'Nieje_pagina\'s' ),
+       'Newpages'                  => array( 'Nieje_ziejen' ),
+       'PagesWithProp'             => array( 'Ziejen_mit_eigenschap' ),
        'PasswordReset'             => array( 'Wachtwoord_opniej_instellen' ),
        'PermanentLink'             => array( 'Vaste_verwiezing' ),
-       'Popularpages'              => array( 'Populaire_artikels' ),
+       'Popularpages'              => array( 'Populaere_artikels' ),
        'Preferences'               => array( 'Veurkeuren' ),
        'Prefixindex'               => array( 'Veurvoegselindex' ),
-       'Protectedpages'            => array( 'Beveiligden_pagina\'s' ),
+       'Protectedpages'            => array( 'Beveiligden_ziejen' ),
        'Protectedtitles'           => array( 'Beveiligden_titels' ),
-       'Randompage'                => array( 'Zo_mer_n_artikel' ),
-       'Randomredirect'            => array( 'Zo_mer_n_deurverwiezing' ),
+       'Randompage'                => array( 'Netzelde_welk_artikel' ),
+       'Randomredirect'            => array( 'Netzelde_welke_deurverwiezing' ),
        'Recentchanges'             => array( 'Leste_wiezigingen' ),
-       'Recentchangeslinked'       => array( 'Volg_verwiezingen' ),
+       'Recentchangeslinked'       => array( 'Leste_wiezigingen_ekoppeld' ),
+       'Redirect'                  => array( 'Deurverwiezen' ),
        'Revisiondelete'            => array( 'Versie_vortdoon' ),
        'Search'                    => array( 'Zeuken' ),
        'Shortpages'                => array( 'Korte_artikels' ),
-       'Specialpages'              => array( 'Spesiale_pagina\'s' ),
+       'Specialpages'              => array( 'Spesiale_ziejen' ),
        'Statistics'                => array( 'Staotistieken' ),
        'Tags'                      => array( 'Etiketten' ),
        'Uncategorizedcategories'   => array( 'Kategorieën_zonder_kategorie' ),
        'Uncategorizedimages'       => array( 'Bestaanden_zonder_kategorie' ),
-       'Uncategorizedpages'        => array( 'Pagina\'s_zonder_kategorie' ),
+       'Uncategorizedpages'        => array( 'Ziejen_zonder_kategorie' ),
        'Uncategorizedtemplates'    => array( 'Mallen_zonder_kategorie' ),
        'Undelete'                  => array( 'Weerummeplaotsen' ),
        'Unlockdb'                  => array( 'Databanke_vriegeven' ),
        'Unusedcategories'          => array( 'Ongebruukten_kategorieën' ),
        'Unusedimages'              => array( 'Ongebruukten_bestaanden' ),
        'Unusedtemplates'           => array( 'Ongebruukten_mallen' ),
-       'Unwatchedpages'            => array( 'Niet-evolgden_pagina\'s' ),
+       'Unwatchedpages'            => array( 'Niet-evolgden_ziejen' ),
        'Upload'                    => array( 'Bestaanden_opsturen' ),
        'UploadStash'               => array( 'Bestaandenstallige' ),
        'Userlogin'                 => array( 'Anmelden' ),
@@ -297,10 +313,10 @@ $specialPageAliases = array(
        'Version'                   => array( 'Versie' ),
        'Wantedcategories'          => array( 'Gewunste_kategorieën' ),
        'Wantedfiles'               => array( 'Gewunste_bestaanden' ),
-       'Wantedpages'               => array( 'Gewunste_pagina\'s' ),
+       'Wantedpages'               => array( 'Gewunste_ziejen' ),
        'Wantedtemplates'           => array( 'Gewunste_mallen' ),
        'Watchlist'                 => array( 'Volglieste' ),
-       'Whatlinkshere'             => array( 'Verwiezingen_naor_disse_pagina' ),
+       'Whatlinkshere'             => array( 'Verwiezingen_naor_disse_zied' ),
        'Withoutinterwiki'          => array( 'Gien_interwiki' ),
 );
 
@@ -581,8 +597,6 @@ $1",
 'ok' => 'Best',
 'retrievedfrom' => 'Van "$1"',
 'youhavenewmessages' => 'Je hebben $1 ($2).',
-'newmessageslink' => 'nieje berichten',
-'newmessagesdifflink' => 'verschil mit de veurige versie',
 'youhavenewmessagesfromusers' => 'Je hebben $1 van {{PLURAL:$3|n aandere gebruker|$3 gebrukers}} ($2).',
 'youhavenewmessagesmanyusers' => 'Je hebben $1 van n bulte gebrukers ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|n niej bericht|nieje berichten}}',
@@ -1423,7 +1437,6 @@ Waorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}
 'preferences' => 'Veurkeuren',
 'mypreferences' => 'Mien veurkeuren',
 'prefs-edits' => 'Antal bewarkingen:',
-'prefsnologin' => 'Niet an-meld',
 'changepassword' => 'Wachtwoord wiezigen',
 'prefs-skin' => '{{SITENAME}}-uterlik',
 'skin-preview' => 'bekieken',
@@ -1723,6 +1736,7 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'recentchanges-label-minor' => 'Dit is n kleine wieziging',
 'recentchanges-label-bot' => 'Disse bewarking is uutevoerd deur n bot',
 'recentchanges-label-unpatrolled' => 'Disse bewarking is nog niet nao-ekeken',
+'recentchanges-legend-newpage' => '$1 - nieje pagina',
 'rcnote' => "Hieronder {{PLURAL:$1|steet de leste bewarking|staon de leste '''$1''' bewarkingen}} van de aofgeleupen {{PLURAL:$2|dag|'''$2''' dagen}} (per: $5, $4).",
 'rcnotefrom' => 'Dit bin de wiezigingen sinds <b>$2</b> (maximum van <b>$1</b> wiezigingen).',
 'rclistfrom' => 'Bekiek wiezigingen vanaof $1',
@@ -4151,4 +4165,17 @@ Aanders ku\'j oek t eenvoudige formulier hieronder gebruken. Joew kommentaar zal
 'limitreport-expansiondepth' => 'Hoogste uutbreidingsdiepte',
 'limitreport-expensivefunctioncount' => 'Antal kostbaore parserfunksies',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Mallen substitueren',
+'expand_templates_intro' => 'Disse spesiale zied leest de op-egeven tekste en substitueert rekursief alle mallen in de tekste. Oek ondersteunde parserfunksies zo as <code><nowiki>{{</nowiki>#language:…}}</code> en variabels zo as <nowiki>{{</nowiki>CURRENTDAY}}&mdash. Zwat alle teksten tussen dubbelde krulhaken wörden esubstitueerd.',
+'expand_templates_title' => 'Titel, veur {{FULLPAGENAME}}, enz.:',
+'expand_templates_input' => 'Invoertekste:',
+'expand_templates_output' => 'Resultaot',
+'expand_templates_xml_output' => 'XML-uutvoer',
+'expand_templates_ok' => 'Oké',
+'expand_templates_remove_comments' => 'Opmarking vorthaolen',
+'expand_templates_remove_nowiki' => 'Etiketten <nowiki> in resultaot onderdrokken',
+'expand_templates_generate_xml' => 'XML-parserboom bekieken',
+'expand_templates_preview' => 'Naokieken',
+
 );
index 7ac459c..a998926 100644 (file)
@@ -331,8 +331,6 @@ $1',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => ' "$1" बाट निकालिएको',
 'youhavenewmessages' => 'तपाईंको लागि ($2) मा  $1 छ ।',
-'newmessageslink' => 'नयाँ सन्देशहरू',
-'newmessagesdifflink' => 'आखिरी परिवर्तन',
 'youhavenewmessagesfromusers' => 'तपाईंको लागि  {{PLURAL:$3|प्रयोगकर्ता|$3 प्रयोगकर्ताहरु}} ($2) बाट $1',
 'youhavenewmessagesmanyusers' => 'तपाईँलाई धेरै प्रयोगकर्ताहरू($2) बाट $1 छ ।',
 'newmessageslinkplural' => '{{PLURAL:$1|नयाँ सन्देश|नयाँ सन्देशहरू}}',
@@ -1111,7 +1109,6 @@ $1",
 'preferences' => 'रोजाईहरू',
 'mypreferences' => 'प्राथमिकताहरु',
 'prefs-edits' => 'सम्पादन संख्या:',
-'prefsnologin' => 'प्रवेश (लग ईन) नगरिएको',
 'changepassword' => 'पासवर्ड परिवर्तन गर्नुहोस्',
 'prefs-skin' => 'काँचुली',
 'skin-preview' => 'पूर्वावलोकन',
@@ -1389,6 +1386,7 @@ HTML ट्यागहरु जाँच्नुहोस् ।',
 'recentchanges-label-minor' => 'यो साधारण सम्पादन हो',
 'recentchanges-label-bot' => 'यो सम्पादन बोट द्वारा गरिएको थियो',
 'recentchanges-label-unpatrolled' => 'यो सम्पादन अहिले सम्म पट्रोल गरिएको छैन',
+'recentchanges-legend-newpage' => '$1 - नयाँ पृष्ठ',
 'rcnote' => "तल पछिल्ला {{PLURAL:$2|day|'''$2''' दिनहरु}} मा  $5, $4 सम्म भएका {{PLURAL:$1|is '''1''' change|पछिल्ला '''$1''' परिवर्तनहरु}} देखाइएको छ ।",
 'rcnotefrom' => "'''$2''' देखिका परिवर्तनहरु तल ('''$1''' सम्मका देखाइन्छ)।",
 'rclistfrom' => '$1 देखिका नयाँ परिवर्तनहरू देखाउनु',
index 54e018d..3119f64 100644 (file)
@@ -178,7 +178,8 @@ $magicWords = array(
        'img_center'                => array( '1', 'gecentreerd', 'center', 'centre' ),
        'img_framed'                => array( '1', 'omkaderd', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'kaderloos', 'frameless' ),
-       'img_page'                  => array( '1', 'pagina=$1', 'pagina $1', 'page=$1', 'page $1' ),
+       'img_lang'                  => array( '1', 'taal=$1', 'lang=$1' ),
+       'img_page'                  => array( '1', 'pagina=$1', 'pagina_$1', 'page=$1', 'page $1' ),
        'img_upright'               => array( '1', 'rechtop', 'rechtop=$1', 'rechtop$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'rand', 'border' ),
        'img_baseline'              => array( '1', 'grondlijn', 'baseline' ),
@@ -188,6 +189,7 @@ $magicWords = array(
        'img_bottom'                => array( '1', 'beneden', 'bottom' ),
        'img_text_bottom'           => array( '1', 'tekst-beneden', 'text-bottom' ),
        'img_link'                  => array( '1', 'koppeling=$1', 'verwijzing=$1', 'link=$1' ),
+       'img_class'                 => array( '1', 'klasse=$1', 'class=$1' ),
        'sitename'                  => array( '1', 'SITENAAM', 'SITENAME' ),
        'ns'                        => array( '0', 'NR:', 'NS:' ),
        'nse'                       => array( '0', 'NRE:', 'NSE:' ),
@@ -214,6 +216,7 @@ $magicWords = array(
        'revisionyear'              => array( '1', 'VERSIEJAAR', 'REVISIONYEAR' ),
        'revisiontimestamp'         => array( '1', 'VERSIETIJD', 'REVISIONTIMESTAMP' ),
        'revisionuser'              => array( '1', 'VERSIEGEBRUIKER', 'REVISIONUSER' ),
+       'revisionsize'              => array( '1', 'VERSIEGROOTTE', 'REVISIONSIZE' ),
        'plural'                    => array( '0', 'MEERVOUD:', 'PLURAL:' ),
        'fullurl'                   => array( '0', 'VOLLEDIGEURL:', 'FULLURL:' ),
        'fullurle'                  => array( '0', 'VOLLEDIGEURLE:', 'FULLURLE:' ),
@@ -268,12 +271,12 @@ $magicWords = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'ActieveGebruikers' ),
        'Allmessages'               => array( 'AlleBerichten', 'Systeemberichten' ),
+       'AllMyUploads'              => array( 'AlMijnUploads' ),
        'Allpages'                  => array( 'AllePaginas', 'AllePagina’s', 'AllePagina\'s' ),
        'Ancientpages'              => array( 'OudstePaginas', 'OudstePagina’s', 'OudstePagina\'s' ),
        'Badtitle'                  => array( 'OnjuistePaginanaam' ),
        'Blankpage'                 => array( 'LegePagina' ),
        'Block'                     => array( 'Blokkeren', 'IPblokkeren', 'BlokkeerIP', 'BlokkeerIp' ),
-       'Blockme'                   => array( 'BlokkeerMij', 'MijBlokkeren' ),
        'Booksources'               => array( 'Boekbronnen', 'Boekinformatie' ),
        'BrokenRedirects'           => array( 'GebrokenDoorverwijzingen' ),
        'Categories'                => array( 'Categorieën' ),
@@ -285,10 +288,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'GebruikerAanmaken' ),
        'Deadendpages'              => array( 'VerwijslozePaginas', 'VerwijslozePagina’s', 'VerwijslozePagina\'s' ),
        'DeletedContributions'      => array( 'VerwijderdeBijdragen' ),
-       'Disambiguations'           => array( 'Doorverwijzingen' ),
        'DoubleRedirects'           => array( 'DubbeleDoorverwijzingen' ),
        'EditWatchlist'             => array( 'VolglijstBewerken' ),
        'Emailuser'                 => array( 'GebruikerE-mailen', 'E-mailGebruiker' ),
+       'ExpandTemplates'           => array( 'SjablonenSubstitueren' ),
        'Export'                    => array( 'Exporteren' ),
        'Fewestrevisions'           => array( 'MinsteVersies', 'MinsteHerzieningen', 'MinsteRevisies' ),
        'FileDuplicateSearch'       => array( 'BestandsduplicatenZoeken' ),
@@ -332,10 +335,12 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'BeveiligdePaginas', 'BeveiligdePagina\'s', 'BeschermdePaginas', 'BeschermdePagina’s', 'BeschermdePagina\'s' ),
        'Protectedtitles'           => array( 'BeveiligdeTitels', 'BeschermdeTitels' ),
        'Randompage'                => array( 'Willekeurig', 'WillekeurigePagina' ),
+       'RandomInCategory'          => array( 'WillekeurigeUitCategorie' ),
        'Randomredirect'            => array( 'WillekeurigeDoorverwijzing' ),
        'Recentchanges'             => array( 'RecenteWijzigingen' ),
        'Recentchangeslinked'       => array( 'RecenteWijzigingenGelinkt', 'VerwanteWijzigingen' ),
        'Redirect'                  => array( 'Doorverwijzen' ),
+       'ResetTokens'               => array( 'TokensOpnieuwInstellen' ),
        'Revisiondelete'            => array( 'VersieVerwijderen', 'HerzieningVerwijderen', 'RevisieVerwijderen' ),
        'Search'                    => array( 'Zoeken' ),
        'Shortpages'                => array( 'KortePaginas', 'KortePagina’s', 'KortePagina\'s' ),
@@ -646,12 +651,10 @@ Meer informatie is beschikbaar op de pagina [[Special:Version|softwareversie]].'
 'ok' => 'OK',
 'retrievedfrom' => 'Overgenomen van "$1"',
 'youhavenewmessages' => 'U hebt $1 ($2).',
-'newmessageslink' => 'nieuwe berichten',
-'newmessagesdifflink' => 'laatste wijziging',
 'youhavenewmessagesfromusers' => 'U heeft $1 van {{PLURAL:$3|een andere gebruiker|$3 gebruikers}} ($2).',
 'youhavenewmessagesmanyusers' => 'U heeft $1 van een groot aantal gebruikers ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|een nieuw bericht|nieuwe berichten}}',
-'newmessagesdifflinkplural' => 'laatste {{PLURAL:$1|wijziging|wijzigingen}}',
+'newmessageslinkplural' => '{{PLURAL:$1|een nieuw bericht|999=nieuwe berichten}}',
+'newmessagesdifflinkplural' => 'laatste {{PLURAL:$1|wijziging|999=wijzigingen}}',
 'youhavenewmessagesmulti' => 'U hebt nieuwe berichten op $1',
 'editsection' => 'bewerken',
 'editold' => 'bewerken',
@@ -785,7 +788,7 @@ De opgegeven reden is "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Ongeldige titel met naamruimte "$2" en tekst "$3"',
 'invalidtitle-unknownnamespace' => 'Ongeldige titel met onbekend naamruimtenummer $1 en tekst "$2"',
 'exception-nologin' => 'Niet aangemeld',
-'exception-nologin-text' => 'Om deze pagina te bekijken of deze handeling uit te kunnen voeren moet u [[Special:Userlogin|aangemeld]] zijn bij deze wiki.',
+'exception-nologin-text' => '[[Special:Userlogin|Meld u aan]] om deze pagina te bekijken of deze handeling uit te voeren.',
 'exception-nologin-text-manual' => 'U moet $1 om deze pagina te kunnen bekijken of de handeling uit te voeren.',
 
 # Virus scanner
@@ -833,7 +836,7 @@ Vergeet niet uw [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te pass
 'gotaccount' => 'Hebt u al een gebruikersnaam? $1.',
 'gotaccountlink' => 'Aanmelden',
 'userlogin-resetlink' => 'Bent u uw aanmeldgegevens vergeten?',
-'userlogin-resetpassword-link' => 'Uw wachtwoord opnieuw instellen',
+'userlogin-resetpassword-link' => 'Wachtwoord vergeten?',
 'helplogin-url' => 'Help:Aanmelden',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hulp bij aanmelden]]',
 'userlogin-loggedin' => 'U bent al aangemeld als {{GENDER:$1|$1}}.
@@ -1361,15 +1364,16 @@ U kunt deze verschillen bekijken. Er kunnen details te vinden zijn in het [{{ful
 'revdelete-text' => "'''Verwijderde bewerkingen zijn zichtbaar in de geschiedenis en logboeken, maar delen van de inhoud zijn niet langer publiek toegankelijk.'''
 Andere beheerders van {{SITENAME}} kunnen de verborgen inhoud benaderen en de verwijdering ongedaan maken met behulp van dit formulier, tenzij er aanvullende beperkingen gelden die zijn ingesteld door de systeembeheerder.",
 'revdelete-confirm' => 'Bevestig dat u dit wilde doen, dat u de consequenties begrijpt en dat u dit doet in overeenstemming met het geldende [[{{MediaWiki:Policy-url}}|beleid]].',
-'revdelete-suppress-text' => "Versies verbergen dient '''alleen''' gebruikt te worden in de volgende gevallen:
-* Ongepaste persoonlijke informatie
-*: ''woonadres, telefoonnummers, Burger Service Nummers, enzovoort.''",
+'revdelete-suppress-text' => "Gebruik versies verbergen '''alleen''' in de volgende gevallen:
+* Mogelijk smadelijke informatie;
+* Ongepaste persoonlijke gegevens, zoals:
+*: ''adres, telefoonnummers, Burger Service Nummers, enzovoort.''",
 'revdelete-legend' => 'Zichtbaarheidsbeperkingen instellen',
-'revdelete-hide-text' => 'Bewerkte tekst verbergen',
+'revdelete-hide-text' => 'Versietekst',
 'revdelete-hide-image' => 'Bestandsinhoud verbergen',
 'revdelete-hide-name' => 'Handeling en doel verbergen',
-'revdelete-hide-comment' => 'Bewerkingssamenvatting verbergen',
-'revdelete-hide-user' => 'Gebruikersnaam/IP-adres van de gebruiker verbergen',
+'revdelete-hide-comment' => 'Bewerkingssamenvatting',
+'revdelete-hide-user' => 'Gebruikersnaam of IP-adres van de gebruiker',
 'revdelete-hide-restricted' => 'Deze beperkingen ook op beheerders toepassen',
 'revdelete-radio-same' => '(niet wijzigen)',
 'revdelete-radio-set' => 'Verborgen',
@@ -1534,7 +1538,6 @@ De gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.',
 'preferences' => 'Voorkeuren',
 'mypreferences' => 'Voorkeuren',
 'prefs-edits' => 'Aantal bewerkingen:',
-'prefsnologin' => 'Niet aangemeld',
 'prefsnologintext2' => 'U moet $1 om voorkeuren in te stellen.',
 'changepassword' => 'Wachtwoord wijzigen',
 'prefs-skin' => 'Vormgeving',
@@ -1834,10 +1837,13 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'recentchanges-summary' => 'Op deze pagina kunt u de recentste wijzigingen in deze wiki bekijken.',
 'recentchanges-noresult' => 'Er zijn in deze periode geen wijzigingen gemaakt die aan de criteria voldoen.',
 'recentchanges-feed-description' => 'Met deze feed kunt u de recentste wijzigingen in deze wiki bekijken.',
-'recentchanges-label-newpage' => 'Met deze bewerking is een nieuwe pagina aangemaakt',
+'recentchanges-label-newpage' => 'Met deze bewerking is een nieuwe pagina aangemaakt.',
 'recentchanges-label-minor' => 'Dit is een kleine bewerking',
 'recentchanges-label-bot' => 'Deze bewerking is uitgevoerd door een bot',
 'recentchanges-label-unpatrolled' => 'Deze bewerking is nog niet gecontroleerd',
+'recentchanges-label-plusminus' => 'Deze paginagrootte is met dit aantal bytes gewijzigd',
+'recentchanges-legend-newpage' => "Zie ook de [[Special:NewPages|Lijst met nieuwe pagina's]].",
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "Hieronder {{PLURAL:$1|staat de laatste bewerking|staan de laatste '''$1''' bewerkingen}} in de laatste {{PLURAL:$2|dag|'''$2''' dagen}}, op $4 om $5.",
 'rcnotefrom' => "Wijzigingen sinds '''$2''' (met een maximum van '''$1''' wijzigingen).",
 'rclistfrom' => 'Wijzigingen bekijken vanaf $1',
@@ -4373,4 +4379,21 @@ Anders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt
 'limitreport-expansiondepth' => 'Hoogste uitbreidingsdiepte',
 'limitreport-expensivefunctioncount' => 'Aantal kostbare parserfuncties',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Sjablonen substitueren',
+'expand_templates_intro' => 'Deze speciale pagina leest de opgegeven tekst in en substitueert recursief alle sjablonen in de tekst.
+Het substitueert ook alle parserfuncties zoals
+<code><nowiki>{{</nowiki>#language:…}}</code> en
+variabelen als <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Vrijwel alle tekst tussen dubbele accolades wordt gesubstitueerd.',
+'expand_templates_title' => 'Contexttitel, voor {{FULLPAGENAME}}, enzovoort:',
+'expand_templates_input' => 'Invoertekst:',
+'expand_templates_output' => 'Resultaat',
+'expand_templates_xml_output' => 'XML-uitvoer',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Opmerkingen verwijderen',
+'expand_templates_remove_nowiki' => 'Tags <nowiki> in resultaat onderdrukken',
+'expand_templates_generate_xml' => 'XML-parserboom bekijken',
+'expand_templates_preview' => 'Voorvertoning',
+
 );
index b8ff13a..d9498da 100644 (file)
@@ -217,23 +217,23 @@ $namespaceNames = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'Verksame_brukarar', 'Aktive_brukarar' ),
        'Allmessages'               => array( 'Alle_systemmeldingar' ),
+       'AllMyUploads'              => array( 'Alle_opplastingane_mine' ),
        'Allpages'                  => array( 'Alle_sider' ),
        'Ancientpages'              => array( 'Gamle_sider' ),
        'Badtitle'                  => array( 'Dårleg_tittel' ),
        'Blankpage'                 => array( 'Tom_side' ),
        'Block'                     => array( 'Blokker' ),
-       'Blockme'                   => array( 'Blokker_meg' ),
        'Booksources'               => array( 'Bokkjelder' ),
        'BrokenRedirects'           => array( 'Blindvegsomdirigeringar' ),
        'Categories'                => array( 'Kategoriar' ),
        'ChangeEmail'               => array( 'Endra_e-post', 'Endre_e-post' ),
        'ChangePassword'            => array( 'Nullstill_passord' ),
+       'ComparePages'              => array( 'Samanlikna_sider', 'Samanlikne_sider', 'Samanlikn_sider' ),
        'Confirmemail'              => array( 'Stadfest_e-postadresse' ),
        'Contributions'             => array( 'Bidrag' ),
        'CreateAccount'             => array( 'Opprett_konto' ),
        'Deadendpages'              => array( 'Blindvegsider' ),
        'DeletedContributions'      => array( 'Sletta_brukarbidrag' ),
-       'Disambiguations'           => array( 'Fleirtydingssider' ),
        'DoubleRedirects'           => array( 'Doble_omdirigeringar' ),
        'EditWatchlist'             => array( 'Endra_overvakingsliste', 'Endre_overvakingsliste' ),
        'Emailuser'                 => array( 'E-post' ),
@@ -243,8 +243,9 @@ $specialPageAliases = array(
        'Filepath'                  => array( 'Filstig', 'Filsti' ),
        'Import'                    => array( 'Importer' ),
        'Invalidateemail'           => array( 'Gjer_e-post_ugyldig' ),
+       'JavaScriptTest'            => array( 'Utrøyning_av_JavaScript', 'JavaScript-test' ),
        'BlockList'                 => array( 'Blokkeringsliste' ),
-       'LinkSearch'                => array( 'Lenkjesøk' ),
+       'LinkSearch'                => array( 'Lenkjesøk', 'Lenkesøk' ),
        'Listadmins'                => array( 'Administratorliste', 'Administratorar' ),
        'Listbots'                  => array( 'Bottliste', 'Bottar', 'Robotliste', 'Robotar' ),
        'Listfiles'                 => array( 'Filliste' ),
@@ -259,6 +260,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIME-søk' ),
        'Mostcategories'            => array( 'Flest_kategoriar' ),
        'Mostimages'                => array( 'Mest_brukte_filer' ),
+       'Mostinterwikis'            => array( 'Flest_interwikilenkjer', 'Mest_interwiki' ),
        'Mostlinked'                => array( 'Mest_lenka_sider', 'Mest_lenkja_sider' ),
        'Mostlinkedcategories'      => array( 'Mest_brukte_kategoriar' ),
        'Mostlinkedtemplates'       => array( 'Mest_brukte_malar' ),
@@ -591,8 +593,6 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Henta frå «$1»',
 'youhavenewmessages' => 'Du har $1 ($2).',
-'newmessageslink' => 'nye meldingar',
-'newmessagesdifflink' => 'sjå skilnad',
 'youhavenewmessagesfromusers' => 'Du har $1 frå {{PLURAL:$3|ein annan brukar| $3 brukarar}} ($2).',
 'youhavenewmessagesmanyusers' => 'Du har $1 frå mange brukarar ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ei ny melding|nye meldingar}}',
@@ -1012,9 +1012,9 @@ Det siste elementet i blokkeringsloggen er oppgjeve nedanfor:',
 * '''Internet Explorer:''' Haldt nede ''Ctrl'' medan du klikkar ''Oppdater'', eller trykk ''Ctrl-F5.''
 * '''Opera:''' Tøm mellomlageret i ''Verktøy → Innstillingar''.",
 'usercssyoucanpreview' => "'''Tips:''' Bruk «{{int:showpreview}}»-knappen for å teste den nye CSS- eller JavaScript-koden din før du lagrar.",
-'userjsyoucanpreview' => "''Tips:''' Bruk «{{int:showpreview}}»-knappen for å teste den nye CSS- eller JavaScript-koden din før du lagrar.",
+'userjsyoucanpreview' => "'''Tips:''' Bruk «{{int:showpreview}}»-knappen for å teste den nye CSS- eller JavaScript-koden din før du lagrar.",
 'usercsspreview' => "'''Hugs at dette berre er ei førehandsvising av din eigen CSS og at han ikkje er lagra enno!'''",
-'userjspreview' => "'''Hugs at du berre testar ditt eige JavaScript, det har ikkje vorte lagra enno!!'''",
+'userjspreview' => "'''Hugs at du berre testar eller førehandsviser brukar-JavaScript-et ditt. Det har ikkje vorte lagra enno!'''",
 'sitecsspreview' => "'''Hugs at du berre førehandsviser dette stilarket. '''
 '''Det er ikkje lagra enno!'''",
 'sitejspreview' => "'''Hugs at du berre førehandsviser denne JavaScript-koden.'''
@@ -1234,8 +1234,8 @@ Andre administratorar på {{SITENAME}} kan framleis sjå det gøymde innhaldet o
 'revdelete-hide-user' => 'Gøym brukarnamn/IP-adresse',
 'revdelete-hide-restricted' => 'Løyn data frå administratorar slik som med andre brukarar',
 'revdelete-radio-same' => '(ikkje endra)',
-'revdelete-radio-set' => 'Ja',
-'revdelete-radio-unset' => 'Nei',
+'revdelete-radio-set' => 'Løynd',
+'revdelete-radio-unset' => 'Synleg',
 'revdelete-suppress' => 'Fjern informasjon frå administratorar også',
 'revdelete-unsuppress' => 'Fjern avgrensingane på dei attoppretta versjonane',
 'revdelete-log' => 'Årsak:',
@@ -1392,7 +1392,6 @@ Ver merksam på at registra deira kan vera utdaterte.',
 'preferences' => 'Innstillingar',
 'mypreferences' => 'Innstillingar',
 'prefs-edits' => 'Tal på endringar:',
-'prefsnologin' => 'Ikkje innlogga',
 'changepassword' => 'Skift passord',
 'prefs-skin' => 'Drakt',
 'skin-preview' => 'førehandsvis',
@@ -1675,6 +1674,7 @@ Denne informasjonen vil vera offentleg.',
 'recentchanges-label-minor' => 'Endringa er småplukk',
 'recentchanges-label-bot' => 'Denne endringa vart gjort av ein bot',
 'recentchanges-label-unpatrolled' => 'Endringa er ikkje patruljert enno',
+'recentchanges-legend-newpage' => '$1 – ny side',
 'rcnote' => "Nedanfor er {{PLURAL:$1|den siste endringa gjord|dei siste '''$1''' endringane gjorde}} {{PLURAL:$2|den siste dagen|dei siste '''$2''' dagane}}, for $4, kl. $5.",
 'rcnotefrom' => "Nedanfor vert opp til '''$1''' endringar sidan  ''' $2''' viste.",
 'rclistfrom' => 'Vis nye endringar sidan $1',
@@ -3158,7 +3158,7 @@ $1',
 'svg-long-desc' => 'SVG-fil, standardoppløysing: $1 × $2 pikslar, filstorleik: $3',
 'svg-long-desc-animated' => 'Animert SVG-fil, standardoppløysing $1 × $2 pikslar, filstorleik: $3',
 'svg-long-error' => 'Ugild SVG-fil: $1',
-'show-big-image' => 'Full oppløysing',
+'show-big-image' => 'Opphavleg fil',
 'show-big-image-preview' => 'Storleik på førehandsvising: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Anna oppløysing|Andre oppløysingar}}: $1.',
 'show-big-image-size' => '$1 × $2 pikslar',
@@ -4057,4 +4057,21 @@ Om ikkje kan du nytta det enkle skjemaet under. Merknaden din vert lagd til på
 'limitreport-expansiondepth' => 'Største utvidingsdjupna',
 'limitreport-expensivefunctioncount' => 'Tal på dyre analysefunksjonar',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Utvid malar',
+'expand_templates_intro' => 'Denne sida tek ein tekst og utvider alle malar som er bruka i teksten.
+Ho utvider òg alle funksjonar som
+<nowiki>{{</nowiki>#language:…}}, og variablar som
+<nowiki>{{</nowiki>CURRENTDAY}}&mdash; bortimot alt som står i dobbelte klammeparentesar.
+Dette gjer ho ved å kalla dei relevante parsersetega frå MediaWiki sjølv.',
+'expand_templates_title' => 'Konteksttittel, for {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Inntekst:',
+'expand_templates_output' => 'Resultat',
+'expand_templates_xml_output' => 'XML-resultat',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Fjern kommentarar',
+'expand_templates_remove_nowiki' => 'Ikkje vis <nowiki>-merke i resultatet',
+'expand_templates_generate_xml' => 'Vis parsertre som XML',
+'expand_templates_preview' => 'Førehandsvising',
+
 );
index c22a78b..c2edf96 100644 (file)
@@ -253,8 +253,6 @@ $messages = array(
 
 'retrievedfrom' => 'Le tšwa go "$1"',
 'youhavenewmessages' => 'O na le $1 ($2).',
-'newmessageslink' => 'ya melaetša ye mefsa',
-'newmessagesdifflink' => 'phetogo ya mafelelo',
 'newmessagesdifflinkplural' => 'l{{PLURAL:$1|Phetogo tša|Diphetogo ya}}go feta',
 'youhavenewmessagesmulti' => 'O nale melaetša ye mefsa go $1',
 'editsection' => 'lokiša',
@@ -596,7 +594,6 @@ Leka go fetleka ka go ngwala ''all:'' go fetleka mateng ka moka, goba o šumiše
 'preferences' => 'Dikgatlhegelo',
 'mypreferences' => 'Dikgatlhegelo tša ka',
 'prefs-edits' => 'Palo ya diphetogo:',
-'prefsnologin' => 'Ga wa tsena',
 'changepassword' => 'Fetola ditlhaka-tša-siphiri',
 'skin-preview' => 'Ponopele',
 'prefs-datetime' => 'Tšatšikgwedi le nako',
@@ -1272,4 +1269,7 @@ letlakala la seswantšho ge tafola ya metadata e bulwa. Tše dingwe tša di ''fi
 # Special:Tags
 'tag-filter' => '[[Special:Tags|Tag]] "filter":',
 
+# Special:ExpandTemplates
+'expand_templates_output' => 'Phetho',
+
 );
index 9b8e1db..ca9df6d 100644 (file)
@@ -64,7 +64,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Paginas_ancianas' ),
        'Blankpage'                 => array( 'Pagina_blanca', 'PaginaBlanca' ),
        'Block'                     => array( 'Blocar', 'Blocatge' ),
-       'Blockme'                   => array( 'Blocatz_me', 'Blocatz-me' ),
        'Booksources'               => array( 'Obratge_de_referéncia', 'Obratges_de_referéncia' ),
        'BrokenRedirects'           => array( 'Redireccions_copadas', 'RedireccionsCopadas' ),
        'Categories'                => array( 'Categorias' ),
@@ -74,7 +73,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Crear_un_compte', 'CrearUnCompte', 'CrearCompte' ),
        'Deadendpages'              => array( 'Paginas_sul_camin_d\'enlòc' ),
        'DeletedContributions'      => array( 'Contribucions_escafadas', 'ContribucionsEscafadas' ),
-       'Disambiguations'           => array( 'Omonimia', 'Omonimias', 'Paginas_d\'omonimia' ),
        'DoubleRedirects'           => array( 'Redireccions_doblas', 'RedireccionsDoblas' ),
        'Emailuser'                 => array( 'Corrièr_electronic', 'Email', 'Emèl', 'Emèil' ),
        'Export'                    => array( 'Exportar', 'Exportacion' ),
@@ -566,8 +564,6 @@ $1",
 'ok' => "D'acòrdi",
 'retrievedfrom' => 'Recuperada de « $1 »',
 'youhavenewmessages' => 'Avètz $1 ($2).',
-'newmessageslink' => 'de messatges novèls',
-'newmessagesdifflink' => 'darrièr cambiament',
 'youhavenewmessagesfromusers' => "Avètz $1 {{PLURAL:$3|d'un autre utilizaire|de $3 autres utilizaires}} ($2).",
 'youhavenewmessagesmanyusers' => 'Avètz $1 de fòrça utilizaires ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|un novèl messatge|de novèls messatges}}',
@@ -1401,7 +1397,6 @@ Atencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.',
 'preferences' => 'Preferéncias',
 'mypreferences' => 'Preferéncias',
 'prefs-edits' => 'Nombre d’edicions :',
-'prefsnologin' => 'Vos sètz pas identificat(ada)',
 'prefsnologintext2' => "$1 per definir las preferéncias d'utilizaire.",
 'changepassword' => 'Modificacion del senhal',
 'prefs-skin' => 'Aparéncia',
@@ -1701,6 +1696,7 @@ Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagi
 'recentchanges-label-minor' => 'Aqueste cambiament es menor',
 'recentchanges-label-bot' => 'Aqueste cambiament es estat efectuat per un bòt.',
 'recentchanges-label-unpatrolled' => 'Aqueste cambiament es pas estat verificat encara.',
+'recentchanges-legend-newpage' => '$1 - pagina novèla',
 'rcnote' => 'Vaquí {{PLURAL:$1|lo darrièr cambiament|los $1 darrièrs cambiaments}} dempuèi {{PLURAL:$2|lo darrièr jorn|los <b>$2</b> darrièrs jorns}}, determinat{{PLURAL:$1||s}} lo $4, a $5.',
 'rcnotefrom' => "Vaquí los cambiaments efectuats dempuèi lo '''$2''' ('''$1''' al maximum).",
 'rclistfrom' => 'Afichar las modificacions novèlas dempuèi lo $1.',
@@ -4105,4 +4101,17 @@ Ensajatz la previsualizacion normala.',
 'limitreport-expansiondepth' => 'Mai granda prigondor d’espandiment',
 'limitreport-expensivefunctioncount' => 'Nombre de foncions d’analisi costosas',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Espandiment dels modèls',
+'expand_templates_intro' => 'Aquesta pagina permet de testar l’espandiment de modèls, que son desvolopats recursivament. Las foncions e las variablas predefinidas, coma <nowiki>{{</nowiki>#language:...}} e <nowiki>{{</nowiki>CURRENTDAY}} tanben son desvolopadas.',
+'expand_templates_title' => 'Títol de l’article, util per exemple se lo modèl utiliza {{FULLPAGENAME}} :',
+'expand_templates_input' => 'Picatz vòstre tèxte aicí :',
+'expand_templates_output' => 'Visualizatz lo resultat :',
+'expand_templates_xml_output' => 'Sortida XML',
+'expand_templates_ok' => "D'acòrdi",
+'expand_templates_remove_comments' => 'Suprimir los comentaris.',
+'expand_templates_remove_nowiki' => 'Suprimís los marcadors <nowiki> dins lo resultat',
+'expand_templates_generate_xml' => "Veire l'arborescéncia XML",
+'expand_templates_preview' => 'Previsualizacion',
+
 );
index f2b8fb2..652c970 100644 (file)
@@ -83,7 +83,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'ଖରାପନାମ' ),
        'Blankpage'                 => array( 'ଖାଲିପୃଷ୍ଠା' ),
        'Block'                     => array( 'ଅଟକାଇବେ', 'ଆଇପିଅଟକାଇବେ', 'ସଭ୍ୟଅଟକାଇବେ' ),
-       'Blockme'                   => array( 'ମୋତେଅଟକାଇବେ' ),
        'Booksources'               => array( 'ବହିସ୍ରୋତ' ),
        'BrokenRedirects'           => array( 'ଭଙ୍ଗାଲେଉଟାଣି' ),
        'Categories'                => array( 'ଶ୍ରେଣୀ' ),
@@ -95,7 +94,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'ଖାତାଖୋଲିବେ' ),
        'Deadendpages'              => array( 'ଆଗକୁରାହାନଥିବାପୃଷ୍ଠା' ),
        'DeletedContributions'      => array( 'ହଟାଇଦିଆଯାଇଥିବାଅବଦାନ' ),
-       'Disambiguations'           => array( 'ବହୁବିକଳ୍ପୀ' ),
        'DoubleRedirects'           => array( 'ଦୁଇଥରଲେଉଟାଣି' ),
        'EditWatchlist'             => array( 'ଧ୍ୟାନସୂଚୀବଦଳାଇବେ' ),
        'Emailuser'                 => array( 'ସଭ୍ୟଙ୍କୁମେଲକରିବେ' ),
@@ -530,8 +528,6 @@ $1',
 'ok' => 'ଠିକ ଅଛି',
 'retrievedfrom' => '"$1" ରୁ ଅଣାଯାଇଅଛି',
 'youhavenewmessages' => 'ଆପଣଙ୍କ ପାଇଁ $1 ($2)।',
-'newmessageslink' => 'ନୂଆ ମେସେଜ',
-'newmessagesdifflink' => 'ଶେଷ ବଦଳ',
 'youhavenewmessagesfromusers' => 'ଆପଣଙ୍କର {{PLURAL:$3|another user|$3 users}} ($2)ରୁ $1 ଅଛି ।',
 'youhavenewmessagesmanyusers' => 'ଆପଣଙ୍କର ବହୁତ ବ୍ୟବହାରକାରୀ($2)ମାନଙ୍କଠାରୁ $1 ଅଛି ।',
 'newmessageslinkplural' => '{{PLURAL:$1|ଏକ ନୂଆ ସନ୍ଦେଶ|ନୂଆ ସନ୍ଦେଶ}}',
@@ -1372,7 +1368,6 @@ $1",
 'preferences' => 'ପସନ୍ଦ',
 'mypreferences' => 'ପସନ୍ଦ',
 'prefs-edits' => 'ସମ୍ପାଦନା ସଂଖ୍ୟା:',
-'prefsnologin' => 'ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି',
 'changepassword' => 'ପାସୱର୍ଡ଼ ବଦଳାନ୍ତୁ',
 'prefs-skin' => 'ବହିରାବରଣ',
 'skin-preview' => 'ସାଇତା ଆଗରୁ ଦେଖଣା',
@@ -4035,4 +4030,11 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'duration-centuries' => '$1 {{PLURAL:$1|century|centuries}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
+# Special:ExpandTemplates
+'expand_templates_input' => 'ଇନପୁଟ ବିଷୟ:',
+'expand_templates_output' => 'ପରିଣାମ',
+'expand_templates_ok' => 'ଠିକ ଅଛି',
+'expand_templates_remove_comments' => 'ମତାମତ ହଟାନ୍ତୁ',
+'expand_templates_preview' => 'ଦେଖଣା',
+
 );
index ead85ea..a418993 100644 (file)
@@ -59,7 +59,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Æвзæрном' ),
        'Blankpage'                 => array( 'АфтидФарс' ),
        'Block'                     => array( 'Блок' ),
-       'Blockme'                   => array( 'НыблокМæКæн' ),
        'Booksources'               => array( 'ЧингуытыРавзæрæнтæ' ),
        'BrokenRedirects'           => array( 'ЦъæлРарвыстытæ' ),
        'Categories'                => array( 'Категоритæ' ),
@@ -71,7 +70,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'АккаунтСкæнын' ),
        'Deadendpages'              => array( 'ХæдбарФæрстæ' ),
        'DeletedContributions'      => array( 'ХафтБавæрд' ),
-       'Disambiguations'           => array( 'Бирæнысаниуæгджынтæ' ),
        'DoubleRedirects'           => array( 'ДывæрÆрвыстытæ' ),
        'EditWatchlist'             => array( 'ЦæстдардИвын' ),
        'Emailuser'                 => array( 'АрхайæгмæEmail' ),
@@ -447,8 +445,6 @@ $1',
 'pagetitle' => '$1 — {{SITENAME}}',
 'retrievedfrom' => 'Ист æрцыд {{grammar:ablative|"$1"}}',
 'youhavenewmessages' => 'Райстай $1 ($2).',
-'newmessageslink' => 'ног фыстæгтæ',
-'newmessagesdifflink' => 'фæстаг ивд',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|Æндæр архайæгæй|$3 архайæгæй}} дæм $1 æрцыд ($2).',
 'youhavenewmessagesmanyusers' => 'Бирæ архайæгæй дæм $1 æрцыдис ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ног фыстæг|ног фыстæджытæ}}',
@@ -1073,7 +1069,6 @@ ASCII нысæнттæм чи нæ хауы, уыдон ивыны бынаты
 'preferences' => 'Уагæвæрдтæ',
 'mypreferences' => 'Уагæвæрдтæ',
 'prefs-edits' => 'Ивдтыты нымæц:',
-'prefsnologin' => 'Системæйы нæ дæ',
 'changepassword' => 'Пароль ивæн',
 'prefs-skin' => 'Цъар',
 'skin-preview' => 'Разæркаст',
@@ -1868,4 +1863,8 @@ $3',
 'duration-centuries' => '$1 {{PLURAL:$1|æнус|æнусы}}',
 'duration-millennia' => '$1 {{PLURAL:$1|мин аз|мин азы}}',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Афтæ уæд!',
+'expand_templates_preview' => 'Разæркаст',
+
 );
index 84fd688..77f6c7b 100644 (file)
@@ -31,8 +31,8 @@ $namespaceNames = array(
        NS_MEDIA            => 'ਮੀਡੀਆ',
        NS_SPECIAL          => 'ਖ਼ਾਸ',
        NS_TALK             => 'ਗੱਲ-ਬਾਤ',
-       NS_USER             => 'ਵਰਤà©\8cਂਕਾਰ',
-       NS_USER_TALK        => 'ਵਰਤà©\8cਂਕਾਰ_ਗੱਲ-ਬਾਤ',
+       NS_USER             => 'ਵਰਤà©\8bਂਕਾਰ',
+       NS_USER_TALK        => 'ਵਰਤà©\8bਂਕਾਰ_ਗੱਲ-ਬਾਤ',
        NS_PROJECT_TALK     => '$1_ਗੱਲ-ਬਾਤ',
        NS_FILE             => 'ਤਸਵੀਰ',
        NS_FILE_TALK        => 'ਤਸਵੀਰ_ਗੱਲ-ਬਾਤ',
@@ -51,6 +51,8 @@ $namespaceAliases = array(
        'ਚਰਚਾ' => NS_TALK,
        'ਮੈਂਬਰ' => NS_USER,
        'ਮੈਂਬਰ_ਚਰਚਾ' => NS_USER_TALK,
+       'ਵਰਤੌਂਕਾਰ' => NS_USER,
+       'ਵਰਤੌਂਕਾਰ_ਗੱਲ-ਬਾਤ' => NS_USER_TALK,
        '$1_ਚਰਚਾ' => NS_PROJECT_TALK,
        'ਤਸਵੀਰ_ਚਰਚਾ' => NS_FILE_TALK,
        'ਮੀਡੀਆਵਿਕਿ' => NS_MEDIAWIKI,
@@ -64,24 +66,22 @@ $namespaceAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'ਸਰਗਰਮ_ਵਰਤੋਂਕਾਰ' ),
        'Allmessages'               => array( 'ਸਾਰੇ_ਸਨੇਹੇ' ),
-       'Allpages'                  => array( 'ਸਾਰà©\87_ਪੰਨੇ' ),
-       'Ancientpages'              => array( 'ਪà©\81ਰਾਣà©\87_ਪੰਨੇ' ),
+       'Allpages'                  => array( 'ਸਾਰà©\87_ਸਫ਼ੇ' ),
+       'Ancientpages'              => array( 'ਪà©\81ਰਾਣà©\87_ਸਫ਼ੇ' ),
        'Badtitle'                  => array( 'ਖ਼ਰਾਬ_ਸਿਰਲੇਖ' ),
-       'Blankpage'                 => array( 'à¨\96਼ਾਲà©\80_ਪੰਨਾ' ),
+       'Blankpage'                 => array( 'à¨\96਼ਾਲà©\80_ਸਫ਼ਾ' ),
        'Block'                     => array( 'ਪਾਬੰਦੀ_ਲਾਓ', 'IP_’ਤੇ_ਪਾਬੰਦੀ_ਲਾਓ', 'ਵਰਤੋਂਕਾਰ_’ਤੇ_ਪਾਬੰਦੀ_ਲਾਓ' ),
-       'Blockme'                   => array( 'ਮੇਰੇ_’ਤੇ_ਪਾਬੰਦੀ_ਲਾਓ' ),
        'Booksources'               => array( 'ਕਿਤਾਬ_ਸਰੋਤ' ),
        'BrokenRedirects'           => array( 'ਟੁੱਟੇ_ਰੀਡਿਰੈਕਟ' ),
        'Categories'                => array( 'ਸ਼੍ਰੇਣੀਆਂ' ),
        'ChangeEmail'               => array( 'ਈ-ਮੇਲ_ਬਦਲੋ' ),
        'ChangePassword'            => array( 'ਪਾਸਵਰਡ_ਬਦਲੋ', 'ਪਾਸਵਰਡ_ਰੀਸੈੱਟ_ਕਰੋ' ),
-       'ComparePages'              => array( 'ਪੰਨਿਆਂ_ਦੀ_ਤੁਲਨਾ_ਕਰੋ' ),
+       'ComparePages'              => array( 'ਸਫ਼ਿਆਂ_ਦੀ_ਤੁਲਨਾ_ਕਰੋ' ),
        'Confirmemail'              => array( 'ਈ-ਮੇਲ_ਤਸਦੀਕ_ਕਰੋ' ),
        'Contributions'             => array( 'ਯੋਗਦਾਨ' ),
        'CreateAccount'             => array( 'ਖਾਤਾ_ਬਣਾਓ' ),
-       'Deadendpages'              => array( 'ਬੰਦ_ਪੰਨੇ' ),
+       'Deadendpages'              => array( 'ਬੰਦ_ਸਫ਼ੇ' ),
        'DeletedContributions'      => array( 'ਮਿਟਾਏ_ਯੋਗਦਾਨ' ),
-       'Disambiguations'           => array( 'ਗੁੰਝਲਖੋਲ੍ਹ' ),
        'DoubleRedirects'           => array( 'ਦੂਹਰੇ_ਰੀਡਿਰੈਕਟ' ),
        'EditWatchlist'             => array( 'ਨਿਗਰਾਨੀ-ਲਿਸਟ_ਸੋਧੋ' ),
        'Emailuser'                 => array( 'ਵਰਤੋਂਕਾਰ_ਨੂੰ_ਈ-ਮੇਲ_ਕਰੋ' ),
@@ -92,62 +92,62 @@ $specialPageAliases = array(
        'Import'                    => array( 'ਆਯਾਤ' ),
        'Invalidateemail'           => array( 'ਗਲਤ_ਈ-ਮੇਲ_ਪਤਾ' ),
        'JavaScriptTest'            => array( 'ਜਾਵਾਸਕ੍ਰਿਪਟ_ਪਰਖ' ),
-       'BlockList'                 => array( 'ਪਾਬੰਦà©\80à¨\86à¨\82_ਦà©\80_ਸà©\82à¨\9aà©\80' ),
+       'BlockList'                 => array( 'ਪਾਬੰਦà©\80à¨\86à¨\82_ਦà©\80_ਲਿਸà¨\9f' ),
        'LinkSearch'                => array( 'ਲਿੰਕ_ਖੋਜੋ' ),
-       'Listadmins'                => array( 'ਪà©\8dਰਬੰਧà¨\95ਾà¨\82_ਦà©\80_ਸà©\82à¨\9aà©\80' ),
-       'Listbots'                  => array( 'ਬà©\8bà¨\9fਾà¨\82_ਦà©\80_ਸà©\82à¨\9aà©\80' ),
-       'Listfiles'                 => array( 'ਫ਼ਾà¨\88ਲਾà¨\82_ਦà©\80_ਸà©\82à¨\9aà©\80' ),
-       'Listgrouprights'           => array( 'ਵਰਤੋਂਕਾਰ_ਹੱਕ_ਸੂਚੀ' ),
-       'Listredirects'             => array( 'ਰà©\80ਡਿਰà©\88à¨\95à¨\9fਾà¨\82_ਦà©\80_ਸà©\82à¨\9aà©\80' ),
-       'Listusers'                 => array( 'ਵਰਤà©\8bà¨\82à¨\95ਾਰਾà¨\82_ਦà©\80_ਸà©\82à¨\9aà©\80' ),
+       'Listadmins'                => array( 'ਪà©\8dਰਬੰਧà¨\95ਾà¨\82_ਦà©\80_ਲਿਸà¨\9f' ),
+       'Listbots'                  => array( 'ਬà©\8bà¨\9fਾà¨\82_ਦà©\80_ਲਿਸà¨\9f' ),
+       'Listfiles'                 => array( 'ਫ਼ਾà¨\88ਲਾà¨\82_ਦà©\80_ਲਿਸà¨\9f' ),
+       'Listgrouprights'           => array( 'ਵਰਤੋਂਕਾਰ_ਹੱਕਾਂ_ਦੀ_ਲਿਸਟ' ),
+       'Listredirects'             => array( 'ਰà©\80ਡਿਰà©\88à¨\95à¨\9fਾà¨\82_ਦà©\80_ਲਿਸà¨\9f' ),
+       'Listusers'                 => array( 'ਵਰਤà©\8bà¨\82à¨\95ਾਰਾà¨\82_ਦà©\80_ਲਿਸà¨\9f' ),
        'Lockdb'                    => array( 'ਡੈਟਾਬੇਸ_’ਤੇ_ਤਾਲਾ_ਲਗਾਓ' ),
        'Log'                       => array( 'ਚਿੱਠਾ', 'ਚਿੱਠੇ' ),
-       'Lonelypages'               => array( 'à¨\87à¨\95ੱਲà©\87_ਪੰਨੇ' ),
-       'Longpages'                 => array( 'ਲੰਬà©\87_ਪੰਨੇ' ),
+       'Lonelypages'               => array( 'à¨\87à¨\95ੱਲà©\87_ਸਫ਼ੇ' ),
+       'Longpages'                 => array( 'ਲੰਬà©\87_ਸਫ਼ੇ' ),
        'MergeHistory'              => array( 'ਰਲਾਉਣ_ਦਾ_ਅਤੀਤ' ),
        'MIMEsearch'                => array( 'MIME_ਖੋਜੋ' ),
        'Mostcategories'            => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਸ਼੍ਰੇਣੀਆਂ' ),
        'Mostimages'                => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਜੁੜੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
        'Mostinterwikis'            => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਇੰਟਰਵਿਕੀ' ),
-       'Mostlinked'                => array( 'ਸਭ_ਤà©\8bà¨\82_ਵੱਧ_à¨\9cà©\81à©\9cà©\87_ਪੰਨੇ' ),
+       'Mostlinked'                => array( 'ਸਭ_ਤà©\8bà¨\82_ਵੱਧ_à¨\9cà©\81à©\9cà©\87_ਸਫ਼ੇ' ),
        'Mostlinkedcategories'      => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਜੁੜੀਆਂ_ਸ਼੍ਰੇਣੀਆਂ' ),
        'Mostlinkedtemplates'       => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਜੁੜੇ_ਫਰਮੇ' ),
        'Mostrevisions'             => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਰੀਵਿਜ਼ਨ' ),
        'Movepage'                  => array( 'ਸਿਰਲੇਖ_ਬਦਲੋ' ),
        'Mycontributions'           => array( 'ਮੇਰੇ_ਯੋਗਦਾਨ' ),
-       'Mypage'                    => array( 'ਮà©\87ਰਾ_ਪੰਨਾ' ),
+       'Mypage'                    => array( 'ਮà©\87ਰਾ_ਸਫ਼ਾ' ),
        'Mytalk'                    => array( 'ਮੇਰੀ_ਚਰਚਾ' ),
        'Myuploads'                 => array( 'ਮੇਰੇ_ਅੱਪਲੋਡ' ),
        'Newimages'                 => array( 'ਨਵੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
-       'Newpages'                  => array( 'ਨਵà©\87à¨\82_ਪੰਨੇ' ),
+       'Newpages'                  => array( 'ਨਵà©\87à¨\82_ਸਫ਼ੇ' ),
        'PasswordReset'             => array( 'ਪਾਸਵਰਡ_ਰੀਸੈੱਟ' ),
        'PermanentLink'             => array( 'ਪੱਕਾ_ਲਿੰਕ' ),
-       'Popularpages'              => array( 'ਮਸ਼ਹà©\82ਰ_ਪੰਨੇ' ),
+       'Popularpages'              => array( 'ਮਸ਼ਹà©\82ਰ_ਸਫ਼ੇ' ),
        'Preferences'               => array( 'ਪਸੰਦਾਂ' ),
        'Prefixindex'               => array( 'ਅਗੇਤਰ_ਤਤਕਰਾ' ),
-       'Protectedpages'            => array( 'ਸà©\81ਰੱà¨\96ਿà¨\85ਤ_ਪੰਨੇ' ),
+       'Protectedpages'            => array( 'ਸà©\81ਰੱà¨\96ਿà¨\85ਤ_ਸਫ਼ੇ' ),
        'Protectedtitles'           => array( 'ਸੁਰੱਖਿਅਤ_ਸਿਰਲੇਖ' ),
-       'Randompage'                => array( 'ਰਲਵਾà¨\82_ਪੰਨਾ' ),
+       'Randompage'                => array( 'ਰਲਵਾà¨\82_ਸਫ਼ਾ' ),
        'Randomredirect'            => array( 'ਸੁਰੱਖਿਅਤ_ਰੀਡਿਰੈਕਟ' ),
-       'Recentchanges'             => array( 'ਹਾਲ_\'ਚ_ਹੋਈਆਂ_ਤਬਦੀਲੀਆਂ' ),
+       'Recentchanges'             => array( 'ਹਾਲੀਆ_ਤਬਦੀਲੀਆਂ' ),
        'Recentchangeslinked'       => array( 'ਜੁੜੀਆਂ_ਤਾਜ਼ਾ_ਤਬਦੀਲੀਆਂ' ),
-       'Revisiondelete'            => array( 'ਰੀਵਿਜਨ_ਮਿਟਾਓ' ),
+       'Revisiondelete'            => array( 'ਰà©\80ਵਿà¨\9c਼ਨ_ਮਿà¨\9fਾà¨\93' ),
        'Search'                    => array( 'ਖੋਜੋ' ),
-       'Shortpages'                => array( 'à¨\9bà©\8bà¨\9fà©\87_ਪੰਨੇ' ),
-       'Specialpages'              => array( 'à¨\96਼ਾਸ_ਪੰਨੇ' ),
+       'Shortpages'                => array( 'à¨\9bà©\8bà¨\9fà©\87_ਸਫ਼ੇ' ),
+       'Specialpages'              => array( 'à¨\96਼ਾਸ_ਸਫ਼ੇ' ),
        'Statistics'                => array( 'ਅੰਕੜੇ' ),
        'Tags'                      => array( 'ਟੈਗ' ),
        'Unblock'                   => array( 'ਪਾਬੰਦੀ_ਹਟਾਓ' ),
        'Uncategorizedcategories'   => array( 'ਸ਼੍ਰੇਣੀਹੀਣ_ਸ਼੍ਰੇਣੀਆਂ' ),
        'Uncategorizedimages'       => array( 'ਸ਼੍ਰੇਣੀਹੀਣ_ਫ਼ਾਈਲਾਂ' ),
-       'Uncategorizedpages'        => array( 'ਸ਼à©\8dਰà©\87ਣà©\80ਹà©\80ਣ_ਪੰਨੇ' ),
+       'Uncategorizedpages'        => array( 'ਸ਼à©\8dਰà©\87ਣà©\80ਹà©\80ਣ_ਸਫ਼ੇ' ),
        'Uncategorizedtemplates'    => array( 'ਸ਼੍ਰੇਣੀਹੀਣ_ਫਰਮੇ' ),
        'Undelete'                  => array( 'ਅਣ-ਹਟਾਓਣ' ),
        'Unlockdb'                  => array( 'ਡੈਟਾਬੇਸ_ਖੋਲ੍ਹੋ' ),
        'Unusedcategories'          => array( 'ਅਣਵਰਤੀਆਂ_ਸ਼੍ਰੇਣੀਆਂ' ),
        'Unusedimages'              => array( 'ਅਣਵਰਤੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
        'Unusedtemplates'           => array( 'ਅਣਵਰਤੇ_ਫਰਮੇ' ),
-       'Unwatchedpages'            => array( 'ਬà©\87-ਨਿà¨\97ਰਾਨ_ਪੰਨੇ' ),
+       'Unwatchedpages'            => array( 'ਬà©\87-ਨਿà¨\97ਰਾਨ_ਸਫ਼ੇ' ),
        'Upload'                    => array( 'ਅੱਪਲੋਡ' ),
        'Userlogin'                 => array( 'ਵਰਤੋਂਕਾਰ_ਲਾਗਇਨ' ),
        'Userlogout'                => array( 'ਵਰਤੋਂਕਾਰ_ਲਾਗਆਊਟ' ),
@@ -155,10 +155,10 @@ $specialPageAliases = array(
        'Version'                   => array( 'ਰੂਪ' ),
        'Wantedcategories'          => array( 'ਚਾਹੀਦੀਆਂ_ਸ਼੍ਰੇਣੀਆਂ' ),
        'Wantedfiles'               => array( 'ਚਾਹੀਦੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
-       'Wantedpages'               => array( 'à¨\9aਾਹà©\80ਦà©\87_ਪੰਨੇ', 'ਟੁੱਟੇ_ਜੋੜ' ),
+       'Wantedpages'               => array( 'à¨\9aਾਹà©\80ਦà©\87_ਸਫ਼ੇ', 'ਟੁੱਟੇ_ਜੋੜ' ),
        'Wantedtemplates'           => array( 'ਚਾਹੀਦੇ_ਫਰਮੇ' ),
        'Watchlist'                 => array( 'ਨਿਗਰਾਨੀ-ਲਿਸਟ' ),
-       'Whatlinkshere'             => array( 'à¨\95ਿਹà©\9cà©\87_ਪੰਨੇ_ਇੱਥੇ_ਜੋੜਦੇ_ਹਨ' ),
+       'Whatlinkshere'             => array( 'à¨\95ਿਹà©\9cà©\87_ਸਫ਼ੇ_ਇੱਥੇ_ਜੋੜਦੇ_ਹਨ' ),
        'Withoutinterwiki'          => array( 'ਬਿਨਾਂ_ਇੰਟਰਵਿਕੀਆਂ_ਵਾਲੇ' ),
 );
 
@@ -461,8 +461,6 @@ $1',
 'ok' => 'ਠੀਕ ਹੈ',
 'retrievedfrom' => '"$1" ਤੋਂ ਲਿਆ',
 'youhavenewmessages' => 'ਤੁਹਾਡੇ ਲਈ $1। ($2)',
-'newmessageslink' => 'ਨਵੇਂ ਸੁਨੇਹੇ',
-'newmessagesdifflink' => 'ਆਖ਼ਰੀ ਤਬਦੀਲੀ',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|ਇੱਕ ਵਰਤੋਂਕਾਰ|$3 ਵਰਤੋਂਕਾਰਾਂ}} ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
 'youhavenewmessagesmanyusers' => 'ਕਈ ਯੂਜ਼ਰ ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
 'newmessageslinkplural' => '{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|ਨਵੇਂ ਸੁਨੇਹੇ}} {{PLURAL:$1|ਹੈ|ਹਨ}}',
@@ -517,6 +515,7 @@ $1',
 # General errors
 'error' => 'ਗ਼ਲਤੀ',
 'databaseerror' => 'ਡਾਟਾਬੇਸ ਗਲਤੀ',
+'databaseerror-error' => 'ਦੋਸ਼: $1',
 'laggedslavemode' => "'''ਖ਼ਬਰਦਾਰ:''' ਹੋ ਸਕਦਾ ਹੈ ਸਫ਼ੇ ਵਿਚ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਸ਼ਾਮਲ ਨਾ ਹੋਣ।",
 'readonly' => 'ਡਾਟਾਬੇਸ ਨੂੰ ਤਾਲ਼ਾ ਲੱਗਿਆ ਹੋਇਆ ਹੈ',
 'enterlockreason' => 'ਤਾਲਾ-ਬੰਦੀ ਲਈ ਕਾਰਨ ਦਾਖ਼ਲ ਕਰੋ, ਨਾਲ਼ ਹੀ ਤਾਲਾ-ਬੰਦੀ ਦੇ ਰਿਲੀਜ਼ ਹੋਣ ਦਾ ਅੰਦਾਜ਼ਨ ਵਕਤ',
@@ -634,6 +633,7 @@ $2',
 'userlogin-resetpassword-link' => 'ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਗਏ ਹੋ?',
 'helplogin-url' => 'Help: ਲਾਗਇਨ ਕਰਨਾ',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ਲਾਗਇਨ ਹੋਣ ਲਈ ਮੱਦਦ]]',
+'userlogin-createanother' => 'ਹੋਰ ਖਾਤਾ ਬਣਾਓ',
 'createacct-join' => 'ਆਪਣੀ ਜਾਣਕਾਰੀ ਹੇਠਾਂ ਦਿਉ।',
 'createacct-another-join' => 'ਆਪਣੇ ਅਕਾਊਂਟ ਦੀ ਜਾਣਕਾਰੀ ਹੇਠਾਂ ਦਿਉ।',
 'createacct-emailrequired' => 'ਈਮੇਲ ਪਤਾ',
@@ -696,7 +696,7 @@ $2',
 'acct_creation_throttle_hit' => 'ਤੁਹਾਡਾ IP ਪਤਾ ਵਰਤ ਕੇ ਆਉਣ ਵਾਲ਼ਿਆਂ ਨੇ ਆਖ਼ਰੀ ਦਿਨਾਂ ਵਿਚ ਇਸ ਵਿਕੀ ’ਤੇ {{PLURAL:$1|੧ ਖਾਤਾ ਬਣਾਇਆ ਹੈ|$1 ਖਾਤੇ ਬਣਾਏ ਹਨ}} ਜੋ ਕਿ, ਹਾਲ ਦੀ ਘੜੀ, ਖਾਤੇ ਬਣਾਉਣ ਦੀ ਆਖ਼ਰੀ ਹੱਦ ਹੈ।
 ਨਤੀਜੇ ਵਜੋਂ ਇਸ IP ਪਤੇ ਨੂੰ ਵਰਤਣ ਵਾਲ਼ੇ ਫ਼ਿਲਹਾਲ ਹੋਰ ਖਾਤੇ ਨਹੀਂ ਬਣਾ ਸਕਦੇ।',
 'emailauthenticated' => 'ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ $2 ਨੂੰ $3 ’ਤੇ ਤਸਦੀਕ ਕੀਤਾ ਗਿਆ।',
-'emailnotauthenticated' => 'ਤà©\81ਹਾਡਾ à¨\88ਮà©\87ਲ à¨ªà¨¤à¨¾ à¨¹à¨¾à¨²à©\87 à¨¤à¨¸à¨\95ਦà©\80à¨\95 à¨¨à¨¹à©\80à¨\82 à¨¹à©\8bà¨\87à¨\86। à¨¹à©\87ਠ à¨¦à¨¿à©±à¨¤à©\87 à¨«à©\80à¨\9aਰਾà¨\82 à¨²à¨\88 à¨\95à©\8bà¨\88 à¨µà©\80 à¨\88ਮà©\87ਲ à¨¨à¨¹à©\80à¨\82 à¨­à©\87à¨\9cà©\80 à¨\9cਾਵà©\87à¨\97à©\80।',
+'emailnotauthenticated' => 'ਤੁਹਾਡਾ ਈਮੇਲ ਪਤਾ ਹਾਲੇ ਤਸਦੀਕ ਨਹੀਂ ਹੋਇਆ। ਹੇਠ ਦਿੱਤੇ ਫੀਚਰਾਂ ਲਈ ਕੋਈ ਵੀ ਈਮੇਲ ਨਹੀਂ ਭੇਜੀ ਜਾਵੇਗੀ।',
 'noemailprefs' => 'ਇਹਨਾਂ ਸਹੂਲਤਾਂ ਦੀ ਵਰਤੋਂ ਲਈ ਆਪਣੀਆਂ ਪਸੰਦਾਂ ਵਿਚ ਇਕ ਈ-ਮੇਲ ਪਤਾ ਦਿਓ।',
 'emailconfirmlink' => 'ਆਪਣਾ ਈਮੇਲ ਪਤਾ ਤਸਦੀਕ ਕਰਾਓ',
 'invalidemailaddress' => 'ਈਮੇਲ ਪਤਾ ਕਬੂਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਸਹੀ ਅੰਦਾਜ਼ ਵਿਚ ਲਿਖਿਆ ਨਹੀਂ ਜਾਪਦਾ ਹੈ।
@@ -712,10 +712,12 @@ $2',
 ਜੇ ਇਹ ਖਾਤਾ ਗ਼ਲਤੀ ਨਾਲ਼ ਬਣ ਗਿਆ ਹੈ ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਸਕਦੇ ਹੋ।',
 'usernamehasherror' => 'ਵਰਤੋਂਕਾਰ ਦੇ ਨਾਂ ਵਿਚ ਹੈਸ਼ ਅੱਖਰ ਨਹੀਂ ਹੋ ਸਕਦੇ',
 'login-throttled' => 'ਤੁਸੀਂ ਬਹੁਤ ਸਾਰੀਆਂ ਤਾਜ਼ਾ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਕੀਤੀਆਂ ਹਨ।
-ਫà©\87ਰ à¨\95à©\8bਸ਼ਿਸ਼ à¨\95ਰਨ à¨¤à©\8bà¨\82 à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 à¨¥à©\8bà©\9cà©\8dਹà©\80 ਉਡੀਕ ਕਰੋ ਜੀ।',
+ਮà©\81à©\9c à¨\95à©\8bਸ਼ਿਸ਼ à¨\95ਰਨ à¨¤à©\8bà¨\82 à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 $1 ਉਡੀਕ ਕਰੋ ਜੀ।',
 'login-abort-generic' => 'ਤੁਹਾਡਾ ਦਾਖ਼ਲਾ ਨਾਕਾਮ ਸੀ - ਅਧੂਰਾ ਛੱਡਿਆ',
 'loginlanguagelabel' => 'ਭਾਸ਼ਾ: $1',
 'suspicious-userlogout' => 'ਤੁਹਾਡੀ ਵਿਦਾਇਗੀ ਦੀ ਬੇਨਤੀ ਨਕਾਰ ਦਿੱਤੀ ਗਈ ਕਿਉਂਕਿ ਲੱਗਦਾ ਹੈ ਕਿ ਇਹ ਕਿਸੇ ਟੁੱਟੇ ਹੋਏ ਬਰਾਊਜ਼ਰ ਜਾਂ ਕੈਸ਼ ਹੋਈ ਪ੍ਰਾਕਸੀ ਤੋਂ ਭੇਜੀ ਗਈ ਸੀ।',
+'createacct-another-realname-tip' => 'ਅਸਲੀ ਨਾਂ ਚੋਣਵਾਂ ਹੈ।
+ਜੇਕਰ ਤੁਸੀਂ ਇਹ ਦਿੱਤਾ ਹੈ ਤਾਂ ਤੁਹਾਡੇ ਕੰਮ ਵਾਸਤੇ ਗੁਣ ਦੇ ਤੌਰ ਉੱਤੇ ਵਰਤਿਆ ਜਾਵੇਗਾ।',
 
 # Email sending
 'php-mail-error-unknown' => 'PHP ਦੇ ਮੇਲ() ਕਰਜ ਵਿੱਚ ਅਣਜਾਣ ਦੋਸ਼',
@@ -780,6 +782,9 @@ $2
 
 # Special:ResetTokens
 'resettokens' => 'ਟੋਕਨ ਮੁੜ-ਸੈੱਟ ਕਰੋ',
+'resettokens-tokens' => 'ਟੋਕਨ:',
+'resettokens-token-label' => '$1 (ਚਾਲੂ ਮੁੱਲ: $2)',
+'resettokens-resetbutton' => 'ਚੁਣੇ ਹੋਏ ਟੋਕਨ ਮੁੜ ਸੈੱਟ ਕਰੋ',
 
 # Edit page toolbar
 'bold_sample' => 'ਗੂੜੀ ਲਿਖਤ',
@@ -1027,11 +1032,11 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'revdelete-show-file-submit' => 'ਹਾਂ',
 'revdelete-selected' => "'''[[:$1]] {{PLURAL:$2|ਦੀ ਚੁਣੀ ਹੋਈ ਰੀਵਿਜ਼ਨ|ਦੀਆਂ ਚੁਣੀਆਂ ਹੋਈਆਂ ਰੀਵਿਜ਼ਨਾਂ}}:'''",
 'revdelete-legend' => 'ਵੇਖਣ ਪਾਬੰਦੀਆਂ ਸੈੱਟ ਕਰੋ:',
-'revdelete-hide-text' => 'ਰà©\80ਵਿà¨\9c਼ਨ à¨²à¨¿à¨\96ਤ à¨\93ਹਲà©\87',
+'revdelete-hide-text' => 'ਦà©\81ਹਰਾà¨\88 à¨²à¨¿à¨\96ਤ',
 'revdelete-hide-image' => 'ਫ਼ਾਈਲ ਸਮੱਗਰੀ ਓਹਲੇ',
 'revdelete-hide-name' => 'ਕਾਰਵਾਈ ਅਤੇ ਟਾਰਗੇਟ ਓਹਲੇ',
-'revdelete-hide-comment' => 'ਸੋਧ ਸਾਰ ਲੁਕਾਓ',
-'revdelete-hide-user' => 'ਸà©\8bਧਣ à¨µà¨¾à¨²à¨¼à©\87 à¨¦à¨¾ à¨®à©\88à¨\82ਬਰ-ਨਾà¨\82/IP à¨ªà¨¤à¨¾ à¨²à©\81à¨\95ਾà¨\93',
+'revdelete-hide-comment' => 'ਸੋਧ ਸਾਰ',
+'revdelete-hide-user' => 'ਸà©\8bਧਣ à¨µà¨¾à¨²à¨¼à©\87 à¨¦à¨¾ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰà©\80 à¨¨à¨¾à¨\82/IP à¨ªà¨¤à¨¾',
 'revdelete-hide-restricted' => 'ਪ੍ਰਸ਼ਾਸਕਾਂ ਅਤੇ ਹੋਰਾਂ ਦੀ ਸਮੱਗਰੀ ਲੁਕਾਓ',
 'revdelete-radio-same' => '(ਨਾ ਬਦਲੋ)',
 'revdelete-radio-set' => 'ਲੁਕਵਾਂ',
@@ -1040,6 +1045,9 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'revdelete-unsuppress' => 'ਮੁੜ ਬਹਾਲ ਕੀਤੀਆਂ ਰੀਵਿਜ਼ਨਾਂ ਤੋਂ ਰੋਕਾਂ ਹਟਾਓ',
 'revdelete-log' => 'ਕਾਰਨ:',
 'revdelete-submit' => 'ਚੁਣੇ ਹੋਏ {{PLURAL:$1|ਸੁਧਾਰ|ਸੁਧਾਰਾਂ}} ਉੱਤੇ ਲਾਗੂ ਕਰੋ',
+'revdelete-success' => "'''ਦੁਹਰਾਈ ਦੀ ਪ੍ਰਤੱਖਤਾ ਅੱਪਡੇਟ ਕਰਨੀ ਸਫ਼ਲ ਹੋਈ।'''",
+'revdelete-failure' => "'''ਦੁਹਰਾਈ ਦੀ ਪ੍ਰਤੱਖਤਾ ਅੱਪਡੇਟ ਨਾ ਹੋ ਸਕੀ:'''
+$1",
 'logdelete-success' => "'''ਚਿੱਠੇ ਦੀ ਦਿੱਖ ਕਾਮਯਾਬੀ ਨਾਲ਼ ਸੈੱਟ ਕੀਤੀ।'''",
 'logdelete-failure' => "'''ਚਿੱਠੇ ਦੀ ਦਿੱਖ ਸੈੱਟ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ:''' $1",
 'revdel-restore' => 'ਦਿੱਖ ਬਦਲੋ',
@@ -1047,7 +1055,7 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'revdel-restore-visible' => 'ਦਿਸਣਯੋਗ ਰੀਵੀਜਨ',
 'pagehist' => 'ਸਫ਼ਾ ਅਤੀਤ',
 'deletedhist' => 'ਹਟਾਇਆ ਗਿਆ ਅਤੀਤ',
-'revdelete-hide-current' => 'ਤਾਰੀਖ &2, $1 ਦੀ ਚੀਜ਼ ਲੁਕਾਉਣ ਵਿਚ ਗਲਤੀ: ਇਹ ਮੌਜੂਦਾ ਰੀਵਿਜ਼ਨ ਹੈ।
+'revdelete-hide-current' => 'ਤਾਰੀਖ $2, $1 ਦੀ ਚੀਜ਼ ਲੁਕਾਉਣ ਵਿਚ ਗ਼ਲਤੀ: ਇਹ ਮੌਜੂਦਾ ਦੁਹਰਾਈ ਹੈ।
 ਇਹ ਲੁਕਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ।',
 'revdelete-otherreason' => 'ਹੋਰ/ਵਾਧੂ ਕਾਰਨ:',
 'revdelete-reasonotherlist' => 'ਹੋਰ ਕਾਰਨ',
@@ -1090,6 +1098,7 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'compareselectedversions' => 'ਚੁਣੇ ਵਰਜਨਾਂ ਦੀ ਤੁਲਨਾ',
 'showhideselectedversions' => 'ਚੁਣੇ ਰੀਵਿਜ਼ਨ ਵਖਾਓ/ਲੁਕਾਓ',
 'editundo' => 'ਰੱਦ ਕਰੋ',
+'diff-empty' => '(ਕੋਈ ਫ਼ਰਕ ਨਹੀਂ)',
 'diff-multi' => '({{PLURAL:$2|ਵਰਤੋਂਕਾਰ ਦੀ|$2 ਵਰਤੋਂਕਾਰਾਂ ਦੀਆਂ}} {{PLURAL:$1|ਵਿਚਕਾਰਲੀ ਰੀਵਿਜਨ ਨਹੀਂ ਦਿਖਾਈ ਜਾ ਰਹੀ|ਵਿਚਕਾਰਲੀਆਂ $1 ਰੀਵਿਜਨਾਂ ਨਹੀਂ ਦਿਖਾਈਆਂ ਜਾ ਰਹੀਆਂ}})',
 
 # Search results
@@ -1098,6 +1107,7 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'searchresulttext' => '{{SITENAME}} ਖੋਜ ਬਾਰੇ ਹੋਰ ਜਾਣਕਾਰੀ ਲਵੋ, ਵੇਖੋ [[{{MediaWiki:Helppage}}|{{int:help}}]].',
 'searchsubtitle' => 'ਤੁਸੀਂ \'\'\'[[:$1]]\'\'\' ਲਈ ਖੋਜ ਕੀਤੀ ([[Special:Prefixindex/$1|"$1" ਨਾਲ ਸ਼ੁਰੂ ਹੁੰਦੇ ਸਭ ਸਫ਼ੇ]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" ਨਾਲ ਲਿੰਕ ਹੋਏ ਸਭ ਸਫ਼ੇ]])',
 'searchsubtitleinvalid' => "ਤੁਸੀਂ'''$1''' ਲਈ ਖੋਜ ਕੀਤੀ।",
+'toomanymatches' => 'ਬਾਹਲੇ ਮੇਲ ਮਿਲੇ ਹਨ, ਕਿਰਪਾ ਕਰਕੇ ਕੋਈ ਹੋਰ ਪੁੱਛ-ਗਿੱਛ ਵਰਤੋ',
 'titlematches' => 'ਆਰਟੀਕਲ ਟੈਕਸਟ ਮਿਲਦਾ',
 'notitlematches' => 'ਕੋਈ ਪੇਜ ਟਾਇਟਲ ਨਹੀਂ ਮਿਲਦਾ',
 'textmatches' => 'ਸਫ਼ੇ ਦੀ ਲਿਖਤ ਮੇਲ ਖਾਂਦੀ ਹੈ',
@@ -1157,7 +1167,6 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'preferences' => 'ਪਸੰਦਾਂ',
 'mypreferences' => 'ਪਸੰਦਾਂ',
 'prefs-edits' => 'ਸੋਧਾਂ ਦੀ ਗਿਣਤੀ:',
-'prefsnologin' => 'ਦਾਖ਼ਲ ਨਹੀਂ ਹੋ',
 'changepassword' => 'ਪਾਸਵਰਡ ਬਦਲੋ',
 'prefs-skin' => 'ਸਕਿਨ',
 'skin-preview' => 'ਝਲਕ',
@@ -1234,7 +1243,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'badsig' => 'ਗ਼ਲਤ ਕੱਚੇ ਦਸਤਖ਼ਤ।
 HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'badsiglength' => 'ਦਸਤਖ਼ਤ ਬਹੁਤ ਲੰਬਾ ਹੋ ਗਿਆ ਹੈ। ਇਹ {{PLURAL:$1|ਅੱਖਰ|ਅੱਖਰਾਂ}} ਤੋਂ ਲੰਬਾ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ।',
-'yourgender' => 'ਲਿੰà¨\97:',
+'yourgender' => 'ਤà©\81ਸà©\80à¨\82 à¨\86ਪਣਾ à¨µà¨°à¨£à¨¨ à¨\95ਿਵà©\87à¨\82 à¨\95ਰਨਾ à¨ªà¨¸à©°à¨¦ à¨\95ਰà©\8bà¨\97à©\87?',
 'gender-unknown' => 'ਮੈਂ ਦੱਸਣਾ ਨਹੀਂ ਚਾਹੁੰਦਾ/ਚਾਹੁੰਦੀ',
 'gender-male' => 'ਉਹ ਵਿਕੀ ਸਫ਼ੇ ਸੋਧਦਾ ਹੈ',
 'gender-female' => 'ਉਹ ਵਿਕੀ ਸਫ਼ੇ ਸੋਧਦੀ ਹੈ',
@@ -1259,7 +1268,9 @@ HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'prefs-displayrc' => 'ਵੇਖਾਉਣ ਚੋਣਾਂ',
 'prefs-displaysearchoptions' => 'ਵੇਖਾਉਣ ਚੋਣਾਂ',
 'prefs-displaywatchlist' => 'ਵੇਖਾਉਣ ਚੋਣਾਂ',
+'prefs-tokenwatchlist' => 'ਟੋਕਨ',
 'prefs-diffs' => 'ਫ਼ਰਕ',
+'prefs-help-prefershttps' => 'ਇਹ ਪਸੰਦ ਤੁਹਾਡੇ ਅਗਲੇ ਦਾਖ਼ਲੇ ਤੋਂ ਚਾਲੂ ਹੋ ਜਾਵੇਗੀ।',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'ਈ-ਮੇਲ ਪਤਾ ਸਹੀ ਲਗਦਾ ਹੈ',
@@ -1296,6 +1307,7 @@ HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'group-bot-member' => 'ਬੌਟ',
 
 'grouppage-user' => '{{ns:project}}:ਵਰਤੋਂਕਾਰ',
+'grouppage-autoconfirmed' => '{{ns:project}}:ਸਵੈ-ਤਸਦੀਕੀ ਵਰਤੋਂਕਾਰ',
 'grouppage-bot' => '{{ns:project}}:ਬੌਟ',
 'grouppage-sysop' => '{{ns:project}}:ਪ੍ਰਸ਼ਾਸਕ',
 'grouppage-bureaucrat' => '{{ns:project}}:ਅਫ਼ਸਰ',
@@ -1386,6 +1398,8 @@ HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|ਤਬਦੀਲੀ|ਤਬਦੀਲੀਆਂ}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|ਆਖ਼ਰੀ ਫੇਰੀ ਤੋਂ ਲੈ ਕੇ}}',
+'enhancedrc-history' => 'ਅਤੀਤ',
 'recentchanges' => 'ਹਾਲ ’ਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ',
 'recentchanges-legend' => 'ਹਾਲ ਦੀਆਂ ਤਬਦੀਲੀਆਂ ਸਬੰਧੀ ਚੋਣਾਂ',
 'recentchanges-summary' => 'ਇਸ ਵਿਕੀ ’ਤੇ ਹੋਈਆਂ ਸਭ ਤੋਂ ਨਵੀਆਂ ਤਬਦੀਲੀਆਂ ਇਸ ਸਫ਼ੇ ’ਤੇ ਵੇਖੋ।',
@@ -1394,6 +1408,8 @@ HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'recentchanges-label-minor' => 'ਇਹ ਇੱਕ ਛੋਟੀ ਸੋਧ ਹੈ',
 'recentchanges-label-bot' => 'ਇਹ ਸੋਧ ਇੱਕ ਬੋਟ ਦੁਆਰਾ ਕੀਤੀ ਗਈ ਸੀ',
 'recentchanges-label-unpatrolled' => 'ਇਹ ਫੇਰ-ਬਦਲ ਹਾਲੇ ਵੇਖਿਆ ਨਹੀਂ ਗਿਆ',
+'recentchanges-legend-newpage' => '$1 - ਨਵਾਂ ਸਫ਼ਾ',
+'recentchanges-legend-plusminus' => "(''±੧੨੩'')",
 'rcnote' => "$4, $5 ਤੱਕ ਆਖਰੀ {{PLURAL:$2|ਦਿਨ|'''$2''' ਦਿਨਾਂ}} ਵਿੱਚ {{PLURAL:$1|'''1''' ਬਦਲੀ ਹੋਈ ਹੈ।|'''$1''' ਬਦਲੀਆਂ ਹੋਈਆਂ ਹਨ।}}",
 'rcnotefrom' => "'''$2''' ਤੱਕ ('''$1''' ਤੱਕ ਦਿੱਸਦੇ) ਬਦਲਾਵ ਹੇਠ ਦਿੱਤੀਆਂ ਹਨ।",
 'rclistfrom' => '$1 ਤੋਂ ਸ਼ੁਰੂ ਕਰਕੇ ਨਵੀਆਂ ਸੋਧਾਂ ਵਖਾਓ',
@@ -1513,6 +1529,7 @@ HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'uploadstash-refresh' => 'ਫ਼ਾਈਲਾਂ ਦੀ ਲਿਸਟ ਨੂੰ ਤਾਜ਼ਾ ਕਰੋ',
 
 # img_auth script messages
+'img-auth-accessdenied' => 'ਪਹੁੰਚ ਨਕਾਰੀ ਗਈ',
 'img-auth-nofile' => 'ਫ਼ਾਈਲ "$1" ਮੌਜੂਦ ਨਹੀਂ ਹੈ।',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1538,6 +1555,8 @@ HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'listfiles_size' => 'ਆਕਾਰ',
 'listfiles_description' => 'ਵੇਰਵਾ',
 'listfiles_count' => 'ਵਰਜਨ',
+'listfiles-latestversion-yes' => 'ਹਾਂ',
+'listfiles-latestversion-no' => 'ਨਹੀਂ',
 
 # File description page
 'file-anchor-link' => 'ਫ਼ਾਈਲ',
@@ -1616,6 +1635,12 @@ HTML ਟੈਗ ਚੈੱਕ ਕਰੋ।',
 'randompage' => 'ਰਲ਼ਵਾਂ ਸਫ਼ਾ',
 'randompage-nopages' => '{{PLURAL:$2|ਇਸ ਥਾਂ-ਨਾਮ|ਇਹਨਾਂ ਥਾਂ-ਨਾਂਵਾ}} ਵਿਚ ਕੋਈ ਸਫ਼ਾ ਨਹੀਂ ਹੈ: $1।',
 
+# Random page in category
+'randomincategory' => 'ਸ਼੍ਰੇਣੀ ਵਿਚਲਾ ਰਲ਼ਵਾਂ ਸਫ਼ਾ',
+'randomincategory-invalidcategory' => '"$1" ਕੋਈ ਸਹੀ ਸ਼੍ਰੇਣੀ ਦਾ ਨਾਂ ਨਹੀਂ ਹੈ।',
+'randomincategory-nopages' => '[[:Category:$1|$1]] ਸ਼੍ਰੇਣੀ ਵਿਚ ਕੋਈ ਸਫ਼ਾ ਨਹੀਂ ਹੈ।',
+'randomincategory-selectcategory-submit' => 'ਜਾਓ',
+
 # Random redirect
 'randomredirect' => 'ਰਲ਼ਵਾਂ ਰੀਡਿਰੈਕਟ',
 
@@ -2808,4 +2833,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 # Image rotation
 'rotate-comment' => 'ਤਸਵੀਰ ਨੂੰ ਘੜੀ ਦੇ ਰੁਖ ਵਿਚ $1 {{PLURAL:$1|ਡਿਗਰੀ|ਡਿਗਰੀਆਂ}} ਨਾਲ਼ ਘੁਮਾਇਆ ਗਿਆ',
 
+# Special:ExpandTemplates
+'expand_templates_preview' => 'ਝਲਕ',
+
 );
index f12a2ed..65685c7 100644 (file)
@@ -250,8 +250,6 @@ Pabusten ing pamanaliling dake kapamilatan [alilan] ning suglung',
 'ok' => 'Sigi',
 'retrievedfrom' => 'Mekua ya king "$1"',
 'youhavenewmessages' => 'Atin kang $1 ($2).',
-'newmessageslink' => 'bayung mensahi',
-'newmessagesdifflink' => 'tauling miyalilan',
 'youhavenewmessagesmulti' => 'Atin kang bayung mensahi king $1',
 'editsection' => 'mag-edit',
 'editold' => 'alilan',
@@ -785,7 +783,6 @@ Pakitandanan mung maliaring e no makapanaun deng karelang index king kalamnan ni
 'preferences' => 'Pinili',
 'mypreferences' => '↓Deng pinili ku',
 'prefs-edits' => 'Bilang da reng edit:',
-'prefsnologin' => 'ekamaka log',
 'changepassword' => 'Alilan ya ing password',
 'prefs-skin' => 'Balat',
 'skin-preview' => 'I-preview',
index 7c1b11e..e66f8f7 100644 (file)
@@ -242,8 +242,6 @@ $messages = array(
 'ok' => 'OK',
 'retrievedfrom' => 'Érprind din  "$1"',
 'youhavenewmessages' => 'Os avez $1 ($2).',
-'newmessageslink' => 'nouvieus messaches',
-'newmessagesdifflink' => 'darin cangemint',
 'youhavenewmessagesmulti' => 'Os avez des nouvieus messaches su $1',
 'editsection' => 'éditer',
 'editold' => 'éditer',
index 8d65c50..d5e0088 100644 (file)
@@ -233,8 +233,6 @@ Guck aa [[Special:Version|Versionsblatt]]',
 'ok' => 'OK',
 'retrievedfrom' => 'Vun „$1“',
 'youhavenewmessages' => 'Du hast $1 uff deinem $2.',
-'newmessageslink' => 'Neiichkeede',
-'newmessagesdifflink' => 'Gschwetz-Blatt',
 'youhavenewmessagesmulti' => 'Du hascht neie Comments: $1',
 'editsection' => 'Ennere',
 'editold' => 'Ennere',
@@ -499,6 +497,7 @@ Paesswatt fer nau: $2',
 'recentchanges' => 'Was mer letscht geduh henn',
 'recentchanges-label-minor' => 'Gleene Ennering',
 'recentchanges-label-bot' => 'Ennering vun em Waddefresser',
+'recentchanges-legend-newpage' => '$1 - neies Blatt',
 'rcshowhideminor' => 'Gleene Enneringe $1',
 'rcshowhidebots' => 'Bots $1',
 'rcshowhideanons' => 'IP-Yuuser $1',
@@ -1009,4 +1008,10 @@ Guck $2 fer e Lischt vun de letscht Leschunge.',
 # Search suggestions
 'searchsuggest-search' => 'Uffgucke',
 
+# Special:ExpandTemplates
+'expand_templates_output' => 'Result',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Anmaerrickinge lösche',
+'expand_templates_preview' => 'Aagucke',
+
 );
index 606ff5c..ab0b726 100644 (file)
@@ -267,8 +267,6 @@ $1',
 'ok' => 'Alla gud',
 'retrievedfrom' => 'Vun "$1"',
 'youhavenewmessages' => 'Du hoschd $1 ($2).',
-'newmessageslink' => 'naije Nochrischde',
-'newmessagesdifflink' => 'ledschdi Ännarung',
 'newmessagesdifflinkplural' => 'ledschdi {{PLURAL:$1|Ännarung|Ännarunge}}',
 'youhavenewmessagesmulti' => 'Do hoschd ä Nochrischd grischd: $1',
 'editsection' => 'beawaide',
index d72d1ea..ee80c86 100644 (file)
@@ -130,7 +130,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Zły_tytuł' ),
        'Blankpage'                 => array( 'Pusta_strona' ),
        'Block'                     => array( 'Blokuj' ),
-       'Blockme'                   => array( 'Zablokuj_mnie' ),
        'Booksources'               => array( 'Książki' ),
        'BrokenRedirects'           => array( 'Zerwane_przekierowania' ),
        'Categories'                => array( 'Kategorie' ),
@@ -142,15 +141,16 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Utwórz_konto', 'Stwórz_konto' ),
        'Deadendpages'              => array( 'Bez_linków' ),
        'DeletedContributions'      => array( 'Usunięty_wkład' ),
-       'Disambiguations'           => array( 'Ujednoznacznienia' ),
        'DoubleRedirects'           => array( 'Podwójne_przekierowania' ),
        'EditWatchlist'             => array( 'Edytuj_obserwowane' ),
        'Emailuser'                 => array( 'E-mail' ),
+       'ExpandTemplates'           => array( 'Rozwijanie_szablonów' ),
        'Export'                    => array( 'Eksport' ),
        'Fewestrevisions'           => array( 'Najmniej_edycji' ),
        'FileDuplicateSearch'       => array( 'Szukaj_duplikatu_pliku' ),
        'Filepath'                  => array( 'Ścieżka_do_pliku' ),
        'Invalidateemail'           => array( 'Anuluj_e-mail' ),
+       'JavaScriptTest'            => array( 'Test_JavaScriptu' ),
        'BlockList'                 => array( 'Zablokowani' ),
        'LinkSearch'                => array( 'Wyszukiwarka_linków' ),
        'Listadmins'                => array( 'Administratorzy' ),
@@ -179,6 +179,7 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'Moje_pliki' ),
        'Newimages'                 => array( 'Nowe_pliki' ),
        'Newpages'                  => array( 'Nowe_strony' ),
+       'PagesWithProp'             => array( 'Strony_z_własnością' ),
        'PasswordReset'             => array( 'Wyczyść_hasło' ),
        'PermanentLink'             => array( 'Niezmienny_link' ),
        'Popularpages'              => array( 'Popularne_strony' ),
@@ -187,9 +188,12 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Zabezpieczone_strony' ),
        'Protectedtitles'           => array( 'Zabezpieczone_nazwy_stron' ),
        'Randompage'                => array( 'Losowa_strona', 'Losowa' ),
+       'RandomInCategory'          => array( 'Losowa_w_kategorii', 'Losowa_strona_w_kategorii' ),
        'Randomredirect'            => array( 'Losowe_przekierowanie' ),
        'Recentchanges'             => array( 'Ostatnie_zmiany', 'OZ' ),
        'Recentchangeslinked'       => array( 'Zmiany_w_linkowanych', 'Zmiany_w_linkujących' ),
+       'Redirect'                  => array( 'Przekieruj' ),
+       'ResetTokens'               => array( 'Resetuj_tokeny' ),
        'Revisiondelete'            => array( 'Usuń_wersję' ),
        'Search'                    => array( 'Szukaj' ),
        'Shortpages'                => array( 'Najkrótsze_strony' ),
@@ -584,12 +588,10 @@ $1',
 'pagetitle' => '$1 – {{SITENAME}}',
 'retrievedfrom' => 'Źródło „$1”',
 'youhavenewmessages' => 'Masz $1 ($2).',
-'newmessageslink' => 'nowe wiadomości',
-'newmessagesdifflink' => 'różnica z poprzednią wersją',
 'youhavenewmessagesfromusers' => 'Masz $1 od {{PLURAL:$3|innego użytkownika|$3 użytkowników}} ($2).',
 'youhavenewmessagesmanyusers' => 'Masz $1 od wielu użytkowników ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|jedną wiadomość|nowe wiadomości}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|ostatnia zmiana|ostatnie zmiany}}',
+'newmessageslinkplural' => '{{PLURAL:$1|jedną wiadomość|999=nowe wiadomości}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ostatnia zmiana|999=ostatnie zmiany}}',
 'youhavenewmessagesmulti' => 'Masz nowe wiadomości na $1',
 'editsection' => 'edytuj',
 'editold' => 'edytuj',
@@ -719,7 +721,8 @@ Administrator blokujący go podał następujący powód "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Nieprawidłowa nazwa w obszarze nazw "$2" o treści "$3"',
 'invalidtitle-unknownnamespace' => 'Nieprawidłowa nazwa z nieznaną liczbą przestrzeni nazw  $1  o treści "$2"',
 'exception-nologin' => 'Nie jesteś zalogowany/a',
-'exception-nologin-text' => 'Ta strona lub akcja wymaga bycia zalogowanym na tej wiki.',
+'exception-nologin-text' => 'Proszę [[Special:Userlogin|zaloguj się]] aby mieć dostęp do tej strony lub akcji.',
+'exception-nologin-text-manual' => 'Musisz $1 aby mieć dostęp do tej strony lub akcji.',
 
 # Virus scanner
 'virus-badscanner' => "Zła konfiguracja – nieznany skaner antywirusowy ''$1''",
@@ -1283,6 +1286,7 @@ wybrana wersja nie istnieje lub próbowano ukryć wersję bieżącą.',
 Inni administratorzy {{GRAMMAR:D.lp|{{SITENAME}}}} nadal będą mieć dostęp do ukrytych treści oraz będą mogli je odtworzyć używając standardowych mechanizmów, chyba że nałożono dodatkowe ograniczenia.",
 'revdelete-confirm' => 'Potwierdź, że chcesz to zrobić zgodnie z [[{{MediaWiki:Policy-url}}|zasadami]] i że rozumiesz konsekwencje.',
 'revdelete-suppress-text' => "Ukrywanie powinno być używane '''wyłącznie''' w sytuacji:
+* Informacji, która może być zniesławieniem
 * Ujawnienie danych osobowych
 *: ''adres domowy, numer telefonu, numer PESEL itp''",
 'revdelete-legend' => 'Ustaw ograniczenia widoczności',
@@ -1293,8 +1297,8 @@ Inni administratorzy {{GRAMMAR:D.lp|{{SITENAME}}}} nadal będą mieć dostęp do
 'revdelete-hide-user' => 'Ukryj nazwę użytkownika/adres IP',
 'revdelete-hide-restricted' => 'Ukryj informacje przed administratorami tak samo jak przed innymi',
 'revdelete-radio-same' => '(bez zmian)',
-'revdelete-radio-set' => 'Tak',
-'revdelete-radio-unset' => 'Nie',
+'revdelete-radio-set' => 'Ukryty',
+'revdelete-radio-unset' => 'Widoczny',
 'revdelete-suppress' => 'Utajnij informacje przed administratorami, tak samo jak przed innymi',
 'revdelete-unsuppress' => 'Wyłącz utajnianie dla odtwarzanej historii zmian',
 'revdelete-log' => 'Powód',
@@ -1448,7 +1452,7 @@ Jednak informacje o treści {{GRAMMAR:D.lp|{{SITENAME}}}} mogą być w Google ni
 'preferences' => 'Preferencje',
 'mypreferences' => 'Preferencje',
 'prefs-edits' => 'Liczba edycji',
-'prefsnologin' => 'Nie jesteś zalogowany',
+'prefsnologintext2' => 'Musisz $1 aby ustawić preferencje.',
 'changepassword' => 'Zmiana hasła',
 'prefs-skin' => 'Skórka',
 'skin-preview' => 'podgląd',
@@ -1746,6 +1750,8 @@ Jeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje auto
 'recentchanges-label-minor' => 'To jest drobna zmiana',
 'recentchanges-label-bot' => 'Ta edycja została wykonana przez bota',
 'recentchanges-label-unpatrolled' => 'Ta edycja nie została jeszcze sprawdzona',
+'recentchanges-label-plusminus' => 'Zmieniony rozmiar strony (liczba bajtów)',
+'recentchanges-legend-newpage' => '(zobacz też [[Special:NewPages|listę nowych stron]])',
 'rcnote' => "Poniżej {{PLURAL:$1|znajduje się '''1''' ostatnia zmiana wykonana|znajdują się ostatnie '''$1''' zmiany wykonane|znajduje się ostatnich '''$1''' zmian wykonanych}} w ciągu {{PLURAL:$2|ostatniego dnia|ostatnich '''$2''' dni}}, licząc od $5 dnia $4.",
 'rcnotefrom' => "Poniżej pokazano zmiany wykonane po '''$2''' (nie więcej niż '''$1''' pozycji).",
 'rclistfrom' => 'Pokaż nowe zmiany od $1',
@@ -2481,9 +2487,9 @@ Kontakt do autora:
 mail – $PAGEEDITOR_EMAIL
 wiki – $PAGEEDITOR_WIKI
 
-W przypadku kolejnych zmian nowe powiadomienia nie zostaną wysłane, dopóki nie odwiedzisz tej strony. Możesz także zresetować wszystkie flagi powiadomień na swojej liście stron obserwowanych.
+W przypadku kolejnych zmian nowe powiadomienia nie zostaną wysłane, dopóki nie odwiedzisz tej strony jako zalogowany. Możesz także zresetować wszystkie flagi powiadomień na swojej liście stron obserwowanych.
 
-       Wiadomość z systemu powiadomień {{GRAMMAR:D.lp|{{SITENAME}}}}
+Wiadomość z systemu powiadomień {{GRAMMAR:D.lp|{{SITENAME}}}}
 
 --
 W celu zmiany ustawień swojej listy obserwowanych odwiedź
@@ -3166,6 +3172,7 @@ Brak katalogu dla plików tymczasowych.',
 Pozwala na wpisanie powodu w opisie zmian.',
 'tooltip-preferences-save' => 'Zapisz preferencje',
 'tooltip-summary' => 'Wpisz krótki opis',
+'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
 'common.css' => '/* Umieszczony tutaj kod CSS zostanie zastosowany we wszystkich skórkach */',
@@ -3313,7 +3320,7 @@ Jeśli go otworzysz, możesz zarazić swój system.",
 'svg-long-desc' => 'Plik SVG, nominalnie $1 × $2 pikseli, rozmiar pliku: $3',
 'svg-long-desc-animated' => 'Animowany plik SVG, nominalnie $1 × $2 pikseli, rozmiar pliku: $3',
 'svg-long-error' => 'Nieprawidłowy plik SVG:$1',
-'show-big-image' => 'Pełna rozdzielczość',
+'show-big-image' => 'Rozmiar pierwotny',
 'show-big-image-preview' => 'Rozmiar podglądu – $1.',
 'show-big-image-other' => '{{PLURAL:$2|Inna rozdzielczość|Inne rozdzielczości}}: $1.',
 'show-big-image-size' => '$1 x $2 pikseli',
@@ -4066,6 +4073,7 @@ Powinieneś otrzymać [{{SERVER}}{{SCRIPTPATH}}/COPYING kopię licencji GNU Gene
 
 # Special:SpecialPages
 'specialpages' => 'Strony specjalne',
+'specialpages-note-top' => 'Legenda',
 'specialpages-note' => '* Normalne strony specjalne.
 * <span class="mw-specialpagerestricted">Zastrzeżone strony specjalne.</span>',
 'specialpages-group-maintenance' => 'Raporty konserwacyjne',
@@ -4280,4 +4288,21 @@ W przeciwnym wypadku można użyć prostego formularza poniżej. Komentarz zosta
 'limitreport-expansiondepth' => 'Największa głębokość ekspansji',
 'limitreport-expensivefunctioncount' => 'Liczba wywołań kosztownych funkcji parsera',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Rozwijanie szablonów',
+'expand_templates_intro' => 'We wprowadzonym na tej stronie tekście źródłowym zostaną rozwinięte rekurencyjnie wszystkie szablony.
+Rozwinięte także zostaną funkcje parsera takie jak
+<code><nowiki>{{</nowiki>#language:…}}</code> i zmienne jak
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+W zasadzie rozwijane jest prawie wszystko w podwójnych nawiasach klamrowych.',
+'expand_templates_title' => 'Pozorny tytuł strony dla zmiennych takich jak {{FULLPAGENAME}}',
+'expand_templates_input' => 'Tekst wejściowy',
+'expand_templates_output' => 'Rezultat',
+'expand_templates_xml_output' => 'wynik w formacie XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Usuń komentarze',
+'expand_templates_remove_nowiki' => 'Ukrywaj w wyniku znaczniki <nowiki>',
+'expand_templates_generate_xml' => 'Pokaż drzewo analizatora składni w formacie XML',
+'expand_templates_preview' => 'Podgląd',
+
 );
index ef6ac50..f2099d7 100644 (file)
@@ -316,12 +316,10 @@ $1",
 'ok' => 'Va bin',
 'retrievedfrom' => 'Pijàit da «$1»',
 'youhavenewmessages' => "A l'ha $1 ($2).",
-'newmessageslink' => 'ëd mëssagi neuv',
-'newmessagesdifflink' => 'ùltima modìfica',
 'youhavenewmessagesfromusers' => "A l'ha $1 da {{PLURAL:$3|n'autr utent|$3 utent}} ($2).",
 'youhavenewmessagesmanyusers' => "A l'ha $1 da vàire utent ($2).",
-'newmessageslinkplural' => '{{PLURAL:$1|un mëssagi neuv|$1 mëssagi neuv}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|ùltima modìfica|ùltime modìfiche}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un mëssagi neuv|999=dij mëssagi neuv}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ùltima modìfica|999=ùltime modìfiche}}',
 'youhavenewmessagesmulti' => "A l'ha dij neuv mëssagi an $1",
 'editsection' => 'modifiché',
 'editold' => 'modifiché',
@@ -1168,7 +1166,6 @@ Ch'a preuva a gionté dnans a soa arserca ël prefiss ''all:'' për sërché an
 'preferences' => 'Mè gust',
 'mypreferences' => 'Gust',
 'prefs-edits' => 'Nùmer ëd modìfiche fàite:',
-'prefsnologin' => "A l'é ancó pa rintrà ant ël sistema",
 'prefsnologintext2' => "Për piasì, ch'a $1 për definì ij gust d'utent.",
 'changepassword' => 'Cangé la ciav',
 'prefs-skin' => 'Facia',
@@ -1471,6 +1468,9 @@ Costa anformassion a sarà pùblica.",
 'recentchanges-label-minor' => "Costa a l'é na modìfica cita",
 'recentchanges-label-bot' => "Sa modìfica a l'é stàita fàita da un trigomiro",
 'recentchanges-label-unpatrolled' => "Sta modìfica-sì a l'é pa ancó stàita verificà",
+'recentchanges-label-plusminus' => "La taja dla pàgina a l'é cangià d'un nùmer ëd bytes",
+'recentchanges-legend-newpage' => '(vëdde ëdcò [[Special:NewPages|lista dle pàgine neuve]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "Ambelessì sota a-i {{PLURAL:$1|é '''1''' modìfica|son j'ùltime '''$1''' modìfiche}} ant j'ùltim {{PLURAL:$2|di|'''$2''' di}}, a parte da $5 dël $4.",
 'rcnotefrom' => ' Ambelessì sota a-i é la lista dle modìfiche da <b>$2</b> (fin-a a <b>$1</b>).',
 'rclistfrom' => 'Mostré le modìfiche a parte da $1',
@@ -3960,4 +3960,21 @@ Dësnò, a peul dovré ël formolari semplificà sì-sota. Sò coment a sarà gi
 'limitreport-expansiondepth' => "Pi granda përfondità d'espansion",
 'limitreport-expensivefunctioncount' => "Cont ëd le fonsion d'anàlisi care",
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Anàlisi djë stamp',
+'expand_templates_intro' => "Sta pàgina special-sì a pija dël test e a-i fa n'anàlisi arcorenta ëd tuti jë stamp ch'a l'ha andrinta.
+A l'analisa ëdcò le fonsion anterpretà coma
+<code><nowiki>{{</nowiki>#language:…}}</code>, e le variàbij coma
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+An efet, a espand praticament tut lòn ch'a-i é antrames dle grafe dobie.",
+'expand_templates_title' => 'Tìtol ëd contest për {{FULLPAGENAME}} e via fòrt:',
+'expand_templates_input' => 'Test da analisé:',
+'expand_templates_output' => 'Arzultà',
+'expand_templates_xml_output' => 'Output an XML',
+'expand_templates_ok' => 'Bin parèj',
+'expand_templates_remove_comments' => 'Gava via ij coment',
+'expand_templates_remove_nowiki' => "Gava ij tag <nowiki> ant l'arzultà",
+'expand_templates_generate_xml' => "Mosta l'erbo ëd parse XML",
+'expand_templates_preview' => 'Preuva',
+
 );
index 2fe655f..6dc3836 100644 (file)
@@ -276,8 +276,6 @@ $messages = array(
 'ok' => 'ٹھیک اے',
 'retrievedfrom' => '"$1" توں لیا',
 'youhavenewmessages' => 'تواڈے لئی $1 ($2).',
-'newmessageslink' => 'نواں سنیآ',
-'newmessagesdifflink' => 'آخری تبدیلی',
 'youhavenewmessagesmulti' => 'تھاڈے ل‏ی $1 تے نوں سنیعہ اے۔',
 'editsection' => 'لکھو',
 'editold' => 'لکھو',
@@ -1007,7 +1005,6 @@ $1",
 'preferences' => 'تانگاں',
 'mypreferences' => 'میریاں تانگاں',
 'prefs-edits' => 'تبدیلیاں دی گنتی:',
-'prefsnologin' => 'لاگ ان نئیں او',
 'changepassword' => 'کنجی بدلو',
 'prefs-skin' => 'چھاڑ',
 'skin-preview' => 'کچا کم',
index 36e3486..12dc82c 100644 (file)
@@ -260,8 +260,6 @@ $messages = array(
 'ok' => 'Εγέντον',
 'retrievedfrom' => 'Ασο "$1"',
 'youhavenewmessages' => 'Έχετε $1 ($2).',
-'newmessageslink' => 'καινούρεα μενέματα',
-'newmessagesdifflink' => 'υστερνόν αλλαγήν',
 'youhavenewmessagesmulti' => 'Έχετε καινούρεα μενέματα σο $1',
 'editsection' => 'άλλαξον',
 'editold' => 'άλλαξον',
index 9310b2e..d9db050 100644 (file)
@@ -251,8 +251,6 @@ Pāusai en kategōrijai "$1"',
 'ok' => 'Labbai',
 'retrievedfrom' => 'Aps: "$1"',
 'youhavenewmessages' => 'Tu turri $1 ($2)',
-'newmessageslink' => 'nāunans waīstins',
-'newmessagesdifflink' => 'Šlaitīntan ezze panzdaumai wersiōnin',
 'youhavenewmessagesmulti' => 'Tū turri nāunans waīstins ēn $1',
 'editsection' => 'redigīs',
 'editold' => 'redigīs',
@@ -827,7 +825,6 @@ Pamēnais, kāi tenēisan indicai mazzi ni būtwei aktuālin.',
 'preferences' => 'Pirminiskwas',
 'mypreferences' => 'Majjas pirminiskwas',
 'prefs-edits' => 'Kitawīdinsnan gīrbis:',
-'prefsnologin' => 'Ni assei engūbun',
 'changepassword' => 'Kitawīdinais kliptaswīrdan',
 'prefs-skin' => 'Prusna',
 'skin-preview' => 'Pirmādira',
@@ -1065,6 +1062,7 @@ Tū mazzi dīgi etrīnktun dātun kitēimans drāugautwei sen tin pra tērpautaj
 'recentchanges-label-minor' => 'Sta ast malks redigīsenis',
 'recentchanges-label-bot' => 'Sta ast redigīsenis segītan pra bōtan',
 'recentchanges-label-unpatrolled' => 'Šis redigīsenis ni ast dabber izbandātan',
+'recentchanges-legend-newpage' => '$1 - nāunan pāusan',
 'rcnote' => "Zemmais ast {{PLURAL:$1|'''1''' kitawīdinsna segīta|panzdaumas '''$1''' kitawīdinsnas segītas}} en panzdaumamans {{PLURAL:$2|dēinan|'''$2''' dēinans}}, gīrbawintei ezze $5, $4.",
 'rcnotefrom' => "Zemmais ast kitawīdisnas ezze '''$2''' (ērgi '''$1''' waidīntan).",
 'rclistfrom' => 'Waidinnais nāunans kitawīdinsnans pagaūnintei ezze $1',
index d4e2567..0e61cd5 100644 (file)
@@ -375,7 +375,7 @@ $messages = array(
 'articlepage' => 'د مخ مېنځپانگه ښکاره کول',
 'talk' => 'خبرې اترې',
 'views' => 'کتنې',
-'toolbox' => 'اوزاربکس',
+'toolbox' => 'اوزارونه',
 'userpage' => 'د کارن پاڼه کتل',
 'projectpage' => 'د پروژې مخ کتل',
 'imagepage' => 'د دوتنې مخ کتل',
@@ -393,7 +393,7 @@ $messages = array(
 'jumpto' => 'ورټوپ کړه:',
 'jumptonavigation' => 'گرځښت',
 'jumptosearch' => 'پلټل',
-'view-pool-error' => 'اÙ\88بخÚ\9aÛ\8dØ\8c Ø¯Ù\85 Ú«ړۍ پالنگران د ډېر بارېدو ستونزې سره مخامخ شوي.
+'view-pool-error' => 'اÙ\88بخÚ\9aÛ\8dØ\8c Ø¯Ù\85 Ú¯ړۍ پالنگران د ډېر بارېدو ستونزې سره مخامخ شوي.
 ډېر زيات کارنان د همدې مخ د کتلو په هڅه کې دي.
 لطفاً د دې مخ د کتلو د بيا هڅې نه دمخه يو څو شېبې صبر وکړۍ.
 
@@ -431,12 +431,10 @@ $1',
 'ok' => 'ښه',
 'retrievedfrom' => '"$1" نه اخيستل شوی',
 'youhavenewmessages' => 'تاسې $1 لری  ($2).',
-'newmessageslink' => 'نوي پيغامونه',
-'newmessagesdifflink' => 'وروستی بدلون',
 'youhavenewmessagesfromusers' => 'تاسې د {{PLURAL:$3|يو بل کارن|$3 کارنانو}} لخوا $1 لرۍ ($2).',
 'youhavenewmessagesmanyusers' => 'تاسې د يو شمېر کارنانو لخوا $1 لرۍ ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|يو نوی پيغام|نوي پيغامونه}}',
-'newmessagesdifflinkplural' => 'وروستي {{PLURAL:$1|بدلون|بدلونونه}}',
+'newmessageslinkplural' => '{{PLURAL:$1|يو نوی پيغام|999=نوي پيغامونه}}',
+'newmessagesdifflinkplural' => 'تېر {{PLURAL:$1|بدلون|999=بدلونونه}}',
 'youhavenewmessagesmulti' => 'تاسې په $1 کې نوي پېغامونه لرۍ',
 'editsection' => 'سمول',
 'editold' => 'سمول',
@@ -593,7 +591,7 @@ $1',
 'createacct-emailoptional' => 'برېښليک پته (اختياري)',
 'createacct-email-ph' => 'برېښليک پته مو وټاپۍ',
 'createacct-another-email-ph' => 'برېښليک پته مو ورکړۍ',
-'createaccountmail' => 'يو لنډمهاله ناټاکلی پټنوم کارول او په لاندې ورکړل شوې برېښليک پته کې ورلېږل',
+'createaccountmail' => 'يو لنډمهاله ناټاکلی پټنوم کارول او ځانگړې شوې برېښليک پتې ته ورلېږل',
 'createacct-realname' => 'آر نوم (اختياري)',
 'createaccountreason' => 'سبب:',
 'createacct-reason' => 'سبب',
@@ -652,8 +650,8 @@ $1',
 'mailerror' => 'د برېښليک د لېږلو ستونزه: $1',
 'acct_creation_throttle_hit' => 'د همدې ويکي کارنانو په وروستيو ورځو کې ستاسې د IP پتې په کارولو سره {{PLURAL:$1|1 گڼون|$1 گڼونونه}} جوړ کړي، چې دا په همدې مودې کې د گڼونونو د جوړولو تر ټولو ډېر شمېر دی چې اجازه يې ورکړ شوې.
 نو په همدې خاطر د اوس لپاره د همدې IP پتې کارنان نه شي کولای چې نور گڼونونه جوړ کړي.',
-'emailauthenticated' => 'ستاسÛ\90 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾ØªÙ\87 Ù¾Ù\87 $2 Ù\86Û\90Ù¼Ù\87 Ù¾Ù\87 $3 Ø¨Ø¬Ù\88 Ø¯ Ù\85Ù\86Ù\84Ù\88 Ù\88Ú\93 Ù\88گرÚ\81Û\90دÙ\87.',
-'emailnotauthenticated' => 'Ù\84ا ØªØ± Ø§Ù\88سÙ\87 Ø³ØªØ§Ø³Û\90 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾ØªÙ\87 Ø¯ Ù\85Ù\86Ù\84Ù\88 Ù\88Ú\93 Ù\86Ù\87 Ø¯Ù\87 Ú«Ø±Ú\81Û\90دÙ\84Û\90. Ø¯ Ù\84اÙ\86دÛ\90 Ú\81اÙ\86Ú«ړتياو لپاره به تاسې ته هېڅ کوم برېښليک و نه لېږل شي.',
+'emailauthenticated' => 'ستاسې برېښليک پته په $2 په $3 بجو د منلو وړ وگرځېده.',
+'emailnotauthenticated' => 'Ù\84ا ØªØ± Ø§Ù\88سÙ\87 Ø³ØªØ§Ø³Û\90 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù¾ØªÙ\87 Ø¯ Ù\85Ù\86Ù\84Ù\88 Ù\88Ú\93 Ù\86Ù\87 Ø¯Ù\87 Ú¯Ø±Ú\81Û\90دÙ\84Û\90. Ø¯ Ù\84اÙ\86دÛ\90 Ú\81اÙ\86Ú¯ړتياو لپاره به تاسې ته هېڅ کوم برېښليک و نه لېږل شي.',
 'noemailprefs' => 'ددې لپاره چې دا کړنې کار وکړي نو تاسو يو برېښليک وټاکۍ.',
 'emailconfirmlink' => 'د خپل د برېښليک پتې پخلی وکړی',
 'invalidemailaddress' => 'دا برېښليک پته نه منل کېږي، دا ځکه چې دا پته يوه ناکره بڼه لري.
@@ -669,7 +667,7 @@ $1',
 که چېرته دا کړنه په تېروتنه کې شوی وي نو تاسې کولای شی چې دا پيغام بابېزه وگڼۍ.',
 'usernamehasherror' => 'کارن-نوم نشي کېدلای چې کرښکې لوښې ولري',
 'login-throttled' => 'تاسې څو واره هڅه کړې چې غونډال ته ورننوځۍ.
-لطفاً د بيا هڅې نه مخکې يو څو شېبې تم شۍ.',
+لطفاً د بيا هڅې نه مخکې $1 شېبې تم شۍ.',
 'login-abort-generic' => 'غونډال کې مو ننوتل نابريالی شو - ناڅاپي بند شو',
 'loginlanguagelabel' => 'ژبه: $1',
 
@@ -683,8 +681,7 @@ $1',
 'newpassword' => 'نوی پټنوم:',
 'retypenew' => 'نوی پټنوم بيا وليکه:',
 'resetpass_submit' => 'پټنوم مو وټاکۍ او بيا غونډال ته ورننوځۍ',
-'changepassword-success' => 'ستاسې پټنوم په برياليتوب سره بدل شو!
-اوس غونډال کې د ورننوتلو په حال کې يو ...',
+'changepassword-success' => 'ستاسې پټنوم په برياليتوب سره بدل شو!',
 'resetpass_forbidden' => 'پټنومونه مو نه شي بدلېدلای',
 'resetpass-no-info' => 'دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.',
 'resetpass-submit-loggedin' => 'پټنوم بدلول',
@@ -709,6 +706,7 @@ $1',
 # Special:ChangeEmail
 'changeemail' => 'برېښليک پته بدلول',
 'changeemail-header' => 'د گڼون برېښليک پته بدلول',
+'changeemail-text' => 'د برېښليک پتې بدلولو لپاره مو همدا فورمه ډکه کړۍ. د دې بدلون د تاييد لپاره بايد پټنوم مو ورکړۍ.',
 'changeemail-no-info' => 'دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.',
 'changeemail-oldemail' => 'اوسنۍ برېښليک پته:',
 'changeemail-newemail' => 'نوې برېښليک پته:',
@@ -932,14 +930,14 @@ $1',
 'revdelete-show-file-submit' => 'هو',
 'revdelete-selected' => "'''د [[:$1]] {{PLURAL:$2|ټاکلې بڼه|ټاکلې بڼې}}:'''",
 'revdelete-legend' => 'د ښکارېدنې محدوديتونه ټاکل',
-'revdelete-hide-text' => 'د مخکتنې متن پټول',
+'revdelete-hide-text' => 'د مخکتنې متن',
 'revdelete-hide-image' => 'د دوتنې مېنځپانگه پټول',
 'revdelete-hide-name' => 'کړنه او موخه پټول',
-'revdelete-hide-comment' => 'د سمون لنډيز پټول',
-'revdelete-hide-user' => 'د سمونگر کارن-نوم/آی پي پته پټول',
+'revdelete-hide-comment' => 'د سمون لنډيز',
+'revdelete-hide-user' => 'د سمونگر کارن-نوم/آی پي پته',
 'revdelete-radio-same' => '(مه بدلوه)',
-'revdelete-radio-set' => 'Ù\87Ù\88',
-'revdelete-radio-unset' => 'نه',
+'revdelete-radio-set' => 'پټ',
+'revdelete-radio-unset' => 'ښکاره',
 'revdelete-log' => 'سبب:',
 'revdel-restore' => 'ښکارېدنه بدلول',
 'revdel-restore-deleted' => 'ړنګې شوې بڼې',
@@ -1042,7 +1040,6 @@ $1',
 'preferences' => 'غوره توبونه',
 'mypreferences' => 'غوره توبونه',
 'prefs-edits' => 'د سمونو شمېر:',
-'prefsnologin' => 'غونډال کې نه ياست ننوتي',
 'changepassword' => 'پټنوم بدلول',
 'prefs-skin' => 'پوښۍ',
 'skin-preview' => 'مخکتنه',
@@ -1065,7 +1062,7 @@ $1',
 'prefs-rendering' => 'ښکارېدنه',
 'saveprefs' => 'خوندي کول',
 'resetprefs' => 'بيا سمول',
-'restoreprefs' => 'ټولې تلواليزې امستنې پرځای کول',
+'restoreprefs' => 'ټولې تلواليزې امستنې پرځای کول (په ټولو برخو کې)',
 'prefs-editing' => 'سمېدنې کې دی',
 'rows' => 'ليکې:',
 'columns' => 'ستنې:',
@@ -1114,7 +1111,7 @@ $1',
 'yournick' => 'کورنی نوم:',
 'badsiglength' => 'ستاسو لاسليک ډېر اوږد دی.
 بايد چې لاسليک مو له $1 {{PLURAL:$1|توري|تورو}} نه لږ وي.',
-'yourgender' => 'جنس:',
+'yourgender' => 'څنگه غواړۍ ځان څرگند کړۍ؟',
 'gender-unknown' => 'ناڅرگنده',
 'gender-male' => 'نارينه',
 'gender-female' => 'ښځينه',
@@ -1150,9 +1147,11 @@ $1',
 'userrights-lookup-user' => 'کارن ډلې سمبالول',
 'userrights-user-editname' => 'يو کارن نوم وليکۍ:',
 'editusergroup' => 'کارن ډلې سمول',
+'editinguser' => "د '''[[کارن:$1|$1]]''' کارن رښتې بدلول $2",
 'userrights-editusergroup' => 'کارن ډلې سمول',
 'saveusergroups' => 'کارن ډلې خوندي کول',
 'userrights-groupsmember' => 'غړی د:',
+'userrights-groupsmember-auto' => 'ضمني غړی د:',
 'userrights-groups-help' => 'تاسې هغه ډلې چې همدا کارن يې غړی دی بدلولی شی:
 * يو په نښه شوی بکس د دې مانا لري چې کارن د هغې ډلې غړيتوب لري.
 * يو نانښه شوی بکس د دې مانا لري چې کارن د هغې ډلې غړيتوب نلري.
@@ -1262,6 +1261,7 @@ $1',
 'recentchanges-label-minor' => 'دا يوه وړه سمونه ده',
 'recentchanges-label-bot' => 'دغه سمون د يو روباټ لخوا ترسره شوی',
 'recentchanges-label-unpatrolled' => 'دغه سمون تر اوسه پورې نه دی څارل شوی',
+'recentchanges-legend-newpage' => '(دا هم وگورۍ [[Special:NewPages|د نويو مخونو لړليک]])',
 'rcnote' => "دلته لاندې {{PLURAL:$1|وروستی '''1''' بدلون دی|وروستي '''$1''' بدلونونه دي}} چې په  {{PLURAL:$2| يوې ورځ|'''$2''' ورځو}} کې تر $4 نېټې او $5 بجو پېښ شوي.",
 'rcnotefrom' => "په همدې ځای کې لاندې هغه بدلونونه دي چې د '''$2''' نه راپدېخوا پېښ شوي (تر '''$1''' پورې ښکاره شوي).",
 'rclistfrom' => 'هغه نوي بدلونونه ښکاره کول چې له $1 نه پيلېږي',
@@ -1402,6 +1402,7 @@ $1',
 'upload_source_file' => '(ستاسو په کمپيوټر کې يوه دوتنه)',
 
 # Special:ListFiles
+'listfiles-summary' => 'همدا ځانگړی مخ ټولې پورته شوې دوتنې ښکاره کوي.',
 'listfiles_search_for' => 'د انځور د نوم لټون:',
 'imgfile' => 'دوتنه',
 'listfiles' => 'د دوتنو لړليک',
@@ -1412,6 +1413,8 @@ $1',
 'listfiles_size' => 'کچه (بايټونه)',
 'listfiles_description' => 'څرگندونه',
 'listfiles_count' => 'بڼې',
+'listfiles-latestversion-yes' => 'هو',
+'listfiles-latestversion-no' => 'نه',
 
 # File description page
 'file-anchor-link' => 'دوتنه',
@@ -1484,6 +1487,7 @@ $1',
 
 # Random page in category
 'randomincategory-selectcategory' => 'يو ناټاکلی مخ له وېشنيزې موندل: $1 $2.',
+'randomincategory-selectcategory-submit' => 'ورځه',
 
 # Random redirect
 'randomredirect' => 'ناټاکلی ورگرځېدنه',
@@ -1565,6 +1569,7 @@ $1',
 'listusers' => 'کارن لړليک',
 'listusers-editsonly' => 'يوازې هغه کارنان چې سمونونه يې کړي ښکاره کول',
 'listusers-creationsort' => 'د جوړېدو د نېټې له مخې اوډل',
+'listusers-desc' => 'مخښکته اوډل',
 'usereditcount' => '{{PLURAL:$1|سمون|سمونونه}}',
 'usercreated' => 'په $1 نېټه په $2 بجو {{GENDER:$3|جوړ شو}}',
 'newpages' => 'نوي مخونه',
@@ -1689,7 +1694,7 @@ $1',
 'emailccme' => 'زما د پيغام يوه بېلگه دې ماته هم برېښليک شي.',
 'emailccsubject' => '$1 ته ستاسو د پيغام لمېسه: $2',
 'emailsent' => 'برېښليک مو ولېږل شو',
-'emailsenttext' => 'ستاسو برېښليکي پيغام ولېږل شو.',
+'emailsenttext' => 'ستاسې برېښليکي پيغام ولېږل شو.',
 'emailuserfooter' => 'دا برېښليک د $1 لخوا $2 ته د {{SITENAME}} په وېبځي کې د "کارن ته برېښليک لېږل" د کړنې په مرسته لېږل شوی.',
 
 # User Messenger
@@ -1715,7 +1720,7 @@ $1',
 'unwatchthispage' => 'څارنې په ټپه درول',
 'notanarticle' => 'يو منځپانګيز مخ نه دی',
 'watchlist-details' => 'ستاسې کتنلړ کې {{PLURAL:$1|$1 مخ دی|$1 مخونه دي}}، د خبرو اترو مخونه مو پکې نه دي شمېرلي.',
-'wlheader-enotif' => 'د Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù\84Ù\87 Ù\84ارÛ\90 Ø®Ø¨Ø±Ù\88Ù\84 Ú\86ارÙ\86 Ø´Ù\88Û\8c.*',
+'wlheader-enotif' => 'برÛ\90Ú\9aÙ\84Ù\8aÚ© Ø®Ø¨Ø±Ù\88Ù\86Ù\87 Ú\86ارÙ\86Ù\87 Ø´Ù\88Û\90.',
 'wlheader-showupdated' => "هغه مخونه چې وروستی ځل ستاسو د کتلو نه وروسته بدلون موندلی په '''روڼ''' ليک نښه شوي.",
 'watchlistcontains' => 'ستاسې کتنلړ $1 {{PLURAL:$1|مخ|مخونه}} لري.',
 'iteminvalidname' => "د '$1' توکي سره ستونزه، ناسم نوم ...",
@@ -2329,7 +2334,7 @@ $1',
 'exif-copyright' => 'د رښتو خاوند',
 'exif-colorspace' => 'رنگ تشيال',
 'exif-pixelydimension' => 'د انځور سور',
-'exif-pixelxdimension' => 'د Ø§Ù\86Ú\81Ù\88ر Ø¬Ú«والی',
+'exif-pixelxdimension' => 'د Ø§Ù\86Ú\81Ù\88ر Ø¬Ú¯والی',
 'exif-usercomment' => 'د کارن تبصرې',
 'exif-relatedsoundfile' => 'اړونده غږيزه دوتنه',
 'exif-datetimedigitized' => 'د گڼياليز کېدنې وخت او نېټه',
@@ -2781,4 +2786,11 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|پېړۍ|پېړۍ}}',
 'duration-millennia' => '$1 {{PLURAL:$1|زرمه|زرمې}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'کينډۍ غځول',
+'expand_templates_input' => 'ځايونکی متن:',
+'expand_templates_output' => 'پايله',
+'expand_templates_ok' => 'ښه',
+'expand_templates_preview' => 'مخکتنه',
+
 );
index fcfa787..82575c6 100644 (file)
@@ -57,6 +57,7 @@
  * @author Teles
  * @author Urhixidur
  * @author Villate
+ * @author Vitorvicentevalente
  * @author Waldir
  * @author Yves Marques Junqueira
  * @author לערי ריינהארט
@@ -117,7 +118,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Título_inválido' ),
        'Blankpage'                 => array( 'Página_em_branco' ),
        'Block'                     => array( 'Bloquear', 'Bloquear_IP', 'Bloquear_utilizador', 'Bloquear_usuário' ),
-       'Blockme'                   => array( 'Bloquear-me', 'Auto-bloqueio' ),
        'Booksources'               => array( 'Fontes_de_livros' ),
        'BrokenRedirects'           => array( 'Redireccionamentos_quebrados', 'Redirecionamentos_quebrados' ),
        'Categories'                => array( 'Categorias' ),
@@ -128,10 +128,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Criar_conta' ),
        'Deadendpages'              => array( 'Páginas_sem_saída', 'Artigos_sem_saída' ),
        'DeletedContributions'      => array( 'Contribuições_eliminadas', 'Edições_eliminadas' ),
-       'Disambiguations'           => array( 'Desambiguações', 'Páginas_de_desambiguação', 'Desambiguar' ),
        'DoubleRedirects'           => array( 'Redireccionamentos_duplos', 'Redirecionamentos_duplos' ),
        'EditWatchlist'             => array( 'Editar_lista_de_páginas_vigiadas' ),
        'Emailuser'                 => array( 'Contactar_utilizador', 'Contactar_usuário', 'Contatar_usuário' ),
+       'ExpandTemplates'           => array( 'Expandir_predefinições' ),
        'Export'                    => array( 'Exportar' ),
        'Fewestrevisions'           => array( 'Páginas_com_menos_edições', 'Artigos_com_menos_edições', 'Artigos_menos_editados' ),
        'FileDuplicateSearch'       => array( 'Busca_de_ficheiros_duplicados', 'Busca_de_arquivos_duplicados' ),
@@ -192,8 +192,8 @@ $specialPageAliases = array(
        'Unusedtemplates'           => array( 'Predefinições_não_utilizadas', 'Predefinições_sem_uso' ),
        'Unwatchedpages'            => array( 'Páginas_não_vigiadas', 'Páginas_não-vigiadas', 'Artigos_não-vigiados', 'Artigos_não_vigiados' ),
        'Upload'                    => array( 'Carregar_imagem', 'Carregar_ficheiro', 'Carregar_arquivo', 'Enviar' ),
-       'Userlogin'                 => array( 'Entrar', 'Login' ),
-       'Userlogout'                => array( 'Sair', 'Logout' ),
+       'Userlogin'                 => array( 'Entrar' ),
+       'Userlogout'                => array( 'Sair' ),
        'Userrights'                => array( 'Privilégios', 'Direitos', 'Estatutos' ),
        'Version'                   => array( 'Versão', 'Sobre' ),
        'Wantedcategories'          => array( 'Categorias_pedidas', 'Categorias_em_falta', 'Categorias_inexistentes' ),
@@ -265,8 +265,8 @@ $magicWords = array(
        'img_center'                => array( '1', 'centro', 'center', 'centre' ),
        'img_framed'                => array( '1', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'semmoldura', 'semborda', 'frameless' ),
-       'img_page'                  => array( '1', 'página=$1', 'página $1', 'page=$1', 'page $1' ),
-       'img_upright'               => array( '1', 'superiordireito', 'superiordireito=$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_page'                  => array( '1', 'página=$1', 'página_$1', 'página $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'superiordireito', 'superiordireito=$1', 'superiordireito_$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'borda', 'border' ),
        'img_baseline'              => array( '1', 'linhadebase', 'baseline' ),
        'img_top'                   => array( '1', 'acima', 'top' ),
@@ -594,12 +594,10 @@ Consulte a página da [[Special:Version|versão do sistema]].',
 'ok' => 'OK',
 'retrievedfrom' => 'Obtida de "$1"',
 'youhavenewmessages' => 'Tem $1 ($2).',
-'newmessageslink' => 'mensagens novas',
-'newmessagesdifflink' => 'comparar com a penúltima revisão',
 'youhavenewmessagesfromusers' => 'Tem $1 de {{PLURAL:$3|outro utilizador|$3 utilizadores}} ($2).',
 'youhavenewmessagesmanyusers' => 'Tem $1 de muitos utilizadores ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|uma mensagem nova|mensagens novas}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|última alteração|últimas alterações}}',
+'newmessageslinkplural' => '{{PLURAL:$1|uma mensagem nova|999=mensagens novas}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|última alteração|999=últimas alterações}}',
 'youhavenewmessagesmulti' => 'Tem mensagens novas em $1',
 'editsection' => 'editar',
 'editold' => 'editar',
@@ -728,7 +726,7 @@ O administrador que efetuou o bloqueio deu a seguinte explicação: "$3".',
 'invalidtitle-knownnamespace' => 'Título inválido com o espaço nominal "$2" e texto "$3"',
 'invalidtitle-unknownnamespace' => 'Título inválido com número de espaço nominal $1 desconhecido e texto "$2"',
 'exception-nologin' => 'Não está autenticado',
-'exception-nologin-text' => 'Esta página ou operação requer que esteja autenticado nesta wiki.',
+'exception-nologin-text' => 'Por favor, [[Special:Userlogin|entre]] para poder acessar esta página ou acção.',
 'exception-nologin-text-manual' => 'Por favor  $1  para poder aceder a esta página ou acção.',
 
 # Virus scanner
@@ -776,7 +774,7 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências]].'
 'gotaccount' => "Já possui uma conta? '''$1'''.",
 'gotaccountlink' => 'Autentique-se',
 'userlogin-resetlink' => 'Esqueceu-se do seu nome de utilizador ou da palavra-chave?',
-'userlogin-resetpassword-link' => 'Recuperar palavra-chave',
+'userlogin-resetpassword-link' => 'Esqueceu a sua palavra-chave?',
 'helplogin-url' => 'Help:Autenticação',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajuda a fazer login]]',
 'userlogin-loggedin' => 'Já está {{GENDER:$1|autenticado|autenticada|autenticado}} com o nome $1.
@@ -850,9 +848,9 @@ Para prevenir abusos, só um email de recuperação de palavra-chave pode ser en
 'mailerror' => 'Erro ao enviar correio: $1',
 'acct_creation_throttle_hit' => 'Visitantes desta wiki com o seu endereço IP criaram $1 {{PLURAL:$1|conta|contas}} no último dia, o que é o máximo permitido neste período de tempo.
 Em resultado, visitantes com este endereço IP não podem criar mais nenhuma conta neste momento.',
-'emailauthenticated' => 'O seu endereço de correio electrónico foi autenticado a $2 às $3.',
-'emailnotauthenticated' => 'O seu endereço de correio electrónico ainda não foi autenticado.
-Não serão enviados correios de nenhuma das seguintes funcionalidades.',
+'emailauthenticated' => 'O seu endereço de correio electrónico foi confirmado a $2, às $3.',
+'emailnotauthenticated' => 'O seu endereço de correio electrónico ainda não foi confirmado.
+Não serão enviados emails de nenhuma das seguintes funcionalidades.',
 'noemailprefs' => 'Especifique um endereço de correio eletrónico nas suas preferências para ativar estas funcionalidades.',
 'emailconfirmlink' => 'Confirme o seu endereço de correio electrónico',
 'invalidemailaddress' => 'O endereço de correio eletrónico não pode ser aceite porque parece ter um formato inválido.
@@ -1301,7 +1299,7 @@ Outros administradores da {{SITENAME}} continuarão a poder aceder ao conteúdo
 'revdelete-suppress-text' => "A supressão '''só''' deverá ser usada nos seguintes casos:
 * Informação potencialmente caluniosa, difamatória ou injuriosa
 * Informação pessoal imprópria
-*: ''endereços de domicílio e números de telefone, números da segurança social, etc''",
+*: ''endereços de domicílio e números de telefone, números de identificação nacional, etc''",
 'revdelete-legend' => 'Definir restrições de visibilidade',
 'revdelete-hide-text' => 'Revisão do texto',
 'revdelete-hide-image' => 'Ocultar conteúdo do ficheiro',
@@ -1310,8 +1308,8 @@ Outros administradores da {{SITENAME}} continuarão a poder aceder ao conteúdo
 'revdelete-hide-user' => 'Nome de utilizador/endereço de IP',
 'revdelete-hide-restricted' => 'Ocultar dados dos administradores e de todos os outros',
 'revdelete-radio-same' => '(manter)',
-'revdelete-radio-set' => 'Visível',
-'revdelete-radio-unset' => 'Escondido',
+'revdelete-radio-set' => 'Escondido',
+'revdelete-radio-unset' => 'Visível',
 'revdelete-suppress' => 'Ocultar dados dos administradores e de todos os outros',
 'revdelete-unsuppress' => 'Remover restrições das revisões restauradas',
 'revdelete-log' => 'Motivo:',
@@ -1470,7 +1468,7 @@ Note, no entanto, que a indexação da {{SITENAME}} neste motor de busca pode es
 'preferences' => 'Preferências',
 'mypreferences' => 'Preferências',
 'prefs-edits' => 'Número de edições:',
-'prefsnologin' => 'Não autenticado',
+'prefsnologintext2' => 'Por favor, precisa de $1 para definir as suas preferências.',
 'changepassword' => 'Alterar palavra-chave',
 'prefs-skin' => 'Tema',
 'skin-preview' => 'Antever tema',
@@ -1771,6 +1769,7 @@ Se optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu
 'recentchanges-label-minor' => 'Esta é uma edição menor',
 'recentchanges-label-bot' => 'Esta edição foi feita por um robô',
 'recentchanges-label-unpatrolled' => 'Esta edição ainda não foi patrulhada',
+'recentchanges-legend-newpage' => '(ver também a [[Special:NewPages|lista de páginas novas]])',
 'rcnote' => "A seguir {{PLURAL:$1|está listada '''uma''' alteração ocorrida|estão listadas '''$1''' alterações ocorridas}} {{PLURAL:$2|no último dia|nos últimos '''$2''' dias}}, a partir das $5 de $4.",
 'rcnotefrom' => 'Abaixo estão as mudanças desde <b>$2</b> (mostradas até <b>$1</b>).',
 'rclistfrom' => 'Mostrar as novas mudanças a partir das $1',
@@ -2503,16 +2502,16 @@ $PAGEINTRO $NEWPAGE
 Resumo da edição: $PAGESUMMARY $PAGEMINOREDIT
 
 Contacte o editor:
-correio eletrónico: $PAGEEDITOR_EMAIL
+correio electrónico: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Até que visite esta página, não receberá mais notificações das alterações futuras.
-Pode também reativar as notificações para todas páginas na sua lista de páginas vigiadas.
+Até que visite novamente esta página com a sua conta ligada, não receberá mais notificações das alterações futuras.
+Pode também reactivar as notificações para todas páginas na sua lista de páginas vigiadas.
 
-             O seu sistema de notificação amigável da {{SITENAME}}
+O seu sistema de notificação amigável da {{SITENAME}}
 
 --
-Para alterar as suas preferências das notificações por correio eletrónico, visite
+Para alterar as suas preferências das notificações por correio electrónico, visite
 {{canonicalurl:{{#special:Preferences}}}}
 
 Para alterar as suas preferências das páginas vigiadas, visite
@@ -3335,7 +3334,7 @@ Executá-lo poderá comprometer a segurança do seu sistema.",
 'svg-long-desc' => 'ficheiro SVG, de $1 × $2 pixels, tamanho: $3',
 'svg-long-desc-animated' => 'ficheiro SVG animado, de $1 × $2 pixels, tamanho: $3',
 'svg-long-error' => 'Ficheiro SVG inválido: $1',
-'show-big-image' => 'Resolução completa',
+'show-big-image' => 'Arquivo original',
 'show-big-image-preview' => 'Tamanho desta antevisão: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Outra resolução|Outras resoluções}}: $1.',
 'show-big-image-size' => '$1 × $2 pixels',
@@ -4243,4 +4242,21 @@ Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário se
 'limitreport-templateargumentsize' => 'Tamanho dos argumentos da predefinição',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte|bytes}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Expandir predefinições',
+'expand_templates_intro' => "Esta página especial recebe um texto e expande recursivamente todas as predefinições nele existentes.
+Também expande funções do analisador sintático ''(parser)'', tais como
+<nowiki>{{</nowiki>#language:...}}, e variáveis, tais como
+<nowiki>{{</nowiki>CURRENTDAY}}.
+De fato, expande tudo o que estiver entre chaves duplas.",
+'expand_templates_title' => 'Título de contexto para {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Texto a expandir:',
+'expand_templates_output' => 'Resultado',
+'expand_templates_xml_output' => 'Resultado XML',
+'expand_templates_ok' => 'Expandir',
+'expand_templates_remove_comments' => 'Remover comentários',
+'expand_templates_remove_nowiki' => "Suprimir ''tags'' <nowiki> no resultado",
+'expand_templates_generate_xml' => 'Mostrar a árvore de análise sintáctica do XML',
+'expand_templates_preview' => 'Antevisão do resultado',
+
 );
index 5c44e2d..fb60915 100644 (file)
@@ -124,7 +124,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Título_inválido' ),
        'Blankpage'                 => array( 'Página_em_branco' ),
        'Block'                     => array( 'Bloquear', 'Bloquear_IP', 'Bloquear_utilizador', 'Bloquear_usuário' ),
-       'Blockme'                   => array( 'Bloquear-me', 'Auto-bloqueio' ),
        'Booksources'               => array( 'Fontes_de_livros' ),
        'BrokenRedirects'           => array( 'Redirecionamentos_quebrados' ),
        'Categories'                => array( 'Categorias' ),
@@ -135,7 +134,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Criar_conta' ),
        'Deadendpages'              => array( 'Páginas_sem_saída', 'Artigos_sem_saída' ),
        'DeletedContributions'      => array( 'Contribuições_eliminadas', 'Edições_eliminadas' ),
-       'Disambiguations'           => array( 'Páginas_de_desambiguação', 'Desambiguar', 'Desambiguações' ),
        'DoubleRedirects'           => array( 'Redirecionamentos_duplos' ),
        'EditWatchlist'             => array( 'Editar_lista_de_páginas_vigiadas' ),
        'Emailuser'                 => array( 'Contatar_usuário', 'Contactar_usuário', 'Contactar_utilizador' ),
@@ -199,8 +197,8 @@ $specialPageAliases = array(
        'Unusedtemplates'           => array( 'Predefinições_sem_uso', 'Predefinições_não_utilizadas' ),
        'Unwatchedpages'            => array( 'Páginas_não-vigiadas', 'Páginas_não_vigiadas', 'Artigos_não-vigiados', 'Artigos_não_vigiados' ),
        'Upload'                    => array( 'Carregar_arquivo', 'Carregar_imagem', 'Carregar_ficheiro', 'Enviar' ),
-       'Userlogin'                 => array( 'Autenticar-se', 'Entrar', 'Login' ),
-       'Userlogout'                => array( 'Sair', 'Logout' ),
+       'Userlogin'                 => array( 'Autenticar-se', 'Entrar' ),
+       'Userlogout'                => array( 'Sair' ),
        'Userrights'                => array( 'Privilégios', 'Direitos', 'Estatutos' ),
        'Version'                   => array( 'Versão', 'Sobre' ),
        'Wantedcategories'          => array( 'Categorias_pedidas', 'Categorias_em_falta', 'Categorias_inexistentes' ),
@@ -272,8 +270,8 @@ $magicWords = array(
        'img_center'                => array( '1', 'centro', 'center', 'centre' ),
        'img_framed'                => array( '1', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'semmoldura', 'semborda', 'frameless' ),
-       'img_page'                  => array( '1', 'página=$1', 'página $1', 'page=$1', 'page $1' ),
-       'img_upright'               => array( '1', 'superiordireito', 'superiordireito=$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_page'                  => array( '1', 'página=$1', 'página_$1', 'página $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'superiordireito', 'superiordireito=$1', 'superiordireito_$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'borda', 'border' ),
        'img_baseline'              => array( '1', 'linhadebase', 'baseline' ),
        'img_top'                   => array( '1', 'acima', 'top' ),
@@ -337,7 +335,7 @@ $messages = array(
 'tog-usenewrc' => 'Agrupar alterações por páginas nas mudanças recentes e nas páginas vigiadas',
 'tog-numberheadings' => 'Auto-numerar cabeçalhos',
 'tog-showtoolbar' => 'Mostrar barra de ferramentas de edição',
-'tog-editondblclick' => 'Editar páginas quando houver clique duplo (requer JavaScript)',
+'tog-editondblclick' => 'Editar páginas quando houver clique duplo',
 'tog-editsection' => 'Ativar a edição de seções com links [editar]',
 'tog-editsectiononrightclick' => 'Habilitar edição de seção por clique com o botão direito no título da seção (requer JavaScript)',
 'tog-showtoc' => 'Mostrar Tabela de Conteúdos (para páginas com mais de três cabeçalhos)',
@@ -602,8 +600,6 @@ Veja a [[Special:Version|página sobre a versão do sistema]].',
 'ok' => 'OK',
 'retrievedfrom' => 'Disponível em "$1"',
 'youhavenewmessages' => 'Você tem $1 ($2).',
-'newmessageslink' => 'novas mensagens',
-'newmessagesdifflink' => 'última alteração',
 'youhavenewmessagesfromusers' => 'Você tem $1 de {{PLURAL:$3|outro usuário|$3 usuários}} ($2)',
 'youhavenewmessagesmanyusers' => 'Você tem $1 de muitos usuários ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|uma mensagem nova|mensagens novas}}',
@@ -787,7 +783,7 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências no
 'gotaccount' => "Já possui uma conta? '''$1'''.",
 'gotaccountlink' => 'Autenticar-se',
 'userlogin-resetlink' => 'Esqueceu-se do seu nome de usuário ou da senha?',
-'userlogin-resetpassword-link' => 'Troque sua senha',
+'userlogin-resetpassword-link' => 'Esqueceu sua senha?',
 'helplogin-url' => 'Help:Iniciar sessão',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajuda para iniciar sessão]]',
 'userlogin-loggedin' => 'Você já está conectado como {{GENDER:$1|$1}}.
@@ -1300,12 +1296,12 @@ Outros administradores no {{SITENAME}} continuarão podendo acessar ao conteúdo
 'revdelete-hide-text' => 'Ocultar texto da edição',
 'revdelete-hide-image' => 'Ocultar conteúdos do arquivo',
 'revdelete-hide-name' => 'Ocultar ação e alvo',
-'revdelete-hide-comment' => 'Ocultar o sumário de edição',
-'revdelete-hide-user' => 'Ocultar nome de usuário/IP do editor',
+'revdelete-hide-comment' => 'Sumário de edição',
+'revdelete-hide-user' => 'Nome de usuário/endereço IP',
 'revdelete-hide-restricted' => 'Suprimir dados de administradores assim como de outros',
 'revdelete-radio-same' => '(não alterar)',
-'revdelete-radio-set' => 'Sim',
-'revdelete-radio-unset' => 'Não',
+'revdelete-radio-set' => 'Oculto',
+'revdelete-radio-unset' => 'Visível',
 'revdelete-suppress' => 'Suprimir dados de administradores, bem como de outros',
 'revdelete-unsuppress' => 'Remover restrições das edições restauradas',
 'revdelete-log' => 'Motivo:',
@@ -1462,7 +1458,6 @@ Note que os índices do sistema de busca externo poderão conter referências de
 'preferences' => 'Preferências',
 'mypreferences' => 'Preferências',
 'prefs-edits' => 'Número de edições:',
-'prefsnologin' => 'Não autenticado',
 'changepassword' => 'Alterar senha',
 'prefs-skin' => 'Tema',
 'skin-preview' => 'Pré-visualização',
@@ -1761,6 +1756,7 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'recentchanges-label-minor' => 'Esta é uma edição menor',
 'recentchanges-label-bot' => 'Esta edição foi feita por um robô',
 'recentchanges-label-unpatrolled' => 'Esta edição ainda não foi patrulhada',
+'recentchanges-legend-newpage' => '$1 - nova página',
 'rcnote' => "A seguir {{PLURAL:$1|está listada '''uma''' alteração ocorrida|estão listadas '''$1''' alterações ocorridas}} {{PLURAL:$2|no último dia|nos últimos '''$2''' dias}}, a partir das $5 de $4.",
 'rcnotefrom' => "Seguem as alterações desde as '''$4''' de '''$3''' (limitadas a '''$1''').",
 'rclistfrom' => 'Mostrar as novas alterações a partir das $1',
@@ -4224,4 +4220,21 @@ Caso contrário, você poderá usar o formulário simplificado a seguir. Seu com
 'limitreport-expansiondepth' => 'Máxima profundidade de expansão',
 'limitreport-expensivefunctioncount' => 'Conta da função expansiva do analizador',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Expandir predefinições',
+'expand_templates_intro' => 'Esta página especial pega algum texto e expande todas as predefinições nela existentes recursivamente. 
+Também expande funções do analisador (parser) como 
+<code><nowiki>{{</nowiki>#language:…}}</code>, e variáveis como 
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Na verdade, expande tudo que está entre chaves duplas.',
+'expand_templates_title' => 'Título de contexto para {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Texto de entrada:',
+'expand_templates_output' => 'Resultado',
+'expand_templates_xml_output' => 'Resultado XML',
+'expand_templates_ok' => 'Expandir',
+'expand_templates_remove_comments' => 'Remover comentários',
+'expand_templates_remove_nowiki' => 'Suprima marcações <nowiki> no resultado',
+'expand_templates_generate_xml' => 'Mostrar árvore de análise (parse) do XML',
+'expand_templates_preview' => 'Pré-visualização',
+
 );
index 61b298b..4d84a95 100644 (file)
  * @author SPQRobin
  * @author Sanbec
  * @author Sborsody
+ * @author Scimonster
  * @author Se4598
  * @author Seb35
  * @author Sherbrooke
@@ -813,32 +814,21 @@ Parameters:
 ** {{msg-mw|Sp-contributions-newbies-title}}",
 'pagetitle-view-mainpage' => '{{optional}}',
 'backlinksubtitle' => '{{optional}}
-Appears in subtitle
-* $1 is a link to the page (HTML)',
+Appears in subtitle. Parameters:
+* $1 - a link to the page (HTML)',
 'retrievedfrom' => 'Message which appears in the source of every page, but it is hidden. It is shown when printing.
 
 Parameters:
 * $1 - a link back to the current page: {{FULLURL:{{FULLPAGENAME}}}}',
 'youhavenewmessages' => 'The yellow message appearing when someone edited your user talk page.
 
-The format is: "{{int:youhavenewmessages| [[MediaWiki:Newmessageslink/{{SUBPAGENAME}}|{{int:newmessageslink}}]] |[[MediaWiki:Newmessagesdifflink/{{SUBPAGENAME}}|{{int:newmessagesdifflink}}]]}}"
+The format is: "{{int:youhavenewmessages| [[MediaWiki:Newmessageslinkplural/{{SUBPAGENAME}}|{{int:newmessageslinkplural}}]] |[[MediaWiki:Newmessagesdifflinkplural/{{SUBPAGENAME}}|{{int:newmessagesdifflinkplural}}]]}}"
 
 Parameters:
-* $1 - a link points to new messages. Its text is {{msg-mw|Newmessageslink}}
-* $2 - a link points to new messages diff. Its text is {{msg-mw|Newmessagesdifflink}}
+* $1 - a link points to new messages. Its text is {{msg-mw|Newmessageslinkplural}}
+* $2 - a link points to new messages diff. Its text is {{msg-mw|Newmessagesdifflinkplural}}
 See also:
 * {{msg-mw|Youhavenewmessagesmanyusers}}',
-'newmessageslink' => 'This is the first link displayed in an orange rectangle when a user gets a message on their talk page.
-
-Used as <code>$1</code> in message {{msg-mw|Youhavenewmessages}}.
-{{Identical|New messages}}',
-'newmessagesdifflink' => 'This is the second link displayed in an orange rectangle when a user gets a message on his talk page.
-
-Used as <code>$2</code> in message {{msg-mw|Youhavenewmessages}}.
-
-See also:
-* {{msg-mw|Newmessagesdifflinkplural}}
-{{Identical|Last change}}',
 'youhavenewmessagesfromusers' => 'New talk indicator message: the message appearing when someone edited your user talk page. Parameters:
 * $1 - defined as {{msg-mw|newmessageslinkplural}}
 * $2 - defined as {{msg-mw|newmessagesdifflinkplural}}
@@ -852,28 +842,30 @@ Parameters:
 * $2 - {{msg-mw|newmessagesdifflinkplural}}
 See also:
 * {{msg-mw|Youhavenewmessages}}',
-'newmessageslinkplural' => "Like {{msg-mw|Newmessageslink}} but supporting pluralization.
+'newmessageslinkplural' => "This is the first link displayed in an orange rectangle when a user gets a message on their talk page.
 
-Used as <code>$1</code> in {{msg-mw|Youhavenewmessagesfromusers}}.
+Used as <code>$1</code> in messages {{msg-mw|youhavenewmessagesfromusers}}, {{msg-mw|youhavenewmessagesmanyusers}}, {{msg-mw|youhavenewmessages}}.
 
 Parameters:
-* $1 - 1 or 2:
+* $1 - 1 or 999:
 ** 1 - if there was '''one''' new edit since the last time the user has seen their talk page
-** 2 - if there was '''more than one''' new edit since the last time the user has seen their talk page
+** 999 - if there was '''more than one''' new edit since the last time the user has seen their talk page
 {{Identical|New messages}}",
-'newmessagesdifflinkplural' => 'Parameters:
-* $1 - the number of new edits since the last time the user has seen their talk page: it should be used only for correct [[plural]] as in the source text, as the exact number is not relevant.
+'newmessagesdifflinkplural' => "This is the second link displayed in an orange rectangle when a user gets a message on his talk page.
 
-Like {{msg-mw|Newmessagesdifflink}} but supporting pluralization.
+Used as <code>$2</code> in messages {{msg-mw|youhavenewmessagesfromusers}}, {{msg-mw|youhavenewmessagesmanyusers}}, {{msg-mw|youhavenewmessages}}.
 
-Used as <code>$2</code> in message {{msg-mw|Youhavenewmessagesfromusers}}.
-{{Identical|Last change}}',
+Parameters:
+* $1 - 1 or 999:
+** 1 - if there was '''one''' new edit since the last time the user has seen their talk page
+** 999 - if there was '''more than one''' new edit since the last time the user has seen their talk page
+{{Identical|Last change}}",
 'youhavenewmessagesmulti' => 'The alternative of {{msg-mw|youhavenewmessages}} as used on wikis with a special setup so they can receive the "new message" notice on other wikis as well. Used on [http://www.wikia.com/ Wikia].
 
-The format is: "{{int:youhavenewmessagesmulti| [[MediaWiki:Newmessageslink/{{SUBPAGENAME}}|{{int:newmessageslink}}]]}}"
+The format is: "{{int:youhavenewmessagesmulti| [[MediaWiki:Newmessageslinkplural/{{SUBPAGENAME}}|{{int:newmessageslinkplural}}]]}}"
 
 Parameters:
-* $1 - a link points to new messages. Its text is {{msg-mw|Newmessageslink}}',
+* $1 - a link points to new messages. Its text is {{msg-mw|Newmessageslinkplural}}',
 'editsection' => 'Display name of link to edit a section on a content page. Example: [{{MediaWiki:Editsection}}].
 
 {{Identical|Edit}}',
@@ -1447,7 +1439,7 @@ Parameters:
 {{Identical|Login error}}',
 'createacct-error' => 'Used as heading for the error message.',
 'createaccounterror' => 'Parameters:
-* $1 is an error message',
+* $1 - an error message',
 'nocookiesnew' => "This message is displayed when a new account was successfully created, but the browser doesn't accept cookies.",
 'nocookieslogin' => "This message is displayed when someone tried to login, but the browser doesn't accept cookies.",
 'nocookiesfornew' => "This message is displayed when the user tried to create a new account, but it failed the cross-site request forgery (CSRF) check. It could be blocking an attack, but most likely, the browser isn't  accepting cookies.",
@@ -1850,7 +1842,7 @@ See also:
 * {{msg-mw|cantcreateaccount-text}}.
 {{Identical|No reason given}}',
 'whitelistedittext' => 'Used as error message. Parameters:
-* $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description
+* $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description
 See also:
 * {{msg-mw|Nocreatetext}}
 * {{msg-mw|Uploadnologintext}}
@@ -1906,8 +1898,10 @@ Parameters:
 
 Parameters:
 * $1 - a possible username that has not been registered',
-'userpage-userdoesnotexist-view' => 'Shown in user pages of non existing users. See for example [{{canonicalurl:User:Foo}} User:Foo]. Parameters:
-* $1 is a username.',
+'userpage-userdoesnotexist-view' => 'Shown in user pages of non existing users. See for example [{{canonicalurl:User:Foo}} User:Foo].
+
+Parameters:
+* $1 - a username',
 'blocked-notice-logextract' => '{{gender}}
 Parameters:
 * $1 - (Optional) the name of the blocked user. Can be used for GENDER.',
@@ -2053,7 +2047,9 @@ See also:
 * {{msg-mw|loginreqtitle}}
 {{Identical|Permission error}}',
 'permissionserrorstext' => "This message is \"without action\" version of {{msg-mw|Permissionserrorstext-withaction}}.
-* \$1 is the number of reasons that were found why ''the action'' cannot be performed.",
+
+Parameters:
+* \$1 - the number of reasons that were found why ''the action'' cannot be performed",
 'permissionserrorstext-withaction' => 'This message is "with action" version of {{msg-mw|Permissionserrorstext}}.
 
 Parameters:
@@ -2148,8 +2144,10 @@ This message is substituted in:
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'On some (expensive) [[MetaWikipedia:Help:ParserFunctions|parser functions]] (e.g. <code><nowiki>{{#ifexist:}}</nowiki></code>) there is a limit of how many times it may be used. This is an error message shown when the limit is exceeded.
-* $1 is the current number of parser function calls.
-* $2 is the allowed number of parser function calls.
+
+Parameters:
+* $1 - the current number of parser function calls
+* $2 - the allowed number of parser function calls
 See also [[:mw:Manual:$wgExpensiveParserFunctionLimit|$wgExpensiveParserFunctionLimit in the MediaWiki manual]].
 
 See also:
@@ -2264,10 +2262,14 @@ See the error message:
 * {{msg-mw|history-feed-empty}}',
 'currentrev' => 'Used in Diff Preview page. The diff is between {{msg-mw|currentrev}} and {{msg-mw|yourtext}}.
 {{Identical|Current revision}}',
-'currentrev-asof' => 'Used on a difference page when comparing the current versions of a page with each other. See {{msg-mw|Revisionasof}} for the message for non-current version.
-* $1 is a date and time
-* $2 is a date (optional)
-* $3 is a time (optional)',
+'currentrev-asof' => 'Used on a difference page when comparing the current versions of a page with each other.
+
+See {{msg-mw|Revisionasof}} for the message for non-current version.
+
+Parameters:
+* $1 - a date and time
+* $2 - (Optional) a date
+* $3 - (Optional) a time',
 'revisionasof' => 'Used on a difference page when comparing different versions of a page or when viewing an non-current version of a page.
 
 See {{msg-mw|Currentrev-asof}} for the message for the current version.
@@ -2514,30 +2516,37 @@ Links to page history at Special:RevisionDelete header together with links to th
 Links to [[Special:Undelete]] at [[Special:RevisionDelete]] header together with links to the logs and page history.',
 'revdelete-hide-current' => '{{RevisionDelete}}
 Parameters:
-* $1 is a date
-* $2 is a time',
+* $1 - a date
+* $2 - a time
+{{Related|Revdelete}}',
 'revdelete-show-no-access' => '{{RevisionDelete}}
 Parameters:
-* $1 is a date
-* $2 is a time',
+* $1 - a date
+* $2 - a time
+{{Related|Revdelete}}',
 'revdelete-modify-no-access' => '{{RevisionDelete}}
 Parameters:
-* $1 is a date
-* $2 is a time',
+* $1 - a date
+* $2 - a time
+{{Related|Revdelete}}',
 'revdelete-modify-missing' => '{{RevisionDelete}}
-* $1 is a revision ID',
+* $1 - a revision ID
+{{Related|Revdelete}}',
 'revdelete-no-change' => '{{RevisionDelete}}
 Parameters:
-* $1 is a date
-* $2 is a time',
+* $1 - a date
+* $2 - a time
+{{Related|Revdelete}}',
 'revdelete-concurrent-change' => '{{RevisionDelete}}
 Parameters:
-* $1 is a date
-* $2 is a time',
+* $1 - a date
+* $2 - a time
+{{Related|Revdelete}}',
 'revdelete-only-restricted' => '{{RevisionDelete}}
 Parameters:
 *$1 - date
-*$2 - time',
+*$2 - time
+{{Related|Revdelete}}',
 'revdelete-reason-dropdown' => '{{RevisionDelete}}
 Used as item list for dropdown.
 [[File:RevDelete Special-RevisionDelete (r60428).png|frame|center|Screenshot of the interface]]
@@ -2751,8 +2760,9 @@ See also:
 
 Example: [{{canonicalurl:Project:News|diff=426850&oldid=99999999}} Diff with invalid revision#]
 
-* $1 is the list of missing revisions IDs
-* $2 is the number of items in $1 (one or two)',
+Parameters:
+* $1 - the list of missing revisions IDs
+* $2 - the number of items in $1 (one or two)',
 
 # Search results
 'searchresults' => 'This is the title of the page that contains the results of a search.
@@ -2953,8 +2963,8 @@ See also:
 In this sentence, "their indexes" refers to "Google\'s indexes".
 
 Shown on [[Special:Search]] when the internal search is disabled.',
-'search-error' => 'Shown when an error has occurred when performing a search
-* $1 is the localized error that was returned',
+'search-error' => 'Shown when an error has occurred when performing a search. Parameters:
+* $1 - the localized error that was returned',
 
 # Preferences page
 'preferences' => 'Title of the [[Special:Preferences]] page.
@@ -2967,7 +2977,6 @@ See also:
 * {{msg-mw|Tooltip-pt-preferences}}
 {{Identical|Preferences}}',
 'prefs-edits' => 'In user preferences.',
-'prefsnologin' => '{{Identical|Not logged in}}',
 'prefsnologintext2' => 'Parameters:
 * $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
 'changepassword' => "Section heading on [[Special:Preferences]], tab 'User profile'.
@@ -3120,8 +3129,8 @@ See also:
 * {{msg-mw|Prefs-memberingroups-type}}',
 'prefs-memberingroups-type' => '{{optional}}
 Parameters:
-* $1 is list of group names
-* $2 is list of group member names. Label for these is {{msg-mw|prefs-memberingroups}}.',
+* $1 - list of group names
+* $2 - list of group member names. Label for these is {{msg-mw|Prefs-memberingroups}}',
 'prefs-registration' => 'Used in [[Special:Preferences]].',
 'prefs-registration-date-time' => '{{optional}}
 Used in [[Special:Preferences]]. Parameters are:
@@ -3273,8 +3282,8 @@ Parameters:
 * $2 - (Optional) the user name, for GENDER',
 'userrights-groupsmember-type' => '{{optional}}
 Parameters:
-* $1 is list of group names.
-* $2 is list of group member names. Used with labels {{msg-mw|userrights-groupsmember}} and {{msg-mw|userrights-groupsmember-auto}}',
+* $1 - list of group names
+* $2 - list of group member names. Used with labels {{msg-mw|Userrights-groupsmember}} and {{msg-mw|Userrights-groupsmember-auto}}',
 'userrights-groups-help' => 'Instructions displayed on [[Special:UserRights]]. Parameters:
 * $1 - (Optional) a username, can be used for GENDER',
 'userrights-reason' => 'Text beside log field when editing user groups
@@ -3595,10 +3604,18 @@ See also:
 'recentchanges-summary' => 'Summary of [[Special:RecentChanges]].',
 'recentchanges-noresult' => 'Used in [[Special:RecentChanges]], [[Special:RecentChangesLinked]], and [[Special:Watchlist]] when there are no changes to be shown.',
 'recentchanges-feed-description' => 'Used in feed of RecentChanges. See example [{{canonicalurl:Special:RecentChanges|feed=atom}} feed].',
-'recentchanges-label-newpage' => 'Tooltip for {{msg-mw|newpageletter}}',
-'recentchanges-label-minor' => 'Tooltip for {{msg-mw|minoreditletter}}',
-'recentchanges-label-bot' => 'Tooltip for {{msg-mw|boteditletter}}',
+'recentchanges-label-newpage' => '# Used as tooltip for {{msg-mw|Newpageletter}}.
+# Also used as legend. Preceded by {{msg-mw|Newpageletter}} and followed by {{msg-mw|Recentchanges-legend-newpage}}.',
+'recentchanges-label-minor' => '# Used as tooltip for {{msg-mw|Minoreditletter}}
+# Also used as legend. Preceded by {{msg-mw|Minoreditletter}}',
+'recentchanges-label-bot' => '# Used as tooltip for {{msg-mw|Boteditletter}}
+# Also used as legend. Preceded by {{msg-mw|Boteditletter}}',
 'recentchanges-label-unpatrolled' => 'Tooltip for {{msg-mw|unpatrolledletter}}',
+'recentchanges-label-plusminus' => 'Legend item for plus/minus.
+
+Preceded by legend example {{msg-mw|Recentchanges-legend-plusminus}}.',
+'recentchanges-legend-newpage' => 'Used as legend in [[Special:RecentChanges]]. Preceded by {{msg-mw|Recentchanges-label-newpage}}.',
+'recentchanges-legend-plusminus' => 'A plus/minus sign with a number for the legend.',
 'rcnote' => 'Used on [[Special:RecentChanges]].
 
 Similar to {{msg-mw|wlnote}} which is used on [[Special:Watchlist]].
@@ -3631,22 +3648,22 @@ Parameters:
 * $1 - a link to the revision of a specific date and time. The date and the time are the link description (without split of date and time, [[bugzilla:19104|Bug 19104]]).
 
 The corresponding message is {{msg-mw|Rcnotefrom}}.',
-'rcshowhideminor' => "Option text in [[Special:RecentChanges]]. Parameters:
-* $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.",
-'rcshowhidebots' => "Option text in [[Special:RecentChanges]]. Parameters:
-* $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.
-{{Identical|$1 bots}}",
+'rcshowhideminor' => 'Option text in [[Special:RecentChanges]]. Parameters:
+* $1 - the "show/hide" command, with the text taken from either {{msg-mw|Show}} or {{msg-mw|Hide}}',
+'rcshowhidebots' => 'Option text in [[Special:RecentChanges]]. Parameters:
+* $1 - the "show/hide" command, with the text taken from either {{msg-mw|Show}} or {{msg-mw|Hide}}
+{{Identical|$1 bots}}',
 'rcshowhideliu' => 'Option text in [[Special:RecentChanges]]. Parameters:
 * $1 - any one of the following messages:
 ** {{msg-mw|Show}}
 ** {{msg-mw|Hide}}',
-'rcshowhideanons' => "Option text in [[Special:RecentChanges]]. Parameters:
-* $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.
-{{Identical|Anonymous user}}",
-'rcshowhidepatr' => "Option text in [[Special:RecentChanges]]. Parameters:
-* $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.",
-'rcshowhidemine' => "Option text in [[Special:RecentChanges]]. Parameters:
-* $1 is the 'show/hide' command, with the text taken from either {{msg-mw|show}} or {{msg-mw|hide}}.",
+'rcshowhideanons' => 'Option text in [[Special:RecentChanges]]. Parameters:
+* $1 - the "show/hide" command, with the text taken from either {{msg-mw|Show}} or {{msg-mw|Hide}}
+{{Identical|Anonymous user}}',
+'rcshowhidepatr' => 'Option text in [[Special:RecentChanges]]. Parameters:
+* $1 - the "show/hide" command, with the text taken from either {{msg-mw|Show}} or {{msg-mw|Hide}}',
+'rcshowhidemine' => 'Option text in [[Special:RecentChanges]]. Parameters:
+* $1 - the "show/hide" command, with the text taken from either {{msg-mw|Show}} or {{msg-mw|Hide}}',
 'rclinks' => "Used on [[Special:RecentChanges]].
 * \$1 - a list of different choices with number of pages to be shown.<br />&nbsp;Example: \"''50{{int:pipe-separator}}100{{int:pipe-separator}}250{{int:pipe-separator}}500\".
 * \$2 - a list of clickable links with a number of days for which recent changes are to be displayed.<br />&nbsp;Example: \"''1{{int:pipe-separator}}3{{int:pipe-separator}}7{{int:pipe-separator}}14{{int:pipe-separator}}30''\".
@@ -3837,8 +3854,8 @@ See also:
 'badfilename' => 'Parameters:
 * $1 - filename',
 'filetype-mime-mismatch' => 'Upload error. Parameters:
-* $1 is the extension of the uploaded file
-* $2 is the MIME type of the uploaded file',
+* $1 - the extension of the uploaded file
+* $2 - the MIME type of the uploaded file',
 'filetype-badmime' => 'Parameters:
 * $1 - string representing the MIME type',
 'filetype-bad-ie-mime' => 'Parameters:
@@ -4164,11 +4181,10 @@ See also:
 * {{msg-mw|upload-warning-subj|subject}}
 * {{msg-mw|upload-warning-msg|message}}',
 'upload-warning-msg' => 'Used as warning body which is posted on the user talk page. Parameters:
-* $1 is the URL the file was uploaded from, when using upload-by-URL
-* $2 is the session key for the upload
+* $1 - the URL the file was uploaded from, when using upload-by-URL
+* $2 - the session key for the upload
 See also:
-* {{msg-mw|upload-warning-subj|subject}}
-* {{msg-mw|upload-warning-msg|message}}',
+* {{msg-mw|Upload-warning-subj|subject}}',
 
 'upload-proto-error' => 'See also:
 * {{msg-mw|Upload-proto-error|title}}
@@ -5998,15 +6014,17 @@ Parameters:
 * $3 - the time of the displayed revision
 {{Identical|Are you sure you want to view the deleted revision of the file...}}',
 'undelete-show-file-submit' => '{{Identical|Yes}}',
-'undelete-revisionrow' => "{{Optional}}
+'undelete-revision-row' => "{{Optional}}
 A revision row in the undelete page. Parameters:
 * $1 is a checkBox to indicate whether to restore this specific revision
 * $2 is a link to the revision
 * $3 is a link to the last revision of a page ({{msg-mw|last}})
 * $4 is a link to the page
 * $5 is a link to the revision's user
-* $6 is the revision size
-* $7 is the revision comment",
+* $6 is the revision's minor edit identifier
+* $7 is the revision size
+* $8 is the revision comment
+* $9 is the revision's tags",
 
 # Namespace form on various pages
 'namespace' => 'This message is located at [[Special:Contributions]].
@@ -6530,7 +6548,8 @@ See also:
 * {{msg-mw|sp-contributions-logs}}
 * {{msg-mw|sp-contributions-deleted}}
 * {{msg-mw|sp-contributions-userrights}}',
-'contribslink' => 'Short for "contributions". Used as display name for a link to user contributions on history pages, [[Special:RecentChanges]], [[Special:Watchlist]], etc.',
+'contribslink' => 'Short for "contributions". Used as display name for a link to user contributions on history pages, [[Special:RecentChanges]], [[Special:Watchlist]], etc.
+{{Identical|Contribution}}',
 'emaillink' => 'Used as display name for a link to send an e-mail to a user in the user tool links. Example: "(Talk | contribs | block | send e-mail)".
 
 {{Identical|E-mail}}',
@@ -10533,4 +10552,19 @@ Parameters:
 * $1 - the usage
 * $2 - the maximum',
 
+# Special:ExpandTemplates
+'expandtemplates' => '{{doc-special|ExpandTemplates}}
+The name of the [[mw:Extension:ExpandTemplates|Expand Templates extension]].',
+'expand_templates_intro' => 'This is the explanation given in the heading of the [[Special:ExpandTemplates]] page; it describes its functionality to the users.
+For more information, see [[mw:Extension:ExpandTemplates]]',
+'expand_templates_title' => 'The label of the input box for the context title on the form displayed at [[Special:ExpandTemplates]] page.',
+'expand_templates_input' => '{{Identical|Input text}}',
+'expand_templates_output' => '{{Identical|Result}}',
+'expand_templates_xml_output' => 'Used as HTML <code><nowiki><h2></nowiki></code> heading.',
+'expand_templates_ok' => '{{Identical|OK}}',
+'expand_templates_remove_comments' => 'Check box to tell [[mw:Extension:ExpandTemplates]] to not show comments in the expanded template.',
+'expand_templates_remove_nowiki' => 'Option on [[Special:Expandtemplates]]',
+'expand_templates_generate_xml' => 'Used as checkbox label.',
+'expand_templates_preview' => '{{Identical|Preview}}',
+
 );
index 1a71c0c..c58b2e7 100644 (file)
@@ -46,7 +46,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'MawkaPanqa' ),
        'Blankpage'                 => array( 'PanqataChusaqchay' ),
        'Block'                     => array( 'Harkay', 'RuraqtaHarkay', 'IPHarkay' ),
-       'Blockme'                   => array( 'Harkaway' ),
        'Booksources'               => array( 'PukyuLiwru' ),
        'BrokenRedirects'           => array( 'PantaPusapuna', 'PitisqaPusapuna' ),
        'Categories'                => array( 'Katiguriyakuna' ),
@@ -56,7 +55,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'RakiqunaKamariy' ),
        'Deadendpages'              => array( 'Lluqsinannaq' ),
        'DeletedContributions'      => array( 'QullusqaRurasqa', 'QullusqaLlamkapusqa' ),
-       'Disambiguations'           => array( 'SutichanaQillqa' ),
        'DoubleRedirects'           => array( 'IskayllaPusapuna' ),
        'Emailuser'                 => array( 'EChaskitaManakuy' ),
        'Export'                    => array( 'HawamanQuy' ),
@@ -192,7 +190,7 @@ $magicWords = array(
        'img_center'                => array( '1', 'chawpi', 'centro', 'centrado', 'centrada', 'centrar', 'center', 'centre' ),
        'img_framed'                => array( '1', 'inchuyuq', 'inchu', 'marco', 'enmarcado', 'enmarcada', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'inchunnaq', 'sinmarco', 'sin_embarcar', 'sinenmarcar', 'sin_enmarcar', 'frameless' ),
-       'img_page'                  => array( '1', 'panqa=$1', 'pagina=$1', 'página=$1', 'pagina $1', 'página $1', 'pagina_$1', 'página_$1', 'page=$1', 'page $1' ),
+       'img_page'                  => array( '1', 'panqa=$1', 'pagina=$1', 'página=$1', 'pagina_$1', 'página_$1', 'page=$1', 'page $1' ),
        'img_upright'               => array( '1', 'sayaq', 'sayaq=$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'saywa', 'borde', 'border' ),
        'img_baseline'              => array( '1', 'tiksisiqi', 'baseline' ),
@@ -539,8 +537,6 @@ $1",
 'ok' => 'Arí niy',
 'retrievedfrom' => '"$1" p\'anqamanta chaskisqa (Qhichwa / Quechua)',
 'youhavenewmessages' => '$1 qhawanayki kachkan ($2).',
-'newmessageslink' => 'Musuq willaymi',
-'newmessagesdifflink' => 'qayna hukchasqapi wakin kaynin',
 'youhavenewmessagesfromusers' => '$1 {{PLURAL:$3|huk ruraqmanta|$3 ruraqkunamanta}} qhawanayki kachkan ($2).',
 'youhavenewmessagesmanyusers' => '$1 achka ruraqkunamanta qhawanayki kachkan ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|Musuq willaymi|Musuq willaykunam}}',
@@ -1361,7 +1357,6 @@ Imaymanata [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} qulluy ha
 'preferences' => 'Allinkachinakuna',
 'mypreferences' => 'Allinkachinaykuna',
 'prefs-edits' => 'Hukchasqakunap yupaynin:',
-'prefsnologin' => 'Manam yaykurqankichu',
 'changepassword' => 'Yaykuna rimata hukchay',
 'prefs-skin' => 'Qara',
 'skin-preview' => 'Ñawpaqta qhaway',
@@ -1653,6 +1648,7 @@ $1 {{PLURAL:$1|sanampamanta|sanampakunamanta}} aswan pisi kananmi.',
 'recentchanges-label-minor' => "Kayqa aslla llamk'apuymi",
 'recentchanges-label-bot' => "Kayqa rurana antachap llamk'apusqanmi",
 'recentchanges-label-unpatrolled' => "Kay llamk'apusqaqa manaraqmi patrullasqachu",
+'recentchanges-legend-newpage' => "$1 - musuq p'anqa",
 'rcnote' => "Kay qatiqpiqa qhipaq {{PLURAL:$1|'''1''' hukchasqam|'''$1''' hukchasqakunam}} qhipaq {{PLURAL:$2|p'unchawpi|'''$2''' p'unchawkunapi}}, musuqchasqa $5, $4.",
 'rcnotefrom' => "Kay qatiqpiqa '''$2'''-mantapacha ('''$1'''-kama) hukchasqakunatam rikunki.",
 'rclistfrom' => '$1-manta musuq hukchasqakunata rikuchiy',
@@ -4008,4 +4004,11 @@ Mana chayqa, kay qatiqpi kaq hunt'ana p'anqatam llamk'achiyta atinki. Willapuyni
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|byte}}',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|byte}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => "Plantillakunata mast'ariy",
+'expand_templates_input' => 'Yaykuchina qillqa:',
+'expand_templates_output' => 'Lluqsiynin:',
+'expand_templates_remove_comments' => 'Willapusqakunata qichuy',
+'expand_templates_preview' => 'Ñawpaqta qhawallay',
+
 );
index 36d89bc..713c469 100644 (file)
@@ -277,8 +277,6 @@ $1',
 'ok' => 'Ari nina',
 'retrievedfrom' => '$1 pankamanta hapishka',
 'youhavenewmessages' => '$1 charipanki ($2).',
-'newmessageslink' => 'Mushuk willaymi',
-'newmessagesdifflink' => 'yalli mushuk killkay',
 'youhavenewmessagesmulti' => '$1-pi mushuk chaskikunata charipankimi.',
 'editsection' => 'Killkana',
 'editold' => 'Killkana',
index ad053df..9c2ad54 100644 (file)
@@ -300,8 +300,6 @@ $1',
 'ok' => "D'accord",
 'retrievedfrom' => 'Da "$1"',
 'youhavenewmessages' => 'Ti has $1 ($2).',
-'newmessageslink' => 'novs messadis',
-'newmessagesdifflink' => "l'ultima midada",
 'youhavenewmessagesfromusers' => 'Ti has $1 da{{PLURAL:$3|d in utilisader| $3 utilisaders}} ($2).',
 'youhavenewmessagesmanyusers' => 'Ti has $1 da divers utilisaders ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|in nov messadi|novs messadis}}',
@@ -1098,7 +1096,6 @@ Considerescha che lur index da {{SITENAME}} po cuntegnair datas ch'èn betg pli
 'preferences' => 'Preferenzas',
 'mypreferences' => 'Preferenzas',
 'prefs-edits' => 'Dumber da las modificaziuns:',
-'prefsnologin' => "Betg t'annunzià",
 'changepassword' => 'Midar pled-clav',
 'prefs-skin' => 'Skin',
 'skin-preview' => 'Prevista',
@@ -1374,6 +1371,7 @@ Tia adressa dad e-mail na vegn betg mussada sche auters utilisaders ta contactes
 'recentchanges-label-minor' => 'Quai è ina pitschna modificaziun',
 'recentchanges-label-bot' => 'Questa modificaziun è vegnida exequida dad in bot',
 'recentchanges-label-unpatrolled' => "Questa midada n'è anc betg vegnida controllada",
+'recentchanges-legend-newpage' => '$1 - nova pagina',
 'rcnote' => "Sutvart {{PLURAL:$1|è '''ina''' midada|èn las ultimas '''$1''' midadass}} {{PLURAL:$2|da l'ultim di|dals ultims '''$2''' dis}}, versiun dals  $4 $5.",
 'rcnotefrom' => "Midadas dapi '''$2''' (maximalmain '''$1''' vegnan mussads).",
 'rclistfrom' => 'Mussar las novas midadas entschavend cun $1',
index 3343218..57ab6cd 100644 (file)
@@ -200,7 +200,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Pagini_vechi' ),
        'Blankpage'                 => array( 'Pagină_goală' ),
        'Block'                     => array( 'Blochează_IP' ),
-       'Blockme'                   => array( 'Blochează-mă' ),
        'Booksources'               => array( 'Referințe_în_cărți' ),
        'BrokenRedirects'           => array( 'Redirectări_invalide' ),
        'Categories'                => array( 'Categorii' ),
@@ -210,7 +209,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Înregistrare' ),
        'Deadendpages'              => array( 'Pagini_fără_legături' ),
        'DeletedContributions'      => array( 'Contribuții_șterse' ),
-       'Disambiguations'           => array( 'Dezambiguizări' ),
        'DoubleRedirects'           => array( 'Redirectări_duble' ),
        'Emailuser'                 => array( 'Email_utilizator' ),
        'Export'                    => array( 'Exportă' ),
@@ -572,12 +570,10 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Adus de la „$1”',
 'youhavenewmessages' => 'Aveți $1 ($2).',
-'newmessageslink' => 'mesaje noi',
-'newmessagesdifflink' => 'comparație cu versiunea precedentă',
 'youhavenewmessagesfromusers' => 'Aveți $1 de la {{PLURAL:$3|un alt utilizator|$3 utilizatori}} ($2).',
 'youhavenewmessagesmanyusers' => 'Aveți $1 de la mai mulți utilizatori ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|un mesaj nou|mesaje noi}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|ultima modificare|ultimele modificări}}',
+'newmessageslinkplural' => '{{PLURAL:$1|un mesaj nou|999=mesaje noi}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ultima modificare|999=ultimele modificări}}',
 'youhavenewmessagesmulti' => 'Aveți mesaje noi la $1',
 'editsection' => 'modificare',
 'editold' => 'modificare',
@@ -1431,7 +1427,6 @@ Detalii se pot găsi în [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE
 'preferences' => 'Preferințe',
 'mypreferences' => 'Preferințe',
 'prefs-edits' => 'Număr de modificări:',
-'prefsnologin' => 'Neautentificat',
 'prefsnologintext2' => 'Vă rugăm să vă $1 pentru a vă seta preferințele de utilizator.',
 'changepassword' => 'Schimbare parolă',
 'prefs-skin' => 'Aspect',
@@ -1732,6 +1727,9 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'recentchanges-label-minor' => 'Aceasta este o modificare minoră',
 'recentchanges-label-bot' => 'Această modificare a fost efectuată de un robot',
 'recentchanges-label-unpatrolled' => 'Această modificare nu a fost încă verificată',
+'recentchanges-label-plusminus' => 'Dimensiunea paginii s-a modificat corespunzător acestui număr de octeți',
+'recentchanges-legend-newpage' => '(vezi și [[Special:NewPages|lista cu pagini noi]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "Mai jos se află {{PLURAL:\$|ultima modificare|ultimele '''\$1''' modificări|ultimele '''\$1''' de modificări}} din {{PLURAL:\$2|ultima zi|ultimele '''\$2''' zile|ultimele '''\$2''' de zile}}, începând cu \$5, \$4.",
 'rcnotefrom' => 'Dedesubt sunt modificările de la <b>$2</b> (maxim <b>$1</b> de modificări sunt afișate - schimbă numărul maxim de linii alegând altă valoare mai jos).',
 'rclistfrom' => 'Se arată modificările începând cu $1',
@@ -4191,4 +4189,17 @@ MediaWiki este distribuit în speranța că va fi folositor, dar FĂRĂ VREO GAR
 'limitreport-expansiondepth' => 'Cea mai mare profunzime a expansiunii',
 'limitreport-expensivefunctioncount' => 'Număr de funcții de analiză costisitoare',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Expandare formate',
+'expand_templates_intro' => "Această pagină specială servește la expandarea recursivă a tuturor formatelor dintr-un text. Ea acționează și asupra funcțiilor de analiză (''parser'') de tipul <nowiki>{{</nowiki>#if:...}}, a variabilelor precum <nowiki>{{</nowiki>CURRENTDAY}} și în general asupra oricăror coduri cuprinse între acolade duble.",
+'expand_templates_title' => 'Titlul contextului (de exemplu pentru {{PAGENAME}}):',
+'expand_templates_input' => 'Introduceți textul aici:',
+'expand_templates_output' => 'Rezultat',
+'expand_templates_xml_output' => 'Ieșire XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Elimină comentariile',
+'expand_templates_remove_nowiki' => 'Suprimă etichetele <nowiki> în rezultat',
+'expand_templates_generate_xml' => 'Arată arborele de analiză XML',
+'expand_templates_preview' => 'Previzualizare',
+
 );
index fef0ddc..5bdbeec 100644 (file)
@@ -303,8 +303,6 @@ Vide [[Special:Version|Versione d'a pàgene]].",
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'Pigghjete da "$1"',
 'youhavenewmessages' => 'Tu tine $1 ($2).',
-'newmessageslink' => 'messàgge nuève',
-'newmessagesdifflink' => 'urteme cangiaminde',
 'youhavenewmessagesfromusers' => "Tu è $1 da {{PLURAL:$3|'n'otre utende|$3 utinde}} ($2).",
 'youhavenewmessagesmanyusers' => 'Tu è $1 da assaije utinde ($2).',
 'newmessageslinkplural' => "{{PLURAL:$1|'nu messàgge nuève|messàgge nuève}}",
@@ -1187,7 +1185,6 @@ Però fa attenzione purcè l'indice lore sus a {{SITENAME}} ponne condenè pàgg
 'preferences' => 'Me piece accussì',
 'mypreferences' => 'Me piace accussì',
 'prefs-edits' => 'Numere de cangiaminde:',
-'prefsnologin' => 'Non ge sinde colleghete',
 'changepassword' => "Cange 'a password",
 'prefs-skin' => 'Skin',
 'skin-preview' => 'Andeprime',
@@ -1489,6 +1486,7 @@ Ce tu 'u mitte, a fatje ca è fatte t'avène ricanusciute.",
 'recentchanges-label-minor' => "Quiste ète 'nu cangiamende stuèdeche",
 'recentchanges-label-bot' => "Stu cangiamende ha state fatte da 'nu bot",
 'recentchanges-label-unpatrolled' => "Stu cangiamende non g'à state angore condrollate",
+'recentchanges-legend-newpage' => '$1 - pàgena nove',
 'rcnote' => "Sotte {{PLURAL:$1|jè '''1''' cangiamende|sonde le urteme '''$1''' cangiaminde}} jndr'à l'urteme{{PLURAL:$2|sciurne|'''$2''' sciurne}}, jndr'à $5, $4.",
 'rcnotefrom' => "Sotte stonne le cangiaminde da '''$2''' (fine a '''$1''' mustrete).",
 'rclistfrom' => 'Fà vedè le urteme cangiaminde partenne da $1',
@@ -4192,4 +4190,21 @@ Ce nò, tu puè ausà 'u module facile aqquà sotte. 'U commende tune avène agg
 'limitreport-expansiondepth' => 'Espanzione massime de profonnetà',
 'limitreport-expensivefunctioncount' => "Analizzatore d'u cunde d'a funzione ca coste assaije",
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Template spannute',
+'expand_templates_intro' => "Sta pàgena speciale pigghie quacche teste e spanne tutte le template jndr'à jidde recorsivamende.<br />
+Jidde spanne pure le funziune de analise cumme<br />
+<code><nowiki>{{</nowiki>#language:…}}</code>, e variabbele cumme <br />
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.<br />
+In pratiche tutte quidde ca stè jndr'à le doppie parendesi graffe.<br />",
+'expand_templates_title' => 'Titele condestuale, pe {{FULLPAGENAME}} ecc.:',
+'expand_templates_input' => 'Teste de input:',
+'expand_templates_output' => 'Resultete',
+'expand_templates_xml_output' => 'XML de output',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Live le commende',
+'expand_templates_remove_nowiki' => "No fà vede le tag <nowiki> jndr'à 'u resultate",
+'expand_templates_generate_xml' => "Fà vedè l'arvule de l'analisi XML",
+'expand_templates_preview' => 'Andeprime',
+
 );
index 696e7ec..2eb4a22 100644 (file)
@@ -132,11 +132,11 @@ $namespaceGenderAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'Активные_участники' ),
        'Allmessages'               => array( 'Системные_сообщения' ),
+       'AllMyUploads'              => array( 'Все_мои_файлы' ),
        'Allpages'                  => array( 'Все_страницы' ),
        'Badtitle'                  => array( 'Недопустимое_название' ),
        'Blankpage'                 => array( 'Пустая_страница' ),
        'Block'                     => array( 'Заблокировать' ),
-       'Blockme'                   => array( 'Заблокируй_меня' ),
        'Booksources'               => array( 'Источники_книг' ),
        'BrokenRedirects'           => array( 'Разорванные_перенаправления' ),
        'Categories'                => array( 'Категории' ),
@@ -148,10 +148,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Создать_учётную_запись', 'Создать_пользователя', 'Зарегистрироваться' ),
        'Deadendpages'              => array( 'Тупиковые_страницы' ),
        'DeletedContributions'      => array( 'Удалённый_вклад' ),
-       'Disambiguations'           => array( 'Неоднозначности' ),
        'DoubleRedirects'           => array( 'Двойные_перенаправления' ),
        'EditWatchlist'             => array( 'Править_список_наблюдения' ),
        'Emailuser'                 => array( 'Письмо_участнику', 'Отправить_письмо' ),
+       'ExpandTemplates'           => array( 'Развёртка_шаблонов' ),
        'Export'                    => array( 'Экспорт', 'Выгрузка' ),
        'Fewestrevisions'           => array( 'Редко_редактируемые' ),
        'FileDuplicateSearch'       => array( 'Поиск_дубликатов_файлов' ),
@@ -714,12 +714,10 @@ $1',
 'pagetitle' => '$1 — {{SITENAME}}',
 'retrievedfrom' => 'Источник — «$1»',
 'youhavenewmessages' => 'Вы получили $1 ($2).',
-'newmessageslink' => 'новые сообщения',
-'newmessagesdifflink' => 'последнее изменение',
 'youhavenewmessagesfromusers' => 'Вы получили $1 от {{PLURAL:$3|$3 участника|$3 участников}} ($2).',
 'youhavenewmessagesmanyusers' => 'Вы получили $1 от множества пользователей ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|новое сообщение|новые сообщения}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|последнее изменение|последние изменения}}',
+'newmessageslinkplural' => '{{PLURAL:$1|новое сообщение|999=новые сообщения}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|последнее изменение|999=последние изменения}}',
 'youhavenewmessagesmulti' => 'Вы получили новые сообщения на $1',
 'editsection' => 'править',
 'editold' => 'править',
@@ -1580,7 +1578,6 @@ $1",
 'preferences' => 'Настройки',
 'mypreferences' => 'Настройки',
 'prefs-edits' => 'Количество правок:',
-'prefsnologin' => 'Вы не представились системе',
 'prefsnologintext2' => 'Необходимо $1, чтобы изменять настройки.',
 'changepassword' => 'Изменение пароля',
 'prefs-skin' => 'Тема оформления',
@@ -1880,6 +1877,9 @@ $1",
 'recentchanges-label-minor' => 'Это незначительное изменение',
 'recentchanges-label-bot' => 'Эта правка сделана ботом',
 'recentchanges-label-unpatrolled' => 'Эта правку ещё никем не патрулировалась',
+'recentchanges-label-plusminus' => 'Размер страницы изменился на данное количество байт',
+'recentchanges-legend-newpage' => '(см. также [[Special:NewPages|список новых страниц]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "{{PLURAL:$1|Последнее '''$1''' изменение|Последние '''$1''' изменения|Последние '''$1''' изменений}} за '''$2''' {{PLURAL:$2|день|дня|дней}}, на момент времени $5 $4.",
 'rcnotefrom' => "Ниже перечислены изменения с '''$2''' (не более '''$1''').",
 'rclistfrom' => 'Показать изменения с $1.',
@@ -4443,4 +4443,20 @@ MediaWiki распространяется в надежде, что она бу
 'limitreport-expansiondepth' => 'Наибольшая глубина расширения',
 'limitreport-expensivefunctioncount' => 'Количество «дорогих» функций анализатора',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Развёртка шаблонов',
+'expand_templates_intro' => 'Эта служебная страница преобразует текст, рекурсивно разворачивая все шаблоны в нём.
+Также развёртке подвергаются функции парсера
+<code><nowiki>{{#language:…}}</nowiki></code> и переменные вида
+<code><nowiki>{{CURRENTDAY}}</nowiki></code> — в общем, всё внутри двойных фигурных скобок.',
+'expand_templates_title' => 'Заголовок страницы для {{FULLPAGENAME}} и т. п.:',
+'expand_templates_input' => 'Входной текст:',
+'expand_templates_output' => 'Результат',
+'expand_templates_xml_output' => 'XML вывод',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Удалить комментарии',
+'expand_templates_remove_nowiki' => 'Подавлять теги <nowiki> в результате',
+'expand_templates_generate_xml' => 'Показать дерево разбора XML',
+'expand_templates_preview' => 'Предпросмотр',
+
 );
index fe74b36..b3a95d9 100644 (file)
@@ -51,7 +51,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Планый_тітул' ),
        'Blankpage'                 => array( 'Порожня_сторінка' ),
        'Block'                     => array( 'Заблоковати' ),
-       'Blockme'                   => array( 'Заблокуйте_ня' ),
        'Booksources'               => array( 'Жрідла_книг' ),
        'BrokenRedirects'           => array( 'Розорваны_напрямлїня' ),
        'Categories'                => array( 'Катеґорії' ),
@@ -63,7 +62,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Створити_конто' ),
        'Deadendpages'              => array( 'Сторінкы_без_одказів' ),
        'DeletedContributions'      => array( 'Вымазаный_вклад' ),
-       'Disambiguations'           => array( 'Неєднозначны_одказы' ),
        'DoubleRedirects'           => array( 'Подвійны_напрямлїня' ),
        'EditWatchlist'             => array( 'Правити_список_мерькованя' ),
        'Emailuser'                 => array( 'Писмо_хоснователёви' ),
@@ -391,8 +389,6 @@ $1',
 'ok' => 'ОК',
 'retrievedfrom' => 'Обтримане з "$1"',
 'youhavenewmessages' => 'Маєте $1 ($2).',
-'newmessageslink' => 'новы повідомлїня',
-'newmessagesdifflink' => 'послїдня зміна',
 'youhavenewmessagesfromusers' => 'Мате $1 од {{PLURAL:$3|іншого хоснователя|$3 іншых хоснователїв}} ($2).',
 'youhavenewmessagesmanyusers' => 'Мате $1 од много далшых хоснователїв ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|нове повідомлїня|новы повідомлїня}}',
@@ -1226,7 +1222,6 @@ $1",
 'preferences' => 'Наставлїня',
 'mypreferences' => 'Наставлїня',
 'prefs-edits' => 'Чісло едітовань:',
-'prefsnologin' => 'Не сьте приголошеный(а)!',
 'changepassword' => 'Змінити гесло',
 'prefs-skin' => 'Взгляд',
 'skin-preview' => 'Попереднїй нагляд',
@@ -1525,6 +1520,7 @@ $1",
 'recentchanges-label-minor' => 'Тото є мала зміна',
 'recentchanges-label-bot' => 'Тото едітованя зроблене ботом',
 'recentchanges-label-unpatrolled' => 'Тота зміна дотеперь не была патролёвана.',
+'recentchanges-legend-newpage' => '$1 — нова сторінка',
 'rcnote' => "{{PLURAL:$1|Послїдня '''$1''' зміна|Послїднї '''$1''' зміны|Послїднїх '''$1''' змін}} за '''$2''' {{PLURAL:$2|день|днї|днїв}}, на час $5, $4.",
 'rcnotefrom' => 'Ниже {{PLURAL:$1|є|суть|є}} найвеце <b>$1</b> {{PLURAL:$1|зміна|зміны|змін}} од <b>$2</b>.',
 'rclistfrom' => 'Вказати едітованя почінаючі з $1.',
@@ -3914,4 +3910,17 @@ MediaWiki є дістрібуована в надїї, же буде хосно
 'limitreport-expansiondepth' => 'Найвысша глубка росшырїня',
 'limitreport-expensivefunctioncount' => 'Чісло дорогой функції аналізатора',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Розгортаня шаблон',
+'expand_templates_intro' => 'Тота шпеціална сторінка перетворює текст, рекурзівно розгортаювші у ній вшыткы шаблоны як <code><nowiki>{{</nowiki>#language:…...}}</code> ці перемінны як <code><nowiki>{{</nowiki>CURRENTDAY}}</code> – тзн. практічно вшытко у двоїтых заперках. Ку тому ся хоснують прямо одповідаючі функціі парсера MediaWiki.',
+'expand_templates_title' => 'Назва сторінкы про контекст про {{FULLPAGENAME}} ітд.:',
+'expand_templates_input' => 'Вступный текст:',
+'expand_templates_output' => 'Резултат',
+'expand_templates_xml_output' => 'XML-выступ',
+'expand_templates_ok' => 'ОК',
+'expand_templates_remove_comments' => 'Одстранити коментарї',
+'expand_templates_remove_nowiki' => 'Іґноровати в резултатї значкы <nowiki>',
+'expand_templates_generate_xml' => 'Указати сінтаксічный стром в XML',
+'expand_templates_preview' => 'Нагляд',
+
 );
index aaefcc4..3ff6808 100644 (file)
@@ -87,7 +87,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'पूर्वतनपृष्टानि' ),
        'Blankpage'                 => array( 'रिक्तपृष्ठ' ),
        'Block'                     => array( 'सदस्यप्रतिबन्ध' ),
-       'Blockme'                   => array( 'मदर्थेप्रतिबन्ध' ),
        'Booksources'               => array( 'पुस्तकस्रोत' ),
        'BrokenRedirects'           => array( 'खण्डीतपुनर्निर्देशन' ),
        'Categories'                => array( 'वर्गः' ),
@@ -97,9 +96,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'सृज्उपयोजकसंज्ञा' ),
        'Deadendpages'              => array( 'निराग्रपृष्टानि' ),
        'DeletedContributions'      => array( 'परित्यागितयोगदान' ),
-       'Disambiguations'           => array( 'नि:संदिग्धीकरण' ),
        'DoubleRedirects'           => array( 'पुनर्निर्देशनद्वंद्व' ),
        'Emailuser'                 => array( 'विपत्रयोजक' ),
+       'ExpandTemplates'           => array( 'बिंबधरविस्तारकरोसि' ),
        'Export'                    => array( 'निर्यात' ),
        'Fewestrevisions'           => array( 'स्वल्पपरिवर्तन' ),
        'FileDuplicateSearch'       => array( 'अनुकृतसंचिकाशोध' ),
@@ -139,6 +138,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'सुरक्षितपृष्टानि' ),
        'Protectedtitles'           => array( 'सुरक्षितशिर्षकम्' ),
        'Randompage'                => array( 'अविशीष्टपृष्ठम्' ),
+       'RandomInCategory'          => array( 'अविशिष्टवर्ग' ),
        'Randomredirect'            => array( 'अविशीष्टविचालन्‌' ),
        'Recentchanges'             => array( 'नवीनतम_परिवर्तन' ),
        'Recentchangeslinked'       => array( 'नवीनतमसम्भन्दिन_परिवर्त' ),
@@ -537,8 +537,6 @@ $1',
 'pagetitle' => '$1 - {{SITENAME}}',
 'retrievedfrom' => '"$1" इत्यस्माद् उद्धृतम्',
 'youhavenewmessages' => 'भवदर्थम् $1 सन्ति। ($2).',
-'newmessageslink' => 'नूतनाः सन्देशाः',
-'newmessagesdifflink' => 'अन्तिमं परिवर्तनम्',
 'youhavenewmessagesfromusers' => 'भवदर्थम् {{PLURAL:$3|अन्यस्मात् सदस्यात्|$3 सदस्येभ्यः}} $1 अस्ति ($2)।',
 'youhavenewmessagesmanyusers' => 'नैकेभ्यः योजकेभ्यः ते $1 सन्ति $2 ।',
 'newmessageslinkplural' => '{{PLURAL:$1|नूतनः सन्देशः|नूतनसन्देशाः}}',
@@ -1304,7 +1302,6 @@ You can still [$1 view this revision]",
 'preferences' => 'इष्टतमानि',
 'mypreferences' => 'मम इष्टतमानि',
 'prefs-edits' => 'सम्पादनानां सख्याः',
-'prefsnologin' => 'नैव प्रविष्ट',
 'changepassword' => 'कूटशब्दः परिवर्त्यताम्',
 'prefs-skin' => 'त्वक्',
 'skin-preview' => 'प्राग्दृश्यम्',
@@ -3915,4 +3912,9 @@ $1 इत्यनेन $3 इति पृष्ठम् $4 इत्ये
 'duration-centuries' => '$1 {{PLURAL:$1|शतकम्|शतकानि}}',
 'duration-millennia' => '$1 {{PLURAL:$1|सहस्राब्धः|सहस्राब्धाः}}',
 
+# Special:ExpandTemplates
+'expand_templates_output' => 'परिणामम्',
+'expand_templates_ok' => 'अस्तु',
+'expand_templates_preview' => 'प्राग्दृश्यम् दर्श्यताम्',
+
 );
index 3882903..a9df4d0 100644 (file)
@@ -317,8 +317,6 @@ $1',
 'ok' => 'Сөп',
 'retrievedfrom' => '"$1" -н кэллэ',
 'youhavenewmessages' => '$1 ($2) кэллэ',
-'newmessageslink' => 'саҥа суруктар',
-'newmessagesdifflink' => 'кэлиҥҥи уларытыы',
 'youhavenewmessagesfromusers' => 'Маны $1 {{PLURAL:$3|соҕотох кыттааччыттан|$3 кыттааччыттан}} туппуккун ($2).',
 'youhavenewmessagesmanyusers' => 'Маны $1 элбэх кыттааччыттан туппуккун ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|саҥа этии|саҥа этии}}',
@@ -1166,7 +1164,6 @@ $1",
 'preferences' => 'Уларытыылар',
 'mypreferences' => 'Туруоруулар',
 'prefs-edits' => 'Көннөрүү ахсаана:',
-'prefsnologin' => 'Ааккын эппэтиҥ',
 'changepassword' => 'Киирии тылы уларытарга',
 'prefs-skin' => 'Тас көстүү',
 'skin-preview' => 'Хайдах буолара',
@@ -1459,6 +1456,7 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 'recentchanges-label-minor' => 'Бу улахан суолтата суох уларытыы',
 'recentchanges-label-bot' => 'Бу уларытыыны робот оҥорбут',
 'recentchanges-label-unpatrolled' => 'Бу уларытыы өссө ботурууллана илик',
+'recentchanges-legend-newpage' => '$1 — саҥа сирэй',
 'rcnote' => "{{PLURAL:$2|хонук|'''$2''' хонуктар}} иһинэн бүтэһик {{PLURAL:$1|'''1''' уларыйыы|'''$1''' уларыйыылар}}, $5, $4.",
 'rcnotefrom' => "Мантан '''$2''' маныаха '''$1''' дылы уларыыйылар көрдөрүлүннүлэр.",
 'rclistfrom' => 'Бу кэм $1 кэнниттэн оҥоһуллубуттары көрдөр',
@@ -3886,4 +3884,19 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 # Image rotation
 'rotate-comment' => 'Ойуу $1 кыраадыс чаһы хоту эргитиллибит',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Халыыптары тэнитии',
+'expand_templates_intro' => 'Бу аналлаах сирэй тиэкиһи уларытарытарыгар туох баар халыыптары тэнитэн көрдөрөр.
+Парсер функциялара эмиэ тэнитиллэллэр. Холобур, <nowiki>{{</nowiki>#language:...}} уонна переменнайдар <nowiki>{{</nowiki>CURRENTDAY}} уо.&nbsp;д.&nbsp;а. — уопсайынан, хос фигурнай скобка иһигэр баар барыта.
+Бу дьайыы сыыһата суох, MediaWiki көмөтүнэн оҥоһуллар.',
+'expand_templates_title' => '{{FULLPAGENAME}} сирэй аата уонна да атын сибидиэнньэлэр:',
+'expand_templates_input' => 'Киирэр сурук:',
+'expand_templates_output' => 'Түмүк',
+'expand_templates_xml_output' => 'XML тахсыыта',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Ырытыылары сот',
+'expand_templates_remove_nowiki' => 'Түмүккэ <nowiki> бэлиэни аахсыма',
+'expand_templates_generate_xml' => 'XML-ы мас курдук көрдөр',
+'expand_templates_preview' => 'Холоон көрүү',
+
 );
index 38ffa05..9d46180 100644 (file)
@@ -276,8 +276,6 @@ $1',
 'ok' => 'Ṭhik gea',
 'retrievedfrom' => '"$1" khon ñam ạgui',
 'youhavenewmessages' => 'Amaḱ do $1 ($2) menaḱa',
-'newmessageslink' => 'Nãwã sombat',
-'newmessagesdifflink' => 'Mucạt bodol',
 'youhavenewmessagesmulti' => 'Amaḱ nãwã mesagko do $1 menaḱa',
 'editsection' => 'So̠mpado̠n',
 'editold' => 'So̠mpado̠n',
index 71e6275..7eba0ea 100644 (file)
@@ -293,8 +293,6 @@ $messages = array(
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Bogau dae  "$1"',
 'youhavenewmessages' => 'Tenes $1 ($2).',
-'newmessageslink' => 'messàgios noos',
-'newmessagesdifflink' => 'ùrtima mudàntzia',
 'youhavenewmessagesmulti' => 'Tenes messàgios noos in $1',
 'editsection' => 'acontza',
 'editold' => 'acontza',
@@ -652,7 +650,6 @@ Prova a seberare ''totu:'' pro chircare in totu su cuntènnidu (inclùdidas pàg
 'preferences' => 'Preferèntzias',
 'mypreferences' => 'Preferèntzias meas',
 'prefs-edits' => 'Nùmeru de acontzos:',
-'prefsnologin' => 'Non ses intrau',
 'changepassword' => 'Càmbia password',
 'prefs-skin' => 'Bisura',
 'skin-preview' => 'Antiprima',
@@ -774,6 +771,7 @@ Prova a seberare ''totu:'' pro chircare in totu su cuntènnidu (inclùdidas pàg
 'recentchanges-label-newpage' => 'Custu acontzu at creadu una pàgina noa',
 'recentchanges-label-minor' => 'Custu est unu acontzu minore',
 'recentchanges-label-bot' => 'Custu acontzu est stadu fatu dae unu bot',
+'recentchanges-legend-newpage' => '$1 - pàgina noa',
 'rcnote' => "Inoghe sighende {{PLURAL:$1|b'est s'ùrtima mudàntzia|bi sunt is ùrtimas '''$1''' mudàntzias}} {{PLURAL:$2|in s'ùrtima die|in is ùrtimas '''$2''' dies}}; is datos sunt agiornados a  $5, $4.",
 'rcnotefrom' => "Sas chi sighint sunt sas mudàntzias dae '''$2''' (fintzas a '''$1''').",
 'rclistfrom' => 'Ammustra mudàntzias dae $1',
@@ -1524,4 +1522,7 @@ Is acàpius chi sighint in sa matessi lìnia sunt cunsideraus comente eccetzione
 # Search suggestions
 'searchsuggest-search' => 'Chirca',
 
+# Special:ExpandTemplates
+'expand_templates_preview' => 'Antiprima',
+
 );
index ed0991f..0103657 100644 (file)
@@ -58,7 +58,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'TitoloErrato' ),
        'Blankpage'                 => array( 'PaginaVuota' ),
        'Block'                     => array( 'Blocca' ),
-       'Blockme'                   => array( 'BloccaProxy' ),
        'Booksources'               => array( 'RicercaISBN' ),
        'BrokenRedirects'           => array( 'RedirectErrati' ),
        'Categories'                => array( 'Categorie' ),
@@ -70,10 +69,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'CreaAccount' ),
        'Deadendpages'              => array( 'PagineSenzaUscita' ),
        'DeletedContributions'      => array( 'ContributiCancellati' ),
-       'Disambiguations'           => array( 'Disambigua' ),
        'DoubleRedirects'           => array( 'RedirectDoppi' ),
        'EditWatchlist'             => array( 'ModificaOsservati', 'ModificaOsservatiSpeciali', 'ModificaListaSeguiti' ),
        'Emailuser'                 => array( 'InviaEMail' ),
+       'ExpandTemplates'           => array( 'EspandiTemplate' ),
        'Export'                    => array( 'Esporta' ),
        'Fewestrevisions'           => array( 'PagineConMenoRevisioni' ),
        'FileDuplicateSearch'       => array( 'CercaFileDuplicati' ),
@@ -117,6 +116,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'PagineProtette' ),
        'Protectedtitles'           => array( 'TitoliProtetti' ),
        'Randompage'                => array( 'PaginaCasuale' ),
+       'RandomInCategory'          => array( 'CasualeInCategoria' ),
        'Randomredirect'            => array( 'RedirectCasuale' ),
        'Recentchanges'             => array( 'UltimeModifiche' ),
        'Recentchangeslinked'       => array( 'ModificheCorrelate' ),
@@ -138,8 +138,8 @@ $specialPageAliases = array(
        'Unusedtemplates'           => array( 'TemplateNonUsati' ),
        'Unwatchedpages'            => array( 'PagineNonOsservate' ),
        'Upload'                    => array( 'Carica' ),
-       'Userlogin'                 => array( 'Entra', 'Login' ),
-       'Userlogout'                => array( 'Esci', 'Logout' ),
+       'Userlogin'                 => array( 'Entra' ),
+       'Userlogout'                => array( 'Esci' ),
        'Userrights'                => array( 'PermessiUtente' ),
        'Version'                   => array( 'Versione' ),
        'Wantedcategories'          => array( 'CategorieRichieste' ),
@@ -423,8 +423,6 @@ $1",
 'ok' => 'OK',
 'retrievedfrom' => 'Estrattu di "$1"',
 'youhavenewmessages' => 'Ricivìsti $1 ($2).',
-'newmessageslink' => 'missaggi novi',
-'newmessagesdifflink' => 'ùrtimi canciamenti',
 'youhavenewmessagesfromusers' => "Hai $1 di {{PLURAL:$3|n'àutru utenti|$3 utenti}} ($2).",
 'youhavenewmessagesmanyusers' => 'Hai $1 di na pocu di utenti ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|Nu missaggiu novu|missaggi novi}}',
@@ -1082,7 +1080,6 @@ S'havi accirtari ca la cuntinuità storica di la pàggina nun veni altirata.",
 'preferences' => 'prifirenzi',
 'mypreferences' => 'Li mè prifirenzi',
 'prefs-edits' => 'Nùmmuru di canciamenti:',
-'prefsnologin' => 'Accessu nun effittuatu',
 'changepassword' => 'Cancia la password',
 'prefs-skin' => 'Aspettu',
 'skin-preview' => 'Antiprima',
@@ -1335,6 +1332,7 @@ L'operazioni nun pò èssiri annullata.",
 'recentchanges-label-minor' => 'Chista è nu canciamentu nnicu',
 'recentchanges-label-bot' => 'Stu canciamentu fu fattu dû bot',
 'recentchanges-label-unpatrolled' => 'Stu canciamentu nun havi ancora statu virificatu',
+'recentchanges-legend-newpage' => '$1 - pàggina nova',
 'rcnote' => "Ccà sutta {{PLURAL:$1|c'è lu canciamentu cchiù ricenti appurtatu|cci sunnu l'ùrtimi '''$1''' canciamenti appurtati}} ô situ {{PLURAL:$2|nta l'ùrtimi 24 uri|nta l'ùrtimi '''$2''' giorni}}; li dati sunnu aggiurnati ê $5 dû $4.",
 'rcnotefrom' => 'Ccà sutta cci sunnu li canciamenti a pàrtiri dû <b>$2</b> (ammustrati nzinu ô <b>$1</b>).',
 'rclistfrom' => 'Ammustra li canciamenti novi a pàrtiri di $1',
index a90bf39..c4e01f1 100644 (file)
@@ -259,8 +259,6 @@ $messages = array(
 'ok' => 'Okay',
 'retrievedfrom' => 'Taen frae "$1"',
 'youhavenewmessages' => 'Ye hae $1 ($2).',
-'newmessageslink' => 'new messages',
-'newmessagesdifflink' => 'diff wi last-but-ane reveision',
 'youhavenewmessagesmulti' => 'Ye hae neow messages on $1',
 'editsection' => 'edit',
 'editold' => 'edit',
@@ -733,7 +731,6 @@ there micht be parteeculars in the [{{fullurl:{{#Special:Log}}/suppress|page={{F
 
 # Preferences page
 'mypreferences' => 'Ma preferences',
-'prefsnologin' => 'No loggit in',
 'changepassword' => 'Chynge password',
 'prefs-skin' => 'Huil',
 'skin-preview' => 'First Leuk',
index b9ff975..798365f 100644 (file)
@@ -37,13 +37,11 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'سڀ صفحا' ),
        'Ancientpages'              => array( 'قديم صفحا' ),
        'Block'                     => array( 'آءِ پي بندش' ),
-       'Blockme'                   => array( 'مونکي بندشيو' ),
        'BrokenRedirects'           => array( 'ٽٽل چورڻا' ),
        'Categories'                => array( 'زمرا' ),
        'Confirmemail'              => array( 'برقٽپال تصديقيو' ),
        'Contributions'             => array( 'ڀاڱيداريون' ),
        'CreateAccount'             => array( 'کاتو کوليو' ),
-       'Disambiguations'           => array( 'سلجھائپ' ),
        'DoubleRedirects'           => array( 'ٻٽا چورڻا' ),
        'Emailuser'                 => array( 'برقٽپال يوزر' ),
        'Export'                    => array( 'برآمد' ),
@@ -333,8 +331,6 @@ $messages = array(
 'ok' => 'ٺيڪ',
 'retrievedfrom' => '"$1" تان ورتل',
 'youhavenewmessages' => 'توهان لاءِ $1 ($2) آهن.',
-'newmessageslink' => 'نوان نياپا',
-'newmessagesdifflink' => 'آخري تبديلي',
 'editsection' => 'سنواريو',
 'editold' => 'سنواريو',
 'viewsourceold' => 'ڪوڊ ڏسو',
index 719e49a..ee6d07f 100644 (file)
@@ -35,14 +35,12 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'TuttiLiPàgini' ),
        'Ancientpages'              => array( 'PàginiMancuRizzenti' ),
        'Block'                     => array( 'Brocca' ),
-       'Blockme'                   => array( 'BroccaProxy' ),
        'Booksources'               => array( 'ZirchaISBN' ),
        'BrokenRedirects'           => array( 'RinviiIbbagliaddi' ),
        'Categories'                => array( 'Categuri' ),
        'ChangePassword'            => array( 'RimpusthàParàuraDÓrdhini' ),
        'Contributions'             => array( 'Cuntributi', 'CuntributiUtente' ),
        'Deadendpages'              => array( 'PàginiChenaIscidda' ),
-       'Disambiguations'           => array( 'CuLuMatessiInnommu' ),
        'DoubleRedirects'           => array( 'RinviiDoppi' ),
        'Emailuser'                 => array( 'InviaPosthaErettrònica' ),
        'Export'                    => array( 'Ippurtha' ),
@@ -94,8 +92,8 @@ $specialPageAliases = array(
        'Unusedtemplates'           => array( 'MudelliInutirizaddi' ),
        'Unwatchedpages'            => array( 'PàginiNòAbbaidaddi' ),
        'Upload'                    => array( 'Carrigga' ),
-       'Userlogin'                 => array( 'Intra', 'Login', 'Accesso' ),
-       'Userlogout'                => array( 'Isci', 'Logout', 'Uscita' ),
+       'Userlogin'                 => array( 'Intra', 'Accesso' ),
+       'Userlogout'                => array( 'Isci', 'Uscita' ),
        'Userrights'                => array( 'PrimmissiUtenti' ),
        'Version'                   => array( 'Versioni' ),
        'Wantedcategories'          => array( 'CateguriDumandaddi' ),
@@ -322,8 +320,6 @@ $messages = array(
 'ok' => 'EMMU',
 'retrievedfrom' => 'Buggaddu da "$1"',
 'youhavenewmessages' => 'Ài $1 ($2).',
-'newmessageslink' => 'nobi imbasciaddi',
-'newmessagesdifflink' => 'diffarènzia cu la revisioni prizzidenti',
 'youhavenewmessagesmulti' => 'Ài nobi imbasciaddi i $1',
 'editsection' => 'mudifigga',
 'editold' => 'mudifigga',
@@ -787,7 +783,6 @@ Cunsulthà lu [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rigi
 'preferences' => 'Prifirenzi',
 'mypreferences' => "Li me' prifirenzi",
 'prefs-edits' => 'Mudìfigghi effettuaddi:',
-'prefsnologin' => 'Intradda nò effettuadda',
 'changepassword' => "Ciamba paràura d'órdhini",
 'prefs-skin' => 'Aipettu gràficu',
 'skin-preview' => 'antiprimma',
index 4deb798..82509a1 100644 (file)
@@ -50,7 +50,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Veadjemeahttun_bajilčála' ),
        'Blankpage'                 => array( 'Guoros_siidu' ),
        'Block'                     => array( 'Hehtte', 'Hehtte_geavaheaddji', 'Hehtte_IP' ),
-       'Blockme'                   => array( 'Hehtte_mu' ),
        'Booksources'               => array( 'Girjegáldut' ),
        'BrokenRedirects'           => array( 'Boatkanan_stivremat', 'Boatkanan_ođđasitstivremat' ),
        'Categories'                => array( 'Kategoriijat' ),
@@ -60,7 +59,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Rievdadusat' ),
        'CreateAccount'             => array( 'Ráhkat_dovddaldaga', 'Ráhkat_konttu' ),
        'DeletedContributions'      => array( 'Sihkkojuvvon_rievdadusat' ),
-       'Disambiguations'           => array( 'Liŋkkat_dárkonsiidduide' ),
        'DoubleRedirects'           => array( 'Guoktegeardásaš_ođđasitstivremat' ),
        'EditWatchlist'             => array( 'Rievdat_čuovvunlisttu' ),
        'Emailuser'                 => array( 'Sádde_e-poastta' ),
index 84113fc..48580a5 100644 (file)
@@ -303,8 +303,6 @@ $1',
 'ok' => 'Gerā',
 'retrievedfrom' => 'Gautė ėš „$1“',
 'youhavenewmessages' => 'Tamsta toret $1 ($2).',
-'newmessageslink' => 'naujū žėnotiu',
-'newmessagesdifflink' => 'paskotinis pakeitėms',
 'youhavenewmessagesmulti' => 'Toret naujū žėnotiu $1',
 'editsection' => 'taisītė',
 'editold' => 'taisītė',
@@ -760,7 +758,6 @@ Kėtė admėnėstratuorē šėtom pruojekte vėsdar galės pasėiktė pasliepta
 'preferences' => 'Nustatīmā',
 'mypreferences' => 'Mona nustatīmā',
 'prefs-edits' => 'Keitėmu skaitlius:',
-'prefsnologin' => 'Naprisėjongis',
 'changepassword' => 'Pakeistė slaptažuodė',
 'prefs-skin' => 'Ėšruoda',
 'skin-preview' => 'Parveiza',
@@ -1941,4 +1938,7 @@ Tamsta tēpuogi galėt [[Special:EditWatchlist/raw|redagoutė grīnaji keravuoja
 'logentry-newusers-autocreate' => 'Paskīra $1 bova padėrbta autuomatėškā',
 'rightsnone' => '(juokiū)',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Ėšskeistė šabluonus',
+
 );
index 7c79374..1b9bede 100644 (file)
@@ -36,7 +36,6 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'Sve_stranice' ),
        'Ancientpages'              => array( 'Najstarije_stranice' ),
        'Blankpage'                 => array( 'Prazna_stranica' ),
-       'Blockme'                   => array( 'Blokiraj_me' ),
        'Booksources'               => array( 'Traži_ISBN' ),
        'BrokenRedirects'           => array( 'Kriva_preusmjerenja' ),
        'Categories'                => array( 'Kategorije' ),
@@ -45,7 +44,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Stvori_račun' ),
        'Deadendpages'              => array( 'Mrtve_stranice' ),
        'DeletedContributions'      => array( 'Obrisani_doprinosi' ),
-       'Disambiguations'           => array( 'Razvrstavanja' ),
        'DoubleRedirects'           => array( 'Dvostruka_preusmjerenja' ),
        'Emailuser'                 => array( 'E-mail', 'Elektronska_pošta' ),
        'Export'                    => array( 'Izvezi' ),
@@ -480,8 +478,6 @@ $1',
 'ok' => 'da',
 'retrievedfrom' => 'Dobavljeno iz "$1"',
 'youhavenewmessages' => 'Imate $1 ($2).',
-'newmessageslink' => 'novih promjena',
-'newmessagesdifflink' => 'posljednja promjena',
 'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugog korisnika|$3 korisnika|$3 korisnika}} ($2).',
 'youhavenewmessagesmanyusers' => 'Imate $1 od mnogo korisnika ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|$1 nove poruke|$1 novih poruka}}',
@@ -1331,7 +1327,6 @@ Uzmite u obzir da njegovi indeksi za ovu Wiki ne moraju biti ažurirani.',
 'preferences' => 'Postavke',
 'mypreferences' => 'Postavke',
 'prefs-edits' => 'Broj izmjena:',
-'prefsnologin' => 'Niste prijavljeni',
 'changepassword' => 'Promijeni lozinku',
 'prefs-skin' => 'Izgled (skin)',
 'skin-preview' => 'Pretpregled',
@@ -1624,6 +1619,7 @@ Ako izaberete da date ime, biće korišteno za pripisivanje Vašeg rada.',
 'recentchanges-label-minor' => 'Ovo je manja izmjena',
 'recentchanges-label-bot' => 'Ovu je izmjenu učinio bot',
 'recentchanges-label-unpatrolled' => 'Ova izmjena još nije patrolirana',
+'recentchanges-legend-newpage' => '$1 - nova stranica',
 'rcnote' => "Ispod {{PLURAL:$1|je '''$1''' promjena|su '''$1''' zadnje promjene|su '''$1''' zadnjih promjena}} u {{PLURAL:$2|posljednjem '''$2''' danu|posljednja '''$2''' dana|posljednjih '''$2''' dana}}, od $4, $5.",
 'rcnotefrom' => "Ispod {{PLURAL:$1|je '''$1''' izmjena|su '''$1''' zadnje izmjene|su '''$1''' zadnjih izmjena}} u {{PLURAL:$2|posljednjem '''$2''' danu|posljednja '''$2''' dana|posljednjih '''$2''' dana}}, od $4, $5.",
 'rclistfrom' => 'Prikaži nove izmjene počevši od $1',
index 9bdc67d..2e97f04 100644 (file)
@@ -268,8 +268,6 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Yurrid z "$1"',
 'youhavenewmessages' => 'Illa dark $1 ($2).',
-'newmessageslink' => 'Tibratin timaynutin',
-'newmessagesdifflink' => 'Imbddeln imĝura',
 'youhavenewmessagesmulti' => 'Dark tibratin timaynutin ɣ $1',
 'editsection' => 'Ẓreg (bddel)',
 'editold' => 'Ẓreg (bddel)',
@@ -649,7 +647,6 @@ Izdar ad urtili ɣ isbidn n mayllan ɣ {{SITENAME}} .',
 'preferences' => 'Timssusmin',
 'mypreferences' => 'Timssusmin',
 'prefs-edits' => 'Uṭṭun n n imbddeln',
-'prefsnologin' => 'Ur tmlit mat git',
 'changepassword' => 'bdl awal ihdan',
 'prefs-skin' => 'odm',
 'skin-preview' => 'Ammal',
index 7754e8a..9d30bc7 100644 (file)
@@ -63,7 +63,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'නුසුසුදු_මාතෘකාව' ),
        'Blankpage'                 => array( 'හිස්_පිටුව' ),
        'Block'                     => array( 'වාරණය_කරන්න', 'IP_වාරණය_කරන්න', 'පරිශීලක_වාරණය_කරන්න' ),
-       'Blockme'                   => array( 'මා_වාරණය_කරන්න' ),
        'Booksources'               => array( 'ග්‍රන්ථ_මූලාශ්‍ර' ),
        'BrokenRedirects'           => array( 'භින්න_යළි-යොමුකිරීම්' ),
        'Categories'                => array( 'ප්‍රවර්ග' ),
@@ -73,7 +72,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'ගිණුම_තැනීමට' ),
        'Deadendpages'              => array( 'අග_ඇවුරුණු_පිටුව' ),
        'DeletedContributions'      => array( 'මකාදැමුණු_දායකත්වයන්' ),
-       'Disambiguations'           => array( 'වක්‍රෝත්තිහරණයන්' ),
        'DoubleRedirects'           => array( 'ද්විත්ව_යළි-යොමුකිරීම්' ),
        'Emailuser'                 => array( 'පරිශීලකට_විද්‍යුත්-තැපැලක්_යැවිම' ),
        'Export'                    => array( 'නිර්යාතකරන්න' ),
@@ -466,8 +464,6 @@ $1",
 'ok' => 'හරි',
 'retrievedfrom' => '"$1" වෙතින් සම්ප්‍රවේශනය කෙරිණි',
 'youhavenewmessages' => 'ඔබ හට $1 ($2)',
-'newmessageslink' => 'නව පණිවුඩ',
-'newmessagesdifflink' => 'අවසාන වෙනස',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|තවත් එක් පරිශීලකයෙකුගෙන්|පරිශීලකයන් $3 දෙනෙකුගෙන්}} ඔබ හට $1 ඇත ($2).',
 'youhavenewmessagesmanyusers' => 'බොහෝ පරිශීලකයන් වෙතින් ඔබ හට $1 ඇත ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|නව පණිවුඩයක්|නව පණිවුඩ}}',
@@ -1270,7 +1266,6 @@ $1",
 'preferences' => 'අභිරුචි',
 'mypreferences' => 'අභිරුචීන්',
 'prefs-edits' => 'සංස්කරණයන් සංඛ්‍යාව:',
-'prefsnologin' => 'පිවිසී නැත (Not logged in)',
 'changepassword' => 'මුරපදය වෙනස් කරන්න',
 'prefs-skin' => 'ඡවිය',
 'skin-preview' => 'පෙරදසුන',
@@ -1545,6 +1540,7 @@ HTML ටැගයන් පිරික්සන්න.',
 'recentchanges-label-minor' => 'මෙය සුළු සංස්කරණයකි',
 'recentchanges-label-bot' => 'මෙය රොබෝවක් විසින් කරන ලද සංස්කරණයකි',
 'recentchanges-label-unpatrolled' => 'මෙම සංස්කරණය තවම විමර්ශනය කර නොමැත',
+'recentchanges-legend-newpage' => '$1 -  නව පිටුව',
 'rcnote' => "$4 දින, $5 වන තෙක්, අවසන් {{PLURAL:$2|දිනදී|දින '''$2''' තුලදී}} සිදුවී ඇති, {{PLURAL:$1| '''1''' ක් වෙනස|අවසන් වෙනස්වීම් '''$1'''}} පහත දැක්වේ.",
 'rcnotefrom' => "'''$2''' න් පසු සිදුවී ඇති වෙනස්කම් මෙහි පහත දැක්වේ ('''$1''' ක ප්‍රමාණයක උපරිමයක් පෙන්වා ඇත).",
 'rclistfrom' => '$1 සිට බලපැවැත්වෙන මෑත වෙනස්වීම් පෙන්වන්න',
@@ -3992,4 +3988,21 @@ MediaWiki බෙදාහැර ඇත්තේ එය ප්‍රයෝජන
 'duration-centuries' => '{{PLURAL:$1|ශතවර්ෂ|ශතවර්ෂ}} $1 ක්',
 'duration-millennia' => '{{PLURAL:$1|සහස‍්‍රවර්ෂ|සහස‍්‍රවර්ෂ}} $1 ක්',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'සැකිලි පුළුල් කරන්න',
+'expand_templates_intro' => 'මෙම විශේෂ පිටුව විසින් යම් පෙළක්  ගෙන එහි සියළු සැකිලි ආවර්තනික ලෙස පුළුල් කරයි.
+එය  <nowiki>{{</nowiki>#language:…}} වැනි ව්‍යාකරණ විග්‍රහ ශ්‍රිතයන් හා,
+<nowiki>{{</nowiki>CURRENTDAY}}වැනි විචල්‍යයන් ද&mdash; ඇත්ත වශයෙන්ම
+ද්විත්ව-සඟල වරහන් තුල හමුවන සැම දෙයක්ම පාහේ  පුළුල් කරයි.
+එය විසින් මෙය සිදුකරනුයේ මාධයවිකි විසින්ම අදාල ව්‍යාකරණ විග්‍රහ අදියර ඇමතීමෙනි.',
+'expand_templates_title' => '{{FULLPAGENAME}} වැන්න සඳහා, ප්‍රකරණ ශීර්ෂය.:',
+'expand_templates_input' => 'ප්‍රදාන පෙළ:',
+'expand_templates_output' => 'ප්‍රතිඵලය',
+'expand_templates_xml_output' => 'XML ප්‍රතිදානය',
+'expand_templates_ok' => 'හරි',
+'expand_templates_remove_comments' => 'පරිකථනයන්  ඉවත්කරන්න',
+'expand_templates_remove_nowiki' => 'ප්‍රතිපලයෙහි <nowiki> ටැග යටපත් කරන්න',
+'expand_templates_generate_xml' => 'XML ව්‍යාකරණ විග්‍රහ රුක පෙන්වන්න',
+'expand_templates_preview' => 'පෙරදසුන',
+
 );
index e077d91..d426014 100644 (file)
@@ -12,6 +12,7 @@
  * @author Geitost
  * @author Helix84
  * @author Kaganer
+ * @author KuboF
  * @author Kusavica
  * @author Liso
  * @author Maros
@@ -40,7 +41,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'StaréStránky' ),
        'Blankpage'                 => array( 'PrázdnaStránka' ),
        'Block'                     => array( 'Blokovanie' ),
-       'Blockme'                   => array( 'ZablokovaťMa' ),
        'Booksources'               => array( 'KnižnéZdroje' ),
        'BrokenRedirects'           => array( 'PokazenéPresmerovania' ),
        'Categories'                => array( 'Kategórie' ),
@@ -50,7 +50,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'VytvorenieÚčtu' ),
        'Deadendpages'              => array( 'StránkyBezOdkazov' ),
        'DeletedContributions'      => array( 'ZmazanéPríspevky' ),
-       'Disambiguations'           => array( 'RozlišovacieStránky' ),
        'DoubleRedirects'           => array( 'DvojitéPresmerovania' ),
        'Emailuser'                 => array( 'EmailPoužívateľovi' ),
        'Fewestrevisions'           => array( 'NajmenejRevízií' ),
@@ -558,8 +557,6 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Zdroj: „$1“',
 'youhavenewmessages' => 'Máte $1 ($2).',
-'newmessageslink' => 'nové správy',
-'newmessagesdifflink' => 'posledná zmena',
 'youhavenewmessagesfromusers' => 'Máte $1 od {{PLURAL:$3|iného používateľa|$3 iných používateľov}} ($2).',
 'youhavenewmessagesmanyusers' => 'Máte $1 od viacerých ďalších používateľov ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|novú správu|nové správy}}',
@@ -1262,8 +1259,8 @@ Iní správcovia {{GRAMMAR:genitív|{{SITENAME}}}} budú stále môcť pristupov
 'revdelete-hide-user' => 'Používateľské meno/IP redaktora',
 'revdelete-hide-restricted' => 'Zatajiť údaje pred všetkými, aj pred správcami',
 'revdelete-radio-same' => '(nezmeniť)',
-'revdelete-radio-set' => 'Viditeľné',
-'revdelete-radio-unset' => 'Skryté',
+'revdelete-radio-set' => 'Skrytý',
+'revdelete-radio-unset' => 'Viditeľný',
 'revdelete-suppress' => 'Skryť údaje pred správcami rovnako ako pred ostatnými',
 'revdelete-unsuppress' => 'Odstrániť obmedzenia obnovených revízií',
 'revdelete-log' => 'Dôvod:',
@@ -1416,7 +1413,6 @@ Podrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'preferences' => 'Nastavenia',
 'mypreferences' => 'Nastavenia',
 'prefs-edits' => 'Počet úprav:',
-'prefsnologin' => 'Nie ste prihlásený/á',
 'changepassword' => 'Zmeniť heslo',
 'prefs-skin' => 'Vzhľad',
 'skin-preview' => 'Náhľad',
@@ -1713,6 +1709,7 @@ Softvér používa toto nastavenie na správne oslovenie a označenie vás ostat
 'recentchanges-label-minor' => 'Toto je drobná úprava',
 'recentchanges-label-bot' => 'Túto úpravy vykonal robot',
 'recentchanges-label-unpatrolled' => 'Táto úprava zatiaľ nebola strážená',
+'recentchanges-legend-newpage' => '(pozri tiež [[Special:NewPages|zoznam nových stránok]])',
 'rcnote' => "Tu {{PLURAL:$1|je posledná úprava|sú posledné '''$1''' úpravy|je posledných '''$1''' úprav}} počas {{PLURAL:$2|posledného dňa|posledných '''$2''' dní}} z $4, $5.",
 'rcnotefrom' => "Nižšie sú zobrazené úpravy od '''$2''' (do '''$1''').",
 'rclistfrom' => 'Zobraziť nové úpravy počnúc od $1',
@@ -3272,7 +3269,7 @@ Jeho spustením môžete kompromitovať svoj systém.",
 'svg-long-desc' => 'SVG súbor, $1 × $2 pixelov, veľkosť súboru: $3',
 'svg-long-desc-animated' => 'Animovaný súbor SVG, nominálne $1 × $2 pixlov, veľkosť súboru: $3',
 'svg-long-error' => 'Neplatný súbor SVG: $1',
-'show-big-image' => 'Obrázok vo vyššom rozlíšení',
+'show-big-image' => 'Pôvodný súbor',
 'show-big-image-preview' => 'Veľkosť tohto náhľadu: $1.',
 'show-big-image-other' => 'Iné {{PLURAL:$2|rozlíšenie|rozlíšenia}}: $1 .',
 'show-big-image-size' => '$1 × $2 pixlov',
@@ -4190,4 +4187,24 @@ V opačnom prípade môžete použiť zjednodušený formulár nižšie. Váš k
 'limitreport-expansiondepth' => 'Najväčšia hĺbka expanzie',
 'limitreport-expensivefunctioncount' => 'Počet náročných funkcií parseru',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Substituovať šablóny',
+'expand_templates_intro' => 'Táto špeciálna stránka prijme na
+vstup text a rekurzívne substituuje všetky šablóny,
+ktoré sú v ňom použité. Tiež expanduje funkcie
+syntaktického analyzátora ako <nowiki>{{</nowiki>#language:...}}
+a premenné ako <nowiki>{{</nowiki>CURRENTDAY}}—v podstate
+takmer všetko v zložených zátvorkách. Robí to pomocou
+volania relevantnej fázy syntaktického analyzátora
+samotného MediaWiki.',
+'expand_templates_title' => 'Názov kontextu pre {{FULLPAGENAME}} atď.:',
+'expand_templates_input' => 'Vstupný text:',
+'expand_templates_output' => 'Výsledok',
+'expand_templates_xml_output' => 'XML výstup',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Odstrániť komentáre',
+'expand_templates_remove_nowiki' => 'Potlačiť značky <nowiki> vo výsledku',
+'expand_templates_generate_xml' => 'Zobraziť strom XML',
+'expand_templates_preview' => 'Náhľad',
+
 );
index c1c7b3f..9e762a4 100644 (file)
@@ -48,7 +48,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'StarodavneStrani' ),
        'Blankpage'                 => array( 'PraznaStran' ),
        'Block'                     => array( 'Blokiraj', 'BlokirajIP', 'BlokirajUporabnika' ),
-       'Blockme'                   => array( 'BlokirajMe' ),
        'Booksources'               => array( 'ViriKnjig' ),
        'BrokenRedirects'           => array( 'PretrganePreusmeritve' ),
        'Categories'                => array( 'Kategorije' ),
@@ -56,7 +55,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Prispevki' ),
        'CreateAccount'             => array( 'Registracija' ),
        'DeletedContributions'      => array( 'IzbrisaniPrispevki' ),
-       'Disambiguations'           => array( 'Razločitve' ),
        'DoubleRedirects'           => array( 'DvojnePreusmeritve' ),
        'Export'                    => array( 'Izvozi' ),
        'Fewestrevisions'           => array( 'NajmanjRedakcij' ),
@@ -462,8 +460,6 @@ $1',
 'pagetitle' => '$1 – {{SITENAME}}',
 'retrievedfrom' => 'Vzpostavljeno iz »$1«',
 'youhavenewmessages' => 'Imate $1 ($2)',
-'newmessageslink' => 'nova sporočila',
-'newmessagesdifflink' => 'zadnja sprememba',
 'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugega uporabnika|$3 uporabnikov}} ($2).',
 'youhavenewmessagesmanyusers' => 'Imate $1 od veliko uporabnikov ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|novo sporočilo|nova sporočila}}',
@@ -1334,7 +1330,6 @@ Upoštevajte, da so njihovi podatki vsebine {{GRAMMAR:rodilnik|{{SITENAME}}}} mo
 'preferences' => 'Nastavitve',
 'mypreferences' => 'Nastavitve',
 'prefs-edits' => 'Število urejanj:',
-'prefsnologin' => 'Niste prijavljeni',
 'changepassword' => 'Zamenjava gesla',
 'prefs-skin' => 'Koža',
 'skin-preview' => 'Predogled',
@@ -1634,6 +1629,7 @@ Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo ra
 'recentchanges-label-minor' => 'Manjše urejanje',
 'recentchanges-label-bot' => 'To urejanje je bilo izvedeno z botom',
 'recentchanges-label-unpatrolled' => 'Urejanje še ni bilo pregledano',
+'recentchanges-legend-newpage' => '$1 - nova stran',
 'rcnote' => "Prikazujem {{PLURAL:$1|zadnjo spremembo|zadnji '''$1''' spremembi|zadnje '''$1''' spremembe|zadnjih '''$1''' sprememb|zadnjih '''$1''' sprememb}} v {{PLURAL:$2|zadnjem|zadnjih|zadnjih|zadnjih|zadnjih}} '''$2''' {{PLURAL:$2|dnevu|dneh|dneh|dneh|dneh}}, od $5, $4.",
 'rcnotefrom' => "Navedene so spremembe od '''$2''' dalje (prikazujem jih do '''$1''').",
 'rclistfrom' => 'Prikaži spremembe od $1 naprej',
@@ -4116,4 +4112,21 @@ V nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bom
 'limitreport-expansiondepth' => 'Največja globina razširitve',
 'limitreport-expensivefunctioncount' => 'Število dragih funkcij razčlenjevalnika',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Razširi predloge',
+'expand_templates_intro' => 'Ta posebna stran nekaj vnesenega besedila predela tako, da klice predlog v njem zamenja z njihovo vsebino.
+Prav tako razreši izraze kot
+<code><nowiki>{{</nowiki>#language:…}}</code> in spremenljivke kot
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Pravzaprav razširi skoraj vse v dvojnih zavitih oklepajih.',
+'expand_templates_title' => 'Naslov sobesedila, za {{FULLPAGENAME}} ipd.:',
+'expand_templates_input' => 'Vhodno besedilo:',
+'expand_templates_output' => 'Rezultat',
+'expand_templates_xml_output' => 'Izhod XML',
+'expand_templates_ok' => 'V redu',
+'expand_templates_remove_comments' => 'Odstrani komentarje',
+'expand_templates_remove_nowiki' => 'V rezultatu odstrani oznake <nowiki>',
+'expand_templates_generate_xml' => 'Pokaži razčlenitveno drevo XML',
+'expand_templates_preview' => 'Predogled',
+
 );
index ad4c486..91e34a7 100644 (file)
@@ -259,8 +259,6 @@ $1",
 
 'retrievedfrom' => 'voo "$1"',
 'youhavenewmessages' => 'Du hust $1 ($2).',
-'newmessageslink' => 'Neue Noachrichta',
-'newmessagesdifflink' => 'neue Noachrichta',
 'youhavenewmessagesmulti' => 'Du hast neue Nachrichta: $1',
 'editsection' => 'Bearbta',
 'editold' => 'Bearbta',
@@ -798,7 +796,6 @@ Stelle sicher, doaß de Versionsgeschichte anner Seite historisch korrekt ies.',
 'preferences' => 'Eenstellunga',
 'mypreferences' => 'Meene Eistellunga',
 'prefs-edits' => 'Oazoahl dar Beoarbeetunga:',
-'prefsnologin' => 'Ne oagemeldet',
 'changepassword' => 'Poaßwurt ändern',
 'prefs-personal' => 'Nutzerdaten',
 'prefs-rc' => 'Letzte Änderunga',
@@ -988,6 +985,7 @@ Stelle sicher, doaß de Versionsgeschichte anner Seite historisch korrekt ies.',
 'recentchanges-label-minor' => 'Klenne Änderung',
 'recentchanges-label-bot' => "Änderung durch an'n Bot",
 'recentchanges-label-unpatrolled' => 'Nicht-kontrollierte Änderung',
+'recentchanges-legend-newpage' => '$1 - neue Seite',
 'rcnote' => "Oagezeegt {{PLURAL:$1|wird '''1''' Ännerong|waan de letzta '''$1''' Änneronga}} {{PLURAL:$2|des letzta Taages|dar letzta '''$2''' Taage}}. Stand: $4, $5. (<b><tt>N</tt></b>&nbsp;– neuer Eentrag; <b><tt>K</tt></b>&nbsp;– kleene Ännerong; <b><tt>B</tt></b>&nbsp;– Ännerong dorch eena Bot; ''(± Zoahl)''&nbsp;– Greeßaännerong ei Byte)",
 'rcnotefrom' => "Oagezeigt waan de Änderunga seit '''$2''' (max. '''$1''' Einträge).",
 'rclistfrom' => 'Oack Änneronga seit $1 zeiga.',
index b7dab95..10b0421 100644 (file)
@@ -270,12 +270,10 @@ fiiri [[Special:Version|nooca bogga]].',
 'ok' => 'waayahay',
 'retrievedfrom' => 'Waxaa laga keenay "$1"',
 'youhavenewmessages' => 'Waxaa heysataa $1 ($2).',
-'newmessageslink' => 'Fariimaha cusub',
-'newmessagesdifflink' => 'bedelkii ugu dambeeyay',
 'youhavenewmessagesfromusers' => 'Waxay $1 kaaga timid {{PLURAL:$3|adeegsade kale|$3 adeegsade}} ($2).',
 'youhavenewmessagesmanyusers' => 'Waxay ka $1 timid adeegsade yaal farabadan ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|Waa fariin cusub|fariin cusub}}',
-'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|bedelkii ugu dambeeyey|bedeladii ugu dambeeyey}}',
+'newmessageslinkplural' => '{{PLURAL:$1|farriin cusub|999=farriimo cusub}}',
+'newmessagesdifflinkplural' => 'isbedel {{PLURAL:$1|dhow|999=isbedello dhow}}',
 'youhavenewmessagesmulti' => '$1 waxaa kuu yaalo fariimo cusub',
 'editsection' => 'Wax ka bedel',
 'editold' => 'Wax ka bedel',
@@ -799,7 +797,6 @@ sababteeda neh waxaa laga heli kartaa  [{{fullurl:{{#Special:Log}}/delete|page={
 # Preferences page
 'preferences' => 'Dooqyada',
 'mypreferences' => 'Dooqyadeyda',
-'prefsnologin' => 'Gudaha kuma jirtid',
 'prefs-skin' => 'Jirka',
 'skin-preview' => 'Horfiirin',
 'datedefault' => "Ma'jiro dooq",
index a91d570..83cfaab 100644 (file)
@@ -70,7 +70,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'FaqetAntike' ),
        'Blankpage'                 => array( 'FaqeBosh' ),
        'Block'                     => array( 'BllokoIP' ),
-       'Blockme'                   => array( 'BllokomMua' ),
        'Booksources'               => array( 'BurimeteLibrave' ),
        'Categories'                => array( 'Kategori' ),
        'ChangeEmail'               => array( 'NdryshoEmail' ),
@@ -488,8 +487,6 @@ $1",
 'ok' => 'Ok',
 'retrievedfrom' => 'Marrë nga "$1"',
 'youhavenewmessages' => 'Ju keni $1 ($2).',
-'newmessageslink' => 'mesazhe të reja',
-'newmessagesdifflink' => 'ndryshimi i fundit',
 'youhavenewmessagesfromusers' => 'Ju keni $1 nga {{PLURAL:$3|një përdorues tjetër|$3 përdorues}} ($2).',
 'youhavenewmessagesmanyusers' => 'Ju keni $1 nga shumë përdorues ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|një mesazh i ri|mesazhe të reja}}',
@@ -1264,7 +1261,6 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh
 'preferences' => 'Parapëlqimet',
 'mypreferences' => 'Parapëlqimet',
 'prefs-edits' => 'Numri i redaktimeve:',
-'prefsnologin' => 'Nuk keni hyrë brenda',
 'changepassword' => 'Ndërroni fjalëkalimin',
 'prefs-skin' => 'Pamja',
 'skin-preview' => 'Parapamje',
@@ -1538,6 +1534,7 @@ Kjo informatë është publike.',
 'recentchanges-label-minor' => 'Ky është një editim i vogël',
 'recentchanges-label-bot' => 'Ky editim është kryer nga një bot',
 'recentchanges-label-unpatrolled' => 'Ky editim ende nuk është patrolluar',
+'recentchanges-legend-newpage' => '$1 - faqe të re',
 'rcnote' => "Më poshtë {{PLURAL:$1|është '''1''' ndryshim| janë '''$1''' ndryshime}} së fundmi gjatë <strong>$2</strong> ditëve sipas të dhënave nga $4, $5.",
 'rcnotefrom' => 'Më poshtë janë ndryshime së fundmi nga <b>$2</b> (treguar deri në <b>$1</b>).',
 'rclistfrom' => 'Tregon ndryshime së fundmi duke filluar nga $1',
@@ -3825,4 +3822,13 @@ Përndryshe, ju mund të formularin e thjeshtë më poshtë. Komenti juaj do të
 'duration-centuries' => '$1 {{PLURAL:$1|shekull|shekuj}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milennium|mileniume}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Parapamje stampash',
+'expand_templates_intro' => 'Kjo faqe speciale merr tekstin me stampa dhe të tregon se si do të duket teksti pasi të jenë stamposur të tëra. Kjo faqe gjithashtu tregon parapamjen e funksioneve dhe fjalëve magjike si p.sh. <nowiki>{{</nowiki>#language:...}} dhe <nowiki>{{</nowiki>CURRENTDAY}}.',
+'expand_templates_title' => 'Titulli i faqes për rrethanën, si {{FULLPAGENAME}} etj.:',
+'expand_templates_input' => 'Teksti me stampa:',
+'expand_templates_output' => 'Parapamja',
+'expand_templates_ok' => 'Shko',
+'expand_templates_remove_comments' => 'Hiq komentet',
+
 );
index 920aa96..3ef54e9 100644 (file)
@@ -100,14 +100,12 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'НајстаријиЧланци' ),
        'Badtitle'                  => array( 'Лош_наслов' ),
        'Block'                     => array( 'Блокирај', 'БлокирајИП', 'БлокирајКорисника' ),
-       'Blockme'                   => array( 'БлокирајМе', 'Блокирај_ме' ),
        'BrokenRedirects'           => array( 'Покварена_преусмерења', 'Неисправна_преусмерења' ),
        'Categories'                => array( 'Категорије' ),
        'ComparePages'              => array( 'Упореди_странице' ),
        'Confirmemail'              => array( 'ПотврдиЕ-пошту', 'Потврда_е-поште' ),
        'Contributions'             => array( 'Доприноси', 'Прилози' ),
        'CreateAccount'             => array( 'ОтвориНалог', 'Отвори_налог' ),
-       'Disambiguations'           => array( 'Вишезначне_одреднице' ),
        'DoubleRedirects'           => array( 'Двострука_преусмерења' ),
        'Export'                    => array( 'Извези' ),
        'Fewestrevisions'           => array( 'ЧланциСаНајмањеРевизија' ),
@@ -136,7 +134,7 @@ $specialPageAliases = array(
        'Mypage'                    => array( 'МојаСтраница', 'Моја_страница' ),
        'Mytalk'                    => array( 'МојРазговор', 'Мој_разговор' ),
        'Myuploads'                 => array( 'Моја_слања' ),
-       'Newimages'                 => array( 'Ð\9dовиФаÑ\98лови', 'Ð\9dове_даÑ\82оÑ\82еке', 'НовеСлике' ),
+       'Newimages'                 => array( 'Ð\9dовеÐ\94аÑ\82оÑ\82еке', 'Ð\9dовиФаÑ\98лови', 'НовеСлике' ),
        'Newpages'                  => array( 'НовеСтране' ),
        'PermanentLink'             => array( 'Привремена_веза' ),
        'Popularpages'              => array( 'Популарне_странице' ),
@@ -151,13 +149,13 @@ $specialPageAliases = array(
        'Statistics'                => array( 'Статистике' ),
        'Tags'                      => array( 'Ознаке' ),
        'Uncategorizedcategories'   => array( 'КатегоријеБезКатегорија', 'Несврстане_категорије' ),
-       'Uncategorizedimages'       => array( 'СликеÐ\91езÐ\9aаÑ\82егоÑ\80иÑ\98а', 'ФаÑ\98ловиБезКатегорија' ),
+       'Uncategorizedimages'       => array( 'СликеÐ\91езÐ\9aаÑ\82егоÑ\80иÑ\98а', 'Ð\94аÑ\82оÑ\82екеБезКатегорија' ),
        'Uncategorizedpages'        => array( 'ЧланциБезКатегорија', 'Чланци_без_категорија' ),
        'Uncategorizedtemplates'    => array( 'ШаблониБезКатегорија' ),
        'Undelete'                  => array( 'Врати' ),
        'Unlockdb'                  => array( 'ОткључајБазу', 'Откључај_базу' ),
        'Unusedcategories'          => array( 'НеискоришћенеКатегорије' ),
-       'Unusedimages'              => array( 'Ð\9dеиÑ\81коÑ\80иÑ\88Ñ\9bенеСлике', 'Ð\9dеиÑ\81коÑ\80иÑ\88Ñ\9bениФаÑ\98лови' ),
+       'Unusedimages'              => array( 'Ð\9dеиÑ\81коÑ\80иÑ\88Ñ\9bенеСлике', 'Ð\9dеиÑ\81коÑ\80иÑ\88Ñ\9bенеÐ\94аÑ\82оÑ\82еке' ),
        'Upload'                    => array( 'Пошаљи' ),
        'UploadStash'               => array( 'Складиште' ),
        'Userlogin'                 => array( 'Корисничка_пријава' ),
@@ -674,8 +672,6 @@ $1',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'Преузето из „$1“',
 'youhavenewmessages' => 'Имате $1 ($2).',
-'newmessageslink' => 'нових порука',
-'newmessagesdifflink' => 'последња измена',
 'youhavenewmessagesfromusers' => 'Имате $1 од {{PLURAL:$3|другог корисника|$3 корисника|$3 корисника}} ($2).',
 'youhavenewmessagesmanyusers' => 'Имате $1 од много корисника ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|нову поруку|нове поруке}}',
@@ -857,6 +853,8 @@ $2',
 'userlogin-resetpassword-link' => 'Заборавили сте лозинку?',
 'helplogin-url' => 'Help:Logging in',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Помоћ при пријављивању]]',
+'userlogin-loggedin' => 'Већ сте пријављени као {{GENDER:$1|$1}}.
+Користите доњи образац да бисте се пријавили као други корисник.',
 'userlogin-createanother' => 'Отвори још један налог',
 'createacct-join' => 'Унесите своје податке испод',
 'createacct-another-join' => 'Унесите податке за нови налог испод.',
@@ -1171,8 +1169,9 @@ $2
 'storedversion' => 'Ускладиштена измена',
 'nonunicodebrowser' => "'''Упозорење: ваш прегледач не подржава уникод.'''
 Промените га пре него што почнете с уређивањем.",
-'editingold' => "'''Упозорење: уређујете застарелу измену ове странице.
-Ако је сачувате, све новије измене ће бити изгубљене.'''",
+'editingold' => '<div style="background: #FFBDBD; border: 1px solid #BB7979; color: #000000; font-weight: bold; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; clear: both;">Упозорење: Ви уређујете старију ревизију ове странице.<br />
+Ако је сачувате, све промене учињене од ове ревизије биће изгубљене.
+</div>',
 'yourdiff' => 'Разлике',
 'copyrightwarning' => "Имајте на уму да се сви доприноси на овом викију сматрају као објављени под лиценцом $2 (више на $1).
 Ако не желите да се ваши текстови мењају и размењују без ограничења, онда их не шаљите овде.<br />
@@ -1367,8 +1366,8 @@ $2
 'revdelete-hide-user' => 'Кориснчко име уредника/ИП адреса',
 'revdelete-hide-restricted' => 'Сакриј податке од администратора и других корисника',
 'revdelete-radio-same' => '(не мењај)',
-'revdelete-radio-set' => 'Ð\92идÑ\99иво',
-'revdelete-radio-unset' => 'СакÑ\80ивено',
+'revdelete-radio-set' => 'СакÑ\80ивено',
+'revdelete-radio-unset' => 'Ð\92идÑ\99иво',
 'revdelete-suppress' => 'Сакриј податке од администратора и других корисника',
 'revdelete-unsuppress' => 'Уклони ограничења на враћеним изменама',
 'revdelete-log' => 'Разлог:',
@@ -1525,7 +1524,6 @@ $1",
 'preferences' => 'Подешавања',
 'mypreferences' => 'Подешавања',
 'prefs-edits' => 'Број измена:',
-'prefsnologin' => 'Нисте пријављени',
 'changepassword' => 'Промени лозинку',
 'prefs-skin' => 'Тема',
 'skin-preview' => 'Прегледај',
@@ -1771,10 +1769,10 @@ $1",
 'action-createtalk' => 'прављење страница за разговор',
 'action-createaccount' => 'отварање овог корисничког налога',
 'action-minoredit' => 'означавање ове измене као мање',
-'action-move' => 'пÑ\80емеÑ\88Ñ\82аÑ\9aе Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е',
-'action-move-subpages' => 'пÑ\80емеÑ\88Ñ\82аÑ\9aе Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¸ Ñ\9aениÑ\85 Ð¿Ð¾Ð´Ñ\81Ñ\82Ñ\80аниÑ\86а',
+'action-move' => 'пÑ\80емеÑ\81Ñ\82и Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83',
+'action-move-subpages' => 'пÑ\80емеÑ\81Ñ\82и Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83, ÐºÐ°Ð¾ Ð¸ Ñ\9aене Ð¿Ð¾Ð´Ñ\81Ñ\82Ñ\80аниÑ\86е',
 'action-move-rootuserpages' => 'премештање основних корисничких страница',
-'action-movefile' => 'пÑ\80емеÑ\88Ñ\82аÑ\9aе Ð¾Ð²Ðµ Ð´Ð°Ñ\82оÑ\82еке',
+'action-movefile' => 'пÑ\80емеÑ\81Ñ\82и Ð¾Ð²Ñ\83 Ð´Ð°Ñ\82оÑ\82екÑ\83',
 'action-upload' => 'слање ове датотеке',
 'action-reupload' => 'замењивање постојеће датотеке',
 'action-reupload-shared' => 'постављање ове датотеке на заједничко складиште',
@@ -1814,6 +1812,7 @@ $1",
 'recentchanges-label-minor' => 'Мања измена',
 'recentchanges-label-bot' => 'Ову измену је направио бот',
 'recentchanges-label-unpatrolled' => 'Ова измена још није прегледана',
+'recentchanges-legend-newpage' => '(такође погледајте [[Special:NewPages|списак нових страница]])',
 'rcnote' => "Испод {{PLURAL:$1|је '''1''' измена|су последње '''$1''' измене|су последњих '''$1''' измена}} {{PLURAL:$2|претходни дан|у последњa '''$2''' дана|у последњих '''$2''' дана}}, од $4; $5.",
 'rcnotefrom' => 'Испод су измене од <b>$3; $4</b> (до <b>$1</b> измена).',
 'rclistfrom' => 'Прикажи нове измене почев од $1',
@@ -4079,6 +4078,7 @@ $5
 'ellipsis' => '…',
 'percent' => '$1%',
 'parentheses' => '($1)',
+'quotation-marks' => '„$1“',
 
 # Multipage image navigation
 'imgmultipageprev' => '← претходна страница',
@@ -4132,7 +4132,7 @@ $5
 Можете и да [[Special:EditWatchlist/raw|уредите сиров списак]].',
 'watchlistedit-normal-submit' => 'Уклони',
 'watchlistedit-normal-done' => '{{PLURAL:$1|Једна страница је уклоњена|$1 странице су уклоњене|$1 страница је уклоњено}} с вашег списка надгледања:',
-'watchlistedit-raw-title' => 'Ð\9dапÑ\80едно Ñ\83Ñ\80еÑ\92иваÑ\9aе Ñ\81пиÑ\81ка надгледања',
+'watchlistedit-raw-title' => 'Ð\98змени Ñ\81иÑ\80ов Ñ\81пиÑ\81ак надгледања',
 'watchlistedit-raw-legend' => 'Напредно уређивање списка надгледања',
 'watchlistedit-raw-explain' => 'Наслови са списка надгледања су приказани испод и могу се уређивати додавањем или уклањањем ставки са списка;
 један наслов по реду.
@@ -4270,6 +4270,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'Посебне странице',
+'specialpages-note-top' => 'Легенда',
 'specialpages-note' => '* Нормалне посебне странице
 * <span class="mw-specialpagerestricted">Ограничене посебне странице</span>',
 'specialpages-group-maintenance' => 'Извештаји одржавања',
@@ -4473,4 +4474,19 @@ $5
 'limitreport-postexpandincludesize-value' => '$1/$2 бајтова',
 'limitreport-templateargumentsize-value' => '$1/$2 бајтова',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Замена шаблона',
+'expand_templates_intro' => 'Ова посебна страница узима текст и мења све шаблоне у њему рекурзивно.
+Такође мења функције парсера као што је <code><nowiki>{{</nowiki>#language:…}}</code> и променљиве као што је <code><nowiki>{{</nowiki>CURRENTDAY}}</code>. 
+Заправо практично све што се налази између витичастих заграда.',
+'expand_templates_title' => 'Назив контекста; за {{СТРАНИЦА}} итд.:',
+'expand_templates_input' => 'Унос:',
+'expand_templates_output' => 'Резултат',
+'expand_templates_xml_output' => 'XML излаз',
+'expand_templates_ok' => 'У реду',
+'expand_templates_remove_comments' => 'Уклони коментаре',
+'expand_templates_remove_nowiki' => 'Поништава ефекат <nowiki> тагова у приказу чланака',
+'expand_templates_generate_xml' => 'прикажи XML стабло',
+'expand_templates_preview' => 'Приказ',
+
 );
index ce35eb8..4464361 100644 (file)
@@ -581,8 +581,6 @@ Pogledajte stranicu za [[Special:Version|izdanje]].',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'Preuzeto iz „$1“',
 'youhavenewmessages' => 'Imate $1 ($2).',
-'newmessageslink' => 'novih poruka',
-'newmessagesdifflink' => 'poslednju izmenu',
 'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugog korisnika|$3 korisnika|$3 korisnika}} ($2).',
 'youhavenewmessagesmanyusers' => 'Imate $1 od mnogo korisnika ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|nove poruke}}',
@@ -1057,8 +1055,9 @@ Moraćete da unesete svoje promene u postojeći tekst.
 'storedversion' => 'Uskladištena izmena',
 'nonunicodebrowser' => "'''Upozorenje: vaš pregledač ne podržava unikod.'''
 Promenite ga pre nego što počnete s uređivanjem.",
-'editingold' => "'''Upozorenje: uređujete zastarelu izmenu ove stranice.
-Ako je sačuvate, sve novije izmene će biti izgubljene.'''",
+'editingold' => '<div style="background: #FFBDBD; border: 1px solid #BB7979; color: #000000; font-weight: bold; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; clear: both;">Upozorenje: Vi uređujete stariju reviziju ove stranice.<br />
+Ako je sačuvate, sve promene učinjene od ove revizije biće izgubljene.
+</div>',
 'yourdiff' => 'Razlike',
 'copyrightwarning' => "Imajte na umu da se svi doprinosi na ovom vikiju smatraju kao objavljeni pod licencom $2 (više na $1).
 Ako ne želite da se vaši tekstovi menjaju i razmenjuju bez ograničenja, onda ih ne šaljite ovde.<br />
@@ -1252,8 +1251,8 @@ Drugi administratori na ovom vikiju će i dalje imati pristup sakrivenom sadrža
 'revdelete-hide-user' => 'sakrij ime uređivača',
 'revdelete-hide-restricted' => 'Sakrij podatke od administratora i drugih korisnika',
 'revdelete-radio-same' => '(ne menjaj)',
-'revdelete-radio-set' => 'da',
-'revdelete-radio-unset' => 'ne',
+'revdelete-radio-set' => 'Sakriveno',
+'revdelete-radio-unset' => 'Vidljivo',
 'revdelete-suppress' => 'Sakrij podatke od administratora i drugih korisnika',
 'revdelete-unsuppress' => 'Ukloni ograničenja na vraćenim izmenama',
 'revdelete-log' => 'Razlog:',
@@ -1410,7 +1409,6 @@ Upamtite da njegovi popisi ovog vikija mogu biti zastareli.',
 'preferences' => 'Podešavanja',
 'mypreferences' => 'Podešavanja',
 'prefs-edits' => 'Broj izmena:',
-'prefsnologin' => 'Niste prijavljeni',
 'changepassword' => 'Promeni lozinku',
 'prefs-skin' => 'Tema',
 'skin-preview' => 'Pregledaj',
@@ -1650,10 +1648,10 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'action-createtalk' => 'pravljenje stranica za razgovor',
 'action-createaccount' => 'otvaranje ovog korisničkog naloga',
 'action-minoredit' => 'označavanje ove izmene kao manje',
-'action-move' => 'premeštanje ove stranice',
-'action-move-subpages' => 'premeštanje ove stranice i njenih podstranica',
+'action-move' => 'premesti ovu stranicu',
+'action-move-subpages' => 'premesti ovu stranicu, kao i njene podstranice',
 'action-move-rootuserpages' => 'premeštanje osnovnih korisničkih stranica',
-'action-movefile' => 'premeštanje ove datoteke',
+'action-movefile' => 'premesti ovu datoteku',
 'action-upload' => 'slanje ove datoteke',
 'action-reupload' => 'zamenjivanje postojeće datoteke',
 'action-reupload-shared' => 'postavljanje ove datoteke na zajedničko skladište',
@@ -1690,6 +1688,7 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'recentchanges-label-minor' => 'Manja izmena',
 'recentchanges-label-bot' => 'Ovu izmenu je napravio bot',
 'recentchanges-label-unpatrolled' => 'Ova izmena još nije pregledana',
+'recentchanges-legend-newpage' => '$1 - nova stranica',
 'rcnote' => "Ispod {{PLURAL:$1|je '''1''' izmena|su poslednje '''$1''' izmene|su poslednjih '''$1''' izmena}} {{PLURAL:$2|prethodni dan|u poslednja '''$2''' dana|u poslednjih '''$2''' dana}}, od $4; $5.",
 'rcnotefrom' => 'Ispod su izmene od <b>$3; $4</b> (do <b>$1</b> izmena).',
 'rclistfrom' => 'Prikaži nove izmene počev od $1',
@@ -3920,6 +3919,7 @@ Potvrdite da stvarno želite da napravite stranicu.",
 'ellipsis' => '…',
 'percent' => '$1%',
 'parentheses' => '($1)',
+'quotation-marks' => '„$1“',
 
 # Multipage image navigation
 'imgmultipageprev' => '← prethodna stranica',
@@ -3973,7 +3973,7 @@ Da biste uklonili naslov, označite kućicu do njega i kliknite na „{{int:Watc
 Možete i da [[Special:EditWatchlist/raw|uredite sirov spisak]].',
 'watchlistedit-normal-submit' => 'Ukloni',
 'watchlistedit-normal-done' => '{{PLURAL:$1|Jedna stranica je uklonjena|$1 stranice su uklonjene|$1 stranica je uklonjeno}} s vašeg spiska nadgledanja:',
-'watchlistedit-raw-title' => 'Napredno uređivanje spiska nadgledanja',
+'watchlistedit-raw-title' => 'Izmeni sirov spisak nadgledanja',
 'watchlistedit-raw-legend' => 'Napredno uređivanje spiska nadgledanja',
 'watchlistedit-raw-explain' => 'Naslovi sa spiska nadgledanja su prikazani ispod i mogu se uređivati dodavanjem ili uklanjanjem stavki sa spiska;
 jedan naslov po redu.
@@ -4225,6 +4225,7 @@ Trebalo bi da ste primili [{{SERVER}}{{SCRIPTPATH}}/COPYING primerak GNU-ove op
 'logentry-newusers-newusers' => '$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog',
 'logentry-newusers-create' => '$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog',
 'logentry-newusers-create2' => '$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog $3',
+'logentry-newusers-byemail' => 'Korisnički nalog $3 je {{GENDER:$2|napravljen}} od strane $1 i lozinka je poslata na e-poštu',
 'logentry-newusers-autocreate' => 'Korisnički nalog $1 je automatski {{GENDER:$2|otvoren}}',
 'logentry-rights-rights' => '$1 je {{GENDER:$1|promenio|promenila}} članstvo grupe za $3 iz $4 u $5',
 'logentry-rights-rights-legacy' => '$1 je {{GENDER:$2|promenio|promenila}} čalnstvo grupe za $3',
@@ -4306,4 +4307,19 @@ U suprotnom, poslužite se jednostavnim obrascem ispod. Vaš komentar će stajat
 # Image rotation
 'rotate-comment' => 'Slika je rotirana za $1° u smeru kazaljke na satu',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Zamena šablona',
+'expand_templates_intro' => 'Ova posebna stranica uzima tekst i menja sve šablone u njemu rekurzivno.
+Takođe menja funkcije parsera kao što je <code><nowiki>{{</nowiki>#language:…}}</code> i promenljive kao što je <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Zapravo praktično sve što se nalazi između vitičastih zagrada.',
+'expand_templates_title' => 'Naziv konteksta; za {{STRANICA}} itd.:',
+'expand_templates_input' => 'Unos:',
+'expand_templates_output' => 'Rezultat',
+'expand_templates_xml_output' => 'XML izlaz',
+'expand_templates_ok' => 'U redu',
+'expand_templates_remove_comments' => 'Ukloni komentare',
+'expand_templates_remove_nowiki' => 'Poništava efekat <nowiki> tagova u prikazu članaka',
+'expand_templates_generate_xml' => 'prikaži XML stablo',
+'expand_templates_preview' => 'Prikaz',
+
 );
index df96074..62620b1 100644 (file)
@@ -55,12 +55,10 @@ $specialPageAliases = array(
        'Allmessages'               => array( 'Boskopu' ),
        'Allpages'                  => array( 'AlaPeprewoysi' ),
        'Ancientpages'              => array( 'PasaOwruPeprewoysi' ),
-       'Blockme'                   => array( 'SpikriMi' ),
        'BrokenRedirects'           => array( 'BrokoStirpeprewoysi' ),
        'Categories'                => array( 'Guru' ),
        'Contributions'             => array( 'Kenki' ),
        'Deadendpages'              => array( 'NoSkakiPeprewoysi' ),
-       'Disambiguations'           => array( 'PeprewoysiFuKumakriki' ),
        'DoubleRedirects'           => array( 'Tustirpeprewoysi' ),
        'Emailuser'                 => array( 'EmailMasyin' ),
        'Fewestrevisions'           => array( 'MenaKenki' ),
@@ -364,8 +362,6 @@ $messages = array(
 'ok' => 'Abun',
 'retrievedfrom' => 'Teki baka fu "$1"',
 'youhavenewmessages' => 'Yu abi $1 ($2).',
-'newmessageslink' => 'nyun boskopu',
-'newmessagesdifflink' => 'laste kenki',
 'youhavenewmessagesmulti' => 'Yu abi nyun boskopu na tapu $1',
 'editsection' => 'kenki',
 'editold' => 'kenki',
@@ -640,7 +636,6 @@ A kan ben trowe efu dribi.
 'preferences' => 'Seti',
 'mypreferences' => 'Mi seti',
 'prefs-edits' => 'Nomru fu kenki:',
-'prefsnologin' => 'No kon',
 'changepassword' => 'Kenki yu waktiwortu',
 'prefs-skin' => 'Buba',
 'skin-preview' => 'Si-na-fesi',
index 6cab51c..1cddf44 100644 (file)
@@ -300,8 +300,6 @@ $1',
 'ok' => 'Säike (09)',
 'retrievedfrom' => 'Fon "$1"',
 'youhavenewmessages' => 'Du hääst $1 ($2).',
-'newmessageslink' => 'näie Ättergjuchte',
-'newmessagesdifflink' => 'Unnerskeed tou ju foarlääste Version',
 'youhavenewmessagesmulti' => 'Du hääst näie Ättergjuchte: $1',
 'editsection' => 'Beoarbaidje',
 'editold' => 'Beoarbaidje',
@@ -1007,7 +1005,6 @@ Staal deertruch sicher, dät ju Versionsgeskichte fon n Artikkel historisk akroa
 'preferences' => 'Ienstaalengen',
 'mypreferences' => 'Ienstaalengen',
 'prefs-edits' => 'Antaal Beoarbaidengen:',
-'prefsnologin' => 'Nit anmälded',
 'changepassword' => 'Paaswoud annerje',
 'prefs-skin' => 'Skin',
 'skin-preview' => 'Foarskau',
@@ -1273,6 +1270,7 @@ Ju duur maximoal $1 {{PLURAL:$1|Teeken|Teekene}} loang weese.',
 'recentchanges-label-minor' => 'Litje Annerenge',
 'recentchanges-label-bot' => 'Annerenge truch n Bot',
 'recentchanges-label-unpatrolled' => 'Nit-kontrollierde Annerenge',
+'recentchanges-legend-newpage' => '$1 - näie Siede',
 'rcnote' => "Anwiesd {{PLURAL:$1|wäd '''1''' Annerenge|wäide do lääste '''$1''' Annerengen}} in {{PLURAL:$2|dän lääste Dai|do lääste '''$2''' Deege}} siet $5, $4.",
 'rcnotefrom' => "Anwiesd wäide do Annerengen siet '''$2''' (max. '''$1''' Iendraage).",
 'rclistfrom' => 'Bloot näie Annerengen siet $1 wiese.',
@@ -3239,4 +3237,16 @@ Ne [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie fon ju ''GNU General Public License''
 'searchsuggest-search' => 'Säik',
 'searchsuggest-containing' => 'Fultextsäike ätter ...',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Foarloagen expandierje',
+'expand_templates_intro' => "In disse Spezialsiede kon Text ienroat wäide un aal Foarloagen in hier wäide rekursiv expandierd. Uk Parserfunktione as <nowiki>{{</nowiki>#language:...}} un Variabelen as <nowiki>{{</nowiki>CURRENTDAY}} wäide benutsed - faktisk alles wät twiske dubbelde swoangene Klammere '''{{}}''' stoant. Dit geböärt truch dän Aproup fon apstuunse Parser-Phasen in MediaWiki.",
+'expand_templates_title' => 'Kontexttittel, foar {{FULLPAGENAME}} etc.:',
+'expand_templates_input' => 'Iengoawefäild:',
+'expand_templates_output' => 'Resultoat',
+'expand_templates_xml_output' => 'XML-Uutgoawe',
+'expand_templates_ok' => 'Uutfiere',
+'expand_templates_remove_comments' => 'Kommentoare wächhoalje',
+'expand_templates_generate_xml' => 'Wies XML Parser-Boom',
+'expand_templates_preview' => 'Foarskau',
+
 );
index 230981d..327a003 100644 (file)
@@ -49,7 +49,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'KacaKolot' ),
        'Blankpage'                 => array( 'KacaKosong' ),
        'Block'                     => array( 'PeungpeukIP' ),
-       'Blockme'                   => array( 'PeungpeukKuring' ),
        'Booksources'               => array( 'SumberPustaka' ),
        'BrokenRedirects'           => array( 'AlihanPegat' ),
        'Categories'                => array( 'Kategori' ),
@@ -58,7 +57,6 @@ $specialPageAliases = array(
        'Contributions'             => array( 'Kontribusi' ),
        'CreateAccount'             => array( 'NyieunRekening' ),
        'Deadendpages'              => array( 'KacaBuntu' ),
-       'Disambiguations'           => array( 'Disambiguasi' ),
        'DoubleRedirects'           => array( 'AlihanGanda' ),
        'Emailuser'                 => array( 'SurelekPamake' ),
        'Export'                    => array( 'Ekspor' ),
@@ -387,8 +385,6 @@ $1',
 'ok' => 'Heug',
 'retrievedfrom' => 'Disalin ti "$1"',
 'youhavenewmessages' => 'Anjeun boga $1 ($2).',
-'newmessageslink' => 'talatah anyar',
-'newmessagesdifflink' => 'bédana ti nu saméméhna',
 'youhavenewmessagesmulti' => 'Anjeun boga talatah anyar di $1',
 'editsection' => 'édit',
 'editold' => 'édit',
@@ -1074,7 +1070,6 @@ Coba susud dimimitian ku ''all:'' pikeun nyusud sakabéh kandunganana (kaasup ka
 'preferences' => 'Préferénsi',
 'mypreferences' => 'Préferéns',
 'prefs-edits' => 'Jumlah éditan:',
-'prefsnologin' => 'Can asup log',
 'changepassword' => 'Robah sandi',
 'prefs-skin' => 'Kulit',
 'skin-preview' => 'Pramidang',
@@ -1332,6 +1327,7 @@ Mun geus anggeus teu bisa dibolaykeun.',
 'recentchanges-label-minor' => 'Ieu éditan minor',
 'recentchanges-label-bot' => 'Ieu parobahan dijieun ku bot',
 'recentchanges-label-unpatrolled' => 'Ieu éditan can karoris',
+'recentchanges-legend-newpage' => '$1 - kaca anyar',
 'rcnote' => "Di handap ieu {{PLURAL:$1|'''1''' parobahan| '''$1''' parobahan anyar}} dina  {{PLURAL:$2|poé|'''$2''' poé}} ahir, nepi $5, $4.",
 'rcnotefrom' => 'Di handap ieu parobahan saprak <b>$2</b> (nu ditémbongkeun nepi ka <b>$1</b>).',
 'rclistfrom' => 'Témbongkeun nu anyar robah nepi ka $1',
@@ -3024,4 +3020,12 @@ Coba ku sawangan normal.',
 'duration-centuries' => '$1 {{PLURAL:$1|abad|abad}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milénium|milénium}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Mekarkeun citakan',
+'expand_templates_input' => 'Téks input:',
+'expand_templates_output' => 'Hasil:',
+'expand_templates_xml_output' => 'Output XML',
+'expand_templates_ok' => 'Heug',
+'expand_templates_preview' => 'Pramidang',
+
 );
index 155f63e..1014778 100644 (file)
@@ -98,7 +98,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'Gamla_sidor' ),
        'Blankpage'                 => array( 'Tom_sida' ),
        'Block'                     => array( 'Blockera' ),
-       'Blockme'                   => array( 'Blockera_mig' ),
        'Booksources'               => array( 'Bokkällor' ),
        'BrokenRedirects'           => array( 'Trasiga_omdirigeringar', 'Dåliga_omdirigeringar' ),
        'Categories'                => array( 'Kategorier' ),
@@ -108,9 +107,9 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Skapa_konto' ),
        'Deadendpages'              => array( 'Sidor_utan_länkar', 'Sidor_utan_länkar_från' ),
        'DeletedContributions'      => array( 'Raderade_bidrag' ),
-       'Disambiguations'           => array( 'Förgreningssidor' ),
        'DoubleRedirects'           => array( 'Dubbla_omdirigeringar' ),
        'Emailuser'                 => array( 'E-mail' ),
+       'ExpandTemplates'           => array( 'Expandera_mallar', 'Utöka_mallar' ),
        'Export'                    => array( 'Exportera' ),
        'Fewestrevisions'           => array( 'Minst_versioner' ),
        'FileDuplicateSearch'       => array( 'Dublettfilsökning' ),
@@ -600,12 +599,10 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Hämtad från "$1"',
 'youhavenewmessages' => 'Du har $1 ($2).',
-'newmessageslink' => 'nya meddelanden',
-'newmessagesdifflink' => 'senaste ändringen',
 'youhavenewmessagesfromusers' => 'Du har $1 från {{PLURAL:$3|en annan användare|$3 användare}} ($2).',
 'youhavenewmessagesmanyusers' => 'Du har $1 från många användare ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|ett nytt meddelande|nya meddelanden}}',
-'newmessagesdifflinkplural' => 'senaste {{PLURAL:$1|ändring|ändringar}}',
+'newmessageslinkplural' => '{{PLURAL:$1|ett nytt meddelande|999=nya meddelanden}}',
+'newmessagesdifflinkplural' => 'senaste {{PLURAL:$1|ändring|999=ändringar}}',
 'youhavenewmessagesmulti' => 'Du har nya meddelanden på $1',
 'editsection' => 'redigera',
 'editold' => 'redigera',
@@ -734,7 +731,8 @@ Den administratören som låste den gav denna anledning: "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Ogiltig titel med namnrymden "$2" och texten "$3"',
 'invalidtitle-unknownnamespace' => 'Ogiltig titel med okänt namnrymdsnummer $1 och texten "$2"',
 'exception-nologin' => 'Inte inloggad',
-'exception-nologin-text' => 'Denna sida eller åtgärd kräver att du måste vara inloggad på denna wiki.',
+'exception-nologin-text' => 'Var god [[Special:Userlogin|logga in]] för att komma åt denna sida eller åtgärd.',
+'exception-nologin-text-manual' => 'Var god $1 för att få tillgång till denna sida eller åtgärd.',
 
 # Virus scanner
 'virus-badscanner' => "Dålig konfigurering: okänd virusskanner: ''$1''",
@@ -1284,6 +1282,7 @@ eller så försöker du gömma den senaste versionen av sidan.',
 Andra administratörer på {{SITENAME}} kommer fortfarande att kunna läsa det dolda innehållet och kan återställa sidan genom samma gränssnitt, om inte ytterligare begränsningar finns.",
 'revdelete-confirm' => 'Var god bekräfta att du vill göra detta, och att du förstår konsekvenserna, och att du gör så i enlighet med [[{{MediaWiki:Policy-url}}|policyn]].',
 'revdelete-suppress-text' => "Undanhållande ska '''bara''' användas i följande fall:
+* Eventuell förolämpande information
 * Opassande personlig information
 *: ''hemadresser och telefonnummer, personnummer, etc.''",
 'revdelete-legend' => 'Ändra synlighet',
@@ -1452,7 +1451,7 @@ Notera dock att deras indexering av {{SITENAME}} kan vara något föråldrad.',
 'preferences' => 'Inställningar',
 'mypreferences' => 'Inställningar',
 'prefs-edits' => 'Antal redigeringar:',
-'prefsnologin' => 'Inte inloggad',
+'prefsnologintext2' => 'Var god $1 för att ändra användarinställningar.',
 'changepassword' => 'Byt lösenord',
 'prefs-skin' => 'Utseende',
 'skin-preview' => 'förhandsvisning',
@@ -1751,6 +1750,7 @@ Om du väljer att ange ditt riktiga namn, kommer det att användas för att till
 'recentchanges-label-minor' => 'Detta är en mindre ändring',
 'recentchanges-label-bot' => 'Denna redigering gjordes av en bot',
 'recentchanges-label-unpatrolled' => 'Denna redigering har inte blivit kontrollerad ännu',
+'recentchanges-legend-newpage' => '(se även [[Special:NewPages|listan över nya sidor]])',
 'rcnote' => "Nedan visas {{PLURAL:$1|'''1''' ändring|de senaste '''$1''' ändringarna}} från {{PLURAL:$2|det senaste dygnet|de senaste '''$2''' dygnen}}, per $4, kl. $5.",
 'rcnotefrom' => "Nedan visas ändringar sedan '''$2''' (upp till '''$1''' visas).",
 'rclistfrom' => 'Visa ändringar efter $1',
@@ -2479,8 +2479,7 @@ Kontakta användaren:
 e-post: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Såvida du inte besöker sidan, kommer du inte att få flera meddelanden om aktivitet på sidan.
-Du kan också ta bort flaggan för meddelanden om ändringar på alla sidor i din bevakningslista.
+Såvida du inte besöker sidan, kommer du inte att få flera meddelanden om aktivitet på sidan när du är inloggad. Du kan också ta bort flaggan för meddelanden om ändringar på alla sidor i din bevakningslista.
 
 Hälsningar från {{SITENAME}}s meddelandesystem
 
@@ -4006,9 +4005,9 @@ Du bör ha fått [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopia av GNU General Publi
 
 # Special:SpecialPages
 'specialpages' => 'Specialsidor',
+'specialpages-note-top' => 'Teckenförklaring',
 'specialpages-note' => '* Normala specialsidor.
-* <span class="mw-specialpagerestricted">Specialsidor med begränsad åtkomst.</span>
-* <span class="mw-specialpagecached">Cachade specialsidor (kan vara föråldrade).</span>',
+* <span class="mw-specialpagerestricted">Specialsidor med begränsad åtkomst.</span>',
 'specialpages-group-maintenance' => 'Underhållsrapporter',
 'specialpages-group-other' => 'Övriga specialsidor',
 'specialpages-group-login' => 'Logga in / skapa konto',
@@ -4221,4 +4220,17 @@ Annars kan du använda det enkla formuläret nedan. Din kommentar kommer att lä
 'limitreport-expansiondepth' => 'Största expansionsdjup',
 'limitreport-expensivefunctioncount' => 'Antal dyra parser-funktioner',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Expandera mallar',
+'expand_templates_intro' => 'Den här specialsidan tar en text och expanderar rekursivt alla mallar som används. Även parserfunktioner (som <code><nowiki>{{</nowiki>#language:...}}</code>), variabler som <code><nowiki>{{</nowiki>CURRENTDAY}}</code> och annan kod med dubbla klammerparenteser expanderas.',
+'expand_templates_title' => 'Sidans titel, används för t.ex. {{FULLPAGENAME}}:',
+'expand_templates_input' => 'Text som ska expanderas:',
+'expand_templates_output' => 'Expanderad kod',
+'expand_templates_xml_output' => 'XML-kod',
+'expand_templates_ok' => 'Expandera',
+'expand_templates_remove_comments' => 'Ta bort kommentarer',
+'expand_templates_remove_nowiki' => 'Undertryck <nowiki> taggar i resultatet',
+'expand_templates_generate_xml' => 'Visa parseträd som XML',
+'expand_templates_preview' => 'Förhandsvisning',
+
 );
index 31d5812..a1bdd4a 100644 (file)
@@ -53,7 +53,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'KurasazaZamani' ),
        'Blankpage'                 => array( 'KurasaTupu' ),
        'Block'                     => array( 'Zui', 'ZuiaIP', 'ZuiaMtumiaji' ),
-       'Blockme'                   => array( 'Nizuiye' ),
        'Booksources'               => array( 'ZuiaChanzo' ),
        'BrokenRedirects'           => array( 'ElekezoIliovunjika' ),
        'Categories'                => array( 'Jamii' ),
@@ -62,7 +61,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'SajiliAkaunti' ),
        'Deadendpages'              => array( 'KurasaZilizoondoshwa' ),
        'DeletedContributions'      => array( 'MichangoIliyofutwa' ),
-       'Disambiguations'           => array( 'Maana' ),
        'DoubleRedirects'           => array( 'ElekezoMbili' ),
        'Emailuser'                 => array( 'BaruapepeyaMtumiaji' ),
        'Export'                    => array( 'Toa' ),
@@ -397,8 +395,6 @@ Tazama [[Special:Version|ukurasa wa toleo]].',
 'ok' => 'Sawa',
 'retrievedfrom' => 'Rudishwa kutoka "$1"',
 'youhavenewmessages' => 'Una $1 ($2).',
-'newmessageslink' => 'ujumbe mpya',
-'newmessagesdifflink' => 'badiliko la mwisho',
 'youhavenewmessagesfromusers' => 'Una $1 kutoka {{PLURAL:$3|another user|$3 users}} ($2)',
 'youhavenewmessagesmanyusers' => 'Una $1 kutoka kwa watumiaji wengi $2',
 'newmessageslinkplural' => '{{PLURAL:$1|a new message|ujumbe mpya}}',
@@ -454,6 +450,7 @@ Orodha ya kurasa maalumu zinapatika kwenye [[Special:SpecialPages|{{int:kurasama
 # General errors
 'error' => 'Hitilafu',
 'databaseerror' => 'Hitilafu ya hifadhidata',
+'databaseerror-error' => 'Hitilafu: $1',
 'laggedslavemode' => "'''Ilani:'''Labda masahihisho ya hivi karibuni bado hayajaonekana.",
 'readonly' => 'Hifadhidata imefungika',
 'enterlockreason' => 'Ingiza sababu za kufunga, pamoja na makisio yake lini itafunguliwa',
@@ -530,10 +527,13 @@ Unaweza kuendelea kutumia {{SITENAME}} bila kutaja jina lako, au unaweza <span c
 'yourname' => 'Jina la mtumiaji:',
 'userlogin-yourname' => 'Jina la mtumiaji',
 'userlogin-yourname-ph' => 'Weka jina lako la mtumiaji',
+'createacct-another-username-ph' => 'Weka jina la mtumiaji',
 'yourpassword' => 'Neno la siri:',
 'userlogin-yourpassword' => 'Neno la siri',
 'userlogin-yourpassword-ph' => 'Weka neno lako la siri',
+'createacct-yourpassword-ph' => 'Weka neno la siri',
 'yourpasswordagain' => 'Andika tena neno la siri',
+'createacct-yourpasswordagain-ph' => 'Weka neno la siri tena',
 'remembermypassword' => 'Kumbuka kuingia kwangu katika kivinjari hiki (kwa muda usiozidi {{PLURAL:$1|siku}} $1)',
 'yourdomainname' => 'Tovuti yako:',
 'password-change-forbidden' => 'Hauwezi kubadili nywila katika Wiki hii.',
@@ -554,8 +554,12 @@ Unaweza kuendelea kutumia {{SITENAME}} bila kutaja jina lako, au unaweza <span c
 'gotaccount' => "Unayo akaunti tayari? '''$1'''",
 'gotaccountlink' => 'Ingia',
 'userlogin-resetlink' => 'Umesahau maelezo yako ya kuingia?',
+'createacct-emailrequired' => 'Anwani ya barua pepe',
+'createacct-email-ph' => 'Weka anwani yako ya barua pepe',
+'createacct-another-email-ph' => 'Weka anwani ya barua pepe',
 'createaccountmail' => 'Kwa barua pepe',
 'createaccountreason' => 'Sababu:',
+'createacct-reason' => 'Sababu',
 'badretype' => 'Maneno uliyoyaandika ni tofauti.',
 'userexists' => 'Jina la mtumiaji uliloingiza tayari linatumika.
 Tafadhali chagua jina lingine.',
@@ -993,8 +997,8 @@ Wakabidhi wengine wa {{SITENAME}} bado wataweza kuliona lile lililofichwa pamoja
 'revdelete-hide-user' => 'Ficha jina la mhariri/anwani ya IP ya mhariri',
 'revdelete-hide-restricted' => 'Wakabidhi (vilevile wengine) wasiweze kuona data',
 'revdelete-radio-same' => '(isibadilishwe)',
-'revdelete-radio-set' => 'Ndiyo',
-'revdelete-radio-unset' => 'Hapana',
+'revdelete-radio-set' => 'Halionekani',
+'revdelete-radio-unset' => 'Linaonekana',
 'revdelete-suppress' => 'Wakabidhi (vilevile wengine) wasiweze kuona data',
 'revdelete-unsuppress' => 'Uzuio wa kuona mapitio uondolewe, mapitio yanaporudishwa',
 'revdelete-log' => 'Sababu:',
@@ -1128,7 +1132,6 @@ Ujue lakini kwamba kumbukumbu za {{SITENAME}} kule Google labda zilipitwa na wak
 'preferences' => 'Mapendekezo',
 'mypreferences' => 'Mapendekezo',
 'prefs-edits' => 'Idadi ya marekebisho:',
-'prefsnologin' => 'Hujaingia',
 'changepassword' => 'Badilisha neno la siri',
 'prefs-skin' => 'Umbo',
 'skin-preview' => 'Hakiki',
@@ -1226,6 +1229,7 @@ Taarifa hii itakuwa wazi.',
 'prefs-dateformat' => 'Jinsi inayoandikwa tarehe',
 'prefs-timeoffset' => 'Kuweka saa tofauti na saa ya seva',
 'prefs-advancedediting' => 'Hitiari za hali ya juu',
+'prefs-preview' => 'Hakiki',
 'prefs-advancedrc' => 'Hitiari za hali ya juu',
 'prefs-advancedrendering' => 'Hitiari za hali ya juu',
 'prefs-advancedsearchoptions' => 'Hitiari za hali ya juu',
@@ -1377,6 +1381,7 @@ Taarifa hii itakuwa wazi.',
 
 # Recent changes
 'nchanges' => '{{PLURAL:$1|badiliko|mabadiliko}} $1',
+'enhancedrc-history' => 'historia',
 'recentchanges' => 'Mabadiliko ya karibuni',
 'recentchanges-legend' => "Machaguo ya 'mabadaliko ya karibuni'",
 'recentchanges-summary' => 'Orodha ya mabadilisho yaliyofanywa katika {{SITENAME}} siku zilizopita.',
@@ -1385,6 +1390,7 @@ Taarifa hii itakuwa wazi.',
 'recentchanges-label-minor' => 'Hili ni badiliko dogo',
 'recentchanges-label-bot' => 'Sahihisho hili lilitekelezwa na bot',
 'recentchanges-label-unpatrolled' => 'Haririo hili bado halijafanyiwa doria',
+'recentchanges-legend-newpage' => '$1 - ukurasa mpya',
 'rcnote' => "{{PLURAL:$1|Linalofuata ni badiliko '''1'''|Yanayofuata ni mabadiliko '''$1''' ya mwisho}} kutoka katika {{PLURAL:$2|siku iliyopita|siku '''$2''' zilizopita}}, hadi saa $5, tarehe $4.",
 'rcnotefrom' => "Hapo chini yaonekana mabadiliko tangu '''$2''' (tunaonyesha hadi '''$1''').",
 'rclistfrom' => 'Onyesha mabadiliko mapya kuanzia $1',
@@ -1406,7 +1412,7 @@ Taarifa hii itakuwa wazi.',
 'rc_categories' => 'Chagua jamii zingine (uzitenge na kigawaji hiki "|")',
 'rc_categories_any' => 'Yoyote',
 'newsectionsummary' => '/* $1 */ mjadala mpya',
-'rc-enhanced-expand' => 'Onyesha maelezo mengine (inahitaji JavaScript)',
+'rc-enhanced-expand' => 'Onyesha maelezo',
 'rc-enhanced-hide' => 'Ficha maelezo mengine',
 'rc-old-title' => 'ilitengenezwa hapo awali na "$1"',
 
@@ -1722,6 +1728,9 @@ Kumbuka kuhakikisha kwamba hakuna viungo vingine vinavyoelekea kigezo fulani kab
 'randompage' => 'Ukurasa wa bahati',
 'randompage-nopages' => 'Hakuna kurasa katika {{PLURAL:$2|eneo la wiki lifuatalo|maeneo ya wiki yafuatayo}}: $1.',
 
+# Random page in category
+'randomincategory-selectcategory-submit' => 'Nenda',
+
 # Random redirect
 'randomredirect' => 'Elekezo la bahati',
 'randomredirect-nopages' => 'Hakuna maelekezo katika eneo la wiki la "$1".',
@@ -1747,6 +1756,8 @@ Kumbuka kuhakikisha kwamba hakuna viungo vingine vinavyoelekea kigezo fulani kab
 'statistics-users-active-desc' => 'Watumiaji waliofanya kazi katika siku {{PLURAL:$1|iliyopita|$1 zilizopita}}',
 'statistics-mostpopular' => 'Kurasa zinazotazamwa sana',
 
+'pageswithprop-submit' => 'Nenda',
+
 'doubleredirects' => 'Maelekezo mawilimawili',
 'doubleredirectstext' => 'Ukurasa huu unaorodhesha kurasa zinazoelekeza kurasa zingine za kuelekeza.
 Katika kila mstari kuna viungo vinavyokwenda katika kurasa za kuelekeza zote mbili, pamoja na ukurasa wa mwishilio mwa elekezo la pili. Ukurasa huu wa mwishilio huwa ni ukurasa unaostahili kuelekezwa kutoka kwa ukurasa wa kuelekeza wa kwanza. Vitu <del>vilivyokatwa kwa mstari</del> vimeshatatuliwa.',
@@ -2590,7 +2601,7 @@ Ukilitekeleza faili, mashine yako huenda ikawa matatani.',
 'file-info-size-pages' => 'Piseli $1 × $2, ukubwa wa faili: $3, aina ya MIME: $4, {{PLURAL:$5|ukurasa|kurasa}} $5',
 'file-nohires' => 'Hakuna saizi kubwa zaidi.',
 'svg-long-desc' => 'faili la SVG, husemwa kuwa piseli $1 × $2, saizi ya faili: $3',
-'show-big-image' => 'Ukubwa wa awali',
+'show-big-image' => 'Faili lenyewe',
 'show-big-image-preview' => 'Ukubwa wa hakikisho: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Ukubwa mwingine|Ukubwa zingine}}: $1.',
 'show-big-image-size' => 'piseli $1 × $2',
@@ -3168,4 +3179,8 @@ Huwa unapokea [{{SERVER}}{{SCRIPTPATH}}/COPYING nakala ya GNU General Public Lic
 'duration-years' => '{{PLURAL:$1|mwaka|miaka}} $1',
 'duration-centuries' => '{{PLURAL:$1|karne}} $1',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Sawa',
+'expand_templates_preview' => 'Hakiki',
+
 );
index b08878d..e5c7f79 100644 (file)
@@ -333,12 +333,10 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Zdrzůdło "$1"',
 'youhavenewmessages' => 'Mosz $1 ($2).',
-'newmessageslink' => 'nowe powjadůmjyńa',
-'newmessagesdifflink' => 'uostatńe pomjyńyńy',
 'youhavenewmessagesfromusers' => 'Mosz $1 uod {{PLURAL:$3|inszygo używocza|$3 używoczy}} ($2).',
 'youhavenewmessagesmanyusers' => 'Mosz $1 uod wjelu używoczy ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|jydno nowina|nowiny}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|uostatńe sprowjyńe|uostatńe sprowjyńa}}',
+'newmessageslinkplural' => '{{PLURAL:$1|jedno nowina|999=nowiny}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|uostatńe sprowjyńe|999=uostatńe sprowjyńa}}',
 'youhavenewmessagesmulti' => 'Mosz nowe powjadůmjyńa: $1',
 'editsection' => 'Sprowjej',
 'editold' => 'sprowjej',
@@ -456,7 +454,7 @@ Powůd zawarćo: ''$2''.",
 Administrator kery zawarł wćepał kůmyntorz: "$3".',
 'invalidtitle-knownnamespace' => 'Felerne mjano "$3" w przestrzeńy "$2".',
 'exception-nologin' => 'Ńy jest żeś zalogůwany',
-'exception-nologin-text' => 'Ta zajta abo akcyja wymogo byćo zalogůwanym na tyj wiki.',
+'exception-nologin-text' => 'Prosza [[Special:Userlogin|zaloguj śe]] coby mjeć mogebność przejśćo do tyj zajty abo akcyji.',
 
 # Virus scanner
 'virus-badscanner' => "Felerno konfiguracyjo – ńyznany skaner antywirusowy ''$1''",
@@ -739,7 +737,9 @@ Mogesz [[Special:Search/{{PAGENAME}}|wysznupać ta titla]] we treśćach inkszyc
 'previewnote' => "'''To je ino podglůnd - artikel jeszcze ńy je spamjyntany!'''",
 'continue-editing' => 'Przyndź do pola sprowjańo',
 'previewconflict' => 'Wersyjo podglůndano uodnośi śe do tekstu ze pola edycyje na wjyrchu. Tak bydźe wyglůndać zajta jeli zdecydujesz śe jům naszkryflać.',
-'session_fail_preview' => "'''Przepraszomy! Serwer ńy może przetworzić tygo sprowjyńo skuli utraty danych ze sesyji. Sprůbuj jeszcze roz. Kejby to ńy pomogło - wyloguj śe a zalogůj uod nowa.'''",
+'session_fail_preview' => "'''Pozůr! Serwer ńy może przetworzić tyj edycyji, beztuż co dane sesyji uostoły utracůne.
+Poprůbuj jeszcze roz.
+Eli to tyż ńy do podpory – [[Special:UserLogout|wyloguj śe]] a zaloguj jeszcze roz.'''",
 'session_fail_preview_html' => "'''Přeprašomy! Serwer ńy može přetwořyć tygo sprowjyńo skuli utraty danych ze sesyji.'''
 
 ''Jako iže na {{GRAMMAR:MS.lp|{{SITENAME}}}} wuůnčono zostoua uopcyjo \"raw HTML\", podglůnd zostou schrůńony coby zabezpječyć před atakami JavaScript.''
@@ -751,11 +751,12 @@ Mogesz [[Special:Search/{{PAGENAME}}|wysznupać ta titla]] we treśćach inkszyc
 'editingsection' => 'Sprowjosz $1 (sekcyjo)',
 'editingcomment' => 'Sprowjosz "$1" (nowy kůmyntorz)',
 'editconflict' => 'Kůnflikt sprowjyń: $1',
-'explainconflict' => "Ktoś zdůnžyu wćepać swoja wersyjo artikla ńim žeś naškryflou sprowjyńy.
-We polu edycyji na wjyrchu moš tekst zajty aktůalńy naškryflany w baźe danych.
-Twoje pomjyńańo sům we polu edycyji půnižyj.
-By wćepać swoje pomjyńańo muśiš pomjyńać tekst w polu na wjyrchu.
-'''Tylko''' tekst z pola na wjyrchu bydźe naškryflany we baźe jak wciśńeš \"{{int:savearticle}}\".",
+'explainconflict' => "Ftoś zdůnżůł wćepać swoja wersyjo artikla ńim żeś naszkryflou sprowjyńy.
+We polu edycyji na wjyrchu mosz tekst zajty aktuelńy naszkryflany we baźe danych.
+Twoje pomjyńańo sům we polu edycyji půńiżyj.
+By wćepać swoje pomjyńańo muśisz pomjyńać tekst we polu na wjyrchu.
+'''Ino''' tekst ze pola na wjyrchu bydźe naszkryflany we baźe jak 
+wciśńesz knefel \"{{int:savearticle}}\".",
 'yourtext' => 'Twůj tekst',
 'storedversion' => 'Naszkryflano wersyjo',
 'nonunicodebrowser' => "'''Pozůr! Twoja přeglůndorka ńy umje poprowńy rozpoznować kodowańo UTF-8 (Unicode). Bestož wšyjske znoki, kerych Twoja přeglůndorka ńy umje rozpoznować, zamjeńůno na jejich kody heksadecymalne.'''",
@@ -777,25 +778,25 @@ Uostotńy wpis w rejerze je ńyżej.",
 'cascadeprotectedwarning' => "'''Dej pozůr:''' Ta zajta zostoła zawarto a ino użytkowńicy ze uprawńyńami admińistratora mogům jům sprowjać. Zajta ta je podpjynto pod {{PLURAL:$1|nastympujůnco zajta, kero zostoła zawarto|nastympujůncych zajtach, kere zostouy zawarte}} ze załůnczonům uopcjům dźedźiczyńo:",
 'titleprotectedwarning' => "'''Dej pozůr: Zajta uo tym titlu zostoła zawarto a ino [[Special:ListGroupRights|ńykerzi użytkowńicy]] mogům jům wćepać.'''
 Uostatńy wpis z rejera je ńyżej.",
-'templatesused' => '{{PLURAL:$1|Szablon|Szablůny}} użyte na tyj zajće:',
-'templatesusedpreview' => '{{PLURAL:$1|Szablon|Szablůny}} użyte na tyj zajće:',
-'templatesusedsection' => '{{PLURAL:$1|Szablon|Szablůny}} użyte w tyj tajli:',
+'templatesused' => '{{PLURAL:$1|Muster|Mustry}} użyte na tyj zajće:',
+'templatesusedpreview' => '{{PLURAL:$1|Muster|Mustry}} użyte na tyj zajće:',
+'templatesusedsection' => '{{PLURAL:$1|Szablon|Szablůny}} użyte we tyj tajli:',
 'template-protected' => '(zawrzity uod sprowjańo)',
 'template-semiprotected' => '(tajlowo zawarte)',
-'hiddencategories' => 'Ta zajta je {{PLURAL:$1|w jednyj schrůńunyj katygoryji|we $1 schrůńunych katygoryjach}}:',
+'hiddencategories' => 'Ta zajta je {{PLURAL:$1|we jednyj schrůńunyj katygoryji|we $1 schrůńunych katygoryjach}}:',
 'nocreatetext' => 'Na {{GRAMMAR:MS.lp|{{SITENAME}}}} twořyńy nowych zajtůw uograńičůno.
 Možeš sprowjać te co juž sům, abo [[Special:UserLogin|zalogować śe, abo zauožyć konto]].',
-'nocreate-loggedin' => 'Ńy moš uprowńyń do twořyńo nowych zajtůw.',
+'nocreate-loggedin' => 'Ńy mosz uprowńyń do tworzyńo nowych zajtůw.',
 'sectioneditnotsupported-title' => 'Sprowjańy tajli ńymogebne',
 'sectioneditnotsupported-text' => 'Sprowjańy tajli ńymogebne na tyj zajće.',
 'permissionserrors' => 'Felerne uprawńyńo',
-'permissionserrorstext' => 'Ńy moš uprowńyń do takij akcyje {{PLURAL:$1|skuli tego, co:|bestůž, co:}}',
+'permissionserrorstext' => 'Ńy mosz uprowńyń do takij akcyje {{PLURAL:$1|skuli tego, co:|bestůż, co:}}',
 'permissionserrorstext-withaction' => 'Ńy mogesz $2, ze {{PLURAL:$1|takigo powodu|takich powodůw}}:',
 'recreate-moveddeleted-warn' => "'''ůostrzeżyńy: Wćepujesz samo zajta, kery bůu poprzedńo wyćepany.'''
 
 Zastanůw śe, czy powinno śe go sam wćepywać.
 Rejer wyćepań tyj zajty je podany půńiżej, cobyś mioł wygoda:",
-'moveddeleted-notice' => 'Ta zajta zostoua wyćepńynto. Rejer wyćepań tyj zajty je pokozany půńižyj.',
+'moveddeleted-notice' => 'Ta zajta zostoła wyćepńynto. Rejer wyćepań tyj zajty je pokozany půńiżyj.',
 'log-fulllog' => 'Ukoż rejer',
 'edit-hook-aborted' => 'Sprowjyńy štopńynte skiž hoka.
 Ńy je wjadůme pů jakymu.',
@@ -893,8 +894,8 @@ Inkśi admińistratorzi {{GRAMMAR:D.lp|{{SITENAME}}}} dali bydům mjeć dostymp
 'revdelete-hide-user' => 'Schrůń mjano użytkowńika/adres IP',
 'revdelete-hide-restricted' => 'Schrůń informacyje zarůwno przed admińistratorůma jak i przed inkszymi',
 'revdelete-radio-same' => '(byz pomjyń)',
-'revdelete-radio-set' => 'Ja',
-'revdelete-radio-unset' => 'Ńy',
+'revdelete-radio-set' => 'Zakryty',
+'revdelete-radio-unset' => 'Widoczny',
 'revdelete-suppress' => 'Schrůń informacyje zarůwno před admińistratorůma jak i před inkšymi',
 'revdelete-unsuppress' => 'Usůń uograńičyńo lo wćepanej nazod historyje pomjyńań',
 'revdelete-log' => 'Czymu:',
@@ -1034,7 +1035,6 @@ $1',
 'preferences' => 'Preferyncyje',
 'mypreferences' => 'Preferyncyje',
 'prefs-edits' => 'Liczba sprowjyń:',
-'prefsnologin' => 'Ńy ježeś zalůgowany',
 'changepassword' => 'Zmjana hasua',
 'prefs-skin' => 'Skůrka',
 'skin-preview' => 'podglůnd',
@@ -1097,7 +1097,7 @@ $1',
 'prefs-files' => 'Pliki',
 'youremail' => 'E-brif:',
 'username' => '{{GENDER:$1|Mjano używocza}}:',
-'uid' => 'ID używocza:',
+'uid' => '{{GENDER:$1|ID używocza}}:',
 'prefs-memberingroups' => 'Należy do {{PLURAL:$1|grupy|grup:}}',
 'prefs-registration' => 'Czas twůrzyńa kůnta:',
 'yourrealname' => 'Prawdźiwe mjano',
@@ -2365,7 +2365,7 @@ $1',
 'file-info-size' => '$1 × $2 pikselůw, wjelgość plika: $3, zorta MIME: $4',
 'file-nohires' => 'Wjynksze wymjyry ńy sům dostympne',
 'svg-long-desc' => 'Plik SVG, nůminalńe $1 × $2 pixelůw, rozmior plika: $3',
-'show-big-image' => 'Pełne wymjyry',
+'show-big-image' => 'Pjyrwy wymjor',
 
 # Special:NewFiles
 'newimages' => 'Galerjo nowych uobrozkůw',
@@ -2860,4 +2860,7 @@ Možeš tyž [[Special:EditWatchlist|užyć standardowygo edytora]].',
 'revdelete-unrestricted' => 'wycofej uograničyńo do administratorůw',
 'rightsnone' => 'podstawowo',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'OK',
+
 );
index 290a5f8..c2d9245 100644 (file)
@@ -360,8 +360,6 @@ $1',
 'ok' => 'சரி',
 'retrievedfrom' => '"$1" இருந்து மீள்விக்கப்பட்டது',
 'youhavenewmessages' => 'உங்களுக்குப் $1 உள்ளன ($2).',
-'newmessageslink' => 'புதிய செய்திகள்',
-'newmessagesdifflink' => 'கடைசி மாற்றம்',
 'youhavenewmessagesfromusers' => 'உங்களுக்கு $1 {{PLURAL:$3|வேறொரு பயனரிடம்|$3 பயனர்களிடம்}} இருந்து உள்ளது ($2).',
 'youhavenewmessagesmanyusers' => 'உங்களுக்கு பல பயனர்களிடமிருந்து $1 பதிய செய்திகள்  உள்ளன ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ஒரு புதிய செய்தி|புதிய செய்திகள்}}',
@@ -1154,7 +1152,6 @@ $1",
 'preferences' => 'விருப்பங்கள்',
 'mypreferences' => 'விருப்பத்தேர்வுகள்',
 'prefs-edits' => 'தொகுப்புகளின் எண்ணிக்கை:',
-'prefsnologin' => 'புகுபதிகை செய்யப்படவில்லை',
 'changepassword' => 'கடவுச்சொல்லை மாற்று',
 'prefs-skin' => 'முகப்புறை',
 'skin-preview' => 'முன்தோற்றம்',
@@ -1437,6 +1434,7 @@ $1",
 'recentchanges-label-minor' => 'இது ஒரு சிறு தொகுப்பு',
 'recentchanges-label-bot' => 'இந்த தொகுப்பானது ஒரு தானியங்கியால் செய்யப்பட்டதாகும்',
 'recentchanges-label-unpatrolled' => 'இந்த  தொகுப்பு  இன்னும் ரோந்திடப்படவில்லை',
+'recentchanges-legend-newpage' => '$1 - புதிய பக்கம்',
 'rcnote' => "கீழே காணப்படுவது $4 ஆம் தேதி $5 மணிக்கு் உள்ளபடி கடைசி {{PLURAL:$2|24 மணிகளில்|'''$2''' நாட்களில்}} செய்யப்பட்ட {{PLURAL:$1|'''ஒரு''' மாற்றம்|'''$1''' கடைசி மாற்றங்கள்}} ஆகும்.",
 'rcnotefrom' => "கீழே காணப்படுவது '''$2''' இலிருந்து செய்யப்பட்ட மாற்றங்களாகும் ('''$1''' வரைக் காட்டப்பட்டுள்ளது).",
 'rclistfrom' => '$1 தொடக்கம் செய்யப்பட்ட புதிய மாற்றங்களைக் காட்டவும்',
@@ -3694,4 +3692,12 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|நூற்றாண்டு|நூற்றாண்டுகள்}}',
 'duration-millennia' => '$1 {{PLURAL:$1|ஆயிரம் ஆண்டு|ஆயிரம் ஆண்டுகள்}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'வார்ப்புருக்களை விரிவாக்கு',
+'expand_templates_input' => 'உள்ளீட்டு உரை:',
+'expand_templates_output' => 'முடிவுகள்',
+'expand_templates_ok' => 'ஆம்',
+'expand_templates_remove_comments' => 'கருத்துரைகளை நீக்கு',
+'expand_templates_preview' => 'முன்தோற்றம்',
+
 );
index f36a2f5..5232b6e 100644 (file)
@@ -261,8 +261,6 @@ $messages = array(
 'ok' => 'ಸರಿ',
 'retrievedfrom' => '"$1" ರ್ದ್ ದೆತ್ತಿನಂಚಿನ',
 'youhavenewmessages' => 'ಇರೆಗ್ $1 ಉಂಡು ($2).',
-'newmessageslink' => 'ಪೊಸ ಸಂದೇಶಲು',
-'newmessagesdifflink' => 'ಕಡೆತ ಬದಲಾವಣೆ',
 'youhavenewmessagesmulti' => '$1 ಡ್ ಇರೆಗ್ ಪೊಸ ಸಂದೇಶೊಲು ಉಂಡು',
 'editsection' => 'ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ',
 'editold' => 'ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ',
index dc5f276..d6add03 100644 (file)
@@ -66,7 +66,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'పురాతనపేజీలు' ),
        'Blankpage'                 => array( 'ఖాళీపేజి' ),
        'Block'                     => array( 'అడ్డగించు', 'ఐపినిఅడ్డగించు', 'వాడుకరినిఅడ్డగించు' ),
-       'Blockme'                   => array( 'నన్నుఅడ్డగించు' ),
        'Booksources'               => array( 'పుస్తకమూలాలు' ),
        'BrokenRedirects'           => array( 'తెగిపోయినదారిమార్పులు' ),
        'Categories'                => array( 'వర్గాలు' ),
@@ -74,7 +73,6 @@ $specialPageAliases = array(
        'Confirmemail'              => array( 'ఈమెయిలుధ్రువపరచు' ),
        'CreateAccount'             => array( 'ఖాతాసృష్టించు' ),
        'Deadendpages'              => array( 'అగాధపేజీలు' ),
-       'Disambiguations'           => array( 'అయోమయనివృత్తి' ),
        'DoubleRedirects'           => array( 'రెండుసార్లుదారిమార్పు' ),
        'Emailuser'                 => array( 'వాడుకరికిఈమెయిలుచెయ్యి' ),
        'Export'                    => array( 'ఎగుమతి' ),
@@ -166,7 +164,7 @@ $messages = array(
 'tog-minordefault' => 'ప్రత్యేకంగా తెలుపనంతవరకూ నా మార్పులను చిన్న మార్పులుగా గుర్తించు',
 'tog-previewontop' => 'వ్యాసం మార్పుల మునుచూపు సవరించు పెట్టె పైన చూపు',
 'tog-previewonfirst' => 'మొదటి  దిద్దుబాటు చేసినపుడు వ్యాసపు మునుచూపు చూపించు',
-'tog-nocache' => 'విహారిణిలో పుటల  స్థానికనకలును(కాషింగు) అచేతనం',
+'tog-nocache' => 'విహారిణిలో పుటల  స్థానికనకలును(కాషింగు) అచేతనం చేయి',
 'tog-enotifwatchlistpages' => 'నా వీక్షణాజాబితా లోని పేజీ లేదా దస్త్రం మారినపుడు నాకు ఈ-మెయిలు పంపు',
 'tog-enotifusertalkpages' => 'నా చర్చా పేజీలో మార్పులు జరిగినపుడు నాకు ఈ-మెయిలు పంపు',
 'tog-enotifminoredits' => 'పేజీలు మరియు దస్త్రాలకు జరిగే చిన్న మార్పులకు కూడా నాకు ఈ-మెయిలును పంపు',
@@ -414,8 +412,6 @@ $1',
 'ok' => 'సరే',
 'retrievedfrom' => '"$1" నుండి వెలికితీశారు',
 'youhavenewmessages' => 'మీకు $1 ఉన్నాయి ($2).',
-'newmessageslink' => 'కొత్త సందేశాలు',
-'newmessagesdifflink' => 'చివరి మార్పు',
 'youhavenewmessagesfromusers' => 'మీకు {{PLURAL:$3|మరో వాడుకరి|$3 వాడుకరుల}} నుండి $1 ($2).',
 'youhavenewmessagesmanyusers' => 'మీకు చాలా వాడుకరుల నుండి $1 ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ఒక కొత్త సందేశం వచ్చింది|కొత్త సందేశాలు ఉన్నాయి}}',
@@ -552,7 +548,7 @@ $2',
 'yourname' => 'వాడుకరి పేరు:',
 'userlogin-yourname' => 'వాడుకరి పేరు',
 'userlogin-yourname-ph' => 'మీ వాడుకరి పేరును ఇవ్వండి',
-'createacct-another-username-ph' => 'à°®à±\80 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°ªà±\87à°°à±\81à°¨à±\81 à°\87à°µà±\8dà°µండి',
+'createacct-another-username-ph' => 'à°®à±\80 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°ªà±\87à°°à±\81à°¨à±\81 à°ªà±\8dà°°à°µà±\87శపà±\86à°\9fà±\8dà°\9fండి',
 'yourpassword' => 'సంకేతపదం:',
 'userlogin-yourpassword' => 'సంకేతపదం',
 'userlogin-yourpassword-ph' => 'మీ సంకేతపదాన్ని ఇవ్వండి',
@@ -1032,7 +1028,7 @@ $3 చెప్పిన కారణం: ''$2''",
 * అనుచితమైన వ్యక్తిగత సమాచారం
 * "ఇంటి చిరునామాలు, టెలిఫోను నంబర్లు, సోషల్ సెక్యూరిటీ నంబర్లు, వగైరాలు"',
 'revdelete-legend' => 'సందర్శక నిబంధనలు అమర్చు',
-'revdelete-hide-text' => 'à°\95à±\82à°°à±\8dà°ªà±\81 పాఠ్యం',
+'revdelete-hide-text' => 'à°ªà±\81à°¨à°\83పరిశà±\80లన పాఠ్యం',
 'revdelete-hide-image' => 'ఫైలులోని విషయాన్ని దాచు',
 'revdelete-hide-name' => 'చర్యను, లక్ష్యాన్నీ దాచు',
 'revdelete-hide-comment' => 'దిద్దుబాటు వ్యాఖ్యను దాచు',
@@ -1187,7 +1183,6 @@ $1",
 'preferences' => 'అభిరుచులు',
 'mypreferences' => 'అభిరుచులు',
 'prefs-edits' => 'దిద్దుబాట్ల సంఖ్య:',
-'prefsnologin' => 'లాగిన్‌ అయిలేరు',
 'changepassword' => 'సంకేతపదాన్ని మార్చండి',
 'prefs-skin' => 'అలంకారం',
 'skin-preview' => 'మునుజూపు/సరిచూడు',
@@ -1459,6 +1454,7 @@ $1",
 'recentchanges-label-minor' => 'ఇది ఒక చిన్న మార్పు',
 'recentchanges-label-bot' => 'ఈ మార్పును ఒక బాటు చేసింది',
 'recentchanges-label-unpatrolled' => 'ఈ దిద్దుబాటు మీద నిఘా లేదు',
+'recentchanges-legend-newpage' => '$1 - కొత్త పేజీ',
 'rcnote' => "$4 నాడు $5 సమయానికి, గత {{PLURAL:$2|ఒక్క రోజులో|'''$2''' రోజులలో}} చేసిన చివరి {{PLURAL:$1|ఒక్క మార్పు కింద ఉంది|'''$1''' మార్పులు కింద ఉన్నాయి}}.",
 'rcnotefrom' => '<b>$2</b> నుండి జరిగిన మార్పులు (<b>$1</b> వరకు చూపబడ్డాయి).',
 'rclistfrom' => '$1 నుండి జరిగిన మార్పులను చూపించు',
@@ -3599,4 +3595,16 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|శతాబ్దం|శతాబ్దాలు}}',
 'duration-millennia' => '$1 {{PLURAL:$1|సహస్రాబ్దం|సహస్రాబ్దాలు}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'మూసలను విస్తరించు',
+'expand_templates_intro' => 'ఈ ప్రత్యేక పేజీ మీరిచ్చిన మూసలను పూర్తిగా విస్తరించి, చూపిస్తుంది. ఇది <nowiki>{{</nowiki>#language:...}} వంటి పార్సరు ఫంక్షన్లను, <nowiki>{{</nowiki>CURRENTDAY}} వంటి చరరాశులను(వేరియబుల్) కూడా విస్తరిస్తుంది &mdash; నిజానికి జమిలి(మీసాల) బ్రాకెట్లలో ఉన్న ప్రతీదాన్నీ ఇది విస్తరిస్తుంది. మీడియావికీ నుండి సంబంధిత పార్సరు స్టేజిని పిలిచి ఇది ఈ పనిని సాధిస్తుంది.',
+'expand_templates_title' => '{{FULLPAGENAME}} మొదలగు వాటి కొరకు సందర్భ శీర్షిక:',
+'expand_templates_input' => 'విస్తరించవలసిన పాఠ్యం:',
+'expand_templates_output' => 'ఫలితం',
+'expand_templates_xml_output' => 'XML ఔట్&zwnj;పుట్',
+'expand_templates_ok' => 'సరే',
+'expand_templates_remove_comments' => 'వ్యాఖ్యలను తొలగించు',
+'expand_templates_generate_xml' => 'XML పార్స్ ట్రీని చూపించు',
+'expand_templates_preview' => 'మునుజూపు',
+
 );
index f1e717e..2df3f10 100644 (file)
@@ -256,8 +256,6 @@ $messages = array(
 'ok' => 'OK',
 'retrievedfrom' => 'Husi "$1"',
 'youhavenewmessages' => 'Ó iha $1 ($2).',
-'newmessageslink' => 'mensajen foun',
-'newmessagesdifflink' => 'diferensa foun liu hotu',
 'youhavenewmessagesmulti' => 'Ó iha mensajen foun sira iha $1',
 'editsection' => 'edita',
 'editold' => 'edita',
@@ -992,4 +990,7 @@ Ligasaun seluk iha liña - ne'e pájina sira iha ne'ebé bele inklui imajen aat.
 # Search suggestions
 'searchsuggest-search' => 'Buka',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'OK',
+
 );
index c4610a0..ee1eefa 100644 (file)
@@ -322,8 +322,6 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Баргирифта аз "$1"',
 'youhavenewmessages' => 'Шумо $1 ($2) доред.',
-'newmessageslink' => 'пайёмҳои нав',
-'newmessagesdifflink' => 'тағйироти охирин',
 'youhavenewmessagesmulti' => 'Шумо номаҳои нав дар $1 доред.',
 'editsection' => 'вироиш',
 'editold' => 'вироиш',
@@ -851,7 +849,6 @@ $1',
 'preferences' => 'Тарҷиҳот',
 'mypreferences' => 'Танзимот',
 'prefs-edits' => 'Шумораи вироишҳо:',
-'prefsnologin' => 'Ба систем ворид нашудаед',
 'changepassword' => 'Иваз намудани калимаи убур',
 'prefs-skin' => 'Пӯст',
 'skin-preview' => 'Пешнамоиш',
@@ -2519,4 +2516,19 @@ $5
 'revdelete-unrestricted' => 'маҳдудиятҳо аз мудирон бардошта шуданд',
 'rightsnone' => '(ҳеҷ)',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Бастдодани шаблонҳо',
+'expand_templates_intro' => 'Ин саҳифаи вижа матнеро дарёфт карда ва тамоми шаблонҳои ба кор рафта дар онро ба таври бозгаште баст медиҳад. Ҳамчунин тобеҳои таҷзеҳ
+<nowiki>{{</nowiki>#language:...}}, ва мутағйирҳое чун
+<nowiki>{{</nowiki>CURRENTDAY}}&mdash;ро ҳам баст медиҳад – дар воқеъ тақрибан ҳар чиро ки дохили ду акулот бошад.
+Ин кор бо садо задани марҳилаи таҷзеҳи марбут дар худи МедиаВики сурат мегирад.',
+'expand_templates_title' => 'Унвони мавзӯъ, барои {{FULLPAGENAME}} ва ғайра.:',
+'expand_templates_input' => 'Матни вурудӣ:',
+'expand_templates_output' => 'Натиҷа',
+'expand_templates_xml_output' => 'Хуруҷӣ XML',
+'expand_templates_ok' => 'Таъйид',
+'expand_templates_remove_comments' => 'Ҳазфи тавзеҳот',
+'expand_templates_generate_xml' => 'Намоиши дарахти таҷзеҳи XML',
+'expand_templates_preview' => 'Пешнамоиш',
+
 );
index e7f97ae..389bf17 100644 (file)
@@ -263,8 +263,6 @@ $1",
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Bargirifta az "$1"',
 'youhavenewmessages' => 'Şumo $1 ($2) dored.',
-'newmessageslink' => 'pajjomhoi nav',
-'newmessagesdifflink' => 'taƣjiroti oxirin',
 'youhavenewmessagesmulti' => 'Şumo nomahoi nav dar $1 dored.',
 'editsection' => 'viroiş',
 'editold' => 'viroiş',
@@ -725,7 +723,6 @@ Itminon hosil kuned, ki in taƣjir davomnokiji ta'rixiji sahifaro nigoh dorad.",
 'preferences' => 'Tarçihot',
 'mypreferences' => 'Tarçihoti man',
 'prefs-edits' => 'Şumorai viroişho:',
-'prefsnologin' => 'Ba sistem vorid naşudaed',
 'changepassword' => 'Ivaz namudani kalimai ubur',
 'prefs-skin' => 'Pūst',
 'skin-preview' => 'Peşnamoiş',
@@ -2297,4 +2294,19 @@ Tavaççūh kuned, ki şumo metavoned az [[Special:EditWatchlist|viroişgari sta
 'revdelete-unrestricted' => 'mahdudijatho az mudiron bardoşta şudand',
 'rightsnone' => '(heç)',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Bastdodani şablonho',
+'expand_templates_intro' => "In sahifai viƶa matnero darjoft karda va tamomi şablonhoi ba kor rafta dar onro ba tavri bozgaşte bast medihad. Hamcunin tobehoi taçzeh
+<nowiki>{{</nowiki>#language:...}}, va mutaƣjirhoe cun
+<nowiki>{{</nowiki>CURRENTDAY}}&mdash;ro ham bast medihad – dar voqe' taqriban har ciro ki doxili du akulot boşad.
+In kor bo sado zadani marhilai taçzehi marbut dar xudi MediaViki surat megirad.",
+'expand_templates_title' => "Unvoni mavzū', baroi {{FULLPAGENAME}} va ƣajra.:",
+'expand_templates_input' => 'Matni vurudī:',
+'expand_templates_output' => 'Natiça',
+'expand_templates_xml_output' => 'Xuruçī XML',
+'expand_templates_ok' => "Ta'jid",
+'expand_templates_remove_comments' => 'Hazfi tavzehot',
+'expand_templates_generate_xml' => 'Namoişi daraxti taçzehi XML',
+'expand_templates_preview' => 'Peşnamoiş',
+
 );
index 87fd1ff..4849162 100644 (file)
@@ -60,7 +60,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'ชื่อเรื่องไม่เหมาะสม' ),
        'Blankpage'                 => array( 'หน้าว่าง' ),
        'Block'                     => array( 'บล็อกไอพี' ),
-       'Blockme'                   => array( 'บล็อกฉัน' ),
        'Booksources'               => array( 'แหล่งหนังสือ' ),
        'BrokenRedirects'           => array( 'เปลี่ยนทางเสีย' ),
        'Categories'                => array( 'หมวดหมู่' ),
@@ -72,7 +71,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'สร้างบัญชีผู้ใช้ใหม่' ),
        'Deadendpages'              => array( 'หน้าสุดทาง' ),
        'DeletedContributions'      => array( 'การแก้ไขที่ถูกลบ' ),
-       'Disambiguations'           => array( 'แก้ความกำกวม' ),
        'DoubleRedirects'           => array( 'เปลี่ยนทางซ้ำซ้อน' ),
        'EditWatchlist'             => array( 'แก้ไขรายการเฝ้าดู' ),
        'Emailuser'                 => array( 'อีเมลผู้ใช้' ),
@@ -471,8 +469,6 @@ $1',
 'ok' => 'ตกลง',
 'retrievedfrom' => 'รับข้อมูลจาก "$1"',
 'youhavenewmessages' => 'คุณมี$1 ($2)',
-'newmessageslink' => 'ข้อความใหม่',
-'newmessagesdifflink' => 'การเปลี่ยนแปลงล่าสุด',
 'youhavenewmessagesfromusers' => 'คุณมี $1จาก{{PLURAL:$3|ผู้ใช้คนอื่น|ผู้ใช้ $3 คน}} ($2)',
 'youhavenewmessagesmanyusers' => 'คุณมี $1จากผู้ใช้หลายคน ($2)',
 'newmessageslinkplural' => '$1 ข้อความใหม่',
@@ -1292,7 +1288,6 @@ $1",
 'preferences' => 'ตั้งค่าส่วนตัว',
 'mypreferences' => 'การตั้งค่า',
 'prefs-edits' => 'จำนวนการแก้ไข:',
-'prefsnologin' => 'ไม่ได้ล็อกอิน',
 'changepassword' => 'เปลี่ยนรหัสผ่าน',
 'prefs-skin' => 'หน้าตา',
 'skin-preview' => 'แสดงตัวอย่าง',
@@ -1589,6 +1584,7 @@ $1",
 'recentchanges-label-minor' => 'เป็นการแก้ไขเล็กน้อย',
 'recentchanges-label-bot' => 'การแก้ไขนี้กระทำโดยบอต',
 'recentchanges-label-unpatrolled' => 'การแก้ไขนี้ยังไม่ได้ตรวจสอบ',
+'recentchanges-legend-newpage' => '$1 - หน้าใหม่',
 'rcnote' => "รายการด้านล่างคือการแก้ไข {{PLURAL:$1|'''1''' รายการ|ล่าสุด '''$1''' รายการ}} ในช่วง '''$2''' วันที่ผ่านมา จนถึง $5, $4",
 'rcnotefrom' => "ด้านล่างเป็นการเปลี่ยนแปลงตั้งแต่ '''$2''' (มากสุด '''$1''' รายการ)",
 'rclistfrom' => 'แสดงการเปลี่ยนแปลงใหม่เริ่มตั้งแต่ $1',
@@ -3839,4 +3835,8 @@ $5
 'duration-centuries' => '$1 ศตวรรษ',
 'duration-millennia' => '$1 สหัสวรรษ',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'ตกลง',
+'expand_templates_preview' => 'ตัวอย่างผลแสดง',
+
 );
index 03eac79..a7a22fd 100644 (file)
@@ -296,8 +296,6 @@ Bu sahypany ulanmak üçin MediaWikiniň $1 wersiýasy talap edilýär. [[Specia
 'ok' => 'OK',
 'retrievedfrom' => '"$1" adresinden alyndy.',
 'youhavenewmessages' => 'Size $1 bar. ($2)',
-'newmessageslink' => 'täze habar',
-'newmessagesdifflink' => 'soňky üýtgeşme',
 'youhavenewmessagesmulti' => 'Size $1-de täze habar bar.',
 'editsection' => 'redaktirle',
 'editold' => 'redaktirle',
@@ -1000,7 +998,6 @@ Emma olaryň {{SITENAME}} indeksleriniň möwriti geçen bolmagy mümkindir.',
 'preferences' => 'Ileri tutmalar',
 'mypreferences' => 'Ileri tutmalar',
 'prefs-edits' => 'Özgerdiş sany:',
-'prefsnologin' => 'Sessiýa açmansyňyz',
 'changepassword' => 'Paroly üýtget',
 'prefs-skin' => 'Bezeg',
 'skin-preview' => 'Deslapky syn',
@@ -1260,6 +1257,7 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.',
 'recentchanges-label-minor' => 'Bu bir ujypsyzja özgerdiş',
 'recentchanges-label-bot' => 'Bu özgerdiş bir bot tarapyndan amala aşyryldy',
 'recentchanges-label-unpatrolled' => 'Bu özgerdişe heniz patrullyk edilmändir',
+'recentchanges-legend-newpage' => '$1 - täze sahypa',
 'rcnote' => "Aşakda $5, $4 senesinden başlap, soňky {{PLURAL:$2|1 günde|'''$2''' günde}} edilen {{PLURAL:$1|'''1''' üýtgeşme|'''$1''' üýtgeşme}} görkezilýär.",
 'rcnotefrom' => '<b>$2</b> senesinden bäri edilen özgerdişler aşakda görkezilýär (<b>$1</b> sanysyna çenli).',
 'rclistfrom' => '$1 senesinden bäri edilen özgerdişleri görkez',
@@ -3107,4 +3105,21 @@ Bu programmanyň ýany bilen siz [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General P
 'searchsuggest-search' => 'Gözleg',
 'searchsuggest-containing' => 'öz içine alýar...',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Şablonlary giňelt',
+'expand_templates_intro' => 'Bu ýörite sahypa birazajyk tekst alýar we onuň içindäki ähli şablonlary rekursiw giňeldýär.
+Şeýlede şu hili parser funksiýalaryny hem giňeldýär
+<nowiki>{{</nowiki>#language:…}} we şuňa meňzeş üýtgeýänleri
+<nowiki>{{</nowiki>CURRENTDAY}}&mdash;aslynda jübüt ýaýly ähli zatlary diýen ýaly.
+Ol muny degişli parser sepgidini MediaWikiniň özünden çagyryp edýär.',
+'expand_templates_title' => 'Kontekst ady, {{FULLPAGENAME}} we ş.m. üçin:',
+'expand_templates_input' => 'Giriş teksti:',
+'expand_templates_output' => 'Netije',
+'expand_templates_xml_output' => 'XML önümi',
+'expand_templates_ok' => 'Bolýar',
+'expand_templates_remove_comments' => 'Teswirleri aýyr',
+'expand_templates_remove_nowiki' => 'Netijelerde <nowiki> teglerini bökdäň',
+'expand_templates_generate_xml' => 'XML ýygnama agajyny görkez',
+'expand_templates_preview' => 'Deslapky syn',
+
 );
index 4d45f93..0ff4867 100644 (file)
@@ -52,7 +52,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Masamang_pamagat' ),
        'Blankpage'                 => array( 'Tanggalin_ang_nilalaman_ng_pahina' ),
        'Block'                     => array( 'Hadlangan', 'Hadlangan_ang_IP', 'Hadlangan_ang_tagagamit' ),
-       'Blockme'                   => array( 'Hadlangang_ako' ),
        'Booksources'               => array( 'Mga_pinagmulang_aklat' ),
        'BrokenRedirects'           => array( 'Naputol_na_mga_panturo_papunta_sa_ibang_pahina', 'NaputulangPanturo' ),
        'Categories'                => array( 'Mga_kategorya' ),
@@ -64,10 +63,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Likhain_ang_kuwenta', 'LikhaKuwenta' ),
        'Deadendpages'              => array( 'Mga_pahinang_sukol', 'Mga_pahinang_walang_lagusan' ),
        'DeletedContributions'      => array( 'Naburang_mga_ambag' ),
-       'Disambiguations'           => array( 'Mga_paglilinaw', 'Paglilinaw' ),
        'DoubleRedirects'           => array( 'Nagkadalawang_mga_panturo_papunta_sa_ibang_pahina', 'DoblengPanturo' ),
        'EditWatchlist'             => array( 'Baguhin_ang_Bantayan' ),
        'Emailuser'                 => array( 'Tagagamit_ng_e-liham' ),
+       'ExpandTemplates'           => array( 'Palawakin_ang_mga_suleras' ),
        'Export'                    => array( 'Pagluluwas' ),
        'Fewestrevisions'           => array( 'Pinakakaunting_mga_pagbabago' ),
        'FileDuplicateSearch'       => array( 'Paghahanap_ng_kamukhang_talaksan' ),
@@ -110,6 +109,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Mga_pahinang_nakasanggalang' ),
        'Protectedtitles'           => array( 'Mga_pamagat_na_nakasanggalang' ),
        'Randompage'                => array( 'Alin_man', 'Alin_mang_pahina' ),
+       'RandomInCategory'          => array( 'Alinmang_kaurian' ),
        'Randomredirect'            => array( 'Pagtuturo_papunta_sa_alin_mang_pahina' ),
        'Recentchanges'             => array( 'Mga_huling_binago', 'HulingBinago' ),
        'Recentchangeslinked'       => array( 'Nakakawing_ng_kamakailang_pagbabago', 'Kaugnay_na_mga_pagbabago' ),
@@ -422,8 +422,6 @@ Tingnan ang [[Special:Version|pahina ng bersiyon]].',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'Ikinuha mula sa "$1"',
 'youhavenewmessages' => 'Mayroon kang $1 ($2).',
-'newmessageslink' => 'mga bagong mensahe',
-'newmessagesdifflink' => 'huling pagbabago',
 'youhavenewmessagesfromusers' => 'Mayroon kang $1 magmula sa {{PLURAL:$3|ibang tagagamit|$3 mga tagagamit}} ($2).',
 'youhavenewmessagesmanyusers' => 'Mayroon kang $1 magmula sa maraming mga tagagamit ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|isang bagong mensahe|bagong mga mensahe}}',
@@ -1237,7 +1235,6 @@ Subuking lagyan ng unlapi/paunang ''all:'' upang hanapin ang lahat ng mga nialal
 'preferences' => 'Mga kagustuhan',
 'mypreferences' => 'Mga nais',
 'prefs-edits' => 'Bilang ng mga pagbabago:',
-'prefsnologin' => 'Hindi nakalagda/nakatala',
 'changepassword' => 'Baguhin ang hudyat',
 'prefs-skin' => 'Pabalat',
 'skin-preview' => 'Unang tingin',
@@ -1517,6 +1514,7 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'recentchanges-label-minor' => 'Isa itong munting pagbabago',
 'recentchanges-label-bot' => 'Gawa ng isang bot ang pagbabagong ito',
 'recentchanges-label-unpatrolled' => 'Hindi pa napapatrulyahan ang pagbabagong ito',
+'recentchanges-legend-newpage' => '$1 - bagong pahina',
 'rcnote' => "Nasa ibaba {{PLURAL:$1|ang '''1''' pagbabago|ang pinakahuling '''$1''' mga pagbabago}} sa huling {{PLURAL:$2|araw|'''$2''' mga araw}}, mula noong $5, $4.",
 'rcnotefrom' => "Nasa ibaba ang mga pagbabago mula pa noong '''$2''' (ipinapakita ang magpahanggang sa '''$1''').",
 'rclistfrom' => 'Ipakita ang bagong mga pagbabago simula sa $1',
@@ -4075,4 +4073,21 @@ O kaya, maaari mo ring gamitin ang pinadaling pormularyo sa ibaba.  Madadagdagan
 'duration-centuries' => '$1 {{PLURAL:$1|daantaon|mga daantaon}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenyo|mga milenyo}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Palaparin (palawakin) ang mga suleras',
+'expand_templates_intro' => 'Ang natatanging pahinang ito ay kumukuha ng ilang mga teksto at nagbubuka ng lahat ng mga suleras sa loob nito sa kaparaanang tinatawag ang sarili o rekursibo.
+Nagbubuka rin ito ng mga tungkuling pambanghay na katulad ng
+<nowiki>{{</nowiki>#kung:…}}, at pabagubagong mga halagang katulad ng
+<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Sa katunayan, pinabubuka nito ang halos lahat ng mga bagay-bagay na may dalawang mga bantas na pansalalay o brakete.',
+'expand_templates_title' => 'Pamagat na pampaunawa (ng konteksto), para sa {{FULLPAGENAME}} atbp.:',
+'expand_templates_input' => 'Tekstong ipinasok:',
+'expand_templates_output' => 'Kinalabasan',
+'expand_templates_xml_output' => 'kinalabasang XML',
+'expand_templates_ok' => "Sige/Ayos 'yan",
+'expand_templates_remove_comments' => 'Tanggalin ang mga puna (kumento)',
+'expand_templates_remove_nowiki' => 'Pigilin ang mga tatak na <nowiki> sa loob ng resulta',
+'expand_templates_generate_xml' => 'Ipakita ang puno na pambanghay ng XML',
+'expand_templates_preview' => 'Paunang tingin',
+
 );
index 37cb810..2fabc68 100644 (file)
@@ -364,8 +364,6 @@ $messages = array(
 'ok' => 'OK',
 'retrievedfrom' => 'Сәвон "$1"',
 'youhavenewmessages' => 'Шымә сәјоне $1 ($2).',
-'newmessageslink' => 'нујә хәбон',
-'newmessagesdifflink' => 'охонә дәгиши',
 'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|охонә дәгиши|охонә дәгишон}}',
 'editsection' => 'Sərost kardey',
 'editold' => 'Сәрост кардеј',
@@ -616,7 +614,6 @@ $messages = array(
 # Preferences page
 'preferences' => 'Кукон',
 'mypreferences' => 'Кукон',
-'prefsnologin' => 'Ыштәни едаштәнијоне',
 'changepassword' => 'Пароли дәгиш кардеј',
 'skin-preview' => 'Сыфтәнә нишо дој',
 'prefs-user-pages' => 'Иштирокәкә сәһифон',
index 22a76af..e8c207a 100644 (file)
@@ -191,7 +191,6 @@ $messages = array(
 
 'ok' => 'Fai ā',
 'youhavenewmessages' => 'ʻOku ʻi ai haʻo $1 ($2).',
-'newmessageslink' => 'ngaahi tala foʻou',
 'youhavenewmessagesmulti' => 'ʻOku ʻi ai haʻo tala foʻou ʻi $1',
 'editsection' => 'fatuʻi vahe',
 'editold' => 'fatu',
@@ -443,7 +442,6 @@ Ko e ʻuhinga loka ko e $1 ia.",
 # Preferences page
 'preferences' => 'Faʻiteliha',
 'mypreferences' => 'faʻiteliha ʻaʻaku',
-'prefsnologin' => 'ʻOku ʻikai kau ki ai',
 'changepassword' => 'Liliu hoʻo leatapu',
 'prefs-skin' => 'Kili',
 'skin-preview' => 'Vakai pē',
@@ -1220,4 +1218,7 @@ Kātaki fakapapauʻi te ke fie toe fatu ʻa e kupu ni.",
 # New logging system
 'rightsnone' => '(hala)',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Fakalahiange ʻa e ngaahi sīpinga',
+
 );
index 68aa71a..3ec1143 100644 (file)
@@ -96,7 +96,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'KötüBaşlık', 'BozukBaşlık' ),
        'Blankpage'                 => array( 'BoşSayfa' ),
        'Block'                     => array( 'Engelle', 'IPEngelle' ),
-       'Blockme'                   => array( 'BeniEngelle' ),
        'Booksources'               => array( 'KitapKaynakları' ),
        'BrokenRedirects'           => array( 'BozukYönlendirmeler' ),
        'Categories'                => array( 'Kategoriler', 'Ulamlar' ),
@@ -108,10 +107,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'HesapOluştur' ),
        'Deadendpages'              => array( 'BağlantısızSayfalar' ),
        'DeletedContributions'      => array( 'SilinenKatkılar' ),
-       'Disambiguations'           => array( 'AnlamAyrımı', 'AnlamAyrım' ),
        'DoubleRedirects'           => array( 'ÇiftYönlendirmeler' ),
        'EditWatchlist'             => array( 'İzlemeListesiDüzenle' ),
        'Emailuser'                 => array( 'E-postaGönder' ),
+       'ExpandTemplates'           => array( 'ŞablonlarıGenişlet' ),
        'Export'                    => array( 'DışaAktar', 'DışarıAktar' ),
        'Fewestrevisions'           => array( 'EnAzRevizyon' ),
        'FileDuplicateSearch'       => array( 'KopyaDosyaArama', 'ÇiftDosyaArama' ),
@@ -155,6 +154,7 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'KorunanSayfalar' ),
        'Protectedtitles'           => array( 'KorunanBaşlıklar' ),
        'Randompage'                => array( 'Rastgele', 'RastgeleSayfa' ),
+       'RandomInCategory'          => array( 'RastgeleKategori', 'RastgeleUlam' ),
        'Randomredirect'            => array( 'RastgeleYönlendirme' ),
        'Recentchanges'             => array( 'SonDeğişiklikler' ),
        'Recentchangeslinked'       => array( 'İlgiliDeğişiklikler' ),
@@ -362,7 +362,7 @@ $messages = array(
 'tog-extendwatchlist' => 'İzleme listesini sadece en son değil, tüm değişiklikleri göstermek için genişlet',
 'tog-usenewrc' => 'Son değişiklikler sayfasındaki ve izleme listesindeki değişiklikleri gruplandır',
 'tog-numberheadings' => 'Başlıkları otomatik numaralandır',
-'tog-showtoolbar' => 'Düzenleme yaparken araç çubuğunu göster',
+'tog-showtoolbar' => 'Düzenleme araç çubuğunu göster',
 'tog-editondblclick' => 'Çift tıklayarak sayfaları düzenle',
 'tog-editsection' => 'Bölümleri [{{int:Editsection}}] bağlantıları ile düzenlemeyi etkinleştir',
 'tog-editsectiononrightclick' => 'Bölüm başlığına sağ tıklayarak bölümleri düzenleyebilme olanağı ver',
@@ -628,8 +628,6 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => '"$1" adresinden alındı.',
 'youhavenewmessages' => 'Yeni $1 var ($2).',
-'newmessageslink' => 'mesajınız',
-'newmessagesdifflink' => 'son değişiklik',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|Başka bir kullanıcıdan|$3 kullanıcıdan}} $1 var ($2).',
 'youhavenewmessagesmanyusers' => 'Birçok kullanıcıdan $1 var ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|yeni mesajınız|yeni mesajlarınız}}',
@@ -761,7 +759,8 @@ Kilitleyen hizmetlinin bu konudaki nedeni: "$3".',
 'invalidtitle-knownnamespace' => '"$2" alan adı için "$3" metni geçersiz bir başlık',
 'invalidtitle-unknownnamespace' => 'Bilinmeyen $1 ad alanı sayısı ve geçersiz "$2" başlık',
 'exception-nologin' => 'Giriş yapılmamış',
-'exception-nologin-text' => 'Bu sayfa ya da eylem için bu vikide oturum açmış olmanız gerekir.',
+'exception-nologin-text' => 'Bu sayfaya ya da eyleme erişmek için lütfen [[Special:Userlogin|oturum açın]].',
+'exception-nologin-text-manual' => 'Bu sayfaya ya da eyleme erişebilmek için lütfen $1ın.',
 
 # Virus scanner
 'virus-badscanner' => "Yanlış ayarlama: bilinmeyen virüs tarayıcı: ''$1''",
@@ -811,6 +810,9 @@ Tarayıcınızın önbelleğini temizleyinceye kadar bazı sayfalarda, oturumunu
 'userlogin-resetpassword-link' => 'Parolanızı mı unuttunuz?',
 'helplogin-url' => 'Help:Oturum açma',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Oturum açma konusunda yardım alın]]',
+'userlogin-loggedin' => 'Zaten {{GENDER:$1|$1}} olarak oturum açtınız.
+Başka bir kullanıcı olarak oturum açmak için aşağıdaki formu kullanın.',
+'userlogin-createanother' => 'Başka bir hesap oluşturun',
 'createacct-join' => 'Aşağıya bilgilerinizi girin.',
 'createacct-another-join' => 'Aşağıya yeni hesabınızın bilgilerini girin.',
 'createacct-emailrequired' => 'E-posta adresi',
@@ -866,13 +868,13 @@ Parola değişimini siz istemediyseniz veya parolanızı hatırladıysanız ve a
 'noemailcreate' => 'Geçerli bir e-posta adresi sağlamalısınız',
 'passwordsent' => '"$1" adına kayıtlı e-posta adresine yeni bir parola gönderildi. Oturumu, lütfen, iletiyi aldıktan sonra açın.',
 'blocked-mailpassword' => 'Siteye erişiminiz engellenmiş olduğundan, yeni şifre gönderilme işlemi yapılamamaktadır.',
-'eauthentsent' => 'Kaydedilen adrese onay kodu içeren bir e-posta gönderildi.
-E-postadaki yönerge uygulanıp adresin size ait olduğu onaylanmadıkça başka e-posta gönderilmeyecek.',
+'eauthentsent' => 'Belirtilen e-posta adresine onay kodu içeren bir e-posta gönderildi.
+Hesaba başka bir e-posta gönderilmeden önce, e-postadaki yönergeleri uygulayıp, hesabın gerçekten size ait olduğunu onaylamanız gerekir.',
 'throttled-mailpassword' => 'Bir parola sıfırlama e-postası son {{PLURAL:$1|bir saat|$1 saat}} içinde zaten gönderildi. Hizmeti kötüye kullanmayı önlemek için, her {{PLURAL:$1|bir saatte|$1 saatte}} sadece bir parola sıfırlama e-postası gönderilecektir.',
 'mailerror' => 'E-posta gönderim hatası: $1',
 'acct_creation_throttle_hit' => 'Sizin IP adresinizi kullanarak bu vikiyi ziyaret edenler son günde {{PLURAL:$1|1 hesap|$1 hesap}} oluşturdu, bu sayı bu zaman aralığında izin verilen azami sayıdır.
 Sonuç olarak, bu IP adresini kullanan ziyaretçiler şu anda daha fazla hesap açamazlar.',
-'emailauthenticated' => 'E-posta adresiniz $2 $3 tarihinde doğrulandı.',
+'emailauthenticated' => 'E-posta adresiniz $2 $3 tarihinde onaylandı.',
 'emailnotauthenticated' => 'E-posta adresiniz henüz onaylanmadı.
 Aşağıdaki işlevlerin hiçbiri için e-posta gönderilmeyecektir.',
 'noemailprefs' => 'Bu özelliklerin çalışması için bir e-posta adresi belirtiniz.',
@@ -1303,19 +1305,20 @@ Bir hizmetli olarak bu değişikliği görebilirsiniz; [{{fullurl:{{#Special:Log
 'revdelete-text' => "'''Silinen revizyonlar ve olaylar hala sayfa geçmişinde ve günlüklerde görünecektir, fakat içeriğin parçaları umumi olarak erişilemeyecektir.'''
 {{SITENAME}} sitesindeki diğer hizmetliler gizli içeriğe erişebilir ve ilave kısıtlamalar ayarlanmadıysa bu arayüz ile geri getirebilir.",
 'revdelete-confirm' => 'Lütfen, bunu yapmak istediğinizi , sonuçlarını anladığınızı, ve bunu [[{{MediaWiki:Policy-url}}|ilkelere]] göre yapıyor olduğunuzu onaylayın.',
-'revdelete-suppress-text' => "Saklama '''sadece''' aşağıdaki durumlar için kullanılmalıdır:
+'revdelete-suppress-text' => "Saklama '''sadece''' aşağıdaki durumlarda kullanılmalıdır:
+* Muhtemel iftira niteliğindeki bilgi
 * Uygunsuz kişisel bilgi
 *: ''ev adresleri ve telefon numaraları, sosyal güvenlik numaraları, vs.''",
 'revdelete-legend' => 'Görünürlük kısıtlamaları ayarla',
-'revdelete-hide-text' => 'Değişiklik yazısını gizle',
+'revdelete-hide-text' => 'Revizyon metni',
 'revdelete-hide-image' => 'Dosya içeriğini gizle',
 'revdelete-hide-name' => 'Olayı ve hedefi gizle',
-'revdelete-hide-comment' => 'Özeti gösterme',
-'revdelete-hide-user' => 'Değişikliği yapan kullanıcı adını/IP adresi gizle',
+'revdelete-hide-comment' => 'Değişiklik özeti',
+'revdelete-hide-user' => "Editör'ün kullanıcı adı/IP adresi",
 'revdelete-hide-restricted' => 'Verileri hizmetlilerle birlikte diğerlerinden de sakla',
 'revdelete-radio-same' => '(değiştirme)',
-'revdelete-radio-set' => 'Evet',
-'revdelete-radio-unset' => 'Hayır',
+'revdelete-radio-set' => 'Gizli',
+'revdelete-radio-unset' => 'Görünür',
 'revdelete-suppress' => 'Verileri hem diğerlerinden hem de hizmetlilerden gizle',
 'revdelete-unsuppress' => 'Geri döndürülmüş revizyonlardaki kısıtlamaları kaldır',
 'revdelete-log' => 'Neden:',
@@ -1400,6 +1403,10 @@ Gezinti bağlantılarının bu sütunu sıfırlayacağını unutmayın.',
 'diff-empty' => '(Fark yok)',
 'diff-multi' => '({{PLURAL:$2|Bir kullanıcı|$2 kullanıcı}} tarafından yapılan {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)',
 'diff-multi-manyusers' => '($2 kullancıdan fazla {{PLURAL:$2|kullanıcı|kullanıcı}} tarafından yapılan {{PLURAL:$1|bir ara revizyon|$1 ara revizyon}} gösterilmiyor)',
+'difference-missing-revision' => 'Bu farkın {{PLURAL:$2|bir revizyonu|$2 revizyonu}} ($1) {{PLURAL:$2|bulunamadı|bulunamadı}}.
+
+Bu genellikle, silinen bir sayfaya olan eski tarihli bir fark sayfasına bağlantılardan dolayı olur.
+Ayrıntılar [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silme günlüğünde] bulunabilir.',
 
 # Search results
 'searchresults' => 'Arama sonuçları',
@@ -1462,12 +1469,13 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar
 'powersearch-togglenone' => 'Hiçbiri',
 'search-external' => 'Dış arama',
 'searchdisabled' => '{{SITENAME}} sitesinde arama yapma geçici olarak durdurulmuştur. Bu arada Google kullanarak {{SITENAME}} içinde arama yapabilirsiniz. Arama sitelerinde dizinlerin biraz eski kalmış olabileceğini göz önünde bulundurunuz.',
+'search-error' => 'Arama yapılırken bir hata oluştu: $1',
 
 # Preferences page
 'preferences' => 'Tercihler',
 'mypreferences' => 'Tercihler',
 'prefs-edits' => 'Değişiklik sayısı:',
-'prefsnologin' => 'Oturum açık değil',
+'prefsnologintext2' => 'Kullanıcı tercihlerini ayarlamak için lütfen $1ın.',
 'changepassword' => 'Parolayı değiştir',
 'prefs-skin' => 'Görünüm',
 'skin-preview' => 'Önizleme',
@@ -1492,7 +1500,7 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar
 'prefs-rendering' => 'Görünüm',
 'saveprefs' => 'Kaydet',
 'resetprefs' => 'Ayarları ilk durumuna getir',
-'restoreprefs' => 'Tüm varsayılan ayarları geri yükle',
+'restoreprefs' => 'Tüm varsayılan ayarları geri yükle (tüm bölümlerde)',
 'prefs-editing' => 'Sayfa yazma alanı',
 'rows' => 'Satır',
 'columns' => 'Sütun',
@@ -1578,6 +1586,7 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'prefs-displaywatchlist' => 'Görüntüleme seçenekleri',
 'prefs-tokenwatchlist' => 'Anahtar',
 'prefs-diffs' => 'Farklar',
+'prefs-help-prefershttps' => 'Bu tercih bir sonraki girişinizde etkili olacaktır.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-posta adresi geçerli görünüyor',
@@ -1601,9 +1610,11 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'userrights-no-interwiki' => 'Diğer vikilerdeki kullanıcıların izinlerini değiştirmeye yetkiniz yok.',
 'userrights-nodatabase' => '$1 veritabanı mevcut veya bölgesel değil',
 'userrights-nologin' => 'Kullanıcı haklarını atamak için hizmetli hesabı ile [[Special:UserLogin|giriş yapmanız gerekir]].',
-'userrights-notallowed' => 'Hesabınızın kullanıcı hakları eklemek veya kaldırmak için izni yok.',
+'userrights-notallowed' => 'Kullanıcı hakları eklemek veya kaldırmak için izniniz yok.',
 'userrights-changeable-col' => 'Değiştirebildiğiniz gruplar',
 'userrights-unchangeable-col' => 'Değiştirebilmediğiniz gruplar',
+'userrights-conflict' => 'Kullanıcı hakları değişikliklerinde çakışma! Lütfen değişikliklerinizi gözden geçirin ve onaylayın.',
+'userrights-removed-self' => 'Kendi haklarınız başarıyla kaldırıldı. Bu nedenle, artık bu sayfaya erişemeyeceksiniz.',
 
 # Groups
 'group' => 'Grup:',
@@ -1654,6 +1665,7 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'right-writeapi' => 'API yaz kullanımı',
 'right-delete' => 'Sayfaları sil',
 'right-bigdelete' => 'Uzun tarihli sayfaları sil',
+'right-deletelogentry' => 'Belirli günlük girdilerini sil ve geri getir',
 'right-deleterevision' => 'Sayfaların belirli revizyonlarını sil ve geri yükle',
 'right-deletedhistory' => 'Silinmiş geçmiş girdilerini gör, ilgili metinleri olmadan',
 'right-deletedtext' => 'Silinmiş metni ve silinmiş revizyonlar arasındaki değişiklikleri gör',
@@ -1668,11 +1680,18 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'right-proxyunbannable' => 'Proxylerin otomatik engellemelerini atla',
 'right-unblockself' => 'Kendi engellemesini kaldır',
 'right-protect' => 'Koruma düzeylerini değiştir ve kademeli korumalı sayfaları düzenle',
-'right-editprotected' => 'Korumalı sayfalarda değişiklik yap (korumayı basamaklamadan)',
+'right-editprotected' => '"{{int:protect-level-sysop}}" olarak korunan sayfalarda değişiklik yap',
+'right-editsemiprotected' => '"{{int:protect-level-autoconfirmed}}" olarak korunan sayfalarda değişiklik yap',
 'right-editinterface' => 'Kullanıcı arayüzünü değiştirmek',
 'right-editusercssjs' => 'Diğer kullanıcıların CSS ve JS dosyalarında değişiklik yap',
 'right-editusercss' => 'Diğer kullanıcıların CSS dosyalarında değişiklik yap',
 'right-edituserjs' => 'Diğer kullanıcıların JS dosyalarında değişiklik yap',
+'right-editmyusercss' => 'Kendi kullanıcı CSS dosyaları düzenle',
+'right-editmyuserjs' => 'Kendi kullanıcı JavaScript dosyalarını düzenle',
+'right-viewmywatchlist' => 'Kendi izleme listeni gör',
+'right-editmywatchlist' => 'Kendi izleme listeni düzenle. Not, bazı eylemler bu yetki olmadan da sayfa ekleyebilir.',
+'right-viewmyprivateinfo' => 'Kendi özel bilgilerini görüntüle (e-posta adresi, gerçek isim vb.)',
+'right-editmyprivateinfo' => 'Kendi özel bilgilerini değiştir (e-posta adresi, gerçek isim vb.)',
 'right-editmyoptions' => 'tercihlerini düzenle',
 'right-rollback' => 'Belirli bir sayfayı değiştiren son kullanıcının değişikliklerini hızlıca geri döndür',
 'right-markbotedits' => 'Geri döndürülen değişiklikleri, bot değişiklikleri olarak işaretle',
@@ -1725,8 +1744,8 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'action-block' => 'bu kullanıcının değişiklik yapmasını engellemeye',
 'action-protect' => 'bu sayfa için koruma düzeylerini değiştirmeye',
 'action-rollback' => 'Belirli bir sayfayı değiştiren son kullanıcının değişikliklerini hızlıca geri döndür',
-'action-import' => 'bu sayfayı bir başka vikiden içeri aktarmaya',
-'action-importupload' => 'bu sayfayı bir dosya yüklemesinden içeri aktarmaya',
+'action-import' => 'başka bir vikiden sayfaları içeri aktarmaya',
+'action-importupload' => 'bir dosya yüklemesinden sayfaları içeri aktarmaya',
 'action-patrol' => 'diğerlerinin değişikliğini gözlenmiş olarak işaretlemeye',
 'action-autopatrol' => 'değişikliğinizi gözlenmiş olarak işaretlemeye',
 'action-unwatchedpages' => 'izlenmeyen sayfalar listesini görmeye',
@@ -1737,6 +1756,8 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'action-sendemail' => 'e-posta gönder',
 'action-editmywatchlist' => 'izleme listeni düzenle',
 'action-viewmywatchlist' => 'izleme listeni gör',
+'action-viewmyprivateinfo' => 'kendi özel bilgilerinizi görmeye',
+'action-editmyprivateinfo' => 'kendi özel bilgilerinizi değiştirmeye',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|değişiklik|değişiklik}}',
@@ -1751,6 +1772,8 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'recentchanges-label-minor' => 'Bu küçük bir değişiklik',
 'recentchanges-label-bot' => 'Bu değişiklik bir bot tarafından yapıldı',
 'recentchanges-label-unpatrolled' => 'Bu değişiklik henüz gözlenmemiş',
+'recentchanges-label-plusminus' => 'Sayfa boyutu bu bayt sayısı kadar değişti',
+'recentchanges-legend-newpage' => '(ayrıca bakınız [[Special:NewPages|yeni sayfalar listesi]])',
 'rcnote' => "$4 tarihi ve saat $5 itibarı ile, son {{PLURAL:$2|1 günde|'''$2''' günde}} yapılan, {{PLURAL:$1|'''1''' değişiklik|'''$1''' değişiklik}}, aşağıdadır.",
 'rcnotefrom' => "'''$2''' tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla <b>$1</b> tanesi gösterilmektedir).",
 'rclistfrom' => '$1 tarihinden itibaren yeni değişiklikleri göster',
@@ -1793,7 +1816,7 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'reuploaddesc' => 'Yükleme formuna geri dön.',
 'upload-tryagain' => 'Değiştirilmiş dosya açıklamasını gönder',
 'uploadnologin' => 'Oturum açık değil',
-'uploadnologintext' => 'Dosya yükleyebilmek için [[$1|oturum aç]]manız gerekiyor.',
+'uploadnologintext' => 'Dosya yükleyebilmek için $1manız gerekiyor.',
 'upload_directory_missing' => 'Yükleme dizini ($1) kayıp ve websunucusu tarafından oluşturulamıyor.',
 'upload_directory_read_only' => 'Dosya yükleme dizinine ($1) web sunucusunun yazma izni yok.',
 'uploaderror' => 'Yükleme hatası',
@@ -1931,13 +1954,19 @@ Eğer sorun tekrarlanırsa, bir [[Special:ListUsers/sysop|hizmetli]] ile temasa
 'upload-too-many-redirects' => 'URL çok fazla yönlendirme içeriyor',
 'upload-unknown-size' => 'Bilinmeyen boyut',
 'upload-http-error' => 'Bir HTTP hatası oluştu: $1',
+'upload-copy-upload-invalid-domain' => 'Kopya yüklemeler bu etki alanında mevcut değil.',
 
 # File backend
 'backend-fail-stream' => '$1 dosyası okunamadı.',
+'backend-fail-backup' => '"$1" dosyası yedeklenemedi.',
 'backend-fail-notexists' => '$1 dosyası mevcut değil.',
+'backend-fail-hashes' => 'Karşılaştırma için dosya sağlamaları alınamadı.',
+'backend-fail-notsame' => 'Aynı olmayan bir dosya "$1" konumunda zaten var.',
 'backend-fail-invalidpath' => '"$1" geçerli bir depolama yolu değil.',
 'backend-fail-delete' => '"$1" dosyası silinemedi.',
+'backend-fail-describe' => '"$1" dosyası için üstveri değiştirilemiyor.',
 'backend-fail-alreadyexists' => '"$1" dosyası zaten mevcut.',
+'backend-fail-store' => '"$1" dosyası "$2" konumuna saklanamadı.',
 'backend-fail-copy' => '"$1" dosyası, "$2" dosyasına kopyalanamadı.',
 'backend-fail-move' => '"$1" dosyası, "$2" dosyasına taşınamadı.',
 'backend-fail-opentemp' => 'Geçici dosya açılamadı.',
@@ -1946,6 +1975,29 @@ Eğer sorun tekrarlanırsa, bir [[Special:ListUsers/sysop|hizmetli]] ile temasa
 'backend-fail-read' => '$1 dosyası okunamadı.',
 'backend-fail-create' => '$1 dosyası yazılamadı.',
 'backend-fail-maxsize' => 'Dosya {{PLURAL:$2|bir bayt|$2 bayt}} daha büyük olduğu için "$1" dosyasına yazılamadı.',
+'backend-fail-readonly' => 'Depolama arkaplan uygulaması "$1" şu anda salt okunur. Verilen gerekçe: "\'\'$2\'\'"',
+'backend-fail-synced' => '"$1" dosyası dahili depolama arkaplan uygulamaları içinde tutarsız bir durumda',
+'backend-fail-connect' => '"$1" depolama arkaplan uygulamasına bağlanılamıyor.',
+'backend-fail-internal' => '"$1" depolama arkaplan uygulamasında bilinmeyen bir hata oluştu.',
+'backend-fail-contenttype' => '"$1" konumunda saklanan dosyanın içerik türü belirlenemiyor.',
+'backend-fail-batchsize' => 'Depolama arkaplan uygulamasına $1 dosya {{PLURAL:$1|işlemi|işlemi}} yığını verildi; sınır $2 {{PLURAL:$1|işlem|işlem}}.',
+'backend-fail-usable' => 'Yetersiz izinlerden ya da eksik dizin/konteynerlerden dolayı "$1" dosyası okunup yazılamıyor.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => '"$1" depolama arkaplan uygulaması için günlük veri tabanına erişilemiyor.',
+'filejournal-fail-dbquery' => '"$1" depolama arkaplan uygulaması için günlük veri tabanı güncellenemiyor.',
+
+# Lock manager
+'lockmanager-notlocked' => '"$1" kilidi açılamıyor; kilitli değil.',
+'lockmanager-fail-closelock' => '"$1" için kilit dosyası kapatılamıyor.',
+'lockmanager-fail-deletelock' => '"$1" için kilit dosyası silinemiyor.',
+'lockmanager-fail-acquirelock' => '"$1" için kilit alınamıyor.',
+'lockmanager-fail-openlock' => '"$1" için kilit dosyası açılamıyor.',
+'lockmanager-fail-releaselock' => '"$1" için kilit serbest bırakılamıyor.',
+'lockmanager-fail-db-bucket' => '$1 kovasında yeterli kilit veri tabanına iletişim sağlanamadı.',
+'lockmanager-fail-db-release' => '$1 veritabanında kilitler serbest bırakılamıyor.',
+'lockmanager-fail-svr-acquire' => '$1 sunucusunda kilitler alınamıyor.',
+'lockmanager-fail-svr-release' => '$1 sunucusunda kilitler serbest bırakılamıyor.',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'Dosya ZIP denetimleri için açılırken bir hata ile karşılaşıldı.',
@@ -2010,8 +2062,7 @@ Sitenin daha az meşgul olduğu bir zamanda denemek daha iyi olabilir.',
 'upload_source_file' => ' (bilgisayarınızdaki bir dosya)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Bu özel sayfa yüklenilen tüm dosyaları gösterir. 
-Kullanıcı tarafından filtrelendiğinde, sadece o kullanıcı dosyanın en son sürümünü yüklediği dosyalar gösterilir.',
+'listfiles-summary' => 'Bu özel sayfa yüklenen tüm dosyaları gösterir.',
 'listfiles_search_for' => 'Medya adı ara:',
 'imgfile' => 'dosya',
 'listfiles' => 'Dosya listesi',
@@ -2022,6 +2073,7 @@ Kullanıcı tarafından filtrelendiğinde, sadece o kullanıcı dosyanın en son
 'listfiles_size' => 'Boyut (bayt)',
 'listfiles_description' => 'Tanım',
 'listfiles_count' => 'Sürümler',
+'listfiles-show-all' => 'Görüntülerin eski sürümlerini içer',
 'listfiles-latestversion' => 'Geçerli sürüm',
 'listfiles-latestversion-yes' => 'Evet',
 'listfiles-latestversion-no' => 'Hayır',
@@ -2065,6 +2117,7 @@ Dosyanın açıklama sayfasında değişiklik yapmak için ilgili sayfaya [$2 bu
 'uploadnewversion-linktext' => 'Dosyanın yenisini yükleyin',
 'shared-repo-from' => "$1'dan",
 'shared-repo' => 'ortak bir havuz',
+'upload-disallowed-here' => 'Bu dosyanın üzerine yazamazsınız.',
 
 # File reversion
 'filerevert' => '$1 dosyasını eski haline döndür',
@@ -2119,6 +2172,8 @@ Dosyanın açıklama sayfasında değişiklik yapmak için ilgili sayfaya [$2 bu
 
 # Random page in category
 'randomincategory' => 'Kategoriye göre rastgele sayfa',
+'randomincategory-invalidcategory' => '"$1" geçerli bir kategori adı değil.',
+'randomincategory-nopages' => '[[:Category:$1|$1]] kategorisinde hiç sayfa yok.',
 'randomincategory-selectcategory' => 'Rastgele sayfa alınacak kategori: $1 $2.',
 'randomincategory-selectcategory-submit' => 'Getir',
 
@@ -2148,8 +2203,12 @@ Dosyanın açıklama sayfasında değişiklik yapmak için ilgili sayfaya [$2 bu
 'statistics-mostpopular' => 'En çok ziyaret edilen sayfalar',
 
 'pageswithprop' => 'Bir sayfa özelliğine sahip sayfalar',
+'pageswithprop-legend' => 'Bir sayfa özelliğine sahip sayfalar',
 'pageswithprop-text' => 'Bu sayfa belirli bir sayfa özelliğini kullanan sayfaları listeler.',
+'pageswithprop-prop' => 'Özellik adı:',
 'pageswithprop-submit' => 'Git',
+'pageswithprop-prophidden-long' => 'uzun metin özellik değeri gizlendi ($1)',
+'pageswithprop-prophidden-binary' => 'ikili özellik değeri gizlendi ($1)',
 
 'doubleredirects' => 'Çift yönlendirmeler',
 'doubleredirectstext' => 'Bu sayfa diğer yönlendirme sayfalarına yönlendirme yapan sayfaları listeler.
@@ -2195,6 +2254,8 @@ Her satırın içerdiği bağlantılar; birinci ve ikinci yönlendirme, ayrıca
 'wantedpages' => 'İstenen sayfalar',
 'wantedpages-badtitle' => 'Sonuç kümesinde geçersiz başlık: $1',
 'wantedfiles' => 'İstenen dosyalar',
+'wantedfiletext-cat' => 'Aşağıdaki dosyalar kullanılıyor ama mevcut değil. Yabancı depolardaki dosyalar, varolsalar bile gösterilebilir. Böyle yanlış pozitiflerin <del>üstü çizilecektir</del>. Ek olarak, varolmayan dosyaları gömen sayfalar [[:$1]] sayfasında listelenmiştir.',
+'wantedfiletext-nocat' => 'Aşağıdaki dosyalar kullanılıyor ama mevcut değil. Yabancı depolardaki dosyalar, varolsalar bile gösterilebilir. Böyle yanlış pozitiflerin <del>üstü çizilecektir</del>.',
 'wantedtemplates' => 'İstenen şablonlar',
 'mostlinked' => 'Kendisine en fazla bağlantı verilmiş sayfalar',
 'mostlinkedcategories' => 'En çok maddeye sahip kategoriler',
@@ -2204,6 +2265,8 @@ Her satırın içerdiği bağlantılar; birinci ve ikinci yönlendirme, ayrıca
 'mostinterwikis' => "En çok interwiki'ye sahip sayfalar",
 'mostrevisions' => 'En çok değişikliğe uğramış sayfalar',
 'prefixindex' => 'Önek ile tüm sayfalar',
+'prefixindex-namespace' => 'Önek ile tüm sayfalar ($1 ad alanında)',
+'prefixindex-strip' => 'Listede öneki kırp',
 'shortpages' => 'Kısa sayfalar',
 'longpages' => 'Uzun sayfalar',
 'deadendpages' => 'Başka sayfalara bağlantısı olmayan sayfalar',
@@ -2219,6 +2282,7 @@ Her satırın içerdiği bağlantılar; birinci ve ikinci yönlendirme, ayrıca
 'listusers' => 'Kullanıcı listesi',
 'listusers-editsonly' => 'Sadece değişiklik yapan kullanıcıları göster',
 'listusers-creationsort' => 'Oluşturma tarihine göre sırala',
+'listusers-desc' => 'Azalan sırada sırala',
 'usereditcount' => '$1 {{PLURAL:$1|değişiklik|değişiklik}}',
 'usercreated' => "$1 tarihinde $2'de {{GENDER:$3|oluşturuldu}}.",
 'newpages' => 'Yeni sayfalar',
@@ -2254,6 +2318,7 @@ Lütfen unutmayın ki, diğer web siteleri bir dosyaya doğrudan bir URL ile ba
 Günlük tipini, kullanıcı adını (büyük-küçük harf duyarlı), ya da etkilenen sayfayı (yine büyük-küçük harf duyarlı) seçerek görünümü daraltabilirsiniz.',
 'logempty' => 'Kayıtlarda eşleşen bilgi yok.',
 'log-title-wildcard' => 'Bu metinle başlayan başlıklar ara',
+'showhideselectedlogentries' => 'Seçili günlük girdilerinin görünürlüğünü değiştir',
 
 # Special:AllPages
 'allpages' => 'Tüm sayfalar',
@@ -2274,6 +2339,8 @@ Günlük tipini, kullanıcı adını (büyük-küçük harf duyarlı), ya da etk
 'allpages-hide-redirects' => 'Yönlendirmeleri gizle',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Bu sayfanın önbelleğe alınan bir sürümünü görüntülüyorsunuz, $1 eski olabilir.',
+'cachedspecial-viewing-cached-ts' => 'Bu sayfanın önbelleğe alınan bir sürümünü görüntülüyorsunuz, tam olarak güncel olmayabilir.',
 'cachedspecial-refresh-now' => 'En son görünüm.',
 
 # Special:Categories
@@ -2394,7 +2461,7 @@ Bundan sonra, bu sayfaya ve ilgili tartışma sayfasına yapılacak değişiklik
 'notvisiblerev' => 'Revizyon silinmiş',
 'watchlist-details' => 'Tartışma sayfaları hariç {{PLURAL:$1|$1 sayfa|$1 sayfa}} izleme listenizdedir.',
 'wlheader-enotif' => 'E-posta bildirimi etkin.',
-'wlheader-showupdated' => "Son ziyaretinizden sonraki sayfa değişiklikleri '''kalın yazıyla''' gösterilmiştir.",
+'wlheader-showupdated' => "Sayfaları son ziyaretinizden beri değişen sayfalar '''kalın''' gösterilmiştir.",
 'watchmethod-recent' => 'izlediğiniz sayfalarda yapılan son değişiklikler kontrol ediliyor',
 'watchmethod-list' => 'izlediğiniz sayfalarda yapılan son değişiklikler kontrol ediliyor',
 'watchlistcontains' => 'İzleme listenizde $1 tane {{PLURAL:$1|sayfa|sayfa}} var.',
@@ -2434,7 +2501,7 @@ Editörün iletişim bilgileri:
 e-posta: $PAGEEDITOR_EMAIL
 viki: $PAGEEDITOR_WIKI
 
-Bahsi geçen sayfayı ziyaret edinceye kadar sayfayla ilgili başka bildirim gönderilmeyecektir. Ayrıca izleme listenizdeki tüm sayfaların bildirim durumlarını sıfırlayabilirsiniz.
+Bahsi geçen sayfayı oturum açarak ziyaret edinceye kadar sayfayla ilgili başka bildirim gönderilmeyecektir. Ayrıca izleme listenizdeki tüm sayfaların bildirim durumlarını sıfırlayabilirsiniz.
 
 {{SITENAME}} bildirim sistemi
 
@@ -2476,10 +2543,12 @@ Yakın zamanda silinenleri görmek için: $2.',
 'deletecomment' => 'Neden:',
 'deleteotherreason' => 'Diğer/ilave neden:',
 'deletereasonotherlist' => 'Diğer nedenler',
-'deletereason-dropdown' => '*Genel silme gerekçeleri
-** Sayfayı oluşturan kullanıcının isteği
+'deletereason-dropdown' => '* Yaygın silme gerekçeleri
+** İstenmeyen değişiklik (spam)
+** Vandalizm
 ** Telif hakkı ihlali
-** Vandalizm',
+** Yazar talebi
+** Bozuk yönlendirme',
 'delete-edit-reasonlist' => 'Silme nedenlerini değiştir',
 'delete-toobig' => 'Bu sayfa, $1 {{PLURAL:$1|tane değişiklik|tane değişiklik}} ile çok uzun bir geçmişe sahiptir.
 Böyle sayfaların silinmesi, {{SITENAME}} sitesini bozmamak için sınırlanmaktadır.',
@@ -2492,6 +2561,7 @@ dikkatle devam edin.',
 'rollback_short' => 'geri al',
 'rollbacklink' => 'geri döndür',
 'rollbacklinkcount' => '$1 {{PLURAL:$1|değişikliği|değişikliği}} geri döndür',
+'rollbacklinkcount-morethan' => '$1 {{PLURAL:$1|değişiklikten|değişiklikten}} fazla geri döndür',
 'rollbackfailed' => 'geri alma işlemi başarısız',
 'cantrollback' => 'Sayfaya son katkıda bulunan kullanıcı, sayfaya katkıda bulunmuş tek kişi olduğu için, değişiklikler geri alınamıyor.',
 'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tarafından [[:$1]] sayfasında yapılmış son değişiklik geriye alınamıyor;
@@ -2500,7 +2570,7 @@ başka biri sayfada değişiklik yaptı ya da sayfayı geriye aldı.
 Son değişikliği yapan: [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Değişiklik özeti: \"''\$1''\" idi.",
 'revertpage' => '[[Special:Contributions/$2|$2]] [[User talk:$2|mesaj]] tarafından yapılan değişiklikler geri alınarak, [[User:$1|$1]] tarafından değiştirilmiş önceki sürüm geri getirildi.',
-'revertpage-nouser' => '(kullanıcı adı çıkarılmış) tarafından yapılan değişiklikler [[User:$1|$1]] tarafından yapılan son revizyona geri alındı',
+'revertpage-nouser' => 'Gizli bir kullanıcı tarafından yapılan değişiklikler geri alınarak {{GENDER:$1|[[User:$1|$1]]}} tarafından yapılan son revizyon geri getirildi',
 'rollback-success' => '$1 tarafından yapılan değişiklikler geri alınarak;
 $2 tarafından değiştirilmiş önceki sürüme geri dönüldü.',
 
@@ -2521,7 +2591,10 @@ Lütfen "geri" gidin ve geldiğiniz sayfayı yeniden yükleyin, sonra tekrar den
 'protect-title' => '"$1" için bir koruma seviyesi seçiniz',
 'protect-title-notallowed' => '"$1" için koruma seviyesini görüntüleyin',
 'prot_1movedto2' => '[[$1]] sayfasının yeni adı: [[$2]]',
+'protect-badnamespace-title' => 'Korumaya alınamayan ad alanı',
 'protect-badnamespace-text' => 'Bu ad alanındaki sayfalar korunamaz.',
+'protect-norestrictiontypes-text' => 'Bu sayfa mevcut kısıtlama türü bulunmadığı için korumaya alınamıyor.',
+'protect-norestrictiontypes-title' => 'Korumaya alınamayan sayfa',
 'protect-legend' => 'Korumayı onayla',
 'protectcomment' => 'Sebep:',
 'protectexpiry' => 'Bitiş tarihi:',
@@ -2538,7 +2611,7 @@ Lütfen "geri" gidin ve geldiğiniz sayfayı yeniden yükleyin, sonra tekrar den
 'protect-cascadeon' => 'Bu sayfa, kademeli koruma aktif hale getirilmiş aşağıdaki {{PLURAL:$1|$1 sayfada|$1 sayfada}} kullanıldığı için şu an koruma altındadır.
 Bu sayfanın koruma seviyesini değiştirebilirsiniz; ancak bu kademeli korumaya etki etmeyecektir.',
 'protect-default' => 'Tüm kullanıcılara izin ver',
-'protect-fallback' => '"$1" izni gerektir',
+'protect-fallback' => 'Sadece "$1" yetkisine sahip kullanıcılara izin ver',
 'protect-level-autoconfirmed' => 'Yalnızca otomatik onaylanmış kullanıcılara izin verilir',
 'protect-level-sysop' => 'Yalnızca hizmetlilere izin verilir',
 'protect-summary-cascade' => 'kademeli',
@@ -2584,7 +2657,8 @@ Bu sayfanın koruma seviyesini değiştirebilirsiniz; ancak bu kademeli korumaya
 'undeletepagetext' => 'Aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} silinmiştir ama hala arşivdedir ve geri getirilebilir.
 Arşiv düzenli olarak temizlenebilir.',
 'undelete-fieldset-title' => 'Revizyonları geri yükle',
-'undeleteextrahelp' => "Sayfalarla birlikte geçmişi geri getirmek için onay kutularına dokunmadan '''Geri getir!''' tuşuna tıklayın. Sayfanın geçmişini ayrı ayrı getirmek için geri getirmek istediğiniz değişikliklerin onay kutularını seçip '''Geri getir!''' tuşuna tıklayın. Seçilen onay kutularını ve neden alanını sıfırlamak için '''Vazgeç''' tuşuna tıklayın.",
+'undeleteextrahelp' => "Sayfanın tüm geçmişini geri getirmek için onay kutularını boş bırakarak '''''{{int:undeletebtn}}''''' tuşuna tıklayın.
+Sayfanın geçmişini ayrı ayrı getirmek için geri getirmek istediğiniz değişikliklerin onay kutularını seçip '''''{{int:undeletebtn}}''''' tuşuna tıklayın.",
 'undeleterevisions' => '$1 {{PLURAL:$1|revizyon|revizyon}} arşivlendi',
 'undeletehistory' => 'Eğer sayfayı geri getirirseniz, tüm revizyonlar geçmişe geri getirilecektir.
 Silindikten sonra aynı isimle yeni bir sayfa oluşturulmuşsa, geri gelen revizyonlar varolan sayfanın geçmişinde görünecektir.',
@@ -2631,7 +2705,9 @@ $1',
 # Namespace form on various pages
 'namespace' => 'Ad alanı:',
 'invert' => 'Seçili haricindekileri göster',
+'tooltip-invert' => 'Seçili ad alanındaki sayfalara olan değişiklikleri gizlemek için bu kutucuğu işaretleyin (ve ilgili ad alanı, eğer seçiliyse)',
 'namespace_association' => 'İlişkili ad alanı',
+'tooltip-namespace_association' => 'Seçili ad alanıyla ilgili tartışma ya da madde ad alanlarını da eklemek için bu kutucuğu işaretleyin',
 'blanknamespace' => '(Ana)',
 
 # Contributions
@@ -2737,6 +2813,7 @@ Engellemeleri gözden geçirmek için [[Special:BlockList|engel listesine]] bak
 'blocklist-userblocks' => 'Hesap engellemelerini gizle',
 'blocklist-tempblocks' => 'Geçici engellemeleri gizle',
 'blocklist-addressblocks' => 'Tek IP engellemelerini gizle',
+'blocklist-rangeblocks' => 'Dizi bloklarını gizle',
 'blocklist-timestamp' => 'Tarih damgası',
 'blocklist-target' => 'Hedef',
 'blocklist-expiry' => 'Bitiş tarihi',
@@ -2797,6 +2874,7 @@ Lütfen İnternet sevis sağlayınız ile ya da teknik destek ile irtibat kurun
 'sorbsreason' => "IP adresiniz, {{SITENAME}} sitesi tarafından kullanılan DNSBL'de açık proxy olarak listelenmiş.",
 'sorbs_create_account_reason' => "IP adresiniz {{SITENAME}} sitesi tarafından kullanılan DNSBL'de açık proxy olarak listelenmiş.
 Hesap oluşturamazsınız",
+'xffblockreason' => 'Sizin ya da kullandığınız vekil sunucuya ait bir IP adresi X-Forwarded-For başlığında bulunuyor, ve engellendi. Orjinal engelleme nedeni: $1',
 'cant-block-while-blocked' => 'Siz engelliyken başka kullanıcıları engelleyemezsiniz.',
 'cant-see-hidden-user' => 'Engellemek istediğiniz kullanıcı zaten engellenmiş ve gizlenmiş. Kullanıcıgizle yetkiniz olmadığı için, kullanıcının engellenmesini göremez ya da değiştiremezsiniz.',
 'ipbblocked' => 'Diğer kullanıcıları engelleyemez ya da engellemesini kaldıramazsınız, çünkü kendiniz engellenmişsiz',
@@ -2827,12 +2905,16 @@ Bu, veritabanını kilitleyip açabilmek için, web sunucusu tarafından yazıla
 # Move page
 'move-page' => '$1 taşınıyor',
 'move-page-legend' => 'İsim değişikliği',
-'movepagetext' => "Aşağıdaki form kullanılarak sayfanın adı değiştirilir. Beraberinde tüm geçmiş kayıtları da yeni isme aktarılır. Eski isim yeni isme yönlendirme hâline dönüşür. Otomatik olarak eski başlığa yönlendirmeleri güncelleyebilirsiniz. Bu işlemi otomatik yapmak istemezseniz tüm [[Special:DoubleRedirects|çift]] veya [[Special:BrokenRedirects|geçersiz]] yönlendirmeleri kendiniz düzeltmeniz gerekecek. Yapacağınız bu değişikllikle tüm bağlantıların olması gerektiği gibi çalıştığından sizin sorumlu olduğunuzu unutmayınız.
+'movepagetext' => "Aşağıdaki formu kullanmak sayfanın adını değiştirir, tüm geçmiş kayıtlarını da yeni isme aktarır.
+Eski başlık yeni başlığa yönlendirme hâline dönüşür. Otomatik olarak eski başlığa yönlendirmeleri güncelleyebilirsiniz.
+Eğer istemezseniz, tüm [[Special:DoubleRedirects|çift]] veya [[Special:BrokenRedirects|geçersiz]] yönlendirmeleri kontrol ettiğinizden emin olun.
+Tüm bağlantıların olması gerektiği gibi çalıştığından sizin sorumlu olduğunuzu unutmayınız.
 
-Eğer yeni isimde bir madde zaten varsa isim değişikliği '''yapılmayacaktır'''. Ayrıca, isim değişikliğinden pişman olursanız değişikliği geri alabilir ve başka hiçbir sayfaya da dokunmamış olursunuz.
+Eğer yeni isimde bir madde zaten varsa isim değişikliği '''yapılmayacaktır''', sonraki bir yönlendirme olup geçmiş değişiklik geçmişi olmadığı müddetçe.
+Bu şu anlama gelir ki, eğer bir hata yaparsanız sayfayı değiştirildiği isme geri isimlendirebilirsiniz, ve mevcut bir sayfanın üstüne yazmazsınız.
 
 '''UYARI!'''
-Bu değişim popüler bir sayfa için beklenmeyen sonuçlar doğurabilir; lütfen değişikliği yapmadan önce olabilecekleri göz önünde bulundurun.",
+Bu değişim popüler bir sayfa için etkili ve beklenmeyen sonuçlar doğurabilir; lütfen devam etmeden önce olabilecekleri anladığınızdan emin olun.",
 'movepagetext-noredirectfixer' => "Aşağıdaki formu doldurmak bir sayfayı yeniden adlandırır, tüm geçmişini yeni ada taşır.
 Eski başlık yeni başlığa bir yönlendirme sayfası olur.
 [[Special:DoubleRedirects|Çift]] ya da [[Special:BrokenRedirects|nozuk yönlendirmeler]] sayfalarını kontrol edin.
@@ -2897,6 +2979,7 @@ Lütfen başka bir isim deneyiniz.',
 'immobile-target-namespace-iw' => 'Vikilerarası bağlantı, sayfa taşıması için geçerli bir hedef değil.',
 'immobile-source-page' => 'Bu sayfanın adı değiştirilemez.',
 'immobile-target-page' => 'Bu hedef başlığına taşınamaz.',
+'bad-target-model' => 'İstenen hedef farklı bir içerik modeli kullanıyor. $1 modelinden $2 modeline çevrilemiyor.',
 'imagenocrossnamespace' => 'Dosya, dosyalar için olmayan ad alanına taşınamaz',
 'nonfile-cannot-move-to-file' => 'Dosya olmayanlar, dosya ad alanına taşınamaz',
 'imagetypemismatch' => 'Yeni dosya eklentisi tipiyle eşleşmiyor',
@@ -2924,6 +3007,7 @@ Sonuncu durumda, bir link de kullanabilirsiniz, ör: "[[{{MediaWiki:Mainpage}}]]
 'exportcuronly' => 'Geçmiş sürümleri almadan sadece son sürümü al',
 'exportnohistory' => "----
 '''Not:''' Sayfaların tüm geçmişini bu formla dışa aktarmak, performans nedenlerinden ötürü devre dışı bırakılmıştır.",
+'exportlistauthors' => 'Her sayfa için katkıda bulunanların tam listesi içer',
 'export-submit' => 'Aktar',
 'export-addcattext' => 'Aşağıdaki kategoriden maddeler ekle:',
 'export-addcat' => 'Ekle',
@@ -2954,8 +3038,12 @@ Genel MediaWiki yerelleştirmesine katkıda bulunmak isterseniz, lütfen [https:
 'thumbnail-more' => 'Büyüt',
 'filemissing' => 'Dosya bulunmadı',
 'thumbnail_error' => 'Küçük resim oluşturmada hata: $1',
+'thumbnail_error_remote' => '$1 için hata mesajı:
+$2',
 'djvu_page_error' => 'DjVu sayfası kapsamdışı',
 'djvu_no_xml' => 'DjVu dosyası için XML alınamıyor',
+'thumbnail-temp-create' => 'Geçici küçük resim dosyası oluşturulamıyor',
+'thumbnail-dest-create' => 'Küçük resim hedefe kaydedilemiyor',
 'thumbnail_invalid_params' => 'Geçersiz küçük resim parametreleri',
 'thumbnail_dest_directory' => 'Hedef dizini oluşturulamıyor',
 'thumbnail_image-type' => 'Görüntü türü desteklenmiyor',
@@ -3004,6 +3092,15 @@ Geçici dosya kayıp.',
 'import-upload' => 'XML bilgileri yükle',
 'import-token-mismatch' => 'Oturum verisi kaybı. Lütfen yeniden deneyin.',
 'import-invalid-interwiki' => 'Belirtilen vikiden içe aktarım yapılamaz.',
+'import-error-edit' => '"$1" sayfası içe aktarılamadı çünkü sayfayı değiştirmeye yetkiniz yok.',
+'import-error-create' => '"$1" sayfası içe aktarılamadı çünkü sayfayı oluşturmaya yetkiniz yok.',
+'import-error-interwiki' => '"$1" sayfası içe aktarılamadı çünkü sayfanın adı dış bağlantı için ayrılmış (vikilerarası).',
+'import-error-special' => '"$1" sayfası içe aktarılamadı çünkü sayfalara izin vermeyen özel bir ad alanına ait.',
+'import-error-invalid' => '"$1" sayfası içe aktarılamadı çünkü sayfa adı geçersiz.',
+'import-error-unserialize' => '"$1" sayfasının $2 revizyonu serileştirilmesi geri alınamıyor. Revizyonun $4 olarak serileştirilmiş $3 içerik modelini kullandığı raporlandı.',
+'import-options-wrong' => 'Yanlış {{PLURAL:$2|seçenek|seçenek}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Verilen kök sayfa geçersiz bir başlık.',
+'import-rootpage-nosubpage' => 'Kök sayfanın "$1" ad alanı alt sayfalara izin vermiyor.',
 
 # Import log
 'importlogpage' => 'Aktarım günlüğü',
@@ -3016,6 +3113,10 @@ Geçici dosya kayıp.',
 # JavaScriptTest
 'javascripttest' => 'JavaScript denemesi',
 'javascripttest-title' => '$1 testleri çalışıyor',
+'javascripttest-pagetext-noframework' => 'Bu sayfa JavaScript testleri çalıştırmak için ayrılmıştır.',
+'javascripttest-pagetext-unknownframework' => 'Bilinmeyen test çerçevesi "$1".',
+'javascripttest-pagetext-frameworks' => 'Lütfen aşağıdaki test çerçevelerinden birini seçin: $1',
+'javascripttest-pagetext-skins' => 'Testleri koşmak için bir tema seçin:',
 'javascripttest-qunit-intro' => 'mediawiki.org üzerinden [$1 deneme belgelerine] bakınız.',
 'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit deneme paketi',
 
@@ -3117,11 +3218,13 @@ Geçici dosya kayıp.',
 'spambot_username' => 'Medyaviki spam temizleme',
 'spam_reverting' => '$1 ile bağlantı içermeyen son sürüme geri dönülüyor',
 'spam_blanking' => 'Tüm revizyonlar $1 sayfasına bağlantı içeriyor, boşaltılıyor',
+'spam_deleting' => 'Tüm revizyonlar $1 sayfasına bağlantı içeriyor, siliniyor',
 'simpleantispam-label' => "Anti-spam denetimi.
-Bunu '''doldurmayın'''!",
+Bunu '''doldurMAyın'''!",
 
 # Info page
 'pageinfo-title' => 'Bilgi için "$1"',
+'pageinfo-not-current' => 'Üzgünüz, eski sürümler için bu bilgileri sağlamamız mümkün değildir.',
 'pageinfo-header-basic' => 'Temel bilgiler',
 'pageinfo-header-edits' => 'Düzenleme geçmişi',
 'pageinfo-header-restrictions' => 'Sayfa koruması',
@@ -3131,14 +3234,17 @@ Bunu '''doldurmayın'''!",
 'pageinfo-length' => 'Sayfa uzunluğu (bayt cinsinden)',
 'pageinfo-article-id' => 'Sayfa ID',
 'pageinfo-language' => 'Sayfa içeriğinin dili',
-'pageinfo-robot-policy' => 'Arama motoru durumu',
-'pageinfo-robot-index' => 'İndekslenebilir',
-'pageinfo-robot-noindex' => 'İndekslenemez',
+'pageinfo-content-model' => 'Sayfa içerik modeli',
+'pageinfo-robot-policy' => 'Robotlar tarafından endeksleniyor',
+'pageinfo-robot-index' => 'İzin verilmiş',
+'pageinfo-robot-noindex' => 'İzin verilmedi',
 'pageinfo-views' => 'Görüntülenme sayısı',
 'pageinfo-watchers' => 'Sayfanın izleyici sayısı',
-'pageinfo-redirects-name' => 'Bu sayfaya yönlendirmeler',
+'pageinfo-few-watchers' => '$1 {{PLURAL:$1|izleyiciden|izleyiciden}} az',
+'pageinfo-redirects-name' => 'Bu sayfaya yönlendirme sayısı',
 'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'Bu sayfanın alt sayfaları',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|yönlendirme|yönlendirme}}; $3 {{PLURAL:$3|yönlendirme olmayan|non-yönlendirme olmayan}})',
 'pageinfo-firstuser' => 'Sayfa oluşturucu',
 'pageinfo-firsttime' => 'Sayfa oluşturulma tarihi',
 'pageinfo-lastuser' => 'En son düzenleyici',
@@ -3150,11 +3256,13 @@ Bunu '''doldurmayın'''!",
 'pageinfo-magic-words' => 'Sihirli {{PLURAL:$1|kelimeler|kelimeler}} ($1)',
 'pageinfo-hidden-categories' => 'Gizli {{PLURAL:$1|kategori|kategoriler}} ($1)',
 'pageinfo-templates' => 'Görüntülenen {{PLURAL:$1|şablon|şablonlar}} ($1)',
+'pageinfo-transclusions' => 'Çapraz eklenen {{PLURAL:$1|sayfa|sayfalar}} ($1)',
 'pageinfo-toolboxlink' => 'Sayfa bilgisi',
 'pageinfo-redirectsto' => 'Yönlendirilen',
 'pageinfo-redirectsto-info' => 'bilgi',
 'pageinfo-contentpage' => 'Bir içerik sayfası sayılır',
 'pageinfo-contentpage-yes' => 'Evet',
+'pageinfo-protect-cascading' => 'korumalar buradan kademelendiriliyor',
 'pageinfo-protect-cascading-yes' => 'Evet',
 'pageinfo-protect-cascading-from' => 'Korumalar üzerinden geçiş',
 'pageinfo-category-info' => 'Kategori bilgileri',
@@ -3175,6 +3283,8 @@ Bunu '''doldurmayın'''!",
 'markedaspatrollederror' => 'Kontrol edilmedi',
 'markedaspatrollederrortext' => 'Gözlenmiş olarak işaretlemek için bir revizyon belirtmelisiniz.',
 'markedaspatrollederror-noautopatrol' => 'Kendi değişikliklerinizi kontrol edilmiş olarak işaretleyemezsiniz.',
+'markedaspatrollednotify' => '$1 için bu değişiklik kontrol edildi olarak işaretlendi.',
+'markedaspatrollederrornotify' => 'Kontrol edildi olarak işaretleme başarısız oldu.',
 
 # Patrol log
 'patrol-log-page' => 'Kontrol kaydı',
@@ -3209,7 +3319,7 @@ Bunu çalıştırmak, sisteminizi tehlikeye atabilir.",
 'svg-long-desc' => 'SVG dosyası, sözde $1 × $2 piksel, dosya boyutu: $3',
 'svg-long-desc-animated' => 'Hareketli SVG dosyası, sözde $1 × $2 piksel, dosya boyutu: $3',
 'svg-long-error' => 'Geçersiz SVG dosyası: $1',
-'show-big-image' => 'Tam çözünürlük',
+'show-big-image' => 'Özgün dosya',
 'show-big-image-preview' => 'Ön izleme boyutu: $1.',
 'show-big-image-other' => 'Diğer {{PLURAL:$2|çözünürlük|çözünürlükleri}}: $1.',
 'show-big-image-size' => '$1 × $2 piksel',
@@ -3218,6 +3328,8 @@ Bunu çalıştırmak, sisteminizi tehlikeye atabilir.",
 'file-info-png-looped' => 'döngüye girdi',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|defa|defa}} oynatıldı',
 'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frames}}',
+'file-no-thumb-animation' => "'''Not: Teknik sınırlamalar nedeniyle, bu dosyanın küçük resimlerinde animasyon yoktur.'''",
+'file-no-thumb-animation-gif' => "'''Not: Teknik sınırlamalar nedeniyle, bu gibi yüksek çözünürlüklü GIF resimlerinin küçük resimlerinde animasyon yoktur.'''",
 
 # Special:NewFiles
 'newimages' => 'Yeni dosya galerisi',
@@ -3407,13 +3519,18 @@ Diğerleri varsayılan olarak gizlenecektir.
 'exif-gpsdifferential' => 'GPS differential correction',
 'exif-jpegfilecomment' => 'JPEG dosyası yorumu',
 'exif-keywords' => 'Anahtar kelimeler',
+'exif-worldregioncreated' => 'Resmin çekildiği dünya bölgesi',
 'exif-countrycreated' => 'Resmin alındığı ülke',
+'exif-countrycodecreated' => 'Resmin çekildiği ülke kodu',
+'exif-provinceorstatecreated' => 'Resmin çekildiği eyalet ya da il',
 'exif-citycreated' => 'Resmin alındığı şehir',
+'exif-sublocationcreated' => 'Resmin çekildiği şehrin alt bölgesi',
 'exif-worldregiondest' => 'Gösterilen bölge',
 'exif-countrydest' => 'Gösterilen ülke',
 'exif-countrycodedest' => 'Gösterilen ülke kodu',
 'exif-provinceorstatedest' => 'Gösterilen il ya da devlet/eyalet',
 'exif-citydest' => 'Gösterilen Şehir',
+'exif-sublocationdest' => 'Şehrin alt bölgesi gösteriliyor',
 'exif-objectname' => 'Kısa başlık',
 'exif-specialinstructions' => 'Özel talimatlar',
 'exif-headline' => 'Başlık',
@@ -3423,26 +3540,35 @@ Diğerleri varsayılan olarak gizlenecektir.
 'exif-urgency' => 'Aciliyet',
 'exif-fixtureidentifier' => 'Fikstür adı',
 'exif-locationdest' => 'Yerin konumu',
+'exif-locationdestcode' => 'Konumun kodu tanımlandı',
+'exif-objectcycle' => 'Ortamın planlandığı günün saati',
 'exif-contact' => 'İletişim bilgileri',
 'exif-writer' => 'Yazar',
 'exif-languagecode' => 'Dil',
 'exif-iimversion' => 'IIM sürümü',
 'exif-iimcategory' => 'Kategori',
+'exif-iimsupplementalcategory' => 'Tamamlayıcı kategoriler',
 'exif-datetimeexpires' => 'Bu tarihten sonra kullanmayın:',
+'exif-datetimereleased' => 'Tarihinde yayınlandı',
+'exif-originaltransmissionref' => 'Orijinal iletim konum kodu',
 'exif-identifier' => 'Tanımlayıcı',
 'exif-lens' => 'Kullanılan objektif',
 'exif-serialnumber' => 'Kameranın seri numarası',
 'exif-cameraownername' => 'Kameranın sahibi',
 'exif-label' => 'Etiket',
+'exif-datetimemetadata' => 'Üstveri son değişim tarihi',
 'exif-nickname' => 'Görüntünün resmî olmayan adı',
 'exif-rating' => 'Oylama (5 üzerinden)',
+'exif-rightscertificate' => 'Hak yönetimi sertifikası',
 'exif-copyrighted' => 'Telif hakkı durumu',
 'exif-copyrightowner' => 'Telif hakkı sahibi',
 'exif-usageterms' => 'Kullanım şartları',
 'exif-webstatement' => 'Çevrimiçi telif hakkı bildirimi',
+'exif-originaldocumentid' => 'Özgün belgenin benzersiz kimliği',
 'exif-licenseurl' => 'Telif hakkı lisansı için URL',
 'exif-morepermissionsurl' => 'Alternatif lisans bilgileri',
 'exif-attributionurl' => 'Bu çalışmayı yeniden kullanırken lütfen bağlantı verin',
+'exif-preferredattributionname' => 'Bu çalışmayı yeniden kullanırken, lütfen atıf verin',
 'exif-pngfilecomment' => 'PNG dosyası yorumu',
 'exif-disclaimer' => 'Sorumluluk reddi',
 'exif-contentwarning' => 'İçerik uyarısı',
@@ -3458,6 +3584,9 @@ Diğerleri varsayılan olarak gizlenecektir.
 
 # Exif attributes
 'exif-compression-1' => 'Sıkıştırılmamış',
+'exif-compression-2' => 'CCITT Grup 3 1-Boyutlu Değiştirilmiş Huffman koşu uzunluğu kodlaması',
+'exif-compression-3' => 'CCITT Grup 3 faks kodlaması',
+'exif-compression-4' => 'CCITT Grup 4 faks kodlaması',
 'exif-compression-6' => 'JPEG',
 
 'exif-copyrighted-true' => 'Telif hakkı',
@@ -3644,6 +3773,7 @@ Diğerleri varsayılan olarak gizlenecektir.
 'exif-gpsdirection-m' => 'Manyetik yönü',
 
 'exif-ycbcrpositioning-1' => 'Ortalanmış',
+'exif-ycbcrpositioning-2' => 'Eş-yerleştirilmiş',
 
 'exif-dc-contributor' => 'Katkıda bulunanlar',
 'exif-dc-coverage' => 'Medyanın konumsal ya da zamansal kapsamı',
@@ -3741,13 +3871,13 @@ iptal etmek için aşağıdaki bağlantıyı takip edin:
 $5
 
 Bu onay kodu $4 tarihine kadar geçerli olacak.',
-'confirmemail_body_set' => 'Birisi $1 IP adresiyle {{SITENAME}} sitesinde "$2" kullanıcı hesabının e-posta adresi olarak bu e-posta adresini belirtti.
+'confirmemail_body_set' => 'Birisi, muhtemelen siz, $1 IP adresiyle {{SITENAME}} sitesinde "$2" kullanıcı hesabının e-posta adresi olarak bu e-posta adresini belirtti.
 
-Eğer bu işlemi yapan sizseniz ve {{SITENAME}} sitesindeki e-posta işlevlerini tekrar aktif etmek istiyorsanız alttaki bağlantıyı tarayıcınızda açmanız gerekiyor:
+Bu hesabın gerçekten size ait olduğunu onaylamak ve {{SITENAME}} sitesindeki e-posta işlevlerini aktif etmek için alttaki bağlantıyı tarayıcınızda açmanız gerekiyor:
 
 $3
 
-Eğer bu işlemi yapan siz değilseniz ve böyle bir üyeliğiniz yoksa e-posta onay işlemini iptal etmek için alttaki bağlantıyı tarayıcınızda açmanız gerekiyor:
+Eğer bu hesap size ait değilse, e-posta adresi onayını iptal etmek için alttaki bağlantıyı takip edin:
 
 $5
 
@@ -3758,6 +3888,7 @@ Bu onay kodu $4 tarihine kadar geçerlidir.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Vikilerarası çapraz ekleme devre dışı]',
 'scarytranscludefailed' => '[$1 için şablon alımı başarısız oldu]',
+'scarytranscludefailed-httpstatus' => '[$1 için şablon alımı başarısız oldu: HTTP $2]',
 'scarytranscludetoolong' => '[URL çok uzun]',
 
 # Delete conflict
@@ -3877,6 +4008,8 @@ Ayrıca [[Special:EditWatchlist|standart düzenleme sayfasını]] da kullanabili
 'version-license' => 'Lisans',
 'version-poweredby-credits' => "Bu wiki '''[https://www.mediawiki.org/ MediaWiki]''' programı kullanılarak oluşturulmuştur, telif © 2001-$1 $2.",
 'version-poweredby-others' => 'diğerleri',
+'version-poweredby-translators' => 'translatewiki.net çevirmenleri',
+'version-credits-summary' => "Aşağıdaki kişileri [[Special:Version|MediaWiki]]'ye katkılarından dolayı takdir ediyoruz.",
 'version-license-info' => "MediaWiki özgür bir yazılımdır; MediaWiki'yi, Özgür Yazılım Vakfı tarafından yayımlanmış olan GNU Genel Kamu Lisansının 2. veya (seçeceğiniz) daha sonraki bir sürümünün koşulları altında yeniden dağıtabilir ve/veya değiştirebilirsiniz.
 
 MediaWiki yazılımı faydalı olacağı ümidiyle dağıtılmaktadır; ancak kastedilen SATILABİLİRLİK veya BELİRLİ BİR AMACA UYGUNLUK garantisi hariç HİÇBİR GARANTİSİ YOKTUR. Daha fazla ayrıntı için GNU Genel Kamu Lisansı'na bakınız.
@@ -3892,10 +4025,12 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 # Special:Redirect
 'redirect' => 'Dosya, kullanıcı veya sayfa ID yönlendirme',
 'redirect-legend' => 'Bir dosya veya sayfaya yönlendirme',
-'redirect-summary' => "Bu özel sayfa sizi bir dosya (dosya adı verilen), bir sayfa (bir revizyon ID'si verilen) veya bir kullanıcı sayfasının (sayısal kullanıcı kimliği verilen) adresine yönlendirir.",
+'redirect-summary' => "Bu özel sayfa sizi bir dosya (dosya adı verilen), bir sayfa (bir revizyon ID'si verilen) veya bir kullanıcı sayfasının (sayısal kullanıcı kimliği verilen) adresine yönlendirir. Kullanım: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], ya da  [[{{#Special:Redirect}}/user/101]].",
 'redirect-submit' => 'Git',
+'redirect-lookup' => 'Ara:',
 'redirect-value' => 'Değer:',
 'redirect-user' => 'Kullanıcı kimliği',
+'redirect-revision' => 'Sayfa revizyonu',
 'redirect-file' => 'Dosya adı',
 'redirect-not-exists' => 'Değer bulunamadı',
 
@@ -3912,9 +4047,9 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 
 # Special:SpecialPages
 'specialpages' => 'Özel sayfalar',
+'specialpages-note-top' => 'Gösterge',
 'specialpages-note' => '* Normal özel sayfalar.
-* <span class="mw-specialpagerestricted">Kısıtlı özel sayfalar.</span>
-* <span class="mw-specialpagecached">Önbelleğe alınan özel sayfalar (eskimiş olabilir)</span>',
+* <span class="mw-specialpagerestricted">Kısıtlı özel sayfalar.</span>',
 'specialpages-group-maintenance' => 'Bakım raporları',
 'specialpages-group-other' => 'Diğer özel sayfalar',
 'specialpages-group-login' => 'Oturum aç / hesap edin',
@@ -3946,6 +4081,7 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 'tags' => 'Geçerli değişiklik etiketleri',
 'tag-filter' => '[[Special:Tags|Etiket]] süzgeci:',
 'tag-filter-submit' => 'Süzgeç',
+'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Etiket|Etiketler}}]]: $2)',
 'tags-title' => 'Etiketler',
 'tags-intro' => 'Bu sayfa, yazılımın bir değişikliği işaretleyebileceği etiketleri ve bunların anlamlarını listeler.',
 'tags-tag' => 'Etiket adı',
@@ -3975,6 +4111,7 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 'dberr-problems' => 'Üzgünüz! Bu site teknik zorluklar yaşıyor.',
 'dberr-again' => 'Bir kaç dakika bekleyip tekrar yüklemeyi deneyin.',
 'dberr-info' => '(Veritabanı sunucusuyla irtibat kurulamıyor: $1)',
+'dberr-info-hidden' => '(Veritabanı sunucusuna bağlantı kurulamıyor)',
 'dberr-usegoogle' => 'Bu zaman zarfında Google ile aramayı deneyebilirsiniz.',
 'dberr-outofdate' => 'İçeriğimizin onların dizinlerinde güncel olmayabileceğini dikkate alın.',
 'dberr-cachederror' => 'Aşağıdaki istenen sayfanın önbellekteki bir kopyasıdır, ve güncel olmayabilir.',
@@ -3992,18 +4129,24 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 'htmlform-selectorother-other' => 'Diğer',
 'htmlform-no' => 'Hayır',
 'htmlform-yes' => 'Evet',
+'htmlform-chosen-placeholder' => 'Bir seçenek seçin',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 tam-metin arama desteği ile',
 'sqlite-no-fts' => '$1 tam-metin arama desteği olmaksızın',
 
 # New logging system
-'logentry-delete-delete' => '$1 $3 sayfasını sildi',
-'logentry-delete-restore' => '$1 $3 sayfasını geri getirdi',
-'logentry-delete-revision' => '$1 $3: $4 sayfasında {{PLURAL:$5|bir sürümün|$5 sürümün}} görünürlüğünü değiştirdi',
-'logentry-delete-revision-legacy' => '$1 $3 sayfasındaki sürümlerin görünürlüğünü değiştirdi',
-'logentry-suppress-revision' => '$1 $3: $4 sayfasında {{PLURAL:$5|bir sürümün|$5 sürümün}} görünürlüğünü gizlice değiştirdi',
-'logentry-suppress-revision-legacy' => '$1 $3 sayfasındaki sürümlerin görünürlüğünü değiştirdi',
+'logentry-delete-delete' => '$1 $3 sayfasını {{GENDER:$2|sildi}}',
+'logentry-delete-restore' => '$1 $3 sayfasını {{GENDER:$2|geri getirdi}}',
+'logentry-delete-event' => '$1, $3 sayfasında {{PLURAL:$5|bir günlük girdisinin |$5 günlük girdisinin}} görünürlüğünü {{GENDER:$2|değiştirdi}}: $4',
+'logentry-delete-revision' => '$1, $3 sayfasında {{PLURAL:$5|bir sürümün|$5 sürümün}} görünürlüğünü {{GENDER:$2|değiştirdi}}: $4',
+'logentry-delete-event-legacy' => '$1, $3 sayfasında günlük girdilerinin görünürlüğünü  {{GENDER:$2|değiştirdi}}',
+'logentry-delete-revision-legacy' => '$1 $3 sayfasındaki sürümlerin görünürlüğünü {{GENDER:$2|değiştirdi}}',
+'logentry-suppress-delete' => '$1, $3 sayfasını {{GENDER:$2|bastırdı}}',
+'logentry-suppress-event' => '$1, $3 sayfasında {{PLURAL:$5|bir günlük girdisinin |$5 günlük girdisinin}} görünürlüğünü gizlice {{GENDER:$2|değiştirdi}}: $4',
+'logentry-suppress-revision' => '$1, $3 sayfasında {{PLURAL:$5|bir sürümün|$5 sürümün}} görünürlüğünü gizlice {{GENDER:$2|değiştirdi}}: $4',
+'logentry-suppress-event-legacy' => '$1, $3 sayfasında günlük girdilerinin görünürlüğünü gizlice {{GENDER:$2|değiştirdi}}',
+'logentry-suppress-revision-legacy' => '$1, $3 sayfasındaki sürümlerin görünürlüğünü {{GENDER:$2|değiştirdi}}',
 'revdelete-content-hid' => 'Gizli içerik',
 'revdelete-summary-hid' => 'değişiklik özeti gizlenmiş',
 'revdelete-uname-hid' => 'kullanıcı adı gizli',
@@ -4012,17 +4155,24 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 'revdelete-uname-unhid' => 'kullanıcı adı gösterildi',
 'revdelete-restricted' => 'hizmetliler için uygulanmış kısıtlamalar',
 'revdelete-unrestricted' => 'hizmetliler için kaldırılmış kısıtlamalar',
-'logentry-move-move' => '$1 $3 sayfasını $4 sayfasına taşıdı',
-'logentry-move-move-noredirect' => '$1 $3 sayfasını $4 sayfasına yönlendirme olmaksızın taşıdı',
-'logentry-move-move_redir' => '$1 $3 sayfasını $4 sayfasına yönlendirme üzerinden taşıdı',
-'logentry-patrol-patrol-auto' => '$1 $3 sayfasını $4 sürümü ile kontrol etti',
+'logentry-move-move' => '$1, $3 sayfasını $4 sayfasına {{GENDER:$2|taşıdı}}',
+'logentry-move-move-noredirect' => '$1, $3 sayfasını $4 sayfasına yönlendirme olmaksızın {{GENDER:$2|taşıdı}}',
+'logentry-move-move_redir' => '$1, $3 sayfasını $4 sayfasına yönlendirme üzerinden {{GENDER:$2|taşıdı}}',
+'logentry-move-move_redir-noredirect' => '$1, $3 sayfasını bir yönlendirme üzerine yönlendirme bırakmadan $4 olarak {{GENDER:$2|taşıdı}}',
+'logentry-patrol-patrol' => '$1, $3 sayfasının $4 revizyonunu kontrol edildi olarak {{GENDER:$2|işaretledi}}',
+'logentry-patrol-patrol-auto' => '$1, $3 sayfasının $4 sürümümü otomatik olarak {{GENDER:$2|kontrol etti}}',
 'logentry-newusers-newusers' => 'Kullanıcı hesabı $1 {{GENDER:$2|oluşturuldu}}',
 'logentry-newusers-create' => 'Kullanıcı hesabı $1 {{GENDER:$2|oluşturuldu}}',
 'logentry-newusers-create2' => '$3 kullanıcı hesabı $1 tarafından {{GENDER:$2|oluşturuldu}}',
+'logentry-newusers-byemail' => '$3 kullanıcı hesabı $1 tarafından {{GENDER:$2|oluşturuldu}} ve şifre e-posta ile gönderildi',
 'logentry-newusers-autocreate' => '$1 kullanıcı hesabı otomatik olarak {{GENDER:$2|oluşturuldu}}',
+'logentry-rights-rights' => '$1, $3 için grup üyeliğini $4 iken $5 olarak {{GENDER:$2|değiştirdi}}',
+'logentry-rights-rights-legacy' => '$1, $3 için grup üyeliğini {{GENDER:$2|değiştirdi}}',
+'logentry-rights-autopromote' => '$1, $4 iken $5 olarak otomatik {{GENDER:$2|terfi edildi}}',
 'rightsnone' => '(hiçbiri)',
 
 # Feedback
+'feedback-bugornote' => 'Eğer teknik bir problemi detaylarıyla açıklamaya hazırsanız lütfen [$1 bir hata raporlayın]. Diğer taraftan, aşağıdaki kolay formu kullanabilirsiniz. Yorumunuz, kullanıcı adınızla beraber "[$3 $2]" sayfasına eklenecektir.',
 'feedback-subject' => 'Konu:',
 'feedback-message' => 'Mesaj:',
 'feedback-cancel' => 'İptal',
@@ -4043,15 +4193,20 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 # API errors
 'api-error-badaccess-groups' => 'Bu wiki için dosya yüklemenize izin verilmiyor.',
 'api-error-badtoken' => 'İç hata: Bozuk anahtar.',
+'api-error-copyuploaddisabled' => 'URL ile yükleme bu sunucuda devre dışı bırakılmıştır.',
+'api-error-duplicate' => 'Sitede zaten aynı içerikte başka {{PLURAL:$1|bir [$2 dosya]|[$2 dosyalar]}} var.',
+'api-error-duplicate-archive' => 'Sitede zaten aynı içerikte başka {{PLURAL:$1|bir [$2 dosya]|[$2 dosyalar]}} vardı, ama {{PLURAL:$1|silindi|silindiler}}.',
+'api-error-duplicate-archive-popup-title' => 'Zaten silinmiş çift {{PLURAL:$1|sayfa|sayfalar}}.',
 'api-error-duplicate-popup-title' => 'Çift {{PLURAL:$1|dosya|dosya}}',
 'api-error-empty-file' => 'Gönderdiğiniz dosya boş.',
 'api-error-emptypage' => 'Yeni, boş bir sayfa oluşturmaya izin verilmez.',
 'api-error-fetchfileerror' => 'İç hata: Dosya alınırken bir hata oluştu.',
 'api-error-fileexists-forbidden' => '"$1" adıyla bir dosya zaten mevcut dolayısıyla üzerine yazamazsınız.',
+'api-error-fileexists-shared-forbidden' => '"$1" adında bir dosya ortak havuzda zaten var, ve üzerine yazılamaz.',
 'api-error-file-too-large' => 'Gönderdiğiniz dosya çok büyük.',
 'api-error-filename-tooshort' => 'Dosya adı çok kısa.',
 'api-error-filetype-banned' => 'Bu dosya biçimi yasaklanmıştır.',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|izin verilen bir dosya türü değil|izin verilen bir dosya türü değil}}. İzin verilen {{PLURAL:$3|dosya türü|dosya türleri}} $2.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|izin verilen bir dosya türü değil|izin verilen dosya türleri değil}}. İzin verilen {{PLURAL:$3|dosya türü|dosya türleri}} $2.',
 'api-error-filetype-missing' => 'Dosya uzantısı eksik.',
 'api-error-hookaborted' => 'Yapmaya çalıştığınız değişiklik bir eklenti tarafından iptal edildi.',
 'api-error-http' => 'İç hata: sunucu ile bağlantı kurulamıyor.',
@@ -4067,6 +4222,7 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 'api-error-ok-but-empty' => 'İç hata: Sunucu yanıt vermiyor.',
 'api-error-overwrite' => 'Varolan dosyanın üzerine yazmaya izin verilmiyor.',
 'api-error-stashfailed' => 'İç hata: Sunucu, geçici dosyaları kaybetti.',
+'api-error-publishfailed' => 'İç hata: Sunucu geçici dosyayı yayınlarken başarısız oldu.',
 'api-error-timeout' => 'Sunucu beklenen süre içinde yanıt vermedi.',
 'api-error-unclassified' => 'Bilinmeyen bir hata oluştu.',
 'api-error-unknown-code' => 'Bilinmeyen hata: "$1"',
@@ -4087,17 +4243,37 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 'duration-centuries' => '$1 {{PLURAL:$1|yüzyıl|yüzyıl}}',
 'duration-millennia' => '$1 {{PLURAL:$1|bin yıl|bin yıl}}',
 
+# Image rotation
+'rotate-comment' => 'Resim saat yönünde $1 {{PLURAL:$1|derece|derece}} çevrildi',
+
 # Limit report
 'limitreport-title' => 'Ayrıştırıcı profil verileri:',
 'limitreport-cputime' => 'CPU süresi kullanımı',
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|saniye|saniye}}',
 'limitreport-walltime' => 'Gerçek süre kullanımı',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|saniye|saniye}}',
 'limitreport-ppvisitednodes' => 'Önişlemci düğümü ziyaret sayısı',
 'limitreport-ppgeneratednodes' => 'Önişlemcinin ürettiği düğüm sayısı',
 'limitreport-postexpandincludesize' => 'Gönderi genişliği boyutu dahil',
-'limitreport-postexpandincludesize-value' => '$1/$2 bayt',
+'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|bayt|bayt}}',
 'limitreport-templateargumentsize' => 'Şablon değişkeni boyutu',
+'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|bayt|bayt}}',
 'limitreport-expansiondepth' => 'En yüksek genişleme derinliği',
 'limitreport-expensivefunctioncount' => 'Daha fazla ayrıştırıcı işlev sayısı',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Şablonları genişlet',
+'expand_templates_intro' => 'Bu özel sayfa biraz metni alır ve içindeki tüm şablonları yinelemeli olarak genişletir.
+Ayrıca <code><nowiki>{{</nowiki>#language:…}}</code> gibi desteklenen derleyici fonksiyonlarını ve <code><nowiki>{{</nowiki>CURRENTDAY}}</code> gibi değişkenleri de genişletir.
+Aslında, çift ayraçlı hemen hemen her şeyi genişletir.',
+'expand_templates_title' => 'Durum başlığı, ör {{FULLPAGENAME}} için.:',
+'expand_templates_input' => 'Giriş metni:',
+'expand_templates_output' => 'Sonuç',
+'expand_templates_xml_output' => 'XML üretim',
+'expand_templates_ok' => 'Tamam',
+'expand_templates_remove_comments' => 'Yorumları sil',
+'expand_templates_remove_nowiki' => 'Sonuçlarda <nowiki> etiketlerini bastır',
+'expand_templates_generate_xml' => 'XML derleyici ağacını göster',
+'expand_templates_preview' => 'Önizleme',
+
 );
index 47b3f5e..1430a55 100644 (file)
@@ -180,8 +180,6 @@ $messages = array(
 'ok' => 'Tamam',
 'retrievedfrom' => 'men "$1"',
 'youhavenewmessages' => 'Kıtlux $1 ($2) .',
-'newmessageslink' => 'Ṫebe ḥaṭe',
-'newmessagesdifflink' => 'Degoşo ḥaroyo',
 'youhavenewmessagesmulti' => 'Kitlux Ṫebe ḥaṭe b$1',
 'editsection' => 'mşaḥlaf',
 'editold' => 'mşaḥlaf',
index d26a779..a8e6c4e 100644 (file)
@@ -244,8 +244,6 @@ See [[Special:Version|version page]].',
 'ok' => 'Hiswona',
 'retrievedfrom' => 'ku suka e "$1"',
 'youhavenewmessages' => 'U na $1 ($2).',
-'newmessageslink' => 'Marungula mantswa',
-'newmessagesdifflink' => 'last change',
 'youhavenewmessagesmulti' => 'Una marungula mantswa hi $1',
 'editsection' => 'Lulamisa',
 'editold' => 'Lulamisa',
@@ -908,4 +906,8 @@ Lebyi n'wana vuxokoxoko bya finiso byitumbetiwile.
 # Special:Tags
 'tag-filter' => 'Xihluti xa [[Special:Tags|Xi angi]]:',
 
+# Special:ExpandTemplates
+'expand_templates_ok' => 'Hiswona',
+'expand_templates_preview' => 'Ringanisa',
+
 );
index 391c4b7..e8f53f2 100644 (file)
@@ -483,8 +483,6 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Чыганагы — "$1"',
 'youhavenewmessages' => 'Сездә $1 бар ($2).',
-'newmessageslink' => 'яңа хәбәрләр',
-'newmessagesdifflink' => 'бәхәс битегезнең соңгы үзгәртүе',
 'youhavenewmessagesfromusers' => 'Сезгә {{PLURAL:$3|$3 кулланучыдан}} $1 килде ($2).',
 'youhavenewmessagesmanyusers' => 'Сез бик күп кулланучыдан $1 алдыгыз ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|яңа хәбәр}}',
@@ -1189,7 +1187,6 @@ $1",
 'preferences' => 'Көйләнмәләр',
 'mypreferences' => 'Көйләнмәләр',
 'prefs-edits' => 'Үзгәртүләр исәбе:',
-'prefsnologin' => 'Кермәгәнсез',
 'changepassword' => 'Серсүзне үзгәртү',
 'prefs-skin' => 'Күренеш',
 'skin-preview' => 'Алдан карау',
@@ -1374,6 +1371,7 @@ $1",
 'recentchanges-label-minor' => 'Бу кече үзгәртү',
 'recentchanges-label-bot' => 'Бу үзгәртү бот белән эшләнгән иде',
 'recentchanges-label-unpatrolled' => 'Үзгәртүне әлегә тикшермәгәннәр',
+'recentchanges-legend-newpage' => '$1 — яңа бит',
 'rcnote' => 'Аста $4 $5 вакытынна соңгы {{PLURAL:$2|1|$2}} көн эчендә булган соңгы {{PLURAL:$1|1|$1}} үзгәртмә күрсәтелә:',
 'rcnotefrom' => "Астарак '''$2''' башлап ('''$1''' кадәр) үзгәртүләр күрсәтелгән.",
 'rclistfrom' => '$1 башлап яңа үзгәртүләрне күрсәт',
@@ -2567,4 +2565,8 @@ $1',
 'api-error-uploaddisabled' => 'Бу викидә файллар йөкләү мөмкинлеге сүндерелгән.',
 'api-error-verification-error' => 'Бәлки, бу файл бозылгандыр яки дөрес түгел киңәйтелмәгә ия.',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Үрнәкләрне ачу',
+'expand_templates_ok' => 'OK',
+
 );
index c388277..69f9af2 100644 (file)
@@ -347,8 +347,6 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Çığanağı — "$1"',
 'youhavenewmessages' => 'Sezdä $1 bar ($2).',
-'newmessageslink' => 'yaña xäbärlär',
-'newmessagesdifflink' => 'bäxäs bitegezneñ soñğı üzgärtüe',
 'youhavenewmessagesmulti' => 'Sezgä monda yaña xäbärlär bar: $1',
 'editsection' => 'üzgärtü',
 'editold' => 'üzgärtü',
@@ -923,7 +921,6 @@ Barlıq alannarda (bäxäs bitläre, ürnäklär, h.b.) ezläw öçen ''all'' s
 'preferences' => 'Köylänmälär',
 'mypreferences' => 'Köylänmälärem',
 'prefs-edits' => 'Üzgärtülär isäbe:',
-'prefsnologin' => 'Kermägänsez',
 'changepassword' => 'Sersüzne üzgärtü',
 'prefs-skin' => 'Küreneş',
 'skin-preview' => 'Aldan qaraw',
index 953210f..03ab388 100644 (file)
@@ -73,7 +73,7 @@ $magicWords = array(
        'pagename'                  => array( '1', 'АРЫННЫҢАДЫ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
        'namespace'                 => array( '1', 'АТТАРДЕЛГЕМИ', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
        'namespacee'                => array( '1', 'АТТАРДЕЛГЕМИ2', 'ПРОСТРАНСТВО_ИМЁН_2', 'NAMESPACEE' ),
-       'namespacenumber'           => array( '1', 'АТТАРДЕЛГЕМИНИҢСАНЫ', 'NAMESPACENUMBER' ),
+       'namespacenumber'           => array( '1', 'АТТАРДЕЛГЕМИНИҢСАНЫ', 'НОМЕР_ПРОСТРАНСТВА_ИМЁН', 'NAMESPACENUMBER' ),
        'talkspace'                 => array( '1', 'ЧУГААДЕЛГЕМИ', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
        'talkspacee'                => array( '1', 'ЧУГААДЕЛГЕМИ2', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2', 'TALKSPACEE' ),
        'img_right'                 => array( '1', 'оң', 'справа', 'right' ),
@@ -90,9 +90,9 @@ $magicWords = array(
        'tag'                       => array( '0', 'демдек', 'метка', 'тег', 'тэг', 'tag' ),
        'hiddencat'                 => array( '1', '__ЧАЖЫТ_АҢГЫЛАЛ__', '__СКРЫТАЯ_КАТЕГОРИЯ__', '__HIDDENCAT__' ),
        'pagesincategory'           => array( '1', '__АҢГЫЛАЛ_АРЫННАРЫ__', 'СТРАНИЦ_В_КАТЕГОРИИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesincategory_all'       => array( '0', 'шупту', 'all' ),
-       'pagesincategory_pages'     => array( '0', 'арыннар', 'pages' ),
-       'pagesincategory_files'     => array( '0', 'файлдар', 'files' ),
+       'pagesincategory_all'       => array( '0', 'шупту', 'все', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'арыннар', 'страницы', 'pages' ),
+       'pagesincategory_files'     => array( '0', 'файлдар', 'файлы', 'files' ),
 );
 
 $bookstoreList = array(
@@ -321,8 +321,6 @@ $messages = array(
 'ok' => 'Чөп',
 'retrievedfrom' => '«$1» деп адрестен парлаттынган',
 'youhavenewmessages' => 'Силерде $1 ($2) бар.',
-'newmessageslink' => 'чаа чагаалар',
-'newmessagesdifflink' => 'эрткен өскерлиишкин',
 'youhavenewmessagesmulti' => '«$1» деп арында силерге чаа чагаалар бар.',
 'editsection' => 'эдер',
 'editold' => 'эдер',
@@ -751,6 +749,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'recentchanges-label-minor' => 'Бо өскерлиишкин бичии-дир',
 'recentchanges-label-bot' => 'Бо эдилгени робот күүсеткен.',
 'recentchanges-label-unpatrolled' => 'Бо өскертилге истетинмээн (патрульдаттынмаан)',
+'recentchanges-legend-newpage' => '$1 — чаа арын',
 'rcnote' => "$4 $5 өйде соңгу '''$2''' {{PLURAL:$2|хонуктуң}} {{PLURAL:$1|сөөлгү '''$1''' '''өскерилгелери'''}} .",
 'rcnotefrom' => 'Адаанда <strong>$2</strong> тура (<strong>$1</strong> чедир) өскертилгелерни санаан.',
 'rclistfrom' => '$1 тура чаа өскерилгелерни көргүзер',
index 1803bc0..96f14b9 100644 (file)
@@ -325,8 +325,6 @@ $1',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => '"$1" دىن ئېرىشكەن',
 'youhavenewmessages' => 'سىزدە $1 ($2) بار.',
-'newmessageslink' => 'يېڭى ئۇچۇر',
-'newmessagesdifflink' => 'ئاخىرقى ئۆزگەرتىش',
 'youhavenewmessagesfromusers' => 'سىزنىڭ {{PLURAL:$3|باشقا ئىشلەتكۈچى|$3 ئىشلەتكۈچى}} $1  ($2)ڭىز بار.',
 'youhavenewmessagesmanyusers' => 'سىزنىڭ نۇرغۇن ئىشلەتكۈچىدىن كەلگەن $1  ($2) بار.',
 'newmessageslinkplural' => '{{PLURAL:$1|بىر يېڭى |يېڭى ئۇچۇر}}ئۇچۇر',
@@ -1196,7 +1194,6 @@ $1",
 'preferences' => 'مايىللىق',
 'mypreferences' => 'مايىللىق',
 'prefs-edits' => 'تەھرىر سانى:',
-'prefsnologin' => 'تىزىمغا كىرمىدى',
 'changepassword' => 'پارولنى ئۆزگەرتىش',
 'prefs-skin' => 'تېرە',
 'skin-preview' => 'ئالدىن كۆزەت',
@@ -1486,6 +1483,7 @@ HTML بەلگىسىنى تەكشۈرۈڭ.',
 'recentchanges-label-minor' => 'بۇ ئازراقلا تەھرىرلەش',
 'recentchanges-label-bot' => 'بۇ تەھرىرنى ماشىنا ئادەم ئېلىپ بارغان',
 'recentchanges-label-unpatrolled' => 'بۇ تەھرىر تېخى كۆزىتىلمىگەن',
+'recentchanges-legend-newpage' => '$1 - يېڭى بەت',
 'rcnote' => "تۆۋەندىكى $4 $5 يېقىنقى {{PLURAL:$2|كۈن|'''$2''' كۈن}}  ئىچىدىكى {{PLURAL:$1| '''1''' ئۆزگەرتىش| '''$1''' ئۆزگەرتىش}}  خاتىرىسى",
 'rcnotefrom' => "تۆۋەندىكىسى '''$2''' نىڭ ئۆزگەرتىشى (ئەڭ كۆپ بولغاندا '''$1''' كۆرسىتىدۇ )",
 'rclistfrom' => '$1 دىن باشلانغان يېڭى ئۆزگەرتىشنى كۆرسەت',
@@ -3975,4 +3973,9 @@ MediaWiki ئىشلىتىش مەقسىتىنى ئاساس قىلىپ ئېلان 
 'limitreport-walltime' => 'ئەمەلىي كەتكەن ۋاقىت',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|سېكۇنت}}',
 
+# Special:ExpandTemplates
+'expand_templates_output' => 'نەتىجە',
+'expand_templates_ok' => 'جەزملە',
+'expand_templates_preview' => 'ئالدىن كۆزەت',
+
 );
index 7b20e61..d839a85 100644 (file)
@@ -120,7 +120,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'Помилковий_заголовок' ),
        'Blankpage'                 => array( 'Порожня_сторінка' ),
        'Block'                     => array( 'Заблокувати' ),
-       'Blockme'                   => array( 'Заблокуйте_мене' ),
        'Booksources'               => array( 'Джерела_книг' ),
        'BrokenRedirects'           => array( 'Розірвані_перенаправлення' ),
        'Categories'                => array( 'Категорії' ),
@@ -132,10 +131,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Створити_обліковий_запис' ),
        'Deadendpages'              => array( 'Сторінки_без_посилань' ),
        'DeletedContributions'      => array( 'Вилучений_внесок' ),
-       'Disambiguations'           => array( 'Неоднозначні_посилання' ),
        'DoubleRedirects'           => array( 'Подвійні_перенаправлення' ),
        'EditWatchlist'             => array( 'Редагувати_список_спостереження' ),
        'Emailuser'                 => array( 'Лист_користувачеві' ),
+       'ExpandTemplates'           => array( 'Розгортання_шаблонів' ),
        'Export'                    => array( 'Експорт' ),
        'Fewestrevisions'           => array( 'Найменшредаговані' ),
        'FileDuplicateSearch'       => array( 'Пошук_дублікатів_файлів' ),
@@ -158,6 +157,8 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'Пошук_за_MIME' ),
        'Mostcategories'            => array( 'Найбільш_категоризовані' ),
        'Mostimages'                => array( 'Найуживаніші_файли' ),
+       'Mostinterwikis'            => array( 'Найбільше_інтервікі' ),
+       'Mostlinked'                => array( 'Найуживаніші_сторінки', 'Найбільше_посилань' ),
        'Mostlinkedcategories'      => array( 'Найуживаніші_категорії' ),
        'Mostlinkedtemplates'       => array( 'Найуживаніші_шаблони' ),
        'Mostrevisions'             => array( 'Найбільш_редаговані' ),
@@ -278,8 +279,8 @@ $magicWords = array(
        'img_center'                => array( '1', 'центр', 'center', 'centre' ),
        'img_framed'                => array( '1', 'обрамити', 'рамка', 'обрамить', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'безрамки', 'frameless' ),
-       'img_page'                  => array( '1', 'сторінка=$1', 'сторінка $1', 'страница=$1', 'страница $1', 'страница $1', 'page=$1', 'page $1' ),
-       'img_upright'               => array( '1', 'зверхуправоруч', 'зверхуправоруч=$1', 'зверхуправоруч $1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа_$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_page'                  => array( '1', 'сторінка=$1', 'сторінка_$1', 'страница=$1', 'страница_$1', 'страница $1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'зверхуправоруч', 'зверхуправоруч=$1', 'зверхуправоруч_$1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа_$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'межа', 'граница', 'border' ),
        'img_baseline'              => array( '1', 'основа', 'основание', 'baseline' ),
        'img_sub'                   => array( '1', 'під', 'под', 'sub' ),
@@ -641,12 +642,10 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Отримано з $1',
 'youhavenewmessages' => 'Ви отримали $1 ($2).',
-'newmessageslink' => 'нові повідомлення',
-'newmessagesdifflink' => 'остання зміна',
 'youhavenewmessagesfromusers' => 'Ви отримали $1 від {{PLURAL:$3|іншого дописувача|$3 інших дописувачів}} ($2).',
 'youhavenewmessagesmanyusers' => 'Ви отримали $1 від багатьох дописувачів ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|нове повідомлення|нові повідомлення|нових повідомлень}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|остання зміна|останні зміни|останніх змін}}',
+'newmessageslinkplural' => '{{PLURAL:$1|нове повідомлення|999=нові повідомлення}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|остання зміна|999=останні зміни}}',
 'youhavenewmessagesmulti' => 'Ви отримали нові повідомлення на $1',
 'editsection' => 'ред.',
 'editold' => 'ред.',
@@ -1506,7 +1505,6 @@ $1",
 'preferences' => 'Налаштування',
 'mypreferences' => 'Налаштування',
 'prefs-edits' => 'Кількість редагувань:',
-'prefsnologin' => 'Ви не ввійшли в систему',
 'prefsnologintext2' => 'Потрібно $1 для налаштування параметрів користувача.',
 'changepassword' => 'Змінити пароль',
 'prefs-skin' => 'Оформлення',
@@ -1810,6 +1808,9 @@ $1",
 'recentchanges-label-minor' => 'Це незначна зміна',
 'recentchanges-label-bot' => 'Це редагування зроблене ботом',
 'recentchanges-label-unpatrolled' => 'Це редагування ще не було відпатрульоване',
+'recentchanges-label-plusminus' => 'Розмір сторінки змінився на таке число байтів',
+'recentchanges-legend-newpage' => '(див. також [[Special:NewPages|список нових сторінок]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "{{PLURAL:$1|Остання '''$1''' зміна|Останні '''$1''' зміни|Останні '''$1''' змін}} за '''$2''' {{PLURAL:$2|день|дні|днів}}, на час $5, $4.",
 'rcnotefrom' => 'Нижче відображені редагування з <strong>$2</strong> (до <strong>$1</strong>).',
 'rclistfrom' => 'Показати редагування починаючи з $1.',
@@ -4461,4 +4462,21 @@ MediaWiki поширюється в надії, що вона буде кори
 'limitreport-expansiondepth' => 'Найвища глибина розширення',
 'limitreport-expensivefunctioncount' => 'Число дорогої функції аналізатора',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Розгортання шаблонів',
+'expand_templates_intro' => 'Ця спеціальна сторінка перетворює текст, рекурсивно розгортаючи всі шаблони в ньому.
+Також розгортаються всі функції парсера
+<nowiki>{{</nowiki>#language:...}} і змінні типу
+<nowiki>{{</nowiki>CURRENTDAY}}.
+Фактично, усе всередині подвійних фігурних дужок.',
+'expand_templates_title' => 'Заголовок сторінки для {{FULLPAGENAME}} тощо:',
+'expand_templates_input' => 'Вхідний текст:',
+'expand_templates_output' => 'Результат',
+'expand_templates_xml_output' => 'XML-вивід',
+'expand_templates_ok' => 'Гаразд',
+'expand_templates_remove_comments' => 'Вилучити коментарі',
+'expand_templates_remove_nowiki' => 'Ігнорувати теги <nowiki> в результаті',
+'expand_templates_generate_xml' => 'Показати дерево аналізу XML',
+'expand_templates_preview' => 'Попередній перегляд',
+
 );
index 1a54af9..d59a34d 100644 (file)
@@ -22,6 +22,7 @@
  * @author زكريا
  * @author سمرقندی
  * @author محبوب عالم
+ * @author පසිඳු කාවින්ද
  */
 
 $fallback8bitEncoding = 'windows-1256';
@@ -63,7 +64,6 @@ $specialPageAliases = array(
        'Badtitle'                  => array( 'خراب_عنوان' ),
        'Blankpage'                 => array( 'خالی_صفحہ' ),
        'Block'                     => array( 'پابندی', 'دستور_شبکی_پابندی', 'پابندی_بر_صارف' ),
-       'Blockme'                   => array( 'میری_پابندی' ),
        'Booksources'               => array( 'کتابی_وسائل' ),
        'BrokenRedirects'           => array( 'شکستہ_رجوع_مکررات' ),
        'Categories'                => array( 'زمرہ_جات' ),
@@ -75,7 +75,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'تخلیق_کھاتہ' ),
        'Deadendpages'              => array( 'مردہ_صفحات' ),
        'DeletedContributions'      => array( 'حذف_شدہ_شراکتیں' ),
-       'Disambiguations'           => array( 'ضد_ابہام_صفحات' ),
        'DoubleRedirects'           => array( 'دوہرے_رجوع_مکررات' ),
        'EditWatchlist'             => array( 'ترمیم_زیر_نظر' ),
        'Emailuser'                 => array( 'صارف_ڈاک' ),
@@ -417,8 +416,6 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => '‘‘$1’’ مستعادہ منجانب',
 'youhavenewmessages' => 'آپکے لیۓ ایک $1 ہے۔ ($2)',
-'newmessageslink' => 'نئے پیغامات',
-'newmessagesdifflink' => 'تـجـدیـد مـاقـبل آخـر سے فـرق',
 'newmessagesdifflinkplural' => 'آخری {{PLURAL:$1|تبدیلی|تبدیلیاں}}',
 'youhavenewmessagesmulti' => 'ء$1 پر آپ کیلئے نئے پیغامات ہیں',
 'editsection' => 'ترمیم',
@@ -958,7 +955,6 @@ $1",
 'preferences' => 'ترجیحات',
 'mypreferences' => 'میری ترجیہات',
 'prefs-edits' => 'تدوینات کی تعداد:',
-'prefsnologin' => 'نا داخل شدہ حالت',
 'changepassword' => 'کلمۂ شناخت تبدیل کریں',
 'prefs-skin' => 'جِلد',
 'skin-preview' => 'پیش منظر',
@@ -1643,4 +1639,12 @@ $1 × $2 عکصر (پکسلز)، حجم ملف: $3، MIME قسم: $4',
 # Search suggestions
 'searchsuggest-search' => 'تلاش',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'سانچے کو وسیع کریں',
+'expand_templates_input' => 'ان پٹ متن:',
+'expand_templates_output' => 'نتیجہ',
+'expand_templates_ok' => 'ٹھیک ہے',
+'expand_templates_remove_comments' => 'تبصرے حذف کریں',
+'expand_templates_preview' => 'پیش نظارہ',
+
 );
index f6ae821..608d502 100644 (file)
@@ -371,11 +371,9 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => ' "$1" dan olindi',
 'youhavenewmessages' => 'Sizga $1 keldi ($2).',
-'newmessageslink' => 'yangi xabarlar',
-'newmessagesdifflink' => 'soʻnggi oʻzgarish',
 'youhavenewmessagesfromusers' => 'Siz {{PLURAL:$3|boshqa foydalanuvchidan|$3 ta foydalanuvchidan}} $1 oldingiz ($2).',
 'youhavenewmessagesmanyusers' => "Siz ko'p foydalanuvchilardan $1 oldingiz ($2).",
-'newmessageslinkplural' => '{{PLURAL:$1|yangi xabar|yangi xabarlar}}',
+'newmessageslinkplural' => '{{PLURAL:$1|yangi xabar|999=yangi xabarlar}}',
 'newmessagesdifflinkplural' => 'oxirgi {{PLURAL:$1|oʻzgarish|oʻzgarishlar}}',
 'youhavenewmessagesmulti' => 'Siz $1ga yangi xat oldingiz',
 'editsection' => 'tahrirlash',
@@ -800,7 +798,6 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'preferences' => 'Moslamalar',
 'mypreferences' => 'Moslamalarim',
 'prefs-edits' => 'Tahrirlar soni:',
-'prefsnologin' => "Siz tizimda o'zingizni tanitmadingiz",
 'changepassword' => 'Maxfiy soʻzni oʻzgartirish',
 'prefs-skin' => 'Tashqi ko‘rinishi',
 'skin-preview' => 'Ko‘rib chiqish',
index 2953b49..81af497 100644 (file)
@@ -61,12 +61,12 @@ $namespaceAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'UtentiAtivi' ),
        'Allmessages'               => array( 'Messagi' ),
+       'AllMyUploads'              => array( 'TutiIMeCaricamenti' ),
        'Allpages'                  => array( 'TuteLePagine' ),
        'Ancientpages'              => array( 'PagineMancoNove' ),
        'Badtitle'                  => array( 'TitoloSbalià' ),
        'Blankpage'                 => array( 'PaginaVoda' ),
        'Block'                     => array( 'Bloca' ),
-       'Blockme'                   => array( 'BlocaProxy' ),
        'Booksources'               => array( 'SercaISBN' ),
        'BrokenRedirects'           => array( 'RimandiSbalià' ),
        'Categories'                => array( 'Categorie' ),
@@ -78,10 +78,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'CreaUtente' ),
        'Deadendpages'              => array( 'PagineSensaUscita' ),
        'DeletedContributions'      => array( 'ContributiScancelà' ),
-       'Disambiguations'           => array( 'Disanbiguassion' ),
        'DoubleRedirects'           => array( 'DópiRimandi' ),
        'EditWatchlist'             => array( 'CanbiaTegnuiDeOcio' ),
        'Emailuser'                 => array( 'MandaEMail' ),
+       'ExpandTemplates'           => array( 'EspandiModèi' ),
        'Export'                    => array( 'Esporta' ),
        'Fewestrevisions'           => array( 'PagineConMancoRevision' ),
        'FileDuplicateSearch'       => array( 'SercaDopioniDeiFile' ),
@@ -431,8 +431,6 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Cavà fora da "$1"',
 'youhavenewmessages' => 'Te ghè $1 ($2).',
-'newmessageslink' => 'dei mesagi novi',
-'newmessagesdifflink' => 'ultimo canbiamento',
 'youhavenewmessagesfromusers' => "Te ghè $1 da {{PLURAL:$3|n'altro utente|$3 utenti}} ($2).",
 'youhavenewmessagesmanyusers' => 'Te ghè $1 da vari utenti ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|un messagio novo|dei messagi novi}}',
@@ -1235,7 +1233,6 @@ Prova a métarghe \"all:\" davanti al testo che te serchi par vardar in tuti i n
 'preferences' => 'Prefarense',
 'mypreferences' => 'Prefarense',
 'prefs-edits' => 'Nùmaro de modifiche:',
-'prefsnologin' => 'No te ghè eseguìo el login',
 'changepassword' => 'Cànbia ła password',
 'prefs-skin' => 'Aspeto grafico',
 'skin-preview' => 'Anteprima',
@@ -1512,6 +1509,7 @@ Co qualcheduni te scrivarà, nol vedarà mia el to indirizo.',
 'recentchanges-label-minor' => 'Sto qua el xe un canbiamento picenin',
 'recentchanges-label-bot' => 'Sta modifica el la ga fata un bot',
 'recentchanges-label-unpatrolled' => 'Sta modifica no la xe stà gnancora verificà',
+'recentchanges-legend-newpage' => '$1 - pagina nova',
 'rcnote' => "Qua soto se vede {{PLURAL:$1|l'ultimo canbiamento|i ultimi '''$1''' canbiamenti}} {{PLURAL:$2|in te l'ultimo zorno|in tei ultimi '''$2''' zorni}}, fin a le $5 del $4.",
 'rcnotefrom' => "Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').",
 'rclistfrom' => 'Fà védar i canbiamenti fati dal $1',
@@ -3880,4 +3878,17 @@ Insieme co sto programa te dovaressi 'ver ricevùo na copia de la Licensa Public
 # Image rotation
 'rotate-comment' => 'Imagine girà de $1 {{PLURAL:$1|grado|gradi}} in senso orario',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Espansion dei template',
+'expand_templates_intro' => 'Sta pagina speciale la elabora un testo espandendo tuti i template presenti. La calcola inoltre el risultato de le funzion suportàe dal parser come <nowiki>{{</nowiki>#language:...}} e de le variabili de sistema quali <nowiki>{{</nowiki>CURRENTDAY}}, overo in pratica tuto quel che se cata tra dopie parentesi grafe. La funsiona riciamando le oportune funzion del parser de MediaWiki.',
+'expand_templates_title' => 'Contesto (par {{FULLPAGENAME}} ecc.):',
+'expand_templates_input' => 'Testo da espàndar:',
+'expand_templates_output' => 'Risultato',
+'expand_templates_xml_output' => 'Output in formato XML',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Ignora i comenti',
+'expand_templates_remove_nowiki' => 'Cava i tag <nowiki> dal risultato',
+'expand_templates_generate_xml' => 'Mostra àlbaro sintàtico XML',
+'expand_templates_preview' => 'Anteprima',
+
 );
index 0381d52..45a1497 100644 (file)
@@ -98,9 +98,9 @@ $messages = array(
 'tog-usenewrc' => 'Kävutagat paremboitud tantoižed toižetused (pidab otta radho JavaScript)',
 'tog-numberheadings' => 'Nomeruida avtomatižikš pälkirjutesed',
 'tog-showtoolbar' => "Ozutada azegiden üläpanel' redaktiruindan aigan (JavaScript)",
-'tog-editondblclick' => 'Redaktiruida lehtpoled kaksitadud plokul (JavaScript)',
+'tog-editondblclick' => 'Redaktiruida lehtpoled kaksitadud plokul',
 'tog-editsection' => 'Ozutada "Redaktiruida"-kosketuz kaikuččen sekcijan täht',
-'tog-editsectiononrightclick' => 'Redaktiruida sekcijad hiren oiktal plokul pälkirjutesele (JavaScript)',
+'tog-editsectiononrightclick' => 'Redaktiruida sekcijad hiren oiktal plokul pälkirjutesele',
 'tog-showtoc' => 'Ozutada südäiolend (lehtpoled, kudambil om enamba, mi 3 pälkirjutest)',
 'tog-rememberpassword' => 'Muštta minun kävutajan nimi neciš kompjuteras (enintään $1 {{PLURAL:$1|päivä|päivää}})',
 'tog-watchcreations' => 'Ližata kaik minai sätud lehtpoled minun kaclendkirjuteshe',
@@ -193,6 +193,18 @@ $messages = array(
 'oct' => 'reduku',
 'nov' => 'kül’mku',
 'dec' => 'tal’vku',
+'january-date' => '$1. viluku',
+'february-date' => '$1. uhoku',
+'march-date' => "$1. keväz'ku",
+'april-date' => '$1. sulaku',
+'may-date' => '$1. semendku',
+'june-date' => '$1. kezaku',
+'july-date' => '$1. heinku',
+'august-date' => '$1. eloku',
+'september-date' => "$1. sügüz'ku",
+'october-date' => '$1. reduku',
+'november-date' => "$1. kül'mku",
+'december-date' => "$1. tal'vku",
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Kategorii|Kategorijad}}',
@@ -218,7 +230,7 @@ $messages = array(
 'newwindow' => '(avaidase udes iknas)',
 'cancel' => 'Heitta pätand',
 'moredotdotdot' => 'Edeleze...',
-'mypage' => "Minun lehtpol'",
+'mypage' => "Lehtpol'",
 'mytalk' => 'Lodud',
 'anontalk' => 'Lodud neciš IP-adresas',
 'navigation' => 'Navigacii',
@@ -251,6 +263,7 @@ $messages = array(
 'namespaces' => 'Nimiavaruded',
 'variants' => 'Variantad',
 
+'navigation-heading' => 'Navigacii',
 'errorpagetitle' => 'Petuz',
 'returnto' => 'Pörttas lehtpolele $1.',
 'tagline' => '{{SITENAME}}',
@@ -288,7 +301,7 @@ $messages = array(
 'articlepage' => "Kacu südäimišton lehtpol'",
 'talk' => 'Diskussii',
 'views' => 'Kacundad',
-'toolbox' => 'Azegišt',
+'toolbox' => 'Instrumentad',
 'userpage' => "Kacu kävutajan lehtpol'",
 'projectpage' => "Kacu projektan lehtpol'",
 'imagepage' => "Kacu fajlan lehtpol'",
@@ -346,8 +359,6 @@ Kacu [[Special:Version|informacii kävutadud versijoiš]].',
 'ok' => 'Ka',
 'retrievedfrom' => 'Purde - "$1"',
 'youhavenewmessages' => 'Tö sat $1 ($2).',
-'newmessageslink' => 'uded tedotused',
-'newmessagesdifflink' => "jäl'gmäine toižetuz",
 'youhavenewmessagesmulti' => 'Teil om uzid tedotusid $1-lehtpolel',
 'editsection' => 'redaktiruida',
 'editold' => 'redaktiruida',
@@ -399,6 +410,7 @@ Kc. [[Special:SpecialPages|specialižiden lehtpoliden nimikirj]].",
 # General errors
 'error' => 'Petuz',
 'databaseerror' => 'Andmusiden bazan petuz',
+'databaseerror-error' => 'Petuz: $1',
 'laggedslavemode' => "Varutuz: voib olda, lehtpolen versijal ei ole jäl'gmäižid ližadusid.",
 'readonly' => 'Andmusiden baz om luklostadud',
 'enterlockreason' => 'Kirjutagat sü da pandud blokiruindan strok',
@@ -463,10 +475,18 @@ Sü om "\'\'$2\'\'".',
 
 Sab jatkta rad {{SITENAME}}-saital anonimižikš, vai <span class='plainlinks'>[$1 kirjutagatoiš udes]</span> sil-žo vai toižel kävutajan nimel.
 Otkat sil'mnägubale, miše erasid lehtpolid ozutaškatas mugažo, kut i edel teiden lähtendad sistemaspäi. Miše vajehtada niiden nägu, puhtastagat teiden kaclimen keš.",
+'welcomeuser' => 'Tulgat tervhin, $1!',
 'yourname' => 'Kävutajan nimi:',
+'userlogin-yourname' => 'Kävutajannimi',
+'createacct-another-username-ph' => 'Kirjutagat kävutajannimi',
 'yourpassword' => 'Peitsana:',
+'userlogin-yourpassword' => 'Peitsana',
+'createacct-yourpassword-ph' => 'Kirjutagat peitsana',
 'yourpasswordagain' => 'Kirjutagat peitsana udes:',
+'createacct-yourpasswordagain' => 'Peitsanan vahvištoituz',
+'createacct-yourpasswordagain-ph' => 'Kirjutagat peitsana toškerdan',
 'remembermypassword' => 'Panda muštho minun tulendandmused neciš kompjuteras (enintään $1 {{PLURAL:$1|päivä|päivää}})',
+'userlogin-remembermypassword' => 'Jäda sistemha',
 'yourdomainname' => 'Teiden domen:',
 'externaldberror' => 'Ozaižihe petuz autentifikacijan, kudamb tehtihe andmusiden irdbazan turbiš, aigan, vai teile ei ulotu oiktusid toižetada ičetoi irdregistracijad.',
 'login' => 'Kirjutadas sistemha',
@@ -485,6 +505,12 @@ Otkat sil'mnägubale, miše erasid lehtpolid ozutaškatas mugažo, kut i edel te
 'userlogin-resetlink' => 'Unohtid-ik andmused tulendan täht?',
 'createaccountmail' => 'e-počtaiči',
 'createaccountreason' => 'Sü:',
+'createacct-reason' => 'Sü',
+'createacct-reason-ph' => 'Mikš sädad kävutajanprofilid?',
+'createacct-captcha' => 'Varuitomuden kodvind',
+'createacct-imgcaptcha-ph' => 'Kirjutagat tekst pälpäi',
+'createacct-submit' => "Säta kävutajanprofil'",
+'createacct-another-submit' => "Säta toine kävutajanprofil'",
 'badretype' => 'Teil kirjutadud peitsanad ei kožugoi toine toižhe.',
 'userexists' => 'Kirjutadud kävutajan nimi om jo kävutamižes.
 Olgat hüväd, valikat toine kävutajan nimi.',
@@ -576,6 +602,9 @@ Aigaline peitsana: $2',
 'changeemail-submit' => 'Toižetada e-počtan adres',
 'changeemail-cancel' => 'Heitta',
 
+# Special:ResetTokens
+'resettokens-tokens' => 'Tokenad:',
+
 # Edit page toolbar
 'bold_sample' => 'Lihavoitud tekst',
 'bold_tip' => 'Lihavoitud tekst',
@@ -966,7 +995,6 @@ Otkat sil'mnägubale üks-se, miše {{SITENAME}}-saitan sädäimišt voib olda v
 'preferences' => 'Järgendused',
 'mypreferences' => 'Järgendused',
 'prefs-edits' => 'Redaktiruindoiden lugu:',
-'prefsnologin' => 'Tö et olgoi kirjutanus sistemha.',
 'changepassword' => 'Peitsanan toižetuz',
 'prefs-skin' => 'Irdnägu',
 'skin-preview' => 'Ezikaclend',
@@ -1047,7 +1075,7 @@ Kodvgat HTML-virgad.',
 Pidab tehta se $1 {{PLURAL:$1|simvolaspäi|simvoloišpäi}}.",
 'yourgender' => 'Sugu:',
 'gender-unknown' => 'Ei ole ozutadud',
-'gender-male' => 'Mez’',
+'gender-male' => "Mez'",
 'gender-female' => 'Naine',
 'prefs-help-gender' => 'Opcionaline: kävutadas likutimen erasiš tedotusiš, miše ozutada kävutajan sugu oikti. Nece informacii om avoin.',
 'email' => 'E-počt',
@@ -1062,6 +1090,7 @@ Ku tö kirjutat sen, nece nimi kävutadas, miše ozutada lehtpolen toižetajad.'
 'prefs-dateformat' => 'Datan format',
 'prefs-timeoffset' => 'Aigan sirdand',
 'prefs-advancedediting' => 'Ližaopcijad',
+'prefs-preview' => 'Ezikacund',
 'prefs-advancedrc' => 'Ližaopcijad',
 'prefs-advancedrendering' => 'Ližaopcijad',
 'prefs-advancedsearchoptions' => 'Ližaopcijad',
@@ -1069,6 +1098,7 @@ Ku tö kirjutat sen, nece nimi kävutadas, miše ozutada lehtpolen toižetajad.'
 'prefs-displayrc' => 'Nägun opcijad',
 'prefs-displaysearchoptions' => 'Nägun opcijad',
 'prefs-displaywatchlist' => 'Nägun opcijad',
+'prefs-tokenwatchlist' => 'Token',
 'prefs-diffs' => 'Erod',
 
 # User preference: email validation using jQuery
@@ -1219,6 +1249,7 @@ Ku tö kirjutat sen, nece nimi kävutadas, miše ozutada lehtpolen toižetajad.'
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|toižetuz|toižetust}}',
+'enhancedrc-history' => 'istorii',
 'recentchanges' => 'Tantoižed toižetused',
 'recentchanges-legend' => 'Tantoižiden toižetusiden järgendused',
 'recentchanges-summary' => 'Necil lehtpolil om tantoižid toižetusid {{SITENAME}}-saital.',
@@ -1227,6 +1258,7 @@ Ku tö kirjutat sen, nece nimi kävutadas, miše ozutada lehtpolen toižetajad.'
 'recentchanges-label-minor' => 'Nece redakcii om penikaine',
 'recentchanges-label-bot' => 'Necen redakcijan tegi bot',
 'recentchanges-label-unpatrolled' => 'Necidä redakcijad ei völ patruliruinugoi',
+'recentchanges-legend-newpage' => "$1 - uz' lehtpol'",
 'rcnote' => "Alahan om ozutadud {{PLURAL:$1| '''1''' toižetuz|'''$1''' toižetust}} {{PLURAL:$2|jäl'gmäižes päiväs|jäl'gmäižiš '''$2''' päiviš}}, aigal $5, $4.",
 'rcnotefrom' => "Alemba oma anttud toižetused '''$2'''-späi ( '''$1'''-hesai).",
 'rclistfrom' => 'Ozutada uded toižetused dataspäi $1 augotaden',
@@ -1412,6 +1444,7 @@ Ku valitas vaiše ühten kävutajan failad, ka ozutadas vaiše necen kävutajan
 'listfiles_size' => 'Suruz’',
 'listfiles_description' => 'Ümbrikirjutand',
 'listfiles_count' => 'Versijad',
+'listfiles-latestversion-yes' => 'Ka',
 
 # File description page
 'file-anchor-link' => 'Fail',
@@ -1491,6 +1524,9 @@ Informacijad sen [$2 andmusiden lehtpolelpäi] om anttud alemba.',
 'randompage' => "Statjaline lehtpol'",
 'randompage-nopages' => '"$1"-{{PLURAL:$2|Nimiavarudes|Nimiavaruziš}} ei ole lehtpolid.',
 
+# Random page in category
+'randomincategory-selectcategory-submit' => 'Mäne',
+
 # Random redirect
 'randomredirect' => 'Statjaline läbikosketuz',
 'randomredirect-nopages' => '"$1"-nimiavaruses ei ole läbikosketusid.',
@@ -1935,7 +1971,7 @@ $1',
 'contributions' => '{{GENDER:$1|Kävutajan}} tond',
 'contributions-title' => '$1-kävutajan tond',
 'mycontris' => 'Minun tond',
-'contribsub2' => '$1-kävutajan ($2) tond',
+'contribsub2' => '{{GENDER:$3|$1}}-kävutajan ($2) tond',
 'uctop' => '(nügüdläine)',
 'month' => 'Ku:',
 'year' => 'Voz’:',
@@ -2338,6 +2374,8 @@ Voib olda, necil lehtpolel om kosketuz irdsaitale, kudamb om mustas nimikirjutes
 'pageinfo-watchers' => 'Lehtpolen kaclijoiden lugu',
 'pageinfo-edits' => 'Redakcijoiden lugumär',
 'pageinfo-authors' => 'Erazvuiččiden avtoroiden lugu',
+'pageinfo-contentpage-yes' => 'Ka',
+'pageinfo-protect-cascading-yes' => 'Ka',
 
 # Skin names
 'skinname-cologneblue' => "Köl'nan sinine",
@@ -2380,7 +2418,7 @@ $1',
 'file-info-size' => '$1 × $2 pikselad, failan suruz: $3, MIME-tip: $4',
 'file-nohires' => 'Ei ole versijad paremban tarkoiktusenke.',
 'svg-long-desc' => 'SVG-fail, nominaližikš $1 × $2 pikselid, failan suruz: $3',
-'show-big-image' => 'Korgedtarkoiktuseline kuvan versii',
+'show-big-image' => 'Originaline fail',
 'show-big-image-preview' => 'Ezikacundan suruz: $1.',
 'show-big-image-size' => '$1 × $2 pikselid',
 'file-info-gif-looped' => 'toštase',
@@ -2738,6 +2776,9 @@ Ku fail redaktiruidihe sändan polhe, erased parametrad voidas erineda nügüdl
 'exif-dc-publisher' => 'Pästai',
 'exif-dc-rights' => 'Oiktused',
 
+'exif-isospeedratings-overflow' => 'Более 65535',
+
+'exif-iimcategory-ace' => "Čomamaht, kul'tur da bobuštused",
 'exif-iimcategory-clj' => 'Ogerantegend da käskuz',
 'exif-iimcategory-dis' => 'Katastrofad da avarijad',
 'exif-iimcategory-fin' => 'Ekonomik da biznes',
@@ -2818,6 +2859,9 @@ Necen vahvištoitandkodan kävutamižen lopstrok om $4.',
 'confirm-watch-button' => 'OK',
 'confirm-unwatch-button' => 'OK',
 
+# Separators for various lists, etc.
+'quotation-marks' => '«$1»',
+
 # Multipage image navigation
 'imgmultipageprev' => "← edeline lehtpol'",
 'imgmultipagenext' => "jäl'ghine lehtpol' →",
@@ -2971,7 +3015,9 @@ Kävutagat normaline ezikacund.',
 'tags-tag' => 'Tegan (virgan) nimi',
 'tags-display-header' => 'Nägu toižetisiden aigkirjoiš',
 'tags-description-header' => "Znamoičendan täuz' ümbrikirjutand",
+'tags-active-header' => 'Aktivine-ik?',
 'tags-hitcount-header' => 'Virgastadud redakcijad',
+'tags-active-yes' => 'Ka',
 'tags-edit' => 'redaktiruida',
 'tags-hitcount' => '$1 {{PLURAL:$1|toižetuz|toižetust}}',
 
@@ -3004,6 +3050,7 @@ Kävutagat normaline ezikacund.',
 'htmlform-submit' => 'Oigeta',
 'htmlform-reset' => 'Tühjitada toižetused',
 'htmlform-selectorother-other' => 'Toine',
+'htmlform-yes' => 'Ka',
 
 # SQLite database support
 'sqlite-has-fts' => " $1 täuz'tekstaižen ecindan tügedamiženke",
@@ -3046,4 +3093,12 @@ Kävutagat normaline ezikacund.',
 'duration-years' => "$1 {{PLURAL:$1|voz'|vot}}",
 'duration-decades' => '$1 {{PLURAL:$1|dekad|dekadad}}',
 
+# Special:ExpandTemplates
+'expand_templates_input' => 'Tekst:',
+'expand_templates_output' => "Rezul'tat",
+'expand_templates_xml_output' => 'XML-lähtmižvend',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => 'Čuta kommentarijad',
+'expand_templates_preview' => 'Ezikacund',
+
 );
index 3b92c70..d10b31e 100644 (file)
@@ -59,12 +59,12 @@ $namespaceAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( 'Người_dùng_tích_cực' ),
        'Allmessages'               => array( 'Mọi_thông_điệp', 'Mọi_thông_báo' ),
+       'AllMyUploads'              => array( 'Mọi_tập_tin_của_tôi', 'Mọi_tập_tin_tôi_tải_lên' ),
        'Allpages'                  => array( 'Mọi_bài' ),
        'Ancientpages'              => array( 'Trang_cũ' ),
        'Badtitle'                  => array( 'Tựa_đề_hỏng' ),
        'Blankpage'                 => array( 'Trang_trắng' ),
        'Block'                     => array( 'Cấm', 'Cấm_IP', 'Cấm_thành_viên', 'Cấm_người_dùng' ),
-       'Blockme'                   => array( 'Khóa_tôi', 'Khoá_tôi' ),
        'Booksources'               => array( 'Nguồn_sách' ),
        'BrokenRedirects'           => array( 'Đổi_hướng_sai' ),
        'Categories'                => array( 'Thể_loại' ),
@@ -76,10 +76,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'Mở_tài_khoản', 'Đăng_ký', 'Đăng_kí' ),
        'Deadendpages'              => array( 'Trang_đường_cùng' ),
        'DeletedContributions'      => array( 'Đóng_góp_bị_xóa', 'Đóng_góp_bị_xoá' ),
-       'Disambiguations'           => array( 'Trang_định_hướng' ),
        'DoubleRedirects'           => array( 'Đổi_hướng_kép' ),
        'EditWatchlist'             => array( 'Sửa_danh_sách_theo_dõi' ),
        'Emailuser'                 => array( 'Gửi_thư', 'Gửi_thư_điện_tử' ),
+       'ExpandTemplates'           => array( 'Bung_bản_mẫu', 'Bung_tiêu_bản' ),
        'Export'                    => array( 'Xuất' ),
        'Fewestrevisions'           => array( 'Ít_phiên_bản_nhất' ),
        'FileDuplicateSearch'       => array( 'Tìm_tập_tin_trùng' ),
@@ -124,9 +124,12 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'Trang_khóa', 'Trang_khoá' ),
        'Protectedtitles'           => array( 'Tựa_đề_bị_khóa', 'Tựa_đề_bị_khoá' ),
        'Randompage'                => array( 'Ngẫu_nhiên' ),
+       'RandomInCategory'          => array( 'Ngẫu_nhiên_trong_thể_loại' ),
        'Randomredirect'            => array( 'Đổi_hướng_ngẫu_nhiên' ),
        'Recentchanges'             => array( 'Thay_đổi_gần_đây' ),
        'Recentchangeslinked'       => array( 'Thay_đổi_liên_quan' ),
+       'Redirect'                  => array( 'Đổi_hướng' ),
+       'ResetTokens'               => array( 'Đặt_lại_dấu_hiệu' ),
        'Revisiondelete'            => array( 'Xóa_phiên_bản', 'Xoá_phiên_bản' ),
        'Search'                    => array( 'Tìm_kiếm' ),
        'Shortpages'                => array( 'Trang_ngắn' ),
@@ -161,51 +164,53 @@ $specialPageAliases = array(
 
 $magicWords = array(
        'redirect'                  => array( '0', '#đổi', '#REDIRECT' ),
-       'notoc'                     => array( '0', '__KHÔNGMỤCLỤC__', '__NOTOC__' ),
-       'nogallery'                 => array( '0', '__KHÔNGALBUM__', '__NOGALLERY__' ),
-       'forcetoc'                  => array( '0', '__LUÔNMỤCLỤC__', '__FORCETOC__' ),
-       'toc'                       => array( '0', '__MỤCLỤC__', '__TOC__' ),
-       'noeditsection'             => array( '0', '__KHÔNGSỬAMỤC__', '__NOEDITSECTION__' ),
-       'currentmonth'              => array( '1', 'THÁNGNÀY', 'THÁNGNÀY2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'             => array( '1', 'THÁNGNÀY1', 'CURRENTMONTH1' ),
-       'currentmonthname'          => array( '1', 'TÊNTHÁNGNÀY', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'       => array( '1', 'TÊNDÀITHÁNGNÀY', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'        => array( '1', 'TÊNNGẮNTHÁNGNÀY', 'CURRENTMONTHABBREV' ),
-       'currentday'                => array( '1', 'NGÀYNÀY', 'CURRENTDAY' ),
-       'currentday2'               => array( '1', 'NGÀYNÀY2', 'CURRENTDAY2' ),
-       'currentdayname'            => array( '1', 'TÊNNGÀYNÀY', 'CURRENTDAYNAME' ),
-       'currentyear'               => array( '1', 'NĂMNÀY', 'CURRENTYEAR' ),
-       'currenttime'               => array( '1', 'GIỜNÀY', 'CURRENTTIME' ),
-       'localmonth'                => array( '1', 'THÁNGĐỊAPHƯƠNG', 'LOCALMONTH', 'LOCALMONTH2' ),
-       'localmonth1'               => array( '1', 'THÁNGĐỊAPHƯƠNG1', 'LOCALMONTH1' ),
-       'localmonthname'            => array( '1', 'TÊNTHÁNGĐỊAPHƯƠNG', 'LOCALMONTHNAME' ),
-       'localmonthabbrev'          => array( '1', 'THÁNGĐỊAPHƯƠNGTẮT', 'LOCALMONTHABBREV' ),
-       'localday'                  => array( '1', 'NGÀYĐỊAPHƯƠNG', 'LOCALDAY' ),
-       'localday2'                 => array( '1', 'NGÀYĐỊAPHƯƠNG2', 'LOCALDAY2' ),
-       'localdayname'              => array( '1', 'TÊNNGÀYĐỊAPHƯƠNG', 'LOCALDAYNAME' ),
-       'localyear'                 => array( '1', 'NĂMĐỊAPHƯƠNG', 'LOCALYEAR' ),
-       'localtime'                 => array( '1', 'GIỜĐỊAPHƯƠNG', 'LOCALTIME' ),
-       'numberofpages'             => array( '1', 'SỐTRANG', 'NUMBEROFPAGES' ),
-       'numberofarticles'          => array( '1', 'SỐBÀI', 'NUMBEROFARTICLES' ),
-       'numberoffiles'             => array( '1', 'SỐTẬPTIN', 'NUMBEROFFILES' ),
-       'numberofusers'             => array( '1', 'SỐTHÀNHVIÊN', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'       => array( '1', 'SỐTHÀNHVIÊNTÍCHCỰC', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'             => array( '1', 'SỐSỬAĐỔI', 'NUMBEROFEDITS' ),
-       'numberofviews'             => array( '1', 'SỐLẦNXEM', 'NUMBEROFVIEWS' ),
-       'pagename'                  => array( '1', 'TÊNTRANG', 'PAGENAME' ),
-       'pagenamee'                 => array( '1', 'TÊNTRANG2', 'PAGENAMEE' ),
-       'namespace'                 => array( '1', 'KHÔNGGIANTÊN', 'NAMESPACE' ),
-       'namespacenumber'           => array( '1', 'SỐKHÔNGGIANTÊN', 'NAMESPACENUMBER' ),
-       'talkspace'                 => array( '1', 'KGTTHẢOLUẬN', 'TALKSPACE' ),
-       'subjectspace'              => array( '1', 'KGTNỘIDUNG', 'SUBJECTSPACE', 'ARTICLESPACE' ),
-       'fullpagename'              => array( '1', 'TÊNTRANGĐỦ', 'FULLPAGENAME' ),
-       'subpagename'               => array( '1', 'TÊNTRANGPHỤ', 'SUBPAGENAME' ),
-       'basepagename'              => array( '1', 'TÊNTRANGGỐC', 'BASEPAGENAME' ),
-       'talkpagename'              => array( '1', 'TÊNTRANGTHẢOLUẬN', 'TALKPAGENAME' ),
-       'subjectpagename'           => array( '1', 'TÊNTRANGNỘIDUNG', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'notoc'                     => array( '0', '__KHÔNG_MỤC_LỤC__', '__KHÔNGMỤCLỤC__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__KHÔNG_ALBUM__', '__KHÔNGALBUM__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__LUÔN_MỤC_LỤC__', '__LUÔNMỤCLỤC__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__MỤC_LỤC__', '__MỤCLỤC__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__KHÔNG_NÚT_SỬA_MỤC__', '__KHÔNGNÚTSỬAMỤC__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'THÁNG_NÀY', 'THÁNGNÀY', 'THÁNG_NÀY_2', 'THÁNGNÀY2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'THÁNG_NÀY_1', 'THÁNGNÀY1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'TÊN_THÁNG_NÀY', 'TÊNTHÁNGNÀY', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'TÊN_DÀI_THÁNG_NÀY', 'TÊNDÀITHÁNGNÀY', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'TÊN_NGẮN_THÁNG_NÀY', 'TÊNNGẮNTHÁNGNÀY', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'NGÀY_NÀY', 'NGÀYNÀY', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'NGÀY_NÀY_2', 'NGÀYNÀY2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'TÊN_NGÀY_NÀY', 'TÊNNGÀYNÀY', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'NĂM_NÀY', 'NĂMNÀY', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'GIỜ_NÀY', 'GIỜNÀY', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'GIỜ_HIỆN_TẠI', 'GIỜHIỆNTẠI', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', 'THÁNG_ĐỊA_PHƯƠNG', 'THÁNGĐỊAPHƯƠNG', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonth1'               => array( '1', 'THÁNG_ĐỊA_PHƯƠNG_1', 'THÁNGĐỊAPHƯƠNG1', 'LOCALMONTH1' ),
+       'localmonthname'            => array( '1', 'TÊN_THÁNG_ĐỊA_PHƯƠNG', 'TÊNTHÁNGĐỊAPHƯƠNG', 'LOCALMONTHNAME' ),
+       'localmonthabbrev'          => array( '1', 'THÁNG_ĐỊA_PHƯƠNG_TẮT', 'THÁNGĐỊAPHƯƠNGTẮT', 'LOCALMONTHABBREV' ),
+       'localday'                  => array( '1', 'NGÀY_ĐỊA_PHƯƠNG', 'NGÀYĐỊAPHƯƠNG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'NGÀY_ĐỊA_PHƯƠNG_2', 'NGÀYĐỊAPHƯƠNG2', 'LOCALDAY2' ),
+       'localdayname'              => array( '1', 'TÊN_NGÀY_ĐỊA_PHƯƠNG', 'TÊNNGÀYĐỊAPHƯƠNG', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', 'NĂM_ĐỊA_PHƯƠNG', 'NĂMĐỊAPHƯƠNG', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', 'THỜI_GIAN_ĐỊA_PHƯƠNG', 'THỜIGIANĐỊAPHƯƠNG', 'LOCALTIME' ),
+       'localhour'                 => array( '1', 'GIỜ_ĐỊA_PHƯƠNG', 'GIỜĐỊAPHƯƠNG', 'LOCALHOUR' ),
+       'numberofpages'             => array( '1', 'SỐ_TRANG', 'SỐTRANG', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'SỐ_BÀI', 'SỐBÀI', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'SỐ_TẬP_TIN', 'SỐTẬPTIN', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'SỐ_THÀNH_VIÊN', 'SỐTHÀNHVIÊN', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'SỐ_THÀNH_VIÊN_TÍCH_CỰC', 'SỐTHÀNHVIÊNTÍCHCỰC', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'SỐ_SỬA_ĐỔI', 'SỐSỬAĐỔI', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'SỐ_LẦN_XEM', 'SỐLẦNXEM', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'TÊN_TRANG', 'TÊNTRANG', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'TÊN_TRANG_2', 'TÊNTRANG2', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'KHÔNG_GIAN_TÊN', 'KHÔNGGIANTÊN', 'NAMESPACE' ),
+       'namespacenumber'           => array( '1', 'SỐ_KHÔNG_GIAN_TÊN', 'SỐKHÔNGGIANTÊN', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', 'KGT_THẢO_LUẬN', 'KGTTHẢOLUẬN', 'TALKSPACE' ),
+       'subjectspace'              => array( '1', 'KGT_NỘI_DUNG', 'KGTNỘIDUNG', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+       'fullpagename'              => array( '1', 'TÊN_TRANG_ĐỦ', 'TÊNTRANGĐỦ', 'FULLPAGENAME' ),
+       'subpagename'               => array( '1', 'TÊN_TRANG_PHỤ', 'TÊNTRANGPHỤ', 'SUBPAGENAME' ),
+       'basepagename'              => array( '1', 'TÊN_TRANG_GỐC', 'TÊNTRANGGỐC', 'BASEPAGENAME' ),
+       'talkpagename'              => array( '1', 'TÊN_TRANG_THẢO_LUẬN', 'TÊNTRANGTHẢOLUẬN', 'TALKPAGENAME' ),
+       'subjectpagename'           => array( '1', 'TÊN_TRANG_NỘI_DUNG', 'TÊNTRANGNỘIDUNG', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
        'msg'                       => array( '0', 'NHẮN:', 'MSG:' ),
        'subst'                     => array( '0', 'THẾ:', 'SUBST:' ),
-       'msgnw'                     => array( '0', 'NHẮNMỚI:', 'MSGNW:' ),
+       'msgnw'                     => array( '0', 'NHẮN_MỚI:', 'NHẮNMỚI:', 'MSGNW:' ),
        'img_thumbnail'             => array( '1', 'nhỏ', 'thumbnail', 'thumb' ),
        'img_manualthumb'           => array( '1', 'nhỏ=$1', 'thumbnail=$1', 'thumb=$1' ),
        'img_right'                 => array( '1', 'phải', 'right' ),
@@ -213,8 +218,9 @@ $magicWords = array(
        'img_none'                  => array( '1', 'không', 'none' ),
        'img_center'                => array( '1', 'giữa', 'center', 'centre' ),
        'img_framed'                => array( '1', 'khung', 'framed', 'enframed', 'frame' ),
-       'img_page'                  => array( '1', 'trang=$1', 'trang $1', 'page=$1', 'page $1' ),
-       'img_upright'               => array( '1', 'đứng', 'đứng=$1', 'đứng $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_page'                  => array( '1', 'trang=$1', 'trang_$1', 'page=$1', 'page $1' ),
+       'img_upright'               => array( '1', 'đứng', 'đứng=$1', 'đứng_$1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_border'                => array( '1', 'viền', 'border' ),
        'img_baseline'              => array( '1', 'chân-chữ', 'baseline' ),
        'img_sub'                   => array( '1', 'chỉ-số-dưới', 'sub' ),
        'img_super'                 => array( '1', 'chỉ-số-trên', 'super', 'sup' ),
@@ -225,62 +231,68 @@ $magicWords = array(
        'img_link'                  => array( '1', 'liên_kết=$1', 'link=$1' ),
        'img_class'                 => array( '1', 'lớp=$1', 'class=$1' ),
        'int'                       => array( '0', 'NỘI:', 'INT:' ),
-       'sitename'                  => array( '1', 'TÊNMẠNG', 'SITENAME' ),
+       'sitename'                  => array( '1', 'TÊN_MẠNG', 'TÊNMẠNG', 'SITENAME' ),
        'ns'                        => array( '0', 'KGT:', 'NS:' ),
-       'localurl'                  => array( '0', 'URLĐỊAPHƯƠNG:', 'LOCALURL:' ),
-       'articlepath'               => array( '0', 'ĐƯỜNGDẪNBÀI', 'LỐIBÀI', 'ARTICLEPATH' ),
-       'pageid'                    => array( '0', 'IDTRANG', 'PAGEID' ),
-       'server'                    => array( '0', 'MÁYCHỦ', 'SERVER' ),
-       'servername'                => array( '0', 'TÊNMÁYCHỦ', 'SERVERNAME' ),
-       'scriptpath'                => array( '0', 'ĐƯỜNGDẪNKỊCHBẢN', 'ĐƯỜNGDẪNSCRIPT', 'SCRIPTPATH' ),
-       'stylepath'                 => array( '0', 'ĐƯỜNGDẪNKIỂU', 'STYLEPATH' ),
-       'grammar'                   => array( '0', 'NGỮPHÁP:', 'GRAMMAR:' ),
+       'localurl'                  => array( '0', 'URL_ĐỊA_PHƯƠNG:', 'URLĐỊAPHƯƠNG:', 'LOCALURL:' ),
+       'articlepath'               => array( '0', 'ĐƯỜNG_DẪN_BÀI', 'ĐƯỜNGDẪNBÀI', 'LỐI_BÀI', 'LỐIBÀI', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'ID_TRANG', 'IDTRANG', 'PAGEID' ),
+       'server'                    => array( '0', 'MÁY_CHỦ', 'MÁYCHỦ', 'SERVER' ),
+       'servername'                => array( '0', 'TÊN_MÁY_CHỦ', 'TÊNMÁYCHỦ', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ĐƯỜNG_DẪN_KỊCH_BẢN', 'ĐƯỜNGDẪNKỊCHBẢN', 'ĐƯỜNG_DẪN_SCRIPT', 'ĐƯỜNGDẪNSCRIPT', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', 'ĐƯỜNG_DẪN_KIỂU', 'ĐƯỜNGDẪNKIỂU', 'STYLEPATH' ),
+       'grammar'                   => array( '0', 'NGỮ_PHÁP:', 'NGỮPHÁP:', 'GRAMMAR:' ),
        'gender'                    => array( '0', 'GIỐNG:', 'GENDER:' ),
-       'notitleconvert'            => array( '0', '__KHÔNGCHUYỂNTÊN__', '__NOTITLECONVERT__', '__NOTC__' ),
-       'nocontentconvert'          => array( '0', '__KHÔNGCHUYỂNNỘIDUNG__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'               => array( '1', 'TUẦNNÀY', 'CURRENTWEEK' ),
-       'localweek'                 => array( '1', 'TUẦNĐỊAPHƯƠNG', 'LOCALWEEK' ),
-       'revisionid'                => array( '1', 'SỐBẢN', 'REVISIONID' ),
-       'revisionday'               => array( '1', 'NGÀYBẢN', 'REVISIONDAY' ),
-       'revisionday2'              => array( '1', 'NGÀYBẢN2', 'REVISIONDAY2' ),
-       'revisionmonth'             => array( '1', 'THÁNGBẢN', 'REVISIONMONTH' ),
-       'revisionmonth1'            => array( '1', 'THÁNGBẢN1', 'REVISIONMONTH1' ),
-       'revisionyear'              => array( '1', 'NĂMBẢN', 'REVISIONYEAR' ),
-       'revisiontimestamp'         => array( '1', 'MỐCTHỜIGIANBẢN', 'DẤUTHỜIGIANBẢN', 'REVISIONTIMESTAMP' ),
-       'revisionuser'              => array( '1', 'NGƯỜIDÙNGBẢN', 'REVISIONUSER' ),
-       'plural'                    => array( '0', 'SỐNHIỀU:', 'PLURAL:' ),
-       'fullurl'                   => array( '0', 'URLĐỦ:', 'FULLURL:' ),
-       'canonicalurl'              => array( '0', 'URLCHUẨN:', 'CANONICALURL:' ),
-       'lcfirst'                   => array( '0', 'CHỮĐẦUHOA:', 'LCFIRST:' ),
-       'ucfirst'                   => array( '0', 'CHỮĐẦUTHƯỜNG:', 'UCFIRST:' ),
-       'lc'                        => array( '0', 'CHỮHOA:', 'LC:' ),
-       'uc'                        => array( '0', 'CHỮTHƯỜNG:', 'UC:' ),
-       'displaytitle'              => array( '1', 'TÊNHIỂNTHỊ', 'DISPLAYTITLE' ),
-       'newsectionlink'            => array( '1', '__LIÊNKẾTMỤCMỚI__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'          => array( '1', '__KHÔNGLIÊNKẾTMỤCMỚI__', '__NONEWSECTIONLINK__' ),
-       'currentversion'            => array( '1', 'BẢNNÀY', 'CURRENTVERSION' ),
-       'urlencode'                 => array( '0', 'MÃHÓAURL:', 'URLENCODE:' ),
-       'anchorencode'              => array( '0', 'MÃHÓANEO', 'ANCHORENCODE' ),
-       'currenttimestamp'          => array( '1', 'MỐCTHỜIGIANNÀY', 'DẤUTHỜIGIANNÀY', 'CURRENTTIMESTAMP' ),
-       'localtimestamp'            => array( '1', 'MỐCTHỜIGIANĐỊAPHƯƠNG', 'DẤUTHỜIGIANĐỊAPHƯƠNG', 'LOCALTIMESTAMP' ),
-       'language'                  => array( '0', '#NGÔNNGỮ:', '#LANGUAGE:' ),
-       'contentlanguage'           => array( '1', 'NGÔNNGỮNỘIDUNG', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'          => array( '1', 'CỠKHÔNGGIANTÊN:', 'CỠKGT:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
-       'numberofadmins'            => array( '1', 'SỐQUẢNLÝ', 'NUMBEROFADMINS' ),
-       'formatnum'                 => array( '0', 'PHÂNCHIASỐ', 'FORMATNUM' ),
-       'defaultsort'               => array( '1', 'XẾPMẶCĐỊNH:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                  => array( '0', 'ĐƯỜNGDẪNTẬPTIN', 'FILEPATH:' ),
+       'notitleconvert'            => array( '0', '__KHÔNG_CHUYỂN_TÊN__', '__KHÔNGCHUYỂNTÊN__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__KHÔNG_CHUYỂN_NỘI_DUNG__', '__KHÔNGCHUYỂNNỘIDUNG__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', 'TUẦN_NÀY', 'TUẦNNÀY', 'CURRENTWEEK' ),
+       'localweek'                 => array( '1', 'TUẦN_ĐỊA_PHƯƠNG', 'TUẦNĐỊAPHƯƠNG', 'LOCALWEEK' ),
+       'revisionid'                => array( '1', 'SỐ_BẢN', 'SỐBẢN', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'NGÀY_BẢN', 'NGÀYBẢN', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'NGÀY_BẢN_2', 'NGÀYBẢN2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'THÁNG_BẢN', 'THÁNGBẢN', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'THÁNG_BẢN_1', 'THÁNGBẢN1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'NĂM_BẢN', 'NĂMBẢN', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'MỐC_THỜI_GIAN_BẢN', 'MỐCTHỜIGIANBẢN', 'DẤU_THỜI_GIAN_BẢN', 'DẤUTHỜIGIANBẢN', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'NGƯỜI_DÙNG_BẢN', 'NGƯỜIDÙNGBẢN', 'REVISIONUSER' ),
+       'plural'                    => array( '0', 'SỐ_NHIỀU:', 'SỐNHIỀU:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'URL_ĐỦ:', 'URLĐỦ:', 'FULLURL:' ),
+       'canonicalurl'              => array( '0', 'URL_CHUẨN:', 'URLCHUẨN:', 'CANONICALURL:' ),
+       'lcfirst'                   => array( '0', 'CHỮ_ĐẦU_HOA:', 'CHỮĐẦUHOA:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'CHỮ_ĐẦU_THƯỜNG:', 'CHỮĐẦUTHƯỜNG:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'CHỮ_HOA:', 'CHỮHOA:', 'LC:' ),
+       'uc'                        => array( '0', 'CHỮ_THƯỜNG:', 'CHỮTHƯỜNG:', 'UC:' ),
+       'displaytitle'              => array( '1', 'TÊN_HIỂN_THỊ', 'TÊNHIỂNTHỊ', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__LIÊN_KẾT_MỤC_MỚI__', '__LIÊNKẾTMỤCMỚI__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__KHÔNG_LIÊN_KẾT_MỤC_MỚI__', '__KHÔNGLIÊNKẾTMỤCMỚI__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', 'BẢN_NÀY', 'BẢNNÀY', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'MÃ_HÓA_URL:', 'MÃHÓAURL:', 'MÃ_HOÁ_URL:', 'MÃHOÁURL:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'MÃ_HÓA_NEO', 'MÃHÓANEO', 'MÃ_HOÁ_NEO', 'MÃHOÁNEO', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', 'MỐC_THỜI_GIAN_NÀY', 'MỐCTHỜIGIANNÀY', 'DẤU_THỜI_GIAN_NÀY', 'DẤUTHỜIGIANNÀY', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', 'MỐC_THỜI_GIAN_ĐỊA_PHƯƠNG', 'MỐCTHỜIGIANĐỊAPHƯƠNG', 'DẤU_THỜI_GIAN_ĐỊA_PHƯƠNG', 'DẤUTHỜIGIANĐỊAPHƯƠNG', 'LOCALTIMESTAMP' ),
+       'language'                  => array( '0', '#NGÔN_NGỮ:', '#NGÔNNGỮ:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', 'NGÔN_NGỮ_NỘI_DUNG', 'NGÔNNGỮNỘIDUNG', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', 'CỠ_KHÔNG_GIAN_TÊN:', 'CỠKHÔNGGIANTÊN:', 'CỠ_KGT:', 'CỠKGT:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', 'SỐ_BẢO_QUẢN_VIÊN', 'SỐBẢOQUẢNVIÊN', 'SỐ_QUẢN_LÝ', 'SỐQUẢNLÝ', 'SỐ_QUẢN_LÍ', 'SỐQUẢNLÍ', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'PHÂN_CHIA_SỐ', 'PHÂNCHIASỐ', 'FORMATNUM' ),
+       'defaultsort'               => array( '1', 'XẾP_MẶC_ĐỊNH:', 'XẾPMẶCĐỊNH:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', 'ĐƯỜNG_DẪN_TẬP_TIN', 'ĐƯỜNGDẪNTẬPTIN', 'FILEPATH:' ),
        'tag'                       => array( '0', 'thẻ', 'tag' ),
-       'hiddencat'                 => array( '1', '__THỂLOẠIẨN__', '__HIDDENCAT__' ),
-       'pagesincategory'           => array( '1', 'CỠTHỂLOẠI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
-       'pagesize'                  => array( '1', 'CỠTRANG', 'PAGESIZE' ),
-       'index'                     => array( '1', '__CHỈMỤC__', '__INDEX__' ),
-       'noindex'                   => array( '1', '__KHÔNGCHỈMỤC__', '__NOINDEX__' ),
-       'numberingroup'             => array( '1', 'CỠNHÓM', 'NUMBERINGROUP', 'NUMINGROUP' ),
-       'staticredirect'            => array( '1', '__ĐỔIHƯỚNGNHẤTĐỊNH__', '__STATICREDIRECT__' ),
-       'protectionlevel'           => array( '1', 'MỨCKHÓA', 'MỨCKHOÁ', 'PROTECTIONLEVEL' ),
-       'url_path'                  => array( '0', 'ĐƯỜNGDẪN', 'PATH' ),
-       'url_query'                 => array( '0', 'TRUYVẤN', 'QUERY' ),
+       'hiddencat'                 => array( '1', '__THỂ_LOẠI_ẨN__', '__THỂLOẠIẨN__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', 'CỠ_THỂ_LOẠI', 'CỠTHỂLOẠI', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesize'                  => array( '1', 'CỠ_TRANG', 'CỠTRANG', 'PAGESIZE' ),
+       'index'                     => array( '1', '__CHỈ_MỤC__', '__CHỈMỤC__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__KHÔNG_CHỈ_MỤC__', '__KHÔNGCHỈMỤC__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', 'CỠ_NHÓM', 'CỠNHÓM', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__ĐỔI_HƯỚNG_NHẤT_ĐỊNH__', '__ĐỔIHƯỚNGNHẤTĐỊNH__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', 'MỨC_KHÓA', 'MỨCKHÓA', 'MỨC_KHOÁ', 'MỨCKHOÁ', 'PROTECTIONLEVEL' ),
+       'url_path'                  => array( '0', 'ĐƯỜNG_DẪN', 'ĐƯỜNGDẪN', 'PATH' ),
+       'url_query'                 => array( '0', 'TRUY_VẤN', 'TRUYVẤN', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'không_lỗi', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', 'không_thay_thế', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', 'tất_cả', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'trang', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'thể_loại_con', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'tập_tin', 'files' ),
 );
 
 $datePreferences = array(
@@ -599,12 +611,10 @@ $1',
 'pagetitle' => '$1 – {{SITENAME}}',
 'retrievedfrom' => 'Lấy từ “$1”',
 'youhavenewmessages' => 'Bạn có $1 ($2).',
-'newmessageslink' => 'tin nhắn mới',
-'newmessagesdifflink' => 'thay đổi gần nhất',
 'youhavenewmessagesfromusers' => 'Bạn có $1 từ {{PLURAL:$3|người dùng khác|$3 người dùng}} ($2).',
 'youhavenewmessagesmanyusers' => 'Bạn có $1 từ nhiều người dùng ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1}}tin nhắn mới',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|thay đổi|các thay đổi}} gần đây',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|thay đổi|999=các thay đổi}} gần đây',
 'youhavenewmessagesmulti' => 'Bạn có tin nhắn mới ở $1',
 'editsection' => 'sửa',
 'editold' => 'sửa',
@@ -730,7 +740,8 @@ Bảo quản viên khóa nó đưa lý do là: “$3”.',
 'invalidtitle-knownnamespace' => 'Tựa trang không hợp lệ có không gian tên “$2” và văn bản “$3”',
 'invalidtitle-unknownnamespace' => 'Tựa trang không hợp lệ có không gian tên số $1 không rõ và văn bản “$2”',
 'exception-nologin' => 'Chưa đăng nhập',
-'exception-nologin-text' => 'Bạn cần phải đăng nhập để truy cập trang hoặc thực hiện tác vụ này tại wiki này.',
+'exception-nologin-text' => 'Xin vui lòng [[Special:Userlogin|đăng nhập]] để truy cập trang hoặc tác vụ này.',
+'exception-nologin-text-manual' => 'Xin vui lòng $1 để truy cập trang hoặc tác vụ này.',
 
 # Virus scanner
 'virus-badscanner' => "Cấu hình sau: không nhận ra bộ quét virus: ''$1''",
@@ -1439,7 +1450,7 @@ Xem chi tiết trong [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'preferences' => 'Tùy chọn',
 'mypreferences' => 'Tùy chọn',
 'prefs-edits' => 'Số lần sửa đổi:',
-'prefsnologin' => 'Chưa đăng nhập',
+'prefsnologintext2' => 'Xin vui lòng $1 để thay đổi tùy chọn.',
 'changepassword' => 'Đổi mật khẩu',
 'prefs-skin' => 'Hình dạng',
 'skin-preview' => 'Xem trước',
@@ -1739,6 +1750,9 @@ Nếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao c
 'recentchanges-label-minor' => 'Đây là một sửa đổi nhỏ',
 'recentchanges-label-bot' => 'Sửa đổi này do bot thực hiện',
 'recentchanges-label-unpatrolled' => 'Sửa đổi này chưa được tuần tra',
+'recentchanges-label-plusminus' => 'Kích cỡ trang đã thay đổi bằng số byte này',
+'recentchanges-legend-newpage' => '(xem thêm [[Special:NewPages|danh sách các trang mới]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "Dưới đây là {{PLURAL:$1|thay đổi '''duy nhất'''|'''$1''' thay đổi gần nhất}} trong {{PLURAL:$2|ngày qua|'''$2''' ngày qua}}, tính tới $5 lúc $4.",
 'rcnotefrom' => "Thay đổi từ '''$2''' (hiển thị tối đa '''$1''' thay đổi).",
 'rclistfrom' => 'Hiển thị các thay đổi từ $1.',
@@ -2466,9 +2480,9 @@ Liên lạc với người viết trang qua:
 thư: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Sẽ không có thông báo nào khác nếu có sự thay đổi tiếp theo trừ khi bạn xem trang đó. Bạn cũng có thể thiết lập lại việc nhắc nhở cho tất cả các trang nằm trong danh sách theo dõi của bạn.
+Sẽ không có thông báo nào khác nếu có sự thay đổi tiếp theo trừ khi bạn xem trang đó lúc khi đăng nhập. Bạn cũng có thể thiết lập lại việc nhắc nhở cho tất cả các trang nằm trong danh sách theo dõi của bạn.
 
-              Hệ thống báo tin {{SITENAME}} thân thiện của bạn
+Hệ thống báo tin {{SITENAME}} thân thiện của bạn
 
 --
 Để thay đổi các thiết lập thư điện tử thông báo, mời xem:
@@ -4104,9 +4118,9 @@ hoặc [//www.gnu.org/licenses/old-licenses/gpl-2.0.html đọc nó trực tuy
 
 # Special:SpecialPages
 'specialpages' => 'Các trang đặc biệt',
+'specialpages-note-top' => 'Chú giải',
 'specialpages-note' => '* Trang đặc biệt thông thường.
-* <strong class="mw-specialpagerestricted">Trang đặc biệt được hạn chế.</strong>
-* <span class="mw-specialpagecached">Trang đặc biệt được lấy từ vùng nhớ đệm (có thể lỗi thời).</span>',
+* <strong class="mw-specialpagerestricted">Trang đặc biệt được hạn chế.</strong>',
 'specialpages-group-maintenance' => 'Báo cáo bảo quản',
 'specialpages-group-other' => 'Trang đặc biệt khác',
 'specialpages-group-login' => 'Đăng nhập / Mở tài khoản',
@@ -4319,4 +4333,17 @@ Nếu không thì bạn có thể điền biểu mẫu đơn giản ở dưới.
 'limitreport-expansiondepth' => 'Độ sâu bung cao nhất',
 'limitreport-expensivefunctioncount' => 'Số lời gọi hàm cú pháp tốn cần mức độ xử lý cao',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'Bung bản mẫu',
+'expand_templates_intro' => 'Trang đặc biệt này sẽ nhận vào văn bản và bung tất cả các bản mẫu trong nó ra một cách đệ quy cho đến hết. Nó cũng bung cả những hàm cú pháp như <code><nowiki>{{</nowiki>#language:…}}</code>, và những biến số như <code><nowiki>{{</nowiki>CURRENTDAY}}</code>. Thực ra nó bung các dữ liệu bình thường đặt trong ngoặc móc.',
+'expand_templates_title' => 'Tên của trang văn cảnh (để phân tích {{FULLPAGENAME}} v.v.):',
+'expand_templates_input' => 'Mã nguồn để bung:',
+'expand_templates_output' => 'Kết quả',
+'expand_templates_xml_output' => 'Xuất XML',
+'expand_templates_ok' => 'Bung',
+'expand_templates_remove_comments' => 'Bỏ các chú thích',
+'expand_templates_remove_nowiki' => 'Bỏ qua thẻ <nowiki> trong kết quả',
+'expand_templates_generate_xml' => 'Xem cây phân tích XML',
+'expand_templates_preview' => 'Xem trước',
+
 );
index 4d5b813..c7e9ed0 100644 (file)
@@ -278,8 +278,6 @@ $1",
 'ok' => 'In ôrdnung',
 'retrievedfrom' => 'Fon „$1“ ghold',
 'youhavenewmessages' => "S'gajd $1 af dajnâr disghusjoons-sajdn ($2).",
-'newmessageslink' => 'naje middajlunga',
-'newmessagesdifflink' => 'lädschde fârendârung',
 'youhavenewmessagesmulti' => "S'gajd naje middajlungn: $1",
 'editsection' => 'Beärbâdn',
 'editold' => 'Bearbajdn',
@@ -540,7 +538,6 @@ Zu deiner Informadion folchd des Lösch- un Verschäibungs-Logbuch miid der Begr
 'preferences' => 'ajschdelunga',
 'mypreferences' => 'Ajschdelunga',
 'prefs-edits' => 'So ofd umgmoodld:',
-'prefsnologin' => 'Ned ôôgmäld',
 'changepassword' => "S'bhaswôrd ändârn",
 'prefs-skin' => 'Schaale',
 'skin-preview' => 'Môôl schbign',
index cdf855e..50264c8 100644 (file)
@@ -68,7 +68,6 @@ $specialPageAliases = array(
        'Categories'                => array( 'Klads' ),
        'Confirmemail'              => array( 'Fümedönladeti' ),
        'Contributions'             => array( 'Keblünots' ),
-       'Disambiguations'           => array( 'Telplänovs', 'Telplänovapads' ),
        'DoubleRedirects'           => array( 'Lüodükömstelik', 'Lüodüköms telik' ),
        'Listfiles'                 => array( 'Ragivalised', 'Magodalised' ),
        'Listusers'                 => array( 'Gebanalised' ),
@@ -369,8 +368,6 @@ $messages = array(
 'ok' => 'Si!',
 'retrievedfrom' => 'Pekopiedon se „$1“',
 'youhavenewmessages' => 'Su pad ola binons $1 ($2).',
-'newmessageslink' => 'nuns nulik',
-'newmessagesdifflink' => 'votükam lätik',
 'youhavenewmessagesfromusers' => 'Labol $1 de {{PLURAL:$3|geban votik|gebans $3}} ($2).',
 'youhavenewmessagesmanyusers' => 'Labol $1 de gebans mödik ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|nuni nulik|nunis nulik}}',
@@ -1006,7 +1003,6 @@ Kontrololös, va votükam at okipon fovöfi padajenotema.',
 'preferences' => 'Buükams',
 'mypreferences' => 'Buükams',
 'prefs-edits' => 'Num redakamas:',
-'prefsnologin' => 'No enunädon oki',
 'changepassword' => 'Votükön letavödi',
 'prefs-skin' => 'Fomät',
 'skin-preview' => 'Büologed',
@@ -1238,6 +1234,7 @@ Muton labön {{PLURAL:$1|malati|malatis}} läs $1.',
 'recentchanges-label-minor' => 'Atos binon redakam pülik',
 'recentchanges-label-bot' => 'Redakam at pädunon fa el bot',
 'recentchanges-label-unpatrolled' => 'Redakam at no nog pekontrolon',
+'recentchanges-legend-newpage' => '$1 - pad nulik',
 'rcnote' => "Dono {{PLURAL:$1|binon votükam '''1'''|binons votükams '''$1'''}} lätikün {{PLURAL:$2|dela|delas '''$2'''}} lätikün, pänumädöls tü $5, $4.",
 'rcnotefrom' => "Is palisedons votükams sis '''$2''' (jü '''$1''').",
 'rclistfrom' => 'Jonön votükamis nulik, primölo tü düp $1',
@@ -2914,4 +2911,19 @@ Kanol i [[Special:EditWatchlist|gebön redakametodi kösömik]].',
 'duration-centuries' => '{{PLURAL:$1|tumyel|tumyels}} $1',
 'duration-millennia' => '{{PLURAL:$1|milyel|milyels}} $1',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'stäänükön samafomotis',
+'expand_templates_intro' => 'Pad patik at sumon vödemi e stäänükon samafomotis onik valik okvokölo.
+Stäänükon i programasekätis soäs
+<code><nowiki>{{</nowiki>#language:...}}</code> e vödis soäs <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.
+Ibo, stäänükon valikosi vü pärs klämas fridik.',
+'expand_templates_title' => 'Yumedatiäd, pro {{FULLPAGENAME}} e r.:',
+'expand_templates_input' => 'Penolös vödem:',
+'expand_templates_output' => 'Seks',
+'expand_templates_xml_output' => 'Seks fomätü XML',
+'expand_templates_ok' => 'Baiced',
+'expand_templates_remove_comments' => 'Moükön küpetis',
+'expand_templates_generate_xml' => 'Jonön bimi: XML',
+'expand_templates_preview' => 'Büologed',
+
 );
index b21667c..c03d958 100644 (file)
@@ -179,8 +179,6 @@ $messages = array(
 'ok' => 'OK',
 'retrievedfrom' => 'Jälcinnü adresissa "$1"',
 'youhavenewmessages' => 'Teill on $1 ($2).',
-'newmessageslink' => 'Uusiit zapiskoit',
-'newmessagesdifflink' => 'viimõin muutuz',
 'editsection' => 'muuttaa',
 'editold' => 'muuttaa',
 'viewsourceold' => 'lähtekoodi',
index 53bb760..9282da1 100644 (file)
@@ -298,8 +298,6 @@ $1",
 'ok' => 'Hää külh',
 'retrievedfrom' => 'Vällä otsit teedüskogost "$1"',
 'youhavenewmessages' => 'Sul om $1 ($2).',
-'newmessageslink' => 'vahtsit sõnomiid',
-'newmessagesdifflink' => 'perämäne muutminõ',
 'youhavenewmessagesmulti' => 'Sullõ om vahtsit sõnomit lehe pääl $1',
 'editsection' => 'toimõndaq',
 'editold' => 'toimõndaq',
@@ -802,7 +800,6 @@ otsisõna iin edejakku ''all:''. Ütest kimmäst nimeruumist otsmisõs pruugiq e
 'preferences' => 'Säädmine',
 'mypreferences' => 'Säädmiseq',
 'prefs-edits' => 'Tõimõndamiisi arv:',
-'prefsnologin' => 'Sa olõ-i nimega sisse lännüq',
 'changepassword' => 'Muudaq salasõnna',
 'prefs-skin' => 'Vällänägemine',
 'skin-preview' => 'Kaeminõ',
index 0b11e86..ae871a3 100644 (file)
@@ -318,8 +318,6 @@ $1",
 'ok' => "'l est bon",
 'retrievedfrom' => 'Prin del pådje «$1»',
 'youhavenewmessages' => 'Vos avoz des $1 ($2).',
-'newmessageslink' => 'noveas messaedjes',
-'newmessagesdifflink' => 'dierin candjmint',
 'youhavenewmessagesmulti' => 'Vos avoz des noveas messaedjes so $1',
 'editsection' => 'candjî',
 'editold' => 'candjî',
@@ -844,7 +842,6 @@ Vos ploz sayî di mete «all:» pa dvant l' tecse a cweri po cweri dins tot l' c
 'preferences' => 'Preferinces',
 'mypreferences' => 'Mes preferinces',
 'prefs-edits' => 'Nombe di candjmints:',
-'prefsnologin' => "Vos n' estoz nén elodjî",
 'changepassword' => "Candjî l' sicret",
 'prefs-skin' => 'Pea',
 'skin-preview' => 'vey divant',
index ab280d9..6cdb3be 100644 (file)
@@ -44,7 +44,6 @@ $specialPageAliases = array(
        'Allpages'                  => array( 'NgatananngaPakli' ),
        'Categories'                => array( 'Mga_kaarangay' ),
        'Contributions'             => array( 'Mga_ámot' ),
-       'Disambiguations'           => array( 'Mga_pansayod' ),
        'Longpages'                 => array( 'HaglabangamgaPakli' ),
        'Mostlinked'                => array( 'Gidamo-iHinSumpay' ),
        'Movepage'                  => array( 'BalhinaAnPakli' ),
@@ -339,8 +338,6 @@ $1',
 'pagetitle-view-mainpage' => '{{SITENAME}}',
 'retrievedfrom' => 'Ginkuha tikang ha "$1"',
 'youhavenewmessages' => 'Mayda ka $1 ($2).',
-'newmessageslink' => 'bag-o nga mga mensahe',
-'newmessagesdifflink' => 'kataposan nga pagbag-o',
 'youhavenewmessagesfromusers' => 'May-ada ka $1 tikang ha {{PLURAL:$3|iba nga gumaramit|$3 mga gumaramit}} ($2).',
 'youhavenewmessagesmanyusers' => 'May-ada ka $1 tikang ha damo nga mga gumaramit ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|uska bag-o nga mensahe|bag-o nga mga mensahe}}',
@@ -1015,7 +1012,6 @@ Ginpapasabot nga an sulod han mga panudlok han {{SITENAME}} in bangin daan an.',
 'preferences' => 'Mga karuyag',
 'mypreferences' => 'Mga akon karuyag',
 'prefs-edits' => 'Ihap han mga pagliwat:',
-'prefsnologin' => 'Diri nakalog-in',
 'changepassword' => 'Igliwan an tigaman-pagsulod',
 'prefs-skin' => 'Panit',
 'skin-preview' => 'Pahiuna nga pagawas',
index 9e3a08b..1f7fc2e 100644 (file)
@@ -327,8 +327,6 @@ $1',
 'ok' => 'waaw',
 'retrievedfrom' => 'Ci « $1 » lañ ko jële',
 'youhavenewmessages' => 'Am nga $1 ($2).',
-'newmessageslink' => 'Bataaxal yu bees',
-'newmessagesdifflink' => 'Coppite gu mujj',
 'youhavenewmessagesmulti' => 'Am nga bataaxal yu yees ci $1',
 'editsection' => 'Soppi',
 'editold' => 'Soppi',
@@ -911,7 +909,6 @@ Jéemala bindaale ''all'' ngir seet ci biir ëmbit gépp (boolewaale ci xëti wa
 'preferences' => 'Tànneef',
 'mypreferences' => 'Samay tànneef',
 'prefs-edits' => 'Limu coppite yi:',
-'prefsnologin' => 'Duggoo',
 'changepassword' => 'Coppiteg baatujàll bi',
 'prefs-skin' => 'Melokaan',
 'skin-preview' => 'Wonendil',
@@ -1148,6 +1145,7 @@ Jéemala bindaale ''all'' ngir seet ci biir ëmbit gépp (boolewaale ci xëti wa
 'recentchanges-label-minor' => 'Coppite gu néewal la',
 'recentchanges-label-bot' => 'Coppite bu ab bot def',
 'recentchanges-label-unpatrolled' => 'Coppite bii kenn fugloogu ko',
+'recentchanges-legend-newpage' => '$1 - xët wu bees',
 'rcnote' => '{{PLURAL:$1|Lii mooy coppite bu mujj bees def|Yii ñooy coppite yu mujj yees def}} ci {{PLURAL:$2|bés bu mujj bi|<b>$2</b> bés yu mujj yi}}; njoxe yi ñoo ngi leen yeesal $5 ci $4.',
 'rcnotefrom' => "Yii ñooy coppite yi dalee '''$2''' (ba '''$1''').",
 'rclistfrom' => 'Wone coppite yi mujj yi dooree $1.',
index ded0b9a..26ce7e7 100644 (file)
@@ -142,7 +142,7 @@ $messages = array(
 'december-date' => '12月 $1',
 
 # Categories related messages
-'pagecategories' => '$1个分类',
+'pagecategories' => '{{PLURAL:$1|分类}}',
 'category_header' => '“$1”分類裏個頁',
 'subcategories' => '兒分類',
 'category-media-header' => '"$1"分类里个媒体',
@@ -293,8 +293,6 @@ $1',
 'ok' => '好',
 'retrievedfrom' => '取自“$1”',
 'youhavenewmessages' => '你侬有$1($2)。',
-'newmessageslink' => '新消息',
-'newmessagesdifflink' => '此垡更改',
 'newmessageslinkplural' => '{{PLURAL:$1|新消息}}',
 'newmessagesdifflinkplural' => '此垡̺{{PLURAL:$1|变化}}',
 'youhavenewmessagesmulti' => '爾徠$1裏有新信息',
@@ -994,7 +992,6 @@ $1",
 'preferences' => '偏好',
 'mypreferences' => '偏好设定',
 'prefs-edits' => '编辑数量:',
-'prefsnologin' => '朆登录',
 'changepassword' => '改密码',
 'prefs-skin' => '皮肤',
 'skin-preview' => '预览',
index 1cfd90d..81275b9 100644 (file)
@@ -306,8 +306,6 @@ $1',
 'ok' => 'Тиим',
 'retrievedfrom' => '"$1" гидг халхас йовулсн',
 'youhavenewmessages' => 'Та $1та бәәнәт ($2).',
-'newmessageslink' => 'шин зәңгс',
-'newmessagesdifflink' => 'шидрә сольлһн',
 'youhavenewmessagesmulti' => 'Таньд $1 деер шин зәңг ирсн бәәнә.',
 'editsection' => 'чиклх',
 'editold' => 'чиклх',
@@ -592,7 +590,6 @@ $1',
 'preferences' => 'Дурллһн',
 'mypreferences' => 'Көгүд',
 'prefs-edits' => 'Чикллһнә то:',
-'prefsnologin' => 'Та харһв биш',
 'changepassword' => 'Нууц үгиг сольҗ',
 'prefs-skin' => 'Хувцнь',
 'skin-preview' => 'Хәләвр',
@@ -706,6 +703,7 @@ $1',
 'recentchanges-label-newpage' => 'Тер үүләр шин халх бүтәв',
 'recentchanges-label-minor' => 'Эн баһ чинртә сольлһн',
 'recentchanges-label-bot' => 'Эн сольлһн көдлвр (робот) кехв',
+'recentchanges-legend-newpage' => '$1 — шин халх',
 'rcnote' => "{{PLURAL:$1|'''$1''' шидрә сольлһн|'''$1''' шидрә сольлһн|'''$1''' шидрә сольлһн}}, '''$2''' өдрә,  $5 $4 цагин.",
 'rclistfrom' => 'Тер цагас авн сольлһн үзүлх: $1.',
 'rcshowhideminor' => 'баһ чикллһиг $1',
index fe9c8e0..97ce03f 100644 (file)
@@ -203,8 +203,6 @@ $messages = array(
 'ok' => 'ჯგირი',
 'retrievedfrom' => 'გორილ რე "$1"-იშე',
 'youhavenewmessages' => 'თქვა გიღუნა $1 ($2).',
-'newmessageslink' => 'ახალი შატყვინაფეფი',
-'newmessagesdifflink' => 'ეკონია თირაფა',
 'editsection' => 'რედაქტირაფა',
 'editold' => 'რედაქტირაფა',
 'viewsourceold' => 'წყუშ ძირაფა',
index c3cc126..0e9e745 100644 (file)
@@ -71,7 +71,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( 'אוראלטע_בלעטער' ),
        'Blankpage'                 => array( 'ליידיגער_בלאט' ),
        'Block'                     => array( 'בלאקירן' ),
-       'Blockme'                   => array( 'בלאקירט_מיך' ),
        'BrokenRedirects'           => array( 'צעבראכענע_ווייטערפירונגען' ),
        'Categories'                => array( 'קאטעגאריעס' ),
        'ChangePassword'            => array( 'ענדערן_פאסווארט' ),
@@ -81,7 +80,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'שאפֿן_קאנטע' ),
        'Deadendpages'              => array( 'בלעטער_אן_פארבינדונגען' ),
        'DeletedContributions'      => array( 'אויסגעמעקעטע_בײַשטײַערונגען' ),
-       'Disambiguations'           => array( 'באדייטן' ),
        'DoubleRedirects'           => array( 'פארטאפלטע_ווייטערפירונגען' ),
        'Emailuser'                 => array( 'שיקן_אן_ע-פאסט_צום_באניצער' ),
        'Export'                    => array( 'עקספארט' ),
@@ -162,6 +160,7 @@ $magicWords = array(
        'numberofarticles'          => array( '1', 'צאל_ארטיקלען', 'מספר ערכים', 'NUMBEROFARTICLES' ),
        'numberoffiles'             => array( '1', 'צאל_טעקעס', 'מספר קבצים', 'NUMBEROFFILES' ),
        'numberofusers'             => array( '1', 'צאל_באניצער', 'מספר משתמשים', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'צאל_רעדאקטירונגען', 'מספר עריכות', 'NUMBEROFEDITS' ),
        'pagename'                  => array( '1', 'בלאטנאמען', 'שם הדף', 'PAGENAME' ),
        'namespace'                 => array( '1', 'נאמענטייל', 'מרחב השם', 'NAMESPACE' ),
        'fullpagename'              => array( '1', 'פולבלאטנאמען', 'שם הדף המלא', 'FULLPAGENAME' ),
@@ -178,6 +177,7 @@ $magicWords = array(
        'img_sub'                   => array( '1', 'אונטער', 'תחתי', 'sub' ),
        'img_super'                 => array( '1', 'איבער', 'עילי', 'super', 'sup' ),
        'img_top'                   => array( '1', 'אויבן', 'למעלה', 'top' ),
+       'img_middle'                => array( '1', 'אינמיטן', 'באמצע', 'middle' ),
        'img_bottom'                => array( '1', 'אונטן', 'למטה', 'bottom' ),
        'img_link'                  => array( '1', 'לינק=$1', 'קישור=$1', 'link=$1' ),
        'img_alt'                   => array( '1', 'טעקסט=$1', 'טקסט=$1', 'alt=$1' ),
@@ -192,6 +192,7 @@ $magicWords = array(
        'hiddencat'                 => array( '1', '__באהאלטענע_קאטעגאריע__', '__באהאלטענע_קאט__', '__קטגוריה_מוסתרת__', '__HIDDENCAT__' ),
        'pagesize'                  => array( '1', 'בלאטגרייס', 'גודל דף', 'PAGESIZE' ),
        'url_wiki'                  => array( '0', 'וויקי', 'ויקי', 'WIKI' ),
+       'pagesincategory_pages'     => array( '0', 'בלעטער', 'דפים', 'pages' ),
 );
 
 $messages = array(
@@ -471,12 +472,10 @@ $1',
 'backlinksubtitle' => '→ $1',
 'retrievedfrom' => 'גענומען פֿון "$1"',
 'youhavenewmessages' => 'איר האט $1 ($2).',
-'newmessageslink' => 'נייע מעלדונגען',
-'newmessagesdifflink' => 'לעצטע ענדערונג',
 'youhavenewmessagesfromusers' => 'איר האט $1 פון {{PLURAL:$3|אן אנדער באניצער|$3 באניצער}} ($2).',
 'youhavenewmessagesmanyusers' => 'איר האט $1 פון אסאך באניצער ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|א נייע מעלדונג|נייע מעלדונגען}}',
-'newmessagesdifflinkplural' => 'לעצטע {{PLURAL:$1|ענדערונג|ענדערונגען}}',
+'newmessageslinkplural' => '{{PLURAL:$1|א נייע מעלדונג|999=נייע מעלדונגען}}',
+'newmessagesdifflinkplural' => 'לעצטע {{PLURAL:$1|ענדערונג|999=ענדערונגען}}',
 'youhavenewmessagesmulti' => 'איר האט נייע מעלדונגען אין $1',
 'editsection' => 'באַאַרבעטן',
 'editold' => 'רעדאַקטירן',
@@ -1343,7 +1342,7 @@ $1",
 'preferences' => 'פרעפֿערענצן',
 'mypreferences' => 'פּרעפֿערענצן',
 'prefs-edits' => 'צאָל ענדערונגען:',
-'prefsnologin' => 'נישט אריינלאגירט',
+'prefsnologintext2' => 'זייט אזוי גוט $1 כדי צו שטעלן באניצער פרעפערענצן.',
 'changepassword' => 'טוישן פאַסווארט',
 'prefs-skin' => 'סקין',
 'skin-preview' => 'פארויסדיגע ווייזונג',
@@ -1642,6 +1641,8 @@ $1",
 'recentchanges-label-minor' => 'דאָס איז אַ מינערדיקע רעדאַקטירונג',
 'recentchanges-label-bot' => ' די רעדאַקטירונג האט אויסגעפירט א באט',
 'recentchanges-label-unpatrolled' => 'די רעדאקטירונג איז נאך נישט נאכגעקוקט',
+'recentchanges-label-plusminus' => 'בלאט גרייס געענדערט מיט דער אצל בייטן',
+'recentchanges-legend-newpage' => '(זעים אויך [[Special:NewPages|די רשימה פון נייע בלעטער]])',
 'rcnote' => "אונטן {{PLURAL:$1|איז '''1''' ענדערונג|זײַנען די לעצטע '''$1''' ענדערונגען}} אין {{PLURAL:$2|דעם לעצטן טאג|די לעצטע $2 טעג}}, ביז $5, $4.",
 'rcnotefrom' => "פֿאלגנד זענען די ענדערונגען זײַט '''$2''' (ביז '''$1''')",
 'rclistfrom' => 'װײַזן נײַע ענדערונגען פֿון $1',
@@ -3774,8 +3775,7 @@ $5
 # Special:SpecialPages
 'specialpages' => 'ספּעציעלע זײַטן',
 'specialpages-note' => '* נארמאַלע באַזונדערע בלעטער.
-* <strong class="mw-specialpagerestricted">באַגרענעצטע באַזונדערע בלעטער.</strong>
-* <span class="mw-specialpagecached">באַזונדערע בלעטער פֿון זאַפאַס (קענען זײַן פֿאַרעלטערט).</span>',
+* <span class="mw-specialpagerestricted">באַגרענעצטע באַזונדערע בלעטער.</span>',
 'specialpages-group-maintenance' => 'אויפֿהאַלטונג באַריכטן',
 'specialpages-group-other' => 'אַנדערע ספעציעלע בלעטער',
 'specialpages-group-login' => 'ארײַנלאגירן / שאַפֿן קאנטע',
@@ -3983,4 +3983,12 @@ $5
 'limitreport-expansiondepth' => 'גרעסטע אויסשפרייט טיף',
 'limitreport-expensivefunctioncount' => 'צאל פזרנישע פארזער־פֿונקציעס',
 
+# Special:ExpandTemplates
+'expandtemplates' => 'פרואוו מוסטערן',
+'expand_templates_input' => 'אײַנגעבן טעקסט',
+'expand_templates_output' => 'רעזולטאט',
+'expand_templates_xml_output' => 'XML אויסגאָב',
+'expand_templates_ok' => 'אויספֿירן',
+'expand_templates_preview' => 'פֿאראויסשטעלונג',
+
 );
index 13eb68f..14a1975 100644 (file)
@@ -326,8 +326,6 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => 'Jẹ́ kíkójáde láti "$1"',
 'youhavenewmessages' => 'Ẹ ní $1 ($2).',
-'newmessageslink' => 'ìránṣẹ́ tuntun',
-'newmessagesdifflink' => 'àtúnṣe tógbẹ̀yìn',
 'youhavenewmessagesfromusers' => 'Ẹ ní $1 láti ọ̀dọ̀ {{PLURAL:$3|oníṣe míràn|àwọn oníṣe $3}} ($2).',
 'youhavenewmessagesmanyusers' => 'Ẹ ní $1 láti ọ̀dọ̀ àwọn oníṣe púpọ̀ ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|ìránṣẹ́ tuntun kan|àwọn ìránṣẹ́ tuntun}}',
@@ -1163,7 +1161,6 @@ Ní báyìí ná ẹ le ṣàwárí lọ́dọ̀ Google.
 'preferences' => 'Àwọn ìfẹ́ràn',
 'mypreferences' => 'Àwọn ìfẹ́ràn',
 'prefs-edits' => 'Iye àwọn àtúnṣe:',
-'prefsnologin' => 'Ẹ kò tíì wọlé',
 'changepassword' => 'Ìyípadà ọ̀rọ̀ìpamọ́',
 'prefs-skin' => 'Skin (Àwọ̀)',
 'skin-preview' => 'Àkọ́yẹ̀wò',
@@ -1440,6 +1437,7 @@ Tí ẹ bá fisílẹ̀ a ó lòó láti tóka iṣẹ́ yín fún yín.',
 'recentchanges-label-minor' => 'Àtùnṣe kékeré nìyí',
 'recentchanges-label-bot' => 'Rọ́bọ́ọ̀tì ni ó ṣe àtúnṣe yìí',
 'recentchanges-label-unpatrolled' => 'Àtúnṣe yìí kò tí ì jẹ́ onísíṣọ́',
+'recentchanges-legend-newpage' => '$1 - ojúewé tuntun',
 'rcnote' => "Lábẹ́ ni {{PLURAL:$1|àtúnṣe '''kan'''|àwọn àtúnṣe '''$1''' tí wọn gbẹ̀yìn}} láàrin {{PLURAL:$2|ọjọ́ kan|ọjọ́ '''$2'''}} sẹ́yìn ní ago $5, lọ́jọ́ $4.",
 'rcnotefrom' => "Àwọn àtúnṣe láti ''''$2''' (títí dé '''$1''' hàn) lábẹ́.",
 'rclistfrom' => 'Àfihàn àwọn àtúnṣe tuntun nípa bíbẹ̀rẹ̀ láti $1',
@@ -1462,7 +1460,7 @@ Tí ẹ bá fisílẹ̀ a ó lòó láti tóka iṣẹ́ yín fún yín.',
 'rc_categories_any' => 'Èyíkéyìí',
 'rc-change-size-new' => '$1 {{PLURAL:$1|byte|bytes}} lẹ́yìn àtúnṣe',
 'newsectionsummary' => '/* $1 */ abala tuntun',
-'rc-enhanced-expand' => 'Ìfihàn ẹ̀kúnrẹ́rẹ́ (JavaScript pọndandan)',
+'rc-enhanced-expand' => 'Ìfihàn ẹ̀kúnrẹ́rẹ́',
 'rc-enhanced-hide' => 'Ìfipamọ́ ẹ̀kúnrẹ́rẹ́',
 'rc-old-title' => 'dídá tẹ́lẹ̀tẹ́lẹ̀ bíi "$1"',
 
@@ -2367,7 +2365,7 @@ $1',
 'contributions' => 'Àwọn àfikún {{GENDER:$1|oníṣe}}',
 'contributions-title' => 'Àwọn àfikún oníṣe fún $1',
 'mycontris' => 'Àwọn àfikún',
-'contribsub2' => 'Fún $1 ($2)',
+'contribsub2' => 'Fún {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Kò sí àtúnṣe tuntun tó bá àwárí mu.',
 'uctop' => '(lówọ́)',
 'month' => 'Láti osù (àti sẹ́yìn):',
@@ -2962,7 +2960,7 @@ Tí ẹ bá jẹ́ ó ṣiṣẹ́, ẹ̀rọ sístẹ́mù yín le kó sí ewu.
 'svg-long-desc' => 'faili SVG, pẹ̀lú $1 × $2 pixels, ìtòbi faili: $3',
 'svg-long-desc-animated' => 'Fáìlì SVG alámùúrìn, tó jẹ́ $1 × $2 pixels, ìtóbi fáìlì: $3',
 'svg-long-error' => 'Fáìlì SVG àìyẹ: $1',
-'show-big-image' => 'Pẹ̀lú ìgbéhàn gíga',
+'show-big-image' => 'Fáìlì àtìbẹ̀rẹ̀',
 'show-big-image-preview' => 'Ìtóbi ìkọ́yẹ̀wò yìí: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Ìgbéhàn|Àwọn ìgbéhàn}} míràn: $1.',
 'show-big-image-size' => '$1 × $2 pixels',
index 8aa212d..e3717c2 100644 (file)
@@ -101,7 +101,6 @@ $specialPageAliases = array(
        'Ancientpages'              => array( '舊版' ),
        'Blankpage'                 => array( '空版' ),
        'Block'                     => array( '封' ),
-       'Blockme'                   => array( '封我' ),
        'Booksources'               => array( '書本來源' ),
        'BrokenRedirects'           => array( '斷鏈' ),
        'Categories'                => array( '分類' ),
@@ -112,7 +111,6 @@ $specialPageAliases = array(
        'CreateAccount'             => array( '開戶' ),
        'Deadendpages'              => array( '掘頭頁' ),
        'DeletedContributions'      => array( '刪咗嘅貢獻' ),
-       'Disambiguations'           => array( '搞清楚頁' ),
        'DoubleRedirects'           => array( '雙重跳轉' ),
        'EditWatchlist'             => array( '改監視清單' ),
        'Emailuser'                 => array( '電郵用戶' ),
@@ -163,7 +161,7 @@ $specialPageAliases = array(
        'Revisiondelete'            => array( '修訂版本刪除' ),
        'Search'                    => array( '搜索' ),
        'Shortpages'                => array( '短版' ),
-       'Specialpages'              => array( '特別頁' ),
+       'Specialpages'              => array( '專門版' ),
        'Statistics'                => array( '統計' ),
        'Tags'                      => array( '標籤' ),
        'Unblock'                   => array( '解封' ),
@@ -492,8 +490,6 @@ $1',
 'ok' => 'OK',
 'retrievedfrom' => '由 "$1" 收',
 'youhavenewmessages' => '你有$1($2)。',
-'newmessageslink' => '新信息',
-'newmessagesdifflink' => '上次更改',
 'youhavenewmessagesmulti' => '你響 $1 有新信',
 'editsection' => '編輯',
 'editold' => '編輯',
@@ -1155,7 +1151,6 @@ $1",
 'preferences' => '喜好設定',
 'mypreferences' => '自訂喜好',
 'prefs-edits' => '編輯數:',
-'prefsnologin' => '重未登入',
 'changepassword' => '改密碼',
 'prefs-skin' => '畫面',
 'skin-preview' => '預覽',
@@ -1420,6 +1415,7 @@ $1",
 'recentchanges-label-minor' => '呢個係一個細編輯',
 'recentchanges-label-bot' => '呢次編輯係由機械人進行',
 'recentchanges-label-unpatrolled' => '呢次編輯重未巡查過',
+'recentchanges-legend-newpage' => '$1 - 新版',
 'rcnote' => "以下係響$4 $5,近'''$2'''日嘅最後'''$1'''次修改。",
 'rcnotefrom' => "以下係自'''$2'''嘅更改(顯示到'''$1''')。",
 'rclistfrom' => '顯示由$1嘅新更改',
@@ -3316,4 +3312,16 @@ MediaWiki是基於使用目的而加以發佈,但係就唔會負上任何嘅
 # Durations
 'duration-hours' => '$1{{PLURAL:$1|個鐘}}',
 
+# Special:ExpandTemplates
+'expandtemplates' => '展開模',
+'expand_templates_intro' => '呢個特別頁係用於將一啲文字中嘅模展開,包括響個模度引用嘅模。同時亦都展開解譯器函數好似<nowiki>{{</nowiki>#language:...}},以及一啲變數好似<nowiki>{{</nowiki>CURRENTDAY}}&mdash;實際上,幾乎所有響雙括弧中嘅內容都會被展開。呢個特別頁係通過使用MediaWiki嘅相關解釋階段嘅功能完成嘅。',
+'expand_templates_title' => '內容標題,用於 {{FULLPAGENAME}} 等頁面:',
+'expand_templates_input' => '輸入文字:',
+'expand_templates_output' => '結果:',
+'expand_templates_xml_output' => 'XML輸出',
+'expand_templates_ok' => 'OK',
+'expand_templates_remove_comments' => '拎走注釋',
+'expand_templates_generate_xml' => '顯示XML語法樹',
+'expand_templates_preview' => '預覽',
+
 );
index 5856b2d..682aa6c 100644 (file)
@@ -299,8 +299,6 @@ $1",
 'ok' => 'OK',
 'retrievedfrom' => 'Truggeplekt van "$1"',
 'youhavenewmessages' => 'Je ei $1 ($2).',
-'newmessageslink' => 'nieuw bericht',
-'newmessagesdifflink' => 'de bewerkieng bekieken',
 'youhavenewmessagesmulti' => 'Je ei nieuwe berichen op $1',
 'editsection' => 'bewerken',
 'editold' => 'bewerk',
@@ -829,7 +827,6 @@ De hehevens over {{SITENAME}} zien meuhlijk nie bie'ewerkt.",
 'preferences' => 'Vòkeuren',
 'mypreferences' => 'Mien vòkeuren',
 'prefs-edits' => 'Antal bewerkiengen:',
-'prefsnologin' => 'Nie anemeld',
 'changepassword' => 'Wachtwoôrd wiezigen',
 'prefs-skin' => 'Vurmhevieng',
 'skin-preview' => 'Voevertoônienge',
index 20c5d53..4a485b6 100644 (file)
@@ -130,29 +130,29 @@ $namespaceAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( '活跃用户' ),
        'Allmessages'               => array( '所有信息' ),
+       'AllMyUploads'              => array( '我上传的所有文件', '我的所有文件' ),
        'Allpages'                  => array( '所有页面' ),
        'Ancientpages'              => array( '最老页面' ),
-       'Badtitle'                  => array( '无效标题' ),
+       'Badtitle'                  => array( '错误标题', '无效标题' ),
        'Blankpage'                 => array( '空白页面' ),
        'Block'                     => array( '封禁用户' ),
-       'Blockme'                   => array( '自我封禁' ),
        'Booksources'               => array( '网络书源' ),
-       'BrokenRedirects'           => array( '受损重定向' ),
+       'BrokenRedirects'           => array( '受损重定向' ),
        'Categories'                => array( '页面分类' ),
        'ChangeEmail'               => array( '修改邮箱' ),
        'ChangePassword'            => array( '修改密码' ),
-       'ComparePages'              => array( '比较页面' ),
+       'ComparePages'              => array( '对比页面', '比较页面' ),
        'Confirmemail'              => array( '确认电子邮件' ),
        'Contributions'             => array( '用户贡献' ),
        'CreateAccount'             => array( '创建账户' ),
        'Deadendpages'              => array( '断链页面' ),
        'DeletedContributions'      => array( '已删除的用户贡献' ),
-       'Disambiguations'           => array( '消歧义页' ),
-       'DoubleRedirects'           => array( '双重重定向页', '两次重定向页' ),
+       'DoubleRedirects'           => array( '双重重定向', '两次重定向' ),
        'EditWatchlist'             => array( '编辑监视列表' ),
-       'Emailuser'                 => array( '电子邮件用户' ),
+       'Emailuser'                 => array( '电邮联系' ),
+       'ExpandTemplates'           => array( '展开模板' ),
        'Export'                    => array( '导出页面' ),
-       'Fewestrevisions'           => array( '最少修订页面' ),
+       'Fewestrevisions'           => array( '版本最少页面', '最少修订页面' ),
        'FileDuplicateSearch'       => array( '搜索重复文件' ),
        'Filepath'                  => array( '文件路径' ),
        'Import'                    => array( '导入页面' ),
@@ -186,17 +186,21 @@ $specialPageAliases = array(
        'Myuploads'                 => array( '我上传的文件' ),
        'Newimages'                 => array( '新建文件' ),
        'Newpages'                  => array( '新建页面' ),
+       'PagesWithProp'             => array( '带属性的页面' ),
        'PasswordReset'             => array( '重设密码' ),
        'PermanentLink'             => array( '永久链接' ),
        'Popularpages'              => array( '热点页面' ),
-       'Preferences'               => array( '参数设置', '系统设置' ),
+       'Preferences'               => array( '参数设置', '设置' ),
        'Prefixindex'               => array( '前缀索引' ),
        'Protectedpages'            => array( '已保护页面' ),
        'Protectedtitles'           => array( '已保护标题' ),
        'Randompage'                => array( '随机页面' ),
-       'Randomredirect'            => array( '随机重定向页' ),
+       'RandomInCategory'          => array( '分类内随机' ),
+       'Randomredirect'            => array( '随机重定向', '随机重定向页' ),
        'Recentchanges'             => array( '最近更改' ),
-       'Recentchangeslinked'       => array( '链出更改' ),
+       'Recentchangeslinked'       => array( '相关更改', '链出更改' ),
+       'Redirect'                  => array( '重定向' ),
+       'ResetTokens'               => array( '重置权标' ),
        'Revisiondelete'            => array( '删除或恢复修订' ),
        'Search'                    => array( '搜索' ),
        'Shortpages'                => array( '短页面' ),
@@ -216,17 +220,17 @@ $specialPageAliases = array(
        'Unwatchedpages'            => array( '未受监视页面' ),
        'Upload'                    => array( '上传文件' ),
        'UploadStash'               => array( '上传藏匿' ),
-       'Userlogin'                 => array( '用户登录', '用户登入' ),
-       'Userlogout'                => array( '用户退出', '用户登出' ),
+       'Userlogin'                 => array( '用户登录' ),
+       'Userlogout'                => array( '用户退出' ),
        'Userrights'                => array( '用户权限' ),
-       'Version'                   => array( '版本信息' ),
-       'Wantedcategories'          => array( '待撰分类' ),
+       'Version'                   => array( '版本', '版本信息' ),
+       'Wantedcategories'          => array( '需要的分类', '待撰分类' ),
        'Wantedfiles'               => array( '需要的文件' ),
-       'Wantedpages'               => array( '待撰页面' ),
+       'Wantedpages'               => array( '需要的页面', '待撰页面', '受损链接' ),
        'Wantedtemplates'           => array( '需要的模板' ),
        'Watchlist'                 => array( '监视列表' ),
        'Whatlinkshere'             => array( '链入页面' ),
-       'Withoutinterwiki'          => array( '无跨维基链接页面' ),
+       'Withoutinterwiki'          => array( '无跨维基', '无跨维基链接页面' ),
 );
 
 $magicWords = array(
@@ -235,15 +239,26 @@ $magicWords = array(
        'nogallery'                 => array( '0', '__无图库__', '__NOGALLERY__' ),
        'forcetoc'                  => array( '0', '__强显目录__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__目录__', '__TOC__' ),
-       'noeditsection'             => array( '0', '__无段落编辑__', '__NOEDITSECTION__' ),
-       'currentmonth'              => array( '1', '本月', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'noeditsection'             => array( '0', '__无编辑段落__', '__无段落编辑__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', '本月', '本月2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', '本月1', 'CURRENTMONTH1' ),
-       'currentmonthname'          => array( '1', '本月名称', 'CURRENTMONTHNAME' ),
+       'currentmonthname'          => array( '1', '本月名', '本月名称', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', '本月名属格', '本月名称属格', 'CURRENTMONTHNAMEGEN' ),
        'currentmonthabbrev'        => array( '1', '本月简称', 'CURRENTMONTHABBREV' ),
        'currentday'                => array( '1', '今天', 'CURRENTDAY' ),
        'currentday2'               => array( '1', '今天2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', '星期', '今天名', '今天名称', 'CURRENTDAYNAME' ),
        'currentyear'               => array( '1', '今年', 'CURRENTYEAR' ),
-       'currenttime'               => array( '1', '此时', '当前时间', 'CURRENTTIME' ),
+       'currenttime'               => array( '1', '当前时间', '此时', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', '当前小时', 'CURRENTHOUR' ),
+       'localmonth'                => array( '1', '本地月', 'LOCALMONTH', 'LOCALMONTH2' ),
+       'localmonthname'            => array( '1', '本地月份名', 'LOCALMONTHNAME' ),
+       'localmonthnamegen'         => array( '1', '本地月历', 'LOCALMONTHNAMEGEN' ),
+       'localday'                  => array( '1', '本地日', 'LOCALDAY' ),
+       'localdayname'              => array( '1', '本地日名', 'LOCALDAYNAME' ),
+       'localyear'                 => array( '1', '本地年', 'LOCALYEAR' ),
+       'localtime'                 => array( '1', '本地时间', 'LOCALTIME' ),
+       'localhour'                 => array( '1', '本地小时', 'LOCALHOUR' ),
        'numberofpages'             => array( '1', '页面数', 'NUMBEROFPAGES' ),
        'numberofarticles'          => array( '1', '条目数', 'NUMBEROFARTICLES' ),
        'numberoffiles'             => array( '1', '文件数', 'NUMBEROFFILES' ),
@@ -251,19 +266,19 @@ $magicWords = array(
        'numberofactiveusers'       => array( '1', '活跃用户数', 'NUMBEROFACTIVEUSERS' ),
        'numberofedits'             => array( '1', '编辑数', 'NUMBEROFEDITS' ),
        'numberofviews'             => array( '1', '访问数', 'NUMBEROFVIEWS' ),
-       'pagename'                  => array( '1', '页面名', 'PAGENAME' ),
-       'pagenamee'                 => array( '1', '页面名E', 'PAGENAMEE' ),
+       'pagename'                  => array( '1', '页名', '页面名', '页面名称', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', '页名等同', '页面名等同', '页面名E', 'PAGENAMEE' ),
        'namespace'                 => array( '1', '名字空间', 'NAMESPACE' ),
-       'namespacee'                => array( '1', '名字空间E', 'NAMESPACEE' ),
+       'namespacee'                => array( '1', '名字空间等同', '名字空间E', 'NAMESPACEE' ),
        'namespacenumber'           => array( '1', '名字空间编号', 'NAMESPACENUMBER' ),
-       'talkspace'                 => array( '1', '讨论名字空间', 'TALKSPACE' ),
-       'talkspacee'                => array( '1', '讨论名字空间E', 'TALKSPACEE' ),
-       'fullpagename'              => array( '1', '完整页面名', 'FULLPAGENAME' ),
+       'talkspace'                 => array( '1', '讨论空间', '讨论名字空间', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', '讨论空间等同', '讨论名字空间E', 'TALKSPACEE' ),
+       'fullpagename'              => array( '1', '页面全名', '完整页面名', 'FULLPAGENAME' ),
        'fullpagenamee'             => array( '1', '完整页面名E', 'FULLPAGENAMEE' ),
        'subpagename'               => array( '1', '子页面名', 'SUBPAGENAME' ),
-       'subpagenamee'              => array( '1', '子页面名E', 'SUBPAGENAMEE' ),
+       'subpagenamee'              => array( '1', '子页面名等同', '子页面名E', 'SUBPAGENAMEE' ),
        'talkpagename'              => array( '1', '讨论页面名', 'TALKPAGENAME' ),
-       'talkpagenamee'             => array( '1', '讨论页面名E', 'TALKPAGENAMEE' ),
+       'talkpagenamee'             => array( '1', '讨论页面名等同', '讨论页面名E', 'TALKPAGENAMEE' ),
        'subst'                     => array( '0', '替代:', 'SUBST:' ),
        'safesubst'                 => array( '0', '安全替代:', 'SAFESUBST:' ),
        'img_thumbnail'             => array( '1', '缩略图', 'thumbnail', 'thumb' ),
@@ -276,9 +291,9 @@ $magicWords = array(
        'img_framed'                => array( '1', '有框', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', '无框', 'frameless' ),
        'img_page'                  => array( '1', '页数=$1', '$1页', 'page=$1', 'page $1' ),
-       'img_border'                => array( '1', '有边', 'border' ),
+       'img_border'                => array( '1', '边框', 'border' ),
        'img_link'                  => array( '1', '链接=$1', 'link=$1' ),
-       'img_alt'                   => array( '1', '替代文本=$1', 'alt=$1' ),
+       'img_alt'                   => array( '1', '替代=$1', '替代文本=$1', 'alt=$1' ),
        'img_class'                 => array( '1', '类=$1', 'class=$1' ),
        'int'                       => array( '0', '界面:', 'INT:' ),
        'sitename'                  => array( '1', '站点名称', 'SITENAME' ),
@@ -293,9 +308,13 @@ $magicWords = array(
        'scriptpath'                => array( '0', '脚本路径', 'SCRIPTPATH' ),
        'stylepath'                 => array( '0', '样式路径', 'STYLEPATH' ),
        'grammar'                   => array( '0', '语法:', 'GRAMMAR:' ),
-       'gender'                    => array( '0', '性别:', 'GENDER:' ),
+       'gender'                    => array( '0', '性:', '性别:', 'GENDER:' ),
        'notitleconvert'            => array( '0', '__不转换标题__', '__NOTITLECONVERT__', '__NOTC__' ),
        'nocontentconvert'          => array( '0', '__不转换内容__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'currentweek'               => array( '1', '本周', 'CURRENTWEEK' ),
+       'plural'                    => array( '0', '复数:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', '完整URL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', '完整URL等同:', '完整URLE:', 'FULLURLE:' ),
        'lcfirst'                   => array( '0', '小写首字:', 'LCFIRST:' ),
        'ucfirst'                   => array( '0', '大写首字:', 'UCFIRST:' ),
        'lc'                        => array( '0', '小写:', 'LC:' ),
@@ -317,12 +336,12 @@ $magicWords = array(
        'padleft'                   => array( '0', '左填充', 'PADLEFT' ),
        'padright'                  => array( '0', '右填充', 'PADRIGHT' ),
        'special'                   => array( '0', '特殊', 'special' ),
-       'speciale'                  => array( '0', '特殊e', 'speciale' ),
+       'speciale'                  => array( '0', '特殊等同', '特殊e', 'speciale' ),
        'defaultsort'               => array( '1', '默认排序:', '默认排序关键字:', '默认分类排序:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
        'filepath'                  => array( '0', '文件路径:', 'FILEPATH:' ),
        'tag'                       => array( '0', '标记', 'tag' ),
        'hiddencat'                 => array( '1', '__隐藏分类__', '__HIDDENCAT__' ),
-       'pagesincategory'           => array( '1', '分类中页面数', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesincategory'           => array( '1', '分类中页数', '分类中页面数', 'PAGESINCATEGORY', 'PAGESINCAT' ),
        'pagesize'                  => array( '1', '页面大小', 'PAGESIZE' ),
        'index'                     => array( '1', '__索引__', '__INDEX__' ),
        'noindex'                   => array( '1', '__不索引__', '__NOINDEX__' ),
@@ -367,10 +386,10 @@ $messages = array(
 'tog-hideminor' => '隐藏最近更改中的小编辑',
 'tog-hidepatrolled' => '隐藏最近更改中的已巡查编辑',
 'tog-newpageshidepatrolled' => '隐藏新页面列表中的已巡查页面',
-'tog-extendwatchlist' => 'æ\89©å¤§监视列表以显示所有更改而不仅是最近更改',
-'tog-usenewrc' => '按页面组合最近更改和监视列表中的更改',
+'tog-extendwatchlist' => 'æ\89©å±\95监视列表以显示所有更改而不仅是最近更改',
+'tog-usenewrc' => '按页面合并最近更改和监视列表中的更改',
 'tog-numberheadings' => '自动编号标题',
-'tog-showtoolbar' => 'æ\98¾ç¤ºç¼\96è¾\91å·¥å\85·æ\9d¡',
+'tog-showtoolbar' => 'æ\98¾ç¤ºç¼\96è¾\91å·¥å\85·æ \8f',
 'tog-editondblclick' => '双击编辑页面',
 'tog-editsection' => '启用[编辑]链接编辑段落',
 'tog-editsectiononrightclick' => '启用右击段落标题编辑段落',
@@ -483,12 +502,12 @@ $messages = array(
 'december-date' => '12月$1日',
 
 # Categories related messages
-'pagecategories' => '$1个分类',
+'pagecategories' => '{{PLURAL:$1|分类}}',
 'category_header' => '分类“$1”中的页面',
 'subcategories' => '子分类',
 'category-media-header' => '分类“$1”中的媒体文件',
 'category-empty' => "''本分类目前未包含页面或媒体文件。''",
-'hidden-categories' => '$1个隐藏分类',
+'hidden-categories' => '{{PLURAL:$1|隐藏分类}}',
 'hidden-category-category' => '隐藏分类',
 'category-subcat-count' => '{{PLURAL:$2|本分类只有以下子分类。|本分类有以下$1个子分类,共有$2个子分类。}}',
 'category-subcat-count-limited' => '本分类有以下{{PLURAL:$1|子分类|$1个子分类}}。',
@@ -635,12 +654,10 @@ $1',
 'backlinksubtitle' => '←$1',
 'retrievedfrom' => '取自“$1”',
 'youhavenewmessages' => '你有$1($2)。',
-'newmessageslink' => '新信息',
-'newmessagesdifflink' => '最后更改',
 'youhavenewmessagesfromusers' => '你有来自{{PLURAL:$3|其他用户|$3个用户}}的$1($2)。',
 'youhavenewmessagesmanyusers' => '你有来自多个用户的$1($2)。',
-'newmessageslinkplural' => '{{PLURAL:$1|新信息}}',
-'newmessagesdifflinkplural' => '最后{{PLURAL:$1|更改}}',
+'newmessageslinkplural' => '{{PLURAL:$1|新信息|999=新消息}}',
+'newmessagesdifflinkplural' => '最后{{PLURAL:$1|更改|999=更改}}',
 'youhavenewmessagesmulti' => '你在$1有新信息',
 'editsection' => '编辑',
 'editold' => '编辑',
@@ -764,7 +781,8 @@ $2',
 'invalidtitle-knownnamespace' => '使用名字空间“$2”和文本“$3”的无效标题',
 'invalidtitle-unknownnamespace' => '使用未知名字空间编号$1和文本“$2”的无效标题',
 'exception-nologin' => '未登录',
-'exception-nologin-text' => '该页面或操作需要你登录至本wiki。',
+'exception-nologin-text' => '该页面或操作需要你[[Special:Userlogin|登录]]至本Wiki。',
+'exception-nologin-text-manual' => '查看该页面或进行此操作需要您$1。',
 
 # Virus scanner
 'virus-badscanner' => "错误的配置:未知的病毒扫描程序:''$1''",
@@ -961,17 +979,17 @@ $2
 'changeemail-cancel' => '取消',
 
 # Special:ResetTokens
-'resettokens' => '重置权标',
-'resettokens-text' => '您可以重置权标,其允许访问某些与您的帐户相关联的私人数据
+'resettokens' => '重置密钥',
+'resettokens-text' => '你可以在这里重置允许访问与你的账户有关的特定私人数据的密钥
 
-如果您意外地与他人共享权标,或您的帐户已遭到破坏,您应该重置权标。',
-'resettokens-no-tokens' => '没有可重置得权标。',
-'resettokens-legend' => '重置权标',
-'resettokens-tokens' => '权标:',
+如果你意外将它们分享给他人,或是你的账户已经被入侵,你应该重置它们。',
+'resettokens-no-tokens' => '没有可以重置的密钥。',
+'resettokens-legend' => '重置密钥',
+'resettokens-tokens' => '密钥:',
 'resettokens-token-label' => '$1(当前值:$2)',
-'resettokens-watchlist-token' => '请在[[Special:Watchlist|您的监视列表]]中更改Web订阅(Atom或RSS)的权标',
-'resettokens-done' => '权标已重置。',
-'resettokens-resetbutton' => '重置所选的权标',
+'resettokens-watchlist-token' => '[[Special:Watchlist|对你的监视列表中的页面的更改]]的网页feed(Atom/RSS)的密钥',
+'resettokens-done' => '密钥已重置。',
+'resettokens-resetbutton' => '重置选择的密钥',
 
 # Edit page toolbar
 'bold_sample' => '粗体文字',
@@ -1045,9 +1063,7 @@ $2
 'accmailtitle' => '密码已寄出',
 'accmailtext' => "为[[User talk:$1|$1]]随机生成的密码已送至$2。登录后可以在''[[Special:ChangePassword|更改密码]]''页面中修改。",
 'newarticle' => '(新页面)',
-'newarticletext' => '您进入了一个尚未创建的页面。
-要创建该页面,请在下面的编辑框中输入内容(详情参见[[{{MediaWiki:Helppage}}|帮助页]])。
-如果您误入此页,请点击浏览器中的“返回”按钮。',
+'newarticletext' => "你点击了一个尚不存在的页面的链接。要创建该页面,请在下面的编辑框中输入内容(更多信息请见[[{{MediaWiki:Helppage}}|帮助页面]])。如果你是错误地到达这里,请点击你的浏览器的'''返回'''按钮。",
 'anontalkpagetext' => "---- ''这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。''",
 'noarticletext' => '本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]、<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页面]。</span>',
 'noarticletext-nopermission' => '本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]或<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志],但你没有权限创建本页面。',
@@ -1058,10 +1074,10 @@ $2
 'userpage-userdoesnotexist' => '用户账户“$1”没有注册。请在创建/编辑本页前检查。',
 'userpage-userdoesnotexist-view' => '用户账户“$1”未曾创建。',
 'blocked-notice-logextract' => '这位用户目前已被封禁。以下提供最近的封禁日志以供参考:',
-'clearyourcache' => "'''注意:'''保存之后,你必须清除浏览器缓存才能看到做出的更改。
-* '''火狐(Firefox)/Safari:'''按住“Shift”,同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
+'clearyourcache' => "'''注意:'''在保存之后,你可能需要清除你的浏览器的缓存以查看更改。
+* '''Firefox/Safari:'''按住“Shift”的同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
 * '''Google Chrome:'''按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)
-* '''Internet Explorer:'''按住“Ctrl”同时单击“刷新”,或按“Ctrl-F5”
+* '''Internet Explorer:'''按住“Ctrl”同时单击“刷新”,或按“Ctrl-F5”
 * '''Opera:'''在“工具→首选项”中清除缓存",
 'usercssyoucanpreview' => "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 CSS 。",
 'userjsyoucanpreview' => "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 JavaScript 。",
@@ -1266,8 +1282,8 @@ $3的理由是''$2''",
 'revdelete-hide-user' => '编辑者的用户名/IP地址',
 'revdelete-hide-restricted' => '同时阻止管理员与其他用户查看数据',
 'revdelete-radio-same' => '(不更改)',
-'revdelete-radio-set' => '隐藏',
-'revdelete-radio-unset' => '可见',
+'revdelete-radio-set' => '可见',
+'revdelete-radio-unset' => '隐藏',
 'revdelete-suppress' => '同时阻止管理员与其他用户查看数据',
 'revdelete-unsuppress' => '在已恢复的修订中移除限制',
 'revdelete-log' => '原因:',
@@ -1415,7 +1431,7 @@ $1",
 'preferences' => '设置',
 'mypreferences' => '设置',
 'prefs-edits' => '编辑数:',
-'prefsnologin' => '未登录',
+'prefsnologintext2' => '进行用户设置需要您$1。',
 'changepassword' => '更改密码',
 'prefs-skin' => '皮肤',
 'skin-preview' => '预览',
@@ -1429,9 +1445,9 @@ $1",
 'prefs-watchlist' => '监视列表',
 'prefs-watchlist-days' => '监视列表中显示的天数:',
 'prefs-watchlist-days-max' => '最多$1天',
-'prefs-watchlist-edits' => '扩展监视列表中显示的最大更改数:',
-'prefs-watchlist-edits-max' => '最大数:1000',
-'prefs-watchlist-token' => '监视列表权标:',
+'prefs-watchlist-edits' => '在扩展监视列表中显示的更改的最大数目:',
+'prefs-watchlist-edits-max' => '最大数:1000',
+'prefs-watchlist-token' => '监视列表密钥:',
 'prefs-misc' => '其他',
 'prefs-resetpass' => '更改密码',
 'prefs-changeemail' => '更改电子邮件地址',
@@ -1451,10 +1467,8 @@ $1",
 'recentchangesdays' => '最近更改中显示的天数:',
 'recentchangesdays-max' => '最多$1天',
 'recentchangescount' => '默认显示的编辑数:',
-'prefs-help-recentchangescount' => '该项包含最近更改、页面历史和日志。',
-'prefs-help-watchlist-token2' => '这是您的监视列表网络订阅源密钥的关键。
-知道它的人将能够读取您的监视列表,所以不应分享它。
-[[Special:ResetTokens|点击这里以重置它]]。',
+'prefs-help-recentchangescount' => '这包括近更改、页面历史和日志。',
+'prefs-help-watchlist-token2' => '这是你的监视列表网页feed的密钥。任何知道它的人均可以阅读你的监视列表,因此不要分享它。[[Special:ResetTokens|如果需要重置它,请点击这里]]。',
 'savedprefs' => '你的系统设置已保存。',
 'timezonelegend' => '时区:',
 'localtime' => '当地时间:',
@@ -1501,9 +1515,7 @@ $1",
 'gender-unknown' => '我不愿意指明(被称为“他/她”)',
 'gender-male' => '他',
 'gender-female' => '她',
-'prefs-help-gender' => '这是选填项目。
-软件使用其以显示正确的性别称呼。
-该信息将会公开。',
+'prefs-help-gender' => '该设置为可选项目。软件根据它的值在称呼你及对他人提及你时使用适当的语法性别。该信息会被公开。',
 'email' => '电子邮件',
 'prefs-help-realname' => '真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。',
 'prefs-help-email' => '电子邮件是可选项,但是在您忘记密码时很有用。',
@@ -1524,9 +1536,9 @@ $1",
 'prefs-displayrc' => '显示',
 'prefs-displaysearchoptions' => '显示',
 'prefs-displaywatchlist' => '显示',
-'prefs-tokenwatchlist' => '权标',
+'prefs-tokenwatchlist' => '密钥',
 'prefs-diffs' => '差异对比',
-'prefs-help-prefershttps' => '此首选项将在您下次登录时生效。',
+'prefs-help-prefershttps' => '该设置将在你下次登录时生效。',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => '电子邮件地址有效',
@@ -1712,6 +1724,9 @@ $1",
 'recentchanges-label-minor' => '这是一个小编辑',
 'recentchanges-label-bot' => '该编辑由机器人进行',
 'recentchanges-label-unpatrolled' => '该编辑尚未巡查',
+'recentchanges-label-plusminus' => '页面大小通过该字节数更改',
+'recentchanges-legend-newpage' => '(另见[[Special:NewPages|新页面列表]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "下面是过去'''$2'''天的最后'''$1'''个更改,截至$4 $5。",
 'rcnotefrom' => "下面是'''$2'''之后的更改(最多显示'''$1'''个)。",
 'rclistfrom' => '显示$1之后的新更改',
@@ -1918,8 +1933,7 @@ $1',
 'zip-wrong-format' => '指定的文件不是一个 ZIP 文件。',
 'zip-bad' => '该文件是已损坏或以其它方式无法读取的 ZIP 文件。
 不能正确检查安全。',
-'zip-unsupported' => '该文件是 ZIP 文件,其中使用 MediaWiki 不支持的ZIP功能。
-不能正确检查安全。',
+'zip-unsupported' => '该文件是使用MediaWiki不支持的ZIP特性的ZIP文件。无法正确地检查其安全性。',
 
 # Special:UploadStash
 'uploadstash' => '上传隐藏',
@@ -2137,7 +2151,7 @@ $1',
 
 # Miscellaneous special pages
 'nbytes' => '$1字节',
-'ncategories' => '$1个分类',
+'ncategories' => '$1个{{PLURAL:$1|分类}}',
 'ninterwikis' => '$1个跨语言链接',
 'nlinks' => '$1个链接',
 'nmembers' => '$1个成员',
@@ -2400,7 +2414,7 @@ $PAGEINTRO$NEWPAGE
 电子邮件:$PAGEEDITOR_EMAIL
 用户页面:$PAGEEDITOR_WIKI
 
-在你访问该页面之前,我们不会发送新增更改的通知。
+在你登录并访问该页面之前,我们不会发送新增更改的通知。
 你也可以重设你的监视列表中所有监视页面的通知标志。
 
 {{SITENAME}}通知系统
@@ -2439,11 +2453,11 @@ $UNWATCHURL
 'deleteotherreason' => '其他/附加原因:',
 'deletereasonotherlist' => '其他原因',
 'deletereason-dropdown' => '*常见删除原因
-** 广告
-** 破坏行为
-** 侵犯著作权
-** 作者申请
-** 损坏的重定向',
+**广告
+**破坏行为
+**侵犯著作权
+**作者申请
+**受损重定向',
 'delete-edit-reasonlist' => '编辑删除原因',
 'delete-toobig' => '这个页面有一个十分大量的编辑历史,超过$1次修订。删除此类页面的动作已经被限制,以防止在{{SITENAME}}上的意外扰乱。',
 'delete-warning-toobig' => '这个页面有一个十分大量的编辑历史,超过$1次修订。删除它可能会扰乱{{SITENAME}}的数据库操作;在继续此动作前请小心。',
@@ -3062,28 +3076,28 @@ $2',
 'interlanguage-link-title' => '$1 – $2',
 
 # Stylesheets
-'common.css' => '/* æ­¤å¤\84ç\9a\84 CSS å°\86åº\94ç\94¨äº\8eæ\89\80æ\9c\89ç\9a\84皮肤 */',
-'cologneblue.css' => '/* æ­¤å¤\84ç\9a\84 CSS 将影响使用科隆香水蓝皮肤的用户 */',
-'monobook.css' => '/* æ­¤å¤\84ç\9a\84 CSS å°\86å½±å\93\8d使ç\94¨ Monobook 皮肤的用户 */',
-'modern.css' => '/* æ­¤å¤\84ç\9a\84 CSS å°\86å½±å\93\8d使ç\94¨ Modern 皮肤的用户 */',
-'vector.css' => '/* æ­¤å¤\84ç\9a\84 CSS å°\86å½±å\93\8d使ç\94¨ Vector 皮肤的用户 */',
-'print.css' => '/* æ­¤å¤\84ç\9a\84 CSS 将影响打印输出 */',
-'noscript.css' => '/* æ­¤å¤\84ç\9a\84 CSS å°\86å½±å\93\8d没æ\9c\89å\90¯ç\94¨ JavaScript 的用户 */',
-'group-autoconfirmed.css' => '/* æ­¤å¤\84ç\9a\84 CSS å°\86å\8fªä¼\9a影响自动确认用户 */',
-'group-bot.css' => '/* æ­¤å¤\84ç\9a\84 CSS å°\86å\8fªä¼\9a影响机器人 */',
-'group-sysop.css' => '/* æ­¤å¤\84ç\9a\84 CSS å°\86å\8fªä¼\9a影响管理员 */',
-'group-bureaucrat.css' => '/* æ­¤å¤\84ç\9a\84 CSS å°\86å\8fªä¼\9aå½±å\93\8d行政员 */',
+'common.css' => '/* æ\94¾ç½®äº\8eè¿\99é\87\8cç\9a\84CSSå°\86åº\94ç\94¨äº\8eæ\89\80æ\9c\89皮肤 */',
+'cologneblue.css' => '/* æ\94¾ç½®äº\8eè¿\99é\87\8cç\9a\84CSS将影响使用科隆香水蓝皮肤的用户 */',
+'monobook.css' => '/* æ\94¾ç½®äº\8eè¿\99é\87\8cç\9a\84CSSå°\86å½±å\93\8d使ç\94¨MonoBook皮肤的用户 */',
+'modern.css' => '/* æ\94¾ç½®äº\8eè¿\99é\87\8cç\9a\84CSSå°\86å½±å\93\8d使ç\94¨ç\8e°ä»£皮肤的用户 */',
+'vector.css' => '/* æ\94¾ç½®äº\8eè¿\99é\87\8cç\9a\84CSSå°\86å½±å\93\8d使ç\94¨Vector皮肤的用户 */',
+'print.css' => '/* æ\94¾ç½®äº\8eè¿\99é\87\8cç\9a\84CSS将影响打印输出 */',
+'noscript.css' => '/* æ\94¾ç½®äº\8eè¿\99é\87\8cç\9a\84CSSå°\86å½±å\93\8då\81\9cç\94¨JavaScript的用户 */',
+'group-autoconfirmed.css' => '/* æ\94¾ç½®äº\8eè¿\99é\87\8cç\9a\84CSSå°\86å\8fª影响自动确认用户 */',
+'group-bot.css' => '/* æ\94¾ç½®äº\8eè¿\99é\87\8cç\9a\84CSSå°\86å\8fª影响机器人 */',
+'group-sysop.css' => '/* æ\94¾ç½®äº\8eè¿\99é\87\8cç\9a\84CSSå°\86å\8fª影响管理员 */',
+'group-bureaucrat.css' => '/* æ\94¾ç½®äº\8eè¿\99é\87\8cç\9a\84CSSå°\86å\8fªå½±å\93\8dæ\9cº行政员 */',
 
 # Scripts
-'common.js' => '/* 此处的JavaScript将加载于所有用户每一个页面。 */',
-'cologneblue.js' => '/* 此处的JavaScript将加载于使用科隆香水蓝皮肤的用户 */',
-'monobook.js' => '/* 此处的JavaScript将加载于使用Monobook皮肤的用户 */',
-'modern.js' => '/* 此处的JavaScript将加载于使用Modern皮肤的用户 */',
-'vector.js' => '/* 此处的JavaScript将加载于使用Vector皮肤的用户 */',
-'group-autoconfirmed.js' => '/* 此处的JavaScript将仅加载于自动确认用户 */',
-'group-bot.js' => '/* 此处的JavaScript将仅加载于机器人 */',
-'group-sysop.js' => '/* 此处的JavaScript将仅加载于管理员 */',
-'group-bureaucrat.js' => '/* 此处的JavaScript将仅加载于行政员 */',
+'common.js' => '/* 这里的任何JavaScript将为所有用户在每一页面载入加载。 */',
+'cologneblue.js' => '/* 这里的任何JavaScript将为使用科隆香水蓝皮肤的用户加载 */',
+'monobook.js' => '/* 这里的任何JavaScript将为使用MonoBook皮肤的用户加载 */',
+'modern.js' => '/* 这里的任何JavaScript将为使用现代皮肤的用户加载 */',
+'vector.js' => '/* 这里的任何JavaScript将为使用Vector皮肤的用户加载 */',
+'group-autoconfirmed.js' => '/* 这里的任何JavaScript将只为自动确认用户加载 */',
+'group-bot.js' => '/* 这里的任何JavaScript将只为机器人加载 */',
+'group-sysop.js' => '/* 这里的任何JavaScript将只为管理员加载 */',
+'group-bureaucrat.js' => '/* 这里的任何JavaScript将只为行政员加载 */',
 
 # Metadata
 'notacceptable' => '该网站服务器不能提供您的客户端能识别的数据格式。',
@@ -3287,7 +3301,7 @@ Variants for Chinese language
 'variantname-kk-cyrl' => 'kk-cyrl',
 
 # Metadata
-'metadata' => 'å\8e\9få§\8b数据',
+'metadata' => 'å\85\83数据',
 'metadata-help' => '此文件中包含有扩展的信息。这些信息可能是由数码相机或扫描仪在创建或数字化过程中所添加的。
 
 如果此文件的源文件已经被修改,一些信息在修改后的文件中将不能完全反映出来。',
@@ -3927,8 +3941,9 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 
 # Special:SpecialPages
 'specialpages' => '特殊页面',
+'specialpages-note-top' => '图例',
 'specialpages-note' => '*普通特殊页面。
-*<span class="mw-specialpagerestricted">非公开特殊页面。</span>',
+*<span class="mw-specialpagerestricted">受限特殊页面。</span>',
 'specialpages-group-maintenance' => '维护报告',
 'specialpages-group-other' => '其它特殊页面',
 'specialpages-group-login' => '登录/创建账户',
@@ -4138,6 +4153,21 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'limitreport-templateargumentsize' => '模板参数大小',
 'limitreport-templateargumentsize-value' => '$1/$2 字节',
 'limitreport-expansiondepth' => '最高扩展深度',
-'limitreport-expensivefunctioncount' => '高级函数分析器',
+'limitreport-expensivefunctioncount' => '高开销函数分析器',
+
+# Special:ExpandTemplates
+'expandtemplates' => '展开模板',
+'expand_templates_intro' => '此特殊页面可以递归地展开所给文本中的模板。
+它同时还可展开诸如<nowiki>{{</nowiki>#language:...}}的解析器函数和诸如<nowiki>{{</nowiki>CURRENTDAY}}的变量。
+实际上,几乎所有在双重花括号中的内容都会被展开。',
+'expand_templates_title' => '上下文标题,用于{{FULLPAGENAME}}等:',
+'expand_templates_input' => '输入文本:',
+'expand_templates_output' => '结果:',
+'expand_templates_xml_output' => 'XML输出',
+'expand_templates_ok' => '确定',
+'expand_templates_remove_comments' => '移除注释',
+'expand_templates_remove_nowiki' => '在结果中隐藏<nowiki>标签',
+'expand_templates_generate_xml' => '显示XML语法树',
+'expand_templates_preview' => '预览',
 
 );
index 70417f8..bd7f553 100644 (file)
@@ -118,12 +118,12 @@ $namespaceAliases = array(
 $specialPageAliases = array(
        'Activeusers'               => array( '活躍用戶' ),
        'Allmessages'               => array( '所有信息' ),
+       'AllMyUploads'              => array( '所有本人上載', '所有本人文件' ),
        'Allpages'                  => array( '所有頁面' ),
        'Ancientpages'              => array( '最早頁面' ),
        'Badtitle'                  => array( '無效標題' ),
        'Blankpage'                 => array( '空白頁面' ),
        'Block'                     => array( '查封用戶' ),
-       'Blockme'                   => array( '封禁我' ),
        'Booksources'               => array( '網絡書源' ),
        'BrokenRedirects'           => array( '損壞的重定向頁' ),
        'Categories'                => array( '頁面分類' ),
@@ -135,10 +135,10 @@ $specialPageAliases = array(
        'CreateAccount'             => array( '創建賬戶' ),
        'Deadendpages'              => array( '斷鏈頁面' ),
        'DeletedContributions'      => array( '已刪除的用戶貢獻' ),
-       'Disambiguations'           => array( '消歧義頁' ),
        'DoubleRedirects'           => array( '雙重重定向頁面' ),
        'EditWatchlist'             => array( '編輯監視列表' ),
        'Emailuser'                 => array( '電郵用戶' ),
+       'ExpandTemplates'           => array( '展開模板' ),
        'Export'                    => array( '導出頁面' ),
        'Fewestrevisions'           => array( '最少修訂頁面' ),
        'FileDuplicateSearch'       => array( '搜索重複文件' ),
@@ -174,6 +174,7 @@ $specialPageAliases = array(
        'Myuploads'                 => array( '我的上傳' ),
        'Newimages'                 => array( '新建文件' ),
        'Newpages'                  => array( '新頁面' ),
+       'PagesWithProp'             => array( '帶屬性頁面' ),
        'PasswordReset'             => array( '重設密碼' ),
        'PermanentLink'             => array( '永久連結' ),
        'Popularpages'              => array( '熱點頁面' ),
@@ -186,6 +187,7 @@ $specialPageAliases = array(
        'Recentchanges'             => array( '最近更改' ),
        'Recentchangeslinked'       => array( '鏈出更改' ),
        'Redirect'                  => array( '重定向' ),
+       'ResetTokens'               => array( '覆寫令牌' ),
        'Revisiondelete'            => array( '刪除或恢復版本' ),
        'Search'                    => array( '搜索' ),
        'Shortpages'                => array( '短頁面' ),
@@ -388,12 +390,12 @@ $messages = array(
 'december-date' => '12月$1日',
 
 # Categories related messages
-'pagecategories' => '$1 個分類',
+'pagecategories' => '{{PLURAL:$1|分類}}',
 'category_header' => '「$1」分類中的頁面',
 'subcategories' => '子分類',
 'category-media-header' => '「$1」分類中的媒體',
 'category-empty' => "''此分類目前未包含頁面或媒體。''",
-'hidden-categories' => '$1 個隱藏分類',
+'hidden-categories' => '{{PLURAL:$1|隱藏分類}}',
 'hidden-category-category' => '隱藏分類',
 'category-subcat-count' => '{{PLURAL:$2|此分類有以下一個子分類。|此分類有 $2 個子分類,以下列出了 $1 個。}}',
 'category-subcat-count-limited' => '此分類有以下 $1 個子分類。',
@@ -539,12 +541,10 @@ $1',
 'ok' => '確定',
 'retrievedfrom' => '取自「$1」',
 'youhavenewmessages' => '您有$1($2)。',
-'newmessageslink' => '新訊息',
-'newmessagesdifflink' => '最新變更',
 'youhavenewmessagesfromusers' => '你有來自{{PLURAL:$3|另一位使用者|$3 位使用者}}的$1($2)。',
 'youhavenewmessagesmanyusers' => '你有來自多位使用者的$1( $2 )。',
-'newmessageslinkplural' => '{{PLURAL:$1|一項新訊息|新訊息}}',
-'newmessagesdifflinkplural' => 'æ\9c\80æ\96°{{PLURAL:$1|變更}}',
+'newmessageslinkplural' => '{{PLURAL:$1|一個新訊息|999=新訊息}}',
+'newmessagesdifflinkplural' => 'æ\96°è¿\91{{PLURAL:$1|變更}}',
 'youhavenewmessagesmulti' => '您在 $1 有新訊息',
 'editsection' => '編輯',
 'editold' => '編輯',
@@ -675,7 +675,8 @@ $2',
 'invalidtitle-knownnamespace' => '使用名字空間「$2」和文本「$3」的無效標題',
 'invalidtitle-unknownnamespace' => '使用未知名字空間編號$1和文本“$2”的無效標題',
 'exception-nologin' => '未登入',
-'exception-nologin-text' => '你需要登錄此wiki查閲此頁或進行操作。',
+'exception-nologin-text' => '你需要[[Special:Userlogin|登錄]]此wiki查閲此頁或進行操作。',
+'exception-nologin-text-manual' => '請$1以便能夠訪問此頁或行動。',
 
 # Virus scanner
 'virus-badscanner' => "損壞設定: 未知的病毒掃瞄器: ''$1''",
@@ -1364,12 +1365,12 @@ $1",
 'preferences' => '偏好設定',
 'mypreferences' => '偏好設定',
 'prefs-edits' => '編輯次數:',
-'prefsnologin' => '還未登入',
+'prefsnologintext2' => '請$1以進入用戶設定。',
 'changepassword' => '變更密碼',
 'prefs-skin' => '外觀',
 'skin-preview' => '預覽',
 'datedefault' => '預設值',
-'prefs-beta' => 'Beta 功能',
+'prefs-beta' => '測試功能',
 'prefs-datetime' => '日期和時間',
 'prefs-labs' => '實驗中的功能',
 'prefs-user-pages' => '使用者頁面',
@@ -1662,6 +1663,9 @@ $1",
 'recentchanges-label-minor' => '這是一個小編輯',
 'recentchanges-label-bot' => '這次編輯是由機器人進行',
 'recentchanges-label-unpatrolled' => '這次編輯尚未巡查過',
+'recentchanges-label-plusminus' => '通過此處位元組的數位以更改頁面大小',
+'recentchanges-legend-newpage' => '(另見[[Special:NewPages|新頁面列表]])',
+'recentchanges-legend-plusminus' => "(''±123'')",
 'rcnote' => "以下是在$4 $5,最近 '''$2''' 天內的 '''$1''' 次最近更改記錄。",
 'rcnotefrom' => "下面是自'''$2'''(最多顯示'''$1'''):",
 'rclistfrom' => '顯示自 $1 以來的新變更',
@@ -2356,13 +2360,13 @@ $1',
 'enotif_lastvisited' => '請參閱 $1 檢視你上次訪問後的所有更改。',
 'enotif_lastdiff' => '請參閱 $1 檢視該更改。',
 'enotif_anon_editor' => '匿名用戶$1',
-'enotif_body' => '$WATCHINGUSERNAME
+'enotif_body' => '$WATCHINGUSERNAME閣下,
 
 $PAGEINTRO $NEWPAGE
 
 編輯摘要:$PAGESUMMARY $PAGEMINOREDIT
 
\81¯ç¹«此編輯者:
\81¯çµ¡此編輯者:
 
 郵件:$PAGEEDITOR_EMAIL
 本站:$PAGEEDITOR_WIKI
@@ -3903,9 +3907,9 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 
 # Special:SpecialPages
 'specialpages' => '特殊頁面',
+'specialpages-note-top' => '圖例',
 'specialpages-note' => '* 標準特殊頁面。
-* <strong class="mw-specialpagerestricted">有限制的特殊頁面。</strong>
-* <span class="mw-specialpagecached">用於重新整理的特殊頁面(可能過時)。</span>',
+* <span class="mw-specialpagerestricted">用於重新整理的特殊頁面(可能過時)。</span>',
 'specialpages-group-maintenance' => '維護報告',
 'specialpages-group-other' => '其它特殊頁面',
 'specialpages-group-login' => '登入/建立新帳號',
@@ -4117,4 +4121,17 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'limitreport-expansiondepth' => '最高展開深度',
 'limitreport-expensivefunctioncount' => '昂貴分析器函數計數',
 
+# Special:ExpandTemplates
+'expandtemplates' => '展開模板',
+'expand_templates_intro' => '本特殊頁面用於將一些文字中的模版展開,包括模版中引用的模版。同時也展開解譯器函數如<nowiki>{{</nowiki>#language:...}},以及變數如<nowiki>{{</nowiki>CURRENTDAY}}&mdash;實際上,幾乎所有在雙括弧中的內容都被展開。',
+'expand_templates_title' => '上下文標題,用於 {{FULLPAGENAME}} 等:',
+'expand_templates_input' => '輸入文字:',
+'expand_templates_output' => '結果:',
+'expand_templates_xml_output' => 'XML輸出',
+'expand_templates_ok' => '確定',
+'expand_templates_remove_comments' => '移除注釋',
+'expand_templates_remove_nowiki' => '在結果中隱藏<nowiki>標記',
+'expand_templates_generate_xml' => '顯示XML語法樹',
+'expand_templates_preview' => '預覽',
+
 );
index 2d9b818..d28642e 100644 (file)
@@ -42,8 +42,6 @@ $namespaceAliases = array(
 $specialPageAliases = array(
        'Ancientpages'              => array( '最舊頁面' ),
        'Block'                     => array( '查封用戶' ),
-       'Blockme'                   => array( '封禁我' ),
-       'Disambiguations'           => array( '消歧義頁' ),
        'FileDuplicateSearch'       => array( '搜索重復文件' ),
        'Invalidateemail'           => array( '無法識別的電郵地址' ),
        'LinkSearch'                => array( '搜索網頁鏈接' ),
index d3a863b..c2aede0 100644 (file)
@@ -29,7 +29,6 @@
  * @file
  * @since 1.20
  */
-
 class CLDRPluralRuleEvaluator {
        /**
         * Evaluate a number against a set of plural rules. If a rule passes,
@@ -48,8 +47,8 @@ class CLDRPluralRuleEvaluator {
         * Convert a set of rules to a compiled form which is optimised for
         * fast evaluation. The result will be an array of strings, and may be cached.
         *
-        * @param $rules The rules to compile
-        * @return An array of compile rules.
+        * @param array $rules The rules to compile
+        * @return array An array of compile rules.
         */
        public static function compile( array $rules ) {
                // We can't use array_map() for this because it generates a warning if
@@ -63,6 +62,10 @@ class CLDRPluralRuleEvaluator {
        /**
         * Evaluate a compiled set of rules returned by compile(). Do not allow
         * the user to edit the compiled form, or else PHP errors may result.
+        *
+        * @param int The number to be evaluated against the rules
+        * @param array The associative array of plural rules in pluralform => rule format.
+        * @return int The index of the plural form which passed the evaluation
         */
        public static function evaluateCompiled( $number, array $rules ) {
                // The compiled form is RPN, with tokens strictly delimited by
@@ -96,11 +99,11 @@ class CLDRPluralRuleEvaluator {
        /**
         * Do a single operation
         *
-        * @param $token string The token string
-        * @param $left The left operand. If it is an object, its state may be destroyed.
-        * @param $right The right operand
+        * @param string $token The token string
+        * @param mixed $left The left operand. If it is an object, its state may be destroyed.
+        * @param mixed $right The right operand
         * @throws CLDRPluralRuleError
-        * @return mixed
+        * @return mixed The operation result
         */
        private static function doOperation( $token, $left, $right ) {
                if ( in_array( $token, array( 'in', 'not-in', 'within', 'not-within' ) ) ) {
@@ -150,8 +153,19 @@ class CLDRPluralRuleEvaluator {
  * Evaluator helper class representing a range list.
  */
 class CLDRPluralRuleEvaluator_Range {
+       /**
+        * The parts
+        *
+        * @var array
+        */
        public $parts = array();
 
+       /**
+        * Initialize a new instance of CLDRPluralRuleEvaluator_Range
+        *
+        * @param int $start The start of the range
+        * @param int|bool $end The end of the range, or false if the range is not bounded.
+        */
        function __construct( $start, $end = false ) {
                if ( $end === false ) {
                        $this->parts[] = $start;
@@ -161,16 +175,18 @@ class CLDRPluralRuleEvaluator_Range {
        }
 
        /**
-        * Determine if the given number is inside the range. If $integerConstraint
-        * is true, the number must additionally be an integer if it is to match
-        * any interval part.
+        * Determine if the given number is inside the range.
+        *
+        * @param int $number The number to check
+        * @param bool $integerConstraint If true, also asserts the number is an integer; otherwise, number simply has to be inside the range.
+        * @return bool True if the number is inside the range; otherwise, false.
         */
        function isNumberIn( $number, $integerConstraint = true ) {
                foreach ( $this->parts as $part ) {
                        if ( is_array( $part ) ) {
                                if ( ( !$integerConstraint || floor( $number ) === (float)$number )
-                                       && $number >= $part[0] && $number <= $part[1] )
-                               {
+                                       && $number >= $part[0] && $number <= $part[1]
+                               {
                                        return true;
                                }
                        } else {
@@ -185,14 +201,18 @@ class CLDRPluralRuleEvaluator_Range {
        /**
         * Readable alias for isNumberIn( $number, false ), and the implementation
         * of the "within" operator.
+        *
+        * @param int $number The number to check
+        * @return bool True if the number is inside the range; otherwise, false.
         */
        function isNumberWithin( $number ) {
                return $this->isNumberIn( $number, false );
        }
 
        /**
-        * Add another part to this range. The supplied new part may either be a
-        * range object itself, or a single number.
+        * Add another part to this range.
+        *
+        * @param mixed The part to add, either a range object itself or a single number.
         */
        function add( $other ) {
                if ( $other instanceof self ) {
@@ -203,7 +223,10 @@ class CLDRPluralRuleEvaluator_Range {
        }
 
        /**
-        * For debugging
+        * Returns the string representation of the rule evaluator range.
+        * The purpose of this method is to help debugging.
+        *
+        * @return string The string representation of the rule evaluator range
         */
        function __toString() {
                $s = 'Range(';
@@ -227,8 +250,39 @@ class CLDRPluralRuleEvaluator_Range {
  * Helper class for converting rules to reverse polish notation (RPN).
  */
 class CLDRPluralRuleConverter {
-       public $rule, $pos, $end;
+       /**
+        * The rule
+        *
+        * @var string
+        */
+       public $rule;
+
+       /**
+        * The position
+        *
+        * @var int
+        */
+       public $pos;
+
+       /**
+        * The last position possible
+        *
+        * @var int
+        */
+       public $end;
+
+       /**
+        * The operators
+        *
+        * @var array
+        */
        public $operators = array();
+
+       /**
+        * The operands
+        *
+        * @var array
+        */
        public $operands = array();
 
        /**
@@ -268,6 +322,9 @@ class CLDRPluralRuleConverter {
 
        /**
         * Convert a rule to RPN. This is the only public entry point.
+        *
+        * @param $rule The rule to convert
+        * @return string The RPN representation of the rule
         */
        public static function convert( $rule ) {
                $parser = new self( $rule );
@@ -285,6 +342,8 @@ class CLDRPluralRuleConverter {
 
        /**
         * Do the operation.
+        *
+        * @return string The RPN representation of the rule (e.g. "5 3 mod n is")
         */
        protected function doConvert() {
                $expectOperator = true;
@@ -341,8 +400,9 @@ class CLDRPluralRuleConverter {
        }
 
        /**
-        * Fetch the next token from the input string. Return it as a
-        * CLDRPluralRuleConverter_Fragment object.
+        * Fetch the next token from the input string.
+        *
+        * @return CLDRPluralRuleConverter_Fragment The next token
         */
        protected function nextToken() {
                if ( $this->pos >= $this->end ) {
@@ -390,8 +450,8 @@ class CLDRPluralRuleConverter {
                        // Look ahead one word
                        $nextTokenPos += strspn( $this->rule, self::WHITESPACE_CLASS, $nextTokenPos );
                        if ( $nextTokenPos < $this->end
-                                       && preg_match( self::WORD_REGEX, $this->rule, $m, 0, $nextTokenPos ) )
-                       {
+                               && preg_match( self::WORD_REGEX, $this->rule, $m, 0, $nextTokenPos )
+                       {
                                $word2 = strtolower( $m[0] );
                                $nextTokenPos += strlen( $word2 );
                        }
@@ -441,6 +501,8 @@ class CLDRPluralRuleConverter {
 
        /**
         * Create a numerical expression object
+        *
+        * @return CLDRPluralRuleConverter_Expression The numerical expression
         */
        protected function newNumber( $text, $pos ) {
                return new CLDRPluralRuleConverter_Expression( $this, 'number', $text, $pos, strlen( $text ) );
@@ -448,6 +510,8 @@ class CLDRPluralRuleConverter {
 
        /**
         * Create a binary operator
+        *
+        * @return CLDRPluralRuleConverter_Operator The operator
         */
        protected function newOperator( $type, $pos, $length ) {
                return new CLDRPluralRuleConverter_Operator( $this, $type, $pos, $length );
@@ -517,6 +581,11 @@ class CLDRPluralRuleConverter_Expression extends CLDRPluralRuleConverter_Fragmen
  * messages), and the binary operator at that location.
  */
 class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment {
+       /**
+        * The name
+        *
+        * @var string
+        */
        public $name;
 
        /**
@@ -527,6 +596,8 @@ class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment
         *   r = range
         *
         * A number is a kind of range.
+        *
+        * @var array
         */
        static $opTypes = array(
                'or' => 'bbb',
@@ -544,6 +615,8 @@ class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment
 
        /**
         * Map converting from the abbrevation to the full form.
+        *
+        * @var array
         */
        static $typeSpecMap = array(
                'b' => 'boolean',
@@ -551,11 +624,26 @@ class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment
                'r' => 'range',
        );
 
+       /**
+        * Initialize a new instance of a CLDRPluralRuleConverter_Operator object
+        *
+        * @param CLDRPluralRuleConverter $parser The parser
+        * @param string $name The operator name
+        * @param int $pos The position
+        * @param int $pos The length
+        */
        function __construct( $parser, $name, $pos, $length ) {
                parent::__construct( $parser, $pos, $length );
                $this->name = $name;
        }
 
+       /**
+        * Compute the operation
+        *
+        * @param CLDRPluralRuleConverter_Expression $left The left part of the expression
+        * @param CLDRPluralRuleConverter_Expression $right The right part of the expression
+        * @return CLDRPluralRuleConverter_Expression The result of the operation
+        */
        public function operate( $left, $right ) {
                $typeSpec = self::$opTypes[$this->name];
 
index 30e93c9..fb2cd8c 100644 (file)
@@ -787,7 +787,6 @@ abstract class Maintenance {
                        $this->output( "\n" );
                }
 
-
                // Script specific parameters not defined on construction by
                // Maintenance::addDefaultParams()
                $scriptSpecificParams = array_diff_key(
@@ -1274,9 +1273,9 @@ abstract class LoggedUpdateMaintenance extends Maintenance {
                $db = $this->getDB( DB_MASTER );
                $key = $this->getUpdateKey();
 
-               if ( !$this->hasOption( 'force' ) &&
-                       $db->selectRow( 'updatelog', '1', array( 'ul_key' => $key ), __METHOD__ ) )
-               {
+               if ( !$this->hasOption( 'force' )
+                       && $db->selectRow( 'updatelog', '1', array( 'ul_key' => $key ), __METHOD__ )
+               {
                        $this->output( "..." . $this->updateSkippedMessage() . "\n" );
                        return true;
                }
@@ -1285,9 +1284,7 @@ abstract class LoggedUpdateMaintenance extends Maintenance {
                        return false;
                }
 
-               if (
-                       $db->insert( 'updatelog', array( 'ul_key' => $key ), __METHOD__, 'IGNORE' ) )
-               {
+               if ( $db->insert( 'updatelog', array( 'ul_key' => $key ), __METHOD__, 'IGNORE' ) ) {
                        return true;
                } else {
                        $this->output( $this->updatelogFailedMessage() . "\n" );
index 8fdb958..f16772c 100644 (file)
@@ -82,7 +82,6 @@ class TextPassDumper extends BackupDumper {
         */
        protected $db;
 
-
        /**
         * Drop the database connection $this->db and try to get a new one.
         *
@@ -123,7 +122,6 @@ class TextPassDumper extends BackupDumper {
                        throw new MWException( __METHOD__ . " rotating DB failed to obtain new load balancer (" . $e->getMessage() . ")" );
                }
 
-
                // 2. The Connection, through the load balancer.
                try {
                        $this->db = $this->lb->getConnection( DB_SLAVE, 'dump' );
@@ -132,7 +130,6 @@ class TextPassDumper extends BackupDumper {
                }
        }
 
-
        function initProgress( $history = WikiExporter::FULL ) {
                parent::initProgress();
                $this->timeOfCheckpoint = $this->startTime;
@@ -420,8 +417,8 @@ class TextPassDumper extends BackupDumper {
                $text = false; // The candidate for a good text. false if no proper value.
                $failures = 0; // The number of times, this invocation of getText already failed.
 
-               static $consecutiveFailedTextRetrievals = 0; // The number of times getText failed without
-                                                            // yielding a good text in between.
+               // The number of times getText failed without yielding a good text in between.
+               static $consecutiveFailedTextRetrievals = 0;
 
                $this->fetchCount++;
 
@@ -556,7 +553,6 @@ class TextPassDumper extends BackupDumper {
                return "";
        }
 
-
        /**
         * May throw a database error if, say, the server dies during query.
         * @param $id
index d42f9f7..4590611 100644 (file)
@@ -52,7 +52,7 @@ do {
        $bad = false;
        $showhelp = false;
        $quit = false;
-       static $fileHandle;
+       static $fileHandle = false;
 
        $line = Maintenance::readconsole();
        if ( $line === false ) {
@@ -75,7 +75,10 @@ do {
                        }
                        $file = $args[0];
                        print "Loading cdb file $file...";
-                       $fileHandle = CdbReader::open( $file );
+                       try {
+                               $fileHandle = CdbReader::open( $file );
+                       } catch ( CdbException $e ) {}
+
                        if ( !$fileHandle ) {
                                print "not a cdb file or unable to read it\n";
                        } else {
@@ -91,7 +94,12 @@ do {
                                print "Need to specify a key, Luke\n";
                                break;
                        }
-                       $res = $fileHandle->get( $args[0] );
+                       try {
+                               $res = $fileHandle->get( $args[0] );
+                       } catch ( CdbException $e ) {
+                               print "Unable to read key from file\n";
+                               break;
+                       }
                        if ( $res === false ) {
                                print "No such key/value pair\n";
                        } elseif ( is_string( $res ) ) {
index 49af0b8..09b9295 100644 (file)
@@ -239,8 +239,8 @@ class CopyFileBackend extends Maintenance {
                                $this->error( "$wikiId: Detected illegal (non-UTF8) path for $srcPath." );
                                continue;
                        } elseif ( !$this->hasOption( 'missingonly' )
-                               && $this->filesAreSame( $src, $dst, $srcPath, $dstPath ) )
-                       {
+                               && $this->filesAreSame( $src, $dst, $srcPath, $dstPath )
+                       {
                                $this->output( "\tAlready have $srcPathRel.\n" );
                                continue; // assume already copied...
                        }
index b6ca281..d35efae 100644 (file)
@@ -2530,9 +2530,7 @@ newheader
 newid
 newimages
 newlen
-newmessagesdifflink
 newmessagesdifflinkplural
-newmessageslink
 newmessageslinkplural
 newname
 newnames
@@ -3126,7 +3124,6 @@ prefixindex
 prefixsearchdisabled
 prefs
 prefsection
-prefsnologin
 prefsnologintext2
 prefsubmit
 preload
index 3157318..3dcf12c 100644 (file)
@@ -90,9 +90,9 @@ if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
        require $maintenance->loadSettings();
 }
 
-if ( $maintenance->getDbType() === Maintenance::DB_ADMIN &&
-       is_readable( "$IP/AdminSettings.php" ) )
-{
+if ( $maintenance->getDbType() === Maintenance::DB_ADMIN
+       && is_readable( "$IP/AdminSettings.php" )
+{
        require "$IP/AdminSettings.php";
 }
 
index 5d783cb..37c2a31 100644 (file)
@@ -29,7 +29,6 @@ $originalDir = getcwd();
 require_once __DIR__ . '/commandLine.inc';
 require_once __DIR__ . '/backupTextPass.inc';
 
-
 $dumper = new TextPassDumper( $argv );
 
 if ( !isset( $options['help'] ) ) {
index 1a9293c..0ec1955 100644 (file)
@@ -64,7 +64,7 @@ By default, outputs relative paths against the parent directory of \$wgUploadDir
                                $this->mSharedSupplement = true;
                        }
                }
-               $this-> { $this->mAction } ( $this->mShared );
+               $this->{ $this->mAction } ( $this->mShared );
                if ( $this->mSharedSupplement ) {
                        $this->fetchUsed( true );
                }
index 373170f..52056ea 100644 (file)
@@ -103,8 +103,7 @@ class FindHooks extends Maintenance {
                $this->printArray( 'Documented and not found', $deprecated );
                $this->printArray( 'Unclear hook calls', $bad );
 
-               if ( count( $todo ) == 0 && count( $deprecated ) == 0 && count( $bad ) == 0 )
-               {
+               if ( count( $todo ) == 0 && count( $deprecated ) == 0 && count( $bad ) == 0 ) {
                        $this->output( "Looks good!\n" );
                }
        }
diff --git a/maintenance/fuzz-tester.php b/maintenance/fuzz-tester.php
deleted file mode 100644 (file)
index 548bb2f..0000000
+++ /dev/null
@@ -1,2692 +0,0 @@
-<?php
-/**
- * Performs fuzz-style testing of MediaWiki's parser and forms.
- *
- * Copyright © 2006 Nick Jenkins
- *
- * 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 Maintenance
- * @author Nick Jenkins ( http://nickj.org/ ).
-
-
-Started: 18 May 2006.
-
-Description:
-  Performs fuzz-style testing of MediaWiki's parser and forms.
-
-How:
-  - Generate lots of nasty wiki text.
-  - Ask the Parser to render that wiki text to HTML, or ask MediaWiki's forms
-       to deal with that wiki text.
-  - Check MediaWiki's output for problems.
-  - Repeat.
-
-Why:
-  - To help find bugs.
-  - To help find security issues, or potential security issues.
-
-What type of problems are being checked for:
-  - Unclosed tags.
-  - Errors or interesting warnings from Tidy.
-  - PHP errors / warnings / notices.
-  - MediaWiki internal errors.
-  - Very slow responses.
-  - No response from apache.
-  - Optionally checking for malformed HTML using the W3C validator.
-
-Background:
-  Many of the wikiFuzz class methods are a modified PHP port,
-  of a "shameless" Python port, of LCAMTUF'S MANGELME:
-  - http://www.securiteam.com/tools/6Z00N1PBFK.html
-  - http://www.securityfocus.com/archive/1/378632/2004-10-15/2004-10-21/0
-
-Video:
-  There's an XviD video discussing this fuzz tester. You can get it from:
-  http://files.nickj.org/MediaWiki/Fuzz-Testing-MediaWiki-xvid.avi
-
-Requirements:
-  To run this, you will need:
-  - Command-line PHP5, with PHP-curl enabled (not all installations have this
-       enabled - try "apt-get install php5-curl" if you're on Debian to install).
-  - the Tidy standalone executable. ("apt-get install tidy").
-
-Optional:
-  - If you want to run the curl scripts, you'll need standalone curl installed
-       ("apt-get install curl")
-  - For viewing the W3C validator output on a command line, the "html2text"
-       program may be useful ("apt-get install html2text")
-
-Saving tests and test results:
-  Any of the fuzz tests which find problems are saved for later review.
-  In order to help track down problems, tests are saved in a number of
-  different formats. The default filename extensions and their meanings are:
-  - ".test.php" : PHP script that reproduces just that one problem using PHP-Curl.
-  - ".curl.sh"  : Shell script that reproduces that problem using standalone curl.
-  - ".data.bin" : The serialized PHP data so that this script can re-run the test.
-  - ".info.txt" : A human-readable text file with details of the field contents.
-
-Wiki configuration for testing:
-  You should make some additions to LocalSettings.php in order to catch the most
-  errors. Note this configuration is for **TESTING PURPOSES ONLY**, and is IN NO
-  WAY, SHAPE, OR FORM suitable for deployment on a hostile network. That said,
-  personally I find these additions to be the most helpful for testing purposes:
-
-  // --------- Start ---------
-  // Everyone can do everything. Very useful for testing, yet useless for deployment.
-  $wgGroupPermissions['*']['autoconfirmed']   = true;
-  $wgGroupPermissions['*']['block']           = true;
-  $wgGroupPermissions['*']['bot']             = true;
-  $wgGroupPermissions['*']['delete']          = true;
-  $wgGroupPermissions['*']['deletedhistory']  = true;
-  $wgGroupPermissions['*']['deleterevision']  = true;
-  $wgGroupPermissions['*']['editinterface']   = true;
-  $wgGroupPermissions['*']['hiderevision']    = true;
-  $wgGroupPermissions['*']['import']          = true;
-  $wgGroupPermissions['*']['importupload']    = true;
-  $wgGroupPermissions['*']['minoredit']       = true;
-  $wgGroupPermissions['*']['move']            = true;
-  $wgGroupPermissions['*']['patrol']          = true;
-  $wgGroupPermissions['*']['protect']         = true;
-  $wgGroupPermissions['*']['proxyunbannable'] = true;
-  $wgGroupPermissions['*']['renameuser']      = true;
-  $wgGroupPermissions['*']['reupload']        = true;
-  $wgGroupPermissions['*']['reupload-shared'] = true;
-  $wgGroupPermissions['*']['rollback']        = true;
-  $wgGroupPermissions['*']['siteadmin']       = true;
-  $wgGroupPermissions['*']['unwatchedpages']  = true;
-  $wgGroupPermissions['*']['upload']          = true;
-  $wgGroupPermissions['*']['userrights']      = true;
-  $wgGroupPermissions['*']['renameuser']      = true;
-  $wgGroupPermissions['*']['makebot']         = true;
-  $wgGroupPermissions['*']['makesysop']       = true;
-
-  // Enable weird and wonderful options:
-                                                         // Increase default error reporting level.
-  error_reporting (E_ALL);    // At a later date could be increased to E_ALL | E_STRICT
-  $wgEnableUploads = true;    // enable uploads.
-  $wgDBerrorLog = "/root/mediawiki-db-error-log.txt";  // log DB errors, replace with suitable path.
-  $wgShowSQLErrors = true;    // Show SQL errors (instead of saying the query was hidden).
-  $wgShowExceptionDetails = true;  // want backtraces.
-  $wgEnableAPI = true;        // enable API.
-  $wgEnableWriteAPI = true;   // enable API.
-
-  // Install & enable Parser Hook extensions to increase code coverage. E.g.:
-  require_once "extensions/ParserFunctions/ParserFunctions.php";
-  require_once "extensions/Cite/Cite.php";
-  require_once "extensions/inputbox/inputbox.php";
-  require_once "extensions/Sort/Sort.php";
-  require_once "extensions/wikihiero/wikihiero.php";
-  require_once "extensions/CharInsert/CharInsert.php";
-  require_once "extensions/FixedImage/FixedImage.php";
-
-  // Install & enable Special Page extensions to increase code coverage. E.g.:
-  require_once "extensions/Cite/SpecialCite.php";
-  require_once "extensions/Renameuser/SpecialRenameuser.php";
-  // --------- End ---------
-
-  If you want to try E_STRICT error logging, add this to the above:
-  // --------- Start ---------
-  error_reporting (E_ALL | E_STRICT);
-  set_error_handler( 'error_handler' );
-  function error_handler ($type, $message, $file=__FILE__, $line=__LINE__) {
-        if ($message == "var: Deprecated. Please use the public/private/protected modifiers") return;
-        print "<br />\n<b>Strict Standards:</b> Type: <b>$type</b>:  $message in <b>$file</b> on line <b>$line</b><br />\n";
-  }
-  // --------- End ---------
-
-  Also add/change this in LocalSettings.php:
-  // --------- Start ---------
-  $wgEnableProfileInfo = true;
-  $wgDBserver = "localhost"; // replace with DB server hostname
-  // --------- End ---------
-
-Usage:
-  Run with "php fuzz-tester.php".
-  To see the various command-line options, run "php fuzz-tester.php --help".
-  To stop the script, press Ctrl-C.
-
-Console output:
-  - If requested, first any previously failed tests will be rerun.
-  - Then new tests will be generated and run. Any tests that fail will be saved,
-       and a brief message about why they failed will be printed on the console.
-  - The console will show the number of tests run, time run, number of tests
-       failed, number of tests being done per minute, and the name of the current test.
-
-TODO:
-  Some known things that could improve this script:
-  - Logging in with cookie jar storage needed for some tests (as there are some
-       pages that cannot be tested without being logged in, and which are currently
-       untested - e.g. Special:Emailuser, Special:Preferences, adding to Watchist).
-  - Testing of Timeline extension (I cannot test as ploticus has/had issues on
-       my architecture).
-
-*/
-
-// ///////////////////////// COMMAND LINE HELP ////////////////////////////////////
-
-// This is a command line script, load MediaWiki env (gives command line options);
-require_once __DIR__ . '/commandLine.inc';
-
-// if the user asked for an explanation of command line options.
-if ( isset( $options["help"] ) ) {
-       print <<<ENDS
-MediaWiki $wgVersion fuzz tester
-Usage: php {$_SERVER["SCRIPT_NAME"]} [--quiet] [--base-url=<url-to-test-wiki>]
-                                                  [--directory=<failed-test-path>] [--include-binary]
-                                                  [--w3c-validate] [--delete-passed-retests] [--help]
-                                                  [--user=<username>] [--password=<password>]
-                                                  [--rerun-failed-tests] [--max-errors=<int>]
-                                                  [--max-runtime=<num-minutes>]
-                                                  [--specific-test=<test-name>]
-
-Options:
-  --quiet                 : Hides passed tests, shows only failed tests.
-  --base-url              : URL to a wiki on which to run the tests.
-                                                       The "http://" is optional and can be omitted.
-  --directory             : Full path to directory for storing failed tests.
-                                                       Will be created if it does not exist.
-  --include-binary        : Includes non-alphanumeric characters in the tests.
-  --w3c-validate          : Validates pages using the W3C's web validator.
-                                                       Slow. Currently many pages fail validation.
-  --user                  : Login name of a valid user on your test wiki.
-  --password              : Password for the valid user on your test wiki.
-  --delete-passed-retests : Will delete retests that now pass.
-                                                       Requires --rerun-failed-tests to be meaningful.
-  --rerun-failed-tests    : Whether to rerun any previously failed tests.
-  --max-errors            : Maximum number of errors to report before exiting.
-                                                       Does not include errors from --rerun-failed-tests
-  --max-runtime           : Maximum runtime, in minutes, to run before exiting.
-                                                       Only applies to new tests, not --rerun-failed-tests
-  --specific-test         : Runs only the specified fuzz test.
-                                                       Only applies to new tests, not --rerun-failed-tests
-  --keep-passed-tests     : Saves all test files, even those that pass.
-  --help                  : Show this help message.
-
-Example:
-  If you wanted to fuzz test a nightly MediaWiki checkout using cron for 1 hour,
-  and only wanted to be informed of errors, and did not want to redo previously
-  failed tests, and wanted a maximum of 100 errors, then you could do:
-  php {$_SERVER["SCRIPT_NAME"]} --quiet --max-errors=100 --max-runtime=60
-
-
-ENDS;
-
-       exit( 0 );
-}
-
-
-// if we got command line options, check they look valid.
-$validOptions = array ( "quiet", "base-url", "directory", "include-binary",
-               "w3c-validate", "user", "password", "delete-passed-retests",
-               "rerun-failed-tests", "max-errors",
-               "max-runtime", "specific-test", "keep-passed-tests", "help" );
-if ( !empty( $options ) ) {
-       $unknownArgs = array_diff ( array_keys( $options ), $validOptions );
-       foreach ( $unknownArgs as $invalidArg ) {
-               print "Ignoring invalid command-line option: --$invalidArg\n";
-       }
-}
-
-
-// /////////////////////////// CONFIGURATION ////////////////////////////////////
-
-// URL to some wiki on which we can run our tests.
-if ( !empty( $options["base-url"] ) ) {
-       define( "WIKI_BASE_URL", $options["base-url"] );
-} else {
-       define( "WIKI_BASE_URL", $wgServer . $wgScriptPath . '/' );
-}
-
-// The directory name where we store the output.
-// Example for Windows: "c:\\temp\\wiki-fuzz"
-if ( !empty( $options["directory"] ) ) {
-       define( "DIRECTORY", $options["directory"] );
-} else {
-       define( "DIRECTORY", "{$wgUploadDirectory}/fuzz-tests" );
-}
-
-// Should our test fuzz data include binary strings?
-define( "INCLUDE_BINARY",  isset( $options["include-binary"] ) );
-
-// Whether we want to validate HTML output on the web.
-// At the moment very few generated pages will validate, so not recommended.
-define( "VALIDATE_ON_WEB", isset( $options["w3c-validate"] ) );
-// URL to use to validate our output:
-define( "VALIDATOR_URL",  "http://validator.w3.org/check" );
-
-// Location of Tidy standalone executable.
-define( "PATH_TO_TIDY",  "/usr/bin/tidy" );
-
-// The name of a user who has edited on your wiki. Used
-// when testing the Special:Contributions and Special:Userlogin page.
-if ( !empty( $options["user"] ) ) {
-       define( "USER_ON_WIKI", $options["user"] );
-} else {
-       define( "USER_ON_WIKI", "nickj" );
-}
-
-// The password of the above user. Used when testing the login page,
-// and to do this we sometimes need to login successfully.
-if ( !empty( $options["password"] ) ) {
-       define( "USER_PASSWORD", $options["password"] );
-} else {
-       // And no, this is not a valid password on any public wiki.
-       define( "USER_PASSWORD", "nickj" );
-}
-
-// If we have a test that failed, and then we run it again, and it passes,
-// do you want to delete it or keep it?
-define( "DELETE_PASSED_RETESTS", isset( $options["delete-passed-retests"] ) );
-
-// Do we want to rerun old saved tests at script startup?
-// Set to true to help catch regressions, or false if you only want new stuff.
-define( "RERUN_OLD_TESTS", isset( $options["rerun-failed-tests"] ) );
-
-// File where the database errors are logged. Should be defined in LocalSettings.php.
-define( "DB_ERROR_LOG_FILE", $wgDBerrorLog );
-
-// Run in chatty mode (all output, default), or run in quiet mode (only prints out details of failed tests)?
-define( "QUIET", isset( $options["quiet"] ) );
-
-// Keep all test files, even those that pass. Potentially useful to tracking input that causes something
-// unusual to happen, if you don't know what "unusual" is until later.
-define( "KEEP_PASSED_TESTS", isset( $options["keep-passed-tests"] ) );
-
-// The maximum runtime, if specified.
-if ( !empty( $options["max-runtime"] ) && intval( $options["max-runtime"] ) > 0 ) {
-       define( "MAX_RUNTIME", intval( $options["max-runtime"] ) );
-}
-
-// The maximum number of problems to find, if specified. Excludes retest errors.
-if ( !empty( $options["max-errors"] ) && intval( $options["max-errors"] ) > 0 ) {
-       define( "MAX_ERRORS", intval( $options["max-errors"] ) );
-}
-
-// if the user has requested a specific test (instead of all tests), and the test they asked for looks valid.
-if ( !empty( $options["specific-test"] ) ) {
-       if ( class_exists( $options["specific-test"] ) && get_parent_class( $options["specific-test"] ) == "pageTest" ) {
-               define( "SPECIFIC_TEST", $options["specific-test"] );
-       }
-       else {
-               print "Ignoring invalid --specific-test\n";
-       }
-}
-
-// Define the file extensions we'll use:
-define( "PHP_TEST" , ".test.php" );
-define( "CURL_TEST", ".curl.sh" );
-define( "DATA_FILE", ".data.bin" );
-define( "INFO_FILE", ".info.txt" );
-define( "HTML_FILE", ".wiki_preview.html" );
-
-// If it goes wrong, we want to know about it.
-error_reporting( E_ALL | E_STRICT );
-
-// //////////////  A CLASS THAT GENERATES RANDOM NASTY WIKI & HTML STRINGS  //////////////////////
-
-class wikiFuzz {
-
-       // Only some HTML tags are understood with params by MediaWiki, the rest are ignored.
-       // List the tags that accept params below, as well as what those params are.
-       public static $data = array(
-                       "B"          => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "CAPTION"    => array( "CLASS", "ID", "STYLE", "align", "lang", "dir", "title" ),
-                       "CENTER"     => array( "CLASS", "STYLE", "ID", "lang", "dir", "title" ),
-                       "DIV"        => array( "CLASS", "STYLE", "ID", "align", "lang", "dir", "title" ),
-                       "FONT"       => array( "CLASS", "STYLE", "ID", "lang", "dir", "title", "face", "size", "color" ),
-                       "H1"         => array( "STYLE", "CLASS", "ID", "align", "lang", "dir", "title" ),
-                       "H2"         => array( "STYLE", "CLASS", "ID", "align", "lang", "dir", "title" ),
-                       "HR"         => array( "STYLE", "CLASS", "ID", "WIDTH", "lang", "dir", "title", "size", "noshade" ),
-                       "LI"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "type", "value" ),
-                       "TABLE"      => array( "STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "BORDER", "CELLPADDING",
-                                                                  "CELLSPACING", "lang", "dir", "title", "summary", "frame", "rules" ),
-                       "TD"         => array( "STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "COLSPAN", "ROWSPAN",
-                                                                 "VALIGN", "abbr", "axis", "headers", "scope", "nowrap", "height", "lang",
-                                                                 "dir", "title", "char", "charoff" ),
-                       "TH"         => array( "STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "COLSPAN", "ROWSPAN",
-                                                                 "VALIGN", "abbr", "axis", "headers", "scope", "nowrap", "height", "lang",
-                                                                 "dir", "title", "char", "charoff" ),
-                       "TR"         => array( "CLASS", "STYLE", "ID", "BGCOLOR", "ALIGN", "VALIGN", "lang", "dir", "title", "char", "charoff" ),
-                       "UL"         => array( "CLASS", "STYLE", "ID", "lang", "dir", "title", "type" ),
-                       "P"          => array( "style", "class", "id", "align", "lang", "dir", "title" ),
-                       "blockquote" => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "cite" ),
-                       "span"       => array( "CLASS", "ID", "STYLE", "align", "lang", "dir", "title" ),
-                       "code"       => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "tt"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "small"      => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "big"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "s"          => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "u"          => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "del"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "datetime", "cite" ),
-                       "ins"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "datetime", "cite" ),
-                       "sub"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "sup"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "ol"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "type", "start" ),
-                       "br"         => array( "CLASS", "ID", "STYLE", "title", "clear" ),
-                       "cite"       => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "var"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "ruby"       => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "rt"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "rp"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "dt"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "dl"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "em"         => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "strong"     => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "i"          => array( "CLASS", "ID", "STYLE", "lang", "dir", "title" ),
-                       "thead"      => array( "CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign' ),
-                       "tfoot"      => array( "CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign' ),
-                       "tbody"      => array( "CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign' ),
-                       "colgroup"   => array( "CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign', 'span', 'width' ),
-                       "col"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign', 'span', 'width' ),
-                       "pre"        => array( "CLASS", "ID", "STYLE", "lang", "dir", "title", "width" ),
-
-                       // extension tags that accept parameters:
-                       "sort"         => array( "order", "class" ),
-                       "ref"          => array( "name" ),
-                       "categorytree" => array( "hideroot", "mode", "style" ),
-                       "chemform"     => array( "link", "wikilink", "query" ),
-                       "section"      => array( "begin", "new" ),
-
-                       // older MW transclusion.
-                       "transclude"   => array( "page" ),
-                               );
-
-       // The types of the HTML that we will be testing were defined above
-       // Note: this needs to be initialized later to be equal to: array_keys(wikiFuzz::$data);
-       // as such, it also needs to also be publicly modifiable.
-       public static $types;
-
-
-       // Some attribute values.
-       static private $other = array( "&", "=", ":", "?", "\"", "\n", "%n%n%n%n%n%n%n%n%n%n%n%n", "\\" );
-       static private $ints  = array(
-                       // various numbers
-                       "0", "-1", "127", "-7897", "89000", "808080", "90928345",
-                       "0xfffffff", "ffff",
-
-                       // Different ways of saying: '
-                       "&#0000039;", // Long UTF-8 Unicode encoding
-                       "&#39;",  // dec version.
-                       "&#x27;", // hex version.
-                       "&#xA7;", // malformed hex variant, MSB not zero.
-
-                       // Different ways of saying: "
-                       "&#0000034;", // Long UTF-8 Unicode encoding
-                       "&#34;",
-                       "&#x22;", // hex version.
-                       "&#xA2;", // malformed hex variant, MSB not zero.
-
-                       // Different ways of saying: <
-                       "<",
-                       "&#0000060",  // Long UTF-8 Unicode encoding without semicolon (Mediawiki wants the colon)
-                       "&#0000060;", // Long UTF-8 Unicode encoding with semicolon
-                       "&#60;",
-                       "&#x3C;",     // hex version.
-                       "&#xBC;",     // malformed hex variant, MSB not zero.
-                       "&#x0003C;",  // mid-length hex version
-                       "&#X00003C;", // slightly longer hex version, with capital "X"
-
-                       // Different ways of saying: >
-                       ">",
-                       "&#0000062;", // Long UTF-8 Unicode encoding
-                       "&#62;",
-                       "&#x3E;",     // hex version.
-                       "&#xBE;",     // malformed variant, MSB not zero.
-
-                       // Different ways of saying: [
-                       "&#0000091;", // Long UTF-8 Unicode encoding
-                       "&#91;",
-                       "&#x5B;",     // hex version.
-
-                       // Different ways of saying: {{
-                       "&#0000123;&#0000123;", // Long UTF-8 Unicode encoding
-                       "&#123;&#123;",
-                       "&#x7B;&#x7B;",         // hex version.
-
-                       // Different ways of saying: |
-                       "&#0000124;", // Long UTF-8 Unicode encoding
-                       "&#124;",
-                       "&#x7C;",     // hex version.
-                       "&#xFC;",     // malformed hex variant, MSB not zero.
-
-                       // a "lignature" - http://www.robinlionheart.com/stds/html4/spchars#ligature
-                       // &#8204; == &zwnj;
-                       "&#8204;"
-                               );
-
-       // Defines various wiki-related bits of syntax, that can potentially cause
-       // MediaWiki to do something other than just print that literal text.
-       static private $ext = array(
-                       // links, templates, parameters.
-                       "[[", "]]", "{{", "}}", "|", "[", "]", "{{{", "}}}", "|]]",
-
-                       // wiki tables.
-                       "\n{|", "\n|}",
-                       "!",
-                       "\n!",
-                       "!!",
-                       "||",
-                       "\n|-", "| ", "\n|",
-
-                       // section headings.
-                       "=", "==", "===", "====", "=====", "======",
-
-                       // lists (ordered and unordered) and indentation.
-                       "\n*", "*", "\n:", ":",
-                       "\n#", "#",
-
-                       // definition lists (dl, dt, dd), newline, and newline with pre, and a tab.
-                       "\n;", ";", "\n ",
-
-                       // Whitespace: newline, tab, space.
-                       "\n", "\t", " ",
-
-                       // Some XSS attack vectors from http://ha.ckers.org/xss.html
-                       "&#x09;", // tab
-                       "&#x0A;", // newline
-                       "&#x0D;", // carriage return
-                       "\0",     // null character
-                       " &#14; ", // spaces and meta characters
-                       "'';!--\"<XSS>=&{()}", // compact injection of XSS & SQL tester
-
-                       // various NULL fields
-                       "%00",
-                       "&#00;",
-                       "\0",
-
-                       // horizontal rule.
-                       "-----", "\n-----",
-
-                       // signature, redirect, bold, italics.
-                       "~~~~", "#REDIRECT [[", "'''", "''",
-
-                       // comments.
-                       "<!--", "-->",
-
-                       // quotes.
-                       "\"", "'",
-
-                       // tag start and tag end.
-                       "<", ">",
-
-                       // implicit link creation on URIs.
-                       "http://",
-                       "https://",
-                       "ftp://",
-                       "irc://",
-                       "news:",
-                       'gopher://',
-                       'telnet://',
-                       'nntp://',
-                       'worldwind://',
-                       'mailto:',
-
-                       // images.
-                       "[[image:",
-                       ".gif",
-                       ".png",
-                       ".jpg",
-                       ".jpeg",
-                       'thumbnail=',
-                       'thumbnail',
-                       'thumb=',
-                       'thumb',
-                       'right',
-                       'none',
-                       'left',
-                       'framed',
-                       'frame',
-                       'enframed',
-                       'centre',
-                       'center',
-                       "Image:",
-                       "[[:Image",
-                       'px',
-                       'upright=',
-                       'border',
-
-                       // misc stuff to throw at the Parser.
-                       '%08X',
-                       '/',
-                       ":x{|",
-                       "\n|+",
-                       "<noinclude>",
-                       "</noinclude>",
-                       " \302\273",
-                       " :",
-                       " !",
-                       " ;",
-                       "\302\253",
-                       "[[category:",
-                       "?=",
-                       "(",
-                       ")",
-                       "]]]",
-                       "../",
-                       "{{{{",
-                       "}}}}",
-                       "[[Special:",
-                       "<includeonly>",
-                       "</includeonly>",
-                       "<!--MWTEMPLATESECTION=",
-                       '<!--MWTOC-->',
-
-                       // implicit link creation on booknum, RFC, and PubMed ID usage (both with and without IDs)
-                       "ISBN 2",
-                       "RFC 000",
-                       "PMID 000",
-                       "ISBN ",
-                       "RFC ",
-                       "PMID ",
-
-                       // magic words:
-                       '__NOTOC__',
-                       '__FORCETOC__',
-                       '__NOEDITSECTION__',
-                       '__START__',
-                       '__NOTITLECONVERT__',
-                       '__NOCONTENTCONVERT__',
-                       '__END__',
-                       '__TOC__',
-                       '__NOTC__',
-                       '__NOCC__',
-                       "__FORCETOC__",
-                       "__NEWSECTIONLINK__",
-                       "__NOGALLERY__",
-
-                       // more magic words / internal templates.
-                       '{{PAGENAME}}',
-                       '{{PAGENAMEE}}',
-                       '{{NAMESPACE}}',
-                       "{{MSG:",
-                       "}}",
-                       "{{MSGNW:",
-                       "}}",
-                       "{{INT:",
-                       "}}",
-                       '{{SITENAME}}',
-                       "{{NS:",
-                       "}}",
-                       "{{LOCALURL:",
-                       "}}",
-                       "{{LOCALURLE:",
-                       "}}",
-                       "{{SCRIPTPATH}}",
-                       "{{GRAMMAR:gentiv|",
-                       "}}",
-                       "{{REVISIONID}}",
-                       "{{SUBPAGENAME}}",
-                       "{{SUBPAGENAMEE}}",
-                       "{{ns:0}}",
-                       "{{fullurle:",
-                       "}}",
-                       "{{subst::",
-                       "}}",
-                       "{{UCFIRST:",
-                       "}}",
-                       "{{UC:",
-                       '{{SERVERNAME}}',
-                       '{{SERVER}}',
-                       "{{RAW:",
-                       "}}",
-                       "{{PLURAL:",
-                       "}}",
-                       "{{LCFIRST:",
-                       "}}",
-                       "{{LC:",
-                       "}}",
-                       '{{CURRENTWEEK}}',
-                       '{{CURRENTDOW}}',
-                       "{{INT:{{LC:contribs-showhideminor}}|",
-                       "}}",
-                       "{{INT:googlesearch|",
-                       "}}",
-                        "{{ROOTPAGENAME}}",
-                       "{{BASEPAGENAME}}",
-                       "{{CONTENTLANGUAGE}}",
-                       "{{PAGESINNAMESPACE:}}",
-                       "{{#language:",
-                       "}}",
-                       "{{#special:",
-                       "}}",
-                       "{{#special:emailuser",
-                       "}}",
-
-                       // Some raw link for magic words.
-                       "{{NUMBEROFPAGES:R",
-                       "}}",
-                       "{{NUMBEROFUSERS:R",
-                       "}}",
-                       "{{NUMBEROFARTICLES:R",
-                       "}}",
-                       "{{NUMBEROFFILES:R",
-                       "}}",
-                       "{{NUMBEROFADMINS:R",
-                       "}}",
-                       "{{padleft:",
-                       "}}",
-                       "{{padright:",
-                       "}}",
-                       "{{DEFAULTSORT:",
-                       "}}",
-
-                       // internal Math "extension":
-                       "<math>",
-                       "</math>",
-
-                       // Parser extension functions:
-                       "{{#expr:",
-                       "{{#if:",
-                       "{{#ifeq:",
-                       "{{#ifexist:",
-                       "{{#ifexpr:",
-                       "{{#switch:",
-                       "{{#time:",
-                       "}}",
-
-                       // references table for the Cite extension.
-                       "<references/>",
-
-                       // Internal Parser tokens - try inserting some of these.
-                       "UNIQ25f46b0524f13e67NOPARSE",
-                       "UNIQ17197916557e7cd6-HTMLCommentStrip46238afc3bb0cf5f00000002",
-                       "\x07UNIQ17197916557e7cd6-HTMLCommentStrip46238afc3bb0cf5f00000002-QINU",
-
-                       // Inputbox extension:
-                       "<inputbox>\ntype=search\nsearchbuttonlabel=\n",
-                       "</inputbox>",
-
-                       // charInsert extension:
-                       "<charInsert>",
-                       "</charInsert>",
-
-                       // wikiHiero extension:
-                       "<hiero>",
-                       "</hiero>",
-
-                       // Image gallery:
-                       "<gallery>",
-                       "</gallery>",
-
-                       // FixedImage extension.
-                       "<fundraising/>",
-
-                       // Timeline extension: currently untested.
-
-                       // Nowiki:
-                       "<nOwIkI>",
-                       "</nowiki>",
-
-                       // an external image to test the external image displaying code
-                       "http://debian.org/Pics/debian.png",
-
-                       // LabeledSectionTransclusion extension.
-                       "{{#lstx:",
-                       "}}",
-                       "{{#lst:",
-                       "}}",
-                       "{{#lst:Main Page|",
-                       "}}"
-                       );
-
-       /**
-        ** Randomly returns one element of the input array.
-        */
-       public static function chooseInput( array $input ) {
-               $randindex = wikiFuzz::randnum( count( $input ) - 1 );
-               return $input[$randindex];
-       }
-
-       // Max number of parameters for HTML attributes.
-       static private $maxparams = 10;
-
-       /**
-        * Returns random number between finish and start.
-        * @param $finish
-        * @param $start int
-        * @return int
-        */
-       public static function randnum( $finish, $start = 0 ) {
-               return mt_rand( $start, $finish );
-       }
-
-       /**
-        * Returns a mix of random text and random wiki syntax.
-        * @return string
-        */
-       private static function randstring() {
-               $thestring = "";
-
-               for ( $i = 0; $i < 40; $i++ ) {
-                       $what = wikiFuzz::randnum( 1 );
-
-                       if ( $what == 0 ) { // include some random wiki syntax
-                               $which = wikiFuzz::randnum( count( wikiFuzz::$ext ) - 1 );
-                               $thestring .= wikiFuzz::$ext[$which];
-                       }
-                       else { // include some random text
-                               $char = INCLUDE_BINARY
-                                       // Decimal version:
-                                       // "&#" . wikiFuzz::randnum(255) . ";"
-                                       // Hex version:
-                                       ? "&#x" . str_pad( dechex( wikiFuzz::randnum( 255 ) ), wikiFuzz::randnum( 2, 7 ), "0", STR_PAD_LEFT ) . ";"
-                                       // A truly binary version:
-                                       // ? chr(wikiFuzz::randnum(0,255))
-                                       : chr( wikiFuzz::randnum( 126, 32 ) );
-
-                               $length = wikiFuzz::randnum( 8 );
-                               $thestring .= str_repeat ( $char, $length );
-                       }
-               }
-               return $thestring;
-       }
-
-       /**
-        * Returns either random text, or random wiki syntax, or random data from "ints",
-        *        or random data from "other".
-        * @return string
-        */
-       private static function makestring() {
-               $what = wikiFuzz::randnum( 2 );
-               if ( $what == 0 ) {
-                       return wikiFuzz::randstring();
-               } elseif ( $what == 1 ) {
-                       return wikiFuzz::$ints[wikiFuzz::randnum( count( wikiFuzz::$ints ) - 1 )];
-               } else {
-                       return wikiFuzz::$other[wikiFuzz::randnum( count( wikiFuzz::$other ) - 1 )];
-               }
-       }
-
-       /**
-        * Returns the matched character slash-escaped as in a C string
-        * Helper for makeTitleSafe callback
-        * @param $matches
-        * @return string
-        */
-       private static function stringEscape( $matches ) {
-               return sprintf( "\\x%02x", ord( $matches[1] ) );
-       }
-
-       /**
-        ** Strips out the stuff that Mediawiki balks at in a page's title.
-        **        Implementation copied/pasted from cleanupTable.inc & cleanupImages.php
-        * @param $str string
-        * @return string
-        */
-       public static function makeTitleSafe( $str ) {
-               $legalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF";
-               return preg_replace_callback(
-                               "/([^$legalTitleChars])/", 'wikiFuzz::stringEscape',
-                               $str );
-       }
-
-       /**
-        ** Returns a string of fuzz text.
-        * @return string
-        */
-       private static function loop() {
-               switch ( wikiFuzz::randnum( 3 ) ) {
-                       case 1: // an opening tag, with parameters.
-                               $string = "";
-                               $i = wikiFuzz::randnum( count( wikiFuzz::$types ) - 1 );
-                               $t = wikiFuzz::$types[$i];
-                               $arr = wikiFuzz::$data[$t];
-                               $string .= "<" . $t . " ";
-                               $num_params = min( wikiFuzz::$maxparams, count( $arr ) );
-                               for ( $z = 0; $z < $num_params; $z++ ) {
-                                       $badparam = $arr[wikiFuzz::randnum( count( $arr ) - 1 )];
-                                       $badstring = wikiFuzz::makestring();
-                                       $string .= $badparam . "=" . wikiFuzz::getRandQuote() . $badstring . wikiFuzz::getRandQuote() . " ";
-                               }
-                               $string .= ">\n";
-                               return $string;
-                       case 2: // a closing tag.
-                               $i = wikiFuzz::randnum( count( wikiFuzz::$types ) - 1 );
-                               return "</" . wikiFuzz::$types[$i] . ">";
-                       case 3: // a random string, between tags.
-                               return wikiFuzz::makeString();
-               }
-               return "";    // catch-all, should never be called.
-       }
-
-       /**
-        * Returns one of the three styles of random quote: ', ", and nothing.
-        * @return string
-        */
-       private static function getRandQuote() {
-               switch ( wikiFuzz::randnum( 3 ) ) {
-                       case 1 : return "'";
-                       case 2 : return "\"";
-                       default: return "";
-               }
-       }
-
-       /**
-        ** Returns fuzz text, with the parameter indicating approximately how many lines of text you want.
-        * @param $maxtypes int
-        * @return string
-        */
-       public static function makeFuzz( $maxtypes = 2 ) {
-               $page = "";
-               for ( $k = 0; $k < $maxtypes; $k++ ) {
-                       $page .= wikiFuzz::loop();
-               }
-               return $page;
-       }
-}
-
-
-// //////   MEDIAWIKI PAGES TO TEST, AND HOW TO TEST THEM  ///////
-
-/**
- ** A page test has just these things:
- **        1) Form parameters.
- **        2) the URL we are going to test those parameters on.
- **        3) Any cookies required for the test.
- **        4) Whether Tidy should validate the page. Defaults to true, but can be turned off.
- **        Declared abstract because it should be extended by a class
- **        that supplies these parameters.
- */
-abstract class pageTest {
-       protected $params;
-       protected $pagePath;
-       protected $cookie = "";
-       protected $tidyValidate = true;
-
-       public function getParams() {
-               return $this->params;
-       }
-
-       public function getPagePath() {
-               return $this->pagePath;
-       }
-
-       public function getCookie() {
-               return $this->cookie;
-       }
-
-       public function tidyValidate() {
-               return $this->tidyValidate;
-       }
-}
-
-
-/**
- ** a page test for the "Edit" page. Tests Parser.php and Sanitizer.php.
- */
-class editPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=WIKIFUZZ";
-
-               $this->params = array (
-                               "action"        => "submit",
-                               "wpMinoredit"   => wikiFuzz::makeFuzz( 2 ),
-                               "wpPreview"     => wikiFuzz::makeFuzz( 2 ),
-                               "wpSection"     => wikiFuzz::makeFuzz( 2 ),
-                               "wpEdittime"    => wikiFuzz::makeFuzz( 2 ),
-                               "wpSummary"     => wikiFuzz::makeFuzz( 2 ),
-                               "wpScrolltop"   => wikiFuzz::makeFuzz( 2 ),
-                               "wpStarttime"   => wikiFuzz::makeFuzz( 2 ),
-                               "wpAutoSummary" => wikiFuzz::makeFuzz( 2 ),
-                               "wpTextbox1"    => wikiFuzz::makeFuzz( 40 )  // the main wiki text, need lots of this.
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpSection"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpEdittime"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpSummary"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpScrolltop"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpStarttime"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpAutoSummary"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpTextbox1"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Listusers".
- */
-class listusersTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Listusers";
-
-               $this->params = array (
-                               "title"        => wikiFuzz::makeFuzz( 2 ),
-                               "group"        => wikiFuzz::makeFuzz( 2 ),
-                               "username"     => wikiFuzz::makeFuzz( 2 ),
-                               "Go"           => wikiFuzz::makeFuzz( 2 ),
-                               "limit"        => wikiFuzz::chooseInput( array( "0", "-1", "---'----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "offset"       => wikiFuzz::chooseInput( array( "0", "-1", "--------'-----0", "+1", "81343242346234234", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Search".
- */
-class searchTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Search";
-
-               $this->params = array (
-                               "action"        => "index.php?title=Special:Search",
-                               "ns0"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns1"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns2"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns3"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns4"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns5"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns6"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns7"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns8"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns9"           => wikiFuzz::makeFuzz( 2 ),
-                               "ns10"          => wikiFuzz::makeFuzz( 2 ),
-                               "ns11"          => wikiFuzz::makeFuzz( 2 ),
-                               "ns12"          => wikiFuzz::makeFuzz( 2 ),
-                               "ns13"          => wikiFuzz::makeFuzz( 2 ),
-                               "ns14"          => wikiFuzz::makeFuzz( 2 ),
-                               "ns15"          => wikiFuzz::makeFuzz( 2 ),
-                               "redirs"        => wikiFuzz::makeFuzz( 2 ),
-                               "search"        => wikiFuzz::makeFuzz( 2 ),
-                               "offset"        => wikiFuzz::chooseInput( array( "", "0", "-1", "--------'-----0", "+1", "81343242346234234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "fulltext"      => wikiFuzz::chooseInput( array( "", "0", "1", "--------'-----0", "+1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "searchx"       => wikiFuzz::chooseInput( array( "", "0", "1", "--------'-----0", "+1", wikiFuzz::makeFuzz( 2 ) ) )
-                                       );
-       }
-}
-
-
-/**
- ** a page test for "Special:Recentchanges".
- */
-class recentchangesTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Recentchanges";
-
-               $this->params = array (
-                               "action"        => wikiFuzz::makeFuzz( 2 ),
-                               "title"         => wikiFuzz::makeFuzz( 2 ),
-                               "namespace"     => wikiFuzz::chooseInput( range( -1, 15 ) ),
-                               "Go"            => wikiFuzz::makeFuzz( 2 ),
-                               "invert"        => wikiFuzz::chooseInput( array( "-1", "---'----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "hideanons"     => wikiFuzz::chooseInput( array( "-1", "------'-------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'limit'         => wikiFuzz::chooseInput( array( "0", "-1", "---------'----0", "+1", "81340909772349234",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               "days"          => wikiFuzz::chooseInput( array( "-1", "----------'---0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "hideminor"     => wikiFuzz::chooseInput( array( "-1", "-----------'--0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "hidebots"      => wikiFuzz::chooseInput( array( "-1", "---------'----0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "hideliu"       => wikiFuzz::chooseInput( array( "-1", "-------'------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "hidepatrolled" => wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "hidemyself"    => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'categories_any' => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'categories'    => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'feed'          => wikiFuzz::chooseInput( array( "-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Prefixindex".
- */
-class prefixindexTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Prefixindex";
-
-               $this->params = array (
-                               "title"         => "Special:Prefixindex",
-                               "namespace"     => wikiFuzz::randnum( 101, -10 ),
-                               "Go"            => wikiFuzz::makeFuzz( 2 )
-                               );
-
-               // sometimes we want 'prefix', sometimes we want 'from', and sometimes we want nothing.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) {
-                       $this->params["prefix"] = wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+++--+1",
-                                                                                                wikiFuzz::randnum( 8134, -10 ), wikiFuzz::makeFuzz( 2 ) ) );
-               }
-               if ( wikiFuzz::randnum( 3 ) == 0 ) {
-                       $this->params["from"]   = wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+++--+1",
-                                                                                               wikiFuzz::randnum( 8134, -10 ), wikiFuzz::makeFuzz( 2 ) ) );
-               }
-       }
-}
-
-
-/**
- ** a page test for "Special:MIMEsearch".
- */
-class mimeSearchTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:MIMEsearch";
-
-               $this->params = array (
-                               "action"        => "index.php?title=Special:MIMEsearch",
-                               "mime"          => wikiFuzz::makeFuzz( 3 ),
-                               'limit'         => wikiFuzz::chooseInput( array( "0", "-1", "-------'------0", "+1", "81342321351235325",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               'offset'        => wikiFuzz::chooseInput( array( "0", "-1", "-----'--------0", "+1", "81341231235365252234324",  wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Log".
- */
-class specialLogTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Log";
-
-               $this->params = array (
-                               "type"        => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "par"         => wikiFuzz::makeFuzz( 2 ),
-                               "user"        => wikiFuzz::makeFuzz( 2 ),
-                               "page"        => wikiFuzz::makeFuzz( 2 ),
-                               "from"        => wikiFuzz::makeFuzz( 2 ),
-                               "until"       => wikiFuzz::makeFuzz( 2 ),
-                               "title"       => wikiFuzz::makeFuzz( 2 )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Userlogin", with a successful login.
- */
-class successfulUserLoginTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Userlogin&action=submitlogin&type=login&returnto=" . wikiFuzz::makeFuzz( 2 );
-
-               $this->params = array (
-                               "wpName"          => USER_ON_WIKI,
-                               // sometimes real password, sometimes not:
-                               'wpPassword'      => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), USER_PASSWORD ) ),
-                               'wpRemember'      => wikiFuzz::makeFuzz( 2 )
-                               );
-
-               $this->cookie = "wikidb_session=" .  wikiFuzz::chooseInput( array( "1" , wikiFuzz::makeFuzz( 2 ) ) );
-       }
-}
-
-
-/**
- ** a page test for "Special:Userlogin".
- */
-class userLoginTest extends pageTest {
-       function __construct() {
-
-               $this->pagePath = "index.php?title=Special:Userlogin";
-
-               $this->params = array (
-                               'wpRetype'        => wikiFuzz::makeFuzz( 2 ),
-                               'wpRemember'      => wikiFuzz::makeFuzz( 2 ),
-                               'wpRealName'      => wikiFuzz::makeFuzz( 2 ),
-                               'wpPassword'      => wikiFuzz::makeFuzz( 2 ),
-                               'wpName'          => wikiFuzz::makeFuzz( 2 ),
-                               'wpMailmypassword' => wikiFuzz::makeFuzz( 2 ),
-                               'wpLoginattempt'  => wikiFuzz::makeFuzz( 2 ),
-                               'wpEmail'         => wikiFuzz::makeFuzz( 2 ),
-                               'wpDomain'        => wikiFuzz::chooseInput( array( "", "local", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpCreateaccountMail' => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpCreateaccount' => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpCookieCheck'   => wikiFuzz::chooseInput( array( "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'type'            => wikiFuzz::chooseInput( array( "signup", "login", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'returnto'        => wikiFuzz::makeFuzz( 2 ),
-                               'action'          => wikiFuzz::chooseInput( array( "", "submitlogin", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               $this->cookie = "wikidb_session=" . wikiFuzz::chooseInput( array( "1" , wikiFuzz::makeFuzz( 2 ) ) );
-       }
-}
-
-
-/**
- ** a page test for "Special:Ipblocklist" (also includes unblocking)
- */
-class ipblocklistTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Ipblocklist";
-
-               $this->params = array (
-                               'wpUnblockAddress' => wikiFuzz::makeFuzz( 2 ),
-                               'ip'              => wikiFuzz::chooseInput( array( "20398702394", "", "Nickj2", wikiFuzz::makeFuzz( 2 ),
-                                                                        // something like an IP address, sometimes invalid:
-                                                                        ( wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) . "."
-                                                                          . wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) ) ) ),
-                               'id'              => wikiFuzz::makeFuzz( 2 ),
-                               'wpUnblockReason' => wikiFuzz::makeFuzz( 2 ),
-                               'action'          => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "success", "submit", "unblock" ) ),
-                               'wpEditToken'     => wikiFuzz::makeFuzz( 2 ),
-                               'wpBlock'         => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "" ) ),
-                               'limit'           => wikiFuzz::chooseInput( array( "0", "-1", "--------'-----0", "+1",
-                                                                                                "09700982312351132098234",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               'offset'          => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1",
-                                                                                                "09700980982341535324234234", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["action"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["ip"] );
-               if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["id"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpUnblockAddress"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Newimages".
- */
-class newImagesTest extends  pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Newimages";
-
-               $this->params = array (
-                               'hidebots'  => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "1", "", "-1" ) ),
-                               'wpIlMatch' => wikiFuzz::makeFuzz( 2 ),
-                               'until'     => wikiFuzz::makeFuzz( 2 ),
-                               'from'      => wikiFuzz::makeFuzz( 2 )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["until"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["from"] );
-       }
-}
-
-
-/**
- ** a page test for the "Special:Imagelist" page.
- */
-class imagelistTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Imagelist";
-
-               $this->params = array (
-                               'sort'      => wikiFuzz::chooseInput( array( "bysize", "byname" , "bydate", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'limit'     => wikiFuzz::chooseInput( array( "0", "-1", "--------'-----0", "+1", "09700982312351132098234",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               'offset'    => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", "09700980982341535324234234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpIlMatch' => wikiFuzz::makeFuzz( 2 )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Export".
- */
-class specialExportTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Export";
-
-               $this->params = array (
-                               'action'      => wikiFuzz::chooseInput( array( "submit", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'pages'       => wikiFuzz::makeFuzz( 2 ),
-                               'curonly'     => wikiFuzz::chooseInput( array( "", "0", "-1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'listauthors' => wikiFuzz::chooseInput( array( "", "0", "-1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'history'     => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", "09700980982341535324234234", wikiFuzz::makeFuzz( 2 ) ) ),
-
-                               );
-
-               // For the time being, need to disable "submit" action as Tidy barfs on MediaWiki's XML export.
-               if ( $this->params['action'] == 'submit' ) $this->params['action'] = '';
-
-               // Sometimes remove the history field.
-               if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["history"] );
-
-               // page does not produce HTML.
-               $this->tidyValidate = false;
-       }
-}
-
-
-/**
- ** a page test for "Special:Booksources".
- */
-class specialBooksourcesTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Booksources";
-
-               $this->params = array (
-                               'go'    => wikiFuzz::makeFuzz( 2 ),
-                               // ISBN codes have to contain some semi-numeric stuff or will be ignored:
-                               'isbn'  => "0X0" . wikiFuzz::makeFuzz( 2 )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Allpages".
- */
-class specialAllpagesTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special%3AAllpages";
-
-               $this->params = array (
-                               'from'      => wikiFuzz::makeFuzz( 2 ),
-                               'namespace' => wikiFuzz::chooseInput( range( -1, 15 ) ),
-                               'go'        => wikiFuzz::makeFuzz( 2 )
-                               );
-       }
-}
-
-
-/**
- ** a page test for the page History.
- */
-class pageHistoryTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Main_Page&action=history";
-
-               $this->params = array (
-                               'limit'     => wikiFuzz::chooseInput( array( "-1", "0", "-------'------0", "+1", "8134",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               'offset'    => wikiFuzz::chooseInput( array( "-1", "0", "------'-------0", "+1", "9823412312312412435", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "go"        => wikiFuzz::chooseInput( array( "first", "last", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "dir"       => wikiFuzz::chooseInput( array( "prev", "next", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "diff"      => wikiFuzz::chooseInput( array( "-1", "--------'-----0", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "oldid"     => wikiFuzz::chooseInput( array( "prev", "-1", "+1", "8134", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "feed"      => wikiFuzz::makeFuzz( 2 )
-                               );
-       }
-}
-
-
-/**
- ** a page test for the Special:Contributions".
- */
-class contributionsTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Contributions/" . USER_ON_WIKI;
-
-               $this->params = array (
-                               'target'    => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ), "newbies", USER_ON_WIKI ) ),
-                               'namespace' => wikiFuzz::chooseInput( array( -1, 15, 1, wikiFuzz::makeFuzz( 2 ) ) ),
-                               'offset'    => wikiFuzz::chooseInput( array( "0", "-1", "------'-------0", "+1", "982342131232131231241", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'bot'       => wikiFuzz::chooseInput( array( "", "-1", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'go'        => wikiFuzz::chooseInput( array( "-1", 'prev', 'next', wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-       }
-}
-
-
-/**
- ** a page test for viewing a normal page, whilst posting various params.
- */
-class viewPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Main_Page";
-
-               $this->params = array (
-                               "useskin"        => wikiFuzz::chooseInput( array( "chick", "cologneblue", "myskin",
-                                                                               "nostalgia", "simple", "standard", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "uselang"        => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ),
-                                               "ab", "af", "an", "ar", "arc", "as", "ast", "av", "ay", "az", "ba",
-                                               "bat-smg", "be", "bg", "bm", "bn", "bo", "bpy", "br", "bs", "ca",
-                                               "ce", "cs", "csb", "cv", "cy", "da", "de", "dv", "dz", "el", "en",
-                                               "eo", "es", "et", "eu", "fa", "fi", "fo", "fr", "fur", "fy", "ga",
-                                               "gn", "gsw", "gu", "he", "hi", "hr", "hu", "ia", "id", "ii", "is",
-                                               "it", "ja", "jv", "ka", "km", "kn", "ko", "ks", "ku", "kv", "la",
-                                               "li", "lo", "lt", "lv", "mk", "ml", "ms", "nah", "nap", "nds",
-                                               "nds-nl", "nl", "nn", "no", "non", "nv", "oc", "or", "os", "pa",
-                                               "pl", "pms", "ps", "pt", "pt-br", "qu", "rmy", "ro", "ru", "sc",
-                                               "sd", "sk", "sl", "sq", "sr", "sr-ec", "sr-el",
-                                               "su", "sv", "ta", "te", "th", "tr", "tt", "ty", "tyv", "udm",
-                                               "ug", "uk", "ur", "utf8", "vec", "vi", "wa", "xal", "yi", "za",
-                                               "zh", "zh-cn", "zh-hk", "zh-sg", "zh-tw", "zh-tw" ) ),
-                               "returnto"       => wikiFuzz::makeFuzz( 2 ),
-                               "feed"           => wikiFuzz::chooseInput( array( "atom", "rss", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "rcid"           => wikiFuzz::makeFuzz( 2 ),
-                               "action"         => wikiFuzz::chooseInput( array( "view", "raw", "render", wikiFuzz::makeFuzz( 2 ), "markpatrolled" ) ),
-                               "printable"      => wikiFuzz::makeFuzz( 2 ),
-                               "oldid"          => wikiFuzz::makeFuzz( 2 ),
-                               "redirect"       => wikiFuzz::makeFuzz( 2 ),
-                               "diff"           => wikiFuzz::makeFuzz( 2 ),
-                               "search"         => wikiFuzz::makeFuzz( 2 ),
-                               "rdfrom"         => wikiFuzz::makeFuzz( 2 ),  // things from Article.php from here on:
-                               "token"          => wikiFuzz::makeFuzz( 2 ),
-                               "tbid"           => wikiFuzz::makeFuzz( 2 ),
-                               // @todo FIXME: Duplicate array key.
-                               "action"         => wikiFuzz::chooseInput( array( "purge", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpReason"       => wikiFuzz::makeFuzz( 2 ),
-                               "wpEditToken"    => wikiFuzz::makeFuzz( 2 ),
-                               "from"           => wikiFuzz::makeFuzz( 2 ),
-                               "bot"            => wikiFuzz::makeFuzz( 2 ),
-                               "summary"        => wikiFuzz::makeFuzz( 2 ),
-                               "direction"      => wikiFuzz::chooseInput( array( "next", "prev", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "section"        => wikiFuzz::makeFuzz( 2 ),
-                               "preload"        => wikiFuzz::makeFuzz( 2 ),
-
-                               );
-
-               // Tidy does not know how to valid atom or rss, so exclude from testing for the time being.
-               if ( $this->params["feed"] == "atom" )     { unset( $this->params["feed"] ); }
-               elseif ( $this->params["feed"] == "rss" ) { unset( $this->params["feed"] ); }
-
-               // Raw pages cannot really be validated
-               if ( $this->params["action"] == "raw" ) unset( $this->params["action"] );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["rcid"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["diff"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["rdfrom"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["oldid"] );
-
-               // usually don't want action == purge.
-               if ( wikiFuzz::randnum( 6 ) > 1 ) unset( $this->params["action"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Allmessages".
- */
-class specialAllmessagesTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Allmessages";
-
-               // only really has one parameter
-               $this->params = array (
-                               "ot"     => wikiFuzz::chooseInput( array( "php", "html", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-       }
-}
-
-/**
- ** a page test for "Special:Newpages".
- */
-class specialNewpagesPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Newpages";
-
-               $this->params = array (
-                               "namespace" => wikiFuzz::chooseInput( range( -1, 15 ) ),
-                               "feed"      => wikiFuzz::chooseInput( array( "atom", "rss", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'limit'     => wikiFuzz::chooseInput( array( "-1", "0", "-------'------0", "+1", "8134",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               'offset'    => wikiFuzz::chooseInput( array( "-1", "0", "------'-------0", "+1", "9823412312312412435", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // Tidy does not know how to valid atom or rss, so exclude from testing for the time being.
-               if ( $this->params["feed"] == "atom" )     { unset( $this->params["feed"] ); }
-               elseif ( $this->params["feed"] == "rss" ) { unset( $this->params["feed"] ); }
-       }
-}
-
-/**
- ** a page test for "redirect.php"
- */
-class redirectTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "redirect.php";
-
-               $this->params = array (
-                               "wpDropdown" => wikiFuzz::makeFuzz( 2 )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpDropdown"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Confirmemail"
- */
-class confirmEmail extends pageTest {
-       function __construct() {
-               // sometimes we send a bogus confirmation code, and sometimes we don't.
-               $this->pagePath = "index.php?title=Special:Confirmemail" . wikiFuzz::chooseInput( array( "", "/" . wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 1 ) ) ) );
-
-               $this->params = array (
-                               "token" => wikiFuzz::makeFuzz( 2 )
-                               );
-       }
-}
-
-
-/**
- ** a page test for "Special:Watchlist"
- **        Note: this test would be better if we were logged in.
- */
-class watchlistTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Watchlist";
-
-               $this->params = array (
-                               "remove"   => wikiFuzz::chooseInput( array( "Remove checked items from watchlist", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'days'     => wikiFuzz::chooseInput( array( 0, -1, -230, "--", 3, 9, wikiFuzz::makeFuzz( 2 ) ) ),
-                               'hideOwn'  => wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'hideBots' => wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'namespace' => wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'action'   => wikiFuzz::chooseInput( array( "submit", "clear", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'id[]'     => wikiFuzz::makeFuzz( 2 ),
-                               'edit'     => wikiFuzz::makeFuzz( 2 ),
-                               'token'    => wikiFuzz::chooseInput( array( "", "1243213", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we specifiy "reset", and sometimes we don't.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) $this->params["reset"] = wikiFuzz::chooseInput( array( "", "0", "1", wikiFuzz::makeFuzz( 2 ) ) );
-       }
-}
-
-/**
- ** a page test for "Special:Movepage"
- */
-class specialMovePage extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Movepage";
-
-               $this->params = array (
-                               "action"      => wikiFuzz::chooseInput( array( "success", "submit", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpEditToken' => wikiFuzz::chooseInput( array( '', 0, 34987987, wikiFuzz::makeFuzz( 2 ) ) ),
-                               'target'      => wikiFuzz::chooseInput( array( "x", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ) ) ),
-                               'wpOldTitle'  => wikiFuzz::chooseInput( array( "z", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ), wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpNewTitle'  => wikiFuzz::chooseInput( array( "y", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ), wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpReason'    => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpMovetalk'  => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpDeleteAndMove'  => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpConfirm'   => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'talkmoved'   => wikiFuzz::chooseInput( array( "1", wikiFuzz::makeFuzz( 2 ), "articleexists", 'notalkpage' ) ),
-                               'oldtitle'    => wikiFuzz::makeFuzz( 2 ),
-                               'newtitle'    => wikiFuzz::makeFuzz( 2 ),
-                               'wpMovetalk'  => wikiFuzz::chooseInput( array( "1", "0", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["wpEditToken"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["target"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpNewTitle"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpReason"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpOldTitle"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Undelete"
- */
-class specialUndeletePageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Undelete";
-
-               $this->params = array (
-                               "action"      => wikiFuzz::chooseInput( array( "submit", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpEditToken' => wikiFuzz::chooseInput( array( '', 0, 34987987, wikiFuzz::makeFuzz( 2 ) ) ),
-                               'target'      => wikiFuzz::chooseInput( array( "x", wikiFuzz::makeTitleSafe( wikiFuzz::makeFuzz( 2 ) ) ) ),
-                               'timestamp'   => wikiFuzz::chooseInput( array( "125223", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'file'        => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'restore'     => wikiFuzz::chooseInput( array( "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'preview'     => wikiFuzz::chooseInput( array( "0", "1", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpComment'   => wikiFuzz::makeFuzz( 2 )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["wpEditToken"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["target"] );
-               if ( wikiFuzz::randnum( 1 ) == 0 ) unset( $this->params["restore"] );
-               if ( wikiFuzz::randnum( 1 ) == 0 ) unset( $this->params["preview"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Unlockdb"
- */
-class specialUnlockdbPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Unlockdb";
-
-               $this->params = array (
-                               "action"        => wikiFuzz::chooseInput( array( "submit", "success", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpEditToken'   => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpLockConfirm' => wikiFuzz::chooseInput( array( "0", "1", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpEditToken"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["action"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpLockConfirm"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Lockdb"
- */
-class specialLockdbPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Lockdb";
-
-               $this->params = array (
-                               "action"       => wikiFuzz::chooseInput( array( "submit", "success", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpEditToken'  => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpLockReason' => wikiFuzz::makeFuzz( 2 ),
-                               'wpLockConfirm' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpEditToken"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["action"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpLockConfirm"] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Userrights"
- */
-class specialUserrights extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Userrights";
-
-               $this->params = array (
-                               'wpEditToken'   => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'user-editname' => wikiFuzz::chooseInput( array( "Nickj2", "Nickj2\n<xyz>", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'ssearchuser'   => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'saveusergroups' => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ), "Save User Groups" ),
-                               'member[]'      => wikiFuzz::chooseInput( array( "0", "bot", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "available[]"   => wikiFuzz::chooseInput( array( "0", "sysop", "bureaucrat", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params['ssearchuser'] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params['saveusergroups'] );
-       }
-}
-
-
-/**
- ** a test for page protection and unprotection.
- */
-class pageProtectionForm extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Main_Page";
-
-               $this->params = array (
-                               "action"               => "protect",
-                               'wpEditToken'          => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "mwProtect-level-edit" => wikiFuzz::chooseInput( array( '', 'autoconfirmed', 'sysop', wikiFuzz::makeFuzz( 2 ) ) ),
-                               "mwProtect-level-move" => wikiFuzz::chooseInput( array( '', 'autoconfirmed', 'sysop', wikiFuzz::makeFuzz( 2 ) ) ),
-                               "mwProtectUnchained"   => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               'mwProtect-reason'     => wikiFuzz::chooseInput( array( "because it was there", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["mwProtectUnchained"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params['mwProtect-reason'] );
-       }
-}
-
-
-/**
- ** a page test for "Special:Blockip".
- */
-class specialBlockip extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Blockip";
-
-               $this->params = array (
-                               "action"          => wikiFuzz::chooseInput( array( "submit", "",  wikiFuzz::makeFuzz( 2 ) ) ),
-                               'wpEditToken'     => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpBlockAddress"  => wikiFuzz::chooseInput( array( "20398702394", "", "Nickj2", wikiFuzz::makeFuzz( 2 ),
-                                                                         // something like an IP address, sometimes invalid:
-                                                                        ( wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) . "."
-                                                                         . wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) ) ) ),
-                               "ip"              => wikiFuzz::chooseInput( array( "20398702394", "", "Nickj2", wikiFuzz::makeFuzz( 2 ),
-                                                                         // something like an IP address, sometimes invalid:
-                                                                        ( wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) . "."
-                                                                         . wikiFuzz::randnum( 300, -20 ) . "." . wikiFuzz::randnum( 300, -20 ) ) ) ),
-                               "wpBlockOther"    => wikiFuzz::chooseInput( array( '', 'Nickj2', wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpBlockExpiry"   => wikiFuzz::chooseInput( array( "other", "2 hours", "1 day", "3 days", "1 week", "2 weeks",
-                                                                                 "1 month", "3 months", "6 months", "1 year", "infinite", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpBlockReason"   => wikiFuzz::chooseInput( array( "because it was there", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpAnonOnly"      => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpCreateAccount" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpBlock"         => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) )
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockOther"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockExpiry"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockReason"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpAnonOnly"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpCreateAccount"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["wpBlockAddress"] );
-               if ( wikiFuzz::randnum( 4 ) == 0 ) unset( $this->params["ip"] );
-       }
-}
-
-
-/**
- ** a test for the imagepage.
- */
-class imagepageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Image:Small-email.png";
-
-               $this->params = array (
-                               "image"         => wikiFuzz::chooseInput( array( "Small-email.png", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpReason"      => wikiFuzz::makeFuzz( 2 ),
-                               "oldimage"      => wikiFuzz::chooseInput( array( "Small-email.png", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpEditToken"   => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["image"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpReason"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["oldimage"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpEditToken"] );
-       }
-}
-
-
-/**
- ** a test for page deletion form.
- */
-class pageDeletion extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Main_Page&action=delete";
-
-               $this->params = array (
-                               "wpEditToken" => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpReason"    => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpConfirm"   => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["wpReason"] );
-               if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["wpEditToken"] );
-               if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["wpConfirm"] );
-       }
-}
-
-
-
-/**
- ** a test for Revision Deletion.
- */
-class specialRevisionDeletePageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Revisiondelete";
-
-               $this->params = array (
-                               "target"               => wikiFuzz::chooseInput( array( "Main Page", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "oldid"                => wikiFuzz::makeFuzz( 2 ),
-                               "oldid[]"              => wikiFuzz::makeFuzz( 2 ),
-                               "wpReason"             => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "revdelete-hide-text"  => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "revdelete-hide-comment" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "revdelete-hide-user"  => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "revdelete-hide-restricted" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["target"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["oldid"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["oldid[]"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["wpReason"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-text"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-comment"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-user"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["revdelete-hide-restricted"] );
-       }
-}
-
-
-/**
- ** a test for Special:Import.
- */
-class specialImportPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Import";
-
-               $this->params = array (
-                               "action"         => "submit",
-                               "source"         => wikiFuzz::chooseInput( array( "upload", "interwiki", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "MAX_FILE_SIZE"  => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "xmlimport"      => wikiFuzz::chooseInput( array( "/var/www/hosts/mediawiki/wiki/AdminSettings.php", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "namespace"      => wikiFuzz::chooseInput( array( wikiFuzz::randnum( 30, -6 ), wikiFuzz::makeFuzz( 2 ) ) ),
-                               "interwiki"      => wikiFuzz::makeFuzz( 2 ),
-                               "interwikiHistory" => wikiFuzz::makeFuzz( 2 ),
-                               "frompage"       => wikiFuzz::makeFuzz( 2 ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["action"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["source"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["MAX_FILE_SIZE"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["xmlimport"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["interwiki"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["interwikiHistory"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["frompage"] );
-
-               // Note: Need to do a file upload to fully test this Special page.
-       }
-}
-
-
-/**
- ** a test for thumb.php
- */
-class thumbTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "thumb.php";
-
-               $this->params = array (
-                               "f"  => wikiFuzz::chooseInput( array( "..", "\\", "small-email.png", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "w"  => wikiFuzz::chooseInput( array( "80", wikiFuzz::randnum( 6000, -200 ), wikiFuzz::makeFuzz( 2 ) ) ),
-                               "r"  => wikiFuzz::chooseInput( array( "0", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["f"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["w"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["r"] );
-       }
-}
-
-/**
- ** a test for profileinfo.php
- */
-class profileInfo extends pageTest {
-       function __construct() {
-               $this->pagePath = "profileinfo.php";
-
-               $this->params = array (
-                               "expand"  => wikiFuzz::makeFuzz( 2 ),
-                               "sort"    => wikiFuzz::chooseInput( array( "time", "count", "name", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "filter"  => wikiFuzz::chooseInput( array( "Main Page", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["sort"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["filter"] );
-       }
-}
-
-
-/**
- ** a test for Special:Cite (extension Special page).
- */
-class specialCitePageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Cite";
-
-               $this->params = array (
-                               "page"    => wikiFuzz::chooseInput( array( "\" onmouseover=\"alert(1);\"", "Main Page", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "id"      => wikiFuzz::chooseInput( array( "-1", "0", "------'-------0", "+1", "-9823412312312412435", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["page"] );
-               if ( wikiFuzz::randnum( 6 ) == 0 ) unset( $this->params["id"] );
-       }
-}
-
-
-/**
- ** a test for Special:Filepath (extension Special page).
- */
-class specialFilepathPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Filepath";
-
-               $this->params = array (
-                               "file"    => wikiFuzz::chooseInput( array( "Small-email.png", "Small-email.png" . wikiFuzz::makeFuzz( 1 ), wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-       }
-}
-
-
-/**
- ** a test for Special:Renameuser (extension Special page).
- */
-class specialRenameuserPageTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Renameuser";
-
-               $this->params = array (
-                               "oldusername"   => wikiFuzz::chooseInput( array( "Nickj2", "192.168.0.2", wikiFuzz::makeFuzz( 1 ) ) ),
-                               "newusername"   => wikiFuzz::chooseInput( array( "Nickj2", "192.168.0.2", wikiFuzz::makeFuzz( 1 ) ) ),
-                               "token"         => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-       }
-}
-
-
-/**
- ** a test for Special:Linksearch (extension Special page).
- */
-class specialLinksearch extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special%3ALinksearch";
-
-               $this->params = array (
-                               "target" => wikiFuzz::makeFuzz( 2 ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 10 ) == 0 ) unset( $this->params["target"] );
-       }
-}
-
-
-/**
- ** a test for Special:CategoryTree (extension Special page).
- */
-class specialCategoryTree extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:CategoryTree";
-
-               $this->params = array (
-                               "target" => wikiFuzz::makeFuzz( 2 ),
-                               "from"   => wikiFuzz::makeFuzz( 2 ),
-                               "until"  => wikiFuzz::makeFuzz( 2 ),
-                               "showas" => wikiFuzz::makeFuzz( 2 ),
-                               "mode"   => wikiFuzz::chooseInput( array( "pages", "categories", "all", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we do want to specify certain parameters.
-               if ( wikiFuzz::randnum( 5 ) == 0 ) $this->params["notree"] = wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) );
-       }
-}
-
-
-/**
- ** a test for "Special:Chemicalsources" (extension Special page).
- */
-class specialChemicalsourcesTest extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Chemicalsources";
-
-               // choose an input format to use.
-               $format =  wikiFuzz::chooseInput(
-                                       array(  'go',
-                                                       'CAS',
-                                                       'EINECS',
-                                                       'CHEBI',
-                                                       'PubChem',
-                                                       'SMILES',
-                                                       'InChI',
-                                                       'ATCCode',
-                                                       'KEGG',
-                                                       'RTECS',
-                                                       'ECNumber',
-                                                       'DrugBank',
-                                                       'Formula',
-                                                       'Name'
-                                                )
-                                       );
-
-               // values for different formats usually start with either letters or numbers.
-               switch ( $format ) {
-                       case 'Name'   : $value = "A"; break;
-                       case 'InChI'  :
-                       case 'SMILES' :
-                       case 'Formula': $value = "C"; break;
-                       default       : $value = "0"; break;
-               }
-
-               // and then we append the fuzz input.
-               $this->params = array ( $format => $value . wikiFuzz::makeFuzz( 2 ) );
-       }
-}
-
-
-/**
- ** A test for api.php (programmatic interface to MediaWiki in XML/JSON/RSS/etc formats).
- ** Quite involved to test because there are lots of options/parameters, and because
- ** for a lot of the functionality if all the parameters don't make sense then it just
- ** returns the help screen - so currently a lot of the tests aren't actually doing much
- ** because something wasn't right in the query.
- **
- ** @todo Incomplete / unfinished; Runs too fast (suggests not much testing going on).
- */
-class api extends pageTest {
-
-       // API login mode.
-       private static function loginMode() {
-               $arr =  array ( "lgname"        => wikiFuzz::makeFuzz( 2 ),
-                                               "lgpassword"    => wikiFuzz::makeFuzz( 2 ),
-                                          );
-               // sometimes we want to specify the extra "lgdomain" parameter.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) {
-                       $arr["lgdomain"] = wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) );
-               }
-
-               return $arr;
-       }
-
-       // API OpenSearch mode.
-       private static function opensearchMode() {
-               return array ( "search"        => wikiFuzz::makeFuzz( 2 ) );
-       }
-
-       // API watchlist feed mode.
-       private static function feedwatchlistMode() {
-               // @todo FIXME: Add "wikiFuzz::makeFuzz(2)" as possible value below?
-               return array ( "feedformat"    => wikiFuzz::chooseInput( array( "rss", "atom" ) ) );
-       }
-
-       // API query mode.
-       private static function queryMode() {
-               // @todo FIXME: Add "wikiFuzz::makeFuzz(2)" as possible params for the elements below?
-               //        Suspect this will stuff up the tests more, but need to check.
-               $params = array (
-                                        // @todo FIXME: More titles.
-                                        "titles"        => wikiFuzz::chooseInput( array( "Main Page" ) ),
-                                        // @todo FIXME: More pageids.
-                                        "pageids"       => 1,
-                                        "prop"          => wikiFuzz::chooseInput( array( "info", "revisions", "watchlist" ) ),
-                                        "list"          => wikiFuzz::chooseInput( array( "allpages", "logevents", "watchlist", "usercontribs", "recentchanges", "backlinks", "embeddedin", "imagelinks" ) ),
-                                        "meta"          => wikiFuzz::chooseInput( array( "siteinfo" ) ),
-                                        "generator"     => wikiFuzz::chooseInput( array( "allpages", "logevents", "watchlist", "info", "revisions" ) ),
-                                        "siprop"        => wikiFuzz::chooseInput( array( "general", "namespaces", "general|namespaces" ) ),
-                                  );
-
-                // Add extra parameters based on what list choice we got.
-                switch ( $params["list"] ) {
-                       case "usercontribs" : self::addListParams ( $params, "uc", array( "limit", "start", "end", "user", "dir" ) ); break;
-                       case "allpages"     : self::addListParams ( $params, "ap", array( "from", "prefix", "namespace", "filterredir", "limit" ) ); break;
-                       case "watchlist"    : self::addListParams ( $params, "wl", array( "allrev", "start", "end", "namespace", "dir", "limit", "prop" ) ); break;
-                       case "logevents"    : self::addListParams ( $params, "le", array( "limit", "type", "start", "end", "user", "dir" ) ); break;
-                       case "recentchanges": self::addListParams ( $params, "rc", array( "limit", "prop", "show", "namespace", "start", "end", "dir" ) ); break;
-                       case "backlinks"    : self::addListParams ( $params, "bl", array( "continue", "namespace", "redirect", "limit" ) ); break;
-                       case "embeddedin"   : self::addListParams ( $params, "ei", array( "continue", "namespace", "redirect", "limit" ) ); break;
-                       case "imagelinks"   : self::addListParams ( $params, "il", array( "continue", "namespace", "redirect", "limit" ) ); break;
-                }
-
-                if ( $params["prop"] == "revisions" ) {
-                       self::addListParams ( $params, "rv", array( "prop", "limit", "startid", "endid", "end", "dir" ) );
-                }
-
-                // Sometimes we want redirects, sometimes we don't.
-                if ( wikiFuzz::randnum( 3 ) == 0 ) {
-                       $params["redirects"] = wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) );
-                }
-
-                return $params;
-       }
-
-       // Adds all the elements to the array, using the specified prefix.
-       private static function addListParams( &$array, $prefix, $elements ) {
-               foreach ( $elements as $element ) {
-                       $array[$prefix . $element] = self::getParamDetails( $element );
-               }
-       }
-
-       // For a given element name, returns the data for that element.
-       private static function getParamDetails( $element ) {
-               switch ( $element ) {
-                       case 'startid'    :
-                       case 'endid'      :
-                       case 'start'      :
-                       case 'end'        :
-                       case 'limit'      : return wikiFuzz::chooseInput( array( "0", "-1", "---'----------0", "+1", "8134", "320742734234235", "20060230121212", wikiFuzz::randnum( 9000, -100 ), wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'dir'        : return wikiFuzz::chooseInput( array( "newer", "older", wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'user'       : return wikiFuzz::chooseInput( array( USER_ON_WIKI, wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'namespace'  : return wikiFuzz::chooseInput( array( -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 200000, wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'filterredir': return wikiFuzz::chooseInput( array( "all", "redirects", "nonredirectsallpages", wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'allrev'     : return wikiFuzz::chooseInput( array( "1", 0, "", wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'prop'       : return wikiFuzz::chooseInput( array( "user", "comment", "timestamp", "patrol", "flags", "user|user|comment|flags", wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'type'       : return wikiFuzz::chooseInput( array( "block", "protect", "rights", "delete", "upload", "move", "import", "renameuser", "newusers", "makebot", wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'hide'       : return wikiFuzz::chooseInput( array( "minor", "bots", "anons", "liu", "liu|bots|", wikiFuzz::makeFuzz( 2 ) ) );
-                       case 'show'       : return wikiFuzz::chooseInput( array( 'minor', '!minor', 'bot', '!bot', 'anon', '!anon', wikiFuzz::makeFuzz( 2 ) ) );
-                       default           : return wikiFuzz::makeFuzz( 2 );
-               }
-       }
-
-       // Entry point.
-       function __construct() {
-               $this->pagePath = "api.php";
-
-               $modes = array ( "help",
-                                               "login",
-                                               "opensearch",
-                                               "feedwatchlist",
-                                               "query" );
-               $action = wikiFuzz::chooseInput( array_merge ( $modes, array( wikiFuzz::makeFuzz( 2 ) ) ) );
-
-               switch ( $action ) {
-                       case "login"         : $this->params = self::loginMode();
-                                                                  break;
-                       case "opensearch"    : $this->params = self::opensearchMode();
-                                                                  break;
-                       case "feedwatchlist" : $this->params = self::feedwatchlistMode();
-                                                                  break;
-                       case "query"         : $this->params = self::queryMode();
-                                                                  break;
-                       case "help"         :
-                       default             :  // Do something random - "Crazy Ivan" mode.
-                                                                  $random_mode = wikiFuzz::chooseInput( $modes ) . "Mode";
-                                                                  // There is no "helpMode".
-                                                                  if ( $random_mode == "helpMode" ) $random_mode = "queryMode";
-                                                                  $this->params = self::$random_mode();
-                                                                  break;
-               }
-
-               // Save the selected action.
-               $this->params["action"] = $action;
-
-               // Set the cookie:
-               // @todo FIXME: Need to get this cookie dynamically set, rather than hard-coded.
-               $this->cookie = "wikidbUserID=10001; wikidbUserName=Test; wikidb_session=178df0fe68c75834643af65dec9ec98a; wikidbToken=1adc6753d62c44aec950c024d7ae0540";
-
-               // Output format
-               $this->params["format"] = wikiFuzz::chooseInput( array( "json", "jsonfm", "php", "phpfm",
-                                                                                                                          "wddx", "wddxfm", "xml", "xmlfm",
-                                                                                                                          "yaml", "yamlfm", "raw", "rawfm",
-                                                                                                                          wikiFuzz::makeFuzz( 2 ) ) );
-
-               // Page does not produce HTML (sometimes).
-               $this->tidyValidate = false;
-       }
-}
-
-
-/**
- ** a page test for the GeSHi extension.
- */
-class GeSHi_Test extends pageTest {
-
-       private function getGeSHiContent() {
-               return "<source lang=\"" . $this->getLang() . "\" "
-                          . ( wikiFuzz::randnum( 2 ) == 0 ? "line " : "" )
-                          . ( wikiFuzz::randnum( 2 ) == 0 ? "strict " : "" )
-                          . "start=" . wikiFuzz::chooseInput( array( wikiFuzz::randnum( 6000, -6000 ), wikiFuzz::makeFuzz( 2 ) ) )
-                          . ">"
-                          . wikiFuzz::makeFuzz( 2 )
-                          . "</source>";
-       }
-
-       private function getLang() {
-       return wikiFuzz::chooseInput( array( "actionscript", "ada", "apache", "applescript", "asm", "asp", "autoit", "bash", "blitzbasic", "bnf", "c", "c_mac", "caddcl", "cadlisp",
-                               "cfdg", "cfm", "cpp", "cpp-qt", "csharp", "css", "d", "delphi", "diff", "div", "dos", "eiffel", "fortran", "freebasic", "gml", "groovy", "html4strict", "idl",
-                               "ini", "inno", "io", "java", "java5", "javascript", "latex", "lisp", "lua", "matlab", "mirc", "mpasm", "mysql", "nsis", "objc", "ocaml", "ocaml-brief", "oobas",
-                               "oracle8", "pascal", "perl", "php", "php-brief", "plsql", "python", "qbasic", "rails", "reg", "robots", "ruby", "sas", "scheme", "sdlbasic", "smalltalk", "smarty",
-                               "sql", "tcl", "text", "thinbasic", "tsql", "vb", "vbnet", "vhdl", "visualfoxpro", "winbatch", "xml", "xpp", "z80", wikiFuzz::makeFuzz( 1 ) ) );
-       }
-
-       function __construct() {
-               $this->pagePath = "index.php?title=WIKIFUZZ";
-
-               $this->params = array (
-                               "action"        => "submit",
-                               "wpMinoredit"   => "test",
-                               "wpPreview"     => "test",
-                               "wpSection"     => "test",
-                               "wpEdittime"    => "test",
-                               "wpSummary"     => "test",
-                               "wpScrolltop"   => "test",
-                               "wpStarttime"   => "test",
-                               "wpAutoSummary" => "test",
-                               "wpTextbox1"    => $this->getGeSHiContent() // the main wiki text, contains fake GeSHi content.
-                               );
-       }
-}
-
-/**
- ** selects a page test to run.
- * @param $count
- * @return \api|\confirmEmail|\contributionsTest|\editPageTest|\imagelistTest|\imagepageTest|\ipblocklistTest|\listusersTest|\mimeSearchTest|\newImagesTest|\pageDeletion|\pageHistoryTest|\pageProtectionForm|\prefixindexTest|\profileInfo|\recentchangesTest|\redirectTest|\searchTest|\specialAllmessagesTest|\specialAllpagesTest|\specialBlockip|\specialBooksourcesTest|\specialCategoryTree|\specialChemicalsourcesTest|\specialCitePageTest|\specialExportTest|\specialFilepathPageTest|\specialImportPageTest|\specialLinksearch|\specialLockdbPageTest|\specialLogTest|\specialMovePage|\specialNewpagesPageTest|\specialRenameuserPageTest|\specialRevisionDeletePageTest|\specialUndeletePageTest|\specialUnlockdbPageTest|\specialUserrights|\successfulUserLoginTest|\thumbTest|\userLoginTest|\viewPageTest|\watchlistTest
- */
-function selectPageTest( $count ) {
-
-       // if the user only wants a specific test, then only ever give them that.
-       if ( defined( "SPECIFIC_TEST" ) ) {
-               $testType = SPECIFIC_TEST;
-               return new $testType ();
-       }
-
-       // Some of the time we test Special pages, the remaining
-       // time we test using the standard edit page.
-       switch ( $count % 100 ) {
-               case 0 : return new successfulUserLoginTest();
-               case 1 : return new listusersTest();
-               case 2 : return new searchTest();
-               case 3 : return new recentchangesTest();
-               case 4 : return new prefixindexTest();
-               case 5 : return new mimeSearchTest();
-               case 6 : return new specialLogTest();
-               case 7 : return new userLoginTest();
-               case 8 : return new ipblocklistTest();
-               case 9 : return new newImagesTest();
-               case 10: return new imagelistTest();
-               case 11: return new specialExportTest();
-               case 12: return new specialBooksourcesTest();
-               case 13: return new specialAllpagesTest();
-               case 14: return new pageHistoryTest();
-               case 15: return new contributionsTest();
-               case 16: return new viewPageTest();
-               case 17: return new specialAllmessagesTest();
-               case 18: return new specialNewpagesPageTest();
-               case 19: return new searchTest();
-               case 20: return new redirectTest();
-               case 21: return new confirmEmail();
-               case 22: return new watchlistTest();
-               case 24: return new specialUndeletePageTest();
-               case 25: return new specialMovePage();
-               case 26: return new specialUnlockdbPageTest();
-               case 27: return new specialLockdbPageTest();
-               case 28: return new specialUserrights();
-               case 29: return new pageProtectionForm();
-               case 30: return new specialBlockip();
-               case 31: return new imagepageTest();
-               case 32: return new pageDeletion();
-               case 33: return new specialRevisionDeletePageTest();
-               case 34: return new specialImportPageTest();
-               case 35: return new thumbTest();
-               case 37: return new profileInfo();
-               case 38: return new specialCitePageTest();
-               case 39: return new specialFilepathPageTest();
-               case 40: return new specialRenameuserPageTest();
-               case 41: return new specialLinksearch();
-               case 42: return new specialCategoryTree();
-               case 43: return new api();
-               case 44: return new specialChemicalsourcesTest();
-               default: return new editPageTest();
-       }
-}
-
-
-// /////////////////////  SAVING OUTPUT  /////////////////////////
-
-/**
- ** Utility function for saving a file. Currently has no error checking.
- */
-function saveFile( $data, $name ) {
-       file_put_contents( $name, $data );
-}
-
-/**
- ** Returns a test as an experimental GET-to-POST URL.
- **        This doesn't seem to always work though, and sometimes the output is too long
- **        to be a valid GET URL, so we also save in other formats.
- * @param $test pageTest
- * @return string
- */
-function getAsURL( pageTest $test ) {
-       $used_question_mark = ( strpos( $test->getPagePath(), "?" ) !== false );
-       $retval = "http://get-to-post.nickj.org/?" . WIKI_BASE_URL . $test->getPagePath();
-       foreach ( $test->getParams() as $param => $value ) {
-               if ( !$used_question_mark ) {
-                       $retval .= "?";
-                       $used_question_mark = true;
-               }
-               else {
-                       $retval .= "&";
-               }
-               $retval .= $param . "=" . urlencode( $value );
-       }
-       return $retval;
-}
-
-
-/**
- ** Saves a plain-text human-readable version of a test.
- */
-function saveTestAsText( pageTest $test, $filename ) {
-       $str = "Test: " . $test->getPagePath();
-       foreach ( $test->getParams() as $param => $value ) {
-               $str .= "\n$param: $value";
-       }
-       $str .= "\nGet-to-post URL: " . getAsURL( $test ) . "\n";
-       saveFile( $str, $filename );
-}
-
-
-/**
- ** Saves a test as a standalone basic PHP script that shows this one problem.
- **        Resulting script requires PHP-Curl be installed in order to work.
- */
-function saveTestAsPHP( pageTest $test, $filename ) {
-       $str = "<?php\n"
-               . "\$params = " . var_export( escapeForCurl( $test->getParams() ), true ) . ";\n"
-               . "\$ch = curl_init();\n"
-               . "curl_setopt(\$ch, CURLOPT_POST, 1);\n"
-               . "curl_setopt(\$ch, CURLOPT_POSTFIELDS, \$params );\n"
-               . "curl_setopt(\$ch, CURLOPT_URL, " . var_export( WIKI_BASE_URL . $test->getPagePath(), true ) . ");\n"
-               . "curl_setopt(\$ch, CURLOPT_RETURNTRANSFER,1);\n"
-               .  ( $test->getCookie() ? "curl_setopt(\$ch, CURLOPT_COOKIE, " . var_export( $test->getCookie(), true ) . ");\n" : "" )
-               . "\$result=curl_exec(\$ch);\n"
-               . "curl_close (\$ch);\n"
-               . "print \$result;\n"
-               . "\n";
-       saveFile( $str, $filename );
-}
-
-/**
- * Escapes a value so that it can be used on the command line by Curl.
- *        Specifically, "<" and "@" need to be escaped if they are the first character,
- *        otherwise  curl interprets these as meaning that we want to insert a file.
- * @param $input_params array
- * @return array
- */
-function escapeForCurl( array $input_params ) {
-       $output_params = array();
-       foreach ( $input_params as $param => $value ) {
-               if ( strlen( $value ) > 0 && ( $value[0] == "@" || $value[0] == "<" ) ) {
-                       $value = "\\" . $value;
-               }
-               $output_params[$param] = $value;
-       }
-       return $output_params;
-}
-
-
-/**
- ** Saves a test as a standalone CURL shell script that shows this one problem.
- **        Resulting script requires standalone Curl be installed in order to work.
- */
-function saveTestAsCurl( pageTest $test, $filename ) {
-       $str = "#!/bin/bash\n"
-               . "curl --silent --include --globoff \\\n"
-               . ( $test->getCookie() ? " --cookie " . escapeshellarg( $test->getCookie() ) . " \\\n" : "" );
-       foreach ( escapeForCurl( $test->getParams() ) as $param => $value ) {
-               $str .= " -F " . escapeshellarg( $param ) . "=" . escapeshellarg( $value ) . " \\\n";
-       }
-       $str .= " " . escapeshellarg( WIKI_BASE_URL . $test->getPagePath() ); // beginning space matters.
-       $str .= "\n";
-       saveFile( $str, $filename );
-       chmod( $filename, 0755 ); // make executable
-}
-
-
-/**
- ** Saves the internal data structure to file.
- */
-function saveTestData ( pageTest $test, $filename ) {
-       saveFile( serialize( $test ),  $filename );
-}
-
-
-/**
- ** saves a test in the various formats.
- */
-function saveTest( pageTest $test, $testname ) {
-       $base_name = DIRECTORY . "/" . $testname;
-       saveTestAsText( $test, $base_name . INFO_FILE );
-       saveTestAsPHP ( $test, $base_name . PHP_TEST );
-       saveTestAsCurl( $test, $base_name . CURL_TEST );
-       saveTestData  ( $test, $base_name . DATA_FILE );
-}
-
-// ////////////////// MEDIAWIKI OUTPUT /////////////////////////
-
-/**
- * Asks MediaWiki for the HTML output of a test.
- * @param $test pageTest
- * @return string
- */
-function wikiTestOutput( pageTest $test ) {
-
-       $ch = curl_init();
-
-       // specify the cookie, if required.
-       if ( $test->getCookie() ) {
-               curl_setopt( $ch, CURLOPT_COOKIE, $test->getCookie() );
-       }
-       curl_setopt( $ch, CURLOPT_POST, 1 );                          // save form using a POST
-
-       $params = escapeForCurl( $test->getParams() );
-       curl_setopt( $ch, CURLOPT_POSTFIELDS, $params );             // load the POST variables
-
-       curl_setopt( $ch, CURLOPT_URL, WIKI_BASE_URL . $test->getPagePath() );  // set url to post to
-       curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );                 // return into a variable
-
-       $result = curl_exec ( $ch );
-
-       // if we encountered an error, then say so, and return an empty string.
-       if ( curl_error( $ch ) ) {
-               print "\nCurl error #: " . curl_errno( $ch ) . " - " . curl_error ( $ch );
-               $result = "";
-       }
-
-       curl_close ( $ch );
-
-       return $result;
-}
-
-
-// ////////////////// HTML VALIDATION /////////////////////////
-
-/**
- * Asks the validator whether this is valid HTML, or not.
- * @param $text string
- * @return array
- */
-function validateHTML( $text ) {
-
-       $params = array ( "fragment"   => $text );
-
-       $ch = curl_init();
-
-       curl_setopt( $ch, CURLOPT_POST, 1 );                    // save form using a POST
-       curl_setopt( $ch, CURLOPT_POSTFIELDS, $params );        // load the POST variables
-       curl_setopt( $ch, CURLOPT_URL, VALIDATOR_URL );         // set url to post to
-       curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );           // return into a variable
-
-       $result = curl_exec ( $ch );
-
-       // if we encountered an error, then log it, and exit.
-       if ( curl_error( $ch ) ) {
-               trigger_error( "Curl error #: " . curl_errno( $ch ) . " - " . curl_error ( $ch ) );
-               print "Curl error #: " . curl_errno( $ch ) . " - " . curl_error ( $ch ) . " - exiting.\n";
-               exit( 1 );
-       }
-
-       curl_close ( $ch );
-
-       $valid = ( strpos( $result, "Failed validation" ) === false );
-
-       return array( $valid, $result );
-}
-
-/**
- * Get tidy to check for no HTML errors in the output file (e.g. unescaped strings).
- * @param $name
- * @return bool
- */
-function tidyCheckFile( $name ) {
-       $file = DIRECTORY . "/" . $name;
-       $command = PATH_TO_TIDY . " -output /tmp/out.html -quiet $file 2>&1";
-       $x = `$command`;
-
-       // Look for the most interesting Tidy errors and warnings.
-       if (   strpos( $x, "end of file while parsing attributes" ) !== false
-                       || strpos( $x, "attribute with missing trailing quote mark" ) !== false
-                       || strpos( $x, "missing '>' for end of tag" ) !== false
-                       || strpos( $x, "Error:" ) !== false ) {
-               print "\nTidy found something - view details with: $command";
-               return false;
-       } else {
-               return true;
-       }
-}
-
-/**
- ** Returns whether or not an database error log file has changed in size since
- **        the last time this was run. This is used to tell if a test caused a DB error.
- * @return bool
- */
-function dbErrorLogged() {
-       static $filesize;
-
-       // first time running this function
-       if ( !isset( $filesize ) ) {
-               // create log if it does not exist
-               if ( DB_ERROR_LOG_FILE && !file_exists( DB_ERROR_LOG_FILE ) ) {
-                       saveFile( '', DB_ERROR_LOG_FILE );
-               }
-               $filesize = filesize( DB_ERROR_LOG_FILE );
-               return false;
-       }
-
-       $newsize = filesize( DB_ERROR_LOG_FILE );
-       // if the log has grown, then assume the current test caused it.
-       if ( $newsize != $filesize ) {
-               $filesize = $newsize;
-               return true;
-       }
-
-       return false;
-}
-
-// //////////////// TOP-LEVEL PROBLEM-FINDING FUNCTION ////////////////////////
-
-/**
- * takes a page test, and runs it and tests it for problems in the output.
- *        Returns: False on finding a problem, or True on no problems being found.
- * @param $test pageTest
- * @param $testname
- * @param $can_overwrite bool
- * @return bool
- */
-function runWikiTest( pageTest $test, &$testname, $can_overwrite = false ) {
-
-       // by default don't overwrite a previous test of the same name.
-       while ( ! $can_overwrite && file_exists( DIRECTORY . "/" . $testname . DATA_FILE ) ) {
-               $testname .= "-" . mt_rand( 0, 9 );
-       }
-
-       $filename = DIRECTORY . "/" . $testname . DATA_FILE;
-
-       // Store the time before and after, to find slow pages.
-       $before = microtime( true );
-
-       // Get MediaWiki to give us the output of this test.
-       $wiki_preview = wikiTestOutput( $test );
-
-       $after = microtime( true );
-
-       // if we received no response, then that's interesting.
-       if ( $wiki_preview == "" ) {
-               print "\nNo response received for: $filename";
-               return false;
-       }
-
-       // save output HTML to file.
-       $html_file = DIRECTORY . "/" . $testname . HTML_FILE;
-       saveFile( $wiki_preview,  $html_file );
-
-       // if there were PHP errors in the output, then that's interesting too.
-       if (       strpos( $wiki_preview, "<b>Warning</b>: "        ) !== false
-                       || strpos( $wiki_preview, "<b>Fatal error</b>: "    ) !== false
-                       || strpos( $wiki_preview, "<b>Notice</b>: "         ) !== false
-                       || strpos( $wiki_preview, "<b>Error</b>: "          ) !== false
-                       || strpos( $wiki_preview, "<b>Strict Standards:</b>" ) !== false
-                       ) {
-               $error = substr( $wiki_preview, strpos( $wiki_preview, "</b>:" ) + 7, 50 );
-               // Avoid probable PHP bug with bad session ids; http://bugs.php.net/bug.php?id=38224
-               if ( $error != "Unknown: The session id contains illegal character" ) {
-                       print "\nPHP error/warning/notice in HTML output: $html_file ; $error";
-                       return false;
-               }
-       }
-
-       // if there was a MediaWiki Backtrace message in the output, then that's also interesting.
-       if ( strpos( $wiki_preview, "Backtrace:" ) !== false ) {
-               print "\nInternal MediaWiki error in HTML output: $html_file";
-               return false;
-       }
-
-       // if there was a Parser error comment in the output, then that's potentially interesting.
-       if ( strpos( $wiki_preview, "!-- ERR" ) !== false ) {
-               print "\nParser Error comment in HTML output: $html_file";
-               return false;
-       }
-
-       // if a database error was logged, then that's definitely interesting.
-       if ( dbErrorLogged() ) {
-               print "\nDatabase Error logged for: $filename";
-               return false;
-       }
-
-       // validate result
-       $valid = true;
-       if ( VALIDATE_ON_WEB ) {
-               list ( $valid, $validator_output ) = validateHTML( $wiki_preview );
-               if ( !$valid ) print "\nW3C web validation failed - view details with: html2text " . DIRECTORY . "/" . $testname . ".validator_output.html";
-       }
-
-       // Get tidy to check the page, unless we already know it produces non-(X)HTML output.
-       if ( $test->tidyValidate() ) {
-               $valid = tidyCheckFile( $testname . HTML_FILE ) && $valid;
-       }
-
-       // if it took more than 2 seconds to render, then it may be interesting too. (Possible DoS attack?)
-       if ( ( $after - $before ) >= 2 ) {
-               print "\nParticularly slow to render (" . round( $after - $before, 2 ) . " seconds): $filename";
-               return false;
-       }
-
-       if ( $valid ) {
-               // Remove temp HTML file if test was valid:
-               unlink( $html_file );
-       } elseif ( VALIDATE_ON_WEB ) {
-               saveFile( $validator_output,   DIRECTORY . "/" . $testname . ".validator_output.html" );
-       }
-
-       return $valid;
-}
-
-
-// ///////////////// RERUNNING OLD TESTS ///////////////////
-
-/**
- ** We keep our failed tests so that they can be rerun.
- **        This function does that retesting.
- */
-function rerunPreviousTests() {
-       print "Retesting previously found problems.\n";
-
-       $dir_contents = scandir ( DIRECTORY );
-
-       // sort file into the order a normal person would use.
-       natsort ( $dir_contents );
-
-       foreach ( $dir_contents as $file ) {
-
-               // if file is not a test, then skip it.
-               // Note we need to escape any periods or will be treated as "any character".
-               $matches = array();
-               if ( !preg_match( "/(.*)" . str_replace( ".", "\.", DATA_FILE ) . "$/", $file, $matches ) ) continue;
-
-               // reload the test.
-               $full_path = DIRECTORY . "/" . $file;
-               $test = unserialize( file_get_contents( $full_path ) );
-
-               // if this is not a valid test, then skip it.
-               if ( ! $test instanceof pageTest ) {
-                       print "\nSkipping invalid test - $full_path";
-                       continue;
-               }
-
-               // The date format is in Apache log format, which makes it easier to locate
-               // which retest caused which error in the Apache logs (only happens usually if
-               // apache segfaults).
-               if ( !QUIET ) print "[" . date ( "D M d H:i:s Y" ) . "] Retesting $file (" . get_class( $test ) . ")";
-
-               // run test
-               $testname = $matches[1];
-               $valid = runWikiTest( $test, $testname, true );
-
-               if ( !$valid ) {
-                       saveTest( $test, $testname );
-                       if ( QUIET ) {
-                               print "\nTest: " . get_class( $test ) . " ; Testname: $testname\n------";
-                       } else {
-                               print "\n";
-                       }
-               }
-               else {
-                       if ( !QUIET ) print "\r";
-                       if ( DELETE_PASSED_RETESTS ) {
-                               $prefix = DIRECTORY . "/" . $testname;
-                               if ( is_file( $prefix . DATA_FILE ) ) unlink( $prefix . DATA_FILE );
-                               if ( is_file( $prefix . PHP_TEST ) ) unlink( $prefix . PHP_TEST );
-                               if ( is_file( $prefix . CURL_TEST ) ) unlink( $prefix . CURL_TEST );
-                               if ( is_file( $prefix . INFO_FILE ) ) unlink( $prefix . INFO_FILE );
-                       }
-               }
-       }
-
-       print "\nDone retesting.\n";
-}
-
-
-// ////////////////////  MAIN LOOP  ////////////////////////
-
-
-// first check whether CURL is installed, because sometimes it's not.
-if ( ! function_exists( 'curl_init' ) ) {
-       die( "Could not find 'curl_init' function. Is the curl extension compiled into PHP?\n" );
-}
-
-// Initialization of types. wikiFuzz doesn't have a constructor because we want to
-// access it staticly and not have any globals.
-wikiFuzz::$types = array_keys( wikiFuzz::$data );
-
-// Make directory if doesn't exist
-if ( !is_dir( DIRECTORY ) ) {
-       mkdir ( DIRECTORY, 0700 );
-}
-// otherwise, we first retest the things that we have found in previous runs
-elseif ( RERUN_OLD_TESTS ) {
-       rerunPreviousTests();
-}
-
-// main loop.
-$start_time = date( "U" );
-$num_errors = 0;
-if ( !QUIET ) {
-       print "Beginning main loop. Results are stored in the " . DIRECTORY . " directory.\n";
-       print "Press CTRL+C to stop testing.\n";
-}
-
-for ( $count = 0; true; $count++ ) {
-       if ( !QUIET ) {
-               // spinning progress indicator.
-               switch( $count % 4 ) {
-                       case '0': print "\r/";  break;
-                       case '1': print "\r-";  break;
-                       case '2': print "\r\\"; break;
-                       case '3': print "\r|";  break;
-               }
-               print " $count";
-       }
-
-       // generate a page test to run.
-       $test = selectPageTest( $count );
-
-       $mins = ( date( "U" ) - $start_time ) / 60;
-       if ( !QUIET && $mins > 0 ) {
-               print ".  $num_errors poss errors. "
-                       . floor( $mins ) . " mins. "
-                       . round ( $count / $mins, 0 ) . " tests/min. "
-                       . get_class( $test ); // includes the current test name.
-       }
-
-       // run this test against MediaWiki, and see if the output was valid.
-       $testname = $count;
-       $valid = runWikiTest( $test, $testname, false );
-
-       // save the failed test
-       if ( ! $valid ) {
-               if ( QUIET ) {
-                       print "\nTest: " . get_class( $test ) . " ; Testname: $testname\n------";
-               } else {
-                       print "\n";
-               }
-               saveTest( $test, $testname );
-               $num_errors += 1;
-       } elseif ( KEEP_PASSED_TESTS ) {
-               // print current time, with microseconds (matches "strace" format), and the test name.
-               print " " . date( "H:i:s." ) . substr( current( explode( " ", microtime() ) ), 2 ) . " " . $testname;
-               saveTest( $test, $testname );
-       }
-
-       // stop if we have reached max number of errors.
-       if ( defined( "MAX_ERRORS" ) && $num_errors >= MAX_ERRORS ) {
-               break;
-       }
-
-       // stop if we have reached max number of mins runtime.
-       if ( defined( "MAX_RUNTIME" ) && $mins >= MAX_RUNTIME ) {
-               break;
-       }
-}
index 0b21a1f..ab28c8b 100644 (file)
@@ -125,7 +125,6 @@ class GenerateSitemap extends Maintenance {
         */
        public $findex;
 
-
        /**
         * A resource pointing to a sitemap file
         *
index e081c20..dadc84a 100644 (file)
@@ -36,7 +36,7 @@ if ( count( $args ) < 1 || isset( $options['help'] ) ) {
        if ( is_file( $filename ) ) {
 
                $title = isset( $options['title'] ) ? $options['title'] : titleFromFilename( $filename );
-               $title = Title::newFromURL( $title );
+               $title = Title::newFromText( $title );
 
                if ( is_object( $title ) ) {
 
index 4e845f1..f9390f6 100644 (file)
@@ -50,7 +50,7 @@ class StatsOutput {
 }
 
 /** Outputs WikiText */
-class WikiStatsOutput extends statsOutput {
+class WikiStatsOutput extends StatsOutput {
        function heading() {
                global $wgDummyLanguageCodes;
                $version = SpecialVersion::getVersion( 'nodb' );
@@ -123,7 +123,7 @@ class WikiStatsOutput extends statsOutput {
 }
 
 /** Output text. To be used on a terminal for example. */
-class TextStatsOutput extends statsOutput {
+class TextStatsOutput extends StatsOutput {
        function element( $in, $heading = false ) {
                echo $in . "\t";
        }
@@ -134,7 +134,7 @@ class TextStatsOutput extends statsOutput {
 }
 
 /** csv output. Some people love excel */
-class CsvStatsOutput extends statsOutput {
+class CsvStatsOutput extends StatsOutput {
        function element( $in, $heading = false ) {
                echo $in . ";";
        }
index 7a10b66..b06c11f 100644 (file)
@@ -477,7 +477,7 @@ $wgOptionalMessages = array(
        'version-entrypoints-scriptpath',
        'mergehistory-revisionrow',
        'categoryviewer-pagedlinks',
-       'undelete-revisionrow',
+       'undelete-revision-row',
        'pageinfo-redirects-value',
        'created', // @deprecated. Remove in MediaWiki 1.23.
        'changed', // @deprecated. Remove in MediaWiki 1.23.
index 5aa188a..f0160cc 100644 (file)
@@ -312,8 +312,6 @@ $wgMessageStructure = array(
                'backlinksubtitle',
                'retrievedfrom',
                'youhavenewmessages',
-               'newmessageslink',
-               'newmessagesdifflink',
                'youhavenewmessagesfromusers',
                'youhavenewmessagesmanyusers',
                'newmessageslinkplural',
@@ -1027,7 +1025,6 @@ $wgMessageStructure = array(
                'preferences-summary',
                'mypreferences',
                'prefs-edits',
-               'prefsnologin',
                'prefsnologintext2',
                'changepassword',
                'changepassword-summary',
@@ -1331,6 +1328,9 @@ $wgMessageStructure = array(
                'recentchanges-label-minor',
                'recentchanges-label-bot',
                'recentchanges-label-unpatrolled',
+               'recentchanges-label-plusminus',
+               'recentchanges-legend-newpage',
+               'recentchanges-legend-plusminus',
                'rcnote',
                'rcnotefrom',
                'rclistfrom',
@@ -2207,7 +2207,7 @@ $wgMessageStructure = array(
                'undelete-error-long',
                'undelete-show-file-confirm',
                'undelete-show-file-submit',
-               'undelete-revisionrow',
+               'undelete-revision-row',
        ),
        'nsform' => array(
                'namespace',
@@ -3975,6 +3975,19 @@ $wgMessageStructure = array(
                'limitreport-expensivefunctioncount',
                'limitreport-expensivefunctioncount-value',
        ),
+       'expandtemplates' => array(
+               'expandtemplates',
+               'expand_templates_intro',
+               'expand_templates_title',
+               'expand_templates_input',
+               'expand_templates_output',
+               'expand_templates_xml_output',
+               'expand_templates_ok',
+               'expand_templates_remove_comments',
+               'expand_templates_remove_nowiki',
+               'expand_templates_generate_xml',
+               'expand_templates_preview',
+       ),
 );
 
 /** Comments for each block */
@@ -4222,4 +4235,5 @@ Variants for Chinese language",
        'cachedspecial' => 'SpecialCachedPage',
        'rotation' => 'Image rotation',
        'limitreport' => 'Limit report',
+       'expandtemplates' => 'Special:ExpandTemplates'
 );
index 01fbac7..d98654e 100644 (file)
@@ -149,7 +149,7 @@ class LockServerDaemon {
                $socketArray->addSocket( $this->sock ); // add listening socket
                do {
                        list( $read, $write ) = $socketArray->socketsForSelect();
-                       if ( socket_select( $read, $write, $except = NULL, NULL ) < 1 ) {
+                       if ( socket_select( $read, $write, $except = null, null ) < 1 ) {
                                continue; // wait
                        }
                        // Check if there is a client trying to connect...
index eda101e..243f97c 100644 (file)
@@ -30,7 +30,7 @@ require_once __DIR__ . '/Maintenance.php';
  *
  * @ingroup Maintenance
  */
-class mcTest extends Maintenance {
+class McTest extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Makes several 'set', 'incr' and 'get' requests on every"
@@ -111,5 +111,5 @@ class mcTest extends Maintenance {
        }
 }
 
-$maintClass = "mcTest";
+$maintClass = "McTest";
 require_once RUN_MAINTENANCE_IF_MAIN;
index f991c1b..5171b17 100644 (file)
@@ -99,7 +99,6 @@ class MoveBatch extends Maintenance {
                                continue;
                        }
 
-
                        $this->output( $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText() );
                        $dbw->begin( __METHOD__ );
                        $err = $source->moveTo( $dest, false, $reason, !$noredirects );
index 219b5d8..06ccccb 100644 (file)
@@ -28,7 +28,7 @@ require_once __DIR__ . '/Maintenance.php';
  *
  * @ingroup Maintenance
  */
-class nextJobDB extends Maintenance {
+class NextJobDB extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Pick a database that has pending jobs";
@@ -115,5 +115,5 @@ class nextJobDB extends Maintenance {
        }
 }
 
-$maintClass = "nextJobDb";
+$maintClass = "NextJobDb";
 require_once RUN_MAINTENANCE_IF_MAIN;
index 3ac7a28..7765784 100644 (file)
@@ -123,9 +123,9 @@ class CLIParser extends Maintenance {
         */
        protected function parse( $wikitext ) {
                return $this->parser->parse(
-                       $wikitext
-                       , $this->getTitle()
-                       new ParserOptions()
+                       $wikitext,
+                       $this->getTitle(),
+                       new ParserOptions()
                );
        }
 }
index 48d3897..01bd09a 100644 (file)
@@ -95,8 +95,8 @@ class PruneFileCache extends Maintenance {
                                        // Sanity check the file extension against known cache types
                                        if ( $mts < $this->minSurviveTimestamp
                                                && preg_match( '/\.(?:html|cache)(?:\.gz)?$/', $file )
-                                               && unlink( $path ) )
-                                       {
+                                               && unlink( $path )
+                                       {
                                                $daysOld = round( ( $tsNow - $mts ) / 86400, 2 );
                                                $this->output( "Deleted `$path` [days=$daysOld]\n" );
                                        }
index 7e15c09..ee3f709 100644 (file)
@@ -174,8 +174,6 @@ class ReassignEdits extends Maintenance {
                $user->load();
                return $user;
        }
-
-
 }
 
 $maintClass = "ReassignEdits";
index 53bf823..ed67ccd 100644 (file)
@@ -205,9 +205,16 @@ class ImageBuilder extends Maintenance {
                }
                if ( !$this->dryrun ) {
                        $file = wfLocalFile( $filename );
-                       if ( !$file->recordUpload( '', '(recovered file, missing upload log entry)', '', '', '',
-                               false, $timestamp ) )
-                       {
+                       if ( !$file->recordUpload(
+                                       '',
+                                       '(recovered file, missing upload log entry)',
+                                       '',
+                                       '',
+                                       '',
+                                       false,
+                                       $timestamp
+                               )
+                       ) {
                                $this->output( "Error uploading file $fullpath\n" );
                                return;
                        }
index 7fe5c4c..9f73e49 100644 (file)
@@ -207,6 +207,5 @@ class RefreshImageMetadata extends Maintenance {
        }
 }
 
-
 $maintClass = 'RefreshImageMetadata';
 require_once RUN_MAINTENANCE_IF_MAIN;
index 93ba24a..76340cd 100644 (file)
@@ -60,6 +60,5 @@ class BatchedQueryRunner extends Maintenance {
        }
 }
 
-
 $maintClass = "BatchedQueryRunner";
 require_once RUN_MAINTENANCE_IF_MAIN;
index cd9768d..9168d6f 100644 (file)
@@ -57,7 +57,6 @@ class ShowCacheStats extends Maintenance {
                $this->output( sprintf( "without session:   %-10d %6.2f%%\n", $noSession, $noSession / $total * 100 ) );
                $this->output( sprintf( "total:             %-10d %6.2f%%\n", $total, 100 ) );
 
-
                $this->output( "\nParser cache\n" );
                $hits = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_hit' ) ) );
                $expired = intval( $wgMemc->get( wfMemcKey( 'stats', 'pcache_miss_expired' ) ) );
index 03dc113..9174d12 100644 (file)
@@ -34,7 +34,6 @@ if ( !defined( 'MEDIAWIKI' ) ) {
        $cs->check( $fix, $xml );
 }
 
-
 // ----------------------------------------------------------------------------------
 
 /**
@@ -331,7 +330,6 @@ class CheckStorage {
                }
        }
 
-
        function error( $type, $msg, $ids ) {
                if ( is_array( $ids ) && count( $ids ) == 1 ) {
                        $ids = reset( $ids );
index 8cb5548..3b59f1d 100644 (file)
@@ -177,8 +177,8 @@ class CompressOld extends Maintenance {
         * @return bool
         */
        private function compressWithConcat( $startId, $maxChunkSize, $beginDate,
-               $endDate, $extdb = "", $maxPageId = false )
-       {
+               $endDate, $extdb = "", $maxPageId = false
+       {
                $loadStyle = self::LS_CHUNKED;
 
                $dbr = wfGetDB( DB_SLAVE );
index 101aa06..e832b4e 100644 (file)
@@ -58,8 +58,8 @@ class FixBug20757 extends Maintenance {
                $totalRevs = $dbr->selectField( 'text', 'MAX(old_id)', false, __METHOD__ );
 
                if ( $dbr->getType() == 'mysql'
-                       && version_compare( $dbr->getServerVersion(), '4.1.0', '>=' ) )
-               {
+                       && version_compare( $dbr->getServerVersion(), '4.1.0', '>=' )
+               {
                        // In MySQL 4.1+, the binary field old_text has a non-working LOWER() function
                        $lowerLeft = 'LOWER(CONVERT(LEFT(old_text,22) USING latin1))';
                } else {
index fdc28d9..d693986 100644 (file)
@@ -45,7 +45,6 @@ if ( isset( $options['limit'] ) ) {
 }
 $type = isset( $options['type'] ) ? $options['type'] : 'ConcatenatedGzipHistoryBlob';
 
-
 $dbr = wfGetDB( DB_SLAVE );
 $res = $dbr->select(
        array( 'page', 'revision', 'text' ),
index 7857dd9..c2df0dd 100644 (file)
@@ -24,7 +24,6 @@
 
 require __DIR__ . '/../commandLine.inc';
 
-
 if ( count( $args ) < 1 ) {
        echo "Usage: php trackBlobs.php <cluster> [... <cluster>]\n";
        echo "Adds blobs from a given ES cluster to the blob_tracking table\n";
index 6b08480..51bbd6f 100644 (file)
@@ -169,7 +169,7 @@ class UpdateMediaWiki extends Maintenance {
                $time2 = new MWTimestamp();
 
                $this->output( "\nDone.\n" );
-               $this->output( "\nThe job took " . $time2->diff( $time1 )->format( "%i:%S" ) . "\n" );
+               $this->output( "\nThe job took " . $time2->diff( $time1 )->format( "%i:%S" ) . ".\n" );
        }
 
        function afterFinalSetup() {
index 964b313..7ca04b4 100644 (file)
@@ -47,7 +47,7 @@ class UpdateCollation extends Maintenance {
                $this->mDescription = <<<TEXT
 This script will find all rows in the categorylinks table whose collation is
 out-of-date (cl_collation != '$wgCategoryCollation') and repopulate cl_sortkey
-using the page title and cl_sortkey_prefix.  If everything's collation is
+using the page title and cl_sortkey_prefix.  If all collations are
 up-to-date, it will do nothing.
 TEXT;
 
@@ -188,15 +188,14 @@ TEXT;
                                                __METHOD__
                                        );
                                }
+                               if ( $row ) {
+                                       $batchConds = array( $this->getBatchCondition( $row, $dbw ) );
+                               }
                        }
                        if ( !$dryRun ) {
                                $dbw->commit( __METHOD__ );
                        }
 
-                       if ( $row ) {
-                               $batchConds = array( $this->getBatchCondition( $row ) );
-                       }
-
                        $count += $res->numRows();
                        $this->output( "$count done.\n" );
 
@@ -219,8 +218,7 @@ TEXT;
         * Return an SQL expression selecting rows which sort above the given row,
         * assuming an ordering of cl_to, cl_type, cl_from
         */
-       function getBatchCondition( $row ) {
-               $dbw = $this->getDB( DB_MASTER );
+       function getBatchCondition( $row, $dbw ) {
                $fields = array( 'cl_to', 'cl_type', 'cl_from' );
                $first = true;
                $cond = false;
index 8bd80c9..44a1aab 100644 (file)
@@ -184,7 +184,7 @@ class UserDupes {
        function getDupes() {
                $user = $this->db->tableName( 'user' );
                $result = $this->db->query(
-                        "SELECT user_name,COUNT(*) AS n
+                       "SELECT user_name,COUNT(*) AS n
                                FROM $user
                        GROUP BY user_name
                          HAVING n > 1", __METHOD__ );
index 51da80d..f497f2a 100644 (file)
@@ -30,7 +30,7 @@ require_once __DIR__ . '/commandLine.inc';
 /**
  * @ingroup Maintenance
  */
-class userOptions {
+class UserOptions {
        public $mQuick;
        public $mQuiet;
        public $mDry;
@@ -43,13 +43,12 @@ class userOptions {
        /** Constructor. Will show usage and exit if script options are not correct */
        function __construct( $opts, $args ) {
                if ( !$this->checkOpts( $opts, $args ) ) {
-                       userOptions::showUsageAndExit();
+                       UserOptions::showUsageAndExit();
                } else {
                        $this->mReady = $this->initializeOpts( $opts, $args );
                }
        }
 
-
        /**
         * This is used to check options. Only needed on construction
         *
@@ -179,7 +178,6 @@ class userOptions {
                }
        }
 
-
        /** Change our users options */
        private function CHANGER() {
                $this->warn();
index e0de357..53db48c 100644 (file)
@@ -28,7 +28,7 @@
 require_once 'userOptions.inc';
 
 // Load up our tool system, exit with usage() if options are not fine
-$uo = new userOptions( $options, $args );
+$uo = new UserOptions( $options, $args );
 
 $uo->run();
 
index 31714a6..a022c6d 100644 (file)
@@ -158,6 +158,7 @@ return array(
        'jquery.autoEllipsis' => array(
                'scripts' => 'resources/jquery/jquery.autoEllipsis.js',
                'dependencies' => 'jquery.highlightText',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.badge' => array(
                'scripts' => 'resources/jquery/jquery.badge.js',
@@ -171,6 +172,7 @@ return array(
        'jquery.byteLimit' => array(
                'scripts' => 'resources/jquery/jquery.byteLimit.js',
                'dependencies' => 'jquery.byteLength',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.checkboxShiftClick' => array(
                'scripts' => 'resources/jquery/jquery.checkboxShiftClick.js',
@@ -225,6 +227,7 @@ return array(
        'jquery.highlightText' => array(
                'scripts' => 'resources/jquery/jquery.highlightText.js',
                'dependencies' => 'jquery.mwExtension',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.hoverIntent' => array(
                'scripts' => 'resources/jquery/jquery.hoverIntent.js',
@@ -605,6 +608,7 @@ return array(
        'mediawiki.api' => array(
                'scripts' => 'resources/mediawiki.api/mediawiki.api.js',
                'dependencies' => 'mediawiki.util',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.api.category' => array(
                'scripts' => 'resources/mediawiki.api/mediawiki.api.category.js',
@@ -710,6 +714,7 @@ return array(
                'dependencies' => array(
                        'mediawiki.page.startup',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.notify' => array(
                'scripts' => 'resources/mediawiki/mediawiki.notify.js',
@@ -736,9 +741,11 @@ return array(
                        'jquery.byteLength',
                        'mediawiki.util',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.Uri' => array(
                'scripts' => 'resources/mediawiki/mediawiki.Uri.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.user' => array(
                'scripts' => 'resources/mediawiki/mediawiki.user.js',
@@ -748,6 +755,7 @@ return array(
                        'user.options',
                        'user.tokens',
                ),
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.util' => array(
                'scripts' => 'resources/mediawiki/mediawiki.util.js',
@@ -800,6 +808,7 @@ return array(
        'mediawiki.action.history.diff' => array(
                'styles' => 'resources/mediawiki.action/mediawiki.action.history.diff.css',
                'group' => 'mediawiki.action.history',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.action.view.dblClickEdit' => array(
                'scripts' => 'resources/mediawiki.action/mediawiki.action.view.dblClickEdit.js',
index 993fa8c..38938ab 100644 (file)
@@ -3,6 +3,11 @@
        float: right;
 }
 
+/* collapse links in captions should be inline */
+caption .mw-collapsible-toggle {
+       float: none;
+}
+
 /* list-items go as wide as their parent element, don't float them inside list items */
 li .mw-collapsible-toggle {
        float: none;
index 0cd6417..60c0afc 100644 (file)
@@ -15,8 +15,6 @@
  * @license GPL2 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
  */
 ( function ( $, mw ) {
-       var lpx = 'jquery.makeCollapsible> ';
-
        /**
         * Handler for a click on a collapsible toggler.
         *
 
                if ( !options.plainMode && $collapsible.is( 'table' ) ) {
                        // Tables
-                       $containers = $collapsible.find( '> tbody > tr' );
+                       // If there is a caption, hide all rows; otherwise, only hide body rows
+                       if ( $collapsible.find( '> caption' ).length ) {
+                               $containers = $collapsible.find( '> * > tr' );
+                       } else {
+                               $containers = $collapsible.find( '> tbody > tr' );
+                       }
                        if ( $defaultToggle ) {
                                // Exclude table row containing togglelink
                                $containers = $containers.not( $defaultToggle.closest( 'tr' ) );
                }
 
                return this.each( function () {
-                       var $collapsible, collapseText, expandText, $toggle, actionHandler, buildDefaultToggleLink,
+                       var $collapsible, collapseText, expandText, $caption, $toggle, actionHandler, buildDefaultToggleLink,
                                premadeToggleHandler, $toggleLink, $firstItem, collapsibleId, $customTogglers, firstval;
 
                        // Ensure class "mw-collapsible" is present in case .makeCollapsible()
                        } else {
                                collapsibleId = $collapsible.attr( 'id' ) || '';
                                if ( collapsibleId.indexOf( 'mw-customcollapsible-' ) === 0 ) {
-                                       mw.log( lpx + 'Found custom collapsible: #' + collapsibleId );
                                        $customTogglers = $( '.' + collapsibleId.replace( 'mw-customcollapsible', 'mw-customtoggle' ) );
-
-                                       // Double check that there is actually a customtoggle link
-                                       if ( !$customTogglers.length ) {
-                                               mw.log( lpx + '#' + collapsibleId + ': Missing toggler!' );
-                                       }
                                }
                        }
 
-                       // Bind the togglers
+                       // Add event handlers to custom togglers or create our own ones
                        if ( $customTogglers && $customTogglers.length ) {
                                actionHandler = function ( e, opts ) {
                                        var defaultOpts = {};
                                // contents and add the toggle link. Different elements are
                                // treated differently.
                                if ( $collapsible.is( 'table' ) ) {
-                                       // The toggle-link will be in one the the cells (td or th) of the first row
-                                       $firstItem = $collapsible.find( 'tr:first th, tr:first td' );
-                                       $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
 
-                                       // If theres no toggle link, add it to the last cell
-                                       if ( !$toggle.length ) {
-                                               $toggleLink = buildDefaultToggleLink().prependTo( $firstItem.eq( -1 ) );
+                                       // If the table has a caption, collapse to the caption
+                                       // as opposed to the first row
+                                       $caption = $collapsible.find( '> caption' );
+                                       if ( $caption.length ) {
+                                               $toggle = $caption.find( '> .mw-collapsible-toggle' );
+
+                                               // If there is no toggle link, add it to the end of the caption
+                                               if ( !$toggle.length ) {
+                                                       $toggleLink = buildDefaultToggleLink().appendTo( $caption );
+                                               } else {
+                                                       actionHandler = premadeToggleHandler;
+                                                       $toggleLink = $toggle.on( 'click.mw-collapsible keypress.mw-collapsible', actionHandler );
+                                               }
                                        } else {
-                                               actionHandler = premadeToggleHandler;
-                                               $toggleLink = $toggle.on( 'click.mw-collapsible keypress.mw-collapsible', actionHandler );
+                                               // The toggle-link will be in one the the cells (td or th) of the first row
+                                               $firstItem = $collapsible.find( 'tr:first th, tr:first td' );
+                                               $toggle = $firstItem.find( '> .mw-collapsible-toggle' );
+
+                                               // If theres no toggle link, add it to the last cell
+                                               if ( !$toggle.length ) {
+                                                       $toggleLink = buildDefaultToggleLink().prependTo( $firstItem.eq( -1 ) );
+                                               } else {
+                                                       actionHandler = premadeToggleHandler;
+                                                       $toggleLink = $toggle.on( 'click.mw-collapsible keypress.mw-collapsible', actionHandler );
+                                               }
                                        }
 
                                } else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
index abada19..5020b37 100644 (file)
  *
  * This will automatically use the HTML5 placeholder attribute if supported, or emulate this behavior if not.
  *
+ * This is a fork from Mathias Bynens' jquery.placeholder as of this commit
+ * https://github.com/mathiasbynens/jquery-placeholder/blob/47f05d400e2dd16b59d144141a2cf54a9a77c502/jquery.placeholder.js
+ *
+ * @author Mathias Bynens <http://mathiasbynens.be/>
  * @author Trevor Parscal <tparscal@wikimedia.org>, 2012
  * @author Krinkle <krinklemail@gmail.com>, 2012
- * @version 0.2.0
+ * @author Alex Ivanov <alexivanov97@gmail.com>, 2013
+ * @version 2.1.0
  * @license MIT
  */
-( function ( $ ) {
+(function($) {
 
-       $.fn.placeholder = function ( text ) {
-               var hasArg = arguments.length;
+       var isInputSupported = 'placeholder' in document.createElement('input'),
+               isTextareaSupported = 'placeholder' in document.createElement('textarea'),
+               prototype = $.fn,
+               valHooks = $.valHooks,
+               propHooks = $.propHooks,
+               hooks,
+               placeholder;
 
-               return this.each( function () {
-                       var placeholder, $input;
+       if (isInputSupported && isTextareaSupported) {
 
-                       if ( hasArg ) {
-                               this.setAttribute( 'placeholder', text );
-                       }
+               placeholder = prototype.placeholder = function(text) {
+                       var hasArgs = arguments.length;
 
-                       // If the HTML5 placeholder attribute is supported, use it
-                       if ( this.placeholder && 'placeholder' in document.createElement( this.tagName ) ) {
-                               return;
+                       if( hasArgs ) {
+                               changePlaceholder.call(this, text);
                        }
 
-                       placeholder = hasArg ? text : this.getAttribute( 'placeholder' );
-                       $input = $(this);
+                       return this;
+               };
+
+               placeholder.input = placeholder.textarea = true;
+
+       } else {
 
-                       // Show initially, if empty
-                       if ( this.value === '' || this.value === placeholder ) {
-                               $input.addClass( 'placeholder' ).val( placeholder );
+               placeholder = prototype.placeholder = function(text) {
+                       var $this = this,
+                               hasArgs = arguments.length;
+
+                       if(hasArgs) {
+                               changePlaceholder.call(this, text);
                        }
 
-                       $input
-                               // Show on blur if empty
-                               .blur( function () {
-                                       if ( this.value === '' ) {
-                                               this.value = placeholder;
-                                               $input.addClass( 'placeholder' );
-                                       }
-                               } )
-
-                               // Hide on focus
-                               // Also listen for other events in case $input was
-                               // already focused when the events were bound
-                               .on( 'focus drop keydown paste', function ( e ) {
-                                       if ( $input.hasClass( 'placeholder' ) ) {
-                                               if ( e.type === 'drop' && e.originalEvent.dataTransfer ) {
-                                                       // Support for drag&drop. Instead of inserting the dropped
-                                                       // text somewhere in the middle of the placeholder string,
-                                                       // we want to set the contents of the search box to the
-                                                       // dropped text.
-
-                                                       // IE wants getData( 'text' ) but Firefox wants getData( 'text/plain' )
-                                                       // Firefox fails gracefully with an empty string, IE barfs with an error
-                                                       try {
-                                                               // Try the Firefox way
-                                                               this.value = e.originalEvent.dataTransfer.getData( 'text/plain' );
-                                                       } catch ( exception ) {
-                                                               // Got an exception, so use the IE way
-                                                               this.value = e.originalEvent.dataTransfer.getData( 'text' );
-                                                       }
-
-                                                       // On Firefox, drop fires after the dropped text has been inserted,
-                                                       // but on IE it fires before. If we don't prevent the default action,
-                                                       // IE will insert the dropped text twice.
-                                                       e.preventDefault();
-                                               } else {
-                                                       this.value = '';
-                                               }
-                                               $input.removeClass( 'placeholder' );
+
+                       $this
+                               .filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]')
+                               .filter(function() {
+                                       return !$(this).data('placeholder-enabled');
+                               })
+                               .bind({
+                                       'focus.placeholder drop.placeholder': clearPlaceholder,
+                                       'blur.placeholder': setPlaceholder
+                               })
+                               .data('placeholder-enabled', true)
+                               .trigger('blur.placeholder');
+                       return $this;
+               };
+
+               placeholder.input = isInputSupported;
+               placeholder.textarea = isTextareaSupported;
+
+               hooks = {
+                       'get': function(element) {
+                               var $element = $(element),
+                                       $passwordInput = $element.data('placeholder-password');
+                               if ($passwordInput) {
+                                       return $passwordInput[0].value;
+                               }
+
+                               return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value;
+                       },
+                       'set': function(element, value) {
+                               var $element = $(element),
+                                       $passwordInput = $element.data('placeholder-password');
+                               if ($passwordInput) {
+                                       $passwordInput[0].value = value;
+                                       return value;
+                               }
+
+                               if (!$element.data('placeholder-enabled')) {
+                                       element.value = value;
+                                       return value;
+                               }
+                               if (!value) {
+                                       element.value = value;
+                                       // Issue #56: Setting the placeholder causes problems if the element continues to have focus.
+                                       if (element !== safeActiveElement()) {
+                                               // We can't use `triggerHandler` here because of dummy text/password inputs :(
+                                               setPlaceholder.call(element);
                                        }
-                               } );
-
-                       // Blank on submit -- prevents submitting with unintended value
-                       if ( this.form ) {
-                               $( this.form ).submit( function () {
-                                       // $input.trigger( 'focus' ); would be problematic
-                                       // because it actually focuses $input, leading
-                                       // to nasty behavior in mobile browsers
-                                       if ( $input.hasClass( 'placeholder' ) ) {
-                                               $input
-                                                       .val( '' )
-                                                       .removeClass( 'placeholder' );
+                               } else if ($element.hasClass('placeholder')) {
+                                       if(!clearPlaceholder.call(element, true, value)) {
+                                               element.value = value;
                                        }
-                               });
+                               } else {
+                                       element.value = value;
+                               }
+                               // `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363
+                               return $element;
                        }
+               };
+
+               if (!isInputSupported) {
+                       valHooks.input = hooks;
+                       propHooks.value = hooks;
+               }
+               if (!isTextareaSupported) {
+                       valHooks.textarea = hooks;
+                       propHooks.value = hooks;
+               }
+
+               $(function() {
+                       // Look for forms
+                       $(document).delegate('form', 'submit.placeholder', function() {
+                               // Clear the placeholder values so they don't get submitted
+                               var $inputs = $('.placeholder', this).each(clearPlaceholder);
+                               setTimeout(function() {
+                                       $inputs.each(setPlaceholder);
+                               }, 10);
+                       });
+               });
 
+               // Clear placeholder values upon page reload
+               $(window).bind('beforeunload.placeholder', function() {
+                       $('.placeholder').each(function() {
+                               this.value = '';
+                       });
                });
-       };
 
-}( jQuery ) );
+       }
+
+       function args(elem) {
+               // Return an object of element attributes
+               var newAttrs = {},
+                       rinlinejQuery = /^jQuery\d+$/;
+               $.each(elem.attributes, function(i, attr) {
+                       if (attr.specified && !rinlinejQuery.test(attr.name)) {
+                               newAttrs[attr.name] = attr.value;
+                       }
+               });
+               return newAttrs;
+       }
+
+       function clearPlaceholder(event, value) {
+               var input = this,
+                       $input = $(input);
+               if (input.value === $input.attr('placeholder') && $input.hasClass('placeholder')) {
+                       if ($input.data('placeholder-password')) {
+                               $input = $input.hide().next().show().attr('id', $input.removeAttr('id').data('placeholder-id'));
+                               // If `clearPlaceholder` was called from `$.valHooks.input.set`
+                               if (event === true) {
+                                       $input[0].value = value;
+                                       return value;
+                               }
+                               $input.focus();
+                       } else {
+                               input.value = '';
+                               $input.removeClass('placeholder');
+                               if(input === safeActiveElement()) {
+                                       input.select();
+                               }
+                       }
+               }
+       }
+
+       function setPlaceholder() {
+               var $replacement,
+                       input = this,
+                       $input = $(input),
+                       id = this.id;
+               if (!input.value) {
+                       if (input.type === 'password') {
+                               if (!$input.data('placeholder-textinput')) {
+                                       try {
+                                               $replacement = $input.clone().attr({ 'type': 'text' });
+                                       } catch(e) {
+                                               $replacement = $('<input>').attr($.extend(args(this), { 'type': 'text' }));
+                                       }
+                                       $replacement
+                                               .removeAttr('name')
+                                               .data({
+                                                       'placeholder-password': $input,
+                                                       'placeholder-id': id
+                                               })
+                                               .bind('focus.placeholder drop.placeholder', clearPlaceholder);
+                                       $input
+                                               .data({
+                                                       'placeholder-textinput': $replacement,
+                                                       'placeholder-id': id
+                                               })
+                                               .before($replacement);
+                               }
+                               $input = $input.removeAttr('id').hide().prev().attr('id', id).show();
+                               // Note: `$input[0] != input` now!
+                       }
+                       $input.addClass('placeholder');
+                       $input[0].value = $input.attr('placeholder');
+               } else {
+                       $input.removeClass('placeholder');
+               }
+       }
+
+       function safeActiveElement() {
+               // Avoid IE9 `document.activeElement` of death
+               // https://github.com/mathiasbynens/jquery-placeholder/pull/99
+               try {
+                       return document.activeElement;
+               } catch (err) {}
+       }
+
+       function changePlaceholder(text) {
+               var hasArgs = arguments.length,
+                       $input = this;
+               if(hasArgs) {
+                       if($input.attr('placeholder') !== text) {
+                               $input.prop('placeholder', text);
+                               if($input.hasClass('placeholder')) {
+                                       $input[0].value = text;
+                               }
+                       }
+               }
+       }
+
+}(jQuery));
index 27dabc6..073fb3d 100644 (file)
                /**
                 * Create a spinner element
                 *
-                * The argument is an object with options used to construct the spinner. These can be:
+                * The argument is an object with options used to construct the spinner (see below).
                 *
-                * It is a good practice to keep a reference to the created spinner to be able to remove it later.
-                * Alternatively one can use the id option and #removeSpinner (but make sure to choose an id
-                * that's unlikely to cause conflicts, e.g. with extensions, gadgets or user scripts).
+                * It is a good practice to keep a reference to the created spinner to be able to remove it
+                * later. Alternatively, one can use the 'id' option and #removeSpinner (but make sure to choose
+                * an id that's unlikely to cause conflicts, e.g. with extensions, gadgets or user scripts).
                 *
                 * CSS classes used:
+                *
                 * - .mw-spinner for every spinner
                 * - .mw-spinner-small / .mw-spinner-large for size
                 * - .mw-spinner-block / .mw-spinner-inline for display types
                 *
-                *   // Create a large spinner reserving all available horizontal space.
-                *   var $spinner = $.createSpinner({ size: 'large', type: 'block' });
-                *   // Insert above page content.
-                *   $( '#mw-content-text' ).prepend( $spinner );
+                * Example:
+                *
+                *     // Create a large spinner reserving all available horizontal space.
+                *     var $spinner = $.createSpinner({ size: 'large', type: 'block' });
+                *     // Insert above page content.
+                *     $( '#mw-content-text' ).prepend( $spinner );
                 *
-                *   // Place a small inline spinner next to the "Save" button
-                *   var $spinner = $.createSpinner({ size: 'small', type: 'inline' });
-                *   // Alternatively, just `$.createSpinner();` as these are the default options.
-                *   $( '#wpSave' ).after( $spinner );
+                *     // Place a small inline spinner next to the "Save" button
+                *     var $spinner = $.createSpinner({ size: 'small', type: 'inline' });
+                *     // Alternatively, just `$.createSpinner();` as these are the default options.
+                *     $( '#wpSave' ).after( $spinner );
                 *
-                *   // The following two are equivalent:
-                *   $.createSpinner( 'magic' );
-                *   $.createSpinner({ id: 'magic' });
+                *     // The following two are equivalent:
+                *     $.createSpinner( 'magic' );
+                *     $.createSpinner({ id: 'magic' });
                 *
                 * @static
                 * @inheritable
-                * @param {Object|string} [opts] ID string or options:
-                *  - id: If given, spinner will be given an id of "mw-spinner-{id}"
-                *  - size: 'small' (default) or 'large' for a 20-pixel or 32-pixel spinner
-                *  - type: 'inline' (default) or 'block'. Inline creates an inline-block with width and
-                *    height equal to spinner size. Block is a block-level element with width 100%, height
-                *    equal to spinner size.
+                * @param {Object|string} [opts] Options. If a string is given, it will be treated as the value
+                *   of the `id` option. If an object is given, the possible option keys are:
+                * @param {string} [opts.id] If given, spinner will be given an id of "mw-spinner-{id}".
+                * @param {string} [opts.size='small'] 'small' or 'large' for a 20-pixel or 32-pixel spinner.
+                * @param {string} [opts.type='inline'] 'inline' or 'block'. Inline creates an inline-block with
+                *   width and height equal to spinner size. Block is a block-level element with width 100%,
+                *   height equal to spinner size.
                 * @return {jQuery}
                 */
                createSpinner: function ( opts ) {
@@ -90,7 +94,7 @@
        /**
         * Inject a spinner after each element in the collection
         *
-        * Inserts spinner as siblings, not children, of the target elements.
+        * Inserts spinner as siblings (not children) of the target elements.
         * Collection contents remain unchanged.
         *
         * @param {Object|string} [opts] See #createSpinner
index fb44a76..3c93de0 100644 (file)
@@ -4,28 +4,57 @@
  * PDF and DjVu files
  */
 ( function (mw, $) {
+
+       // Initialize ajax request variable
+       var xhr;
+
        // Use jQuery's load function to specifically select and replace table.multipageimage's child
        // tr with the new page's table.multipageimage's tr element.
        // table.multipageimage always has only one row.
-       function loadPage( page ) {
+       function loadPage( page, hist ) {
+               if ( xhr ) {
+                       // Abort previous requests to prevent backlog created by
+                       // repeatedly pressing back/forwards buttons
+                       xhr.abort();
+               }
+
                var $multipageimage = $( 'table.multipageimage' ),
+                       $spinner;
+
+               // Add a new spinner if one doesn't already exist
+               if ( !$multipageimage.find( '.mw-spinner' ).length ) {
+
                        $spinner = $.createSpinner( {
                                size: 'large',
                                type: 'block'
-                       } );
-
-               // Set the spinner's dimensions equal to the table's dimensions so that
-               // the current scroll position is not lost after the table is emptied prior to
-               // its contents being updated
-               $spinner.css( {
-                       height: $multipageimage.find( 'tr' ).height(),
-                       width: $multipageimage.find( 'tr' ).width()
-               } );
+                       } )
+                               // Set the spinner's dimensions equal to the table's dimensions so that
+                               // the current scroll position is not lost after the table is emptied prior to
+                               // its contents being updated
+                               .css( {
+                                       height: $multipageimage.find( 'tr' ).height(),
+                                       width: $multipageimage.find( 'tr' ).width()
+                               } );
+
+                       $multipageimage.empty().append( $spinner );
+               }
 
-               $multipageimage.empty().append( $spinner ).load(
-                       page + ' table.multipageimage tr',
-                       ajaxifyPageNavigation
-               );
+               xhr = $.ajax( {
+                       url: page,
+                       success: function ( data ) {
+                               // Load the page
+                               $multipageimage.empty().append( $( data ).find( 'table.multipageimage tr' ) );
+                               // Fire hook because the page's content has changed
+                               mw.hook( 'wikipage.content' ).fire( $multipageimage );
+                               // Set up the new page for pagination
+                               ajaxifyPageNavigation();
+                               // Add new page of image to history.  To preserve the back-forwards chain in the browser,
+                               // if the user gets here via the back/forward button, don't update the history.
+                               if ( window.history && history.pushState && !hist ) {
+                                       history.pushState( { url: page }, document.title, page );
+                               }
+                       }
+               } );
        }
 
        function ajaxifyPageNavigation() {
 
        $( document ).ready( function() {
                // The presence of table.multipageimage signifies that this file is a multi-page image
-               if( mw.config.get( 'wgNamespaceNumber' ) === 6 && $( 'table.multipageimage' ).length !== 0 ) {
+               if ( mw.config.get( 'wgNamespaceNumber' ) === 6 && $( 'table.multipageimage' ).length !== 0 ) {
                        ajaxifyPageNavigation();
+
+                       // Set up history.pushState (if available), so that when the user browses to a new page of
+                       // the same file, the browser's history is updated. If the user clicks the back/forward button
+                       // in the midst of navigating a file's pages, load the page inline.
+                       if ( window.history && history.pushState && history.replaceState ) {
+                               history.replaceState( { url: window.location.href }, '' );
+                               $( window ).on( 'popstate', function ( e ) {
+                                       var state = e.originalEvent.state;
+                                       if ( state ) {
+                                               loadPage( state.url, true );
+                                       }
+                               });
+                       }
                }
        } );
-}( mediaWiki, jQuery ) );
+}( mediaWiki, jQuery ) );
\ No newline at end of file
index 5e4af7b..b96a26e 100644 (file)
@@ -5,3 +5,27 @@
 .mw-changeslist-line-watched .mw-title {
        font-weight: bold;
 }
+
+.mw-changeslist-legend {
+       float: right;
+       margin-left: 1em;
+       margin-bottom: 0.5em;
+       clear: right;
+       font-size: 85%;
+       line-height: 1.2em;
+       padding: 0.5em;
+       border: 1px solid #ddd;
+}
+
+.mw-changeslist-legend dt {
+       float: left;
+}
+
+.mw-changeslist-legend dd {
+       margin-left: 1.5em;
+       line-height: 1.3em;
+}
+
+.mw-changeslist-legend dd.mw-changeslist-legend-plusminus {
+       margin-left: 3.5em;
+}
index 5cbb1ee..609b2dd 100644 (file)
@@ -2,7 +2,6 @@
  * JavaScript for Create account form (Special:UserLogin?type=signup).
  */
 ( function ( mw, $ ) {
-
        // When sending password by email, hide the password input fields.
        // This function doesn't need to be loaded early by ResourceLoader, but is tiny.
        function hidePasswordOnEmail() {
@@ -34,9 +33,8 @@
 
        // Move the FancyCaptcha image into a more attractive container.
        // This function does need to be run early by ResourceLoader.
-       function adjustFancyCaptcha() {
-               var $content = $( '#mw-content-text' ),
-                       $submit = $content.find( '#wpCreateaccount' ),
+       function adjustFancyCaptcha( $content, buttonSubmit ) {
+               var $submit = $content.find( buttonSubmit ),
                        tabIndex,
                        $captchaStuff,
                        $captchaImageContainer,
        }
 
        $( function () {
-               adjustFancyCaptcha();
-               hidePasswordOnEmail();
+               // Checks if the current page is Special:UserLogin
+               var isLogin = false,
+                       $content = $( '#mw-content-text' ),
+                       buttonSubmit = '#wpCreateaccount';
+
+               if ( $content.find( buttonSubmit ).length === 0 ) {
+                       buttonSubmit = '#wpLoginAttempt';
+                       isLogin = true;
+               }
+
+               adjustFancyCaptcha( $content, buttonSubmit );
+
+               if ( !isLogin ) {
+                       hidePasswordOnEmail();
+               }
+
        } );
 
 }( mediaWiki, jQuery ) );
index 24c8d77..cf9eaa0 100644 (file)
        width: auto;
        display: inline-block;
 }
+
+/**** shuffled CAPTCHA ****/
+#wpCaptchaWord {
+       margin-top: 6px;
+}
+
+.mw-createacct-captcha-container {
+       background-color: #f8f8f8;
+       border: 1px solid #c9c9c9;
+       padding: 10px;
+       text-align: center;
+}
+
+.mw-createacct-captcha-assisted {
+       display: block;
+       margin-top: 0.5em;
+}
+
+/* Put a border around the fancycaptcha-image-container. */
+.mw-createacct-captcha-and-reload {
+       border: 1px solid #c9c9c9;
+       display: table-cell; /* Other display formats end up too wide */
+       width: 270px;
+       background-color: #FFF;
+}
+
+/* Make the fancycaptcha-image-container full-width within its parent.  */
+.fancycaptcha-image-container
+{
+       width: 100%;
+}
index 10d36ff..a931756 100644 (file)
        .buttonColors();
        border-radius: @buttonBorderRadius;
 
-       // Content styling
+       // Ensure that buttons and inputs are nicely aligned when they have differing heights
        vertical-align: middle;
 
+       // Content styling
        text-align: center;
        text-decoration: none;
 
index 4ed7261..1b177ee 100644 (file)
@@ -19,6 +19,9 @@
 
        color: @agoraTextColor;
        padding: 0.35em 0.5em 0.35em 0.5em;
+
+       // Ensure that buttons and inputs are nicely aligned when they have differing heights
+       vertical-align: middle;
 }
 
 .agora-label-styling() {
index dde5abf..de2d013 100644 (file)
                                title.indexOf( '../' ) === 0 ||
                                title.indexOf( '/./' ) !== -1 ||
                                title.indexOf( '/../' ) !== -1 ||
-                               title.substr( -2 ) === '/.' ||
-                               title.substr( -3 ) === '/..'
+                               title.substr( title.length - 2 ) === '/.' ||
+                               title.substr( title.length - 3 ) === '/..'
                        )
                ) {
                        return false;
                        thumbPhpRegex = /thumb\.php/,
                        regexes = [
                                // Thumbnails
-                               /\/[a-f0-9]\/[a-f0-9]{2}\/([^\s\/]+)\/[^\s\/]+-\1[^\s\/]*$/,
+                               /\/[a-f0-9]\/[a-f0-9]{2}\/([^\s\/]+)\/[^\s\/]+-(?:\1|thumbnail)[^\s\/]*$/,
 
                                // Thumbnails in non-hashed upload directories
-                               /\/([^\s\/]+)\/[^\s\/]+-\1[^\s\/]*$/,
+                               /\/([^\s\/]+)\/[^\s\/]+-(?:\1|thumbnail)[^\s\/]*$/,
 
                                // Full size images
                                /\/[a-f0-9]\/[a-f0-9]{2}\/([^\s\/]+)$/,
                 * Get the URL to this title
                 *
                 * @see mw.util#getUrl
+                * @param {Object} [params] A mapping of query parameter names to values,
+                *     e.g. `{ action: 'edit' }`.
                 * @return {string}
                 */
-               getUrl: function () {
-                       return mw.util.getUrl( this.toString() );
+               getUrl: function ( params ) {
+                       return mw.util.getUrl( this.toString(), params );
                },
 
                /**
index 8a8215d..724ca5e 100644 (file)
@@ -1749,38 +1749,6 @@ var mw = ( function ( $, undefined ) {
                                        // Cache hit stats
                                        stats: { hits: 0, misses: 0, expired: 0 },
 
-                                       // Experiment data
-                                       experiment: ( function () {
-                                               var start = ( new Date() ).getTime(), id = 0, seed = 0;
-
-                                               try {
-                                                       id = JSON.parse( localStorage.getItem( 'moduleStorageExperiment' ) );
-                                                       if ( typeof id !== 'number' ) {
-                                                               id = Math.floor( Math.random() * Math.random() * 1e16 );
-                                                               localStorage.setItem( 'moduleStorageExperiment', id );
-                                                       }
-                                                       seed = id % 2000;
-                                               } catch ( e ) {}
-
-                                               return {
-                                                       // Unique identifier for this browser. This allows us to group all
-                                                       // datapoints generated by a particular browser, which in turn allows us
-                                                       // to see how the initial load compares to subsequent page loads.
-                                                       id: id,
-
-                                                       // Group assignment may be 0 (not in experiment), 1 (control group), or 2
-                                                       // (experimental group). Browsers that don't implement all the prerequisite APIs
-                                                       // (JSON and Web Storage) are ineligible. Eligible browsers have a 0.1% chance
-                                                       // of being included in the experiment, in which case they are equally likely to
-                                                       // be assigned to either the experimental or control group.
-                                                       group: seed === 1 ? 1 : ( seed === 2 ? 2 : 0 ),
-
-                                                       // Assess module storage performance by measuring the time between this
-                                                       // reference point and the window load event.
-                                                       start: start
-                                               };
-                                       }() ),
-
                                        /**
                                         * Construct a JSON-serializable object representing the content of the store.
                                         * @return {Object} Module store contents.
@@ -1838,12 +1806,9 @@ var mw = ( function ( $, undefined ) {
                                                        return;
                                                }
 
-                                               if (
-                                                       // We're in debug mode
-                                                       mw.config.get( 'debug' ) ||
-                                                       // Module storage is neither enabled by default, nor enabled for this user's group.
-                                                       !( mw.config.get( 'wgResourceLoaderStorageEnabled' ) || mw.loader.store.experiment.group === 2 )
-                                               ) {
+                                               if ( !mw.config.get( 'wgResourceLoaderStorageEnabled' ) || mw.config.get( 'debug' ) ) {
+                                                       // Disabled by configuration, or because debug mode is set.
+                                                       mw.loader.store.enabled = false;
                                                        return;
                                                }
 
index a057cce..86f06b8 100644 (file)
                 * Get the link to a page name (relative to `wgServer`),
                 *
                 * @param {string} str Page name to get the link for.
-                * @param {Object} params A mapping of query parameter names to values,
-                *     e.g. { action: 'edit' }. Optional.
+                * @param {Object} [params] A mapping of query parameter names to values,
+                *     e.g. `{ action: 'edit' }`.
                 * @return {string} Location for a page with name of `str` or boolean false on error.
                 */
                getUrl: function ( str, params ) {
diff --git a/skins/.gitignore b/skins/.gitignore
new file mode 100644 (file)
index 0000000..143a107
--- /dev/null
@@ -0,0 +1,11 @@
+*
+!cologneblue
+!CologneBlue.php
+!common
+!modern
+!Modern.php
+!monobook
+!MonoBook.php
+!vector
+!Vector.php
+!.gitignore
index 0370e05..142cb8d 100644 (file)
@@ -169,7 +169,6 @@ class CologneBlueTemplate extends BaseTemplate {
 
                        $lines[] = $this->getSkin()->getLanguage()->pipeList( array_filter( $element ) );
 
-
                        // Second row. Privileged actions.
                        $element = array();
 
@@ -183,7 +182,6 @@ class CologneBlueTemplate extends BaseTemplate {
 
                        $lines[] = $this->getSkin()->getLanguage()->pipeList( array_filter( $element ) );
 
-
                        // Third row. Language links.
                        $lines[] = $this->otherLanguages();
                }
@@ -467,7 +465,6 @@ class CologneBlueTemplate extends BaseTemplate {
                        $bar = $this->sidebarAdditions( $bar );
                }
 
-
                // Fill out special sidebar items with content
                $orig_bar = $bar;
                $bar = array();
@@ -481,7 +478,6 @@ class CologneBlueTemplate extends BaseTemplate {
                        }
                }
 
-
                // Output the sidebar
                // CologneBlue uses custom messages for some portlets, but we should keep the ids for consistency
                $idToMessage = array(
index 6d66cac..f7fb0d8 100644 (file)
@@ -321,5 +321,3 @@ echo $footerEnd;
 <?php
        }
 } // end of class
-
-
index 5862877..c7804a0 100644 (file)
@@ -112,6 +112,7 @@ div.top,
 div#column-one,
 #colophon,
 .mw-editsection,
+.mw-editsection-like,
 .toctoggle,
 .tochidden,
 div#f-poweredbyico,
index f5b6231..2e61f63 100644 (file)
@@ -1187,7 +1187,8 @@ table.floatleft {
 }
 
 /* Display editsection links smaller and next to headings */
-.mw-editsection {
+.mw-editsection,
+.mw-editsection-like {
        font-size: small;
        font-weight: normal;
        margin-left: 1em;
index e97bbdb..150d2d2 100644 (file)
@@ -4,6 +4,7 @@
 #jump-to-nav,
 #footer,
 .mw-editsection,
+.mw-editsection-like,
 .noprint {
        display: none;
 }
index e3c2c51..83d043e 100644 (file)
@@ -82,7 +82,7 @@
                },
                addData: function ( $collapsible ) {
                        var $settings = $collapsible.parent().data( 'collapsibleTabsSettings' );
-                       if ( $settings !== null ) {
+                       if ( $settings ) {
                                $collapsible.data( 'collapsibleTabsSettings', {
                                        expandedContainer: $settings.expandedContainer,
                                        collapsedContainer: $settings.collapsedContainer,
@@ -93,7 +93,7 @@
                },
                getSettings: function ( $collapsible ) {
                        var $settings = $collapsible.data( 'collapsibleTabsSettings' );
-                       if ( $settings === undefined ) {
+                       if ( !$settings ) {
                                $.collapsibleTabs.addData( $collapsible );
                                $settings = $collapsible.data( 'collapsibleTabsSettings' );
                        }
                        } );
                },
                moveToCollapsed: function ( ele ) {
-                       var data, expContainerSettings, target,
+                       var outerData, expContainerSettings, target,
                                $moving = $( ele );
 
-                       data = $.collapsibleTabs.getSettings( $moving );
-                       if ( !data ) {
+                       outerData = $.collapsibleTabs.getSettings( $moving );
+                       if ( !outerData ) {
                                return;
                        }
-                       expContainerSettings = $.collapsibleTabs.getSettings( $( data.expandedContainer ) );
+                       expContainerSettings = $.collapsibleTabs.getSettings( $( outerData.expandedContainer ) );
                        if ( !expContainerSettings ) {
                                return;
                        }
                        expContainerSettings.shifting = true;
 
                        // Remove the element from where it's at and put it in the dropdown menu
-                       target = data.collapsedContainer;
+                       target = outerData.collapsedContainer;
                        $moving.css( 'position', 'relative' )
                                .css( ( rtl ? 'left' : 'right' ), 0 )
                                .animate( { width: '1px' }, 'normal', function () {
                                        $( this ).hide();
                                        // add the placeholder
                                        $( '<span class="placeholder" style="display: none;"></span>' ).insertAfter( this );
-                                       // XXX: 'data' is undefined here, should the 'data' from the outer scope have
-                                       // a different name?
-                                       $( this ).detach().prependTo( target ).data( 'collapsibleTabsSettings', data );
+                                       $( this ).detach().prependTo( target ).data( 'collapsibleTabsSettings', outerData );
                                        $( this ).attr( 'style', 'display: list-item;' );
                                        data = $.collapsibleTabs.getSettings( $( ele ) );
                                        if ( data ) {
index 042956a..cc49fde 100644 (file)
@@ -100,17 +100,14 @@ class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
                print <<<EOT
 
 ParserTest-specific options:
-
   --regex="<regex>"        Only run parser tests that match the given regex
   --file="<filename>"      File describing parser tests
   --keep-uploads           Re-use the same upload directory for each test, don't delete it
 
-
 Database options:
   --use-normal-tables      Use normal DB tables.
   --reuse-db               Init DB only if tables are missing and keep after finish.
 
-
 Debugging options:
   --debug-tests            Log testing activity to the PHPUnitCommand log channel.
 
index 6ce78b5..7a7ec8f 100644 (file)
@@ -35,6 +35,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        private static $dbSetup = false;
        private static $oldTablePrefix = false;
 
+       /**
+        * Original value of PHP's error_reporting setting.
+        *
+        * @var int
+        */
+       private $phpErrorLevel;
+
        /**
         * Holds the paths of temporary files/directories created through getNewTempFile,
         * and getNewTempDirectory
@@ -172,6 +179,8 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                parent::setUp();
                $this->called['setUp'] = 1;
 
+               $this->phpErrorLevel = intval( ini_get( 'error_reporting' ) );
+
                /*
                // @todo global variables to restore for *every* test
                array(
@@ -233,6 +242,18 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                }
                $this->mwGlobals = array();
 
+               $phpErrorLevel = intval( ini_get( 'error_reporting' ) );
+
+               if ( $phpErrorLevel !== $this->phpErrorLevel ) {
+                       ini_set( 'error_reporting', $this->phpErrorLevel );
+
+                       $oldHex = strtoupper( dechex( $this->phpErrorLevel ) );
+                       $newHex = strtoupper( dechex( $phpErrorLevel ) );
+                       $message = "PHP error_reporting setting was left dirty: was 0x$oldHex before test, 0x$newHex after test!";
+
+                       $this->fail( $message );
+               }
+
                parent::tearDown();
                wfProfileOut( __METHOD__ );
        }
diff --git a/tests/phpunit/data/cssmin/green.gif b/tests/phpunit/data/cssmin/green.gif
new file mode 100644 (file)
index 0000000..f9e7531
Binary files /dev/null and b/tests/phpunit/data/cssmin/green.gif differ
diff --git a/tests/phpunit/data/cssmin/large.png b/tests/phpunit/data/cssmin/large.png
new file mode 100644 (file)
index 0000000..64bf48a
Binary files /dev/null and b/tests/phpunit/data/cssmin/large.png differ
diff --git a/tests/phpunit/data/cssmin/red.gif b/tests/phpunit/data/cssmin/red.gif
new file mode 100644 (file)
index 0000000..13c43e9
Binary files /dev/null and b/tests/phpunit/data/cssmin/red.gif differ
index 8ea9c68..bf7fb21 100644 (file)
@@ -7,5 +7,5 @@ $result = array( 'xmp-exif' =>
                'GPSLatitude' => 88.51805555,
                'GPSLongitude' => -21.12356945,
                'GPSVersionID' => '2.2.0.0'
-        )
+       )
 );
index 76a9a10..0b04c6e 100644 (file)
@@ -1,7 +1,10 @@
 <?php
 
 class DiffHistoryBlobTest extends MediaWikiTestCase {
+
        protected function setUp() {
+               parent::setUp();
+
                if ( !extension_loaded( 'xdiff' ) ) {
                        $this->markTestSkipped( 'The xdiff extension is not available' );
 
@@ -17,7 +20,6 @@ class DiffHistoryBlobTest extends MediaWikiTestCase {
 
                        return;
                }
-               parent::setUp();
        }
 
        /**
index 7d2b04f..0dee6b0 100644 (file)
@@ -202,7 +202,6 @@ class EditPageTest extends MediaWikiLangTestCase {
                        "expected article not being created if empty"
                );
 
-
                $this->assertEdit(
                        'MediaWiki:January',
                        null,
index 63fff6e..e2a3711 100644 (file)
@@ -38,7 +38,6 @@ class ExceptionTest extends MediaWikiTestCase {
                );
        }
 
-
        /**
         * Lame JSON schema validation.
         *
index 868090e..f67f696 100644 (file)
@@ -141,7 +141,6 @@ class GlobalTest extends MediaWikiTestCase {
                $this->assertEquals( $result, wfArrayToCgi( $array ) );
        }
 
-
        /**
         * @covers ::wfArrayToCgi
         */
@@ -293,11 +292,11 @@ class GlobalTest extends MediaWikiTestCase {
                unlink( $wgDebugLogFile );
 
                wfDebugMem();
-               $this->assertGreaterThan( 5000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
+               $this->assertGreaterThan( 1000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
                unlink( $wgDebugLogFile );
 
                wfDebugMem( true );
-               $this->assertGreaterThan( 5000000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
+               $this->assertGreaterThan( 1000000, preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) ) );
                unlink( $wgDebugLogFile );
 
                $wgDebugLogFile = $old_log_file;
diff --git a/tests/phpunit/includes/LinkFilterTest.php b/tests/phpunit/includes/LinkFilterTest.php
new file mode 100644 (file)
index 0000000..41207b7
--- /dev/null
@@ -0,0 +1,274 @@
+<?php
+
+/**
+ * @group Database
+ */
+class LinkFilterTest extends MediaWikiLangTestCase {
+
+       protected function setUp() {
+
+               parent::setUp();
+
+               $this->setMwGlobals( 'wgUrlProtocols', array(
+                       'http://',
+                       'https://',
+                       'ftp://',
+                       'irc://',
+                       'ircs://',
+                       'gopher://',
+                       'telnet://',
+                       'nntp://',
+                       'worldwind://',
+                       'mailto:',
+                       'news:',
+                       'svn://',
+                       'git://',
+                       'mms://',
+                       '//',
+               ) );
+
+       }
+
+       /**
+        * createRegexFromLike($like)
+        *
+        * Takes an array as created by LinkFilter::makeLikeArray() and creates a regex from it
+        *
+        * @param Array $like Array as created by LinkFilter::makeLikeArray()
+        * @return string Regex
+        */
+       function createRegexFromLIKE( $like ) {
+
+               $regex = '!^';
+
+               foreach ( $like as $item ) {
+
+                       if ( $item instanceof LikeMatch ) {
+                               if ( $item->toString() == '%' ) {
+                                       $regex .= '.*';
+                               } elseif ( $item->toString() == '_' ) {
+                                       $regex .= '.';
+                               }
+                       } else {
+                               $regex .= preg_quote( $item, '!' );
+                       }
+
+               }
+
+               $regex .= '$!';
+
+               return $regex;
+
+       }
+
+       /**
+        * provideValidPatterns()
+        *
+        * @return array
+        */
+       public static function provideValidPatterns() {
+
+               return array(
+                       // Protocol, Search pattern, URL which matches the pattern
+                       array( 'http://', '*.test.com', 'http://www.test.com' ),
+                       array( 'http://', 'test.com:8080/dir/file', 'http://name:pass@test.com:8080/dir/file' ),
+                       array( 'https://', '*.com', 'https://s.s.test..com:88/dir/file?a=1&b=2' ),
+                       array( 'https://', '*.com', 'https://name:pass@secure.com/index.html' ),
+                       array( 'http://', 'name:pass@test.com', 'http://test.com' ),
+                       array( 'http://', 'test.com', 'http://name:pass@test.com' ),
+                       array( 'http://', '*.test.com', 'http://a.b.c.test.com/dir/dir/file?a=6'),
+                       array( null, 'http://*.test.com', 'http://www.test.com' ),
+                       array( 'mailto:', 'name@mail.test123.com', 'mailto:name@mail.test123.com' ),
+                       array( '',
+                               'http://name:pass@www.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg',
+                               'http://name:pass@www.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg'
+                       ),
+                       array( '', 'http://name:pass@*.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg',
+                               'http://name:pass@www.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg' ),
+                       array( '', 'http://name:wrongpass@*.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]',
+                               'http://name:pass@www.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg' ),
+                       array( 'http://', 'name:pass@*.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg',
+                               'http://name:pass@www.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg' ),
+                       array( '', 'http://name:pass@www.test.com:12345',
+                               'http://name:pass@www.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg' ),
+                       array( 'ftp://', 'user:pass@ftp.test.com:1233/home/user/file;type=efw',
+                               'ftp://user:pass@ftp.test.com:1233/home/user/file;type=efw' ),
+                       array( null, 'ftp://otheruser:otherpass@ftp.test.com:1233/home/user/file;type=',
+                               'ftp://user:pass@ftp.test.com:1233/home/user/file;type=efw' ),
+                       array( null, 'ftp://@ftp.test.com:1233/home/user/file;type=',
+                               'ftp://user:pass@ftp.test.com:1233/home/user/file;type=efw' ),
+                       array( null, 'ftp://ftp.test.com/',
+                               'ftp://user:pass@ftp.test.com/home/user/file;type=efw' ),
+                       array( null, 'ftp://ftp.test.com/',
+                               'ftp://user:pass@ftp.test.com/home/user/file;type=efw' ),
+                       array( null, 'ftp://*.test.com:222/',
+                               'ftp://user:pass@ftp.test.com:222/home' ),
+                       array( 'irc://', '*.myserver:6667/', 'irc://test.myserver:6667/' ),
+                       array( 'irc://', 'name:pass@*.myserver/', 'irc://test.myserver:6667/' ),
+                       array( 'irc://', 'name:pass@*.myserver/', 'irc://other:@test.myserver:6667/' ),
+                       array( '', 'irc://test/name,string,abc?msg=t', 'irc://test/name,string,abc?msg=test' ),
+                       array( '', 'https://gerrit.wikimedia.org/r/#/q/status:open,n,z',
+                               'https://gerrit.wikimedia.org/r/#/q/status:open,n,z' ),
+                       array( '', 'https://gerrit.wikimedia.org',
+                               'https://gerrit.wikimedia.org/r/#/q/status:open,n,z' ),
+                       array( 'mailto:', '*.test.com', 'mailto:name@pop3.test.com' ),
+                       array( 'mailto:', 'test.com', 'mailto:name@test.com' ),
+                       array( 'news:', 'test.1234afc@news.test.com', 'news:test.1234afc@news.test.com' ),
+                       array( 'news:', '*.test.com', 'news:test.1234afc@news.test.com' ),
+                       array( '', 'news:4df8kh$iagfewewf(at)newsbf02aaa.news.aol.com',
+                               'news:4df8kh$iagfewewf(at)newsbf02aaa.news.aol.com' ),
+                       array( '', 'news:*.aol.com',
+                               'news:4df8kh$iagfewewf(at)newsbf02aaa.news.aol.com' ),
+                       array( '', 'git://github.com/prwef/abc-def.git', 'git://github.com/prwef/abc-def.git' ),
+                       array( 'git://', 'github.com/', 'git://github.com/prwef/abc-def.git' ),
+                       array( 'git://', '*.github.com/', 'git://a.b.c.d.e.f.github.com/prwef/abc-def.git' ),
+                       array( '', 'gopher://*.test.com/', 'gopher://gopher.test.com/0/v2/vstat'),
+                       array( 'telnet://', '*.test.com', 'telnet://shell.test.com/~home/'),
+
+                       //
+                       // The following only work in PHP >= 5.3.7, due to a bug in parse_url which eats
+                       // the path from the url (https://bugs.php.net/bug.php?id=54180)
+                       //
+                       // array( '', 'http://test.com', 'http://test.com/index?arg=1' ),
+                       // array( 'http://', '*.test.com', 'http://www.test.com/index?arg=1' ),
+                       // array( '' ,
+                       //    'http://xx23124:__ffdfdef__@www.test.com:12345/dir' ,
+                       //    'http://name:pass@www.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg'
+                       // ),
+                       //
+
+                       //
+                       // Tests for false positives
+                       //
+                       array( 'http://', 'test.com', 'http://www.test.com', false ),
+                       array( 'http://', 'www1.test.com', 'http://www.test.com', false ),
+                       array( 'http://', '*.test.com', 'http://www.test.t.com', false ),
+                       array( '', 'http://test.com:8080', 'http://www.test.com:8080', false ),
+                       array( '', 'https://test.com', 'http://test.com', false ),
+                       array( '', 'http://test.com', 'https://test.com', false ),
+                       array( 'http://', 'http://test.com', 'http://test.com', false ),
+                       array( null, 'http://www.test.com', 'http://www.test.com:80', false ),
+                       array( null, 'http://www.test.com:80', 'http://www.test.com', false ),
+                       array( null, 'http://*.test.com:80', 'http://www.test.com', false ),
+                       array( '', 'https://gerrit.wikimedia.org/r/#/XXX/status:open,n,z',
+                               'https://gerrit.wikimedia.org/r/#/q/status:open,n,z', false ),
+                       array( '', 'https://*.wikimedia.org/r/#/q/status:open,n,z',
+                               'https://gerrit.wikimedia.org/r/#/XXX/status:open,n,z', false ),
+                       array( 'mailto:', '@test.com', '@abc.test.com', false ),
+                       array( 'mailto:', 'mail@test.com', 'mail2@test.com', false ),
+                       array( '', 'mailto:mail@test.com', 'mail2@test.com', false ),
+                       array( '', 'mailto:@test.com', '@abc.test.com', false ),
+                       array( 'ftp://', '*.co', 'ftp://www.co.uk', false ),
+                       array( 'ftp://', '*.co', 'ftp://www.co.m', false ),
+                       array( 'ftp://', '*.co/dir/', 'ftp://www.co/dir2/', false ),
+                       array( 'ftp://', 'www.co/dir/', 'ftp://www.co/dir2/', false ),
+                       array( 'ftp://', 'test.com/dir/', 'ftp://test.com/', false ),
+                       array( '', 'http://test.com:8080/dir/', 'http://test.com:808/dir/', false ),
+                       array( '', 'http://test.com/dir/index.html', 'http://test.com/dir/index.php', false ),
+
+                       //
+                       // These are false positives too and ideally shouldn't match, but that
+                       // would require using regexes and RLIKE instead of LIKE
+                       //
+                       // array( null, 'http://*.test.com', 'http://www.test.com:80', false ),
+                       // array( '', 'https://*.wikimedia.org/r/#/q/status:open,n,z',
+                       //      'https://gerrit.wikimedia.org/XXX/r/#/q/status:open,n,z', false ),
+               );
+
+       }
+
+       /**
+        * testMakeLikeArrayWithValidPatterns()
+        *
+        * Tests whether the LIKE clause produced by LinkFilter::makeLikeArray($pattern, $protocol)
+        * will find one of the URL indexes produced by wfMakeUrlIndexes($url)
+        *
+        * @dataProvider provideValidPatterns
+        *
+        * @param String $protocol Protocol, e.g. 'http://' or 'mailto:'
+        * @param String $pattern Search pattern to feed to LinkFilter::makeLikeArray
+        * @param String $url URL to feed to wfMakeUrlIndexes
+        * @param bool $shouldBeFound Should the URL be found? (defaults true)
+        */
+       function testMakeLikeArrayWithValidPatterns( $protocol, $pattern, $url, $shouldBeFound = true ) {
+
+               $indexes = wfMakeUrlIndexes( $url );
+               $likeArray = LinkFilter::makeLikeArray( $pattern, $protocol );
+
+               $this->assertTrue( $likeArray !== false,
+                       "LinkFilter::makeLikeArray('$pattern', '$protocol') returned false on a valid pattern"
+               );
+
+               $regex = $this->createRegexFromLIKE( $likeArray );
+               $debugmsg = "Regex: '" . $regex . "'\n";
+               $debugmsg .= count( $indexes ) . " index(es) created by wfMakeUrlIndexes():\n";
+
+               $matches = 0;
+
+               foreach ( $indexes as $index ) {
+                       $matches += preg_match( $regex, $index );
+                       $debugmsg .= "\t'$index'\n";
+               }
+
+               if ( $shouldBeFound ) {
+                       $this->assertTrue(
+                               $matches > 0,
+                               "Search pattern '$protocol$pattern' does not find url '$url' \n$debugmsg"
+                       );
+               } else {
+                       $this->assertFalse(
+                               $matches > 0,
+                               "Search pattern '$protocol$pattern' should not find url '$url' \n$debugmsg"
+                       );
+               }
+
+       }
+
+       /**
+        * provideInvalidPatterns()
+        *
+        * @return array
+        */
+       public static function provideInvalidPatterns() {
+
+               return array(
+                       array( '' ),
+                       array( '*' ),
+                       array( 'http://*' ),
+                       array( 'http://*/' ),
+                       array( 'http://*/dir/file' ),
+                       array( 'test.*.com' ),
+                       array( 'http://test.*.com' ),
+                       array( 'test.*.com' ),
+                       array( 'http://*.test.*' ),
+                       array( 'http://*test.com' ),
+                       array( 'https://*' ),
+                       array( '*://test.com'),
+                       array( 'mailto:name:pass@t*est.com' ),
+                       array( 'http://*:888/'),
+                       array( '*http://'),
+                       array( 'test.com/*/index' ),
+                       array( 'test.com/dir/index?arg=*' ),
+               );
+
+       }
+
+       /**
+        * testMakeLikeArrayWithInvalidPatterns()
+        *
+        * Tests whether LinkFilter::makeLikeArray($pattern) will reject invalid search patterns
+        *
+        * @dataProvider provideInvalidPatterns
+        *
+        * @param $pattern string: Invalid search pattern
+        */
+       function testMakeLikeArrayWithInvalidPatterns( $pattern ) {
+
+               $this->assertFalse(
+                       LinkFilter::makeLikeArray( $pattern ),
+                       "'$pattern' is not a valid pattern and should be rejected"
+               );
+
+       }
+
+}
index 8fea8cc..e60dc54 100644 (file)
@@ -240,7 +240,6 @@ class PathRouterTest extends MediaWikiTestCase {
                $this->assertEquals( $matches, array( 'title' => "Lorem_ipsum_dolor_sit_amet,_consectetur_adipisicing_elit,_sed_do_eiusmod_tempor_incididunt_ut_labore_et_dolore_magna_aliqua._Ut_enim_ad_minim_veniam,_quis_nostrud_exercitation_ullamco_laboris_nisi_ut_aliquip_ex_ea_commodo_consequat._Duis_aute_irure_dolor_in_reprehenderit_in_voluptate_velit_esse_cillum_dolore_eu_fugiat_nulla_pariatur._Excepteur_sint_occaecat_cupidatat_non_proident,_sunt_in_culpa_qui_officia_deserunt_mollit_anim_id_est_laborum." ) );
        }
 
-
        /**
         * Ensure that the php passed site of parameter values are not urldecoded
         */
index 3dec2da..5841bb6 100644 (file)
@@ -81,9 +81,9 @@ class PreferencesTest extends MediaWikiTestCase {
        protected function prefsFor( $user_key ) {
                $preferences = array();
                Preferences::profilePreferences(
-                       $this->prefUsers[$user_key]
-                       , $this->context
-                       $preferences
+                       $this->prefUsers[$user_key],
+                       $this->context,
+                       $preferences
                );
 
                return $preferences;
diff --git a/tests/phpunit/includes/ResourceLoaderModuleTest.php b/tests/phpunit/includes/ResourceLoaderModuleTest.php
new file mode 100644 (file)
index 0000000..4643319
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+
+class ResourceLoaderModuleTest extends MediaWikiTestCase {
+
+       protected static function getResourceLoaderContext() {
+               $resourceLoader = new ResourceLoader();
+               $request = new FauxRequest( array(
+                               'debug' => 'false',
+                               'lang' => 'en',
+                               'modules' => 'startup',
+                               'only' => 'scripts',
+                               'skin' => 'vector',
+               ) );
+               return new ResourceLoaderContext( $resourceLoader, $request );
+       }
+
+       /**
+        * @covers ResourceLoaderModule::getDefinitionSummary
+        * @covers ResourceLoaderFileModule::getDefinitionSummary
+        */
+       public function testDefinitionSummary() {
+               $context = self::getResourceLoaderContext();
+
+               $baseParams = array(
+                       'scripts' => array( 'foo.js', 'bar.js' ),
+                       'dependencies' => array( 'jquery', 'mediawiki' ),
+                       'messages' => array( 'hello', 'world' ),
+               );
+
+               $module = new ResourceLoaderFileModule( $baseParams );
+
+               $jsonSummary = json_encode( $module->getDefinitionSummary( $context ) );
+
+               // Exactly the same
+               $module = new ResourceLoaderFileModule( $baseParams );
+
+               $this->assertEquals(
+                       $jsonSummary,
+                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       'Instance is insignificant'
+               );
+
+               // Re-order dependencies
+               $module = new ResourceLoaderFileModule( array(
+                       'dependencies' => array( 'mediawiki', 'jquery' ),
+               ) + $baseParams );
+
+               $this->assertEquals(
+                       $jsonSummary,
+                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       'Order of dependencies is insignificant'
+               );
+
+               // Re-order messages
+               $module = new ResourceLoaderFileModule( array(
+                       'messages' => array( 'world', 'hello' ),
+               ) + $baseParams );
+
+               $this->assertEquals(
+                       $jsonSummary,
+                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       'Order of messages is insignificant'
+               );
+
+               // Re-order scripts
+               $module = new ResourceLoaderFileModule( array(
+                       'scripts' => array( 'bar.js', 'foo.js' ),
+               ) + $baseParams );
+
+               $this->assertNotEquals(
+                       $jsonSummary,
+                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       'Order of scripts is significant'
+               );
+
+               // Subclass
+               $module = new ResourceLoaderFileModuleTestModule( $baseParams );
+
+               $this->assertNotEquals(
+                       $jsonSummary,
+                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       'Class is significant'
+               );
+       }
+}
+
+class ResourceLoaderFileModuleTestModule extends ResourceLoaderFileModule {}
index e17c7b0..7e275a5 100644 (file)
@@ -56,7 +56,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
                }
        }
 
-       public function tearDown() {
+       protected function tearDown() {
                global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
 
                parent::tearDown();
@@ -170,7 +170,6 @@ class RevisionStorageTest extends MediaWikiTestCase {
                $this->assertRevEquals( $orig, $rev );
        }
 
-
        /**
         * @covers Revision::newFromArchiveRow
         */
index 4e83e35..f830e36 100644 (file)
@@ -57,7 +57,6 @@ class RevisionTest_ContentHandlerUseDB extends RevisionStorageTest {
                }
        }
 
-
        /**
         * @covers Revision::getContentFormat
         */
index b5819ff..fc23919 100644 (file)
@@ -325,7 +325,6 @@ class RevisionTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedText, $rev->getRawText( $audience ) );
        }
 
-
        public function dataGetSize() {
                return array(
                        array( "hello world.", CONTENT_MODEL_WIKITEXT, 12 ),
@@ -428,7 +427,6 @@ class RevisionTest extends MediaWikiTestCase {
                $this->assertEquals( "bar", $content->getText() ); // clones should be independent
        }
 
-
        /**
         * Tests whether $rev->getContent() returns the same object repeatedly if appropriate.
         *
index a29d527..65057a5 100644 (file)
@@ -10,7 +10,7 @@
  */
 class SpecialPageTest extends MediaWikiTestCase {
 
-       public function setUp() {
+       protected function setUp() {
                parent::setUp();
 
                $this->setMwGlobals( array(
index 08a5495..30a554e 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * @author Adam Shorland
  */
-class StatusTest extends MediaWikiTestCase {
+class StatusTest extends MediaWikiLangTestCase {
 
        public function testCanConstruct() {
                new Status();
@@ -126,6 +126,7 @@ class StatusTest extends MediaWikiTestCase {
         * @dataProvider provideMockMessageDetails
         * @covers Status::warning
         * @covers Status::getWarningsArray
+        * @covers Status::getStatusArray
         */
        public function testWarningWithMessage( $mockDetails ) {
                $status = new Status();
@@ -147,6 +148,7 @@ class StatusTest extends MediaWikiTestCase {
         * @dataProvider provideMockMessageDetails
         * @covers Status::error
         * @covers Status::getErrorsArray
+        * @covers Status::getStatusArray
         */
        public function testErrorWithMessage( $mockDetails ) {
                $status = new Status();
@@ -228,7 +230,7 @@ class StatusTest extends MediaWikiTestCase {
         */
        public function testCleanParams( $cleanCallback, $params, $expected ) {
                $method = new ReflectionMethod( 'Status', 'cleanParams' );
-               $method->setAccessible(TRUE);
+               $method->setAccessible( true );
                $status = new Status();
                $status->cleanCallback = $cleanCallback;
 
@@ -245,7 +247,7 @@ class StatusTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider provideGetWikiText
+        * @dataProvider provideGetWikiTextAndHtml
         * @covers Status::getWikiText
         * @todo test long and short context messages generated through this method
         *       this can not really be done now due to use of wfMessage()->plain()
@@ -255,12 +257,23 @@ class StatusTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $status->getWikiText() );
        }
 
+       /**
+        * @dataProvider provideGetWikiTextAndHtml
+        * @covers Status::getHtml
+        * @todo test long and short context messages generated through this method
+        *       this can not really be done now due to use of $this->getWikiText using wfMessage()->plain()
+        *       It is possible to mock such methods but only if namespaces are used
+        */
+       public function testGetHtml( Status $status, $expected ) {
+               $this->assertEquals( $expected, $status->getHTML() );
+       }
+
        /**
         * @return array of arrays with values;
         *    0 => status object
         *    1 => expected string (with no context)
         */
-       public static function provideGetWikiText() {
+       public static function provideGetWikiTextAndHtml() {
                $testCases = array();
 
                $testCases[ 'GoodStatus' ] = array(
@@ -308,12 +321,155 @@ class StatusTest extends MediaWikiTestCase {
                return $testCases;
        }
 
-       //todo test getMessage
-       //todo test getErrorMessage
-       //todo test getHTML
-       //todo test getErrorMessageArray
-       //todo test getStatusArray
-       //todo test getErrorsByType
-       //todo test replaceMessage
+       /**
+        * @dataProvider provideGetMessage
+        * @covers Status::getMessage
+        * @todo test long and short context messages generated through this method
+        */
+       public function testGetMessage( Status $status, $expectedParams = array(), $expectedKey ) {
+               $message = $status->getMessage();
+               $this->assertInstanceOf( 'Message', $message );
+               $this->assertEquals( $expectedParams, $message->getParams() );
+               $this->assertEquals( $expectedKey, $message->getKey() );
+       }
+
+       /**
+        * @return array of arrays with values;
+        *    0 => status object
+        *    1 => expected Message Params (with no context)
+        */
+       public static function provideGetMessage() {
+               $testCases = array();
+
+               $testCases[ 'GoodStatus' ] = array(
+                       new Status(),
+                       array( "Status::getMessage called for a good result, this is incorrect\n" ),
+                       'internalerror_info'
+               );
+
+               $status = new Status();
+               $status->ok = false;
+               $testCases[ 'GoodButNoError' ] = array(
+                       $status,
+                       array( "Status::getMessage: Invalid result object: no error text but not OK\n" ),
+                       'internalerror_info'
+               );
+
+               $status = new Status();
+               $status->warning( 'fooBar!' );
+               $testCases[ '1StringWarning' ] = array(
+                       $status,
+                       array(),
+                       "fooBar!"
+               );
+
+               //NOTE: this seems to return a string instead of a Message object...
+//             $status = new Status();
+//             $status->warning( 'fooBar!' );
+//             $status->warning( 'fooBar2!' );
+//             $testCases[ '2StringWarnings' ] = array(
+//                     $status,
+//                     array(),
+//                     ''
+//             );
+
+               $status = new Status();
+               $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' )  ) );
+               $testCases[ '1MessageWarning' ] = array(
+                       $status,
+                       array( 'foo', 'bar' ),
+                       "fooBar!",
+               );
+
+               //NOTE: this seems to return a string instead of a Message object...
+//             $status = new Status();
+//             $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' ) ) );
+//             $status->warning( new Message( 'fooBar2!' ) );
+//             $testCases[ '2MessageWarnings' ] = array(
+//                     $status,
+//                     array(),
+//                     "",
+//             );
+
+               return $testCases;
+       }
+
+       /**
+        * @covers Status::replaceMessage
+        */
+       public function testReplaceMessage() {
+               $status = new Status();
+               $message = new Message( 'key1', array( 'foo1', 'bar1' ) );
+               $status->error( $message );
+               $newMessage = new Message( 'key2', array( 'foo2', 'bar2' ) );
+
+               $status->replaceMessage( $message, $newMessage );
+
+               $this->assertEquals( $newMessage, $status->errors[0]['message'] );
+       }
+
+       /**
+        * @covers Status::getErrorMessage
+        */
+       public function testGetErrorMessage() {
+               $method = new ReflectionMethod( 'Status', 'getErrorMessage' );
+               $method->setAccessible( true );
+               $status = new Status();
+               $key = 'foo';
+               $params = array( 'bar' );
+
+               /** @var Message $message */
+               $message = $method->invoke( $status, array_merge( array( $key ), $params ) );
+               $this->assertInstanceOf( 'Message', $message );
+               $this->assertEquals( $key, $message->getKey() );
+               $this->assertEquals( $params, $message->getParams() );
+       }
+
+       /**
+        * @covers Status::getErrorMessageArray
+        */
+       public function testGetErrorMessageArray() {
+               $method = new ReflectionMethod( 'Status', 'getErrorMessageArray' );
+               $method->setAccessible( true );
+               $status = new Status();
+               $key = 'foo';
+               $params = array( 'bar' );
+
+               /** @var Message[] $messageArray */
+               $messageArray = $method->invoke(
+                       $status,
+                       array(
+                               array_merge( array( $key ), $params ),
+                               array_merge( array( $key ), $params )
+                       )
+               );
+
+               $this->assertInternalType( 'array', $messageArray );
+               $this->assertCount( 2, $messageArray );
+               foreach ( $messageArray as $message ) {
+                       $this->assertInstanceOf( 'Message', $message );
+                       $this->assertEquals( $key, $message->getKey() );
+                       $this->assertEquals( $params, $message->getParams() );
+               }
+       }
+
+       /**
+        * @covers Status::getErrorsByType
+        */
+       public function testGetErrorsByType() {
+               $status = new Status();
+               $warning = new Message( 'warning111' );
+               $error = new Message( 'error111' );
+               $status->warning( $warning );
+               $status->error( $error );
+
+               $warnings = $status->getErrorsByType( 'warning' );
+               $errors = $status->getErrorsByType( 'error' );
+
+               $this->assertCount( 1, $warnings );
+               $this->assertCount( 1, $errors );
+               $this->assertEquals( $warning, $warnings[0]['message'] );
+               $this->assertEquals( $error, $errors[0]['message'] );
+       }
 
 }
index 3079d73..55a17ac 100644 (file)
@@ -9,7 +9,7 @@
  */
 class TitleMethodsTest extends MediaWikiTestCase {
 
-       public function setUp() {
+       protected function setUp() {
                global $wgContLang;
 
                parent::setUp();
@@ -33,7 +33,7 @@ class TitleMethodsTest extends MediaWikiTestCase {
                $wgContLang->resetNamespaces(); # reset namespace cache
        }
 
-       public function tearDown() {
+       protected function tearDown() {
                global $wgContLang;
 
                parent::tearDown();
index 4a0a755..c7cbc7b 100644 (file)
@@ -47,7 +47,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                date_default_timezone_set( $localZone );
 
                $this->title = Title::makeTitle( NS_MAIN, "Main Page" );
-               if ( !isset( $this->userUser ) || !( $this->userUser instanceOf User ) ) {
+               if ( !isset( $this->userUser ) || !( $this->userUser instanceof User ) ) {
                        $this->userUser = User::newFromName( $this->userName );
 
                        if ( !$this->userUser->getID() ) {
index 1258eb1..796adf3 100644 (file)
@@ -576,7 +576,6 @@ class WikiPageTest extends MediaWikiLangTestCase {
                );
        }
 
-
        /**
         * @dataProvider provideIsCountable
         * @covers WikiPage::isCountable
@@ -678,7 +677,6 @@ just a test
 more stuff
 ";
 
-
        public function dataReplaceSection() {
                //NOTE: assume the Help namespace to contain wikitext
                return array(
index 8fe08e1..0a6607e 100644 (file)
@@ -13,7 +13,7 @@
  */
 class ApiEditPageTest extends ApiTestCase {
 
-       public function setUp() {
+       protected function setUp() {
                global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
 
                parent::setUp();
@@ -30,7 +30,7 @@ class ApiEditPageTest extends ApiTestCase {
                $this->doLogin();
        }
 
-       public function tearDown() {
+       protected function tearDown() {
                global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
 
                unset( $wgExtraNamespaces[12312] );
@@ -126,6 +126,9 @@ class ApiEditPageTest extends ApiTestCase {
                $this->assertEquals( $data, $page->getContent()->serialize() );
        }
 
+       /**
+        * @return array
+        */
        public static function provideEditAppend() {
                return array(
                        array( #0: append
@@ -407,6 +410,10 @@ class ApiEditPageTest extends ApiTestCase {
                        "no edit conflict expected here" );
        }
 
+       /**
+        * @param WikiPage $page
+        * @param string|int $timestamp
+        */
        protected function forceRevisionDate( WikiPage $page, $timestamp ) {
                $dbw = wfGetDB( DB_MASTER );
 
index 6e5edbf..6659414 100644 (file)
@@ -99,6 +99,12 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                return true;
        }
 
+       /**
+        * @param IContextSource $context
+        * @param array|null $options
+        *
+        * @return array
+        */
        public function getOptionKinds( IContextSource $context, $options = null ) {
                // Match with above.
                $kinds = array(
index 7e18b6e..42f02fa 100644 (file)
@@ -29,7 +29,10 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
 
        /**
         * Helper function -- remove files and associated articles by Title
-        * @param $title Title: title to be removed
+        *
+        * @param Title $title title to be removed
+        *
+        * @return bool
         */
        public function deleteFileByTitle( $title ) {
                if ( $title->exists() ) {
@@ -53,7 +56,10 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
 
        /**
         * Helper function -- remove files and associated articles with a particular filename
-        * @param $fileName String: filename to be removed
+        *
+        * @param string $fileName filename to be removed
+        *
+        * @return bool
         */
        public function deleteFileByFileName( $fileName ) {
                return $this->deleteFileByTitle( Title::newFromText( $fileName, NS_FILE ) );
@@ -61,7 +67,10 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
 
        /**
         * Helper function -- given a file on the filesystem, find matching content in the db (and associated articles) and remove them.
-        * @param $filePath String: path to file on the filesystem
+        *
+        * @param string $filePath path to file on the filesystem
+        *
+        * @return bool
         */
        public function deleteFileByContent( $filePath ) {
                $hash = FSFile::getSha1Base36FromPath( $filePath );
@@ -77,10 +86,14 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
        /**
         * Fake an upload by dumping the file into temp space, and adding info to $_FILES.
         * (This is what PHP would normally do).
-        * @param $fieldName String: name this would have in the upload form
-        * @param $fileName String: name to title this
-        * @param $type String: mime type
-        * @param $filePath String: path where to find file contents
+        *
+        * @param string $fieldName name this would have in the upload form
+        * @param string $fileName name to title this
+        * @param string $type mime type
+        * @param string $filePath path where to find file contents
+        *
+        * @throws Exception
+        * @return bool
         */
        function fakeUploadFile( $fieldName, $fileName, $type, $filePath ) {
                $tmpName = tempnam( wfTempDir(), "" );
index 1540af5..ba7fb25 100644 (file)
@@ -3,6 +3,7 @@
 /**
  * @group API
  * @group Database
+ * @group medium
  */
 
 /**
@@ -95,7 +96,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $this->assertTrue( $exception, "Got exception" );
        }
 
-
        /**
         * @depends testLogin
         */
@@ -110,6 +110,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                        $this->markTestIncomplete( $e->getMessage() );
                }
 
+               /** @var array $filePaths */
                $filePath = $filePaths[0];
                $fileSize = filesize( $filePath );
                $fileName = basename( $filePath );
@@ -147,7 +148,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
                unlink( $filePath );
        }
 
-
        /**
         * @depends testLogin
         */
@@ -185,7 +185,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
                unlink( $filePath );
        }
 
-
        /**
         * @depends testLogin
         */
@@ -201,6 +200,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                }
 
                // we'll reuse this filename
+               /** @var array $filePaths */
                $fileName = basename( $filePaths[0] );
 
                // clear any other files with the same name
@@ -257,7 +257,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
                unlink( $filePaths[1] );
        }
 
-
        /**
         * @depends testLogin
         */
@@ -272,6 +271,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                        $this->markTestIncomplete( $e->getMessage() );
                }
 
+               /** @var array $filePaths */
                $fileNames[0] = basename( $filePaths[0] );
                $fileNames[1] = "SameContentAs" . $fileNames[0];
 
@@ -356,6 +356,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                        $this->markTestIncomplete( $e->getMessage() );
                }
 
+               /** @var array $filePaths */
                $filePath = $filePaths[0];
                $fileSize = filesize( $filePath );
                $fileName = basename( $filePath );
index 59756b2..1d534ee 100644 (file)
@@ -66,7 +66,6 @@ class RandomImageGenerator {
                )
        );
 
-
        public function __construct( $options = array() ) {
                foreach ( array( 'dictionaryFile', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight', 'shapesToDraw' ) as $property ) {
                        if ( isset( $options[$property] ) ) {
@@ -112,10 +111,13 @@ class RandomImageGenerator {
                return $filenames;
        }
 
-
        /**
         * Figure out how we write images. This is a factor of both format and the local system
-        * @param $format (a typical extension like 'svg', 'jpg', etc.)
+        *
+        * @param string $format (a typical extension like 'svg', 'jpg', etc.)
+        *
+        * @throws Exception
+        * @return string
         */
        function getImageWriteMethod( $format ) {
                global $wgUseImageMagick, $wgImageMagickConvertCommand;
@@ -159,7 +161,6 @@ class RandomImageGenerator {
                return $filenames;
        }
 
-
        /**
         * Generate data representing an image of random size (within limits),
         * consisting of randomly colored and sized upward pointing triangles against a random background color
@@ -222,9 +223,12 @@ class RandomImageGenerator {
        /**
         * Based on image specification, write a very simple SVG file to disk.
         * Ignores the background spec because transparency is cool. :)
-        * @param $spec: spec describing background and shapes to draw
-        * @param $format: file format to write (which is obviously always svg here)
-        * @param $filename: filename to write to
+        *
+        * @param array $spec spec describing background and shapes to draw
+        * @param string $format file format to write (which is obviously always svg here)
+        * @param string $filename filename to write to
+        *
+        * @throws Exception
         */
        public function writeSvg( $spec, $format, $filename ) {
                $svg = new SimpleXmlElement( '<svg/>' );
@@ -250,9 +254,9 @@ class RandomImageGenerator {
 
        /**
         * Based on an image specification, write such an image to disk, using Imagick PHP extension
-        * @param $spec: spec describing background and circles to draw
-        * @param $format: file format to write
-        * @param $filename: filename to write to
+        * @param array $spec spec describing background and circles to draw
+        * @param string $format file format to write
+        * @param string $filename filename to write to
         */
        public function writeImageWithApi( $spec, $format, $filename ) {
                // this is a hack because I can't get setImageOrientation() to work. See below.
@@ -307,7 +311,7 @@ class RandomImageGenerator {
         * This is used when simulating a rotated image capture with Exif orientation
         * @param $spec Object returned by getImageSpec
         * @param $matrix 2x2 transformation matrix
-        * @return transformed Spec
+        * @return array transformed Spec
         */
        private static function rotateImageSpec( &$spec, $matrix ) {
                $tSpec = array();
@@ -355,7 +359,6 @@ class RandomImageGenerator {
                );
        }
 
-
        /**
         * Based on an image specification, write such an image to disk, using the command line ImageMagick program ('convert').
         *
@@ -365,9 +368,12 @@ class RandomImageGenerator {
         *   -draw 'fill rgb(99,123,231) circle 59,39 56,57' \
         *   -draw 'fill rgb(240,12,32)  circle 50,21 50,3'  filename.png
         *
-        * @param $spec: spec describing background and shapes to draw
-        * @param $format: file format to write (unused by this method but kept so it has the same signature as writeImageWithApi)
-        * @param $filename: filename to write to
+        * @param array $spec spec describing background and shapes to draw
+        * @param string $format file format to write (unused by this method but kept so it has the same signature as
+        * writeImageWithApi)
+        * @param string $filename filename to write to
+        *
+        * @return bool
         */
        public function writeImageWithCommandLine( $spec, $format, $filename ) {
                global $wgImageMagickConvertCommand;
@@ -392,7 +398,7 @@ class RandomImageGenerator {
        /**
         * Generate a string of random colors for ImageMagick or SVG, like "rgb(12, 37, 98)"
         *
-        * @return {String}
+        * @return string
         */
        public function getRandomColor() {
                $components = array();
@@ -426,8 +432,10 @@ class RandomImageGenerator {
         *
         * Will throw exception if the file could not be read or if it had fewer lines than requested.
         *
-        * @param $number_desired Integer: number of lines desired
-        * @return Array: of exactly n elements, drawn randomly from lines the file
+        * @param int $number_desired number of lines desired
+        *
+        * @throws Exception
+        * @return array of exactly n elements, drawn randomly from lines the file
         */
        private function getRandomLines( $number_desired ) {
                $filepath = $this->dictionaryFile;
index a68c830..9c5b3ca 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 /**
- *
  *
  * Created on Feb 6, 2013
  *
@@ -35,6 +34,8 @@ require_once 'ApiQueryTestBase.php';
  * @covers ApiQuery
  */
 class ApiQueryBasicTest extends ApiQueryTestBase {
+       protected $exceptionFromAddDBData;
+
        /**
         * Create a set of pages. These must not change, otherwise the tests might give wrong results.
         * @see MediaWikiTestCase::addDBData()
@@ -130,6 +131,7 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
                ) )
        );
 
+       // Although this appears to have no use it is used by testLists()
        private static $allcategories = array(
                array( 'list' => 'allcategories', 'acprefix' => 'AQBT-' ),
                array( 'allcategories' => array(
@@ -236,6 +238,7 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
                $this->check( self::$alllinks );
                $this->check( self::$alltransclusions );
                // This test is temporarily disabled until a sqlite bug is fixed
+               // Confirmed still broken 15-nov-2013
                // $this->check( self::$allcategories );
                $this->check( self::$backlinks );
                $this->check( self::$embeddedin );
@@ -367,29 +370,30 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
 
        /**
         * Recursively compare arrays, ignoring mismatches in numeric key and pageids.
-        * @param $expected array expected values
-        * @param $result array returned values
+        *
+        * @param $expectedArray array expected values
+        * @param $resultArray array returned values
         */
-       private function assertQueryResults( $expected, $result ) {
-               reset( $expected );
-               reset( $result );
+       private function assertQueryResults( $expectedArray, $resultArray ) {
+               reset( $expectedArray );
+               reset( $resultArray );
                while ( true ) {
-                       $e = each( $expected );
-                       $r = each( $result );
+                       $expectedValue = each( $expectedArray );
+                       $resultValue = each( $resultArray );
                        // If either of the arrays is shorter, abort. If both are done, success.
-                       $this->assertEquals( (bool)$e, (bool)$r );
-                       if ( !$e ) {
+                       $this->assertEquals( (bool)$expectedValue, (bool)$resultValue );
+                       if ( !$expectedValue ) {
                                break; // done
                        }
                        // continue only if keys are identical or both keys are numeric
-                       $this->assertTrue( $e['key'] === $r['key'] || ( is_numeric( $e['key'] ) && is_numeric( $r['key'] ) ) );
+                       $this->assertTrue( $expectedValue['key'] === $resultValue['key'] || ( is_numeric( $expectedValue['key'] ) && is_numeric( $resultValue['key'] ) ) );
                        // don't compare pageids
-                       if ( $e['key'] !== 'pageid' ) {
+                       if ( $expectedValue['key'] !== 'pageid' ) {
                                // If values are arrays, compare recursively, otherwise compare with ===
-                               if ( is_array( $e['value'] ) && is_array( $r['value'] ) ) {
-                                       $this->assertQueryResults( $e['value'], $r['value'] );
+                               if ( is_array( $expectedValue['value'] ) && is_array( $resultValue['value'] ) ) {
+                                       $this->assertQueryResults( $expectedValue['value'], $resultValue['value'] );
                                } else {
-                                       $this->assertEquals( $e['value'], $r['value'] );
+                                       $this->assertEquals( $expectedValue['value'], $resultValue['value'] );
                                }
                        }
                }
index 2116cd3..347cd6f 100644 (file)
@@ -27,6 +27,8 @@ require_once 'ApiQueryContinueTestBase.php';
  * @covers ApiQuery
  */
 class ApiQueryContinue2Test extends ApiQueryContinueTestBase {
+       protected $exceptionFromAddDBData;
+
        /**
         * Create a set of pages. These must not change, otherwise the tests might give wrong results.
         * @see MediaWikiTestCase::addDBData()
index 7797522..0379790 100644 (file)
@@ -31,6 +31,8 @@ require_once 'ApiQueryContinueTestBase.php';
  * @covers ApiQuery
  */
 class ApiQueryContinueTest extends ApiQueryContinueTestBase {
+       protected $exceptionFromAddDBData;
+
        /**
         * Create a set of pages. These must not change, otherwise the tests might give wrong results.
         * @see MediaWikiTestCase::addDBData()
index 3b55b13..e7203c9 100644 (file)
@@ -110,6 +110,9 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
                } while ( true );
        }
 
+       /**
+        * @param array $data
+        */
        private function printResult( $data ) {
                $q = $data['query'];
                $print = array();
@@ -149,7 +152,8 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
        private static function GetItems( $q, $moduleName, $name, &$print ) {
                if ( isset( $q[$moduleName] ) ) {
                        $print[] = "*$name/[" . implode( ',',
-                               array_map( function ( $v ) {
+                               array_map(
+                                       function ( $v ) {
                                                return $v['title'];
                                        },
                                        $q[$moduleName] ) ) . ']';
index aedf594..d1c214a 100644 (file)
@@ -10,7 +10,7 @@
  */
 class ContentHandlerTest extends MediaWikiTestCase {
 
-       public function setUp() {
+       protected function setUp() {
                global $wgContLang;
                parent::setUp();
 
@@ -38,7 +38,7 @@ class ContentHandlerTest extends MediaWikiTestCase {
                $wgContLang->resetNamespaces();
        }
 
-       public function tearDown() {
+       protected function tearDown() {
                global $wgContLang;
 
                // Reset namespace cache
index 7c62dca..73b975b 100644 (file)
@@ -10,7 +10,7 @@ class WikitextContentHandlerTest extends MediaWikiLangTestCase {
         */
        var $handler;
 
-       public function setUp() {
+       protected function setUp() {
                parent::setUp();
 
                $this->handler = ContentHandler::getForModelID( CONTENT_MODEL_WIKITEXT );
index 58f2014..16dac94 100644 (file)
@@ -68,7 +68,6 @@ class DatabaseMysqlBaseTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $quoted );
        }
 
-
        /**
         * Feeds testAddIdentifierQuotes
         *
index df73000..91399be 100644 (file)
@@ -2,7 +2,6 @@
 
 class MWDebugTest extends MediaWikiTestCase {
 
-
        protected function setUp() {
                parent::setUp();
                // Make sure MWDebug class is enabled
index 5c3f36a..f95eb5e 100644 (file)
@@ -16,7 +16,7 @@ class DifferenceEngineTest extends MediaWikiTestCase {
 
        private static $revisions;
 
-       public function setUp() {
+       protected function setUp() {
                parent::setUp();
 
                $title = $this->getTitle();
diff --git a/tests/phpunit/includes/jobqueue/RefreshLinksPartitionTest.php b/tests/phpunit/includes/jobqueue/RefreshLinksPartitionTest.php
new file mode 100644 (file)
index 0000000..531a954
--- /dev/null
@@ -0,0 +1,101 @@
+<?php
+
+/**
+ * @group JobQueue
+ * @group medium
+ * @group Database
+ */
+class RefreshLinksPartitionTest extends MediaWikiTestCase {
+       function __construct( $name = null, array $data = array(), $dataName = '' ) {
+               parent::__construct( $name, $data, $dataName );
+
+               $this->tablesUsed[] = 'page';
+               $this->tablesUsed[] = 'revision';
+               $this->tablesUsed[] = 'pagelinks';
+       }
+
+       /**
+        * @dataProvider provider_backlinks
+        */
+       public function testRefreshLinks( $ns, $dbKey, $pages ) {
+               $title = Title::makeTitle( $ns, $dbKey );
+
+               $dbw = wfGetDB( DB_MASTER );
+
+               $rows = array();
+               foreach ( $pages as $page ) {
+                       list( $bns, $bdbkey ) = $page;
+                       $bpage = WikiPage::factory( Title::makeTitle( $bns, $bdbkey ) );
+                       $content = ContentHandler::makeContent( "[[{$title->getPrefixedText()}]]", $bpage->getTitle() );
+                       $bpage->doEditContent( $content, "test" );
+               }
+
+               $title->getBacklinkCache()->clear();
+               $this->assertEquals( 20, $title->getBacklinkCache()->getNumLinks( 'pagelinks' ), 'Correct number of backlinks' );
+
+               $job = new RefreshLinksJob( $title, array( 'recursive' => true, 'table' => 'pagelinks' )
+                       + Job::newRootJobParams( "refreshlinks:pagelinks:{$title->getPrefixedText()}" ) );
+               $extraParams = $job->getRootJobParams();
+               $jobs = BacklinkJobUtils::partitionBacklinkJob( $job, 9, 1, array( 'params' => $extraParams ) );
+
+               $this->assertEquals( 10, count( $jobs ), 'Correct number of sub-jobs' );
+               $this->assertEquals( $pages[0], current( $jobs[0]->params['pages'] ),
+                       'First job is leaf job with proper title' );
+               $this->assertEquals( $pages[8], current( $jobs[8]->params['pages'] ),
+                       'Last leaf job is leaf job with proper title' );
+               $this->assertEquals( true, isset( $jobs[9]->params['recursive'] ),
+                       'Last job is recursive sub-job' );
+               $this->assertEquals( true, $jobs[9]->params['recursive'],
+                       'Last job is recursive sub-job' );
+               $this->assertEquals( true, is_array( $jobs[9]->params['range'] ),
+                       'Last job is recursive sub-job' );
+               $this->assertEquals( $title->getPrefixedText(), $jobs[0]->getTitle()->getPrefixedText(),
+                       'Base job title retainend in leaf job' );
+               $this->assertEquals( $title->getPrefixedText(), $jobs[9]->getTitle()->getPrefixedText(),
+                       'Base job title retainend recursive sub-job' );
+               $this->assertEquals( $extraParams['rootJobSignature'], $jobs[0]->params['rootJobSignature'],
+                       'Leaf job has root params' );
+               $this->assertEquals( $extraParams['rootJobSignature'], $jobs[9]->params['rootJobSignature'],
+                       'Recursive sub-job has root params' );
+
+               $jobs2 = BacklinkJobUtils::partitionBacklinkJob( $jobs[9], 9, 1, array( 'params' => $extraParams ) );
+
+               $this->assertEquals( 10, count( $jobs2 ), 'Correct number of sub-jobs' );
+               $this->assertEquals( $pages[9], current( $jobs2[0]->params['pages'] ),
+                       'First job is leaf job with proper title' );
+               $this->assertEquals( $pages[17], current( $jobs2[8]->params['pages'] ),
+                       'Last leaf job is leaf job with proper title' );
+               $this->assertEquals( true, isset( $jobs2[9]->params['recursive'] ),
+                       'Last job is recursive sub-job' );
+               $this->assertEquals( true, $jobs2[9]->params['recursive'],
+                       'Last job is recursive sub-job' );
+               $this->assertEquals( true, is_array( $jobs2[9]->params['range'] ),
+                       'Last job is recursive sub-job' );
+               $this->assertEquals( $extraParams['rootJobSignature'], $jobs2[0]->params['rootJobSignature'],
+                       'Leaf job has root params' );
+               $this->assertEquals( $extraParams['rootJobSignature'], $jobs2[9]->params['rootJobSignature'],
+                       'Recursive sub-job has root params' );
+
+               $jobs3 = BacklinkJobUtils::partitionBacklinkJob( $jobs2[9], 9, 1, array( 'params' => $extraParams ) );
+
+               $this->assertEquals( 2, count( $jobs3 ), 'Correct number of sub-jobs' );
+               $this->assertEquals( $pages[18], current( $jobs3[0]->params['pages'] ),
+                       'First job is leaf job with proper title' );
+               $this->assertEquals( $extraParams['rootJobSignature'], $jobs3[0]->params['rootJobSignature'],
+                       'Leaf job has root params' );
+               $this->assertEquals( $pages[19], current( $jobs3[1]->params['pages'] ),
+                       'Last job is leaf job with proper title' );
+               $this->assertEquals( $extraParams['rootJobSignature'], $jobs3[1]->params['rootJobSignature'],
+                       'Last leaf job has root params' );
+       }
+
+       public static function provider_backlinks() {
+               $pages = array();
+               for ( $i = 0; $i < 20; ++$i ) {
+                       $pages[] = array( 0, "Page-$i" );
+               }
+               return array(
+                       array( 10, 'Bang', $pages )
+               );
+       }
+}
index 43df5eb..5bbc3a5 100644 (file)
@@ -69,6 +69,8 @@ class CSSMinTest extends MediaWikiTestCase {
        }
 
        /**
+        * This tests funky parameters to CSSMin::remap. testRemapRemapping tests the basic functionality.
+        *
         * @dataProvider provideRemapCases
         * @covers CSSMin::remap
         */
@@ -111,6 +113,114 @@ class CSSMinTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * This tests basic functionality of CSSMin::remap. testRemapRemapping tests funky parameters.
+        *
+        * @dataProvider provideRemapRemappingCases
+        * @covers CSSMin::remap
+        */
+       public function testRemapRemapping( $message, $input, $expectedOutput ) {
+               $localPath = __DIR__ . '/../../data/cssmin/';
+               $remotePath = 'http://localhost/w/';
+
+               $realOutput = CSSMin::remap( $input, $localPath, $remotePath );
+
+               $this->assertEquals(
+                       $expectedOutput,
+                       preg_replace( '/\d+-\d+-\d+T\d+:\d+:\d+Z/', 'timestamp', $realOutput ),
+                       "CSSMin::remap: $message"
+               );
+       }
+
+       public static function provideRemapRemappingCases() {
+               // red.gif and green.gif are one-pixel 35-byte GIFs.
+               // large.png is a 35K PNG that should be non-embeddable.
+               // Full paths start with http://localhost/w/.
+               // Timestamps in output are replaced with 'timestamp'.
+
+               // data: URIs for red.gif and green.gif
+               $red   = 'data:image/gif;base64,R0lGODlhAQABAIAAAP8AADAAACwAAAAAAQABAAACAkQBADs=';
+               $green = 'data:image/gif;base64,R0lGODlhAQABAIAAAACAADAAACwAAAAAAQABAAACAkQBADs=';
+
+               return array(
+                       array(
+                               'Regular file',
+                               'foo { background: url(red.gif); }',
+                               'foo { background: url(http://localhost/w/red.gif?timestamp); }',
+                       ),
+                       array(
+                               'Remote URL',
+                               'foo { background: url(http://example.org/w/foo.png); }',
+                               'foo { background: url(http://example.org/w/foo.png); }',
+                       ),
+                       array(
+                               'Embedded file',
+                               'foo { /* @embed */ background: url(red.gif); }',
+                               "foo { background: url($red); background: url(http://localhost/w/red.gif?timestamp)!ie; }",
+                       ),
+                       array(
+                               'Can not embed remote URLs',
+                               'foo { /* @embed */ background: url(http://example.org/w/foo.png); }',
+                               'foo { background: url(http://example.org/w/foo.png); }',
+                       ),
+                       array(
+                               'Embedded file (inline @embed)',
+                               'foo { background: /* @embed */ url(red.gif); }',
+                               "foo { background: url($red); background: url(http://localhost/w/red.gif?timestamp)!ie; }",
+                       ),
+                       array(
+                               'Can not embed large files',
+                               'foo { /* @embed */ background: url(large.png); }',
+                               "foo { background: url(http://localhost/w/large.png?timestamp); }",
+                       ),
+                       array(
+                               'Two regular files in one rule',
+                               'foo { background: url(red.gif), url(green.gif); }',
+                               'foo { background: url(http://localhost/w/red.gif?timestamp), url(http://localhost/w/green.gif?timestamp); }',
+                       ),
+                       array(
+                               'Two embedded files in one rule',
+                               'foo { /* @embed */ background: url(red.gif), url(green.gif); }',
+                               "foo { background: url($red), url($green); background: url(http://localhost/w/red.gif?timestamp), url(http://localhost/w/green.gif?timestamp)!ie; }",
+                       ),
+                       array(
+                               'Two embedded files in one rule (inline @embed)',
+                               'foo { background: /* @embed */ url(red.gif), /* @embed */ url(green.gif); }',
+                               "foo { background: url($red), url($green); background: url(http://localhost/w/red.gif?timestamp), url(http://localhost/w/green.gif?timestamp)!ie; }",
+                       ),
+                       array(
+                               'Two embedded files in one rule (inline @embed), one too large',
+                               'foo { background: /* @embed */ url(red.gif), /* @embed */ url(large.png); }',
+                               "foo { background: url($red), url(http://localhost/w/large.png?timestamp); background: url(http://localhost/w/red.gif?timestamp), url(http://localhost/w/large.png?timestamp)!ie; }",
+                       ),
+                       array(
+                               'Practical example with some noise',
+                               'foo { /* @embed */ background: #f9f9f9 url(red.gif) 0 0 no-repeat; }',
+                               "foo { background: #f9f9f9 url($red) 0 0 no-repeat; background: #f9f9f9 url(http://localhost/w/red.gif?timestamp) 0 0 no-repeat!ie; }",
+                       ),
+                       array(
+                               'Does not mess with other properties',
+                               'foo { color: red; background: url(red.gif); font-size: small; }',
+                               'foo { color: red; background: url(http://localhost/w/red.gif?timestamp); font-size: small; }',
+                       ),
+                       array(
+                               'Spacing and miscellanea not changed (1)',
+                               'foo {   background:    url(red.gif);  }',
+                               'foo {   background:    url(http://localhost/w/red.gif?timestamp);  }',
+                       ),
+                       array(
+                               'Spacing and miscellanea not changed (2)',
+                               'foo {background:url(red.gif)}',
+                               'foo {background:url(http://localhost/w/red.gif?timestamp)}',
+                       ),
+                       array(
+                               'Spaces within url() parentheses are ignored',
+                               'foo { background: url( red.gif ); }',
+                               'foo { background: url(http://localhost/w/red.gif?timestamp); }',
+                       ),
+               );
+       }
+
        /**
         * Seperated because they are currently broken (bug 35492)
         *
index 64276d9..f4f4154 100644 (file)
@@ -210,7 +210,6 @@ class ExifRotationTest extends MediaWikiTestCase {
                );
        }
 
-
        const TEST_WIDTH = 100;
        const TEST_HEIGHT = 200;
 
index 4cd2e8e..667c078 100644 (file)
@@ -16,8 +16,6 @@ class ExifTest extends MediaWikiTestCase {
 
                $this->mediaPath = __DIR__ . '/../../data/media/';
 
-
-
                $this->setMwGlobals( 'wgShowEXIF', true );
        }
 
index 6d1d681..7ffde3b 100644 (file)
@@ -80,7 +80,6 @@ class JpegMetadataExtractorTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $res['XMP'] );
        }
 
-
        public function testIPTCHashComparisionNoHash() {
                $segments = JpegMetadataExtractor::segmentSplitter( $this->filePath . 'jpeg-xmp-psir.jpg' );
                $res = JpegMetadataExtractor::doPSIR( $segments['PSIR'][0] );
index 5157228..bff64bb 100644 (file)
@@ -14,7 +14,6 @@ class JpegTest extends MediaWikiTestCase {
 
                $this->filePath = __DIR__ . '/../../data/media/';
 
-
                $this->setMwGlobals( 'wgShowEXIF', true );
 
                $this->backend = new FSFileBackend( array(
index 33a03a2..84deb1b 100644 (file)
@@ -121,7 +121,6 @@ class PNGMetadataExtractorTest extends MediaWikiTestCase {
                $this->assertEquals( 1, $meta['bitDepth'] );
        }
 
-
        public function testPngIndexColour() {
                $meta = PNGMetadataExtractor::getMetadata( $this->filePath .
                        'Png-native-test.png' );
index b28ee56..e0fae71 100644 (file)
@@ -1,5 +1,6 @@
 <?php
-class SVGTest extends MediaWikiTestCase {
+
+class SvgTest extends MediaWikiTestCase {
 
        protected function setUp() {
                parent::setUp();
@@ -19,7 +20,7 @@ class SVGTest extends MediaWikiTestCase {
                        'backend' => $this->backend
                ) );
 
-               $this->handler = new SVGHandler;
+               $this->handler = new SvgHandler;
        }
 
        /**
index d2ab4d3..12aac69 100644 (file)
@@ -4,7 +4,8 @@
  * @group Parser
  */
 class TidyTest extends MediaWikiTestCase {
-       public function setUp() {
+
+       protected function setUp() {
                parent::setUp();
                $check = MWTidy::tidy( '' );
                if ( strpos( $check, '<!--' ) !== false ) {
index 17e883f..4ccf5d7 100644 (file)
@@ -46,12 +46,12 @@ class SpecialSearchTest extends MediaWikiTestCase {
                        array( /** Expected: */
                                'ProfileName' => $expectedProfile,
                                'Namespaces' => $expectedNS,
-                       )
-                       array( /** Actual: */
+                       ),
+                       array( /** Actual: */
                                'ProfileName' => $search->getProfile(),
                                'Namespaces' => $search->getNamespaces(),
-                       )
-                       $message
+                       ),
+                       $message
                );
        }
 
index 982b46b..4f17601 100644 (file)
@@ -26,7 +26,6 @@ class UploadBaseTest extends MediaWikiTestCase {
                parent::tearDown();
        }
 
-
        /**
         * First checks the return code
         * of UploadBase::getTitle() and then the actual returned title
index f0203d4..34ffb53 100644 (file)
@@ -67,7 +67,6 @@ class ZipDirectoryReaderTest extends MediaWikiTestCase {
                        'Wrong CD start disk error' );
        }
 
-
        public function testCentralDirectoryGap() {
                $this->readZipAssertError( 'cd-gap.zip', 'zip-bad',
                        'CD gap error' );
index d5822f4..97a17ec 100644 (file)
@@ -79,12 +79,13 @@ class LanguageBe_taraskTest extends LanguageClassesTestCase {
         * @covers Language::convertPlural
         */
        public function testPluralTwoForms( $result, $value ) {
-               $forms = array( 'one', 'other' );
+               $forms = array( 'one', 'other', '0=one' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
        public static function providePluralTwoForms() {
                return array(
+                       array( 'one', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 11 ),
                        array( 'other', 91 ),
index ab4d4ab..f551248 100644 (file)
@@ -225,7 +225,6 @@ class LanguageSrTest extends LanguageClassesTestCase {
                $this->assertConverted( $text, 'sr-ec', $msg );
        }
 
-
        /** Wrapper for converter::convertTo() method*/
        protected function convertTo( $text, $variant ) {
                return $this->getLang()
index aa09def..e958fde 100644 (file)
@@ -1134,7 +1134,6 @@ class LanguageTest extends LanguageClassesTestCase {
                );
        }
 
-
        /**
         * @dataProvider provideFormatDuration
         * @covers Language::formatDuration
@@ -1487,13 +1486,14 @@ class LanguageTest extends LanguageClassesTestCase {
 
        public static function provideCommafyData() {
                return array(
-                       array( 1, '1' ),
+                       array( -1, '-1' ),
                        array( 10, '10' ),
                        array( 100, '100' ),
                        array( 1000, '1,000' ),
                        array( 10000, '10,000' ),
                        array( 100000, '100,000' ),
                        array( 1000000, '1,000,000' ),
+                       array( -1.0001, '-1.0001' ),
                        array( 1.0001, '1.0001' ),
                        array( 10.0001, '10.0001' ),
                        array( 100.0001, '100.0001' ),
@@ -1501,6 +1501,8 @@ class LanguageTest extends LanguageClassesTestCase {
                        array( 10000.0001, '10,000.0001' ),
                        array( 100000.0001, '100,000.0001' ),
                        array( 1000000.0001, '1,000,000.0001' ),
+                       array( '200000000000000000000', '200,000,000,000,000,000,000' ),
+                       array( '-200000000000000000000', '-200,000,000,000,000,000,000' ),
                );
        }
 
index 0783fcf..1d81bc5 100644 (file)
@@ -17,6 +17,17 @@ class LanguageUkTest extends LanguageClassesTestCase {
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
+       /**
+        * Test explicit plural forms - n=FormN forms
+        * @covers Language::convertPlural
+        */
+       public function testExplicitPlural() {
+               $forms = array( 'one', 'few', 'many', 'other', '12=dozen' );
+               $this->assertEquals( 'dozen', $this->getLang()->convertPlural( 12, $forms ) );
+               $forms = array( 'one', 'few', 'many', '100=hundred', 'other', '12=dozen' );
+               $this->assertEquals( 'hundred', $this->getLang()->convertPlural( 100, $forms ) );
+       }
+
        /**
         * @dataProvider providePlural
         * @covers Language::getPluralRuleType
index 13f57c1..8cd3a6a 100644 (file)
@@ -105,7 +105,6 @@ class LanguageUzTest extends LanguageClassesTestCase {
                $this->assertConverted( $text, 'uz-cyrl', $msg );
        }
 
-
        /** Wrapper for converter::convertTo() method*/
        protected function convertTo( $text, $variant ) {
                return $this->getLang()->mConverter->convertTo( $text, $variant );
index 7b3fb68..6abd09f 100644 (file)
@@ -26,7 +26,7 @@ class CLDRPluralRuleEvaluatorTest extends MediaWikiTestCase {
 
        function validTestCases() {
                $tests = array(
-                       # expected, number, rule, comment
+                       # expected, rule, number, comment
                        array( 0, 'n is 1', 1, 'integer number and is' ),
                        array( 0, 'n is 1', "1", 'string integer number and is' ),
                        array( 0, 'n is 1', 1.0, 'float number and is' ),
index 83d8c71..6950fa3 100644 (file)
@@ -48,7 +48,6 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                throw new MWException( "Could not determine revision id (" . $status->getWikiText() . ")" );
        }
 
-
        /**
         * gunzips the given file and stores the result in the original file name
         *
@@ -110,7 +109,6 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                }
        }
 
-
        /**
         * Step the current XML reader until node end of given name is found.
         *
@@ -230,7 +228,6 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                }
        }
 
-
        /**
         * Asserts that the xml reader is at an element of given tag that contains a given text,
         * and skips over the element.
index 83d7701..2a5bd5f 100644 (file)
@@ -111,7 +111,6 @@ class MaintenanceFixup extends Maintenance {
                $this->testCase = $testCase;
        }
 
-
        // --- Making protected functions visible for test
 
        public function output( $out, $channel = null ) {
@@ -122,7 +121,6 @@ class MaintenanceFixup extends Maintenance {
                return call_user_func_array( array( "parent", __FUNCTION__ ), func_get_args() );
        }
 
-
        // --- Requirements for getting instance of abstract class
 
        public function execute() {
@@ -135,7 +133,6 @@ class MaintenanceFixup extends Maintenance {
  */
 class MaintenanceTest extends MediaWikiTestCase {
 
-
        /**
         * The main Maintenance instance that is used for testing.
         *
@@ -143,7 +140,6 @@ class MaintenanceTest extends MediaWikiTestCase {
         */
        private $m;
 
-
        protected function setUp() {
                parent::setUp();
                $this->m = new MaintenanceFixup( $this );
@@ -157,7 +153,6 @@ class MaintenanceTest extends MediaWikiTestCase {
                parent::tearDown();
        }
 
-
        /**
         * asserts the output before and after simulating shutdown
         *
@@ -182,7 +177,6 @@ class MaintenanceTest extends MediaWikiTestCase {
                $this->expectOutputString( $postShutdownOutput );
        }
 
-
        // Although the following tests do not seem to be too consistent (compare for
        // example the newlines within the test.*StringString tests, or the
        // test.*Intermittent.* tests), the objective of these tests is not to describe
index 0f36bc4..adf026c 100644 (file)
@@ -137,7 +137,6 @@ class BaseDumpTest extends MediaWikiTestCase {
                $this->assertPrefetchEquals( "BackupDumperTestP2Text1", 2, 2 );
        }
 
-
        /**
         * Constructs a temporary file that can be used for prefetching
         *
index 15a928e..8a297b1 100644 (file)
@@ -418,7 +418,6 @@ class TextPassDumperTest extends DumpTestCase {
                $this->checkpointHelper( "gzip" );
        }
 
-
        /**
         * Creates a stub file that is used for testing the text pass of dumps
         *
index 438281d..5640b8d 100644 (file)
@@ -8,7 +8,6 @@
  */
 class BackupDumperLoggerTest extends DumpTestCase {
 
-
        // We'll add several log entries and users for this test. The following
        // variables hold the corresponding ids.
        private $userId1, $userId2;
@@ -85,7 +84,6 @@ class BackupDumperLoggerTest extends DumpTestCase {
                }
        }
 
-
        /**
         * asserts that the xml reader is at the beginning of a log entry and skips over
         * it while analyzing it.
index c6094d9..6963601 100644 (file)
@@ -272,7 +272,6 @@ class BackupDumperPageTest extends DumpTestCase {
                $this->assertDumpEnd();
        }
 
-
        function testXmlDumpsBackupUseCase() {
                // xmldumps-backup typically performs a single dump that that writes
                // out three files
index 42792d5..dd80840 100644 (file)
@@ -25,7 +25,6 @@ class SemiMockedFetchText extends FetchText {
         */
        private $mockInvocations = array( 'getStdin' => 0 );
 
-
        /**
         * Data for the fake stdin
         *
@@ -82,7 +81,6 @@ class FetchTextTest extends MediaWikiTestCase {
        private $textId4;
        private $textId5;
 
-
        /**
         * @var Exception|null As the current MediaWikiTestCase::run is not
         * robust enough to recover from thrown exceptions directly, we cannot
@@ -119,7 +117,6 @@ class FetchTextTest extends MediaWikiTestCase {
                throw new MWException( "Could not determine text id" );
        }
 
-
        function addDBData() {
                $this->tablesUsed[] = 'page';
                $this->tablesUsed[] = 'revision';
@@ -145,7 +142,6 @@ class FetchTextTest extends MediaWikiTestCase {
                }
        }
 
-
        protected function setUp() {
                parent::setUp();
 
@@ -157,7 +153,6 @@ class FetchTextTest extends MediaWikiTestCase {
                $this->fetchText = new SemiMockedFetchText();
        }
 
-
        /**
         * Helper to relate FetchText's input and output
         */
@@ -170,7 +165,6 @@ class FetchTextTest extends MediaWikiTestCase {
                $this->expectOutputString( $expectedOutput );
        }
 
-
        // Instead of the following functions, a data provider would be great.
        // However, as data providers are evaluated /before/ addDBData, a data
        // provider would not know the required ids.
index a385320..7d33a59 100644 (file)
@@ -90,6 +90,11 @@ class SideBarTest extends MediaWikiLangTestCase {
         * @covers SkinTemplate::addToSidebarPlain
         */
        public function testExternalUrlsRequireADescription() {
+               $this->setMwGlobals( array(
+                       'wgNoFollowLinks' => true,
+                       'wgNoFollowDomainExceptions' => array(),
+                       'wgNoFollowNsExceptions' => array(),
+               ) );
                $this->assertSidebar(
                        array( 'Title' => array(
                                # ** http://www.mediawiki.org/| Home
@@ -144,7 +149,6 @@ class SideBarTest extends MediaWikiLangTestCase {
                );
        }
 
-
        #### Attributes for external links ##########################
        private function getAttribs() {
                # Sidebar text we will use everytime
@@ -163,6 +167,8 @@ class SideBarTest extends MediaWikiLangTestCase {
        public function testTestAttributesAssertionHelper() {
                $this->setMwGlobals( array(
                        'wgNoFollowLinks' => true,
+                       'wgNoFollowDomainExceptions' => array(),
+                       'wgNoFollowNsExceptions' => array(),
                        'wgExternalLinkTarget' => false,
                ) );
                $attribs = $this->getAttribs();
index 746cb70..cce1b7e 100644 (file)
@@ -193,7 +193,6 @@ class ResourcesTest extends MediaWikiTestCase {
                        }
                }
 
-
                return $cases;
        }
 }
index c874375..01fedc8 100644 (file)
@@ -19,6 +19,7 @@ return array(
                        'tests/qunit/suites/resources/jquery/jquery.localize.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js',
+                       'tests/qunit/suites/resources/jquery/jquery.placeholder.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.tabIndex.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.textSelection.test.js',
@@ -49,6 +50,7 @@ return array(
                        'jquery.localize',
                        'jquery.makeCollapsible',
                        'jquery.mwExtension',
+                       'jquery.placeholder',
                        'jquery.tabIndex',
                        'jquery.tablesorter',
                        'jquery.textSelection',
index 6da56ed..3c508d4 100644 (file)
                $toggle.trigger( 'click' );
        } );
 
+       function tableWithCaptionTest( $collapsible, assert ) {
+               var $caption, $headerRow, $contentRow, $toggle;
+
+               $caption = $collapsible.find( 'caption' );
+               $headerRow = $collapsible.find( 'tr:first' );
+               $contentRow = $collapsible.find( 'tr:last' );
+
+               $toggle = $caption.find( '.mw-collapsible-toggle' );
+               assert.equal( $toggle.length, 1, 'toggle is added to the end of the caption' );
+
+               assert.assertTrue( $caption.is( ':visible' ), 'caption is visible' );
+               assert.assertTrue( $headerRow.is( ':visible' ), 'headerRow is visible' );
+               assert.assertTrue( $contentRow.is( ':visible' ), 'contentRow is visible' );
+
+               $collapsible.on( 'afterCollapse.mw-collapsible', function () {
+                       assert.assertTrue( $caption.is( ':visible' ), 'after collapsing: caption is still visible' );
+                       assert.assertTrue( $headerRow.is( ':hidden' ), 'after collapsing: headerRow is hidden' );
+                       assert.assertTrue( $contentRow.is( ':hidden' ), 'after collapsing: contentRow is hidden' );
+
+                       $collapsible.on( 'afterExpand.mw-collapsible', function () {
+                               assert.assertTrue( $caption.is( ':visible' ), 'after expanding: caption is still visible' );
+                               assert.assertTrue( $headerRow.is( ':visible' ), 'after expanding: headerRow is visible' );
+                               assert.assertTrue( $contentRow.is( ':visible' ), 'after expanding: contentRow is visible' );
+                               QUnit.start();
+                       } );
+
+                       $toggle.trigger( 'click' );
+               } );
+
+               $toggle.trigger( 'click' );
+       }
+
+       QUnit.asyncTest( 'basic operation (<table> with caption)', 10, function ( assert ) {
+               tableWithCaptionTest( prepareCollapsible(
+                       '<table class="mw-collapsible">' +
+                               '<caption>' + loremIpsum + '</caption>' +
+                               '<tr><th>' + loremIpsum + '</th><th>' + loremIpsum + '</th></tr>' +
+                               '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
+                               '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
+                       '</table>'
+               ), assert );
+       } );
+
+       QUnit.asyncTest( 'basic operation (<table> with caption and <thead>)', 10, function ( assert ) {
+               tableWithCaptionTest( prepareCollapsible(
+                       '<table class="mw-collapsible">' +
+                               '<caption>' + loremIpsum + '</caption>' +
+                               '<thead><tr><th>' + loremIpsum + '</th><th>' + loremIpsum + '</th></tr></thead>' +
+                               '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
+                               '<tr><td>' + loremIpsum + '</td><td>' + loremIpsum + '</td></tr>' +
+                       '</table>'
+               ), assert );
+       } );
+
        function listTest( listType, assert ) {
                var $collapsible, $toggleItem, $contentItem, $toggle;
                $collapsible = prepareCollapsible(
diff --git a/tests/qunit/suites/resources/jquery/jquery.placeholder.test.js b/tests/qunit/suites/resources/jquery/jquery.placeholder.test.js
new file mode 100644 (file)
index 0000000..ca0ea67
--- /dev/null
@@ -0,0 +1,145 @@
+(function($) {
+
+       QUnit.module('jquery.placeholder', QUnit.newMwEnvironment());
+
+       QUnit.test('caches results of feature tests', 2, function(assert) {
+               assert.strictEqual(typeof $.fn.placeholder.input, 'boolean', '$.fn.placeholder.input');
+               assert.strictEqual(typeof $.fn.placeholder.textarea, 'boolean', '$.fn.placeholder.textarea');
+       });
+
+       if ($.fn.placeholder.input && $.fn.placeholder.textarea) {
+               return;
+       }
+
+       var html = '<form>' +
+                       '<input id="input-type-search" type="search" placeholder="Search this site...">' +
+                       '<input id="input-type-text" type="text" placeholder="e.g. John Doe">' +
+                       '<input id="input-type-email" type="email" placeholder="e.g. address@example.ext">' +
+                       '<input id="input-type-url" type="url" placeholder="e.g. http://mathiasbynens.be/">' +
+                       '<input id="input-type-tel" type="tel" placeholder="e.g. +32 472 77 69 88">' +
+                       '<input id="input-type-password" type="password" placeholder="e.g. hunter2">' +
+                       '<textarea id="textarea" name="message" placeholder="Your message goes here"></textarea>' +
+               '</form>',
+       testElement = function($el, assert) {
+
+               var el = $el[0],
+                       placeholder = el.getAttribute('placeholder');
+
+               assert.strictEqual($el.placeholder(), $el, 'should be chainable');
+
+               assert.strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`');
+               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
+               assert.strictEqual($el.val(), '', 'valHooks works properly');
+               assert.ok($el.hasClass('placeholder'), 'should have `placeholder` class');
+
+               // test on focus
+               $el.focus();
+               assert.strictEqual(el.value, '', '`value` should be the empty string on focus');
+               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
+               assert.strictEqual($el.val(), '', 'valHooks works properly');
+               assert.ok(!$el.hasClass('placeholder'), 'should not have `placeholder` class on focus');
+
+               // and unfocus (blur) again
+               $el.blur();
+
+               assert.strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`');
+               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
+               assert.strictEqual($el.val(), '', 'valHooks works properly');
+               assert.ok($el.hasClass('placeholder'), 'should have `placeholder` class');
+
+               // change the value
+               $el.val('lorem ipsum');
+               assert.strictEqual($el.prop('value'), 'lorem ipsum', '`$el.val(string)` should change the `value` property');
+               assert.strictEqual(el.value, 'lorem ipsum', '`$el.val(string)` should change the `value` attribute');
+               assert.ok(!$el.hasClass('placeholder'), '`$el.val(string)` should remove `placeholder` class');
+
+               // and clear it again
+               $el.val('');
+               assert.strictEqual($el.prop('value'), '', '`$el.val("")` should change the `value` property');
+               assert.strictEqual(el.value, placeholder, '`$el.val("")` should change the `value` attribute');
+               assert.ok($el.hasClass('placeholder'), '`$el.val("")` should re-enable `placeholder` class');
+
+               // make sure the placeholder property works as expected.
+               assert.strictEqual($el.prop('placeholder'), placeholder, '$el.prop(`placeholder`) should return the placeholder value');
+               $el.placeholder('new placeholder');
+               assert.strictEqual(el.getAttribute('placeholder'), 'new placeholder', '$el.placeholder(<string>) should set the placeholder value');
+               assert.strictEqual(el.value, 'new placeholder', '$el.placeholder(<string>) should update the displayed placeholder value');
+               $el.placeholder(placeholder);
+       };
+
+       QUnit.test('emulates placeholder for <input type=text>', 22, function(assert) {
+               $('<div>').html(html).appendTo($('#qunit-fixture'));
+               testElement($('#input-type-text'), assert);
+       });
+
+       QUnit.test('emulates placeholder for <input type=search>', 22, function(assert) {
+               $('<div>').html(html).appendTo($('#qunit-fixture'));
+               testElement($('#input-type-search'), assert);
+       });
+
+       QUnit.test('emulates placeholder for <input type=email>', 22, function(assert) {
+               $('<div>').html(html).appendTo($('#qunit-fixture'));
+               testElement($('#input-type-email'), assert);
+       });
+
+       QUnit.test('emulates placeholder for <input type=url>', 22, function(assert) {
+               $('<div>').html(html).appendTo($('#qunit-fixture'));
+               testElement($('#input-type-url'), assert);
+       });
+
+       QUnit.test('emulates placeholder for <input type=tel>', 22, function(assert) {
+               $('<div>').html(html).appendTo($('#qunit-fixture'));
+               testElement($('#input-type-tel'), assert);
+       });
+
+       QUnit.test('emulates placeholder for <input type=password>', 13, function(assert) {
+               $('<div>').html(html).appendTo($('#qunit-fixture'));
+
+               var selector = '#input-type-password',
+                       $el = $(selector),
+                       el = $el[0],
+                       placeholder = el.getAttribute('placeholder');
+
+               assert.strictEqual($el.placeholder(), $el, 'should be chainable');
+
+               // Re-select the element, as it gets replaced by another one in some browsers
+               $el = $(selector);
+               el = $el[0];
+
+               assert.strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`');
+               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
+               assert.strictEqual($el.val(), '', 'valHooks works properly');
+               assert.ok($el.hasClass('placeholder'), 'should have `placeholder` class');
+
+               // test on focus
+               $el.focus();
+
+               // Re-select the element, as it gets replaced by another one in some browsers
+               $el = $(selector);
+               el = $el[0];
+
+               assert.strictEqual(el.value, '', '`value` should be the empty string on focus');
+               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
+               assert.strictEqual($el.val(), '', 'valHooks works properly');
+               assert.ok(!$el.hasClass('placeholder'), 'should not have `placeholder` class on focus');
+
+               // and unfocus (blur) again
+               $el.blur();
+
+               // Re-select the element, as it gets replaced by another one in some browsers
+               $el = $(selector);
+               el = $el[0];
+
+               assert.strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`');
+               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
+               assert.strictEqual($el.val(), '', 'valHooks works properly');
+               assert.ok($el.hasClass('placeholder'), 'should have `placeholder` class');
+
+       });
+
+       QUnit.test('emulates placeholder for <textarea></textarea>', 22, function(assert) {
+               $('<div>').html(html).appendTo($('#qunit-fixture'));
+               testElement($('#textarea'), assert);
+       });
+
+}(jQuery));
index f0bb0fc..cb0bf69 100644 (file)
 
        } );
 
-       QUnit.test( 'getUrl', 2, function ( assert ) {
+       QUnit.test( 'getUrl', 3, function ( assert ) {
                var title;
 
                // Config
                mw.config.set( 'wgArticlePath', '/wiki/$1' );
 
                title = new mw.Title( 'Foobar' );
-               assert.equal( title.getUrl(), '/wiki/Foobar', 'Basic functionally, getUrl uses mw.util.getUrl' );
+               assert.equal( title.getUrl(), '/wiki/Foobar', 'Basic functionality, getUrl uses mw.util.getUrl' );
+               assert.equal( title.getUrl({ action: 'edit' }), '/wiki/Foobar?action=edit', 'Basic functionality, \'params\' parameter' );
 
                title = new mw.Title( 'John Doe', 3 );
                assert.equal( title.getUrl(), '/wiki/User_talk:John_Doe', 'Escaping in title and namespace for urls' );
        } );
 
-       QUnit.test( 'newFromImg', 36, function ( assert ) {
+       QUnit.test( 'newFromImg', 40, function ( assert ) {
                var title, i, thisCase, prefix,
                        cases = [
+                               {
+                                       url: '//upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Princess_Alexandra_of_Denmark_%28later_Queen_Alexandra%2C_wife_of_Edward_VII%29_with_her_two_eldest_sons%2C_Prince_Albert_Victor_%28Eddy%29_and_George_Frederick_Ernest_Albert_%28later_George_V%29.jpg/939px-thumbnail.jpg',
+                                       typeOfUrl: 'Hashed thumb with shortened path',
+                                       nameText: 'Princess Alexandra of Denmark (later Queen Alexandra, wife of Edward VII) with her two eldest sons, Prince Albert Victor (Eddy) and George Frederick Ernest Albert (later George V)',
+                                       prefixedText: 'File:Princess Alexandra of Denmark (later Queen Alexandra, wife of Edward VII) with her two eldest sons, Prince Albert Victor (Eddy) and George Frederick Ernest Albert (later George V).jpg'
+                               },
                                {
                                        url: '/wiki/images/thumb/9/91/Anticlockwise_heliotrope%27s.jpg/99px-Anticlockwise_heliotrope%27s.jpg',
                                        typeOfUrl: 'Normal hashed directory thumbnail',
index 88e5885..f4433f4 100644 (file)
@@ -527,7 +527,6 @@ class TestFileIterator implements Iterator {
                return false;
        }
 
-
        /**
         * Clear section name and its data
         */
index 35ab9f2..ad5239e 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -180,7 +180,6 @@ function wfStreamThumb( array $params ) {
                return;
        }
 
-
        // Check the source file storage path
        if ( !$img->exists() ) {
                $redirectedLocation = false;
@@ -247,7 +246,6 @@ function wfStreamThumb( array $params ) {
        unset( $params['r'] ); // ignore 'r' because we unconditionally pass File::RENDER
        unset( $params['f'] ); // We're done with 'f' parameter.
 
-
        // Get the normalized thumbnail name from the parameters...
        try {
                $thumbName = $img->thumbName( $params );