Merge "Separate language generation from outputPage"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 20 Apr 2013 00:11:18 +0000 (00:11 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 20 Apr 2013 00:11:18 +0000 (00:11 +0000)
537 files changed:
.jshintrc
CREDITS
RELEASE-NOTES-1.21
RELEASE-NOTES-1.22
docs/hooks.txt
includes/Action.php
includes/AutoLoader.php
includes/Block.php
includes/Category.php
includes/ChangesFeed.php
includes/ChangesList.php
includes/Collation.php
includes/ConfEditor.php
includes/DefaultSettings.php
includes/Defines.php
includes/EditPage.php
includes/Exception.php
includes/ExternalEdit.php [deleted file]
includes/FeedUtils.php
includes/GitInfo.php
includes/GlobalFunctions.php
includes/HashRing.php [new file with mode: 0644]
includes/Html.php
includes/HttpFunctions.php
includes/ImageGallery.php
includes/ImagePage.php
includes/ImageQueryPage.php
includes/Import.php
includes/Linker.php
includes/LinksUpdate.php
includes/MagicWord.php
includes/MimeMagic.php
includes/OutputPage.php
includes/PageQueryPage.php
includes/Pager.php
includes/Preferences.php
includes/PrefixSearch.php
includes/ProtectionForm.php
includes/QueryPage.php
includes/SiteStats.php
includes/SkinLegacy.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/Status.php
includes/StringUtils.php
includes/Title.php
includes/UIDGenerator.php
includes/User.php
includes/Wiki.php
includes/WikiMap.php
includes/WikiPage.php
includes/Xml.php
includes/XmlTypeCheck.php
includes/ZipDirectoryReader.php
includes/actions/EditAction.php
includes/actions/HistoryAction.php
includes/api/ApiBase.php
includes/api/ApiEditPage.php
includes/api/ApiFeedContributions.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiImageRotate.php
includes/api/ApiMain.php
includes/api/ApiParamInfo.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllImages.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryORM.php
includes/api/ApiQueryPagesWithProp.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiUpload.php
includes/api/ApiUserrights.php
includes/cache/BacklinkCache.php
includes/cache/FileCacheBase.php
includes/cache/HTMLCacheUpdate.php
includes/cache/MessageCache.php
includes/cache/UserCache.php
includes/clientpool/RedisConnectionPool.php
includes/content/ContentHandler.php
includes/db/ChronologyProtector.php [new file with mode: 0644]
includes/db/Database.php
includes/db/DatabaseError.php
includes/db/DatabaseMssql.php
includes/db/DatabaseOracle.php
includes/db/DatabasePostgres.php
includes/db/DatabaseSqlite.php
includes/db/DatabaseUtility.php
includes/db/LBFactory.php
includes/db/LBFactory_Multi.php
includes/diff/DifferenceEngine.php
includes/externalstore/ExternalStoreDB.php
includes/filebackend/FileBackendStore.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/lockmanager/LockManager.php
includes/filebackend/lockmanager/MemcLockManager.php
includes/filebackend/lockmanager/QuorumLockManager.php
includes/filebackend/lockmanager/RedisLockManager.php [new file with mode: 0644]
includes/filerepo/FileRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.i18n.php
includes/installer/Installer.php
includes/installer/OracleInstaller.php
includes/installer/OracleUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerOutput.php
includes/installer/WebInstallerPage.php
includes/job/Job.php
includes/job/JobQueue.php
includes/job/JobQueueAggregatorMemc.php
includes/job/JobQueueDB.php
includes/job/JobQueueFederated.php [new file with mode: 0644]
includes/job/JobQueueRedis.php
includes/job/jobs/DoubleRedirectJob.php
includes/job/jobs/DuplicateJob.php
includes/job/jobs/HTMLCacheUpdateJob.php
includes/job/jobs/RefreshLinksJob.php
includes/logging/DeleteLogFormatter.php
includes/logging/LogEventsList.php
includes/logging/LogPage.php
includes/media/DjVu.php
includes/media/DjVuImage.php
includes/media/Exif.php
includes/media/GIFMetadataExtractor.php
includes/media/IPTC.php
includes/media/ImageHandler.php
includes/media/MediaTransformOutput.php
includes/media/SVGMetadataExtractor.php
includes/media/XMPInfo.php
includes/media/XMPValidate.php
includes/objectcache/BagOStuff.php
includes/objectcache/MemcachedPeclBagOStuff.php
includes/objectcache/MultiWriteBagOStuff.php
includes/parser/DateFormatter.php
includes/parser/Parser.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/profiler/Profiler.php
includes/profiler/ProfilerSimple.php
includes/profiler/ProfilerSimpleText.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/revisiondelete/RevisionDelete.php
includes/search/SearchEngine.php
includes/search/SearchMySQL.php
includes/search/SearchPostgres.php
includes/search/SearchSqlite.php
includes/site/MediaWikiSite.php
includes/specials/SpecialAllmessages.php
includes/specials/SpecialAllpages.php
includes/specials/SpecialAncientpages.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialBrokenRedirects.php
includes/specials/SpecialConfirmemail.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDisambiguations.php
includes/specials/SpecialDoubleRedirects.php
includes/specials/SpecialEmailuser.php
includes/specials/SpecialExport.php
includes/specials/SpecialFewestrevisions.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialFilepath.php
includes/specials/SpecialImport.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListredirects.php
includes/specials/SpecialLonelypages.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMostcategories.php
includes/specials/SpecialMostimages.php
includes/specials/SpecialMostinterwikis.php
includes/specials/SpecialMostlinked.php
includes/specials/SpecialMostlinkedcategories.php
includes/specials/SpecialMostlinkedtemplates.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialPagesWithProp.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialPopularpages.php
includes/specials/SpecialProtectedpages.php
includes/specials/SpecialProtectedtitles.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialSearch.php
includes/specials/SpecialShortpages.php
includes/specials/SpecialSpecialpages.php
includes/specials/SpecialStatistics.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUncategorizedcategories.php
includes/specials/SpecialUncategorizedimages.php
includes/specials/SpecialUncategorizedpages.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUnusedcategories.php
includes/specials/SpecialUnusedimages.php
includes/specials/SpecialUnusedtemplates.php
includes/specials/SpecialUnwatchedpages.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWantedcategories.php
includes/specials/SpecialWantedfiles.php
includes/specials/SpecialWantedtemplates.php
includes/specials/SpecialWatchlist.php
includes/specials/SpecialWhatlinkshere.php
includes/specials/SpecialWithoutinterwiki.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/templates/UserloginVForm.php [new file with mode: 0644]
includes/upload/UploadBase.php
includes/upload/UploadFromChunks.php
includes/upload/UploadFromUrl.php
includes/upload/UploadStash.php
languages/Language.php
languages/LanguageConverter.php
languages/Names.php
languages/classes/LanguageBe_tarask.php
languages/classes/LanguageCu.php
languages/classes/LanguageEo.php
languages/classes/LanguageFi.php
languages/classes/LanguageGa.php
languages/classes/LanguageGan.php
languages/classes/LanguageGv.php
languages/classes/LanguageHi.php
languages/classes/LanguageHr.php
languages/classes/LanguageHy.php
languages/classes/LanguageIu.php
languages/classes/LanguageKaa.php
languages/classes/LanguageKk.php
languages/classes/LanguageKk_cyrl.php
languages/classes/LanguageKsh.php
languages/classes/LanguageKu.php
languages/classes/LanguageLa.php
languages/classes/LanguageMg.php
languages/classes/LanguageMt.php
languages/classes/LanguageOs.php
languages/classes/LanguagePl.php
languages/classes/LanguageSh.php
languages/classes/LanguageShi.php
languages/classes/LanguageSk.php
languages/classes/LanguageSl.php
languages/classes/LanguageSr.php
languages/classes/LanguageSr_ec.php
languages/classes/LanguageSr_el.php
languages/classes/LanguageTg.php
languages/classes/LanguageTi.php
languages/classes/LanguageTl.php
languages/classes/LanguageTyv.php
languages/classes/LanguageUk.php
languages/classes/LanguageUz.php
languages/classes/LanguageWa.php
languages/classes/LanguageZh.php
languages/messages/MessagesAeb.php
languages/messages/MessagesAf.php
languages/messages/MessagesAm.php
languages/messages/MessagesAn.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesAs.php
languages/messages/MessagesAst.php
languages/messages/MessagesAzb.php
languages/messages/MessagesBa.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/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesCa.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCrh_latn.php
languages/messages/MessagesCs.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/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.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/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesGv.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/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIlo.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesJv.php
languages/messages/MessagesKa.php
languages/messages/MessagesKab.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKm.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKy.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLi.php
languages/messages/MessagesLij.php
languages/messages/MessagesLt.php
languages/messages/MessagesLus.php
languages/messages/MessagesLv.php
languages/messages/MessagesMai.php
languages/messages/MessagesMap_bms.php
languages/messages/MessagesMg.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/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPnb.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesQu.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/MessagesScn.php
languages/messages/MessagesSh.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSo.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesSzl.php
languages/messages/MessagesTa.php
languages/messages/MessagesTe.php
languages/messages/MessagesTh.php
languages/messages/MessagesTl.php
languages/messages/MessagesTr.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesUg_arab.php
languages/messages/MessagesUk.php
languages/messages/MessagesUz.php
languages/messages/MessagesVec.php
languages/messages/MessagesVi.php
languages/messages/MessagesWar.php
languages/messages/MessagesWuu.php
languages/messages/MessagesYi.php
languages/messages/MessagesYo.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
languages/utils/CLDRPluralRuleEvaluator.php
maintenance/Maintenance.php
maintenance/backup.inc
maintenance/backupTextPass.inc
maintenance/benchmarks/Benchmarker.php
maintenance/benchmarks/bench_utf8_title_check.php
maintenance/cdb.php
maintenance/checkSyntax.php
maintenance/cleanupAncientTables.php
maintenance/cleanupPreferences.php
maintenance/cleanupRemovedModules.php
maintenance/cleanupTitles.php
maintenance/cleanupUploadStash.php
maintenance/cleanupWatchlist.php
maintenance/compareParsers.php
maintenance/convertLinks.php
maintenance/createAndPromote.php
maintenance/deleteArchivedFiles.inc
maintenance/deleteDefaultMessages.php
maintenance/deleteImageMemcached.php
maintenance/deleteOrphanedRevisions.php
maintenance/deleteSelfExternals.php
maintenance/dev/includes/router.php
maintenance/doMaintenance.php
maintenance/dumpBackup.php
maintenance/dumpIterator.php
maintenance/dumpLinks.php
maintenance/dumpSisterSites.php
maintenance/fetchText.php
maintenance/fixSlaveDesync.php
maintenance/formatInstallDoc.php
maintenance/generateSitemap.php
maintenance/getLagTimes.php
maintenance/importDump.php
maintenance/importImages.inc
maintenance/importImages.php
maintenance/initSiteStats.php
maintenance/install.php
maintenance/language/StatOutputs.php
maintenance/language/checkDupeMessages.php
maintenance/language/checkLanguage.inc
maintenance/language/generateCollationData.php
maintenance/language/langmemusage.php
maintenance/language/languages.inc
maintenance/language/messages.inc
maintenance/language/writeMessagesArray.inc
maintenance/mcc.php
maintenance/mctest.php
maintenance/mergeMessageFileList.php
maintenance/mwdocgen.php
maintenance/namespaceDupes.php
maintenance/nukeNS.php
maintenance/nukePage.php
maintenance/oracle/alterSharedConstraints.php
maintenance/orphans.php
maintenance/parse.php
maintenance/populateFilearchiveSha1.php
maintenance/populateLogSearch.php
maintenance/populateParentId.php
maintenance/populateRevisionLength.php
maintenance/populateRevisionSha1.php
maintenance/preprocessDump.php
maintenance/preprocessorFuzzTest.php
maintenance/protect.php
maintenance/proxyCheck.php
maintenance/purgeDeletedFiles.php
maintenance/purgeList.php
maintenance/reassignEdits.php
maintenance/rebuildFileCache.php
maintenance/rebuildmessages.php
maintenance/rebuildrecentchanges.php
maintenance/rebuildtextindex.php
maintenance/refreshImageMetadata.php
maintenance/refreshLinks.php
maintenance/renderDump.php
maintenance/runBatchedQuery.php
maintenance/runJobs.php
maintenance/showJobs.php
maintenance/showSiteStats.php
maintenance/sql.php
maintenance/sqlite.inc
maintenance/storage/checkStorage.php
maintenance/storage/compressOld.php
maintenance/storage/dumpRev.php
maintenance/storage/recompressTracked.php
maintenance/update.php
maintenance/updateSearchIndex.php
maintenance/updateSpecialPages.php
maintenance/userDupes.inc
maintenance/userOptions.inc
resources/Resources.php
resources/jquery/jquery.tablesorter.js
resources/mediawiki.action/mediawiki.action.edit.editWarning.js [new file with mode: 0644]
resources/mediawiki.special/images/glyph-people-large.png [new file with mode: 0644]
resources/mediawiki.special/images/icon-lock.png [new file with mode: 0644]
resources/mediawiki.special/mediawiki.special.userLogin.vform.css [new file with mode: 0644]
resources/mediawiki.special/mediawiki.special.vforms.css [new file with mode: 0644]
resources/mediawiki.ui/mediawiki.ui.default.css [new file with mode: 0644]
resources/mediawiki.ui/mediawiki.ui.vector.css [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/Makefile [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/config.rb [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/components/_default.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/components/_utilities.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/components/_vector.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/components/default/_buttons.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/components/default/_forms.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/components/vector/_buttons.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/components/vector/_containers.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/components/vector/_forms.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.default.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.vector.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/mixins/_all.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/mixins/_effects.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/mixins/_forms.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/mixins/_type.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/mixins/_utilities.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/settings/_all.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/settings/_colors.scss [new file with mode: 0644]
resources/mediawiki.ui/sourcefiles/scss/settings/_typography.scss [new file with mode: 0644]
resources/mediawiki/mediawiki.Uri.js
resources/mediawiki/mediawiki.debug.js
resources/mediawiki/mediawiki.user.js
skins/CologneBlue.php
skins/Modern.php
skins/MonoBook.php
skins/Vector.php
tests/TestsAutoLoader.php
tests/parser/parserTests.txt
tests/phpunit/data/xmp/7.result.php
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/GlobalFunctions/wfGetCallerTest.php
tests/phpunit/includes/db/DatabaseSQLTest.php
tests/phpunit/includes/db/DatabaseTestHelper.php [new file with mode: 0644]
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/jobqueue/JobQueueTest.php

index 7fa138d..c4e265a 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -1,15 +1,10 @@
 {
-       "predef": [
-               "mediaWiki",
-               "jQuery",
-               "QUnit"
-       ],
+       /* Common */
 
-       "bitwise": true,
+       // Enforcing
        "camelcase": true,
        "curly": true,
        "eqeqeq": true,
-       "forin": false,
        "immed": true,
        "latedef": true,
        "newcap": true,
        "noempty": true,
        "nonew": true,
        "quotmark": "single",
-       "regexp": false,
+       "trailing": true,
        "undef": true,
        "unused": true,
-       "strict": false,
-       "trailing": true,
+       // Legacy
+       "onevar": true,
+
+       /* Local */
 
+       // Enforcing
+       "bitwise": true,
+       "forin": false,
+       "regexp": false,
+       "strict": false,
+       // Relaxing
        "laxbreak": true,
        "smarttabs": true,
        "multistr": true,
-
+       // Environment
        "browser": true,
-
+       // Legacy
        "nomen": true,
-       "onevar": true
+
+       "predef": [
+               "mediaWiki",
+               "jQuery",
+               "QUnit"
+       ]
 }
diff --git a/CREDITS b/CREDITS
index 4e701f1..6cc28c1 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -80,7 +80,7 @@ following names for their contribution to the product.
 * Thomas Bleher
 * Tim Starling
 * Timo Tijhof
-* Tom Gries
+* Thomas Gries
 * Trevor Parscal
 * Victor Vasiliev
 * Yesid Carrillo
@@ -143,6 +143,7 @@ following names for their contribution to the product.
 * Jimmy Xu
 * Jonathan Wiltshire
 * John N
+* JuneHyeon Bae
 * Jure Kajzer
 * Karun Dambiec
 * Katie Filbert
index 2ab652b..6c68d82 100644 (file)
@@ -18,7 +18,6 @@ production.
 * $wgBug34832TransitionalRollback has been removed.
 * (bug 29472) $wgUseDynamicDates has been removed and its functionality
   disabled.
-* $wgVectorUseIconWatch is now enabled by default.
 
 === New features in 1.21 ===
 * (bug 38110) Schema changes (adding or dropping tables, indices and
@@ -116,20 +115,16 @@ production.
   uz, vi.
 * Added 'CategoryAfterPageAdded' and 'CategoryAfterPageRemoved' hooks.
 * Added 'HistoryRevisionTools' and 'DiffRevisionTools' hooks.
-* Added 'SpecialSearchResultsPrepend' and 'SpecialSearchResultsAppend' hooks.
 * (bug 33186) Add image rotation api "imagerotate"
 * (bug 34040) Add "User rights management" link on user page toolbox.
 * (bug 45526) Add QUnit assertion helper "QUnit.assert.htmlEqual" for asserting
   structual equality of HTML (ignoring insignificant differences like
   quotmarks, order and whitespace in the attribute list).
-* (bug 23393) HTML <hN> headings containing line breaks are now handled
-  correctly.
-* (bug 45803) Whitespace within == Headline == syntax and within <hN> headings
-  is now non-significant and not preserved in the HTML output.
-* (bug 23343) Implemented ability to apply IP blocks to the contents of X-Forwarded-For headers
-  by adding a new configuration variable $wgApplyIpBlocksToXff (disabled by default).
 
 === Bug fixes in 1.21 ===
+* (bug 42649) PHP Fatal error: Call to a member function isLocal() on a
+  non-object in Title.php
+* (bug 46493) Special:ProtectedPages results in whitepage when a bad title is protected
 * (bug 40617) Installer can now customize the logo in LocalSettings.php
 * (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
 * (bug 40352) fixDoubleRedirects.php should support interwiki redirects.
@@ -281,15 +276,9 @@ production.
 * (bug 33304) list=allpages will now find really old indefinite protections.
 * (bug 45937) meta=allmessages will report a syntactically invalid lang as a
   proper error instead of as an uncaught exception.
-* (bug 25325) added support for wlshow filtering (bots/anon/minor/patrolled)
-  to action=feedwatchlist
-* WDDX formatted output will actually be formatted (and normal output will no
-  longer be), and will no longer choke on booleans.
 * The JSON output formatter now leaves forward slashes unescaped to improve human
   readability of URLs and similar strings. Also, a "utf8" option is now provided
   to use UTF-8 encoding instead of hex escape codes for most non-ASCII characters.
-* action=opensearch no longer silently ignores the format parameter.
-* action=opensearch now supports format=jsonfm.
 
 === API internal changes in 1.21 ===
 * For debugging only, a new global $wgDebugAPI removes many API restrictions when true.
@@ -344,7 +333,6 @@ changes to languages because of Bugzilla reports.
   - ShowStats -> ShowSiteStats.
 * BREAKING CHANGE: (bug 38244) Removed the mediawiki.api.titleblacklist module
   and moved it to the TitleBlacklist extension.
-* The Special:ActiveUsers special page was removed.
 * BREAKING CHANGE: Implementation of MediaWiki's JS and JSON value encoding
   has changed:
 ** MediaWiki no longer supports PHP installations in which the native JSON
@@ -356,9 +344,6 @@ changes to languages because of Bugzilla reports.
    function, which is now deprecated).
 * BREAKING CHANGE: The Services_JSON class has been removed. If necessary,
   be sure to upgrade affected extensions at the same time (e.g. Collection).
-* Calling Linker methods using a skin will now output deprecation warnings.
-* Pages with a returnto (such as the page when you login or logout), no
-  longer have a rel="next" link tag.
 
 == Compatibility ==
 
index 06947e1..13a3c3c 100644 (file)
@@ -11,18 +11,50 @@ production.
 === Configuration changes in 1.22 ===
 * $wgRedirectScript was removed. It was unused.
 * Removed $wgLocalMessageCacheSerialized, it is now always true.
+* When $wgUseVFormUserLogin is true, the redesign of Special:UserLogin is
+  activated.
+* $wgVectorUseIconWatch is now enabled by default.
 
 === New features in 1.22 ===
 * (bug 44525) mediawiki.jqueryMsg can now parse (whitelisted) HTML elements and attributes.
 * (bug 33454) Language::sprintfDate now has a timezone parameter, and supports
   the "eIOPTZ" formatting characters.
+* EditWarning: A warning is shown when an editor leaves the edit form without
+  saving (enabled by default, users can opt-out via the 'useeditwarning'
+  preference). This feature was moved from the Vector extension, and is now part
+  of core for all skins. Take care when upgrading that you don't use an older
+  version of the Vector extension as this feature may conflict.
+* New version of Special:UserLogin form. It is opt-in for now, controlled by
+  the $wgUseVFormUserLogin setting or a 'useNew' URL parameter trigger.
+* Added 'SpecialSearchResultsPrepend' and 'SpecialSearchResultsAppend' hooks.
+* (bug 23343) Implemented ability to apply IP blocks to the contents of X-Forwarded-For headers
+  by adding a new configuration variable $wgApplyIpBlocksToXff (disabled by default).
+* The new hook 'APIGetPossibleErrors' to modify the list of possible errors was
+  added.
 
 === Bug fixes in 1.22 ===
+* Disable Special:PasswordReset when $wgEnableEmail. Previously one could still
+  navigate to the page by entering the URL directly.
+* (bug 47138) Fixed a fatal error when a blocked user tries to automatically
+  create an account on login due external authentication in some circumstances.
+* (bug 23393) HTML <hN> headings containing line breaks are now handled
+  correctly.
+* (bug 45803) Whitespace within == Headline == syntax and within <hN> headings
+  is now non-significant and not preserved in the HTML output.
+* (bug 47218) Special:BlockList now handles correctly user names with spaces
+  when passed as subpage.
+* Pager's properly validate which fields are allowed to be sorted on.
 
 === API changes in 1.22 ===
 * (bug 46626) xmldoublequote parameter was removed. Because of a bug, the
   parameter has had no effect since MediaWiki 1.16, and so its removal is
   unlikely to impact existing clients.
+* (bug 25325) Added support for wlshow filtering (bots/anon/minor/patrolled)
+  to action=feedwatchlist.
+* WDDX formatted output will actually be formatted (and normal output will no
+  longer be), and will no longer choke on booleans.
+* action=opensearch no longer silently ignores the format parameter.
+* action=opensearch now supports format=jsonfm.
 
 === Languages updated in 1.22===
 
@@ -44,6 +76,11 @@ changes to languages because of Bugzilla reports.
   use AuthPlugin for external authentication/authorization needs.
 * The Quickbar feature of the legacy skin model and the last remnants of it
   throughout the code base have been removed.
+* Externaledit/externaldiff preference was removed. Very few users used this
+  feature, and improper configuration can actually prevent a user from editing
+* Calling Linker methods using a skin will now output deprecation warnings.
+* (bug 46680) "Return to" links are no longer tagged with rel="next".
+* The Special:ActiveUsers special page was removed.
 
 == Compatibility ==
 
index c266dcc..2cde591 100644 (file)
@@ -371,6 +371,11 @@ result.
 &$module: ApiBase Module object
 &$properties: Array of properties
 
+'APIGetPossibleErrors': Use this hook to modify the module's list of possible
+errors.
+$module: ApiBase Module object
+&$possibleErrors: Array of possible errors
+
 'APIQueryAfterExecute': After calling the execute() method of an
 action=query submodule. Use this to extend core API modules.
 &$module: Module object
@@ -482,7 +487,8 @@ $logEntry: the ManualLogEntry used to record the deletion
 
 'ArticleEditUpdateNewTalk': Before updating user_newtalk when a user talk page
 was changed.
-$wikiPage: WikiPage (object) of the user talk page
+&$wikiPage: WikiPage (object) of the user talk page
+$recipient: User (object) who's talk page was edited
 
 'ArticleEditUpdates': When edit updates (mainly link tracking) are made when an
 article has been changed.
index 2e0c88b..dff3803 100644 (file)
@@ -374,18 +374,23 @@ abstract class FormAction extends Action {
         * Add pre- or post-text to the form
         * @return String HTML which will be sent to $form->addPreText()
         */
-       protected function preText() { return ''; }
+       protected function preText() {
+               return '';
+       }
 
        /**
         * @return string
         */
-       protected function postText() { return ''; }
+       protected function postText() {
+               return '';
+       }
 
        /**
         * Play with the HTMLForm if you need to more substantially
         * @param $form HTMLForm
         */
-       protected function alterForm( HTMLForm $form ) {}
+       protected function alterForm( HTMLForm $form ) {
+       }
 
        /**
         * Get the HTMLForm to control behavior
index 33a244b..4e562f6 100644 (file)
@@ -90,7 +90,6 @@ $wgAutoloadLocalClasses = array(
        'EnhancedChangesList' => 'includes/ChangesList.php',
        'ErrorPageError' => 'includes/Exception.php',
        'ExplodeIterator' => 'includes/StringUtils.php',
-       'ExternalEdit' => 'includes/ExternalEdit.php',
        'ExternalStore' => 'includes/externalstore/ExternalStore.php',
        'ExternalStoreDB' => 'includes/externalstore/ExternalStoreDB.php',
        'ExternalStoreHttp' => 'includes/externalstore/ExternalStoreHttp.php',
@@ -110,6 +109,7 @@ $wgAutoloadLocalClasses = array(
        'FormOptions' => 'includes/FormOptions.php',
        'FormSpecialPage' => 'includes/SpecialPage.php',
        'GitInfo' => 'includes/GitInfo.php',
+       'HashRing' => 'includes/HashRing.php',
        'HashtableReplacer' => 'includes/StringUtils.php',
        'HistoryBlob' => 'includes/HistoryBlob.php',
        'HistoryBlobCurStub' => 'includes/HistoryBlob.php',
@@ -472,7 +472,7 @@ $wgAutoloadLocalClasses = array(
 
        # includes/db
        'Blob' => 'includes/db/DatabaseUtility.php',
-       'ChronologyProtector' => 'includes/db/LBFactory.php',
+       'ChronologyProtector' => 'includes/db/ChronologyProtector.php',
        'CloneDatabase' => 'includes/db/CloneDatabase.php',
        'DatabaseBase' => 'includes/db/Database.php',
        'DatabaseMssql' => 'includes/db/DatabaseMssql.php',
@@ -574,8 +574,9 @@ $wgAutoloadLocalClasses = array(
        'LSLockManager' => 'includes/filebackend/lockmanager/LSLockManager.php',
        'MemcLockManager' => 'includes/filebackend/lockmanager/MemcLockManager.php',
        'QuorumLockManager' => 'includes/filebackend/lockmanager/QuorumLockManager.php',
-       'MySqlLockManager' => 'includes/filebackend/lockmanager/DBLockManager.php',
-       'PostgreSqlLockManager' => 'includes/filebackend/lockmanager/DBLockManager.php',
+       'MySqlLockManager'=> 'includes/filebackend/lockmanager/DBLockManager.php',
+       'PostgreSqlLockManager'=> 'includes/filebackend/lockmanager/DBLockManager.php',
+       'RedisLockManager'=> 'includes/filebackend/lockmanager/RedisLockManager.php',
        'NullLockManager' => 'includes/filebackend/lockmanager/LockManager.php',
        'FileOp' => 'includes/filebackend/FileOp.php',
        'FileOpBatch' => 'includes/filebackend/FileOpBatch.php',
@@ -656,6 +657,7 @@ $wgAutoloadLocalClasses = array(
        'JobQueueAggregatorRedis' => 'includes/job/JobQueueAggregatorRedis.php',
        'JobQueueDB' => 'includes/job/JobQueueDB.php',
        'JobQueueGroup' => 'includes/job/JobQueueGroup.php',
+       'JobQueueFederated' => 'includes/job/JobQueueFederated.php',
        'JobQueueRedis' => 'includes/job/JobQueueRedis.php',
 
        # includes/job/jobs
@@ -1001,6 +1003,7 @@ $wgAutoloadLocalClasses = array(
 
        # includes/templates
        'UserloginTemplate' => 'includes/templates/Userlogin.php',
+       'UserloginTemplateVForm' => 'includes/templates/UserloginVForm.php',
        'UsercreateTemplate' => 'includes/templates/Usercreate.php',
 
        # includes/upload
index 4da0f8f..3f00a51 100644 (file)
@@ -801,7 +801,8 @@ class Block {
                        case self::TYPE_RANGE:
                                list( $start, /*...*/ ) = IP::parseRange( $this->target );
                                return $start;
-                       default: throw new MWException( "Block with invalid type" );
+                       default:
+                               throw new MWException( "Block with invalid type" );
                }
        }
 
@@ -819,7 +820,8 @@ class Block {
                        case self::TYPE_RANGE:
                                list( /*...*/, $end ) = IP::parseRange( $this->target );
                                return $end;
-                       default: throw new MWException( "Block with invalid type" );
+                       default:
+                               throw new MWException( "Block with invalid type" );
                }
        }
 
@@ -997,11 +999,16 @@ class Block {
         * Purge expired blocks from the ipblocks table
         */
        public static function purgeExpired() {
-               if ( !wfReadOnly() ) {
-                       $dbw = wfGetDB( DB_MASTER );
-                       $dbw->delete( 'ipblocks',
-                               array( 'ipb_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ), __METHOD__ );
+               if ( wfReadOnly() ) {
+                       return;
                }
+
+               $method = __METHOD__;
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->onTransactionIdle( function() use ( $dbw, $method ) {
+                       $dbw->delete( 'ipblocks',
+                               array( 'ipb_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ), $method );
+               } );
        }
 
        /**
index 868d6c4..126b8fe 100644 (file)
@@ -40,7 +40,8 @@ class Category {
        /** Counts of membership (cat_pages, cat_subcats, cat_files) */
        private $mPages = null, $mSubcats = null, $mFiles = null;
 
-       private function __construct() { }
+       private function __construct() {
+       }
 
        /**
         * Set up all member variables using a database query.
index 8b8b94e..e900e34 100644 (file)
@@ -176,9 +176,9 @@ class ChangesFeed {
                        if( $n > 0 &&
                                $obj->rc_type == RC_EDIT &&
                                $obj->rc_namespace >= 0 &&
-                               $obj->rc_cur_id == $sorted[$n-1]->rc_cur_id &&
-                               $obj->rc_user_text == $sorted[$n-1]->rc_user_text ) {
-                               $sorted[$n-1]->rc_last_oldid = $obj->rc_last_oldid;
+                               $obj->rc_cur_id == $sorted[$n - 1]->rc_cur_id &&
+                               $obj->rc_user_text == $sorted[$n - 1]->rc_user_text ) {
+                               $sorted[$n - 1]->rc_last_oldid = $obj->rc_last_oldid;
                        } else {
                                $sorted[$n] = $obj;
                                $n++;
index 0c4d69e..79e2d0b 100644 (file)
@@ -543,7 +543,7 @@ class ChangesList extends ContextSource {
                                        'user_text' => $rc->mAttribs['rc_user_text'],
                                        'deleted' => $rc->mAttribs['rc_deleted']
                                ) );
-                               $s .= ' '.Linker::generateRollback( $rev, $this->getContext() );
+                               $s .= ' ' . Linker::generateRollback( $rev, $this->getContext() );
                        }
                }
        }
@@ -1046,7 +1046,7 @@ class EnhancedChangesList extends ChangesList {
                        if( $chardiff == '' ) {
                                $r .= ' ';
                        } else {
-                               $r .= ' ' . $chardiff. ' <span class="mw-changeslist-separator">. .</span> ';
+                               $r .= ' ' . $chardiff . ' <span class="mw-changeslist-separator">. .</span> ';
                        }
                }
 
index 21448f7..723b38e 100644 (file)
@@ -62,7 +62,7 @@ abstract class Collation {
                                }
 
                                // If all else fails...
-                               throw new MWException( __METHOD__.": unknown collation type \"$collationName\"" );
+                               throw new MWException( __METHOD__ . ": unknown collation type \"$collationName\"" );
                }
        }
 
index 1d9ca92..293d53d 100644 (file)
@@ -537,7 +537,7 @@ class ConfEditor {
         */
        function getIndent( $pos, $key = false, $arrowPos = false ) {
                $arrowIndent = ' ';
-               if ( $pos == 0 || $this->text[$pos-1] == "\n" ) {
+               if ( $pos == 0 || $this->text[$pos - 1] == "\n" ) {
                        $indentLength = strspn( $this->text, " \t", $pos );
                        $indent = substr( $this->text, $pos, $indentLength );
                } else {
@@ -1056,7 +1056,7 @@ class ConfEditorParseError extends MWException {
                $lines = StringUtils::explode( "\n", $text );
                foreach ( $lines as $lineNum => $line ) {
                        if ( $lineNum == $this->lineNum - 1 ) {
-                               return "$line\n" .str_repeat( ' ', $this->colNum - 1 ) . "^\n";
+                               return "$line\n" . str_repeat( ' ', $this->colNum - 1 ) . "^\n";
                        }
                }
                return '';
index 53df457..ff299fc 100644 (file)
@@ -2828,6 +2828,13 @@ $wgVectorUseSimpleSearch = true;
  */
 $wgVectorUseIconWatch = true;
 
+/**
+ * Use VForm design for Special:Userlogin.  This can be overridden by
+ * a useNew bool in the query string.  For instance, if it is globally
+ * false, you can try it with useNew=1.
+ */
+$wgUseVFormUserLogin = false;
+
 /**
  * Display user edit counts in various prominent places.
  */
@@ -3647,8 +3654,6 @@ $wgDefaultUserOptions = array(
        'enotifusertalkpages' => 1,
        'enotifwatchlistpages' => 0,
        'extendwatchlist' => 0,
-       'externaldiff' => 0,
-       'externaleditor' => 0,
        'fancysig' => 0,
        'forceeditsummary' => 0,
        'gender' => 'unknown',
@@ -3693,6 +3698,7 @@ $wgDefaultUserOptions = array(
        'watchlisthidepatrolled' => 0,
        'watchmoves' => 0,
        'wllimit' => 250,
+       'useeditwarning' => 1,
 );
 
 /** An array of preferences to not show for the user */
@@ -4929,12 +4935,6 @@ $wgPreviewOnOpenNamespaces = array(
        NS_CATEGORY => true
 );
 
-/**
- * Activate external editor interface for files and pages
- * See http://www.mediawiki.org/wiki/Manual:External_editors
- */
-$wgUseExternalEditor = true;
-
 /** Go button goes straight to the edit screen if the article doesn't exist. */
 $wgGoToEdit = false;
 
@@ -5009,6 +5009,11 @@ $wgReadOnlyFile = false;
  */
 $wgUpgradeKey = false;
 
+/**
+ * Fully specified path to git binary
+ */
+$wgGitBin = '/usr/bin/git';
+
 /**
  * Map GIT repository URLs to viewer URLs to provide links in Special:Version
  *
@@ -5462,7 +5467,6 @@ $wgJobClasses = array(
        'refreshLinks' => 'RefreshLinksJob',
        'refreshLinks2' => 'RefreshLinksJob2',
        'htmlCacheUpdate' => 'HTMLCacheUpdateJob',
-       'html_cache_update' => 'HTMLCacheUpdateJob', // backwards-compatible
        'sendMail' => 'EmaillingJob',
        'enotifNotify' => 'EnotifNotifyJob',
        'fixDoubleRedirect' => 'DoubleRedirectJob',
index 28847db..cd6b158 100644 (file)
@@ -204,7 +204,7 @@ define( 'LIST_OR', 4 );
 /**
  * Unicode and normalisation related
  */
-require_once __DIR__.'/normal/UtfNormalDefines.php';
+require_once __DIR__ . '/normal/UtfNormalDefines.php';
 
 /**@{
  * Hook support constants
index 96a57b4..ae35f3e 100644 (file)
@@ -898,7 +898,9 @@ class EditPage {
                                $orig = $this->getOriginalContent();
                                $content = $orig ? $orig->getSection( $this->section ) : null;
 
-                               if ( !$content ) $content = $def_content;
+                               if ( !$content ) {
+                                       $content = $def_content;
+                               }
                        } else {
                                $undoafter = $wgRequest->getInt( 'undoafter' );
                                $undo = $wgRequest->getInt( 'undo' );
@@ -986,7 +988,9 @@ class EditPage {
                }
                $revision = $this->mArticle->getRevisionFetched();
                if ( $revision === null ) {
-                       if ( !$this->contentModel ) $this->contentModel = $this->getTitle()->getContentModel();
+                       if ( !$this->contentModel ) {
+                               $this->contentModel = $this->getTitle()->getContentModel();
+                       }
                        $handler = ContentHandler::getForModelID( $this->contentModel );
 
                        return $handler->makeEmptyContent();
@@ -1008,7 +1012,9 @@ class EditPage {
                $content = $rev ? $rev->getContent( Revision::RAW ) : null;
 
                if ( $content === false || $content === null ) {
-                       if ( !$this->contentModel ) $this->contentModel = $this->getTitle()->getContentModel();
+                       if ( !$this->contentModel ) {
+                               $this->contentModel = $this->getTitle()->getContentModel();
+                       }
                        $handler = ContentHandler::getForModelID( $this->contentModel );
 
                        return $handler->makeEmptyContent();
@@ -1890,6 +1896,11 @@ class EditPage {
                if ( $wgUser->getOption( 'uselivepreview', false ) ) {
                        $wgOut->addModules( 'mediawiki.action.edit.preview' );
                }
+
+               if ( $wgUser->getOption( 'useeditwarning', false ) ) {
+                       $wgOut->addModules( 'mediawiki.action.edit.editWarning' );
+               }
+
                // Bug #19334: textarea jumps when editing articles in IE8
                $wgOut->addStyle( 'common/IE80Fixes.css', 'screen', 'IE 8' );
 
@@ -1929,15 +1940,15 @@ class EditPage {
                if ( $namespace == NS_MEDIAWIKI ) {
                        # Show a warning if editing an interface message
                        $wgOut->wrapWikiMsg( "<div class='mw-editinginterface'>\n$1\n</div>", 'editinginterface' );
-               } else if( $namespace == NS_FILE ) {
+               } elseif ( $namespace == NS_FILE ) {
                        # Show a hint to shared repo
                        $file = wfFindFile( $this->mTitle );
-                       if( $file && !$file->isLocal() ) {
+                       if ( $file && !$file->isLocal() ) {
                                $descUrl = $file->getDescriptionUrl();
                                # there must be a description url to show a hint to shared repo
-                               if( $descUrl ) {
-                                       if( !$this->mTitle->exists() ) {
-                                               $wgOut->wrapWikiMsg( "<div class=\"mw-sharedupload-desc-create\">\n$1\n</div>", array (
+                               if ( $descUrl ) {
+                                       if ( !$this->mTitle->exists() ) {
+                                               $wgOut->wrapWikiMsg( "<div class=\"mw-sharedupload-desc-create\">\n$1\n</div>", array(
                                                                        'sharedupload-desc-create', $file->getRepo()->getDisplayName(), $descUrl
                                                ) );
                                        } else {
@@ -2162,7 +2173,7 @@ class EditPage {
                }
 
                # When the summary is hidden, also hide them on preview/show changes
-               if( $this->nosummary ) {
+               if ( $this->nosummary ) {
                        $wgOut->addHTML( Html::hidden( 'nosummary', true ) );
                }
 
@@ -2627,7 +2638,7 @@ HTML
 
                $attribs = $customAttribs + array(
                        'accesskey' => ',',
-                       'id'   => $name,
+                       'id' => $name,
                        'cols' => $wgUser->getIntOption( 'cols' ),
                        'rows' => $wgUser->getIntOption( 'rows' ),
                        'style' => '' // avoid php notices when appending preferences (appending allows customAttribs['style'] to still work
@@ -2703,9 +2714,9 @@ HTML
 
                $oldtitlemsg = 'currentrev';
                # if message does not exist, show diff against the preloaded default
-               if( $this->mTitle->getNamespace() == NS_MEDIAWIKI && !$this->mTitle->exists() ) {
+               if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI && !$this->mTitle->exists() ) {
                        $oldtext = $this->mTitle->getDefaultMessageText();
-                       if( $oldtext !== false ) {
+                       if ( $oldtext !== false ) {
                                $oldtitlemsg = 'defaultmessagetext';
                                $oldContent = $this->toEditContent( $oldtext );
                        } else {
@@ -3029,9 +3040,9 @@ HTML
 
                        # don't parse non-wikitext pages, show message about preview
                        if ( $this->mTitle->isCssJsSubpage() || $this->mTitle->isCssOrJsPage() ) {
-                               if( $this->mTitle->isCssJsSubpage() ) {
+                               if ( $this->mTitle->isCssJsSubpage() ) {
                                        $level = 'user';
-                               } elseif( $this->mTitle->isCssOrJsPage() ) {
+                               } elseif ( $this->mTitle->isCssOrJsPage() ) {
                                        $level = 'site';
                                } else {
                                        $level = false;
@@ -3047,7 +3058,7 @@ HTML
 
                                # Used messages to make sure grep find them:
                                # Messages: usercsspreview, userjspreview, sitecsspreview, sitejspreview
-                               if( $level && $format ) {
+                               if ( $level && $format ) {
                                        $note = "<div id='mw-{$level}{$format}preview'>" . wfMessage( "{$level}{$format}preview" )->text() . "</div>";
                                }
                        }
@@ -3315,9 +3326,9 @@ HTML
                        $minorLabel = wfMessage( 'minoredit' )->parse();
                        if ( $wgUser->isAllowed( 'minoredit' ) ) {
                                $attribs = array(
-                                       'tabindex'  => ++$tabindex,
+                                       'tabindex' => ++$tabindex,
                                        'accesskey' => wfMessage( 'accesskey-minoredit' )->text(),
-                                       'id'        => 'wpMinoredit',
+                                       'id' => 'wpMinoredit',
                                );
                                $checkboxes['minor'] =
                                        Xml::check( 'wpMinoredit', $checked['minor'], $attribs ) .
@@ -3331,9 +3342,9 @@ HTML
                $checkboxes['watch'] = '';
                if ( $wgUser->isLoggedIn() ) {
                        $attribs = array(
-                               'tabindex'  => ++$tabindex,
+                               'tabindex' => ++$tabindex,
                                'accesskey' => wfMessage( 'accesskey-watch' )->text(),
-                               'id'        => 'wpWatchthis',
+                               'id' => 'wpWatchthis',
                        );
                        $checkboxes['watch'] =
                                Xml::check( 'wpWatchthis', $checked['watch'], $attribs ) .
@@ -3357,37 +3368,37 @@ HTML
                $buttons = array();
 
                $temp = array(
-                       'id'        => 'wpSave',
-                       'name'      => 'wpSave',
-                       'type'      => 'submit',
-                       'tabindex'  => ++$tabindex,
-                       'value'     => wfMessage( 'savearticle' )->text(),
+                       'id' => 'wpSave',
+                       'name' => 'wpSave',
+                       'type' => 'submit',
+                       'tabindex' => ++$tabindex,
+                       'value' => wfMessage( 'savearticle' )->text(),
                        'accesskey' => wfMessage( 'accesskey-save' )->text(),
-                       'title'     => wfMessage( 'tooltip-save' )->text() . ' [' . wfMessage( 'accesskey-save' )->text() . ']',
+                       'title' => wfMessage( 'tooltip-save' )->text() . ' [' . wfMessage( 'accesskey-save' )->text() . ']',
                );
                $buttons['save'] = Xml::element( 'input', $temp, '' );
 
                ++$tabindex; // use the same for preview and live preview
                $temp = array(
-                       'id'        => 'wpPreview',
-                       'name'      => 'wpPreview',
-                       'type'      => 'submit',
-                       'tabindex'  => $tabindex,
-                       'value'     => wfMessage( 'showpreview' )->text(),
+                       'id' => 'wpPreview',
+                       'name' => 'wpPreview',
+                       'type' => 'submit',
+                       'tabindex' => $tabindex,
+                       'value' => wfMessage( 'showpreview' )->text(),
                        'accesskey' => wfMessage( 'accesskey-preview' )->text(),
-                       'title'     => wfMessage( 'tooltip-preview' )->text() . ' [' . wfMessage( 'accesskey-preview' )->text() . ']',
+                       'title' => wfMessage( 'tooltip-preview' )->text() . ' [' . wfMessage( 'accesskey-preview' )->text() . ']',
                );
                $buttons['preview'] = Xml::element( 'input', $temp, '' );
                $buttons['live'] = '';
 
                $temp = array(
-                       'id'        => 'wpDiff',
-                       'name'      => 'wpDiff',
-                       'type'      => 'submit',
-                       'tabindex'  => ++$tabindex,
-                       'value'     => wfMessage( 'showdiff' )->text(),
+                       'id' => 'wpDiff',
+                       'name' => 'wpDiff',
+                       'type' => 'submit',
+                       'tabindex' => ++$tabindex,
+                       'value' => wfMessage( 'showdiff' )->text(),
                        'accesskey' => wfMessage( 'accesskey-diff' )->text(),
-                       'title'     => wfMessage( 'tooltip-diff' )->text() . ' [' . wfMessage( 'accesskey-diff' )->text() . ']',
+                       'title' => wfMessage( 'tooltip-diff' )->text() . ' [' . wfMessage( 'accesskey-diff' )->text() . ']',
                );
                $buttons['diff'] = Xml::element( 'input', $temp, '' );
 
@@ -3507,7 +3518,7 @@ HTML
                global $wgOut, $wgLang;
                $this->textbox2 = $this->textbox1;
 
-               if( is_array( $match ) ) {
+               if ( is_array( $match ) ) {
                        $match = $wgLang->listToText( $match );
                }
                $wgOut->prepareErrorPage( wfMessage( 'spamprotectiontitle' ) );
index 21952bb..93fddac 100644 (file)
@@ -617,7 +617,7 @@ class HttpError extends MWException {
                        $content = htmlspecialchars( $this->content );
                }
 
-               return "<!DOCTYPE html>\n".
+               return "<!DOCTYPE html>\n" .
                        "<html><head><title>$header</title></head>\n" .
                        "<body><h1>$header</h1><p>$content</p></body></html>\n";
        }
@@ -721,8 +721,10 @@ class MWExceptionHandler {
                // Final cleanup
                if ( $wgFullyInitialised ) {
                        try {
-                               wfLogProfilingData(); // uses $wgRequest, hence the $wgFullyInitialised condition
-                       } catch ( Exception $e ) {}
+                               // uses $wgRequest, hence the $wgFullyInitialised condition
+                               wfLogProfilingData();
+                       } catch ( Exception $e ) {
+                       }
                }
 
                // Exit value should be nonzero for the benefit of shell jobs
diff --git a/includes/ExternalEdit.php b/includes/ExternalEdit.php
deleted file mode 100644 (file)
index 11e9423..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-/**
- * External editors support
- *
- * License: Public domain
- *
- * @file
- * @author Erik Moeller <moeller@scireview.de>
- */
-
-/**
- * Support for external editors to modify both text and files
- * in external applications. It works as follows: MediaWiki
- * sends a meta-file with the MIME type 'application/x-external-editor'
- * to the client. The user has to associate that MIME type with
- * a helper application (a reference implementation in Perl
- * can be found in extensions/ee), which will launch the editor,
- * and save the modified data back to the server.
- *
- */
-class ExternalEdit extends ContextSource {
-
-       /**
-        * Array of URLs to link to
-        * @var Array
-        */
-       private $urls;
-
-       /**
-        * Constructor
-        * @param $context IContextSource context to use
-        * @param $urls array
-        */
-       public function __construct( IContextSource $context, array $urls = array() ) {
-               $this->setContext( $context );
-               $this->urls = $urls;
-       }
-
-       /**
-        * Check whether external edit or diff should be used.
-        *
-        * @param $context IContextSource context to use
-        * @param string $type can be either 'edit' or 'diff'
-        * @return Bool
-        */
-       public static function useExternalEngine( IContextSource $context, $type ) {
-               global $wgUseExternalEditor;
-
-               if ( !$wgUseExternalEditor ) {
-                       return false;
-               }
-
-               $pref = $type == 'diff' ? 'externaldiff' : 'externaleditor';
-               $request = $context->getRequest();
-
-               return !$request->getVal( 'internaledit' ) &&
-                       ( $context->getUser()->getOption( $pref ) || $request->getVal( 'externaledit' ) );
-       }
-
-       /**
-        * Output the information for the external editor
-        */
-       public function execute() {
-               global $wgContLang, $wgScript, $wgScriptPath, $wgCanonicalServer;
-
-               $this->getOutput()->disable();
-
-               $response = $this->getRequest()->response();
-               $response->header( 'Content-type: application/x-external-editor; charset=utf-8' );
-               $response->header( 'Cache-control: no-cache' );
-
-               $special = $wgContLang->getNsText( NS_SPECIAL );
-
-               # $type can be "Edit text", "Edit file" or "Diff text" at the moment
-               # See the protocol specifications at [[m:Help:External editors/Tech]] for
-               # details.
-               if ( count( $this->urls ) ) {
-                       $urls = $this->urls;
-                       $type = "Diff text";
-               } elseif ( $this->getRequest()->getVal( 'mode' ) == 'file' ) {
-                       $type = "Edit file";
-                       $image = wfLocalFile( $this->getTitle() );
-                       if ( $image ) {
-                               $urls = array(
-                                       'File' => array(
-                                               'Extension' => $image->getExtension(),
-                                               'URL' => $image->getCanonicalURL()
-                                       )
-                               );
-                       } else {
-                               $urls = array();
-                       }
-               } else {
-                       $type = "Edit text";
-                       # *.wiki file extension is used by some editors for syntax
-                       # highlighting, so we follow that convention
-                       $urls = array( 'File' => array(
-                               'Extension' => 'wiki',
-                               'URL' => $this->getTitle()->getCanonicalURL(
-                                       array( 'action' => 'edit', 'internaledit' => 'true' ) )
-                       ) );
-               }
-
-               $files = '';
-               foreach( $urls as $key => $vars ) {
-                       $files .= "\n[$key]\n";
-                       foreach( $vars as $varname => $varval ) {
-                               $files .= "$varname=$varval\n";
-                       }
-               }
-
-               $url = $this->getTitle()->getFullURL(
-                       $this->getRequest()->appendQueryValue( 'internaledit', 1, true ) );
-
-               $control = <<<CONTROL
-; You're seeing this file because you're using Mediawiki's External Editor feature.
-; This is probably because you selected use external editor in your preferences.
-; To edit normally, either disable that preference or go to the URL:
-; $url
-; See http://www.mediawiki.org/wiki/Manual:External_editors for details.
-[Process]
-Type=$type
-Engine=MediaWiki
-Script={$wgCanonicalServer}{$wgScript}
-Server={$wgCanonicalServer}
-Path={$wgScriptPath}
-Special namespace=$special
-$files
-CONTROL;
-               echo $control;
-       }
-}
index 57d8c0b..4842c38 100644 (file)
@@ -127,7 +127,7 @@ class FeedUtils {
                }
 
                if( $oldid ) {
-                       wfProfileIn( __METHOD__."-dodiff" );
+                       wfProfileIn( __METHOD__ . "-dodiff" );
 
                        #$diffText = $de->getDiff( wfMessage( 'revisionasof',
                        #       $wgLang->timeanddate( $timestamp ),
@@ -168,7 +168,7 @@ class FeedUtils {
                                $diffText = UtfNormal::cleanUp( $diffText );
                                $diffText = self::applyDiffStyle( $diffText );
                        }
-                       wfProfileOut( __METHOD__."-dodiff" );
+                       wfProfileOut( __METHOD__ . "-dodiff" );
                } else {
                        $rev = Revision::newFromId( $newid );
                        if( $wgFeedDiffCutoff <= 0 || is_null( $rev ) ) {
index 6f7f802..bf3bff7 100644 (file)
@@ -120,6 +120,32 @@ class GitInfo {
                return $sha1;
        }
 
+       /**
+        * Return the commit date of HEAD entry of the git code repository
+        *
+        * @since 1.22
+        * @return int|bool Commit date (UNIX timestamp) or false
+        */
+       public function getHeadCommitDate() {
+               global $wgGitBin;
+
+               if ( !is_file( $wgGitBin ) || !is_executable( $wgGitBin ) ) {
+                       return false;
+               }
+
+               $environment = array( "GIT_DIR" => $this->basedir );
+               $cmd = wfEscapeShellArg( $wgGitBin ) . " show -s --format=format:%ct HEAD";
+               $retc = false;
+               $commitDate = wfShellExec( $cmd, $retc, $environment );
+
+               if ( $retc !== 0 ) {
+                       return false;
+               } else {
+                       return (int)$commitDate;
+               }
+
+        }
+
        /**
         * Return the name of the current branch, or HEAD if not found
         * @return string The branch name, HEAD, or false
index 751f4af..458ab54 100644 (file)
@@ -35,7 +35,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
  * PHP extensions may be included here.
  */
 
-if( !function_exists( 'iconv' ) ) {
+if ( !function_exists( 'iconv' ) ) {
        /**
         * @codeCoverageIgnore
         * @return string
@@ -73,7 +73,7 @@ if ( !function_exists( 'mb_strlen' ) ) {
        }
 }
 
-if( !function_exists( 'mb_strpos' ) ) {
+if ( !function_exists( 'mb_strpos' ) ) {
        /**
         * @codeCoverageIgnore
         * @return int
@@ -84,7 +84,7 @@ if( !function_exists( 'mb_strpos' ) ) {
 
 }
 
-if( !function_exists( 'mb_strrpos' ) ) {
+if ( !function_exists( 'mb_strrpos' ) ) {
        /**
         * @codeCoverageIgnore
         * @return int
@@ -138,7 +138,7 @@ function wfArrayDiff2_cmp( $a, $b ) {
        } else {
                reset( $a );
                reset( $b );
-               while( ( list( , $valueA ) = each( $a ) ) && ( list( , $valueB ) = each( $b ) ) ) {
+               while ( ( list( , $valueA ) = each( $a ) ) && ( list( , $valueB ) = each( $b ) ) ) {
                        $cmp = strcmp( $valueA, $valueB );
                        if ( $cmp !== 0 ) {
                                return $cmp;
@@ -262,7 +262,7 @@ function wfArrayInsertAfter( array $array, array $insert, $after ) {
  */
 function wfObjectToArray( $objOrArray, $recursive = true ) {
        $array = array();
-       if( is_object( $objOrArray ) ) {
+       if ( is_object( $objOrArray ) ) {
                $objOrArray = get_object_vars( $objOrArray );
        }
        foreach ( $objOrArray as $key => $value ) {
@@ -480,8 +480,8 @@ function wfAppendQuery( $url, $query ) {
        if ( is_array( $query ) ) {
                $query = wfArrayToCgi( $query );
        }
-       if( $query != '' ) {
-               if( false === strpos( $url, '?' ) ) {
+       if ( $query != '' ) {
+               if ( false === strpos( $url, '?' ) ) {
                        $url .= '?';
                } else {
                        $url .= '&';
@@ -1011,7 +1011,7 @@ function wfDebugTimer() {
  */
 function wfDebugMem( $exact = false ) {
        $mem = memory_get_usage();
-       if( !$exact ) {
+       if ( !$exact ) {
                $mem = floor( $mem / 1024 ) . ' kilobytes';
        } else {
                $mem .= ' bytes';
@@ -1031,7 +1031,7 @@ function wfDebugMem( $exact = false ) {
 function wfDebugLog( $logGroup, $text, $public = true ) {
        global $wgDebugLogGroups;
        $text = trim( $text ) . "\n";
-       if( isset( $wgDebugLogGroups[$logGroup] ) ) {
+       if ( isset( $wgDebugLogGroups[$logGroup] ) ) {
                $time = wfTimestamp( TS_DB );
                $wiki = wfWikiID();
                $host = wfHostname();
@@ -1310,27 +1310,27 @@ function wfReadOnlyReason() {
 function wfGetLangObj( $langcode = false ) {
        # Identify which language to get or create a language object for.
        # Using is_object here due to Stub objects.
-       if( is_object( $langcode ) ) {
+       if ( is_object( $langcode ) ) {
                # Great, we already have the object (hopefully)!
                return $langcode;
        }
 
        global $wgContLang, $wgLanguageCode;
-       if( $langcode === true || $langcode === $wgLanguageCode ) {
+       if ( $langcode === true || $langcode === $wgLanguageCode ) {
                # $langcode is the language code of the wikis content language object.
                # or it is a boolean and value is true
                return $wgContLang;
        }
 
        global $wgLang;
-       if( $langcode === false || $langcode === $wgLang->getCode() ) {
+       if ( $langcode === false || $langcode === $wgLang->getCode() ) {
                # $langcode is the language code of user language object.
                # or it was a boolean and value is false
                return $wgLang;
        }
 
        $validCodes = array_keys( Language::fetchLanguageNames() );
-       if( in_array( $langcode, $validCodes ) ) {
+       if ( in_array( $langcode, $validCodes ) ) {
                # $langcode corresponds to a valid language.
                return Language::factory( $langcode );
        }
@@ -1463,7 +1463,7 @@ function wfMsgForContent( $key ) {
        $args = func_get_args();
        array_shift( $args );
        $forcontent = true;
-       if( is_array( $wgForceUIMsgAsContentMsg ) &&
+       if ( is_array( $wgForceUIMsgAsContentMsg ) &&
                in_array( $key, $wgForceUIMsgAsContentMsg ) )
        {
                $forcontent = false;
@@ -1486,7 +1486,7 @@ function wfMsgForContentNoTrans( $key ) {
        $args = func_get_args();
        array_shift( $args );
        $forcontent = true;
-       if( is_array( $wgForceUIMsgAsContentMsg ) &&
+       if ( is_array( $wgForceUIMsgAsContentMsg ) &&
                in_array( $key, $wgForceUIMsgAsContentMsg ) )
        {
                $forcontent = false;
@@ -1535,7 +1535,7 @@ function wfMsgGetKey( $key, $useDB = true, $langCode = false, $transform = true
 
        $cache = MessageCache::singleton();
        $message = $cache->get( $key, $useDB, $langCode );
-       if( $message === false ) {
+       if ( $message === false ) {
                $message = '&lt;' . htmlspecialchars( $key ) . '&gt;';
        } elseif ( $transform ) {
                $message = $cache->transform( $message );
@@ -1562,7 +1562,7 @@ function wfMsgReplaceArgs( $message, $args ) {
                        $args = array_values( $args[0] );
                }
                $replacementKeys = array();
-               foreach( $args as $n => $param ) {
+               foreach ( $args as $n => $param ) {
                        $replacementKeys['$' . ( $n + 1 )] = $param;
                }
                $message = strtr( $message, $replacementKeys );
@@ -1646,11 +1646,11 @@ function wfMsgExt( $key, $options ) {
        array_shift( $args );
        $options = (array)$options;
 
-       foreach( $options as $arrayKey => $option ) {
-               if( !preg_match( '/^[0-9]+|language$/', $arrayKey ) ) {
+       foreach ( $options as $arrayKey => $option ) {
+               if ( !preg_match( '/^[0-9]+|language$/', $arrayKey ) ) {
                        # An unknown index, neither numeric nor "language"
                        wfWarn( "wfMsgExt called with incorrect parameter key $arrayKey", 1, E_USER_WARNING );
-               } elseif( preg_match( '/^[0-9]+$/', $arrayKey ) && !in_array( $option,
+               } elseif ( preg_match( '/^[0-9]+$/', $arrayKey ) && !in_array( $option,
                array( 'parse', 'parseinline', 'escape', 'escapenoentities',
                'replaceafter', 'parsemag', 'content' ) ) ) {
                        # A numeric index with unknown value
@@ -1658,11 +1658,11 @@ function wfMsgExt( $key, $options ) {
                }
        }
 
-       if( in_array( 'content', $options, true ) ) {
+       if ( in_array( 'content', $options, true ) ) {
                $forContent = true;
                $langCode = true;
                $langCodeObj = null;
-       } elseif( array_key_exists( 'language', $options ) ) {
+       } elseif ( array_key_exists( 'language', $options ) ) {
                $forContent = false;
                $langCode = wfGetLangObj( $options['language'] );
                $langCodeObj = $langCode;
@@ -1674,13 +1674,13 @@ function wfMsgExt( $key, $options ) {
 
        $string = wfMsgGetKey( $key, /*DB*/true, $langCode, /*Transform*/false );
 
-       if( !in_array( 'replaceafter', $options, true ) ) {
+       if ( !in_array( 'replaceafter', $options, true ) ) {
                $string = wfMsgReplaceArgs( $string, $args );
        }
 
        $messageCache = MessageCache::singleton();
        $parseInline = in_array( 'parseinline', $options, true );
-       if( in_array( 'parse', $options, true ) || $parseInline ) {
+       if ( in_array( 'parse', $options, true ) || $parseInline ) {
                $string = $messageCache->parse( $string, null, true, !$forContent, $langCodeObj );
                if ( $string instanceof ParserOutput ) {
                        $string = $string->getText();
@@ -1688,7 +1688,7 @@ function wfMsgExt( $key, $options ) {
 
                if ( $parseInline ) {
                        $m = array();
-                       if( preg_match( '/^<p>(.*)\n?<\/p>\n?$/sU', $string, $m ) ) {
+                       if ( preg_match( '/^<p>(.*)\n?<\/p>\n?$/sU', $string, $m ) ) {
                                $string = $m[1];
                        }
                }
@@ -1703,7 +1703,7 @@ function wfMsgExt( $key, $options ) {
                $string = Sanitizer::escapeHtmlAllowEntities( $string );
        }
 
-       if( in_array( 'replaceafter', $options, true ) ) {
+       if ( in_array( 'replaceafter', $options, true ) ) {
                $string = wfMsgReplaceArgs( $string, $args );
        }
 
@@ -1750,7 +1750,7 @@ function wfHostname() {
 
                # Hostname overriding
                global $wgOverrideHostname;
-               if( $wgOverrideHostname !== false ) {
+               if ( $wgOverrideHostname !== false ) {
                        # Set static and skip any detection
                        $host = $wgOverrideHostname;
                        return $host;
@@ -1762,7 +1762,7 @@ function wfHostname() {
                } else {
                        $uname = false;
                }
-               if( is_array( $uname ) && isset( $uname['nodename'] ) ) {
+               if ( is_array( $uname ) && isset( $uname['nodename'] ) ) {
                        $host = $uname['nodename'];
                } elseif ( getenv( 'COMPUTERNAME' ) ) {
                        # Windows computer name
@@ -1809,7 +1809,7 @@ function wfReportTime() {
 function wfDebugBacktrace( $limit = 0 ) {
        static $disabled = null;
 
-       if( extension_loaded( 'Zend Optimizer' ) ) {
+       if ( extension_loaded( 'Zend Optimizer' ) ) {
                wfDebug( "Zend Optimizer detected; skipping debug_backtrace for safety.\n" );
                return array();
        }
@@ -1849,14 +1849,14 @@ function wfBacktrace() {
                $msg = "<ul>\n";
        }
        $backtrace = wfDebugBacktrace();
-       foreach( $backtrace as $call ) {
-               if( isset( $call['file'] ) ) {
+       foreach ( $backtrace as $call ) {
+               if ( isset( $call['file'] ) ) {
                        $f = explode( DIRECTORY_SEPARATOR, $call['file'] );
                        $file = $f[count( $f ) - 1];
                } else {
                        $file = '-';
                }
-               if( isset( $call['line'] ) ) {
+               if ( isset( $call['line'] ) ) {
                        $line = $call['line'];
                } else {
                        $line = '-';
@@ -1866,7 +1866,7 @@ function wfBacktrace() {
                } else {
                        $msg .= '<li>' . $file . ' line ' . $line . ' calls ';
                }
-               if( !empty( $call['class'] ) ) {
+               if ( !empty( $call['class'] ) ) {
                        $msg .= $call['class'] . $call['type'];
                }
                $msg .= $call['function'] . '()';
@@ -1964,11 +1964,11 @@ function wfViewPrevNext( $offset, $limit, $link, $query = '', $atend = false ) {
 
        $query = wfCgiToArray( $query );
 
-       if( is_object( $link ) ) {
+       if ( is_object( $link ) ) {
                $title = $link;
        } else {
                $title = Title::newFromText( $link );
-               if( is_null( $title ) ) {
+               if ( is_null( $title ) ) {
                        return false;
                }
        }
@@ -2004,16 +2004,16 @@ function wfClientAcceptsGzip( $force = false ) {
        static $result = null;
        if ( $result === null || $force ) {
                $result = false;
-               if( isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) ) {
+               if ( isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) ) {
                        # @todo FIXME: We may want to blacklist some broken browsers
                        $m = array();
-                       if( preg_match(
+                       if ( preg_match(
                                '/\bgzip(?:;(q)=([0-9]+(?:\.[0-9]+)))?\b/',
                                $_SERVER['HTTP_ACCEPT_ENCODING'],
                                $m )
                        )
                        {
-                               if( isset( $m[2] ) && ( $m[1] == 'q' ) && ( $m[2] == 0 ) ) {
+                               if ( isset( $m[2] ) && ( $m[1] == 'q' ) && ( $m[2] == 0 ) ) {
                                        $result = false;
                                        return $result;
                                }
@@ -2166,14 +2166,14 @@ function wfHttpError( $code, $label, $desc ) {
  * @param $resetGzipEncoding Bool
  */
 function wfResetOutputBuffers( $resetGzipEncoding = true ) {
-       if( $resetGzipEncoding ) {
+       if ( $resetGzipEncoding ) {
                // Suppress Content-Encoding and Content-Length
                // headers from 1.10+s wfOutputHandler
                global $wgDisableOutputCompression;
                $wgDisableOutputCompression = true;
        }
-       while( $status = ob_get_status() ) {
-               if( $status['type'] == 0 /* PHP_OUTPUT_HANDLER_INTERNAL */ ) {
+       while ( $status = ob_get_status() ) {
+               if ( $status['type'] == 0 /* PHP_OUTPUT_HANDLER_INTERNAL */ ) {
                        // Probably from zlib.output_compression or other
                        // PHP-internal setting which can't be removed.
                        //
@@ -2181,13 +2181,13 @@ function wfResetOutputBuffers( $resetGzipEncoding = true ) {
                        // output behavior.
                        break;
                }
-               if( !ob_end_clean() ) {
+               if ( !ob_end_clean() ) {
                        // Could not remove output buffer handler; abort now
                        // to avoid getting in some kind of infinite loop.
                        break;
                }
-               if( $resetGzipEncoding ) {
-                       if( $status['name'] == 'ob_gzhandler' ) {
+               if ( $resetGzipEncoding ) {
+                       if ( $status['name'] == 'ob_gzhandler' ) {
                                // Reset the 'Content-Encoding' field set by this handler
                                // so we can start fresh.
                                header_remove( 'Content-Encoding' );
@@ -2223,7 +2223,7 @@ function wfClearOutputBuffers() {
  */
 function wfAcceptToPrefs( $accept, $def = '*/*' ) {
        # No arg means accept anything (per HTTP spec)
-       if( !$accept ) {
+       if ( !$accept ) {
                return array( $def => 1.0 );
        }
 
@@ -2231,7 +2231,7 @@ function wfAcceptToPrefs( $accept, $def = '*/*' ) {
 
        $parts = explode( ',', $accept );
 
-       foreach( $parts as $part ) {
+       foreach ( $parts as $part ) {
                # @todo FIXME: Doesn't deal with params like 'text/html; level=1'
                $values = explode( ';', trim( $part ) );
                $match = array();
@@ -2258,13 +2258,13 @@ function wfAcceptToPrefs( $accept, $def = '*/*' ) {
  * @private
  */
 function mimeTypeMatch( $type, $avail ) {
-       if( array_key_exists( $type, $avail ) ) {
+       if ( array_key_exists( $type, $avail ) ) {
                return $type;
        } else {
                $parts = explode( '/', $type );
-               if( array_key_exists( $parts[0] . '/*', $avail ) ) {
+               if ( array_key_exists( $parts[0] . '/*', $avail ) ) {
                        return $parts[0] . '/*';
-               } elseif( array_key_exists( '*/*', $avail ) ) {
+               } elseif ( array_key_exists( '*/*', $avail ) ) {
                        return '*/*';
                } else {
                        return null;
@@ -2288,21 +2288,21 @@ function mimeTypeMatch( $type, $avail ) {
 function wfNegotiateType( $cprefs, $sprefs ) {
        $combine = array();
 
-       foreach( array_keys( $sprefs ) as $type ) {
+       foreach ( array_keys( $sprefs ) as $type ) {
                $parts = explode( '/', $type );
-               if( $parts[1] != '*' ) {
+               if ( $parts[1] != '*' ) {
                        $ckey = mimeTypeMatch( $type, $cprefs );
-                       if( $ckey ) {
+                       if ( $ckey ) {
                                $combine[$type] = $sprefs[$type] * $cprefs[$ckey];
                        }
                }
        }
 
-       foreach( array_keys( $cprefs ) as $type ) {
+       foreach ( array_keys( $cprefs ) as $type ) {
                $parts = explode( '/', $type );
-               if( $parts[1] != '*' && !array_key_exists( $type, $sprefs ) ) {
+               if ( $parts[1] != '*' && !array_key_exists( $type, $sprefs ) ) {
                        $skey = mimeTypeMatch( $type, $sprefs );
-                       if( $skey ) {
+                       if ( $skey ) {
                                $combine[$type] = $sprefs[$skey] * $cprefs[$type];
                        }
                }
@@ -2311,8 +2311,8 @@ function wfNegotiateType( $cprefs, $sprefs ) {
        $bestq = 0;
        $besttype = null;
 
-       foreach( array_keys( $combine ) as $type ) {
-               if( $combine[$type] > $bestq ) {
+       foreach ( array_keys( $combine ) as $type ) {
+               if ( $combine[$type] > $bestq ) {
                        $besttype = $type;
                        $bestq = $combine[$type];
                }
@@ -2433,7 +2433,7 @@ function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
  * @return String
  */
 function wfTimestampOrNull( $outputtype = TS_UNIX, $ts = null ) {
-       if( is_null( $ts ) ) {
+       if ( is_null( $ts ) ) {
                return null;
        } else {
                return wfTimestamp( $outputtype, $ts );
@@ -2504,8 +2504,8 @@ function wfTempDir() {
 
        $tmpDir = array_map( "getenv", array( 'TMPDIR', 'TMP', 'TEMP' ) );
 
-       foreach( $tmpDir as $tmp ) {
-               if( $tmp && file_exists( $tmp ) && is_dir( $tmp ) && is_writable( $tmp ) ) {
+       foreach ( $tmpDir as $tmp ) {
+               if ( $tmp && file_exists( $tmp ) && is_dir( $tmp ) && is_writable( $tmp ) ) {
                        return $tmp;
                }
        }
@@ -2532,7 +2532,7 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) {
                wfDebug( "$caller: called wfMkdirParents($dir)\n" );
        }
 
-       if( strval( $dir ) === '' || file_exists( $dir ) ) {
+       if ( strval( $dir ) === '' || file_exists( $dir ) ) {
                return true;
        }
 
@@ -2547,7 +2547,7 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) {
        $ok = mkdir( $dir, $mode, true ); // PHP5 <3
        wfRestoreWarnings();
 
-       if( !$ok ) {
+       if ( !$ok ) {
                // PHP doesn't report the path in its warning message, so add our own to aid in diagnosis.
                wfLogWarning( sprintf( "failed to mkdir \"%s\" mode 0%o", $dir, $mode ) );
        }
@@ -2600,7 +2600,9 @@ function wfPercent( $nr, $acc = 2, $round = true ) {
 function in_string( $needle, $str, $insensitive = false ) {
        wfDeprecated( __METHOD__, '1.21' );
        $func = 'strpos';
-       if( $insensitive ) $func = 'stripos';
+       if ( $insensitive ) {
+               $func = 'stripos';
+       }
 
        return $func( $str, $needle ) !== false;
 }
@@ -2647,19 +2649,19 @@ function wfIniGetBool( $setting ) {
  * @return Bool - Whether or not the extension is loaded
  */
 function wfDl( $extension, $fileName = null ) {
-       if( extension_loaded( $extension ) ) {
+       if ( extension_loaded( $extension ) ) {
                return true;
        }
 
        $canDl = false;
-       if( PHP_SAPI == 'cli' || PHP_SAPI == 'cgi' || PHP_SAPI == 'embed' ) {
+       if ( PHP_SAPI == 'cli' || PHP_SAPI == 'cgi' || PHP_SAPI == 'embed' ) {
                $canDl = ( function_exists( 'dl' ) && is_callable( 'dl' )
                && wfIniGetBool( 'enable_dl' ) && !wfIniGetBool( 'safe_mode' ) );
        }
 
-       if( $canDl ) {
+       if ( $canDl ) {
                $fileName = $fileName ? $fileName : $extension;
-               if( wfIsWindows() ) {
+               if ( wfIsWindows() ) {
                        $fileName = 'php_' . $fileName;
                }
                wfSuppressWarnings();
@@ -2752,7 +2754,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array
        static $disabled;
        if ( is_null( $disabled ) ) {
                $disabled = false;
-               if( wfIniGetBool( 'safe_mode' ) ) {
+               if ( wfIniGetBool( 'safe_mode' ) ) {
                        wfDebug( "wfShellExec can't run in safe_mode, PHP's exec functions are too broken.\n" );
                        $disabled = 'safemode';
                } else {
@@ -2775,7 +2777,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array
        wfInitShellLocale();
 
        $envcmd = '';
-       foreach( $environ as $k => $v ) {
+       foreach ( $environ as $k => $v ) {
                if ( wfIsWindows() ) {
                        /* Surrounding a set in quotes (method used by wfEscapeShellArg) makes the quotes themselves
                         * appear in the environment variable, so we must use carat escaping as documented in
@@ -2900,7 +2902,7 @@ function wfMerge( $old, $mine, $yours, &$result ) {
        $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 );
        wfRestoreWarnings();
 
-       if( !$haveDiff3 ) {
+       if ( !$haveDiff3 ) {
                wfDebug( "diff3 not found\n" );
                return false;
        }
@@ -2929,7 +2931,7 @@ function wfMerge( $old, $mine, $yours, &$result ) {
                wfEscapeShellArg( $yourtextName );
        $handle = popen( $cmd, 'r' );
 
-       if( fgets( $handle, 1024 ) ) {
+       if ( fgets( $handle, 1024 ) ) {
                $conflict = true;
        } else {
                $conflict = false;
@@ -2981,7 +2983,7 @@ function wfDiff( $before, $after, $params = '-u' ) {
 
        # This check may also protect against code injection in
        # case of broken installations.
-       if( !$haveDiff ) {
+       if ( !$haveDiff ) {
                wfDebug( "diff executable not found\n" );
                $diffs = new Diff( explode( "\n", $before ), explode( "\n", $after ) );
                $format = new UnifiedDiffFormatter();
@@ -3095,7 +3097,7 @@ function wfBaseName( $path, $suffix = '' ) {
                ? ''
                : ( '(?:' . preg_quote( $suffix, '#' ) . ')?' );
        $matches = array();
-       if( preg_match( "#([^/\\\\]*?){$encSuffix}[/\\\\]*$#", $path, $matches ) ) {
+       if ( preg_match( "#([^/\\\\]*?){$encSuffix}[/\\\\]*$#", $path, $matches ) ) {
                return $matches[1];
        } else {
                return '';
@@ -3123,21 +3125,21 @@ function wfRelativePath( $path, $from ) {
        $pieces = explode( DIRECTORY_SEPARATOR, dirname( $path ) );
        $against = explode( DIRECTORY_SEPARATOR, $from );
 
-       if( $pieces[0] !== $against[0] ) {
+       if ( $pieces[0] !== $against[0] ) {
                // Non-matching Windows drive letters?
                // Return a full path.
                return $path;
        }
 
        // Trim off common prefix
-       while( count( $pieces ) && count( $against )
+       while ( count( $pieces ) && count( $against )
                && $pieces[0] == $against[0] ) {
                array_shift( $pieces );
                array_shift( $against );
        }
 
        // relative dots to bump us to the parent
-       while( count( $against ) ) {
+       while ( count( $against ) ) {
                array_unshift( $pieces, '..' );
                array_shift( $against );
        }
@@ -3176,7 +3178,7 @@ function wfDoUpdates( $commit = '' ) {
  */
 function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1, $lowercase = true, $engine = 'auto' ) {
        $input = (string)$input;
-       if(
+       if (
                $sourceBase < 2 ||
                $sourceBase > 36 ||
                $destBase < 2 ||
@@ -3189,7 +3191,7 @@ function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1, $lowercase = t
                return false;
        }
 
-       static $baseChars = array (
+       static $baseChars = array(
                10 => 'a', 11 => 'b', 12 => 'c', 13 => 'd', 14 => 'e', 15 => 'f',
                16 => 'g', 17 => 'h', 18 => 'i', 19 => 'j', 20 => 'k', 21 => 'l',
                22 => 'm', 23 => 'n', 24 => 'o', 25 => 'p', 26 => 'q', 27 => 'r',
@@ -3204,39 +3206,39 @@ function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1, $lowercase = t
                'u' => 30, 'v' => 31, 'w' => 32, 'x' => 33, 'y' => 34, 'z' => 35
        );
 
-       if( extension_loaded( 'gmp' ) && ( $engine == 'auto' || $engine == 'gmp' ) ) {
+       if ( extension_loaded( 'gmp' ) && ( $engine == 'auto' || $engine == 'gmp' ) ) {
                $result = gmp_strval( gmp_init( $input, $sourceBase ), $destBase );
-       } elseif( extension_loaded( 'bcmath' ) && ( $engine == 'auto' || $engine == 'bcmath' ) ) {
+       } elseif ( extension_loaded( 'bcmath' ) && ( $engine == 'auto' || $engine == 'bcmath' ) ) {
                $decimal = '0';
-               foreach( str_split( strtolower( $input ) ) as $char ) {
+               foreach ( str_split( strtolower( $input ) ) as $char ) {
                        $decimal = bcmul( $decimal, $sourceBase );
                        $decimal = bcadd( $decimal, $baseChars[$char] );
                }
 
-               for( $result = ''; bccomp( $decimal, 0 ); $decimal = bcdiv( $decimal, $destBase, 0 ) ) {
+               for ( $result = ''; bccomp( $decimal, 0 ); $decimal = bcdiv( $decimal, $destBase, 0 ) ) {
                        $result .= $baseChars[bcmod( $decimal, $destBase )];
                }
 
                $result = strrev( $result );
        } else {
                $inDigits = array();
-               foreach( str_split( strtolower( $input ) ) as $char ) {
+               foreach ( str_split( strtolower( $input ) ) as $char ) {
                        $inDigits[] = $baseChars[$char];
                }
 
                // Iterate over the input, modulo-ing out an output digit
                // at a time until input is gone.
                $result = '';
-               while( $inDigits ) {
+               while ( $inDigits ) {
                        $work = 0;
                        $workDigits = array();
 
                        // Long division...
-                       foreach( $inDigits as $digit ) {
+                       foreach ( $inDigits as $digit ) {
                                $work *= $sourceBase;
                                $work += $digit;
 
-                               if( $workDigits || $work >= $destBase ) {
+                               if ( $workDigits || $work >= $destBase ) {
                                        $workDigits[] = (int) ( $work / $destBase );
                                }
                                $work %= $destBase;
@@ -3253,7 +3255,7 @@ function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1, $lowercase = t
                $result = strrev( $result );
        }
 
-       if( !$lowercase ) {
+       if ( !$lowercase ) {
                $result = strtoupper( $result );
        }
 
@@ -3279,9 +3281,9 @@ function wfCreateObject( $name, $p ) {
 function wfHttpOnlySafe() {
        global $wgHttpOnlyBlacklist;
 
-       if( isset( $_SERVER['HTTP_USER_AGENT'] ) ) {
-               foreach( $wgHttpOnlyBlacklist as $regex ) {
-                       if( preg_match( $regex, $_SERVER['HTTP_USER_AGENT'] ) ) {
+       if ( isset( $_SERVER['HTTP_USER_AGENT'] ) ) {
+               foreach ( $wgHttpOnlyBlacklist as $regex ) {
+                       if ( preg_match( $regex, $_SERVER['HTTP_USER_AGENT'] ) ) {
                                return false;
                        }
                }
@@ -3333,9 +3335,9 @@ function wfFixSessionID() {
 function wfSetupSession( $sessionId = false ) {
        global $wgSessionsInMemcached, $wgSessionsInObjectCache, $wgCookiePath, $wgCookieDomain,
                        $wgCookieSecure, $wgCookieHttpOnly, $wgSessionHandler;
-       if( $wgSessionsInObjectCache || $wgSessionsInMemcached ) {
+       if ( $wgSessionsInObjectCache || $wgSessionsInMemcached ) {
                ObjectCacheSessionHandler::install();
-       } elseif( $wgSessionHandler && $wgSessionHandler != ini_get( 'session.save_handler' ) ) {
+       } elseif ( $wgSessionHandler && $wgSessionHandler != ini_get( 'session.save_handler' ) ) {
                # Only set this if $wgSessionHandler isn't null and session.save_handler
                # hasn't already been set to the desired value (that causes errors)
                ini_set( 'session.save_handler', $wgSessionHandler );
@@ -3558,7 +3560,7 @@ function wfScript( $script = 'index' ) {
        global $wgScriptPath, $wgScriptExtension, $wgScript, $wgLoadScript;
        if ( $script === 'index' ) {
                return $wgScript;
-       } else if ( $script === 'load' ) {
+       } elseif ( $script === 'load' ) {
                return $wgLoadScript;
        } else {
                return "{$wgScriptPath}/{$script}{$wgScriptExtension}";
@@ -3571,7 +3573,7 @@ function wfScript( $script = 'index' ) {
  * @return string script URL
  */
 function wfGetScriptUrl() {
-       if( isset( $_SERVER['SCRIPT_NAME'] ) ) {
+       if ( isset( $_SERVER['SCRIPT_NAME'] ) ) {
                #
                # as it was called, minus the query string.
                #
@@ -3716,9 +3718,9 @@ function wfStripIllegalFilenameChars( $name ) {
 function wfMemoryLimit() {
        global $wgMemoryLimit;
        $memlimit = wfShorthandToInteger( ini_get( 'memory_limit' ) );
-       if( $memlimit != -1 ) {
+       if ( $memlimit != -1 ) {
                $conflimit = wfShorthandToInteger( $wgMemoryLimit );
-               if( $conflimit == -1 ) {
+               if ( $conflimit == -1 ) {
                        wfDebug( "Removing PHP's memory limit\n" );
                        wfSuppressWarnings();
                        ini_set( 'memory_limit', $conflimit );
@@ -3743,7 +3745,7 @@ function wfMemoryLimit() {
  */
 function wfShorthandToInteger( $string = '' ) {
        $string = trim( $string );
-       if( $string === '' ) {
+       if ( $string === '' ) {
                return -1;
        }
        $last = $string[strlen( $string ) - 1];
@@ -3778,7 +3780,7 @@ function wfBCP47( $code ) {
        foreach ( $codeSegment as $segNo => $seg ) {
                if ( count( $codeSegment ) > 0 ) {
                        // when previous segment is x, it is a private segment and should be lc
-                       if( $segNo > 0 && strtolower( $codeSegment[( $segNo - 1 )] ) == 'x' ) {
+                       if ( $segNo > 0 && strtolower( $codeSegment[( $segNo - 1 )] ) == 'x' ) {
                                $codeBCP[$segNo] = strtolower( $seg );
                        // ISO 3166 country code
                        } elseif ( ( strlen( $seg ) == 2 ) && ( $segNo > 0 ) ) {
@@ -3874,7 +3876,7 @@ function wfRunHooks( $event, $args = array() ) {
  * @throws MWException if $data not long enough, or if unpack fails
  * @return array Associative array of the extracted data
  */
-function wfUnpack( $format, $data, $length=false ) {
+function wfUnpack( $format, $data, $length = false ) {
        if ( $length !== false ) {
                $realLen = strlen( $data );
                if ( $realLen < $length ) {
@@ -3916,19 +3918,19 @@ function wfIsBadImage( $name, $contextTitle = false, $blacklist = null ) {
 
        # Handle redirects
        $redirectTitle = RepoGroup::singleton()->checkRedirect( Title::makeTitle( NS_FILE, $name ) );
-       if( $redirectTitle ) {
+       if ( $redirectTitle ) {
                $name = $redirectTitle->getDBkey();
        }
 
        # Run the extension hook
        $bad = false;
-       if( !wfRunHooks( 'BadImage', array( $name, &$bad ) ) ) {
+       if ( !wfRunHooks( 'BadImage', array( $name, &$bad ) ) ) {
                wfProfileOut( __METHOD__ );
                return $bad;
        }
 
        $cacheable = ( $blacklist === null );
-       if( $cacheable && $badImageCache !== null ) {
+       if ( $cacheable && $badImageCache !== null ) {
                $badImages = $badImageCache;
        } else { // cache miss
                if ( $blacklist === null ) {
@@ -3937,7 +3939,7 @@ function wfIsBadImage( $name, $contextTitle = false, $blacklist = null ) {
                # Build the list now
                $badImages = array();
                $lines = explode( "\n", $blacklist );
-               foreach( $lines as $line ) {
+               foreach ( $lines as $line ) {
                        # List items only
                        if ( substr( $line, 0, 1 ) !== '*' ) {
                                continue;
diff --git a/includes/HashRing.php b/includes/HashRing.php
new file mode 100644 (file)
index 0000000..976d36d
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+/**
+ * Convenience class for weighted consistent hash rings.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Convenience class for weighted consistent hash rings
+ *
+ * @since 1.22
+ */
+class HashRing {
+       /** @var Array (location => (start, end)) */
+       protected $ring = array();
+
+       const RING_SIZE = 16777216; // 2^24
+
+       /**
+        * @param array $map (location => weight)
+        */
+       public function __construct( array $map ) {
+               $sum = array_sum( $map );
+               if ( !count( $map ) || $sum <= 0 ) {
+                       throw new MWException( "Ring is empty or all weights are zero." );
+               }
+               // Sort the locations based on the hash of their names
+               $hashes = array();
+               foreach ( $map as $location => $weight ) {
+                       $hashes[$location] = sha1( $location );
+               }
+               uksort( $map, function ( $a, $b ) use ( $hashes ) {
+                       return strcmp( $hashes[$a], $hashes[$b] );
+               } );
+               // Fit the map to weight-proportionate one with a space of size RING_SIZE
+               $standardMap = array();
+               foreach ( $map as $location => $weight ) {
+                       $standardMap[$location] = (int)floor( $weight/$sum * self::RING_SIZE );
+               }
+               // Build a ring of RING_SIZE spots, with each location at a spot in location hash order
+               $index = 0;
+               foreach ( $standardMap as $location => $weight ) {
+                       // Location covers half-closed interval [$index,$index + $weight)
+                       $this->ring[$location] = array( $index, $index + $weight );
+                       $index += $weight;
+               }
+               // Make sure the last location covers what is left
+               end( $this->ring );
+               $this->ring[key( $this->ring )][1] = self::RING_SIZE;
+       }
+
+       /**
+        * Get the location of an item on the ring
+        *
+        * @param string $item
+        * @return string Location
+        */
+       public function getLocation( $item ) {
+               $locations = $this->getLocations( $item, 1 );
+               return $locations[0];
+       }
+
+       /**
+        * Get the location of an item on the ring, as well as the next clockwise locations
+        *
+        * @param string $item
+        * @param integer $limit Maximum number of locations to return
+        * @return array List of locations
+        */
+       public function getLocations( $item, $limit ) {
+               $locations = array();
+               $primaryLocation = null;
+               $spot = hexdec( substr( sha1( $item ), 0, 6 ) ); // first 24 bits
+               foreach ( $this->ring as $location => $range ) {
+                       if ( count( $locations ) >= $limit ) {
+                               break;
+                       }
+                       // The $primaryLocation is the location the item spot is in.
+                       // After that is reached, keep appending the next locations.
+                       if ( ( $range[0] <= $spot && $spot < $range[1] ) || $primaryLocation !== null ) {
+                               if ( $primaryLocation === null ) {
+                                       $primaryLocation = $location;
+                               }
+                               $locations[] = $location;
+                       }
+               }
+               // If more locations are requested, wrap-around and keep adding them
+               reset( $this->ring );
+               while ( count( $locations ) < $limit ) {
+                       list( $location, ) = each( $this->ring );
+                       if ( $location === $primaryLocation ) {
+                               break; // don't go in circles
+                       }
+                       $locations[] = $location;
+               }
+               return $locations;
+       }
+}
index af4b4bb..07bb42b 100644 (file)
@@ -926,22 +926,22 @@ class Html {
                global $wgStylePath;
 
                if ( $useStylePath ) {
-                       $icon = $wgStylePath.'/common/images/'.$icon;
+                       $icon = $wgStylePath . '/common/images/' . $icon;
                }
 
                $s = Html::openElement( 'div', array( 'class' => "mw-infobox $class" ) );
 
-               $s .= Html::openElement( 'div', array( 'class' => 'mw-infobox-left' ) ).
+               $s .= Html::openElement( 'div', array( 'class' => 'mw-infobox-left' ) ) .
                                Html::element( 'img',
                                        array(
                                                'src' => $icon,
                                                'alt' => $alt,
                                        )
-                               ).
+                               ) .
                                Html::closeElement( 'div' );
 
-               $s .= Html::openElement( 'div', array( 'class' => 'mw-infobox-right' ) ).
-                               $text.
+               $s .= Html::openElement( 'div', array( 'class' => 'mw-infobox-right' ) ) .
+                               $text .
                                Html::closeElement( 'div' );
                $s .= Html::element( 'div', array( 'style' => 'clear: left;' ), ' ' );
 
index acf9baa..489a83a 100644 (file)
@@ -774,7 +774,10 @@ class CurlHttpRequest extends MWHttpRequest {
                        wfRestoreWarnings();
                }
 
-               if ( false === curl_exec( $curlHandle ) ) {
+               $curlRes = curl_exec( $curlHandle );
+               if ( curl_errno( $curlHandle ) == CURLE_OPERATION_TIMEOUTED ) {
+                       $this->status->fatal( 'http-timed-out', $this->url );
+               } elseif ( $curlRes === false ) {
                        $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
                } else {
                        $this->headerList = explode( "\r\n", $this->headerText );
index 1556ad9..8f8022f 100644 (file)
@@ -302,7 +302,7 @@ class ImageGallery {
                                $thumbhtml = "\n\t\t\t" . '<div style="height: ' . ( self::THUMB_PADDING + $this->mHeights ) . 'px;">'
                                        . htmlspecialchars( $img->getLastError() ) . '</div>';
                        } else {
-                               $vpad = ( self::THUMB_PADDING + $this->mHeights - $thumb->height ) /2;
+                               $vpad = ( self::THUMB_PADDING + $this->mHeights - $thumb->height ) / 2;
 
                                $imageParameters = array(
                                        'desc-link' => true,
index b5b69df..5e51878 100644 (file)
@@ -631,7 +631,7 @@ EOT
         * external editing (and instructions link) etc.
         */
        protected function uploadLinksBox() {
-               global $wgEnableUploads, $wgUseExternalEditor;
+               global $wgEnableUploads;
 
                if ( !$wgEnableUploads ) {
                        return;
@@ -654,25 +654,6 @@ EOT
                        $out->addHTML( "<li id=\"mw-imagepage-upload-disallowed\">" . $this->getContext()->msg( 'upload-disallowed-here' )->escaped() . "</li>\n" );
                }
 
-               # External editing link
-               if ( $wgUseExternalEditor ) {
-                       $elink = Linker::linkKnown(
-                               $this->getTitle(),
-                               wfMessage( 'edit-externally' )->escaped(),
-                               array(),
-                               array(
-                                       'action' => 'edit',
-                                       'externaledit' => 'true',
-                                       'mode' => 'file'
-                               )
-                       );
-                       $out->addHTML(
-                               '<li id="mw-imagepage-edit-external">' . $elink . ' <small>' .
-                                       wfMessage( 'edit-externally-help' )->parse() .
-                                       "</small></li>\n"
-                       );
-               }
-
                $out->addHTML( "</ul>\n" );
        }
 
index f9f6cee..b9ec6e0 100644 (file)
  * @author Rob Church <robchur@gmail.com>
  */
 abstract class ImageQueryPage extends QueryPage {
-
        /**
         * Format and output report results using the given information plus
         * OutputPage
         *
-        * @param $out OutputPage to print to
-        * @param $skin Skin: user skin to use [unused]
-        * @param $dbr DatabaseBase (read) connection to use
-        * @param $res Integer: result pointer
-        * @param $num Integer: number of available result rows
-        * @param $offset Integer: paging offset
+        * @param OutputPage $out OutputPage to print to
+        * @param Skin $skin User skin to use [unused]
+        * @param DatabaseBase $dbr (read) connection to use
+        * @param int $res Result pointer
+        * @param int $num Number of available result rows
+        * @param int $offset Paging offset
         */
        protected function outputResults( $out, $skin, $dbr, $res, $num, $offset ) {
                if( $num > 0 ) {
@@ -65,11 +64,10 @@ abstract class ImageQueryPage extends QueryPage {
        /**
         * Get additional HTML to be shown in a results' cell
         *
-        * @param $row Object: result row
-        * @return String
+        * @param object $row Result row
+        * @return string
         */
        protected function getCellHtml( $row ) {
                return '';
        }
-
 }
index 04d99e1..0e12e6d 100644 (file)
@@ -432,7 +432,7 @@ class WikiImporter {
                        $lookup[$this->reader->nodeType],
                        $this->reader->name,
                        $this->reader->value
-               )."\n\n" );
+               ) . "\n\n" );
        }
 
        /**
@@ -441,10 +441,16 @@ class WikiImporter {
         * @return bool
         */
        public function doImport() {
+
+               // Calls to reader->read need to be wrapped in calls to
+               // libxml_disable_entity_loader() to avoid local file
+               // inclusion attacks (bug 46932).
+               $oldDisable = libxml_disable_entity_loader( true );
                $this->reader->read();
 
                if ( $this->reader->name != 'mediawiki' ) {
-                       throw new MWException( "Expected <mediawiki> tag, got ".
+                       libxml_disable_entity_loader( $oldDisable );
+                       throw new MWException( "Expected <mediawiki> tag, got " .
                                $this->reader->name );
                }
                $this->debug( "<mediawiki> tag is correct." );
@@ -482,6 +488,7 @@ class WikiImporter {
                        }
                }
 
+               libxml_disable_entity_loader( $oldDisable );
                return true;
        }
 
index e4222e3..3e8a3c9 100644 (file)
@@ -238,7 +238,7 @@ class Linker {
                # Note: we want the href attribute first, for prettiness.
                $attribs = array( 'href' => self::linkUrl( $target, $query, $options ) );
                if ( in_array( 'forcearticlepath', $options ) && $oldquery ) {
-                       $attribs['href'] = wfAppendQuery( $attribs['href'], wfArrayToCgi( $oldquery ) );
+                       $attribs['href'] = wfAppendQuery( $attribs['href'], $oldquery );
                }
 
                $attribs = array_merge(
@@ -840,7 +840,7 @@ class Linker {
                # zoom icon still needs it, so we make a unique query for it. See bug 14771
                $url = $title->getLocalURL( $query );
                if ( $page ) {
-                       $url = wfAppendQuery( $url, 'page=' . urlencode( $page ) );
+                       $url = wfAppendQuery( $url, array( 'page' => $page ) );
                }
                if ( $manualthumb &&
                     !isset( $fp['link-title'] ) &&
index f79b423..f54487a 100644 (file)
@@ -840,7 +840,7 @@ class LinksDeletionUpdate extends SqlDataUpdate {
                $id = $this->mPage->getId();
 
                # Delete restrictions for it
-               $this->mDb->delete( 'page_restrictions', array ( 'pr_page' => $id ), __METHOD__ );
+               $this->mDb->delete( 'page_restrictions', array( 'pr_page' => $id ), __METHOD__ );
 
                # Fix category table counts
                $cats = array();
index 41c7cb9..86508ec 100644 (file)
@@ -149,7 +149,7 @@ class MagicWord {
        );
 
        /* Array of caching hints for ParserCache */
-       static public $mCacheTTLs = array (
+       static public $mCacheTTLs = array(
                'currentmonth' => 86400,
                'currentmonth1' => 86400,
                'currentmonthname' => 86400,
index 7592530..11fc574 100644 (file)
@@ -231,7 +231,7 @@ class MimeMagic {
                        }
 
                        $mime = substr( $s, 0, $i );
-                       $ext = trim( substr( $s, $i+1 ) );
+                       $ext = trim( substr( $s, $i + 1 ) );
 
                        if ( empty( $ext ) ) {
                                continue;
@@ -628,7 +628,7 @@ class MimeMagic {
                        $doctype = strpos( $head, "\x42\x82" );
                        if ( $doctype ) {
                                // Next byte is datasize, then data (sizes larger than 1 byte are very stupid muxers)
-                               $data = substr( $head, $doctype+3, 8 );
+                               $data = substr( $head, $doctype + 3, 8 );
                                if ( strncmp( $data, "matroska", 8 ) == 0 ) {
                                        wfDebug( __METHOD__ . ": recognized file as video/x-matroska\n" );
                                        return "video/x-matroska";
@@ -897,7 +897,7 @@ class MimeMagic {
                                $m = finfo_file( $mime_magic_resource, $file );
                                finfo_close( $mime_magic_resource );
                        } else {
-                               wfDebug( __METHOD__ . ": finfo_open failed on ".FILEINFO_MIME."!\n" );
+                               wfDebug( __METHOD__ . ": finfo_open failed on " . FILEINFO_MIME . "!\n" );
                        }
                } elseif ( function_exists( "mime_content_type" ) ) {
 
index 4e4b739..bf3c084 100644 (file)
@@ -319,7 +319,7 @@ class OutputPage extends ContextSource {
         * @param string $text or array of strings
         */
        function addKeyword( $text ) {
-               if( is_array( $text ) ) {
+               if ( is_array( $text ) ) {
                        $this->mKeywords = array_merge( $this->mKeywords, $text );
                } else {
                        array_push( $this->mKeywords, $text );
@@ -413,13 +413,14 @@ class OutputPage extends ContextSource {
        public function addScriptFile( $file, $version = null ) {
                global $wgStylePath, $wgStyleVersion;
                // See if $file parameter is an absolute URL or begins with a slash
-               if( substr( $file, 0, 1 ) == '/' || preg_match( '#^[a-z]*://#i', $file ) ) {
+               if ( substr( $file, 0, 1 ) == '/' || preg_match( '#^[a-z]*://#i', $file ) ) {
                        $path = $file;
                } else {
                        $path = "{$wgStylePath}/common/{$file}";
                }
-               if ( is_null( $version ) )
+               if ( is_null( $version ) ) {
                        $version = $wgStyleVersion;
+               }
                $this->addScript( Html::linkedScript( wfAppendQuery( $path, $version ) ) );
        }
 
@@ -452,9 +453,9 @@ class OutputPage extends ContextSource {
        protected function filterModules( $modules, $position = null, $type = ResourceLoaderModule::TYPE_COMBINED ) {
                $resourceLoader = $this->getResourceLoader();
                $filteredModules = array();
-               foreach( $modules as $val ) {
+               foreach ( $modules as $val ) {
                        $module = $resourceLoader->getModule( $val );
-                       if( $module instanceof ResourceLoaderModule
+                       if ( $module instanceof ResourceLoaderModule
                                && $module->getOrigin() <= $this->getAllowedModules( $type )
                                && ( is_null( $position ) || $module->getPosition() == $position )
                                && ( !$this->mTarget || in_array( $this->mTarget, $module->getTargets() ) ) )
@@ -687,17 +688,17 @@ class OutputPage extends ContextSource {
         * @return Boolean: true iff cache-ok headers was sent.
         */
        public function checkLastModified( $timestamp ) {
-               global $wgCachePages, $wgCacheEpoch;
+               global $wgCachePages, $wgCacheEpoch, $wgUseSquid, $wgSquidMaxage;
 
                if ( !$timestamp || $timestamp == '19700101000000' ) {
                        wfDebug( __METHOD__ . ": CACHE DISABLED, NO TIMESTAMP\n" );
                        return false;
                }
-               if( !$wgCachePages ) {
+               if ( !$wgCachePages ) {
                        wfDebug( __METHOD__ . ": CACHE DISABLED\n", false );
                        return false;
                }
-               if( $this->getUser()->getOption( 'nocache' ) ) {
+               if ( $this->getUser()->getOption( 'nocache' ) ) {
                        wfDebug( __METHOD__ . ": USER DISABLED CACHE\n", false );
                        return false;
                }
@@ -708,6 +709,10 @@ class OutputPage extends ContextSource {
                        'user' => $this->getUser()->getTouched(),
                        'epoch' => $wgCacheEpoch
                );
+               if ( $wgUseSquid ) {
+                       // bug 44570: the core page itself may not change, but resources might
+                       $modifiedTimes['sepoch'] = wfTimestamp( TS_MW, time() - $wgSquidMaxage );
+               }
                wfRunHooks( 'OutputPageCheckLastModified', array( &$modifiedTimes ) );
 
                $maxModified = max( $modifiedTimes );
@@ -746,7 +751,7 @@ class OutputPage extends ContextSource {
                        wfTimestamp( TS_ISO_8601, $clientHeaderTime ) . "\n", false );
                wfDebug( __METHOD__ . ": effective Last-Modified: " .
                        wfTimestamp( TS_ISO_8601, $maxModified ) . "\n", false );
-               if( $clientHeaderTime < $maxModified ) {
+               if ( $clientHeaderTime < $maxModified ) {
                        wfDebug( __METHOD__ . ": STALE, $info\n", false );
                        return false;
                }
@@ -788,10 +793,10 @@ class OutputPage extends ContextSource {
        public function setRobotPolicy( $policy ) {
                $policy = Article::formatRobotPolicy( $policy );
 
-               if( isset( $policy['index'] ) ) {
+               if ( isset( $policy['index'] ) ) {
                        $this->setIndexPolicy( $policy['index'] );
                }
-               if( isset( $policy['follow'] ) ) {
+               if ( isset( $policy['follow'] ) ) {
                        $this->setFollowPolicy( $policy['follow'] );
                }
        }
@@ -805,7 +810,7 @@ class OutputPage extends ContextSource {
         */
        public function setIndexPolicy( $policy ) {
                $policy = trim( $policy );
-               if( in_array( $policy, array( 'index', 'noindex' ) ) ) {
+               if ( in_array( $policy, array( 'index', 'noindex' ) ) ) {
                        $this->mIndexPolicy = $policy;
                }
        }
@@ -819,7 +824,7 @@ class OutputPage extends ContextSource {
         */
        public function setFollowPolicy( $policy ) {
                $policy = trim( $policy );
-               if( in_array( $policy, array( 'follow', 'nofollow' ) ) ) {
+               if ( in_array( $policy, array( 'follow', 'nofollow' ) ) ) {
                        $this->mFollowPolicy = $policy;
                }
        }
@@ -1306,7 +1311,7 @@ class OutputPage extends ContextSource {
         * @return Int ResourceLoaderModule ORIGIN_ class constant
         */
        public function getAllowedModules( $type ) {
-               if( $type == ResourceLoaderModule::TYPE_COMBINED ) {
+               if ( $type == ResourceLoaderModule::TYPE_COMBINED ) {
                        return min( array_values( $this->mAllowedModules ) );
                } else {
                        return isset( $this->mAllowedModules[$type] )
@@ -1648,7 +1653,7 @@ class OutputPage extends ContextSource {
        public function parse( $text, $linestart = true, $interface = false, $language = null ) {
                global $wgParser;
 
-               if( is_null( $this->getTitle() ) ) {
+               if ( is_null( $this->getTitle() ) ) {
                        throw new MWException( 'Empty $mTitle in ' . __METHOD__ );
                }
 
@@ -1772,8 +1777,8 @@ class OutputPage extends ContextSource {
        public function addVaryHeader( $header, $option = null ) {
                if ( !array_key_exists( $header, $this->mVaryHeader ) ) {
                        $this->mVaryHeader[$header] = (array)$option;
-               } elseif( is_array( $option ) ) {
-                       if( is_array( $this->mVaryHeader[$header] ) ) {
+               } elseif ( is_array( $option ) ) {
+                       if ( is_array( $this->mVaryHeader[$header] ) ) {
                                $this->mVaryHeader[$header] = array_merge( $this->mVaryHeader[$header], $option );
                        } else {
                                $this->mVaryHeader[$header] = $option;
@@ -1807,7 +1812,7 @@ class OutputPage extends ContextSource {
                $this->addVaryHeader( 'Cookie', $cookiesOption );
 
                $headers = array();
-               foreach( $this->mVaryHeader as $header => $option ) {
+               foreach ( $this->mVaryHeader as $header => $option ) {
                        $newheader = $header;
                        if ( is_array( $option ) && count( $option ) > 0 ) {
                                $newheader .= ';' . implode( ';', $option );
@@ -1829,11 +1834,11 @@ class OutputPage extends ContextSource {
         */
        function addAcceptLanguage() {
                $lang = $this->getTitle()->getPageLanguage();
-               if( !$this->getRequest()->getCheck( 'variant' ) && $lang->hasVariants() ) {
+               if ( !$this->getRequest()->getCheck( 'variant' ) && $lang->hasVariants() ) {
                        $variants = $lang->getVariants();
                        $aloption = array();
                        foreach ( $variants as $variant ) {
-                               if( $variant === $lang->getCode() ) {
+                               if ( $variant === $lang->getCode() ) {
                                        continue;
                                } else {
                                        $aloption[] = 'string-contains=' . $variant;
@@ -1914,12 +1919,11 @@ class OutputPage extends ContextSource {
                        $response->header( $this->getXVO() );
                }
 
-               if( $this->mEnableClientCache ) {
-                       if(
+               if ( $this->mEnableClientCache ) {
+                       if (
                                $wgUseSquid && session_id() == '' && !$this->isPrintable() &&
                                $this->mSquidMaxage != 0 && !$this->haveCacheVaryCookies()
-                       )
-                       {
+                       ) {
                                if ( $wgUseESI ) {
                                        # We'll purge the proxy cache explicitly, but require end user agents
                                        # to revalidate against the proxy on each visit.
@@ -1946,7 +1950,7 @@ class OutputPage extends ContextSource {
                                $response->header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', 0 ) . ' GMT' );
                                $response->header( "Cache-Control: private, must-revalidate, max-age=0" );
                        }
-                       if( $this->mLastModified ) {
+                       if ( $this->mLastModified ) {
                                $response->header( "Last-Modified: {$this->mLastModified}" );
                        }
                } else {
@@ -1981,7 +1985,7 @@ class OutputPage extends ContextSource {
        public function output() {
                global $wgLanguageCode, $wgDebugRedirects, $wgMimeType, $wgVaryOnXFP;
 
-               if( $this->mDoNothing ) {
+               if ( $this->mDoNothing ) {
                        return;
                }
 
@@ -1996,9 +2000,9 @@ class OutputPage extends ContextSource {
                        $redirect = $this->mRedirect;
                        $code = $this->mRedirectCode;
 
-                       if( wfRunHooks( "BeforePageRedirect", array( $this, &$redirect, &$code ) ) ) {
-                               if( $code == '301' || $code == '303' ) {
-                                       if( !$wgDebugRedirects ) {
+                       if ( wfRunHooks( "BeforePageRedirect", array( $this, &$redirect, &$code ) ) ) {
+                               if ( $code == '301' || $code == '303' ) {
+                                       if ( !$wgDebugRedirects ) {
                                                $message = HttpStatus::getMessage( $code );
                                                $response->header( "HTTP/1.1 $code $message" );
                                        }
@@ -2010,7 +2014,7 @@ class OutputPage extends ContextSource {
                                $this->sendCacheControl();
 
                                $response->header( "Content-Type: text/html; charset=utf-8" );
-                               if( $wgDebugRedirects ) {
+                               if ( $wgDebugRedirects ) {
                                        $url = htmlspecialchars( $redirect );
                                        print "<html>\n<head>\n<title>Redirect</title>\n</head>\n<body>\n";
                                        print "<p>Location: <a href=\"$url\">$url</a></p>\n";
@@ -2119,7 +2123,7 @@ class OutputPage extends ContextSource {
         * @param array $params message parameters; ignored if $msg is a Message object
         */
        public function showErrorPage( $title, $msg, $params = array() ) {
-               if( !$title instanceof Message ) {
+               if ( !$title instanceof Message ) {
                        $title = $this->msg( $title );
                }
 
@@ -2260,7 +2264,7 @@ class OutputPage extends ContextSource {
                if ( count( $errors ) > 1 ) {
                        $text .= '<ul class="permissions-errors">' . "\n";
 
-                       foreach( $errors as $error ) {
+                       foreach ( $errors as $error ) {
                                $text .= '<li>';
                                $text .= call_user_func_array( array( $this, 'msg' ), $error )->plain();
                                $text .= "</li>\n";
@@ -2308,7 +2312,7 @@ class OutputPage extends ContextSource {
 
                if ( !empty( $reasons ) ) {
                        // Permissions error
-                       if( $source ) {
+                       if ( $source ) {
                                $this->setPageTitle( $this->msg( 'viewsource-title', $this->getTitle()->getPrefixedText() ) );
                                $this->addBacklinkSubtitle( $this->getTitle() );
                        } else {
@@ -2321,7 +2325,7 @@ class OutputPage extends ContextSource {
                }
 
                // Show source, if supplied
-               if( is_string( $source ) ) {
+               if ( is_string( $source ) ) {
                        $this->addWikiMsg( 'viewsourcetext' );
 
                        $pageLang = $this->getTitle()->getPageLanguage();
@@ -2347,7 +2351,7 @@ $templates
                # If the title doesn't exist, it's fairly pointless to print a return
                # link to it.  After all, you just tried editing it and couldn't, so
                # what's there to do there?
-               if( $this->getTitle()->exists() ) {
+               if ( $this->getTitle()->exists() ) {
                        $this->returnToMain( null, $this->getTitle() );
                }
        }
@@ -2371,7 +2375,7 @@ $templates
         */
        public function showLagWarning( $lag ) {
                global $wgSlaveLagWarning, $wgSlaveLagCritical;
-               if( $lag >= $wgSlaveLagWarning ) {
+               if ( $lag >= $wgSlaveLagWarning ) {
                        $message = $lag < $wgSlaveLagCritical
                                ? 'lag-warn-normal'
                                : 'lag-warn-high';
@@ -2415,9 +2419,9 @@ $templates
         * @param $options Options array to pass to Linker
         */
        public function addReturnTo( $title, $query = array(), $text = null, $options = array() ) {
-               if( in_array( 'http', $options ) ) {
+               if ( in_array( 'http', $options ) ) {
                        $proto = PROTO_HTTP;
-               } elseif( in_array( 'https', $options ) ) {
+               } elseif ( in_array( 'https', $options ) ) {
                        $proto = PROTO_HTTPS;
                } else {
                        $proto = PROTO_RELATIVE;
@@ -2552,7 +2556,7 @@ $templates
 
                        wfRunHooks( 'AjaxAddScript', array( &$this ) );
 
-                       if( $wgAjaxWatch && $this->getUser()->isLoggedIn() ) {
+                       if ( $wgAjaxWatch && $this->getUser()->isLoggedIn() ) {
                                $this->addModules( 'mediawiki.page.watch.ajax' );
                        }
 
@@ -2672,7 +2676,7 @@ $templates
                        );
                        $context = new ResourceLoaderContext( $resourceLoader, new FauxRequest( $query ) );
                        // Extract modules that know they're empty
-                       $emptyModules = array ();
+                       $emptyModules = array();
                        foreach ( $grpModules as $key => $module ) {
                                if ( $module->isKnownEmpty( $context ) ) {
                                        $emptyModules[$key] = 'ready';
@@ -2752,7 +2756,7 @@ $templates
                                // Automatically select style/script elements
                                if ( $only === ResourceLoaderModule::TYPE_STYLES ) {
                                        $link = Html::linkedStyle( $url );
-                               } else if ( $loadCall ) {
+                               } elseif ( $loadCall ) {
                                        $link = Html::inlineScript(
                                                ResourceLoader::makeLoaderConditionalScript(
                                                        Xml::encodeJsCall( 'mw.loader.load', array( $url, 'text/javascript', true ) )
@@ -2763,7 +2767,7 @@ $templates
                                }
                        }
 
-                       if( $group == 'noscript' ) {
+                       if ( $group == 'noscript' ) {
                                $links .= Html::rawElement( 'noscript', array(), $link ) . "\n";
                        } else {
                                $links .= $link . "\n";
@@ -2874,7 +2878,7 @@ $templates
                // Add user JS if enabled
                if ( $wgAllowUserJs ) {
                        if ( $this->getUser()->isLoggedIn() ) {
-                               if( $this->getTitle() && $this->getTitle()->isJsSubpage() && $this->userCanPreview() ) {
+                               if ( $this->getTitle() && $this->getTitle()->isJsSubpage() && $this->userCanPreview() ) {
                                        # XXX: additional security check/prompt?
                                        // We're on a preview of a JS subpage
                                        // Exclude this page from the user module in case it's in there (bug 26283)
@@ -3137,7 +3141,7 @@ $templates
                ) );
 
                $p = "{$this->mIndexPolicy},{$this->mFollowPolicy}";
-               if( $p !== 'index,follow' ) {
+               if ( $p !== 'index,follow' ) {
                        // http://www.robotstxt.org/wc/meta-user.html
                        // Only show if it's different from the default robots policy
                        $tags['meta-robots'] = Html::element( 'meta', array(
@@ -3285,7 +3289,7 @@ $templates
 
                # Feeds
                if ( $wgFeed ) {
-                       foreach( $this->getSyndicationLinks() as $format => $link ) {
+                       foreach ( $this->getSyndicationLinks() as $format => $link ) {
                                # Use the page name for the title.  In principle, this could
                                # lead to issues with having the same name for different feeds
                                # corresponding to the same page, but we can't avoid that at
@@ -3387,13 +3391,13 @@ $templates
                $options = array();
                // Even though we expect the media type to be lowercase, but here we
                // force it to lowercase to be safe.
-               if( $media ) {
+               if ( $media ) {
                        $options['media'] = $media;
                }
-               if( $condition ) {
+               if ( $condition ) {
                        $options['condition'] = $condition;
                }
-               if( $dir ) {
+               if ( $dir ) {
                        $options['dir'] = $dir;
                }
                $this->styles[$style] = $options;
@@ -3405,7 +3409,7 @@ $templates
         * @param string $flip Set to 'flip' to flip the CSS if needed
         */
        public function addInlineStyle( $style_css, $flip = 'noflip' ) {
-               if( $flip === 'flip' && $this->getLanguage()->isRTL() ) {
+               if ( $flip === 'flip' && $this->getLanguage()->isRTL() ) {
                        # If wanted, and the interface is right-to-left, flip the CSS
                        $style_css = CSSJanus::transform( $style_css, true, false );
                }
@@ -3435,7 +3439,7 @@ $templates
                if ( $wgUseSiteCss ) {
                        $moduleStyles[] = 'site';
                        $moduleStyles[] = 'noscript';
-                       if( $this->getUser()->isLoggedIn() ) {
+                       if ( $this->getUser()->isLoggedIn() ) {
                                $moduleStyles[] = 'user.groups';
                        }
                }
@@ -3516,9 +3520,9 @@ $templates
                }
                $this->mExtStyles = array();
 
-               foreach( $this->styles as $file => $options ) {
+               foreach ( $this->styles as $file => $options ) {
                        $link = $this->styleLink( $file, $options );
-                       if( $link ) {
+                       if ( $link ) {
                                $links[$file] = $link;
                        }
                }
@@ -3534,22 +3538,22 @@ $templates
         * @return String: HTML fragment
         */
        protected function styleLink( $style, $options ) {
-               if( isset( $options['dir'] ) ) {
-                       if( $this->getLanguage()->getDir() != $options['dir'] ) {
+               if ( isset( $options['dir'] ) ) {
+                       if ( $this->getLanguage()->getDir() != $options['dir'] ) {
                                return '';
                        }
                }
 
-               if( isset( $options['media'] ) ) {
+               if ( isset( $options['media'] ) ) {
                        $media = self::transformCssMedia( $options['media'] );
-                       if( is_null( $media ) ) {
+                       if ( is_null( $media ) ) {
                                return '';
                        }
                } else {
                        $media = 'all';
                }
 
-               if( substr( $style, 0, 1 ) == '/' ||
+               if ( substr( $style, 0, 1 ) == '/' ||
                        substr( $style, 0, 5 ) == 'http:' ||
                        substr( $style, 0, 6 ) == 'https:' ) {
                        $url = $style;
@@ -3560,7 +3564,7 @@ $templates
 
                $link = Html::linkedStyle( $url, $media );
 
-               if( isset( $options['condition'] ) ) {
+               if ( isset( $options['condition'] ) ) {
                        $condition = htmlspecialchars( $options['condition'] );
                        $link = "<!--[if $condition]>$link<![endif]-->";
                }
@@ -3585,11 +3589,11 @@ $templates
                        'printable' => 'print',
                        'handheld' => 'handheld',
                );
-               foreach( $switches as $switch => $targetMedia ) {
-                       if( $wgRequest->getBool( $switch ) ) {
-                               if( $media == $targetMedia ) {
+               foreach ( $switches as $switch => $targetMedia ) {
+                       if ( $wgRequest->getBool( $switch ) ) {
+                               if ( $media == $targetMedia ) {
                                        $media = '';
-                               } elseif( preg_match( $screenMediaQueryRegex, $media ) === 1 ) {
+                               } elseif ( preg_match( $screenMediaQueryRegex, $media ) === 1 ) {
                                        // This regex will not attempt to understand a comma-separated media_query_list
                                        //
                                        // Example supported values for $media: 'screen', 'only screen', 'screen and (min-width: 982px)' ),
@@ -3600,7 +3604,7 @@ $templates
                                        // we don't want simple 'screen' but we might want screen queries that
                                        // have a max-width or something, so we'll pass all others on and let the
                                        // client do the query.
-                                       if( $targetMedia == 'print' || $media == 'screen' ) {
+                                       if ( $targetMedia == 'print' || $media == 'screen' ) {
                                                return null;
                                        }
                                }
@@ -3608,13 +3612,13 @@ $templates
                }
 
                // Expand longer media queries as iPhone doesn't grok 'handheld'
-               if( $wgHandheldForIPhone ) {
+               if ( $wgHandheldForIPhone ) {
                        $mediaAliases = array(
                                'screen' => 'screen and (min-device-width: 481px)',
                                'handheld' => 'handheld, only screen and (max-device-width: 480px)',
                        );
 
-                       if( isset( $mediaAliases[$media] ) ) {
+                       if ( isset( $mediaAliases[$media] ) ) {
                                $media = $mediaAliases[$media];
                        }
                }
index 01a2439..61a535d 100644 (file)
  * @ingroup SpecialPage
  */
 abstract class PageQueryPage extends QueryPage {
-
        /**
         * Format the result as a simple link to the page
         *
-        * @param $skin Skin
-        * @param $row Object: result row
+        * @param Skin $skin
+        * @param object $row Result row
         * @return string
         */
        public function formatResult( $skin, $row ) {
index d2ac904..8058c09 100644 (file)
@@ -904,7 +904,9 @@ abstract class TablePager extends IndexPager {
                }
 
                $this->mSort = $this->getRequest()->getText( 'sort' );
-               if ( !array_key_exists( $this->mSort, $this->getFieldNames() ) ) {
+               if ( !array_key_exists( $this->mSort, $this->getFieldNames() )
+                       || !$this->isFieldSortable( $this->mSort )
+               ) {
                        $this->mSort = $this->getDefaultSort();
                }
                if ( $this->getRequest()->getBool( 'asc' ) ) {
@@ -922,16 +924,15 @@ abstract class TablePager extends IndexPager {
         */
        function getStartBody() {
                global $wgStylePath;
-               $tableClass = htmlspecialchars( $this->getTableClass() );
-               $sortClass = htmlspecialchars( $this->getSortHeaderClass() );
+               $sortClass = $this->getSortHeaderClass();
 
-               $s = "<table style='border:1px;' class=\"mw-datatable $tableClass\"><thead><tr>\n";
+               $s = '';
                $fields = $this->getFieldNames();
 
                # Make table header
                foreach ( $fields as $field => $name ) {
                        if ( strval( $name ) == '' ) {
-                               $s .= "<th>&#160;</th>\n";
+                               $s .= Html::rawElement( 'th', array(), '&#160;' ) . "\n";
                        } elseif ( $this->isFieldSortable( $field ) ) {
                                $query = array( 'sort' => $field, 'limit' => $this->mLimit );
                                if ( $field == $this->mSort ) {
@@ -950,20 +951,26 @@ abstract class TablePager extends IndexPager {
                                                $query['desc'] = '1';
                                                $alt = $this->msg( 'ascending_abbrev' )->escaped();
                                        }
-                                       $image = htmlspecialchars( "$wgStylePath/common/images/$image" );
+                                       $image = "$wgStylePath/common/images/$image";
                                        $link = $this->makeLink(
-                                               "<img width=\"12\" height=\"12\" alt=\"$alt\" src=\"$image\" />" .
-                                                       htmlspecialchars( $name ), $query );
-                                       $s .= "<th class=\"$sortClass\">$link</th>\n";
+                                               Html::element( 'img', array( 'width' => 12, 'height' => 12,
+                                                       'alt' => $alt, 'src' => $image ) ) . htmlspecialchars( $name ), $query );
+                                       $s .= Html::rawElement( 'th', array( 'class' => $sortClass ), $link ) . "\n";
                                } else {
-                                       $s .= '<th>' . $this->makeLink( htmlspecialchars( $name ), $query ) . "</th>\n";
+                                       $s .= Html::rawElement( 'th', array(),
+                                               $this->makeLink( htmlspecialchars( $name ), $query ) ) . "\n";
                                }
                        } else {
-                               $s .= '<th>' . htmlspecialchars( $name ) . "</th>\n";
+                               $s .= Html::element( 'th', array(), $name ) . "\n";
                        }
                }
-               $s .= "</tr></thead><tbody>\n";
-               return $s;
+
+               $tableClass = $this->getTableClass();
+               $ret = Html::openElement( 'table', array( 'style' => 'border:1px;', 'class' => "mw-datatable $tableClass" ) );
+               $ret .= Html::rawElement( 'thead', array(), Html::rawElement( 'tr', array(), "\n" . $s . "\n" ) );
+               $ret .= Html::openElement( 'tbody' ) . "\n";
+
+               return $ret;
        }
 
        /**
@@ -980,8 +987,9 @@ abstract class TablePager extends IndexPager {
         */
        function getEmptyBody() {
                $colspan = count( $this->getFieldNames() );
-               $msgEmpty = $this->msg( 'table_pager_empty' )->escaped();
-               return "<tr><td colspan=\"$colspan\">$msgEmpty</td></tr>\n";
+               $msgEmpty = $this->msg( 'table_pager_empty' )->text();
+               return Html::rawElement( 'tr', array(),
+                       Html::element( 'td', array( 'colspan' => $colspan ), $msgEmpty ) );
        }
 
        /**
@@ -991,7 +999,7 @@ abstract class TablePager extends IndexPager {
         */
        function formatRow( $row ) {
                $this->mCurrentRow = $row; // In case formatValue etc need to know
-               $s = Xml::openElement( 'tr', $this->getRowAttrs( $row ) );
+               $s = Html::openElement( 'tr', $this->getRowAttrs( $row ) ) . "\n";
                $fieldNames = $this->getFieldNames();
 
                foreach ( $fieldNames as $field => $name ) {
@@ -1002,10 +1010,10 @@ abstract class TablePager extends IndexPager {
                                $formatted = '&#160;';
                        }
 
-                       $s .= Xml::tags( 'td', $this->getCellAttrs( $field, $value ), $formatted );
+                       $s .= Html::rawElement( 'td', $this->getCellAttrs( $field, $value ), $formatted ) . "\n";
                }
 
-               $s .= "</tr>\n";
+               $s .= Html::closeElement( 'tr' ) . "\n";
 
                return $s;
        }
@@ -1127,18 +1135,20 @@ abstract class TablePager extends IndexPager {
                $disabledTexts = array();
                foreach ( $labels as $type => $label ) {
                        $msgLabel = $this->msg( $label )->escaped();
-                       $linkTexts[$type] = "<img src=\"$path/{$images[$type]}\" alt=\"$msgLabel\"/><br />$msgLabel";
-                       $disabledTexts[$type] = "<img src=\"$path/{$disabledImages[$type]}\" alt=\"$msgLabel\"/><br />$msgLabel";
+                       $linkTexts[$type] = Html::element( 'img', array( 'src' => "$path/{$images[$type]}",
+                               'alt' => $msgLabel ) ) . "<br />$msgLabel";
+                       $disabledTexts[$type] = Html::element( 'img', array( 'src' => "$path/{$disabledImages[$type]}",
+                               'alt' => $msgLabel ) ) . "<br />$msgLabel";
                }
                $links = $this->getPagingLinks( $linkTexts, $disabledTexts );
 
-               $navClass = htmlspecialchars( $this->getNavClass() );
-               $s = "<table class=\"$navClass\"><tr>\n";
+               $s = Html::openElement( 'table', array( 'class' => $this->getNavClass() ) );
+               $s .= Html::openElement( 'tr' ) . "\n";
                $width = 100 / count( $links ) . '%';
                foreach ( $labels as $type => $label ) {
-                       $s .= "<td style='width:$width;'>{$links[$type]}</td>\n";
+                       $s .= Html::rawElement( 'td', array( 'style' => "width:$width;" ), $links[$type] ) . "\n";
                }
-               $s .= "</tr></table>\n";
+               $s .= Html::closeElement( 'tr' ) . Html::closeElement( 'table' ) . "\n";
                return $s;
        }
 
@@ -1188,9 +1198,7 @@ abstract class TablePager extends IndexPager {
                }
                $s = '';
                foreach ( $query as $name => $value ) {
-                       $encName = htmlspecialchars( $name );
-                       $encValue = htmlspecialchars( $value );
-                       $s .= "<input type=\"hidden\" name=\"$encName\" value=\"$encValue\"/>\n";
+                       $s .= Html::hidden( $name, $value ) . "\n";
                }
                return $s;
        }
@@ -1203,12 +1211,14 @@ abstract class TablePager extends IndexPager {
        function getLimitForm() {
                global $wgScript;
 
-               return Xml::openElement(
+               return Html::rawElement(
                        'form',
                        array(
                                'method' => 'get',
                                'action' => $wgScript
-                       ) ) . "\n" . $this->getLimitDropdown() . "</form>\n";
+                       ),
+                       "\n" . $this->getLimitDropdown()
+               ) . "\n";
        }
 
        /**
index 8edf60a..79c3dd3 100644 (file)
@@ -432,7 +432,7 @@ class Preferences {
                                                                SpecialPage::getTitleFor( 'Confirmemail' ),
                                                                $context->msg( 'emailconfirmlink' )->escaped()
                                                        ) . '<br />';
-                                               $emailauthenticationclass="mw-email-not-authenticated";
+                                               $emailauthenticationclass = "mw-email-not-authenticated";
                                        }
                                } else {
                                        $disableEmailPrefs = true;
@@ -721,7 +721,7 @@ class Preferences {
         * @param $defaultPreferences Array
         */
        static function editingPreferences( $user, IContextSource $context, &$defaultPreferences ) {
-               global $wgUseExternalEditor, $wgAllowUserCssPrefs;
+               global $wgAllowUserCssPrefs;
 
                ## Editing #####################################
                $defaultPreferences['cols'] = array(
@@ -794,19 +794,6 @@ class Preferences {
                        );
                }
 
-               if ( $wgUseExternalEditor ) {
-                       $defaultPreferences['externaleditor'] = array(
-                               'type' => 'toggle',
-                               'section' => 'editing/advancedediting',
-                               'label-message' => 'tog-externaleditor',
-                       );
-                       $defaultPreferences['externaldiff'] = array(
-                               'type' => 'toggle',
-                               'section' => 'editing/advancedediting',
-                               'label-message' => 'tog-externaldiff',
-                       );
-               }
-
                $defaultPreferences['forceeditsummary'] = array(
                        'type' => 'toggle',
                        'section' => 'editing/advancedediting',
@@ -818,6 +805,13 @@ class Preferences {
                        'section' => 'editing/advancedediting',
                        'label-message' => 'tog-uselivepreview',
                );
+
+               $defaultPreferences['useeditwarning'] = array(
+                       'type' => 'toggle',
+                       'section' => 'editing/advancedediting',
+                       'label-message' => 'tog-useeditwarning',
+               );
+
        }
 
        /**
@@ -1266,6 +1260,7 @@ class Preferences {
        }
 
        /**
+        * @param $context IContextSource
         * @return array
         */
        static function getTimezoneOptions( IContextSource $context ) {
@@ -1370,6 +1365,8 @@ class Preferences {
        }
 
        /**
+        * Handle the form submission if everything validated properly
+        *
         * @param $formData
         * @param $form PreferencesForm
         * @param $entryPoint string
index d37d9e8..e422a3b 100644 (file)
@@ -175,7 +175,7 @@ class PrefixSearch {
                $data = $module->getResultData();
 
                // Reformat useful data for future printing by JSON engine
-               $srchres = array ();
+               $srchres = array();
                foreach ( (array)$data['query']['allpages'] as $pageinfo ) {
                        // Note: this data will no be printable by the xml engine
                        // because it does not support lists of unnamed items
index 7ebefec..de5e9db 100644 (file)
@@ -371,7 +371,7 @@ class ProtectionForm {
                foreach( $this->mRestrictions as $action => $selected ) {
                        /* Not all languages have V_x <-> N_x relation */
                        $msg = wfMessage( 'restriction-' . $action );
-                       $out .= "<tr><td>".
+                       $out .= "<tr><td>" .
                        Xml::openElement( 'fieldset' ) .
                        Xml::element( 'legend', null, $msg->exists() ? $msg->text() : $action ) .
                        Xml::openElement( 'table', array( 'id' => "mw-protect-table-$action" ) ) .
index e1f24fa..a4a1ffb 100644 (file)
@@ -89,7 +89,7 @@ abstract class QueryPage extends SpecialPage {
        /**
         * The offset and limit in use, as passed to the query() function
         *
-        * @var integer
+        * @var int
         */
        var $offset = 0;
        var $limit = 0;
@@ -111,7 +111,7 @@ abstract class QueryPage extends SpecialPage {
        /**
         * A mutator for $this->listoutput;
         *
-        * @param $bool Boolean
+        * @param bool $bool
         */
        function setListoutput( $bool ) {
                $this->listoutput = $bool;
@@ -186,7 +186,7 @@ abstract class QueryPage extends SpecialPage {
        /**
         * Override to sort by increasing values
         *
-        * @return Boolean
+        * @return bool
         */
        function sortDescending() {
                return true;
@@ -197,7 +197,7 @@ abstract class QueryPage extends SpecialPage {
         * don't let it run in miser mode. $wgDisableQueryPages causes all query
         * pages to be declared expensive. Some query pages are always expensive.
         *
-        * @return Boolean
+        * @return bool
         */
        function isExpensive() {
                global $wgDisableQueryPages;
@@ -208,7 +208,7 @@ abstract class QueryPage extends SpecialPage {
         * Is the output of this query cacheable? Non-cacheable expensive pages
         * will be disabled in miser mode and will not have their results written
         * to the querycache table.
-        * @return Boolean
+        * @return bool
         * @since 1.18
         */
        public function isCacheable() {
@@ -219,7 +219,7 @@ abstract class QueryPage extends SpecialPage {
         * Whether or not the output of the page in question is retrieved from
         * the database cache.
         *
-        * @return Boolean
+        * @return bool
         */
        function isCached() {
                global $wgMiserMode;
@@ -230,7 +230,7 @@ abstract class QueryPage extends SpecialPage {
        /**
         * Sometime we don't want to build rss / atom feeds.
         *
-        * @return Boolean
+        * @return bool
         */
        function isSyndicated() {
                return true;
@@ -241,19 +241,16 @@ abstract class QueryPage extends SpecialPage {
         * skin; you can use it for making links. The result is a single row of
         * result data. You should be able to grab SQL results off of it.
         * If the function returns false, the line output will be skipped.
-        * @param $skin Skin
-        * @param $result object Result row
-        * @return mixed String or false to skip
-        *
-        * @param $skin Skin object
-        * @param $result Object: database row
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string|bool String or false to skip
         */
        abstract function formatResult( $skin, $result );
 
        /**
         * The content returned by this function will be output before any result
         *
-        * @return String
+        * @return string
         */
        function getPageHeader() {
                return '';
@@ -264,7 +261,7 @@ abstract class QueryPage extends SpecialPage {
         * as an associative array. They will be encoded and added to the paging
         * links (prev/next/lengths).
         *
-        * @return Array
+        * @return array
         */
        function linkParameters() {
                return array();
@@ -285,8 +282,9 @@ abstract class QueryPage extends SpecialPage {
        /**
         * Clear the cache and save new results
         *
-        * @param $limit Integer: limit for SQL statement
-        * @param $ignoreErrors Boolean: whether to ignore database errors
+        * @param int|bool $limit Limit for SQL statement
+        * @param bool $ignoreErrors Whether to ignore database errors
+        * @throws DBError|Exception
         * @return bool|int
         */
        function recache( $limit, $ignoreErrors = true ) {
@@ -351,8 +349,8 @@ abstract class QueryPage extends SpecialPage {
 
        /**
         * Run the query and return the result
-        * @param $limit mixed Numerical limit or false for no limit
-        * @param $offset mixed Numerical offset or false for no offset
+        * @param int|bool $limit Numerical limit or false for no limit
+        * @param int|bool $offset Numerical offset or false for no offset
         * @return ResultWrapper
         * @since 1.18
         */
@@ -361,23 +359,28 @@ abstract class QueryPage extends SpecialPage {
                $dbr = wfGetDB( DB_SLAVE );
                $query = $this->getQueryInfo();
                $order = $this->getOrderFields();
+
                if ( $this->sortDescending() ) {
                        foreach ( $order as &$field ) {
                                $field .= ' DESC';
                        }
                }
+
                if ( is_array( $query ) ) {
                        $tables = isset( $query['tables'] ) ? (array)$query['tables'] : array();
                        $fields = isset( $query['fields'] ) ? (array)$query['fields'] : array();
                        $conds = isset( $query['conds'] ) ? (array)$query['conds'] : array();
                        $options = isset( $query['options'] ) ? (array)$query['options'] : array();
                        $join_conds = isset( $query['join_conds'] ) ? (array)$query['join_conds'] : array();
+
                        if ( count( $order ) ) {
                                $options['ORDER BY'] = $order;
                        }
+
                        if ( $limit !== false ) {
                                $options['LIMIT'] = intval( $limit );
                        }
+
                        if ( $offset !== false ) {
                                $options['OFFSET'] = intval( $offset );
                        }
@@ -392,11 +395,14 @@ abstract class QueryPage extends SpecialPage {
                        $sql = $dbr->limitResult( $sql, $limit, $offset );
                        $res = $dbr->query( $sql, $fname );
                }
+
                return $dbr->resultObject( $res );
        }
 
        /**
         * Somewhat deprecated, you probably want to be using execute()
+        * @param int|bool $offset
+        * @oaram int|bool $limit
         * @return ResultWrapper
         */
        function doQuery( $offset = false, $limit = false ) {
@@ -409,14 +415,14 @@ abstract class QueryPage extends SpecialPage {
 
        /**
         * Fetch the query results from the query cache
-        * @param $limit mixed Numerical limit or false for no limit
-        * @param $offset mixed Numerical offset or false for no offset
+        * @param int|bool $limit Numerical limit or false for no limit
+        * @param int|bool $offset Numerical offset or false for no offset
         * @return ResultWrapper
         * @since 1.18
         */
        function fetchFromCache( $limit, $offset = false ) {
                $dbr = wfGetDB( DB_SLAVE );
-               $options = array ();
+               $options = array();
                if ( $limit !== false ) {
                        $options['LIMIT'] = intval( $limit );
                }
@@ -451,6 +457,7 @@ abstract class QueryPage extends SpecialPage {
        /**
         * This is the actual workhorse. It does everything needed to make a
         * real, honest-to-gosh query page.
+        * @para $par
         * @return int
         */
        function execute( $par ) {
@@ -562,12 +569,12 @@ abstract class QueryPage extends SpecialPage {
         * Format and output report results using the given information plus
         * OutputPage
         *
-        * @param $out OutputPage to print to
-        * @param $skin Skin: user skin to use
-        * @param $dbr Database (read) connection to use
-        * @param $res Integer: result pointer
-        * @param $num Integer: number of available result rows
-        * @param $offset Integer: paging offset
+        * @param OutputPage $out OutputPage to print to
+        * @param Skin $skin User skin to use
+        * @param DatabaseBase $dbr Database (read) connection to use
+        * @param int $res Result pointer
+        * @param int $num Number of available result rows
+        * @param int $offset Paging offset
         */
        protected function outputResults( $out, $skin, $dbr, $res, $num, $offset ) {
                global $wgContLang;
@@ -635,11 +642,15 @@ abstract class QueryPage extends SpecialPage {
 
        /**
         * Do any necessary preprocessing of the result object.
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
         */
        function preprocessResults( $db, $res ) {}
 
        /**
         * Similar to above, but packaging in a syndicated feed instead of a web page
+        * @param string $class
+        * @param int $limit
         * @return bool
         */
        function doFeed( $class = '', $limit = 50 ) {
@@ -680,6 +691,7 @@ abstract class QueryPage extends SpecialPage {
        /**
         * Override for custom handling. If the titles/links are ok, just do
         * feedItemDesc()
+        * @param object $row
         * @return FeedItem|null
         */
        function feedResult( $row ) {
@@ -735,7 +747,6 @@ abstract class QueryPage extends SpecialPage {
  * WantedPages, WantedTemplates, etc
  */
 abstract class WantedQueryPage extends QueryPage {
-
        function isExpensive() {
                return true;
        }
@@ -746,6 +757,8 @@ abstract class WantedQueryPage extends QueryPage {
 
        /**
         * Cache page existence for performance
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
         */
        function preprocessResults( $db, $res ) {
                if ( !$res->numRows() ) {
@@ -777,8 +790,8 @@ abstract class WantedQueryPage extends QueryPage {
        /**
         * Format an individual result
         *
-        * @param $skin Skin to use for UI elements
-        * @param $result Result row
+        * @param Skin $skin Skin to use for UI elements
+        * @param object $result Result row
         * @return string
         */
        public function formatResult( $skin, $result ) {
@@ -812,8 +825,8 @@ abstract class WantedQueryPage extends QueryPage {
        /**
         * Make a "what links here" link for a given title
         *
-        * @param $title Title to make the link for
-        * @param $result Object: result row
+        * @param Title $title Title to make the link for
+        * @param object $result Result row
         * @return string
         */
        private function makeWlhLink( $title, $result ) {
index b7be29d..4de7333 100644 (file)
@@ -306,12 +306,12 @@ class SiteStatsUpdate implements DeferrableUpdate {
                                }
                                $pd = $this->getPendingDeltas();
                                // Piggy-back the async deltas onto those of this stats update....
-                               $this->views    += ( $pd['ss_total_views']['+'] - $pd['ss_total_views']['-'] );
-                               $this->edits    += ( $pd['ss_total_edits']['+'] - $pd['ss_total_edits']['-'] );
+                               $this->views += ( $pd['ss_total_views']['+'] - $pd['ss_total_views']['-'] );
+                               $this->edits += ( $pd['ss_total_edits']['+'] - $pd['ss_total_edits']['-'] );
                                $this->articles += ( $pd['ss_good_articles']['+'] - $pd['ss_good_articles']['-'] );
-                               $this->pages    += ( $pd['ss_total_pages']['+'] - $pd['ss_total_pages']['-'] );
-                               $this->users    += ( $pd['ss_users']['+'] - $pd['ss_users']['-'] );
-                               $this->images   += ( $pd['ss_images']['+'] - $pd['ss_images']['-'] );
+                               $this->pages += ( $pd['ss_total_pages']['+'] - $pd['ss_total_pages']['-'] );
+                               $this->users += ( $pd['ss_users']['+'] - $pd['ss_users']['-'] );
+                               $this->images += ( $pd['ss_images']['+'] - $pd['ss_images']['-'] );
                        }
 
                        // Need a separate transaction because this a global lock
@@ -356,7 +356,7 @@ class SiteStatsUpdate implements DeferrableUpdate {
                                'rc_user != 0',
                                'rc_bot' => 0,
                                'rc_log_type != ' . $dbr->addQuotes( 'newusers' ) . ' OR rc_log_type IS NULL',
-                               'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX ) - $wgActiveUserDays*24*3600 ) ),
+                               'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX ) - $wgActiveUserDays * 24 * 3600 ) ),
                        ),
                        __METHOD__
                );
index 9d657f7..ca49024 100644 (file)
@@ -218,9 +218,6 @@ class LegacyTemplate extends BaseTemplate {
                        foreach ( $variants as $code ) {
                                $varname = $lang->getVariantname( $code );
 
-                               if ( $varname == 'disable' ) {
-                                       continue;
-                               }
                                $s = $wgLang->pipeList( array(
                                        $s,
                                        '<a href="' . htmlspecialchars( $title->getLocalURL( 'variant=' . $code ) ) . '" lang="' . $code . '" hreflang="' . $code . '">' . htmlspecialchars( $varname ) . '</a>'
index 4602121..d8a1aad 100644 (file)
@@ -170,7 +170,7 @@ class SkinTemplate extends Skin {
         *
         * @param $out OutputPage
         */
-       function outputPage( OutputPage $out=null ) {
+       function outputPage( OutputPage $out = null ) {
                global $wgContLang;
                global $wgScript, $wgStylePath;
                global $wgMimeType, $wgJsMimeType;
@@ -775,7 +775,7 @@ class SkinTemplate extends Skin {
 
        function makeArticleUrlDetails( $name, $urlaction = '' ) {
                $title = Title::newFromText( $name );
-               $title= $title->getSubjectPage();
+               $title = $title->getSubjectPage();
                self::checkTitle( $title, $name );
                return array(
                        'href' => $title->getLocalURL( $urlaction ),
@@ -1035,11 +1035,6 @@ class SkinTemplate extends Skin {
                                        foreach( $variants as $code ) {
                                                // Gets variant name from language code
                                                $varname = $pageLang->getVariantname( $code );
-                                               // Checks if the variant is marked as disabled
-                                               if( $varname == 'disable' ) {
-                                                       // Skips this variant
-                                                       continue;
-                                               }
                                                // Appends variant link
                                                $content_navigation['variants'][] = array(
                                                        'class' => ( $code == $preferred ) ? 'selected' : false,
index d09be87..d8f6fd9 100644 (file)
@@ -842,11 +842,11 @@ class SpecialPage {
        protected function addFeedLinks( $params ) {
                global $wgFeedClasses;
 
-               $feedTemplate = wfScript( 'api' ) . '?';
+               $feedTemplate = wfScript( 'api' );
 
                foreach ( $wgFeedClasses as $format => $class ) {
                        $theseParams = $params + array( 'feedformat' => $format );
-                       $url = $feedTemplate . wfArrayToCgi( $theseParams );
+                       $url = wfAppendQuery( $feedTemplate, $theseParams );
                        $this->getOutput()->addFeedLink( $format, $url );
                }
        }
@@ -1093,10 +1093,9 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
                        $url = $redirect->getFullURL( $query );
                        $this->getOutput()->redirect( $url );
                        return $redirect;
-               // Redirect to index.php with query parameters
                } elseif ( $redirect === true ) {
-                       global $wgScript;
-                       $url = $wgScript . '?' . wfArrayToCgi( $query );
+                       // Redirect to index.php with query parameters
+                       $url = wfAppendQuery( wfScript( 'index' ), $query );
                        $this->getOutput()->redirect( $url );
                        return $redirect;
                } else {
index 5d6236f..d8ea24a 100644 (file)
@@ -190,7 +190,7 @@ class Status {
                                $s = wfMessage( $longContext, "* $s\n" )->plain();
                        }
                } else {
-                       $s = '* '. implode( "\n* ",
+                       $s = '* ' . implode( "\n* ",
                                $this->getErrorMessageArray( $this->errors ) ) . "\n";
                        if ( $longContext ) {
                                $s = wfMessage( $longContext, $s )->plain();
index f4c98f1..21a392a 100644 (file)
@@ -452,16 +452,16 @@ class ReplacementArray {
         */
        function replace( $subject ) {
                if ( function_exists( 'fss_prep_replace' ) ) {
-                       wfProfileIn( __METHOD__.'-fss' );
+                       wfProfileIn( __METHOD__ . '-fss' );
                        if ( $this->fss === false ) {
                                $this->fss = fss_prep_replace( $this->data );
                        }
                        $result = fss_exec_replace( $this->fss, $subject );
-                       wfProfileOut( __METHOD__.'-fss' );
+                       wfProfileOut( __METHOD__ . '-fss' );
                } else {
-                       wfProfileIn( __METHOD__.'-strtr' );
+                       wfProfileIn( __METHOD__ . '-strtr' );
                        $result = strtr( $subject, $this->data );
-                       wfProfileOut( __METHOD__.'-strtr' );
+                       wfProfileOut( __METHOD__ . '-strtr' );
                }
                return $result;
        }
index aa8fb93..fda790f 100644 (file)
@@ -225,7 +225,7 @@ class Title {
         *
         * @param int $id the page_id corresponding to the Title to create
         * @param int $flags use Title::GAID_FOR_UPDATE to use master
-        * @return Title the new object, or NULL on an error
+        * @return Title|null the new object, or NULL on an error
         */
        public static function newFromID( $id, $flags = 0 ) {
                $db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_SLAVE );
@@ -289,18 +289,23 @@ class Title {
         */
        public function loadFromRow( $row ) {
                if ( $row ) { // page found
-                       if ( isset( $row->page_id ) )
+                       if ( isset( $row->page_id ) ) {
                                $this->mArticleID = (int)$row->page_id;
-                       if ( isset( $row->page_len ) )
+                       }
+                       if ( isset( $row->page_len ) ) {
                                $this->mLength = (int)$row->page_len;
-                       if ( isset( $row->page_is_redirect ) )
+                       }
+                       if ( isset( $row->page_is_redirect ) ) {
                                $this->mRedirect = (bool)$row->page_is_redirect;
-                       if ( isset( $row->page_latest ) )
+                       }
+                       if ( isset( $row->page_latest ) ) {
                                $this->mLatestID = (int)$row->page_latest;
-                       if ( isset( $row->page_content_model ) )
+                       }
+                       if ( isset( $row->page_content_model ) ) {
                                $this->mContentModel = strval( $row->page_content_model );
-                       else
+                       } else {
                                $this->mContentModel = false; # initialized lazily in getContentModel()
+                       }
                } else { // page not found
                        $this->mArticleID = 0;
                        $this->mLength = 0;
@@ -689,7 +694,7 @@ class Title {
                        $this->mContentModel = ContentHandler::getDefaultModelFor( $this );
                }
 
-               if( !$this->mContentModel ) {
+               if ( !$this->mContentModel ) {
                        throw new MWException( 'Failed to determine content model!' );
                }
 
@@ -997,8 +1002,9 @@ class Title {
                $subpage = explode( '/', $this->mTextform );
                $subpage = $subpage[count( $subpage ) - 1];
                $lastdot = strrpos( $subpage, '.' );
-               if ( $lastdot === false )
+               if ( $lastdot === false ) {
                        return $subpage; # Never happens: only called for names ending in '.css' or '.js'
+               }
                return substr( $subpage, 0, $lastdot );
        }
 
@@ -1340,7 +1346,7 @@ class Title {
         * @return String
         */
        private static function fixUrlQueryArgs( $query, $query2 = false ) {
-               if( $query2 !== false ) {
+               if ( $query2 !== false ) {
                        wfDeprecated( "Title::get{Canonical,Full,Link,Local,Internal}URL " .
                                "method called with a second parameter is deprecated. Add your " .
                                "parameter to an array passed as the first parameter.", "1.19" );
@@ -1954,8 +1960,9 @@ class Title {
                                        $right = ( $right == 'sysop' ) ? 'protect' : $right;
                                        if ( $right != '' && !$user->isAllowed( $right ) ) {
                                                $pages = '';
-                                               foreach ( $cascadingSources as $page )
+                                               foreach ( $cascadingSources as $page ) {
                                                        $pages .= '* [[:' . $page->getPrefixedText() . "]]\n";
+                                               }
                                                $errors[] = array( 'cascadeprotected', count( $cascadingSources ), $pages );
                                        }
                                }
@@ -1986,11 +1993,11 @@ class Title {
                        }
                } elseif ( $action == 'create' ) {
                        $title_protection = $this->getTitleProtection();
-                       if( $title_protection ) {
-                               if( $title_protection['pt_create_perm'] == 'sysop' ) {
+                       if ( $title_protection ) {
+                               if ( $title_protection['pt_create_perm'] == 'sysop' ) {
                                        $title_protection['pt_create_perm'] = 'protect'; // B/C
                                }
-                               if( $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'] );
@@ -2035,7 +2042,7 @@ class Title {
        private function checkUserBlock( $action, $user, $errors, $doExpensiveQueries, $short ) {
                // Account creation blocks handled at userlogin.
                // Unblocking handled in SpecialUnblock
-               if( !$doExpensiveQueries || in_array( $action, array( 'createaccount', 'unblock' ) ) ) {
+               if ( !$doExpensiveQueries || in_array( $action, array( 'createaccount', 'unblock' ) ) ) {
                        return $errors;
                }
 
@@ -2048,7 +2055,7 @@ class Title {
                if ( ( $action == 'edit' || $action == 'create' ) && !$user->isBlockedFrom( $this ) ) {
                        // Don't block the user from editing their own talk page unless they've been
                        // explicitly blocked from that too.
-               } elseif( $user->isBlocked() && $user->mBlock->prevents( $action ) !== false ) {
+               } elseif ( $user->isBlocked() && $user->mBlock->prevents( $action ) !== false ) {
                        $block = $user->getBlock();
 
                        // This is from OutputPage::blockedPage
@@ -2166,7 +2173,7 @@ class Title {
                        }
                }
 
-               if( !$whitelisted && is_array( $wgWhitelistReadRegexp ) && !empty( $wgWhitelistReadRegexp ) ) {
+               if ( !$whitelisted && is_array( $wgWhitelistReadRegexp ) && !empty( $wgWhitelistReadRegexp ) ) {
                        $name = $this->getPrefixedText();
                        // Check for regex whitelisting
                        foreach ( $wgWhitelistReadRegexp as $listItem ) {
@@ -2251,7 +2258,7 @@ class Title {
                }
 
                $errors = array();
-               while( count( $checks ) > 0 &&
+               while ( count( $checks ) > 0 &&
                                !( $short && count( $errors ) > 0 ) ) {
                        $method = array_shift( $checks );
                        $errors = $this->$method( $action, $user, $errors, $doExpensiveQueries, $short );
@@ -2446,7 +2453,7 @@ class Title {
                $restrictionTypes = $this->getRestrictionTypes();
 
                # Special pages have inherent protection
-               if( $this->isSpecialPage() ) {
+               if ( $this->isSpecialPage() ) {
                        return true;
                }
 
@@ -2693,7 +2700,7 @@ class Title {
                                        $this->mRestrictions['move'] = explode( ',', trim( $temp[0] ) );
                                } else {
                                        $restriction = trim( $temp[1] );
-                                       if( $restriction != '' ) { //some old entries are empty
+                                       if ( $restriction != '' ) { //some old entries are empty
                                                $this->mRestrictions[$temp[0]] = explode( ',', $restriction );
                                        }
                                }
@@ -2712,8 +2719,9 @@ class Title {
                        foreach ( $rows as $row ) {
 
                                // Don't take care of restrictions types that aren't allowed
-                               if ( !in_array( $row->pr_type, $restrictionTypes ) )
+                               if ( !in_array( $row->pr_type, $restrictionTypes ) ) {
                                        continue;
+                               }
 
                                // This code should be refactored, now that it's being used more generally,
                                // But I don't really see any harm in leaving it in Block for now -werdna
@@ -2799,18 +2807,20 @@ class Title {
                        return;
                }
 
+               $method = __METHOD__;
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete(
-                       'page_restrictions',
-                       array( 'pr_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ),
-                       __METHOD__
-               );
-
-               $dbw->delete(
-                       'protected_titles',
-                       array( 'pt_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ),
-                       __METHOD__
-               );
+               $dbw->onTransactionIdle( function() use ( $dbw, $method ) {
+                       $dbw->delete(
+                               'page_restrictions',
+                               array( 'pr_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ),
+                               $method
+                       );
+                       $dbw->delete(
+                               'protected_titles',
+                               array( 'pt_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ),
+                               $method
+                       );
+               } );
        }
 
        /**
@@ -3302,7 +3312,7 @@ class Title {
                        array(
                                "{$prefix}_from=page_id",
                                "{$prefix}_namespace" => $this->getNamespace(),
-                               "{$prefix}_title"     => $this->getDBkey() ),
+                               "{$prefix}_title" => $this->getDBkey() ),
                        __METHOD__,
                        $options
                );
@@ -3367,7 +3377,9 @@ class Title {
                $titleField = "{$prefix}_title";
 
                $fields = array( $namespaceFiled, $titleField, 'page_id', 'page_len', 'page_is_redirect', 'page_latest' );
-               if ( $wgContentHandlerUseDB ) $fields[] = 'page_content_model';
+               if ( $wgContentHandlerUseDB ) {
+                       $fields[] = 'page_content_model';
+               }
 
                $res = $db->select(
                        array( $table, 'page' ),
@@ -3712,12 +3724,12 @@ class Title {
                        # Protect the redirect title as the title used to be...
                        $dbw->insertSelect( 'page_restrictions', 'page_restrictions',
                                array(
-                                       'pr_page'    => $redirid,
-                                       'pr_type'    => 'pr_type',
-                                       'pr_level'   => 'pr_level',
+                                       'pr_page' => $redirid,
+                                       'pr_type' => 'pr_type',
+                                       'pr_level' => 'pr_level',
                                        'pr_cascade' => 'pr_cascade',
-                                       'pr_user'    => 'pr_user',
-                                       'pr_expiry'  => 'pr_expiry'
+                                       'pr_user' => 'pr_user',
+                                       'pr_expiry' => 'pr_expiry'
                                ),
                                array( 'pr_page' => $pageid ),
                                __METHOD__,
@@ -3831,7 +3843,7 @@ class Title {
                $dbw->update( 'page',
                        /* SET */ array(
                                'page_namespace' => $nt->getNamespace(),
-                               'page_title'     => $nt->getDBkey(),
+                               'page_title' => $nt->getDBkey(),
                        ),
                        /* WHERE */ array( 'page_id' => $oldid ),
                        __METHOD__
@@ -3861,10 +3873,10 @@ class Title {
                        $newid = $redirectArticle->insertOn( $dbw );
                        if ( $newid ) { // sanity
                                $redirectRevision = new Revision( array(
-                                       'title'   => $this, // for determining the default content model
-                                       'page'    => $newid,
+                                       'title' => $this, // for determining the default content model
+                                       'page' => $newid,
                                        'comment' => $comment,
-                                       'content'    => $redirectContent ) );
+                                       'content' => $redirectContent ) );
                                $redirectRevision->insertOn( $dbw );
                                $redirectArticle->updateRevisionOn( $dbw, $redirectRevision, 0 );
 
@@ -3966,7 +3978,9 @@ class Title {
 
                # Is it a redirect?
                $fields = array( 'page_is_redirect', 'page_latest', 'page_id' );
-               if ( $wgContentHandlerUseDB ) $fields[] = 'page_content_model';
+               if ( $wgContentHandlerUseDB ) {
+                       $fields[] = 'page_content_model';
+               }
 
                $row = $dbw->selectRow( 'page',
                        $fields,
@@ -4020,7 +4034,7 @@ class Title {
                }
                # Get the article text
                $rev = Revision::newFromTitle( $nt, false, Revision::READ_LATEST );
-               if( !is_object( $rev ) ) {
+               if ( !is_object( $rev ) ) {
                        return false;
                }
                $content = $rev->getContent();
@@ -4322,7 +4336,7 @@ class Title {
                // No DB query needed if $old and $new are the same or successive revisions:
                if ( $old->getId() === $new->getId() ) {
                        return ( $old_cmp === '>' && $new_cmp === '<' ) ? 0 : 1;
-               } else if ( $old->getId() === $new->getParentId() ) {
+               } elseif ( $old->getId() === $new->getParentId() ) {
                        if ( $old_cmp === '>' || $new_cmp === '<' ) {
                                return ( $old_cmp === '>' && $new_cmp === '<' ) ? 0 : 1;
                        }
index b042d8c..20ec302 100644 (file)
@@ -304,7 +304,7 @@ class UIDGenerator {
                        if ( $ct >= $time ) { // http://php.net/manual/en/language.operators.comparison.php
                                return $ct; // current timestamp is higher than $time
                        }
-               } while ( ( ( $time[0] - $ct[0] )*1000 + ( $time[1] - $ct[1] ) ) <= 10 );
+               } while ( ( ( $time[0] - $ct[0] ) * 1000 + ( $time[1] - $ct[1] ) ) <= 10 );
 
                return false;
        }
@@ -315,25 +315,12 @@ class UIDGenerator {
         */
        protected function millisecondsSinceEpochBinary( array $time ) {
                list( $sec, $msec ) = $time;
-               if ( PHP_INT_SIZE >= 8 ) { // 64 bit integers
-                       $ts = ( 1000 * $sec + $msec );
-                       $id_bin = str_pad( decbin( $ts % pow( 2, 46 ) ), 46, '0', STR_PAD_LEFT );
-               } elseif ( extension_loaded( 'gmp' ) ) {
-                       $ts = gmp_mod( // wrap around
-                               gmp_add( gmp_mul( (string) $sec, (string) 1000 ), (string) $msec ),
-                               gmp_pow( '2', '46' )
-                       );
-                       $id_bin = str_pad( gmp_strval( $ts, 2 ), 46, '0', STR_PAD_LEFT );
-               } elseif ( extension_loaded( 'bcmath' ) ) {
-                       $ts = bcmod( // wrap around
-                               bcadd( bcmul( $sec, 1000 ), $msec ),
-                               bcpow( 2, 46 )
-                       );
-                       $id_bin = wfBaseConvert( $ts, 10, 2, 46 );
-               } else {
-                       throw new MWException( 'bcmath or gmp extension required for 32 bit machines.' );
+               $ts = 1000 * $sec + $msec;
+               if ( $ts > pow( 2, 52 ) ) {
+                       throw new MWException( __METHOD__ .
+                               ': sorry, this function doesn\'t work after the year 144680' );
                }
-               return $id_bin;
+               return substr( wfBaseConvert( $ts, 10, 2, 46 ), -46 );
        }
 
        /**
index 0ac79d6..eda8bc9 100644 (file)
@@ -1229,7 +1229,7 @@ class User {
                $defOpt['variant'] = $wgContLang->getCode();
                $defOpt['language'] = $wgContLang->getCode();
                foreach( SearchEngine::searchableNamespaces() as $nsnum => $nsname ) {
-                       $defOpt['searchNs'.$nsnum] = !empty( $wgNamespacesToBeSearchedDefault[$nsnum] );
+                       $defOpt['searchNs' . $nsnum] = !empty( $wgNamespacesToBeSearchedDefault[$nsnum] );
                }
                $defOpt['skin'] = $wgDefaultSkin;
 
@@ -1268,7 +1268,7 @@ class User {
                }
 
                wfProfileIn( __METHOD__ );
-               wfDebug( __METHOD__.": checking...\n" );
+               wfDebug( __METHOD__ . ": checking...\n" );
 
                // Initialize data...
                // Otherwise something ends up stomping on $this->mBlockedby when
@@ -3244,7 +3244,7 @@ class User {
                                }
                        }
                        if ( !$loaded ) {
-                               throw new MWException( __METHOD__. ": hit a key conflict attempting " .
+                               throw new MWException( __METHOD__ . ": hit a key conflict attempting " .
                                        "to insert a user row, but then it doesn't exist when we select it!" );
                        }
                        return Status::newFatal( 'userexists' );
@@ -3869,6 +3869,7 @@ class User {
        /**
         * Check, if the given group has the given permission
         *
+        * @since 1.21
         * @param string $group Group to check
         * @param string $role Role to check
         * @return bool
@@ -4253,7 +4254,7 @@ class User {
                } elseif ( $type == ':B:' ) {
                        # Salted
                        list( $salt, $realHash ) = explode( ':', substr( $hash, 3 ), 2 );
-                       return md5( $salt.'-'.md5( $password ) ) === $realHash;
+                       return md5( $salt . '-' . md5( $password ) ) === $realHash;
                } else {
                        # Old-style
                        return self::oldCrypt( $password, $userId ) === $hash;
@@ -4427,8 +4428,18 @@ class User {
                }
 
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'user_properties', array( 'up_user' => $userId ), __METHOD__ );
-               $dbw->insert( 'user_properties', $insert_rows, __METHOD__ );
+               $hasRows = $dbw->selectField( 'user_properties', '1',
+                       array( 'up_user' => $userId ), __METHOD__ );
+
+               if ( $hasRows ) {
+                       // Only do this delete if there is something there. A very large portion of
+                       // calls to this function are for setting 'rememberpassword' for new accounts.
+                       // Doing this delete for new accounts with no rows in the table rougly causes
+                       // gap locks on [max user ID,+infinity) which causes high contention since many
+                       // updates will pile up on each other since they are for higher (newer) user IDs.
+                       $dbw->delete( 'user_properties', array( 'up_user' => $userId ), __METHOD__ );
+               }
+               $dbw->insert( 'user_properties', $insert_rows, __METHOD__, array( 'IGNORE' ) );
        }
 
        /**
index f8f699c..b9a7aac 100644 (file)
@@ -621,11 +621,13 @@ class MediaWiki {
                        if ( $job ) {
                                $output = $job->toString() . "\n";
                                $t = - microtime( true );
+                               wfProfileIn( __METHOD__ . '-' . get_class( $job ) );
                                $success = $job->run();
+                               wfProfileOut( __METHOD__ . '-' . get_class( $job ) );
                                $group->ack( $job ); // done
                                $t += microtime( true );
                                $t = round( $t * 1000 );
-                               if ( !$success ) {
+                               if ( $success === false ) {
                                        $output .= "Error: " . $job->getLastError() . ", Time: $t ms\n";
                                } else {
                                        $output .= "Success, Time: $t ms\n";
index a1dbbfc..ab3d68d 100644 (file)
@@ -73,7 +73,7 @@ class WikiMap {
         * @param string $text link's text; optional, default to "User:$user"
         * @return String: HTML link or false if the wiki was not found
         */
-       public static function foreignUserLink( $wikiID, $user, $text=null ) {
+       public static function foreignUserLink( $wikiID, $user, $text = null ) {
                return self::makeForeignLink( $wikiID, "User:$user", $text );
        }
 
@@ -85,7 +85,7 @@ class WikiMap {
         * @param string $text link's text; optional, default to $page
         * @return String: HTML link or false if the wiki was not found
         */
-       public static function makeForeignLink( $wikiID, $page, $text=null ) {
+       public static function makeForeignLink( $wikiID, $page, $text = null ) {
                if ( !$text ) {
                        $text = $page;
                }
index c016b18..3f7e497 100644 (file)
@@ -797,7 +797,7 @@ class WikiPage implements Page, IDBAccessObject {
        public function setCachedLastEditTime( $timestamp ) {
                global $wgMemc;
                $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) );
-               $wgMemc->set( $key, wfTimestamp( TS_MW, $timestamp ), 60*15 );
+               $wgMemc->set( $key, wfTimestamp( TS_MW, $timestamp ), 60 * 15 );
        }
 
        /**
@@ -2121,17 +2121,20 @@ class WikiPage implements Page, IDBAccessObject {
                        && $shortTitle != $user->getTitleKey()
                        && !( $revision->isMinor() && $user->isAllowed( 'nominornewtalk' ) )
                ) {
-                       if ( wfRunHooks( 'ArticleEditUpdateNewTalk', array( &$this ) ) ) {
-                               $other = User::newFromName( $shortTitle, false );
-                               if ( !$other ) {
-                                       wfDebug( __METHOD__ . ": invalid username\n" );
-                               } elseif ( User::isIP( $shortTitle ) ) {
-                                       // An anonymous user
-                                       $other->setNewtalk( true, $revision );
-                               } elseif ( $other->isLoggedIn() ) {
-                                       $other->setNewtalk( true, $revision );
-                               } else {
-                                       wfDebug( __METHOD__ . ": don't need to notify a nonexistent user\n" );
+                       $recipient = User::newFromName( $shortTitle, false );
+                       if ( !$recipient ) {
+                               wfDebug( __METHOD__ . ": invalid username\n" );
+                       } else {
+                               // Allow extensions to prevent user notification when a new message is added to their talk page
+                               if ( wfRunHooks( 'ArticleEditUpdateNewTalk', array( &$this, $recipient ) ) ) {
+                                       if ( User::isIP( $shortTitle ) ) {
+                                               // An anonymous user
+                                               $recipient->setNewtalk( true, $revision );
+                                       } elseif ( $recipient->isLoggedIn() ) {
+                                               $recipient->setNewtalk( true, $revision );
+                                       } else {
+                                               wfDebug( __METHOD__ . ": don't need to notify a nonexistent user\n" );
+                                       }
                                }
                        }
                }
@@ -3019,69 +3022,76 @@ class WikiPage implements Page, IDBAccessObject {
         * @param array $added   The names of categories that were added
         * @param array $deleted The names of categories that were deleted
         */
-       public function updateCategoryCounts( $added, $deleted ) {
-               $ns = $this->mTitle->getNamespace();
+       public function updateCategoryCounts( array $added, array $deleted ) {
+               $that = $this;
+               $method = __METHOD__;
                $dbw = wfGetDB( DB_MASTER );
 
-               // First make sure the rows exist.  If one of the "deleted" ones didn't
-               // exist, we might legitimately not create it, but it's simpler to just
-               // create it and then give it a negative value, since the value is bogus
-               // anyway.
-               //
-               // Sometimes I wish we had INSERT ... ON DUPLICATE KEY UPDATE.
-               $insertCats = array_merge( $added, $deleted );
-               if ( !$insertCats ) {
-                       // Okay, nothing to do
-                       return;
-               }
+               // Do this at the end of the commit to reduce lock wait timeouts
+               $dbw->onTransactionPreCommitOrIdle(
+                       function() use ( $dbw, $that, $method, $added, $deleted ) {
+                               $ns = $that->getTitle()->getNamespace();
 
-               $insertRows = array();
+                               // First make sure the rows exist.  If one of the "deleted" ones didn't
+                               // exist, we might legitimately not create it, but it's simpler to just
+                               // create it and then give it a negative value, since the value is bogus
+                               // anyway.
+                               //
+                               // Sometimes I wish we had INSERT ... ON DUPLICATE KEY UPDATE.
+                               $insertCats = array_merge( $added, $deleted );
+                               if ( !$insertCats ) {
+                                       // Okay, nothing to do
+                                       return;
+                               }
 
-               foreach ( $insertCats as $cat ) {
-                       $insertRows[] = array(
-                               'cat_id' => $dbw->nextSequenceValue( 'category_cat_id_seq' ),
-                               'cat_title' => $cat
-                       );
-               }
-               $dbw->insert( 'category', $insertRows, __METHOD__, 'IGNORE' );
+                               $insertRows = array();
+                               foreach ( $insertCats as $cat ) {
+                                       $insertRows[] = array(
+                                               'cat_id' => $dbw->nextSequenceValue( 'category_cat_id_seq' ),
+                                               'cat_title' => $cat
+                                       );
+                               }
+                               $dbw->insert( 'category', $insertRows, $method, 'IGNORE' );
 
-               $addFields = array( 'cat_pages = cat_pages + 1' );
-               $removeFields = array( 'cat_pages = cat_pages - 1' );
+                               $addFields = array( 'cat_pages = cat_pages + 1' );
+                               $removeFields = array( 'cat_pages = cat_pages - 1' );
 
-               if ( $ns == NS_CATEGORY ) {
-                       $addFields[] = 'cat_subcats = cat_subcats + 1';
-                       $removeFields[] = 'cat_subcats = cat_subcats - 1';
-               } elseif ( $ns == NS_FILE ) {
-                       $addFields[] = 'cat_files = cat_files + 1';
-                       $removeFields[] = 'cat_files = cat_files - 1';
-               }
+                               if ( $ns == NS_CATEGORY ) {
+                                       $addFields[] = 'cat_subcats = cat_subcats + 1';
+                                       $removeFields[] = 'cat_subcats = cat_subcats - 1';
+                               } elseif ( $ns == NS_FILE ) {
+                                       $addFields[] = 'cat_files = cat_files + 1';
+                                       $removeFields[] = 'cat_files = cat_files - 1';
+                               }
 
-               if ( $added ) {
-                       $dbw->update(
-                               'category',
-                               $addFields,
-                               array( 'cat_title' => $added ),
-                               __METHOD__
-                       );
-               }
+                               if ( $added ) {
+                                       $dbw->update(
+                                               'category',
+                                               $addFields,
+                                               array( 'cat_title' => $added ),
+                                               $method
+                                       );
+                               }
 
-               if ( $deleted ) {
-                       $dbw->update(
-                               'category',
-                               $removeFields,
-                               array( 'cat_title' => $deleted ),
-                               __METHOD__
-                       );
-               }
+                               if ( $deleted ) {
+                                       $dbw->update(
+                                               'category',
+                                               $removeFields,
+                                               array( 'cat_title' => $deleted ),
+                                               $method
+                                       );
+                               }
 
-               foreach( $added as $catName ) {
-                       $cat = Category::newFromName( $catName );
-                       wfRunHooks( 'CategoryAfterPageAdded', array( $cat, $this ) );
-               }
-               foreach( $deleted as $catName ) {
-                       $cat = Category::newFromName( $catName );
-                       wfRunHooks( 'CategoryAfterPageRemoved', array( $cat, $this ) );
-               }
+                               foreach( $added as $catName ) {
+                                       $cat = Category::newFromName( $catName );
+                                       wfRunHooks( 'CategoryAfterPageAdded', array( $cat, $that ) );
+                               }
+                               foreach( $deleted as $catName ) {
+                                       $cat = Category::newFromName( $catName );
+                                       wfRunHooks( 'CategoryAfterPageRemoved', array( $cat, $that ) );
+                               }
+                       }
+               );
        }
 
        /**
index 7cecf3a..29c240e 100644 (file)
@@ -200,9 +200,9 @@ class Xml {
                        $encYear = '';
                }
                $inputAttribs = array( 'id' => 'year', 'maxlength' => 4, 'size' => 7 );
-               return self::label( wfMessage( 'year' )->text(), 'year' ) . ' '.
-                       Html::input( 'year', $encYear, 'number', $inputAttribs ) . ' '.
-                       self::label( wfMessage( 'month' )->text(), 'month' ) . ' '.
+               return self::label( wfMessage( 'year' )->text(), 'year' ) . ' ' .
+                       Html::input( 'year', $encYear, 'number', $inputAttribs ) . ' ' .
+                       self::label( wfMessage( 'month' )->text(), 'month' ) . ' ' .
                        self::monthSelector( $encMonth, -1 );
        }
 
@@ -330,7 +330,7 @@ class Xml {
         * @param array $attribs other attributes
         * @return string HTML
         */
-       public static function check( $name, $checked = false, $attribs=array() ) {
+       public static function check( $name, $checked = false, $attribs = array() ) {
                return self::element( 'input', array_merge(
                        array(
                                'name' => $name,
@@ -389,7 +389,7 @@ class Xml {
         * @param array $attribs other attributes
         * @return string HTML
         */
-       public static function inputLabel( $label, $name, $id, $size=false, $value=false, $attribs = array() ) {
+       public static function inputLabel( $label, $name, $id, $size = false, $value = false, $attribs = array() ) {
                list( $label, $input ) = self::inputLabelSep( $label, $name, $id, $size, $value, $attribs );
                return $label . '&#160;' . $input;
        }
@@ -466,7 +466,7 @@ class Xml {
         * @param array $attribs optional additional HTML attributes
         * @return string HTML
         */
-       public static function option( $text, $value=null, $selected = false,
+       public static function option( $text, $value = null, $selected = false,
                        $attribs = array() ) {
                if( !is_null( $value ) ) {
                        $attribs['value'] = $value;
@@ -488,7 +488,7 @@ class Xml {
         * @param $tabindex Mixed: Value of the tabindex attribute
         * @return string
         */
-       public static function listDropDown( $name= '', $list = '', $other = '', $selected = '', $class = '', $tabindex = null ) {
+       public static function listDropDown( $name = '', $list = '', $other = '', $selected = '', $class = '', $tabindex = null ) {
                $optgroup = false;
 
                $options = self::option( $other, 'other', $selected === 'other' );
index 2e18460..5e4f118 100644 (file)
@@ -47,7 +47,7 @@ class XmlTypeCheck {
         *        namespace, name, and attributes, but not to text contents.
         *        Filter should return 'true' to toggle on $this->filterMatch
         */
-       function __construct( $file, $filterCallback=null ) {
+       function __construct( $file, $filterCallback = null ) {
                $this->filterCallback = $filterCallback;
                $this->run( $file );
        }
index 646180d..307efce 100644 (file)
@@ -162,7 +162,7 @@ class ZipDirectoryReader {
                                        || $this->eocdr['CD entries total'] == 0xffff )
                                {
                                        $this->error( 'zip-unsupported', 'Central directory header indicates ZIP64, ' .
-                                               'but we are in legacy mode. Rejecting this upload is necessary to avoid '.
+                                               'but we are in legacy mode. Rejecting this upload is necessary to avoid ' .
                                                'opening vulnerabilities on clients using OpenJDK 7 or later.' );
                                }
 
index dec3d84..3dd4c48 100644 (file)
@@ -43,21 +43,11 @@ class EditAction extends FormlessAction {
 
        public function show() {
                $page = $this->page;
-               $request = $this->getRequest();
                $user = $this->getUser();
-               $context = $this->getContext();
 
                if ( wfRunHooks( 'CustomEditor', array( $page, $user ) ) ) {
-                       if ( ExternalEdit::useExternalEngine( $context, 'edit' )
-                               && $this->getName() == 'edit' && !$request->getVal( 'section' )
-                               && !$request->getVal( 'oldid' ) )
-                       {
-                               $extedit = new ExternalEdit( $context );
-                               $extedit->execute();
-                       } else {
-                               $editor = new EditPage( $page );
-                               $editor->edit();
-                       }
+                       $editor = new EditPage( $page );
+                       $editor->edit();
                }
 
        }
index 8729426..7296126 100644 (file)
@@ -661,7 +661,7 @@ class HistoryPager extends ReverseChronologicalPager {
                wfRunHooks( 'HistoryRevisionTools', array( $rev, &$tools ) );
 
                if ( $tools ) {
-                       $s2 .= ' '. $this->msg( 'parentheses' )->rawParams( $lang->pipeList( $tools ) )->escaped();
+                       $s2 .= ' ' . $this->msg( 'parentheses' )->rawParams( $lang->pipeList( $tools ) )->escaped();
                }
 
                # Tags
index f386a8a..08fde7a 100644 (file)
@@ -1560,6 +1560,10 @@ abstract class ApiBase extends ContextSource {
 
        /**
         * Returns a list of all possible errors returned by the module
+        *
+        * Don't call this function directly: use getFinalPossibleErrors() to allow
+        * hooks to modify parameters as needed.
+        *
         * @return array in the format of array( key, param1, param2, ... ) or array( 'code' => ..., 'info' => ... )
         */
        public function getPossibleErrors() {
@@ -1602,6 +1606,19 @@ abstract class ApiBase extends ContextSource {
                return $ret;
        }
 
+       /**
+        * Get final list of possible errors, after hooks have had a chance to
+        * tweak it as needed.
+        *
+        * @return array
+        * @since 1.22
+        */
+       public function getFinalPossibleErrors() {
+               $possibleErrors = $this->getPossibleErrors();
+               wfRunHooks( 'APIGetPossibleErrors', array( $this, &$possibleErrors ) );
+               return $possibleErrors;
+       }
+
        /**
         * Parses a list of errors into a standardised format
         * @param array $errors List of errors. Items can be in the for array( key, param1, param2, ... ) or array( 'code' => ..., 'info' => ... )
index 4916145..ab60008 100644 (file)
@@ -100,7 +100,7 @@ class ApiEditPage extends ApiBase {
                        $name = $titleObj->getPrefixedDBkey();
                        $model = $contentHandler->getModelID();
 
-                       $this->dieUsage( "The requested format $contentFormat is not supported for content model ".
+                       $this->dieUsage( "The requested format $contentFormat is not supported for content model " .
                                                        " $model used by $name", 'badformat' );
                }
 
index 015a992..42fb652 100644 (file)
@@ -149,7 +149,7 @@ class ApiFeedContributions extends ApiBase {
        public function getAllowedParams() {
                global $wgFeedClasses;
                $feedFormatNames = array_keys( $wgFeedClasses );
-               return array (
+               return array(
                        'feedformat' => array(
                                ApiBase::PARAM_DFLT => 'rss',
                                ApiBase::PARAM_TYPE => $feedFormatNames
index fdbdcc3..b96ea37 100644 (file)
@@ -33,8 +33,9 @@
  */
 class ApiFeedWatchlist extends ApiBase {
 
-       private $linkToDiffs = false;
        private $watchlistModule = null;
+       private $linkToDiffs = false;
+       private $linkToSections = false;
 
        /**
         * This module uses a custom feed wrapper printer.
@@ -97,6 +98,12 @@ class ApiFeedWatchlist extends ApiBase {
                                $fauxReqArr['wlprop'] .= '|ids';
                        }
 
+                       // Support linking directly to sections when possible
+                       // (possible only if section name is present in comment)
+                       if ( $params['linktosections'] ) {
+                               $this->linkToSections = true;
+                       }
+
                        // Check for 'allrev' parameter, and if found, show all revisions to each page on wl.
                        if ( $params['allrev'] ) {
                                $fauxReqArr['wlallrev'] = '';
@@ -164,6 +171,18 @@ class ApiFeedWatchlist extends ApiBase {
                        $titleUrl = $title->getFullURL();
                }
                $comment = isset( $info['comment'] ) ? $info['comment'] : null;
+
+               // Create an anchor to section.
+               // The anchor won't work for sections that have dupes on page
+               // as there's no way to strip that info from ApiWatchlist (apparently?).
+               // RegExp in the line below is equal to Linker::formatAutocomments().
+               if ( $this->linkToSections && $comment !== null && preg_match( '!(.*)/\*\s*(.*?)\s*\*/(.*)!', $comment, $matches ) ) {
+                       global $wgParser;
+                       $sectionTitle = $wgParser->stripSectionName( $matches[2] );
+                       $sectionTitle = Sanitizer::normalizeSectionNameWhitespace( $sectionTitle );
+                       $titleUrl .= Title::newFromText( '#' . $sectionTitle )->getFragmentForURL();
+               }
+
                $timestamp = $info['timestamp'];
                $user = $info['user'];
 
@@ -195,6 +214,7 @@ class ApiFeedWatchlist extends ApiBase {
                                ApiBase::PARAM_MAX => 72,
                        ),
                        'linktodiffs' => false,
+                       'linktosections' => false,
                );
                if ( $flags ) {
                        $wlparams = $this->getWatchlistModule()->getAllowedParams( $flags );
@@ -219,6 +239,7 @@ class ApiFeedWatchlist extends ApiBase {
                        'feedformat' => 'The format of the feed',
                        'hours' => 'List pages modified within this many hours from now',
                        'linktodiffs' => 'Link to change differences instead of article pages',
+                       'linktosections' => 'Link directly to changed sections if possible',
                        'allrev' => $wldescr['allrev'],
                        'wlowner' => $wldescr['owner'],
                        'wltoken' => $wldescr['token'],
index e4642dd..3ecb0d5 100644 (file)
@@ -218,7 +218,7 @@ class ApiImageRotate extends ApiBase {
                $pageSet = $this->getPageSet();
                return array_merge(
                        parent::getPossibleErrors(),
-                       $pageSet->getPossibleErrors()
+                       $pageSet->getFinalPossibleErrors()
                );
        }
 
index abd47b2..76f9b42 100644 (file)
@@ -863,7 +863,7 @@ class ApiMain extends ApiBase {
                        ' ' . $request->getMethod() .
                        ' ' . wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) .
                        ' ' . $request->getIP() .
-                       ' T=' . $milliseconds .'ms';
+                       ' T=' . $milliseconds . 'ms';
                foreach ( $this->getParamsUsed() as $name ) {
                        $value = $request->getVal( $name );
                        if ( $value === null ) {
index 27f8cef..042396e 100644 (file)
@@ -300,7 +300,7 @@ class ApiParamInfo extends ApiBase {
                }
 
                // Errors
-               $retval['errors'] = $this->parseErrors( $obj->getPossibleErrors() );
+               $retval['errors'] = $this->parseErrors( $obj->getFinalPossibleErrors() );
                $result->setIndexedTagName( $retval['errors'], 'error' );
 
                return $retval;
index 49cc738..f13a50e 100644 (file)
@@ -204,7 +204,7 @@ class ApiPurge extends ApiBase {
        public function getPossibleErrors() {
                return array_merge(
                        parent::getPossibleErrors(),
-                       $this->getPageSet()->getPossibleErrors()
+                       $this->getPageSet()->getFinalPossibleErrors()
                );
        }
 
index 4d9a772..3bee4d3 100644 (file)
@@ -722,7 +722,7 @@ class ApiQuery extends ApiBase {
        public function getPossibleErrors() {
                return array_merge(
                        parent::getPossibleErrors(),
-                       $this->getPageSet()->getPossibleErrors()
+                       $this->getPageSet()->getFinalPossibleErrors()
                );
        }
 
index e24b162..566c208 100644 (file)
@@ -260,7 +260,7 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               return array (
+               return array(
                        'sort' => array(
                                ApiBase::PARAM_DFLT => 'name',
                                ApiBase::PARAM_TYPE => array(
index b2d3b1e..5d714f5 100644 (file)
@@ -183,7 +183,7 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                return array(
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
-                               ApiBase::PARAM_TYPE => array (
+                               ApiBase::PARAM_TYPE => array(
                                        'sortkey',
                                        'timestamp',
                                        'hidden',
index 9dbd859..124908b 100644 (file)
@@ -258,7 +258,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                        'prop' => array(
                                ApiBase::PARAM_DFLT => 'ids|title',
                                ApiBase::PARAM_ISMULTI => true,
-                               ApiBase::PARAM_TYPE => array (
+                               ApiBase::PARAM_TYPE => array(
                                        'ids',
                                        'title',
                                        'sortkey',
@@ -267,7 +267,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                        'timestamp',
                                )
                        ),
-                       'namespace' => array (
+                       'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace',
                        ),
index 021074a..c34859b 100644 (file)
@@ -218,7 +218,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
        }
 
        public function getAllowedParams() {
-               return array (
+               return array(
                        'from' => null,
                        'continue' => null,
                        'to' => null,
index 6f03bbe..7b13257 100644 (file)
@@ -90,7 +90,7 @@ class ApiQueryIWLinks extends ApiQueryBase {
                        if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
                                $this->addOption( 'ORDER BY', 'iwl_prefix' . $sort );
                        } else {
-                               $this->addOption( 'ORDER BY', array (
+                               $this->addOption( 'ORDER BY', array(
                                                'iwl_from' . $sort,
                                                'iwl_prefix' . $sort,
                                                'iwl_title' . $sort
index 87bdbfe..0869cb9 100644 (file)
@@ -569,11 +569,12 @@ class ApiQueryImageInfo extends ApiQueryBase {
                return array(
                        'prop' => self::getPropertyDescriptions( array(), $p ),
                        'urlwidth' => array( "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
-                                               'Only the current version of the image can be scaled' ),
+                               'For performance reasons if this option is used, ' .
+                                       'no more than ' . self::TRANSFORM_LIMIT . ' scaled images will be returned.' ),
                        'urlheight' => "Similar to {$p}urlwidth. Cannot be used without {$p}urlwidth",
                        'urlparam' => array( "A handler specific parameter string. For example, pdf's ",
                                "might use 'page15-100px'. {$p}urlwidth must be used and be consistent with {$p}urlparam" ),
-                       'limit' => 'How many image revisions to return',
+                       'limit' => 'How many image revisions to return per image',
                        'start' => 'Timestamp to start listing from',
                        'end' => 'Timestamp to stop listing at',
                        'metadataversion' => array( "Version of metadata to use. if 'latest' is specified, use latest version.",
index 41d8f11..a23ff06 100644 (file)
@@ -228,7 +228,7 @@ abstract class ApiQueryORM extends ApiQueryBase {
         * @return array
         */
        public function getAllowedParams() {
-               $params = array (
+               $params = array(
                        'props' => array(
                                ApiBase::PARAM_TYPE => $this->getTable()->getFieldNames(),
                                ApiBase::PARAM_ISMULTI => true,
@@ -252,7 +252,7 @@ abstract class ApiQueryORM extends ApiQueryBase {
         * @return array
         */
        public function getParamDescription() {
-               $descriptions = array (
+               $descriptions = array(
                        'props' => 'Fields to query',
                        'continue' => 'Offset number from where to continue the query',
                        'limit' => 'Max amount of rows to return',
index 0132fc3..6f2f02e 100644 (file)
@@ -133,7 +133,7 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
                        'prop' => array(
                                ApiBase::PARAM_DFLT => 'ids|title',
                                ApiBase::PARAM_ISMULTI => true,
-                               ApiBase::PARAM_TYPE => array (
+                               ApiBase::PARAM_TYPE => array(
                                        'ids',
                                        'title',
                                        'value',
index 4aa0000..222ad07 100644 (file)
@@ -157,7 +157,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array_diff( $wgRestrictionLevels, array( '' ) )
                        ),
-                       'limit' => array (
+                       'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_MIN => 1,
index 192fe87..317b7ba 100644 (file)
@@ -550,7 +550,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                                if ( !$content->isSupportedFormat( $format ) ) {
                                        $name = $title->getPrefixedDBkey();
 
-                                       $this->dieUsage( "The requested format {$this->contentFormat} is not supported ".
+                                       $this->dieUsage( "The requested format {$this->contentFormat} is not supported " .
                                                                        "for content model $model used by $name", 'badformat' );
                                }
 
@@ -593,7 +593,7 @@ class ApiQueryRevisions extends ApiQueryBase {
 
                                                $name = $title->getPrefixedDBkey();
 
-                                               $this->dieUsage( "The requested format {$this->contentFormat} is not supported for ".
+                                               $this->dieUsage( "The requested format {$this->contentFormat} is not supported for " .
                                                                                        "content model $model used by $name", 'badformat' );
                                        }
 
index 90b12c1..491d20f 100644 (file)
@@ -135,7 +135,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
 
                if ( !$params['allrev'] ) {
                        $this->addTables( 'page' );
-                       $this->addJoinConds( array( 'page' => array( 'LEFT JOIN','rc_cur_id=page_id' ) ) );
+                       $this->addJoinConds( array( 'page' => array( 'LEFT JOIN', 'rc_cur_id=page_id' ) ) );
                        $this->addWhere( 'rc_this_oldid=page_latest OR rc_type=' . RC_LOG );
                }
 
@@ -321,7 +321,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                        'end' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
                        ),
-                       'namespace' => array (
+                       'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace'
                        ),
index cae9673..53affbd 100644 (file)
@@ -270,7 +270,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
                $ps = $this->getPageSet();
                return array_merge(
                        parent::getPossibleErrors(),
-                       $ps->getPossibleErrors(),
+                       $ps->getFinalPossibleErrors(),
                        $this->getRequireMaxOneParameterErrorMessages(
                                array( 'timestamp', 'torevid', 'newerthanrevid' ) ),
                        $this->getRequireOnlyOneParameterErrorMessages(
index 719032f..9d30729 100644 (file)
@@ -143,7 +143,7 @@ class ApiUpload extends ApiBase {
         * @return array
         */
        private function getStashResult( $warnings ) {
-               $result = array ();
+               $result = array();
                // Some uploads can request they be stashed, so as not to publish them immediately.
                // In this case, a failure to stash ought to be fatal
                try {
@@ -222,9 +222,9 @@ class ApiUpload extends ApiBase {
                                $ok = JobQueueGroup::singleton()->push( new AssembleUploadChunksJob(
                                        Title::makeTitle( NS_FILE, $this->mParams['filekey'] ),
                                        array(
-                                               'filename'  => $this->mParams['filename'],
-                                               'filekey'   => $this->mParams['filekey'],
-                                               'session'   => $this->getContext()->exportSession()
+                                               'filename' => $this->mParams['filename'],
+                                               'filekey' => $this->mParams['filekey'],
+                                               'session' => $this->getContext()->exportSession()
                                        )
                                ) );
                                if ( $ok ) {
@@ -588,12 +588,12 @@ class ApiUpload extends ApiBase {
                        $ok = JobQueueGroup::singleton()->push( new PublishStashedFileJob(
                                Title::makeTitle( NS_FILE, $this->mParams['filename'] ),
                                array(
-                                       'filename'  => $this->mParams['filename'],
-                                       'filekey'   => $this->mParams['filekey'],
-                                       'comment'   => $this->mParams['comment'],
-                                       'text'      => $this->mParams['text'],
-                                       'watch'     => $watch,
-                                       'session'   => $this->getContext()->exportSession()
+                                       'filename' => $this->mParams['filename'],
+                                       'filekey' => $this->mParams['filekey'],
+                                       'comment' => $this->mParams['comment'],
+                                       'text' => $this->mParams['text'],
+                                       'watch' => $watch,
+                                       'session' => $this->getContext()->exportSession()
                                )
                        ) );
                        if ( $ok ) {
index b9b1eed..80db29b 100644 (file)
@@ -83,7 +83,7 @@ class ApiUserrights extends ApiBase {
        }
 
        public function getAllowedParams() {
-               return array (
+               return array(
                        'user' => array(
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true
index a59cc9a..d3e85d8 100644 (file)
@@ -20,6 +20,7 @@
  *
  * @file
  * @author Tim Starling
+ * @author Aaron Schulz
  * @copyright © 2009, Tim Starling, Domas Mituzas
  * @copyright © 2010, Max Sem
  * @copyright © 2011, Antoine Musso
@@ -103,7 +104,7 @@ class BacklinkCache {
                        self::$cache = new ProcessCacheLRU( 1 );
                }
                $dbKey = $title->getPrefixedDBkey();
-               if ( !self::$cache->has( $dbKey, 'obj' ) ) {
+               if ( !self::$cache->has( $dbKey, 'obj', 3600 ) ) {
                        self::$cache->set( $dbKey, 'obj', new self( $title ) );
                }
                return self::$cache->get( $dbKey, 'obj' );
@@ -147,71 +148,73 @@ class BacklinkCache {
                if ( !isset( $this->db ) ) {
                        $this->db = wfGetDB( DB_SLAVE );
                }
-
                return $this->db;
        }
 
        /**
         * Get the backlinks for a given table. Cached in process memory only.
         * @param $table String
-        * @param $startId Integer or false
-        * @param $endId Integer or false
+        * @param $startId Integer|false
+        * @param $endId Integer|false
+        * @param $max Integer|INF
         * @return TitleArrayFromResult
         */
-       public function getLinks( $table, $startId = false, $endId = false ) {
+       public function getLinks( $table, $startId = false, $endId = false, $max = INF ) {
+               return TitleArray::newFromResult( $this->queryLinks( $table, $startId, $endId, $max ) );
+       }
+
+       /**
+        * 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
+        * @return ResultWrapper
+        */
+       protected function queryLinks( $table, $startId, $endId, $max ) {
                wfProfileIn( __METHOD__ );
 
                $fromField = $this->getPrefix( $table ) . '_from';
 
-               if ( $startId || $endId ) {
-                       // Partial range, not cached
-                       wfDebug( __METHOD__ . ": from DB (uncacheable range)\n" );
+               if ( !$startId && !$endId && is_infinite( $max )
+                       && isset( $this->fullResultCache[$table] ) )
+               {
+                       wfDebug( __METHOD__ . ": got results from cache\n" );
+                       $res = $this->fullResultCache[$table];
+               } else {
+                       wfDebug( __METHOD__ . ": got results from DB\n" );
                        $conds = $this->getConditions( $table );
-
                        // Use the from field in the condition rather than the joined page_id,
                        // because databases are stupid and don't necessarily propagate indexes.
                        if ( $startId ) {
                                $conds[] = "$fromField >= " . intval( $startId );
                        }
-
                        if ( $endId ) {
                                $conds[] = "$fromField <= " . intval( $endId );
                        }
+                       $options = array( 'STRAIGHT_JOIN', 'ORDER BY' => $fromField );
+                       if ( is_finite( $max ) && $max > 0 ) {
+                               $options['LIMIT'] = $max;
+                       }
 
                        $res = $this->getDB()->select(
                                array( $table, 'page' ),
                                array( 'page_namespace', 'page_title', 'page_id' ),
                                $conds,
                                __METHOD__,
-                               array(
-                                       'STRAIGHT_JOIN',
-                                       'ORDER BY' => $fromField
-                               ) );
-                       $ta = TitleArray::newFromResult( $res );
-
-                       wfProfileOut( __METHOD__ );
-                       return $ta;
-               }
+                               $options
+                       );
 
-               // @todo FIXME: Make this a function?
-               if ( !isset( $this->fullResultCache[$table] ) ) {
-                       wfDebug( __METHOD__ . ": from DB\n" );
-                       $res = $this->getDB()->select(
-                               array( $table, 'page' ),
-                               array( 'page_namespace', 'page_title', 'page_id' ),
-                               $this->getConditions( $table ),
-                               __METHOD__,
-                               array(
-                                       'STRAIGHT_JOIN',
-                                       'ORDER BY' => $fromField,
-                               ) );
-                       $this->fullResultCache[$table] = $res;
+                       if ( !$startId && !$endId && $res->numRows() < $max ) {
+                               // The full results fit within the limit, so cache them
+                               $this->fullResultCache[$table] = $res;
+                       } else {
+                               wfDebug( __METHOD__ . ": results from DB were uncacheable\n" );
+                       }
                }
 
-               $ta = TitleArray::newFromResult( $this->fullResultCache[$table] );
-
                wfProfileOut( __METHOD__ );
-               return $ta;
+               return $res;
        }
 
        /**
@@ -309,7 +312,7 @@ class BacklinkCache {
        /**
         * Get the approximate number of backlinks
         * @param $table String
-        * @param $max integer Only count up to this many backlinks
+        * @param $max integer|INF Only count up to this many backlinks
         * @return integer
         */
        public function getNumLinks( $table, $max = INF ) {
@@ -335,20 +338,12 @@ class BacklinkCache {
                }
 
                // 4) fetch from the database ...
-               if ( is_infinite( $max ) ) { // full count
-                       $count = $this->getLinks( $table )->count();
+               $count = $this->getLinks( $table, false, false, $max )->count();
+               if ( $count < $max ) { // full count
                        $wgMemc->set( $memcKey, $count, self::CACHE_EXPIRY );
-               } else { // with limit
-                       $count = $this->getDB()->select(
-                               array( $table, 'page' ),
-                               '1',
-                               $this->getConditions( $table ),
-                               __METHOD__,
-                               array( 'LIMIT' => $max )
-                       )->numRows();
                }
 
-               return $count;
+               return min( $max, $count );
        }
 
        /**
@@ -395,8 +390,28 @@ class BacklinkCache {
                }
 
                // 4) ... finally fetch from the slow database :(
-               $this->getLinks( $table );
-               $cacheEntry = $this->partitionResult( $this->fullResultCache[$table], $batchSize );
+               $cacheEntry = array( 'numRows' => 0, 'batches' => array() ); // final result
+               // Do the selects in batches to avoid client-side OOMs (bug 43452).
+               // Use a LIMIT that plays well with $batchSize to keep equal sized partitions.
+               $selectSize = max( $batchSize, 200000 - ( 200000 % $batchSize ) );
+               $start = false;
+               do {
+                       $res = $this->queryLinks( $table, $start, false, $selectSize );
+                       $partitions = $this->partitionResult( $res, $batchSize, false );
+                       // Merge the link count and range partitions for this chunk
+                       $cacheEntry['numRows'] += $partitions['numRows'];
+                       $cacheEntry['batches'] = array_merge( $cacheEntry['batches'], $partitions['batches'] );
+                       if ( count( $partitions['batches'] ) ) {
+                               list( $lStart, $lEnd ) = end( $partitions['batches'] );
+                               $start = $lEnd + 1; // pick up after this inclusive range
+                       }
+               } while ( $partitions['numRows'] >= $selectSize );
+               // Make sure the first range has start=false and the last one has end=false
+               if ( count( $cacheEntry['batches'] ) ) {
+                       $cacheEntry['batches'][0][0] = false;
+                       $cacheEntry['batches'][count( $cacheEntry['batches'] ) - 1][1] = false;
+               }
+
                // Save partitions to memcached
                $wgMemc->set( $memcKey, $cacheEntry, self::CACHE_EXPIRY );
 
@@ -412,31 +427,32 @@ class BacklinkCache {
         * Partition a DB result with backlinks in it into batches
         * @param $res ResultWrapper database result
         * @param $batchSize integer
+        * @param $isComplete bool Whether $res includes all the backlinks
         * @throws MWException
-        * @return array @see
+        * @return array
         */
-       protected function partitionResult( $res, $batchSize ) {
+       protected function partitionResult( $res, $batchSize, $isComplete = true ) {
                $batches = array();
                $numRows = $res->numRows();
                $numBatches = ceil( $numRows / $batchSize );
 
                for ( $i = 0; $i < $numBatches; $i++ ) {
-                       if ( $i == 0  ) {
+                       if ( $i == 0 && $isComplete ) {
                                $start = false;
                        } else {
-                               $rowNum = intval( $numRows * $i / $numBatches );
+                               $rowNum = $i * $batchSize;
                                $res->seek( $rowNum );
                                $row = $res->fetchObject();
-                               $start = $row->page_id;
+                               $start = (int)$row->page_id;
                        }
 
-                       if ( $i == $numBatches - 1 ) {
+                       if ( $i == ( $numBatches - 1 ) && $isComplete ) {
                                $end = false;
                        } else {
-                               $rowNum = intval( $numRows * ( $i + 1 ) / $numBatches );
+                               $rowNum = min( $numRows - 1, ( $i + 1 ) * $batchSize - 1 );
                                $res->seek( $rowNum );
                                $row = $res->fetchObject();
-                               $end = $row->page_id - 1;
+                               $end = (int)$row->page_id;
                        }
 
                        # Sanity check order
index 30a7217..74feffb 100644 (file)
@@ -163,7 +163,7 @@ abstract class FileCacheBase {
 
                $this->checkCacheDirs(); // build parent dir
                if ( !file_put_contents( $this->cachePath(), $text, LOCK_EX ) ) {
-                       wfDebug( __METHOD__ . "() failed saving ". $this->cachePath() . "\n" );
+                       wfDebug( __METHOD__ . "() failed saving " . $this->cachePath() . "\n" );
                        $this->mCached = null;
                        return false;
                }
index 88e7928..992809e 100644 (file)
@@ -46,8 +46,6 @@ class HTMLCacheUpdate implements DeferrableUpdate {
        }
 
        public function doUpdate() {
-               global $wgMaxBacklinksInvalidate;
-
                wfProfileIn( __METHOD__ );
 
                $job = new HTMLCacheUpdateJob(
@@ -60,13 +58,14 @@ class HTMLCacheUpdate implements DeferrableUpdate {
                );
 
                $count = $this->mTitle->getBacklinkCache()->getNumLinks( $this->mTable, 200 );
-               if ( $wgMaxBacklinksInvalidate !== false && $count > $wgMaxBacklinksInvalidate ) {
-                       wfDebug( "Skipped HTML cache invalidation of {$this->mTitle->getPrefixedText()}." );
-               } elseif ( $count >= 200 ) { // many backlinks
+               if ( $count >= 200 ) { // many backlinks
                        JobQueueGroup::singleton()->push( $job );
                        JobQueueGroup::singleton()->deduplicateRootJob( $job );
                } else { // few backlinks ($count might be off even if 0)
-                       $job->run(); // just do the purge query now
+                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw->onTransactionIdle( function() use ( $job ) {
+                               $job->run(); // just do the purge query now
+                       } );
                }
 
                wfProfileOut( __METHOD__ );
index 8c1a068..6cc2a7e 100644 (file)
@@ -75,12 +75,16 @@ class MessageCache {
         * Get the signleton instance of this class
         *
         * @since 1.18
-        * @return MessageCache object
+        * @return MessageCache
         */
        public static function singleton() {
                if ( is_null( self::$instance ) ) {
                        global $wgUseDatabaseMessages, $wgMsgCacheExpiry;
-                       self::$instance = new self( wfGetMessageCacheStorage(), $wgUseDatabaseMessages, $wgMsgCacheExpiry );
+                       self::$instance = new self(
+                               wfGetMessageCacheStorage(),
+                               $wgUseDatabaseMessages,
+                               $wgMsgCacheExpiry
+                       );
                }
                return self::$instance;
        }
@@ -121,8 +125,8 @@ class MessageCache {
         * Try to load the cache from a local file.
         *
         * @param string $hash the hash of contents, to check validity.
-        * @param $code Mixed: Optional language code, see documenation of load().
-        * @return The cache array
+        * @param Mixed $code Optional language code, see documenation of load().
+        * @return array The cache array
         */
        function getLocalCache( $hash, $code ) {
                global $wgCacheDirectory;
@@ -194,7 +198,7 @@ class MessageCache {
         * or false if populating empty cache fails. Also returns true if MessageCache
         * is disabled.
         *
-        * @param bool|String $code String: language to which load messages
+        * @param bool|String $code Language to which load messages
         * @throws MWException
         * @return bool
         */
@@ -287,7 +291,7 @@ class MessageCache {
                                if ( $acquired ) {
                                        # Unlock the status key if there is an exception
                                        $that = $this;
-                                       $statusUnlocker = new ScopedCallback( function() use ( $that, $statusKey ) {
+                                       $statusUnlocker = new ScopedCallback( function () use ( $that, $statusKey ) {
                                                $that->mMemc->delete( $statusKey );
                                        } );
 
@@ -299,7 +303,7 @@ class MessageCache {
                                        # write is potentially non-atomic, e.g. the results of a replace()
                                        # may be discarded.
                                        if ( $this->lock( $cacheKey ) ) {
-                                               $mainUnlocker = new ScopedCallback( function() use ( $that, $cacheKey ) {
+                                               $mainUnlocker = new ScopedCallback( function () use ( $that, $cacheKey ) {
                                                        $that->unlock( $cacheKey );
                                                } );
                                        } else {
@@ -390,8 +394,8 @@ class MessageCache {
         * $wgMaxMsgCacheEntrySize are assigned a special value, and are loaded
         * on-demand from the database later.
         *
-        * @param string $code language code.
-        * @return Array: loaded messages for storing in caches.
+        * @param string $code Language code.
+        * @return array Loaded messages for storing in caches.
         */
        function loadFromDB( $code ) {
                wfProfileIn( __METHOD__ );
@@ -451,11 +455,15 @@ class MessageCache {
 
                foreach ( $res as $row ) {
                        $text = Revision::getRevisionText( $row );
-                       if( $text === false ) {
+                       if ( $text === false ) {
                                // Failed to fetch data; possible ES errors?
                                // Store a marker to fetch on-demand as a workaround...
                                $entry = '!TOO BIG';
-                               wfDebugLog( 'MessageCache', __METHOD__ . ": failed to load message page text for {$row->page_title} ($code)" );
+                               wfDebugLog(
+                                       'MessageCache',
+                                       __METHOD__
+                                               . ": failed to load message page text for {$row->page_title} ($code)"
+                               );
                        } else {
                                $entry = ' ' . $text;
                        }
@@ -471,8 +479,8 @@ class MessageCache {
        /**
         * Updates cache as necessary when message page is changed
         *
-        * @param string $title name of the page changed.
-        * @param $text Mixed: new contents of the page.
+        * @param string $title Name of the page changed.
+        * @param mixed $text New contents of the page.
         */
        public function replace( $title, $text ) {
                global $wgMaxMsgCacheEntrySize;
@@ -533,6 +541,9 @@ class MessageCache {
 
        /**
         * Is the given cache array expired due to time passing or a version change?
+        *
+        * @param $cache
+        * @return bool
         */
        protected function isCacheExpired( $cache ) {
                if ( !isset( $cache['VERSION'] ) || !isset( $cache['EXPIRY'] ) ) {
@@ -547,15 +558,14 @@ class MessageCache {
                return false;
        }
 
-
        /**
         * Shortcut to update caches.
         *
-        * @param $cache array: cached messages with a version.
-        * @param $dest string: Either "local-only" to save to local caches only
+        * @param array $cache Cached messages with a version.
+        * @param string $dest Either "local-only" to save to local caches only
         *   or "all" to save to all caches.
-        * @param $code string: Language code.
-        * @return bool on somekind of error.
+        * @param string|bool $code Language code (default: false)
+        * @return bool
         */
        protected function saveToCaches( $cache, $dest, $code = false ) {
                wfProfileIn( __METHOD__ );
@@ -584,8 +594,7 @@ class MessageCache {
        /**
         * Represents a write lock on the messages key
         *
-        * @param $key string
-        *
+        * @param string $key
         * @return Boolean: success
         */
        function lock( $key ) {
@@ -619,8 +628,8 @@ class MessageCache {
        /**
         * Get a message from either the content language or the user language.
         *
-        * @param $key String: the message cache key
-        * @param $useDB Boolean: get the message from the DB, false to use only
+        * @param string $key The message cache key
+        * @param bool $useDB Get the message from the DB, false to use only
         *               the localisation
         * @param bool|string $langcode Code of the language to get the message for, if
         *                  it is a valid code create a language for that language,
@@ -630,8 +639,7 @@ class MessageCache {
         *                  parameter functionality), or if it is a true boolean
         *                  then use the wikis content language (also as a
         *                  fallback).
-        * @param $isFullKey Boolean: specifies whether $key is a two part key
-        *                   "msg/lang".
+        * @param bool $isFullKey Specifies whether $key is a two part key "msg/lang".
         *
         * @throws MWException
         * @return string|bool
@@ -640,7 +648,8 @@ class MessageCache {
                global $wgLanguageCode, $wgContLang;
 
                if ( is_int( $key ) ) {
-                       // "Non-string key given" exception sometimes happens for numerical strings that become ints somewhere on their way here
+                       // "Non-string key given" exception sometimes happens for numerical
+                       // strings that become ints somewhere on their way here
                        $key = strval( $key );
                }
 
@@ -673,9 +682,9 @@ class MessageCache {
                }
 
                # Try the MediaWiki namespace
-               if( !$this->mDisable && $useDB ) {
+               if ( !$this->mDisable && $useDB ) {
                        $title = $uckey;
-                       if( !$isFullKey && ( $langcode != $wgLanguageCode ) ) {
+                       if ( !$isFullKey && ( $langcode != $wgLanguageCode ) ) {
                                $title .= '/' . $langcode;
                        }
                        $message = $this->getMsgFromNamespace( $title, $langcode );
@@ -690,7 +699,7 @@ class MessageCache {
                }
 
                # Try the array of another language
-               if( $message === false ) {
+               if ( $message === false ) {
                        $parts = explode( '/', $lckey );
                        # We may get calls for things that are http-urls from sidebar
                        # Let's not load nonexistent languages for those
@@ -704,14 +713,15 @@ class MessageCache {
                }
 
                # Is this a custom message? Try the default language in the db...
-               if( ( $message === false || $message === '-' ) &&
+               if ( ( $message === false || $message === '-' ) &&
                        !$this->mDisable && $useDB &&
-                       !$isFullKey && ( $langcode != $wgLanguageCode ) ) {
+                       !$isFullKey && ( $langcode != $wgLanguageCode )
+               ) {
                        $message = $this->getMsgFromNamespace( $uckey, $wgLanguageCode );
                }
 
                # Final fallback
-               if( $message === false ) {
+               if ( $message === false ) {
                        return false;
                }
 
@@ -737,8 +747,7 @@ class MessageCache {
         * and self::get() are some examples in core.
         *
         * @param string $title Message cache key with initial uppercase letter.
-        * @param string $code code denoting the language to try.
-        *
+        * @param string $code Code denoting the language to try.
         * @return string|bool False on failure
         */
        function getMsgFromNamespace( $title, $code ) {
@@ -749,7 +758,7 @@ class MessageCache {
                                return substr( $entry, 1 );
                        } elseif ( $entry === '!NONEXISTENT' ) {
                                return false;
-                       } elseif( $entry === '!TOO BIG' ) {
+                       } elseif ( $entry === '!TOO BIG' ) {
                                // Fall through and try invididual message cache below
                        }
                } else {
@@ -787,17 +796,24 @@ class MessageCache {
                        $content = $revision->getContent();
                        if ( !$content ) {
                                // A possibly temporary loading failure.
-                               wfDebugLog( 'MessageCache', __METHOD__ . ": failed to load message page text for {$title} ($code)" );
+                               wfDebugLog(
+                                       'MessageCache',
+                                       __METHOD__ . ": failed to load message page text for {$title} ($code)"
+                               );
                                $message = null; // no negative caching
                        } else {
                                // XXX: Is this the right way to turn a Content object into a message?
-                               // NOTE: $content is typically either WikitextContent, JavaScriptContent or CssContent.
-                               //       MessageContent is *not* used for storing messages, it's only used for wrapping them when needed.
+                               // NOTE: $content is typically either WikitextContent, JavaScriptContent or
+                               //       CssContent. MessageContent is *not* used for storing messages, it's
+                               //       only used for wrapping them when needed.
                                $message = $content->getWikitextForTransclusion();
 
                                if ( $message === false || $message === null ) {
-                                       wfDebugLog( 'MessageCache', __METHOD__ . ": message content doesn't provide wikitext "
-                                                               . "(content model: " . $content->getContentHandler() . ")" );
+                                       wfDebugLog(
+                                               'MessageCache',
+                                               __METHOD__ . ": message content doesn't provide wikitext "
+                                                       . "(content model: " . $content->getContentHandler() . ")"
+                                       );
 
                                        $message = false; // negative caching
                                } else {
@@ -818,15 +834,15 @@ class MessageCache {
        }
 
        /**
-        * @param $message string
-        * @param $interface bool
-        * @param $language
-        * @param $title Title
+        * @param string $message
+        * @param bool $interface
+        * @param string $language Language code
+        * @param Title $title
         * @return string
         */
        function transform( $message, $interface = false, $language = null, $title = null ) {
                // Avoid creating parser if nothing to transform
-               if( strpos( $message, '{{' ) === false ) {
+               if ( strpos( $message, '{{' ) === false ) {
                        return $message;
                }
 
@@ -870,14 +886,16 @@ class MessageCache {
        }
 
        /**
-        * @param $text string
-        * @param $title Title
-        * @param $linestart bool
-        * @param $interface bool
-        * @param $language
+        * @param string $text
+        * @param Title $title
+        * @param bool $linestart Whether or not this is at the start of a line
+        * @param bool $interface Whether this is an interface message
+        * @param string $language Language code
         * @return ParserOutput|string
         */
-       public function parse( $text, $title = null, $linestart = true, $interface = false, $language = null  ) {
+       public function parse( $text, $title = null, $linestart = true,
+               $interface = false, $language = null
+       ) {
                if ( $this->mInParser ) {
                        return htmlspecialchars( $text );
                }
@@ -936,12 +954,12 @@ class MessageCache {
        public function figureMessage( $key ) {
                global $wgLanguageCode;
                $pieces = explode( '/', $key );
-               if( count( $pieces ) < 2 ) {
+               if ( count( $pieces ) < 2 ) {
                        return array( $key, $wgLanguageCode );
                }
 
                $lang = array_pop( $pieces );
-               if( !Language::fetchLanguageName( $lang, null, 'mw' ) ) {
+               if ( !Language::fetchLanguageName( $lang, null, 'mw' ) ) {
                        return array( $key, $wgLanguageCode );
                }
 
@@ -954,7 +972,7 @@ class MessageCache {
         * If $code is the content language code, this will return all message keys
         * for which MediaWiki:msgkey exists. If $code is another language code, this
         * will ONLY return message keys for which MediaWiki:msgkey/$code exists.
-        * @param $code string
+        * @param string $code Language code
         * @return array of message keys (strings)
         */
        public function getAllMessageKeys( $code ) {
index 694c1a1..63d4141 100644 (file)
@@ -81,6 +81,8 @@ class UserCache {
                $usersToCheck = array();
                $usersToQuery = array();
 
+               $userIds = array_unique( $userIds );
+
                foreach ( $userIds as $userId ) {
                        $userId = (int)$userId;
                        if ( $userId <= 0 ) {
index a15e80b..65fe58f 100644 (file)
@@ -59,7 +59,7 @@ class RedisConnectionPool {
         */
        protected function __construct( array $options ) {
                if ( !extension_loaded( 'redis' ) ) {
-                       throw new MWException( __CLASS__. ' requires the phpredis extension: ' .
+                       throw new MWException( __CLASS__ . ' requires the phpredis extension: ' .
                                'https://github.com/nicolasff/phpredis' );
                }
                $this->connectTimeout = $options['connectTimeout'];
@@ -164,7 +164,7 @@ class RedisConnectionPool {
                        // TCP connection
                        $hostPort = IP::splitHostAndPort( $server );
                        if ( !$hostPort ) {
-                               throw new MWException( __CLASS__.": invalid configured server \"$server\"" );
+                               throw new MWException( __CLASS__ . ": invalid configured server \"$server\"" );
                        }
                        list( $host, $port ) = $hostPort;
                        if ( $port === false ) {
@@ -302,6 +302,38 @@ class RedisConnRef {
                return call_user_func_array( array( $this->conn, $name ), $arguments );
        }
 
+       /**
+        * @param string $script
+        * @param array $params
+        * @param integer $numKeys
+        * @return mixed
+        * @throws RedisException
+        */
+       public function luaEval( $script, array $params, $numKeys ) {
+               $sha1 = sha1( $script ); // 40 char hex
+               $conn = $this->conn; // convenience
+
+               // Try to run the server-side cached copy of the script
+               $conn->clearLastError();
+               $res = $conn->evalSha( $sha1, $params, $numKeys );
+               // If the script is not in cache, use eval() to retry and cache it
+               if ( preg_match( '/^NOSCRIPT/', $conn->getLastError() ) ) {
+                       $conn->clearLastError();
+                       $res = $conn->eval( $script, $params, $numKeys );
+                       wfDebugLog( 'redis', "Used eval() for Lua script $sha1." );
+               }
+
+               if ( $conn->getLastError() ) { // script bug?
+                       wfDebugLog( 'redis', "Lua script error: " . $conn->getLastError() );
+               }
+
+               return $res;
+       }
+
+       /**
+        * @param RedisConnRef $conn
+        * @return bool
+        */
        public function isConnIdentical( Redis $conn ) {
                return $this->conn === $conn;
        }
index 9c5ebcd..dcd33bc 100644 (file)
@@ -1060,7 +1060,7 @@ abstract class ContentHandler {
                                        if ( isset( $handler[1] ) ) {
                                                $info .= '::' . $handler[1];
                                        }
-                               } else if ( is_object( $handler ) ) {
+                               } elseif ( is_object( $handler ) ) {
                                        $info = get_class( $handler[0] );
                                        $info .= '::on' . $event;
                                } else {
diff --git a/includes/db/ChronologyProtector.php b/includes/db/ChronologyProtector.php
new file mode 100644 (file)
index 0000000..de5e72c
--- /dev/null
@@ -0,0 +1,106 @@
+<?php
+/**
+ * Generator of database load balancing objects.
+ *
+ * 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 Database
+ */
+
+/**
+ * Class for ensuring a consistent ordering of events as seen by the user, despite replication.
+ * Kind of like Hawking's [[Chronology Protection Agency]].
+ */
+class ChronologyProtector {
+       /** @var Array (DB master name => position) */
+       protected $startupPositions = array();
+       /** @var Array (DB master name => position) */
+       protected $shutdownPositions = array();
+
+       protected $initialized = false; // bool; whether the session data was loaded
+
+       /**
+        * Initialise a LoadBalancer to give it appropriate chronology protection.
+        *
+        * If the session has a previous master position recorded, this will try to
+        * make sure that the next query to a slave of that master will see changes up
+        * to that position by delaying execution. The delay may timeout and allow stale
+        * data if no non-lagged slaves are available.
+        *
+        * @param $lb LoadBalancer
+        * @return void
+        */
+       public function initLB( LoadBalancer $lb ) {
+               if ( $lb->getServerCount() <= 1 ) {
+                       return; // non-replicated setup
+               }
+               if ( !$this->initialized ) {
+                       $this->initialized = true;
+                       if ( isset( $_SESSION[__CLASS__] ) && is_array( $_SESSION[__CLASS__] ) ) {
+                               $this->startupPositions = $_SESSION[__CLASS__];
+                       }
+               }
+               $masterName = $lb->getServerName( 0 );
+               if ( !empty( $this->startupPositions[$masterName] ) ) {
+                       $info = $lb->parentInfo();
+                       $pos = $this->startupPositions[$masterName];
+                       wfDebug( __METHOD__ . ": LB " . $info['id'] . " waiting for master pos $pos\n" );
+                       $lb->waitFor( $pos );
+               }
+       }
+
+       /**
+        * Notify the ChronologyProtector that the LoadBalancer is about to shut
+        * down. Saves replication positions.
+        *
+        * @param $lb LoadBalancer
+        * @return void
+        */
+       public function shutdownLB( LoadBalancer $lb ) {
+               if ( session_id() == '' || $lb->getServerCount() <= 1 ) {
+                       return; // don't start a session; don't bother with non-replicated setups
+               }
+               $masterName = $lb->getServerName( 0 );
+               if ( isset( $this->shutdownPositions[$masterName] ) ) {
+                       return; // already done
+               }
+               // Only save the position if writes have been done on the connection
+               $db = $lb->getAnyOpenConnection( 0 );
+               $info = $lb->parentInfo();
+               if ( !$db || !$db->doneWrites() ) {
+                       wfDebug( __METHOD__ . ": LB {$info['id']}, no writes done\n" );
+                       return;
+               }
+               $pos = $db->getMasterPos();
+               wfDebug( __METHOD__ . ": LB {$info['id']} has master pos $pos\n" );
+               $this->shutdownPositions[$masterName] = $pos;
+       }
+
+       /**
+        * Notify the ChronologyProtector that the LBFactory is done calling shutdownLB() for now.
+        * May commit chronology data to persistent storage.
+        *
+        * @return void
+        */
+       public function shutdown() {
+               if ( session_id() != '' && count( $this->shutdownPositions ) ) {
+                       wfDebug( __METHOD__ . ": saving master pos for " .
+                               count( $this->shutdownPositions ) . " master(s)\n" );
+                       $_SESSION[__CLASS__] = $this->shutdownPositions;
+               }
+       }
+}
index 9db2ada..87d5f81 100644 (file)
@@ -230,11 +230,10 @@ abstract class DatabaseBase implements DatabaseType {
        protected $mConn = null;
        protected $mOpened = false;
 
-       /**
-        * @since 1.20
-        * @var array of Closure
-        */
+       /** @var array of Closure */
        protected $mTrxIdleCallbacks = array();
+       /** @var array of Closure */
+       protected $mTrxPreCommitCallbacks = array();
 
        protected $mTablePrefix;
        protected $mFlags;
@@ -553,12 +552,14 @@ abstract class DatabaseBase implements DatabaseType {
 
        /**
         * Returns true if there is a transaction open with possible write
-        * queries or transaction idle callbacks waiting on it to finish.
+        * queries or transaction pre-commit/idle callbacks waiting on it to finish.
         *
         * @return bool
         */
        public function writesOrCallbacksPending() {
-               return $this->mTrxLevel && ( $this->mTrxDoneWrites || $this->mTrxIdleCallbacks );
+               return $this->mTrxLevel && (
+                       $this->mTrxDoneWrites || $this->mTrxIdleCallbacks || $this->mTrxPreCommitCallbacks
+               );
        }
 
        /**
@@ -964,6 +965,7 @@ abstract class DatabaseBase implements DatabaseType {
                        # Transaction is gone, like it or not
                        $this->mTrxLevel = 0;
                        $this->mTrxIdleCallbacks = array(); // cancel
+                       $this->mTrxPreCommitCallbacks = array(); // cancel
                        wfDebug( "Connection lost, reconnecting...\n" );
 
                        if ( $this->ping() ) {
@@ -1094,17 +1096,22 @@ abstract class DatabaseBase implements DatabaseType {
         * @return String
         */
        protected function fillPreparedArg( $matches ) {
-               switch( $matches[1] ) {
-                       case '\\?': return '?';
-                       case '\\!': return '!';
-                       case '\\&': return '&';
+               switch ( $matches[1] ) {
+                       case '\\?':
+                               return '?';
+                       case '\\!':
+                               return '!';
+                       case '\\&':
+                               return '&';
                }
 
                list( /* $n */, $arg ) = each( $this->preparedArgs );
 
-               switch( $matches[1] ) {
-                       case '?': return $this->addQuotes( $arg );
-                       case '!': return $arg;
+               switch ( $matches[1] ) {
+                       case '?':
+                               return $this->addQuotes( $arg );
+                       case '!':
+                               return $arg;
                        case '&':
                                # return $this->addQuotes( file_get_contents( $arg ) );
                                throw new DBUnexpectedError( $this, '& mode is not implemented. If it\'s really needed, uncomment the line above.' );
@@ -1120,7 +1127,8 @@ abstract class DatabaseBase implements DatabaseType {
         *
         * @param $res Mixed: A SQL result
         */
-       public function freeResult( $res ) {}
+       public function freeResult( $res ) {
+       }
 
        /**
         * A SELECT wrapper which returns a single field from a single result row.
@@ -1140,8 +1148,8 @@ abstract class DatabaseBase implements DatabaseType {
         * @return bool|mixed The value from the field, or false on failure.
         */
        public function selectField( $table, $var, $cond = '', $fname = 'DatabaseBase::selectField',
-               $options = array() )
-       {
+               $options = array()
+       {
                if ( !is_array( $options ) ) {
                        $options = array( $options );
                }
@@ -2960,22 +2968,42 @@ abstract class DatabaseBase implements DatabaseType {
         * If there is a transaction and it is rolled back, then the callback is cancelled.
         * Callbacks must commit any transactions that they begin.
         *
-        * This is useful for updates to different systems or separate transactions are needed.
+        * This is useful for updates to different systems or when separate transactions are needed.
+        * For example, one might want to enqueue jobs into a system outside the database, but only
+        * after the database is updated so that the jobs will see the data when they actually run.
+        * It can also be used for updates that easily cause deadlocks if locks are held too long.
         *
+        * @param Closure $callback
         * @since 1.20
+        */
+       final public function onTransactionIdle( Closure $callback ) {
+               $this->mTrxIdleCallbacks[] = $callback;
+               if ( !$this->mTrxLevel ) {
+                       $this->runOnTransactionIdleCallbacks();
+               }
+       }
+
+       /**
+        * Run an anonymous function before the current transaction commits or now if there is none.
+        * If there is a transaction and it is rolled back, then the callback is cancelled.
+        * Callbacks must not start nor commit any transactions.
+        *
+        * This is useful for updates that easily cause deadlocks if locks are held too long
+        * but where atomicity is strongly desired for these updates and some related updates.
         *
         * @param Closure $callback
+        * @since 1.22
         */
-       final public function onTransactionIdle( Closure $callback ) {
+       final public function onTransactionPreCommitOrIdle( Closure $callback ) {
                if ( $this->mTrxLevel ) {
-                       $this->mTrxIdleCallbacks[] = $callback;
+                       $this->mTrxPreCommitCallbacks[] = $callback;
                } else {
-                       $callback();
+                       $this->onTransactionIdle( $callback ); // this will trigger immediately
                }
        }
 
        /**
-        * Actually run the "on transaction idle" callbacks.
+        * Actually any "on transaction idle" callbacks.
         *
         * @since 1.20
         */
@@ -2991,7 +3019,8 @@ abstract class DatabaseBase implements DatabaseType {
                                        $this->clearFlag( DBO_TRX ); // make each query its own transaction
                                        $callback();
                                        $this->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
-                               } catch ( Exception $e ) {}
+                               } catch ( Exception $e ) {
+                               }
                        }
                } while ( count( $this->mTrxIdleCallbacks ) );
 
@@ -3000,6 +3029,28 @@ abstract class DatabaseBase implements DatabaseType {
                }
        }
 
+       /**
+        * Actually any "on transaction pre-commit" callbacks.
+        *
+        * @since 1.22
+        */
+       protected function runOnTransactionPreCommitCallbacks() {
+               $e = null; // last exception
+               do { // callbacks may add callbacks :)
+                       $callbacks = $this->mTrxPreCommitCallbacks;
+                       $this->mTrxPreCommitCallbacks = array(); // recursion guard
+                       foreach ( $callbacks as $callback ) {
+                               try {
+                                       $callback();
+                               } catch ( Exception $e ) {}
+                       }
+               } while ( count( $this->mTrxPreCommitCallbacks ) );
+
+               if ( $e instanceof Exception ) {
+                       throw $e; // re-throw any last exception
+               }
+       }
+
        /**
         * Begin a transaction. If a transaction is already in progress, that transaction will be committed before the
         * new transaction is started.
@@ -3028,10 +3079,12 @@ abstract class DatabaseBase implements DatabaseType {
                                // log it if $wgDebugDBTransactions is enabled.
                                if ( $this->mTrxDoneWrites && $wgDebugDBTransactions ) {
                                        wfDebug( "$fname: Automatic transaction with writes in progress" .
-                                               " (from {$this->mTrxFname}), performing implicit commit!\n" );
+                                               " (from {$this->mTrxFname}), performing implicit commit!\n"
+                                       );
                                }
                        }
 
+                       $this->runOnTransactionPreCommitCallbacks();
                        $this->doCommit( $fname );
                        $this->runOnTransactionIdleCallbacks();
                }
@@ -3080,6 +3133,7 @@ abstract class DatabaseBase implements DatabaseType {
                        }
                }
 
+               $this->runOnTransactionPreCommitCallbacks();
                $this->doCommit( $fname );
                $this->runOnTransactionIdleCallbacks();
        }
@@ -3111,6 +3165,7 @@ abstract class DatabaseBase implements DatabaseType {
                }
                $this->doRollback( $fname );
                $this->mTrxIdleCallbacks = array(); // cancel
+               $this->mTrxPreCommitCallbacks = array(); // cancel
        }
 
        /**
@@ -3142,8 +3197,8 @@ abstract class DatabaseBase implements DatabaseType {
         * @return Boolean: true if operation was successful
         */
        public function duplicateTableStructure( $oldName, $newName, $temporary = false,
-               $fname = 'DatabaseBase::duplicateTableStructure' )
-       {
+               $fname = 'DatabaseBase::duplicateTableStructure'
+       {
                throw new MWException(
                        'DatabaseBase::duplicateTableStructure is not implemented in descendant class' );
        }
@@ -3288,7 +3343,8 @@ abstract class DatabaseBase implements DatabaseType {
         * @param $options Array
         * @return void
         */
-       public function setSessionOptions( array $options ) {}
+       public function setSessionOptions( array $options ) {
+       }
 
        /**
         * Read and execute SQL commands from a file.
@@ -3695,8 +3751,8 @@ abstract class DatabaseBase implements DatabaseType {
        }
 
        public function __destruct() {
-               if ( count( $this->mTrxIdleCallbacks ) ) { // sanity
-                       trigger_error( "Transaction idle callbacks still pending." );
+               if ( count( $this->mTrxIdleCallbacks ) || count( $this->mTrxPreCommitCallbacks ) ) {
+                       trigger_error( "Transaction idle or pre-commit callbacks still pending." ); // sanity
                }
        }
 }
index 628a2af..55095c3 100644 (file)
@@ -188,7 +188,7 @@ class DBConnectionError extends DBError {
                                        # Hack: extend the body for error messages
                                        $cache = str_replace( array( '</html>', '</body>' ), '', $cache );
                                        # Add cache notice...
-                                       $cache .= '<div style="color:red;font-size:150%;font-weight:bold;">'.
+                                       $cache .= '<div style="color:red;font-size:150%;font-weight:bold;">' .
                                                htmlspecialchars( $this->msg( 'dberr-cachederror',
                                                        'This is a cached copy of the requested page, and may not be up to date. ' ) ) .
                                                '</div>';
index dde3af5..82b0e5a 100644 (file)
@@ -37,24 +37,31 @@ class DatabaseMssql extends DatabaseBase {
        function cascadingDeletes() {
                return true;
        }
+
        function cleanupTriggers() {
                return true;
        }
+
        function strictIPs() {
                return true;
        }
+
        function realTimestamps() {
                return true;
        }
+
        function implicitGroupby() {
                return false;
        }
+
        function implicitOrderby() {
                return false;
        }
+
        function functionalIndexes() {
                return true;
        }
+
        function unionSupportsOrderAndLimit() {
                return false;
        }
@@ -1093,37 +1100,96 @@ class MssqlResult {
                        $i++;
                }
                // http://msdn.microsoft.com/en-us/library/cc296183.aspx contains type table
-               switch( $intType ) {
-                       case SQLSRV_SQLTYPE_BIGINT:             $strType = 'bigint'; break;
-                       case SQLSRV_SQLTYPE_BINARY:             $strType = 'binary'; break;
-                       case SQLSRV_SQLTYPE_BIT:                        $strType = 'bit'; break;
-                       case SQLSRV_SQLTYPE_CHAR:                       $strType = 'char'; break;
-                       case SQLSRV_SQLTYPE_DATETIME:           $strType = 'datetime'; break;
-                       case SQLSRV_SQLTYPE_DECIMAL/*($precision, $scale)*/: $strType = 'decimal'; break;
-                       case SQLSRV_SQLTYPE_FLOAT:                      $strType = 'float'; break;
-                       case SQLSRV_SQLTYPE_IMAGE:                      $strType = 'image'; break;
-                       case SQLSRV_SQLTYPE_INT:                        $strType = 'int'; break;
-                       case SQLSRV_SQLTYPE_MONEY:                      $strType = 'money'; break;
-                       case SQLSRV_SQLTYPE_NCHAR/*($charCount)*/: $strType = 'nchar'; break;
-                       case SQLSRV_SQLTYPE_NUMERIC/*($precision, $scale)*/: $strType = 'numeric'; break;
-                       case SQLSRV_SQLTYPE_NVARCHAR/*($charCount)*/: $strType = 'nvarchar'; break;
-                       // case SQLSRV_SQLTYPE_NVARCHAR('max'): $strType = 'nvarchar(MAX)'; break;
-                       case SQLSRV_SQLTYPE_NTEXT:                      $strType = 'ntext'; break;
-                       case SQLSRV_SQLTYPE_REAL:                       $strType = 'real'; break;
-                       case SQLSRV_SQLTYPE_SMALLDATETIME:      $strType = 'smalldatetime'; break;
-                       case SQLSRV_SQLTYPE_SMALLINT:           $strType = 'smallint'; break;
-                       case SQLSRV_SQLTYPE_SMALLMONEY:         $strType = 'smallmoney'; break;
-                       case SQLSRV_SQLTYPE_TEXT:                       $strType = 'text'; break;
-                       case SQLSRV_SQLTYPE_TIMESTAMP:          $strType = 'timestamp'; break;
-                       case SQLSRV_SQLTYPE_TINYINT:            $strType = 'tinyint'; break;
-                       case SQLSRV_SQLTYPE_UNIQUEIDENTIFIER: $strType = 'uniqueidentifier'; break;
-                       case SQLSRV_SQLTYPE_UDT:                        $strType = 'UDT'; break;
-                       case SQLSRV_SQLTYPE_VARBINARY/*($byteCount)*/: $strType = 'varbinary'; break;
-                       // case SQLSRV_SQLTYPE_VARBINARY('max'): $strType = 'varbinary(MAX)'; break;
-                       case SQLSRV_SQLTYPE_VARCHAR/*($charCount)*/: $strType = 'varchar'; break;
-                       // case SQLSRV_SQLTYPE_VARCHAR('max'): $strType = 'varchar(MAX)'; break;
-                       case SQLSRV_SQLTYPE_XML:                        $strType = 'xml'; break;
-                       default: $strType = $intType;
+               switch ( $intType ) {
+                       case SQLSRV_SQLTYPE_BIGINT:
+                               $strType = 'bigint';
+                               break;
+                       case SQLSRV_SQLTYPE_BINARY:
+                               $strType = 'binary';
+                               break;
+                       case SQLSRV_SQLTYPE_BIT:
+                               $strType = 'bit';
+                               break;
+                       case SQLSRV_SQLTYPE_CHAR:
+                               $strType = 'char';
+                               break;
+                       case SQLSRV_SQLTYPE_DATETIME:
+                               $strType = 'datetime';
+                               break;
+                       case SQLSRV_SQLTYPE_DECIMAL: // ($precision, $scale)
+                               $strType = 'decimal';
+                               break;
+                       case SQLSRV_SQLTYPE_FLOAT:
+                               $strType = 'float';
+                               break;
+                       case SQLSRV_SQLTYPE_IMAGE:
+                               $strType = 'image';
+                               break;
+                       case SQLSRV_SQLTYPE_INT:
+                               $strType = 'int';
+                               break;
+                       case SQLSRV_SQLTYPE_MONEY:
+                               $strType = 'money';
+                               break;
+                       case SQLSRV_SQLTYPE_NCHAR: // ($charCount):
+                               $strType = 'nchar';
+                               break;
+                       case SQLSRV_SQLTYPE_NUMERIC: // ($precision, $scale):
+                               $strType = 'numeric';
+                               break;
+                       case SQLSRV_SQLTYPE_NVARCHAR: // ($charCount)
+                               $strType = 'nvarchar';
+                               break;
+                       // case SQLSRV_SQLTYPE_NVARCHAR('max'):
+                       //       $strType = 'nvarchar(MAX)';
+                       //       break;
+                       case SQLSRV_SQLTYPE_NTEXT:
+                               $strType = 'ntext';
+                               break;
+                       case SQLSRV_SQLTYPE_REAL:
+                               $strType = 'real';
+                               break;
+                       case SQLSRV_SQLTYPE_SMALLDATETIME:
+                               $strType = 'smalldatetime';
+                               break;
+                       case SQLSRV_SQLTYPE_SMALLINT:
+                               $strType = 'smallint';
+                               break;
+                       case SQLSRV_SQLTYPE_SMALLMONEY:
+                               $strType = 'smallmoney';
+                               break;
+                       case SQLSRV_SQLTYPE_TEXT:
+                               $strType = 'text';
+                               break;
+                       case SQLSRV_SQLTYPE_TIMESTAMP:
+                               $strType = 'timestamp';
+                               break;
+                       case SQLSRV_SQLTYPE_TINYINT:
+                               $strType = 'tinyint';
+                               break;
+                       case SQLSRV_SQLTYPE_UNIQUEIDENTIFIER:
+                               $strType = 'uniqueidentifier';
+                               break;
+                       case SQLSRV_SQLTYPE_UDT:
+                               $strType = 'UDT';
+                               break;
+                       case SQLSRV_SQLTYPE_VARBINARY: // ($byteCount)
+                               $strType = 'varbinary';
+                               break;
+                       // case SQLSRV_SQLTYPE_VARBINARY('max'):
+                       //       $strType = 'varbinary(MAX)';
+                       //       break;
+                       case SQLSRV_SQLTYPE_VARCHAR: // ($charCount)
+                               $strType = 'varchar';
+                               break;
+                       // case SQLSRV_SQLTYPE_VARCHAR('max'):
+                       //       $strType = 'varchar(MAX)';
+                       //       break;
+                       case SQLSRV_SQLTYPE_XML:
+                               $strType = 'xml';
+                               break;
+                       default:
+                               $strType = $intType;
                }
                return $strType;
        }
index e59ca95..a57b24b 100644 (file)
@@ -919,7 +919,7 @@ class DatabaseOracle extends DatabaseBase {
                        if ( isset( $this->mFieldInfoCache["$table.$field"] ) ) {
                                return $this->mFieldInfoCache["$table.$field"];
                        }
-                       $tableWhere = '= \''.$table.'\'';
+                       $tableWhere = '= \'' . $table . '\'';
                }
 
                $fieldInfoStmt = oci_parse( $this->mConn, 'SELECT * FROM wiki_field_info_full WHERE table_name ' . $tableWhere . ' and column_name = \'' . $field . '\'' );
index 55e0f88..bb35dc3 100644 (file)
@@ -320,7 +320,7 @@ class DatabasePostgres extends DatabaseBase {
 
        function hasConstraint( $name ) {
                $SQL = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n WHERE c.connamespace = n.oid AND conname = '" .
-                               pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" . pg_escape_string( $this->mConn, $this->getCoreSchema() ) ."'";
+                               pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" . pg_escape_string( $this->mConn, $this->getCoreSchema() ) . "'";
                $res = $this->doQuery( $SQL );
                return $this->numRows( $res );
        }
@@ -705,7 +705,7 @@ __INDEXATTR__;
        }
 
        function indexUnique( $table, $index, $fname = 'DatabasePostgres::indexUnique' ) {
-               $sql = "SELECT indexname FROM pg_indexes WHERE tablename='{$table}'".
+               $sql = "SELECT indexname FROM pg_indexes WHERE tablename='{$table}'" .
                        " AND indexdef LIKE 'CREATE UNIQUE%(" .
                        $this->strencode( $this->indexName( $index ) ) .
                        ")'";
@@ -960,7 +960,7 @@ __INDEXATTR__;
                        FROM pg_class c, pg_attribute a, pg_type t
                        WHERE relname='$table' AND a.attrelid=c.oid AND
                                a.atttypid=t.oid and a.attname='$field'";
-               $res =$this->query( $sql );
+               $res = $this->query( $sql );
                $row = $this->fetchObject( $res );
                if ( $row->ftype == 'varchar' ) {
                        $size = $row->size - 4;
@@ -1024,7 +1024,7 @@ __INDEXATTR__;
         */
        function pg_array_parse( $text, &$output, $limit = false, $offset = 1 ) {
                if( false === $limit ) {
-                       $limit = strlen( $text )-1;
+                       $limit = strlen( $text ) - 1;
                        $output = array();
                }
                if( '{}' == $text ) {
@@ -1042,7 +1042,7 @@ __INDEXATTR__;
                                        return $output;
                                }
                        } else {
-                               $offset = $this->pg_array_parse( $text, $output, $limit, $offset+1 );
+                               $offset = $this->pg_array_parse( $text, $output, $limit, $offset + 1 );
                        }
                } while ( $limit > $offset );
                return $output;
@@ -1408,7 +1408,8 @@ SQL;
                return array( $startOpts, $useIndex, $preLimitTail, $postLimitTail );
        }
 
-       function setFakeMaster( $enabled = true ) {}
+       function setFakeMaster( $enabled = true ) {
+       }
 
        function getDBname() {
                return $this->mDBname;
@@ -1475,7 +1476,7 @@ SQL;
                                sleep( 1 );
                        }
                }
-               wfDebug( __METHOD__." failed to acquire lock\n" );
+               wfDebug( __METHOD__ . " failed to acquire lock\n" );
                return false;
        }
 
index 0789e1b..80341b0 100644 (file)
@@ -52,9 +52,9 @@ class DatabaseSqlite extends DatabaseBase {
                $this->mName = $dbName;
                parent::__construct( $server, $user, $password, $dbName, $flags );
                // parent doesn't open when $user is false, but we can work with $dbName
-               if( $dbName ) {
+               if ( $dbName ) {
                        global $wgSharedDB;
-                       if( $this->open( $server, $user, $password, $dbName ) && $wgSharedDB ) {
+                       if ( $this->open( $server, $user, $password, $dbName ) && $wgSharedDB ) {
                                $this->attachDatabase( $wgSharedDB );
                        }
                }
@@ -471,7 +471,7 @@ class DatabaseSqlite extends DatabaseBase {
         */
        function makeSelectOptions( $options ) {
                foreach ( $options as $k => $v ) {
-                       if ( is_numeric( $k ) && ($v == 'FOR UPDATE' || $v == 'LOCK IN SHARE MODE') ) {
+                       if ( is_numeric( $k ) && ( $v == 'FOR UPDATE' || $v == 'LOCK IN SHARE MODE' ) ) {
                                $options[$k] = '';
                        }
                }
@@ -542,7 +542,9 @@ class DatabaseSqlite extends DatabaseBase {
         * @return bool|ResultWrapper
         */
        function replace( $table, $uniqueIndexes, $rows, $fname = 'DatabaseSqlite::replace' ) {
-               if ( !count( $rows ) ) return true;
+               if ( !count( $rows ) ) {
+                       return true;
+               }
 
                # SQLite can't handle multi-row replaces, so divide up into multiple single-row queries
                if ( isset( $rows[0] ) && is_array( $rows[0] ) ) {
@@ -707,7 +709,7 @@ class DatabaseSqlite extends DatabaseBase {
        function addQuotes( $s ) {
                if ( $s instanceof Blob ) {
                        return "x'" . bin2hex( $s->fetch() ) . "'";
-               } else if ( strpos( $s, "\0" ) !== false ) {
+               } elseif ( strpos( $s, "\0" ) !== false ) {
                        // SQLite doesn't support \0 in strings, so use the hex representation as a workaround.
                        // This is a known limitation of SQLite's mprintf function which PDO should work around,
                        // but doesn't. I have reported this to php.net as bug #63419:
@@ -848,11 +850,11 @@ class DatabaseSqlite extends DatabaseBase {
 
                $endArray = array();
 
-               foreach( $result as $table ) {
+               foreach ( $result as $table ) {
                        $vars = get_object_vars( $table );
                        $table = array_pop( $vars );
 
-                       if( !$prefix || strpos( $table, $prefix ) === 0 ) {
+                       if ( !$prefix || strpos( $table, $prefix ) === 0 ) {
                                if ( strpos( $table, 'sqlite_' ) !== 0 ) {
                                        $endArray[] = $table;
                                }
index 9a1c8bd..de58bab 100644 (file)
@@ -253,7 +253,8 @@ class FakeResultWrapper extends ResultWrapper {
                $this->pos = $row;
        }
 
-       function free() {}
+       function free() {
+       }
 
        // Callers want to be able to access fields with $this->fieldName
        function fetchObject() {
index 85e7775..be82f4e 100644 (file)
@@ -134,7 +134,8 @@ abstract class LBFactory {
         * Prepare all tracked load balancers for shutdown
         * STUB
         */
-       function shutdown() {}
+       function shutdown() {
+       }
 
        /**
         * Call a method of each tracked load balancer
@@ -256,6 +257,7 @@ class LBFactory_Simple extends LBFactory {
                if ( !isset( $this->extLBs[$cluster] ) ) {
                        $this->extLBs[$cluster] = $this->newExternalLB( $cluster, $wiki );
                        $this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
+                       $this->chronProt->initLB( $this->extLBs[$cluster] );
                }
                return $this->extLBs[$cluster];
        }
@@ -280,6 +282,9 @@ class LBFactory_Simple extends LBFactory {
                if ( $this->mainLB ) {
                        $this->chronProt->shutdownLB( $this->mainLB );
                }
+               foreach ( $this->extLBs as $extLB ) {
+                       $this->chronProt->shutdownLB( $extLB );
+               }
                $this->chronProt->shutdown();
                $this->commitMasterChanges();
        }
@@ -292,21 +297,27 @@ class LBFactory_Simple extends LBFactory {
  * LBFactory::enableBackend() to return to normal behavior
  */
 class LBFactory_Fake extends LBFactory {
-       function __construct( $conf ) {}
+       function __construct( $conf ) {
+       }
 
        function newMainLB( $wiki = false) {
                throw new DBAccessError;
        }
+
        function getMainLB( $wiki = false ) {
                throw new DBAccessError;
        }
+
        function newExternalLB( $cluster, $wiki = false ) {
                throw new DBAccessError;
        }
+
        function &getExternalLB( $cluster, $wiki = false ) {
                throw new DBAccessError;
        }
-       function forEachLB( $callback, $params = array() ) {}
+
+       function forEachLB( $callback, $params = array() ) {
+       }
 }
 
 /**
@@ -317,76 +328,3 @@ class DBAccessError extends MWException {
                parent::__construct( "Mediawiki tried to access the database via wfGetDB(). This is not allowed." );
        }
 }
-
-/**
- * Class for ensuring a consistent ordering of events as seen by the user, despite replication.
- * Kind of like Hawking's [[Chronology Protection Agency]].
- */
-class ChronologyProtector {
-       var $startupPos;
-       var $shutdownPos = array();
-
-       /**
-        * Initialise a LoadBalancer to give it appropriate chronology protection.
-        *
-        * @param $lb LoadBalancer
-        */
-       function initLB( $lb ) {
-               if ( $this->startupPos === null ) {
-                       if ( !empty( $_SESSION[__CLASS__] ) ) {
-                               $this->startupPos = $_SESSION[__CLASS__];
-                       }
-               }
-               if ( !$this->startupPos ) {
-                       return;
-               }
-               $masterName = $lb->getServerName( 0 );
-
-               if ( $lb->getServerCount() > 1 && !empty( $this->startupPos[$masterName] ) ) {
-                       $info = $lb->parentInfo();
-                       $pos = $this->startupPos[$masterName];
-                       wfDebug( __METHOD__ . ": LB " . $info['id'] . " waiting for master pos $pos\n" );
-                       $lb->waitFor( $this->startupPos[$masterName] );
-               }
-       }
-
-       /**
-        * Notify the ChronologyProtector that the LoadBalancer is about to shut
-        * down. Saves replication positions.
-        *
-        * @param $lb LoadBalancer
-        */
-       function shutdownLB( $lb ) {
-               // Don't start a session, don't bother with non-replicated setups
-               if ( strval( session_id() ) == '' || $lb->getServerCount() <= 1 ) {
-                       return;
-               }
-               $masterName = $lb->getServerName( 0 );
-               if ( isset( $this->shutdownPos[$masterName] ) ) {
-                       // Already done
-                       return;
-               }
-               // Only save the position if writes have been done on the connection
-               $db = $lb->getAnyOpenConnection( 0 );
-               $info = $lb->parentInfo();
-               if ( !$db || !$db->doneWrites() ) {
-                       wfDebug( __METHOD__ . ": LB {$info['id']}, no writes done\n" );
-                       return;
-               }
-               $pos = $db->getMasterPos();
-               wfDebug( __METHOD__ . ": LB {$info['id']} has master pos $pos\n" );
-               $this->shutdownPos[$masterName] = $pos;
-       }
-
-       /**
-        * Notify the ChronologyProtector that the LBFactory is done calling shutdownLB() for now.
-        * May commit chronology data to persistent storage.
-        */
-       function shutdown() {
-               if ( session_id() != '' && count( $this->shutdownPos ) ) {
-                       wfDebug( __METHOD__ . ": saving master pos for " .
-                               count( $this->shutdownPos ) . " master(s)\n" );
-                       $_SESSION[__CLASS__] = $this->shutdownPos;
-               }
-       }
-}
index 2e4963d..3043946 100644 (file)
@@ -145,8 +145,8 @@ class LBFactory_Multi extends LBFactory {
                $section = $this->getSectionForWiki( $wiki );
                if ( !isset( $this->mainLBs[$section] ) ) {
                        $lb = $this->newMainLB( $wiki, $section );
-                       $this->chronProt->initLB( $lb );
                        $lb->parentInfo( array( 'id' => "main-$section" ) );
+                       $this->chronProt->initLB( $lb );
                        $this->mainLBs[$section] = $lb;
                }
                return $this->mainLBs[$section];
@@ -181,6 +181,7 @@ class LBFactory_Multi extends LBFactory {
                if ( !isset( $this->extLBs[$cluster] ) ) {
                        $this->extLBs[$cluster] = $this->newExternalLB( $cluster, $wiki );
                        $this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
+                       $this->chronProt->initLB( $this->extLBs[$cluster] );
                }
                return $this->extLBs[$cluster];
        }
@@ -296,6 +297,9 @@ class LBFactory_Multi extends LBFactory {
                foreach ( $this->mainLBs as $lb ) {
                        $this->chronProt->shutdownLB( $lb );
                }
+               foreach ( $this->extLBs as $extLB ) {
+                       $this->chronProt->shutdownLB( $extLB );
+               }
                $this->chronProt->shutdown();
                $this->commitMasterChanges();
        }
index d03a5be..8ee2b82 100644 (file)
@@ -223,33 +223,6 @@ class DifferenceEngine extends ContextSource {
                        throw new PermissionsError( 'read', $permErrors );
                }
 
-               # If external diffs are enabled both globally and for the user,
-               # we'll use the application/x-external-editor interface to call
-               # an external diff tool like kompare, kdiff3, etc.
-               if ( ExternalEdit::useExternalEngine( $this->getContext(), 'diff' ) ) {
-                       //TODO: come up with a good solution for non-text content here.
-                       //      at least, the content format needs to be passed to the client somehow.
-                       //      Currently, action=raw will just fail for non-text content.
-
-                       $urls = array(
-                               'File' => array( 'Extension' => 'wiki', 'URL' =>
-                                       # This should be mOldPage, but it may not be set, see below.
-                                       $this->mNewPage->getCanonicalURL( array(
-                                               'action' => 'raw', 'oldid' => $this->mOldid ) )
-                               ),
-                               'File2' => array( 'Extension' => 'wiki', 'URL' =>
-                                       $this->mNewPage->getCanonicalURL( array(
-                                               'action' => 'raw', 'oldid' => $this->mNewid ) )
-                               ),
-                       );
-
-                       $externalEditor = new ExternalEdit( $this->getContext(), $urls );
-                       $externalEditor->execute();
-
-                       wfProfileOut( __METHOD__ );
-                       return;
-               }
-
                $rollback = '';
                $undoLink = '';
 
@@ -392,8 +365,9 @@ class DifferenceEngine extends ContextSource {
 
                if ( $this->mNewRev->isDeleted( Revision::DELETED_TEXT ) ) {
                        $deleted = true; // new revisions text is hidden
-                       if ( $this->mNewRev->isDeleted( Revision::DELETED_RESTRICTED ) )
+                       if ( $this->mNewRev->isDeleted( Revision::DELETED_RESTRICTED ) ) {
                                $suppressed = true; // also suppressed
+                       }
                }
 
                # If the diff cannot be shown due to a deleted revision, then output
@@ -455,11 +429,11 @@ class DifferenceEngine extends ContextSource {
                                        $change = RecentChange::newFromConds(
                                                array(
                                                // Redundant user,timestamp condition so we can use the existing index
-                                                       'rc_user_text'  => $this->mNewRev->getRawUserText(),
-                                                       'rc_timestamp'  => $db->timestamp( $this->mNewRev->getTimestamp() ),
+                                                       'rc_user_text' => $this->mNewRev->getRawUserText(),
+                                                       'rc_timestamp' => $db->timestamp( $this->mNewRev->getTimestamp() ),
                                                        'rc_this_oldid' => $this->mNewid,
                                                        'rc_last_oldid' => $this->mOldid,
-                                                       'rc_patrolled'  => 0
+                                                       'rc_patrolled' => 0
                                                ),
                                                __METHOD__
                                        );
@@ -540,9 +514,9 @@ class DifferenceEngine extends ContextSource {
                                        $txt = $po ? $po->getText() : '';
                                        $out->addHTML( $txt );
                                }
-                       } elseif( !wfRunHooks( 'ArticleContentViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
+                       } elseif ( !wfRunHooks( 'ArticleContentViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
                                // Handled by extension
-                       } elseif( !ContentHandler::runLegacyHooks( 'ArticleViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
+                       } elseif ( !ContentHandler::runLegacyHooks( 'ArticleViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
                                // NOTE: deprecated hook, B/C only
                                // Handled by extension
                        } else {
@@ -571,7 +545,7 @@ class DifferenceEngine extends ContextSource {
                                                # Show categories etc.
                                                $out->addParserOutputNoText( $parserOutput );
                                        }
-                               } else if ( $parserOutput ) {
+                               } elseif ( $parserOutput ) {
                                        $out->addParserOutput( $parserOutput );
                                }
                        }
@@ -888,7 +862,9 @@ class DifferenceEngine extends ContextSource {
        }
 
        function localiseLineNumbersCb( $matches ) {
-               if ( $matches[1] === '1' && $this->mReducedLineNumbers ) return '';
+               if ( $matches[1] === '1' && $this->mReducedLineNumbers ) {
+                       return '';
+               }
                return $this->msg( 'lineno' )->numParams( $matches[1] )->escaped();
        }
 
index 196e7f2..46a863f 100644 (file)
@@ -64,7 +64,7 @@ class ExternalStoreDB extends ExternalStoreMedium {
                        __METHOD__ );
                $id = $dbw->insertId();
                if ( !$id ) {
-                       throw new MWException( __METHOD__.': no insert ID' );
+                       throw new MWException( __METHOD__ . ': no insert ID' );
                }
                if ( $dbw->getFlag( DBO_TRX ) ) {
                        $dbw->commit( __METHOD__ );
index 18a59fa..6d142b9 100644 (file)
@@ -1417,7 +1417,13 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * Like resolveStoragePath() except null values are returned if
-        * the container is sharded and the shard could not be determined.
+        * the container is sharded and the shard could not be determined
+        * or if the path ends with '/'. The later case is illegal for FS
+        * backends and can confuse listings for object store backends.
+        *
+        * This function is used when resolving paths that must be valid
+        * locations for files. Directory and listing functions should
+        * generally just use resolveStoragePath() instead.
         *
         * @see FileBackendStore::resolveStoragePath()
         *
@@ -1426,7 +1432,7 @@ abstract class FileBackendStore extends FileBackend {
         */
        final protected function resolveStoragePathReal( $storagePath ) {
                list( $container, $relPath, $cShard ) = $this->resolveStoragePath( $storagePath );
-               if ( $cShard !== null ) {
+               if ( $cShard !== null && substr( $relPath, -1 ) !== '/' ) {
                        return array( $container, $relPath );
                }
                return array( null, null );
@@ -1575,10 +1581,11 @@ abstract class FileBackendStore extends FileBackend {
         * Set the cached info for a container
         *
         * @param string $container Resolved container name
-        * @param $val mixed Information to cache
+        * @param array $val Information to cache
+        * @return void
         */
-       final protected function setContainerCache( $container, $val ) {
-               $this->memCache->add( $this->containerCacheKey( $container ), $val, 14*86400 );
+       final protected function setContainerCache( $container, array $val ) {
+               $this->memCache->add( $this->containerCacheKey( $container ), $val, 14 * 86400 );
        }
 
        /**
@@ -1586,6 +1593,7 @@ 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 ) ) {
@@ -1666,14 +1674,17 @@ abstract class FileBackendStore extends FileBackend {
         * salting for the case when a file is created at a path were there was none before.
         *
         * @param string $path Storage path
-        * @param $val mixed Information to cache
+        * @param array $val Stat information to cache
+        * @return void
         */
-       final protected function setFileCache( $path, $val ) {
+       final protected function setFileCache( $path, array $val ) {
                $path = FileBackend::normalizeStoragePath( $path );
                if ( $path === null ) {
                        return; // invalid storage path
                }
-               $this->memCache->add( $this->fileCacheKey( $path ), $val, 7*86400 );
+               $age = time() - wfTimestamp( TS_UNIX, $val['mtime'] );
+               $ttl = min( 7 * 86400, max( 300, floor( .1 * $age ) ) );
+               $this->memCache->add( $this->fileCacheKey( $path ), $val, $ttl );
        }
 
        /**
@@ -1683,6 +1694,7 @@ 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 );
@@ -1798,21 +1810,15 @@ abstract class FileBackendStoreOpHandle {
  *
  * @ingroup FileBackend
  */
-abstract class FileBackendStoreShardListIterator implements Iterator {
+abstract class FileBackendStoreShardListIterator extends FilterIterator {
        /** @var FileBackendStore */
        protected $backend;
        /** @var Array */
        protected $params;
-       /** @var Array */
-       protected $shardSuffixes;
+
        protected $container; // string; full container name
        protected $directory; // string; resolved relative path
 
-       /** @var Traversable */
-       protected $iter;
-       protected $curShard = 0; // integer
-       protected $pos = 0; // integer
-
        /** @var Array */
        protected $multiShardPaths = array(); // (rel path => 1)
 
@@ -1829,142 +1835,56 @@ abstract class FileBackendStoreShardListIterator implements Iterator {
                $this->backend = $backend;
                $this->container = $container;
                $this->directory = $dir;
-               $this->shardSuffixes = $suffixes;
                $this->params = $params;
-       }
 
-       /**
-        * @see Iterator::key()
-        * @return integer
-        */
-       public function key() {
-               return $this->pos;
-       }
-
-       /**
-        * @see Iterator::valid()
-        * @return bool
-        */
-       public function valid() {
-               if ( $this->iter instanceof Iterator ) {
-                       return $this->iter->valid();
-               } elseif ( is_array( $this->iter ) ) {
-                       return ( current( $this->iter ) !== false ); // no paths can have this value
+               $iter = new AppendIterator();
+               foreach ( $suffixes as $suffix ) {
+                       $iter->append( $this->listFromShard( $this->container . $suffix ) );
                }
-               return false; // some failure?
-       }
 
-       /**
-        * @see Iterator::current()
-        * @return string|bool String or false
-        */
-       public function current() {
-               return ( $this->iter instanceof Iterator )
-                       ? $this->iter->current()
-                       : current( $this->iter );
-       }
-
-       /**
-        * @see Iterator::next()
-        * @return void
-        */
-       public function next() {
-               ++$this->pos;
-               ( $this->iter instanceof Iterator ) ? $this->iter->next() : next( $this->iter );
-               do {
-                       $continue = false; // keep scanning shards?
-                       $this->filterViaNext(); // filter out duplicates
-                       // Find the next non-empty shard if no elements are left
-                       if ( !$this->valid() ) {
-                               $this->nextShardIteratorIfNotValid();
-                               $continue = $this->valid(); // re-filter unless we ran out of shards
-                       }
-               } while ( $continue );
+               parent::__construct( $iter );
        }
 
-       /**
-        * @see Iterator::rewind()
-        * @return void
-        */
-       public function rewind() {
-               $this->pos = 0;
-               $this->curShard = 0;
-               $this->setIteratorFromCurrentShard();
-               do {
-                       $continue = false; // keep scanning shards?
-                       $this->filterViaNext(); // filter out duplicates
-                       // Find the next non-empty shard if no elements are left
-                       if ( !$this->valid() ) {
-                               $this->nextShardIteratorIfNotValid();
-                               $continue = $this->valid(); // re-filter unless we ran out of shards
-                       }
-               } while ( $continue );
-       }
-
-       /**
-        * Filter out duplicate items by advancing to the next ones
-        */
-       protected function filterViaNext() {
-               while ( $this->valid() ) {
-                       $rel = $this->iter->current(); // path relative to given directory
-                       $path = $this->params['dir'] . "/{$rel}"; // full storage path
-                       if ( $this->backend->isSingleShardPathInternal( $path ) ) {
-                               break; // path is only on one shard; no issue with duplicates
-                       } elseif ( isset( $this->multiShardPaths[$rel] ) ) {
-                               // Don't keep listing paths that are on multiple shards
-                               ( $this->iter instanceof Iterator ) ? $this->iter->next() : next( $this->iter );
-                       } else {
-                               $this->multiShardPaths[$rel] = 1;
-                               break;
-                       }
-               }
-       }
-
-       /**
-        * If the list iterator for this container shard is out of items,
-        * then move on to the next container that has items.
-        * If there are none, then it advances to the last container.
-        */
-       protected function nextShardIteratorIfNotValid() {
-               while ( !$this->valid() && ++$this->curShard < count( $this->shardSuffixes ) ) {
-                       $this->setIteratorFromCurrentShard();
+       public function accept() {
+               $rel = $this->getInnerIterator()->current(); // path relative to given directory
+               $path = $this->params['dir'] . "/{$rel}"; // full storage path
+               if ( $this->backend->isSingleShardPathInternal( $path ) ) {
+                       return true; // path is only on one shard; no issue with duplicates
+               } elseif ( isset( $this->multiShardPaths[$rel] ) ) {
+                       // Don't keep listing paths that are on multiple shards
+                       return false;
+               } else {
+                       $this->multiShardPaths[$rel] = 1;
+                       return true;
                }
        }
 
-       /**
-        * Set the list iterator to that of the current container shard
-        */
-       protected function setIteratorFromCurrentShard() {
-               $this->iter = $this->listFromShard(
-                       $this->container . $this->shardSuffixes[$this->curShard],
-                       $this->directory, $this->params );
-               // Start loading results so that current() works
-               if ( $this->iter ) {
-                       ( $this->iter instanceof Iterator ) ? $this->iter->rewind() : reset( $this->iter );
-               }
+       public function rewind() {
+               parent::rewind();
+               $this->multiShardPaths = array();
        }
 
        /**
         * Get the list for a given container shard
         *
         * @param string $container Resolved container name
-        * @param string $dir Resolved path relative to container
-        * @param array $params
-        * @return Traversable|Array|null
+        * @return Iterator
         */
-       abstract protected function listFromShard( $container, $dir, array $params );
+       abstract protected function listFromShard( $container );
 }
 
 /**
  * Iterator for listing directories
  */
 class FileBackendStoreShardDirIterator extends FileBackendStoreShardListIterator {
-       /**
-        * @see FileBackendStoreShardListIterator::listFromShard()
-        * @return Array|null|Traversable
-        */
-       protected function listFromShard( $container, $dir, array $params ) {
-               return $this->backend->getDirectoryListInternal( $container, $dir, $params );
+       protected function listFromShard( $container ) {
+               $list = $this->backend->getDirectoryListInternal(
+                       $container, $this->directory, $this->params );
+               if ( $list === null ) {
+                       return new ArrayIterator( array() );
+               } else {
+                       return is_array( $list ) ? new ArrayIterator( $list ) : $list;
+               }
        }
 }
 
@@ -1972,11 +1892,13 @@ class FileBackendStoreShardDirIterator extends FileBackendStoreShardListIterator
  * Iterator for listing regular files
  */
 class FileBackendStoreShardFileIterator extends FileBackendStoreShardListIterator {
-       /**
-        * @see FileBackendStoreShardListIterator::listFromShard()
-        * @return Array|null|Traversable
-        */
-       protected function listFromShard( $container, $dir, array $params ) {
-               return $this->backend->getFileListInternal( $container, $dir, $params );
+       protected function listFromShard( $container ) {
+               $list = $this->backend->getFileListInternal(
+                       $container, $this->directory, $this->params );
+               if ( $list === null ) {
+                       return new ArrayIterator( array() );
+               } else {
+                       return is_array( $list ) ? new ArrayIterator( $list ) : $list;
+               }
        }
 }
index 2f7e256..00c0ff8 100644 (file)
@@ -132,7 +132,7 @@ class SwiftFileBackend extends FileBackendStore {
                        : false;
                $this->swiftCDNExpiry = isset( $config['swiftCDNExpiry'] )
                        ? $config['swiftCDNExpiry']
-                       : 12*3600; // 12 hours is safe (tokens last 24 hours per http://docs.openstack.org)
+                       : 12 * 3600; // 12 hours is safe (tokens last 24 hours per http://docs.openstack.org)
                $this->swiftCDNPurgable = isset( $config['swiftCDNPurgable'] )
                        ? $config['swiftCDNPurgable']
                        : true;
@@ -1397,12 +1397,12 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( is_array( $creds ) ) { // cache hit
                                $this->auth->load_cached_credentials(
                                        $creds['auth_token'], $creds['storage_url'], $creds['cdnm_url'] );
-                               $this->sessionStarted = time() - ceil( $this->authTTL/2 ); // skew for worst case
+                               $this->sessionStarted = time() - ceil( $this->authTTL / 2 ); // skew for worst case
                        } else { // cache miss
                                try {
                                        $this->auth->authenticate();
                                        $creds = $this->auth->export_credentials();
-                                       $this->srvCache->add( $cacheKey, $creds, ceil( $this->authTTL/2 ) ); // cache
+                                       $this->srvCache->add( $cacheKey, $creds, ceil( $this->authTTL / 2 ) ); // cache
                                        $this->sessionStarted = time();
                                } catch ( CloudFilesException $e ) {
                                        $this->connException = $e; // don't keep re-trying
index f534eff..9c778c7 100644 (file)
@@ -76,10 +76,10 @@ abstract class LockManager {
                if ( isset( $config['lockTTL'] ) ) {
                        $this->lockTTL = max( 1, $config['lockTTL'] );
                } elseif ( PHP_SAPI === 'cli' ) {
-                       $this->lockTTL = 2*3600;
+                       $this->lockTTL = 2 * 3600;
                } else {
                        $met = ini_get( 'max_execution_time' ); // this is 0 in CLI mode
-                       $this->lockTTL = max( 5*60, 2*(int)$met );
+                       $this->lockTTL = max( 5 * 60, 2 * (int)$met );
                }
        }
 
@@ -151,7 +151,7 @@ abstract class LockManager {
         *
         * @param array $paths List of storage paths
         * @param $type integer LockManager::LOCK_* constant
-        * @return string
+        * @return Status
         */
        abstract protected function doLock( array $paths, $type );
 
@@ -160,7 +160,7 @@ abstract class LockManager {
         *
         * @param array $paths List of storage paths
         * @param $type integer LockManager::LOCK_* constant
-        * @return string
+        * @return Status
         */
        abstract protected function doUnlock( array $paths, $type );
 }
index fafc588..757aeee 100644 (file)
@@ -145,7 +145,7 @@ class MemcLockManager extends QuorumLockManager {
                        foreach ( $paths as $path ) {
                                $locksKey = $this->recordKeyForPath( $path );
                                $locksHeld = $lockRecords[$locksKey];
-                               $ok = $memc->set( $locksKey, $locksHeld, 7*86400 );
+                               $ok = $memc->set( $locksKey, $locksHeld, 7 * 86400 );
                                if ( !$ok ) {
                                        $status->fatal( 'lockmanager-fail-acquirelock', $path );
                                } else {
@@ -297,7 +297,7 @@ class MemcLockManager extends QuorumLockManager {
                $start = microtime( true );
                do {
                        if ( ( ++$rounds % 4 ) == 0 ) {
-                               usleep( 1000*50 ); // 50 ms
+                               usleep( 1000 * 50 ); // 50 ms
                        }
                        foreach ( array_diff( $keys, $lockedKeys ) as $key ) {
                                if ( $memc->add( "$key:mutex", 1, 180 ) ) { // lock record
index b331b54..3b96ad6 100644 (file)
@@ -125,7 +125,7 @@ abstract class QuorumLockManager extends LockManager {
 
                $yesVotes = 0; // locks made on trustable servers
                $votesLeft = count( $this->srvsByBucket[$bucket] ); // remaining peers
-               $quorum = floor( $votesLeft/2 + 1 ); // simple majority
+               $quorum = floor( $votesLeft / 2 + 1 ); // simple majority
                // Get votes for each peer, in order, until we have enough...
                foreach ( $this->srvsByBucket[$bucket] as $lockSrv ) {
                        if ( !$this->isServerUp( $lockSrv ) ) {
diff --git a/includes/filebackend/lockmanager/RedisLockManager.php b/includes/filebackend/lockmanager/RedisLockManager.php
new file mode 100644 (file)
index 0000000..e8e5996
--- /dev/null
@@ -0,0 +1,255 @@
+<?php
+/**
+ * Version of LockManager based on using redis servers.
+ *
+ * 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 LockManager
+ */
+
+/**
+ * Manage locks using redis servers.
+ *
+ * Version of LockManager based on using redis servers.
+ * This is meant for multi-wiki systems that may share files.
+ * All locks are non-blocking, which avoids deadlocks.
+ *
+ * All lock requests for a resource, identified by a hash string, will map to one
+ * bucket. Each bucket maps to one or several peer servers, each running redis.
+ * A majority of peers must agree for a lock to be acquired.
+ *
+ * This class requires Redis 2.6 as it makes use Lua scripts for fast atomic operations.
+ *
+ * @ingroup LockManager
+ * @since 1.22
+ */
+class RedisLockManager extends QuorumLockManager {
+       /** @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 RedisConnectionPool */
+       protected $redisPool;
+       /** @var Array Map server names to hostname/IP and port numbers */
+       protected $lockServers = array();
+
+       protected $session = ''; // string; random UUID
+
+       /**
+        * Construct a new instance from configuration.
+        *
+        * $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.
+        *   - redisConfig  : Configuration for RedisConnectionPool::__construct().
+        *
+        * @param Array $config
+        * @throws MWException
+        */
+       public function __construct( array $config ) {
+               parent::__construct( $config );
+
+               $this->lockServers = $config['lockServers'];
+               // Sanitize srvsByBucket config to prevent PHP errors
+               $this->srvsByBucket = array_filter( $config['srvsByBucket'], 'is_array' );
+               $this->srvsByBucket = array_values( $this->srvsByBucket ); // consecutive
+
+               $config['redisConfig']['serializer'] = 'none';
+               $this->redisPool = RedisConnectionPool::singleton( $config['redisConfig'] );
+
+               $this->session = wfRandomString( 32 );
+       }
+
+       protected function getLocksOnServer( $lockSrv, array $paths, $type ) {
+               $status = Status::newGood();
+
+               $server = $this->lockServers[$lockSrv];
+               $conn = $this->redisPool->getConnection( $server );
+               if ( !$conn ) {
+                       foreach ( $paths as $path ) {
+                               $status->fatal( 'lockmanager-fail-acquirelock', $path );
+                       }
+                       return $status;
+               }
+
+               $keys = array_map( array( $this, 'recordKeyForPath' ), $paths ); // lock records
+
+               try {
+                       static $script =
+<<<LUA
+                       if ARGV[1] ~= 'EX' and ARGV[1] ~= 'SH' then
+                               return redis.error_reply('Unrecognized lock type given (must be EX or SH)')
+                       end
+                       local failed = {}
+                       -- Check that all the locks can be acquired
+                       for i,resourceKey in ipairs(KEYS) do
+                               local keyIsFree = true
+                               local currentLocks = redis.call('hKeys',resourceKey)
+                               for i,lockKey in ipairs(currentLocks) do
+                                       local _, _, type, session = string.find(lockKey,"(%w+):(%w+)")
+                                       -- Check any locks that are not owned by this session
+                                       if session ~= ARGV[2] then
+                                               local lockTimestamp = redis.call('hGet',resourceKey,lockKey)
+                                               if 1*lockTimestamp < ( ARGV[4] - ARGV[3] ) then
+                                                       -- Lock is stale, so just prune it out
+                                                       redis.call('hDel',resourceKey,lockKey)
+                                               elseif ARGV[1] == 'EX' or type == 'EX' then
+                                                       keyIsFree = false
+                                                       break
+                                               end
+                                       end
+                               end
+                               if not keyIsFree then
+                                       failed[#failed+1] = resourceKey
+                               end
+                       end
+                       -- If all locks could be acquired, then do so
+                       if #failed == 0 then
+                               for i,resourceKey in ipairs(KEYS) do
+                                       redis.call('hSet',resourceKey,ARGV[1] .. ':' .. ARGV[2],ARGV[4])
+                                       -- In addition to invalidation logic, be sure to garbage collect
+                                       redis.call('expire',resourceKey,ARGV[3])
+                               end
+                       end
+                       return failed
+LUA;
+                       $res = $conn->luaEval( $script,
+                               array_merge(
+                                       $keys, // KEYS[0], KEYS[1],...KEYS[N]
+                                       array(
+                                               $type === self::LOCK_SH ? 'SH' : 'EX', // ARGV[1]
+                                               $this->session, // ARGV[2]
+                                               $this->lockTTL, // ARGV[3]
+                                               time() // ARGV[4]
+                                       )
+                               ),
+                               count( $keys ) # number of first argument(s) that are keys
+                       );
+               } catch ( RedisException $e ) {
+                       $res = false;
+                       $this->redisPool->handleException( $server, $conn, $e );
+               }
+
+               if ( $res === false ) {
+                       foreach ( $paths as $path ) {
+                               $status->fatal( 'lockmanager-fail-acquirelock', $path );
+                       }
+               } else {
+                       $pathsByKey = array_combine( $keys, $paths );
+                       foreach ( $res as $key ) {
+                               $status->fatal( 'lockmanager-fail-acquirelock', $pathsByKey[$key] );
+                       }
+               }
+
+               return $status;
+       }
+
+       protected function freeLocksOnServer( $lockSrv, array $paths, $type ) {
+               $status = Status::newGood();
+
+               $server = $this->lockServers[$lockSrv];
+               $conn = $this->redisPool->getConnection( $server );
+               if ( !$conn ) {
+                       foreach ( $paths as $path ) {
+                               $status->fatal( 'lockmanager-fail-releaselock', $path );
+                       }
+                       return $status;
+               }
+
+               $keys = array_map( array( $this, 'recordKeyForPath' ), $paths ); // lock records
+
+               try {
+                       static $script =
+<<<LUA
+                       if ARGV[1] ~= 'EX' and ARGV[1] ~= 'SH' then
+                               return redis.error_reply('Unrecognized lock type given (must be EX or SH)')
+                       end
+                       local failed = {}
+                       for i,resourceKey in ipairs(KEYS) do
+                               local released = redis.call('hDel',resourceKey,ARGV[1] .. ':' .. ARGV[2])
+                               if released > 0 then
+                                       -- Remove the whole structure if it is now empty
+                                       if redis.call('hLen',resourceKey) == 0 then
+                                               redis.call('del',resourceKey)
+                                       end
+                               else
+                                       failed[#failed+1] = resourceKey
+                               end
+                       end
+                       return failed
+LUA;
+                       $res = $conn->luaEval( $script,
+                               array_merge(
+                                       $keys, // KEYS[0], KEYS[1],...KEYS[N]
+                                       array(
+                                               $type === self::LOCK_SH ? 'SH' : 'EX', // ARGV[1]
+                                               $this->session // ARGV[2]
+                                       )
+                               ),
+                               count( $keys ) # number of first argument(s) that are keys
+                       );
+               } catch ( RedisException $e ) {
+                       $res = false;
+                       $this->redisPool->handleException( $server, $conn, $e );
+               }
+
+               if ( $res === false ) {
+                       foreach ( $paths as $path ) {
+                               $status->fatal( 'lockmanager-fail-releaselock', $path );
+                       }
+               } else {
+                       $pathsByKey = array_combine( $keys, $paths );
+                       foreach ( $res as $key ) {
+                               $status->fatal( 'lockmanager-fail-releaselock', $pathsByKey[$key] );
+                       }
+               }
+
+               return $status;
+       }
+
+       protected function releaseAllLocks() {
+               return Status::newGood(); // not supported
+       }
+
+       protected function isServerUp( $lockSrv ) {
+               return (bool)$this->redisPool->getConnection( $this->lockServers[$lockSrv] );
+       }
+
+       /**
+        * @param $path string
+        * @return string
+        */
+       protected function recordKeyForPath( $path ) {
+               return implode( ':', array( __CLASS__, 'locks', $this->sha1Base36Absolute( $path ) ) );
+       }
+
+       /**
+        * Make sure remaining locks get cleared for sanity
+        */
+       function __destruct() {
+               while ( count( $this->locksHeld ) ) {
+                       foreach ( $this->locksHeld as $path => $locks ) {
+                               $this->doUnlock( array( $path ), self::LOCK_EX );
+                               $this->doUnlock( array( $path ), self::LOCK_SH );
+                       }
+               }
+       }
+}
index 366dd8a..0e30017 100644 (file)
@@ -259,19 +259,19 @@ class FileRepo {
         */
        public function resolveVirtualUrl( $url ) {
                if ( substr( $url, 0, 9 ) != 'mwrepo://' ) {
-                       throw new MWException( __METHOD__.': unknown protocol' );
+                       throw new MWException( __METHOD__ . ': unknown protocol' );
                }
                $bits = explode( '/', substr( $url, 9 ), 3 );
                if ( count( $bits ) != 3 ) {
-                       throw new MWException( __METHOD__.": invalid mwrepo URL: $url" );
+                       throw new MWException( __METHOD__ . ": invalid mwrepo URL: $url" );
                }
                list( $repo, $zone, $rel ) = $bits;
                if ( $repo !== $this->name ) {
-                       throw new MWException( __METHOD__.": fetching from a foreign repo is not supported" );
+                       throw new MWException( __METHOD__ . ": fetching from a foreign repo is not supported" );
                }
                $base = $this->getZonePath( $zone );
                if ( !$base ) {
-                       throw new MWException( __METHOD__.": invalid zone: $zone" );
+                       throw new MWException( __METHOD__ . ": invalid zone: $zone" );
                }
                return $base . '/' . rawurldecode( $rel );
        }
@@ -987,7 +987,7 @@ class FileRepo {
 
                $temp = $this->getVirtualUrl( 'temp' );
                if ( substr( $virtualUrl, 0, strlen( $temp ) ) != $temp ) {
-                       wfDebug( __METHOD__.": Invalid temp virtual URL\n" );
+                       wfDebug( __METHOD__ . ": Invalid temp virtual URL\n" );
                        return false;
                }
 
@@ -1306,9 +1306,9 @@ class FileRepo {
                foreach ( $sourceDestPairs as $pair ) {
                        list( $srcRel, $archiveRel ) = $pair;
                        if ( !$this->validateFilename( $srcRel ) ) {
-                               throw new MWException( __METHOD__.':Validation error in $srcRel' );
+                               throw new MWException( __METHOD__ . ':Validation error in $srcRel' );
                        } elseif ( !$this->validateFilename( $archiveRel ) ) {
-                               throw new MWException( __METHOD__.':Validation error in $archiveRel' );
+                               throw new MWException( __METHOD__ . ':Validation error in $archiveRel' );
                        }
 
                        $publicRoot = $this->getZonePath( 'public' );
index be11b23..d017e13 100644 (file)
@@ -47,7 +47,7 @@ class LocalRepo extends FileRepo {
                } elseif ( isset( $row->oi_name ) ) {
                        return call_user_func( $this->oldFileFromRowFactory, $row, $this );
                } else {
-                       throw new MWException( __METHOD__.': invalid row' );
+                       throw new MWException( __METHOD__ . ': invalid row' );
                }
        }
 
@@ -281,17 +281,17 @@ class LocalRepo extends FileRepo {
                return $result;
        }
 
-       /**\r
-        * Return an array of files where the name starts with $prefix.\r
-        *\r
-        * @param string $prefix The prefix to search for\r
-        * @param int $limit The maximum amount of files to return\r
-        * @return array\r
-        */\r
+       /**
+        * Return an array of files where the name starts with $prefix.
+        *
+        * @param string $prefix The prefix to search for
+        * @param int $limit The maximum amount of files to return
+        * @return array
+        */
        public function findFilesByPrefix( $prefix, $limit ) {
                $selectOptions = array( 'ORDER BY' => 'img_name', 'LIMIT' => intval( $limit ) );
 
-               // Query database\r
+               // Query database
                $dbr = $this->getSlaveDB();
                $res = $dbr->select(
                        'image',
@@ -306,7 +306,7 @@ class LocalRepo extends FileRepo {
                foreach ( $res as $row ) {
                        $files[] = $this->newFileFromRow( $row );
                }
-               return $files;\r
+               return $files;
        }
 
        /**
index d72755a..255da17 100644 (file)
@@ -737,7 +737,7 @@ abstract class File {
                        if ( $this->repo ) {
                                $script = $this->repo->getThumbScriptUrl();
                                if ( $script ) {
-                                       $this->transformScript = "$script?f=" . urlencode( $this->getName() );
+                                       $this->transformScript = wfAppendQuery( $script, array( 'f' => $this->getName() ) );
                                }
                        }
                }
@@ -1096,7 +1096,7 @@ abstract class File {
         *
         * @return array
         */
-       function getHistory( $limit = null, $start = null, $end = null, $inc=true ) {
+       function getHistory( $limit = null, $start = null, $end = null, $inc = true ) {
                return array();
        }
 
index f8887cc..b481e83 100644 (file)
@@ -1406,7 +1406,7 @@ class LocalFile extends File {
 
                $this->lock(); // begin
 
-               $archiveName = wfTimestamp( TS_MW ) . '!'. $this->getName();
+               $archiveName = wfTimestamp( TS_MW ) . '!' . $this->getName();
                $archiveRel = 'archive/' . $this->getHashPath() . $archiveName;
                $flags = $flags & File::DELETE_SOURCE ? LocalRepo::DELETE_SOURCE : 0;
                $status = $this->repo->publish( $srcPath, $dstRel, $archiveRel, $flags, $options );
index f525319..371306f 100644 (file)
@@ -157,7 +157,7 @@ abstract class DatabaseUpdater {
         */
        public static function newForDB( &$db, $shared = false, $maintenance = null ) {
                $type = $db->getType();
-               if( in_array( $type, Installer::getDBTypes() ) ) {
+               if ( in_array( $type, Installer::getDBTypes() ) ) {
                        $class = ucfirst( $type ) . 'Updater';
                        return new $class( $db, $shared, $maintenance );
                } else {
@@ -184,7 +184,7 @@ abstract class DatabaseUpdater {
                        return;
                }
                global $wgCommandLineMode;
-               if( !$wgCommandLineMode ) {
+               if ( !$wgCommandLineMode ) {
                        $str = htmlspecialchars( $str );
                }
                echo $str;
@@ -357,7 +357,7 @@ abstract class DatabaseUpdater {
                $updates = $this->updatesSkipped;
                $this->updatesSkipped = array();
 
-               foreach( $updates as $funcList ) {
+               foreach ( $updates as $funcList ) {
                        $func = $funcList[0];
                        $arg = $funcList[1];
                        $origParams = $funcList[2];
@@ -400,7 +400,7 @@ abstract class DatabaseUpdater {
 
                $this->setAppliedUpdates( $wgVersion, $this->updates );
 
-               if( $this->fileHandle ) {
+               if ( $this->fileHandle ) {
                        $this->skipSchema = false;
                        $this->writeSchemaUpdateFile();
                        $this->setAppliedUpdates( "$wgVersion-schema", $this->updatesSkipped );
@@ -422,14 +422,14 @@ abstract class DatabaseUpdater {
                foreach ( $updates as $params ) {
                        $origParams = $params;
                        $func = array_shift( $params );
-                       if( !is_array( $func ) && method_exists( $this, $func ) ) {
+                       if ( !is_array( $func ) && method_exists( $this, $func ) ) {
                                $func = array( $this, $func );
                        } elseif ( $passSelf ) {
                                array_unshift( $params, $this );
                        }
                        $ret = call_user_func_array( $func, $params );
                        flush();
-                       if( $ret !== false ) {
+                       if ( $ret !== false ) {
                                $updatesDone[] = $origParams;
                        } else {
                                $updatesSkipped[] = array( $func, $params, $origParams );
@@ -445,7 +445,7 @@ abstract class DatabaseUpdater {
         */
        protected function setAppliedUpdates( $version, $updates = array() ) {
                $this->db->clearFlag( DBO_DDLMODE );
-               if( !$this->canUseNewUpdatelog() ) {
+               if ( !$this->canUseNewUpdatelog() ) {
                        return;
                }
                $key = "updatelist-$version-" . time();
@@ -483,7 +483,7 @@ abstract class DatabaseUpdater {
        public function insertUpdateRow( $key, $val = null ) {
                $this->db->clearFlag( DBO_DDLMODE );
                $values = array( 'ul_key' => $key );
-               if( $val && $this->canUseNewUpdatelog() ) {
+               if ( $val && $this->canUseNewUpdatelog() ) {
                        $values['ul_value'] = $val;
                }
                $this->db->insert( 'updatelog', $values, __METHOD__, 'IGNORE' );
@@ -600,7 +600,7 @@ abstract class DatabaseUpdater {
         */
        public function appendLine( $line ) {
                $line = rtrim( $line ) . ";\n";
-               if( fwrite( $this->fileHandle, $line ) === false ) {
+               if ( fwrite( $this->fileHandle, $line ) === false ) {
                        throw new MWException( "trouble writing file" );
                }
                return false;
@@ -628,7 +628,7 @@ abstract class DatabaseUpdater {
                if ( !$isFullPath ) {
                        $path = $this->db->patchPath( $path );
                }
-               if( $this->fileHandle !== null ) {
+               if ( $this->fileHandle !== null ) {
                        $this->copyFile( $path );
                } else {
                        $this->db->sourceFile( $path );
@@ -698,7 +698,7 @@ abstract class DatabaseUpdater {
 
                if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
                        $this->output( "...skipping: '$table' table doesn't exist yet.\n" );
-               } else if ( $this->db->indexExists( $table, $index, __METHOD__ ) ) {
+               } elseif ( $this->db->indexExists( $table, $index, __METHOD__ ) ) {
                        $this->output( "...index $index already set on $table table.\n" );
                } else {
                        return $this->applyPatch( $patch, $fullpath, "Adding index $index to table $table" );
@@ -844,7 +844,7 @@ abstract class DatabaseUpdater {
                        $this->output( "...$table table does not exist, skipping modify field patch.\n" );
                } elseif ( !$this->db->fieldExists( $table, $field, __METHOD__ ) ) {
                        $this->output( "...$field field does not exist in $table table, skipping modify field patch.\n" );
-               } elseif( $this->updateRowExists( $updateKey ) ) {
+               } elseif ( $this->updateRowExists( $updateKey ) ) {
                        $this->output( "...$field in table $table already modified by patch $patch.\n" );
                } else {
                        $this->insertUpdateRow( $updateKey );
@@ -978,7 +978,7 @@ abstract class DatabaseUpdater {
         * Migrates user options from the user table blob to user_properties
         */
        protected function doMigrateUserOptions() {
-               if( $this->db->tableExists( 'user_properties' ) ) {
+               if ( $this->db->tableExists( 'user_properties' ) ) {
                        $cl = $this->maintenance->runChild( 'ConvertUserOptions', 'convertUserOptions.php' );
                        $cl->execute();
                        $this->output( "done.\n" );
index cd6d508..3a9d82d 100644 (file)
@@ -142,6 +142,8 @@ Object caching is not enabled.",
        'config-mod-security'             => "'''Warning:''' Your web server has [http://modsecurity.org/ mod_security] enabled. If misconfigured, it can cause problems for MediaWiki or other software that allows users to post arbitrary content.
 Refer to [http://modsecurity.org/documentation/ mod_security documentation] or contact your host's support if you encounter random errors.",
        'config-diff3-bad'                => 'GNU diff3 not found.',
+       'config-git'                      => 'Found the Git version control software: <code>$1</code>.',
+       'config-git-bad'                  => 'Git version control software not found.',
        'config-imagemagick'              => 'Found ImageMagick: <code>$1</code>.
 Image thumbnailing will be enabled if you enable uploads.',
        'config-gd'                       => 'Found GD graphics library built-in.
@@ -455,7 +457,7 @@ Ideally, this should not be accessible from the web.',
        'config-logo-help'                => "MediaWiki's default skin includes space for a 135x160 pixel logo above the sidebar menu.
 Upload an image of the appropriate size, and enter the URL here.
 
-You can use \$wgStylePath or \$wgScriptPath if your logo is relative to those paths.
+You can use <code>\$wgStylePath</code> or <code>\$wgScriptPath</code> if your logo is relative to those paths.
 
 If you do not want a logo, leave this box blank.",
        'config-instantcommons'           => 'Enable Instant Commons',
@@ -647,6 +649,10 @@ Parameters:
        'config-xcache' => 'Message indicates if this program is available',
        'config-apc' => 'Message indicates if this program is available',
        'config-wincache' => 'Message indicates if this program is available',
+       'config-git' => 'Message if Git version control software is available.
+Parameter:
+* $1 is the <code>Git</code> executable file name.',
+       'config-git-bad' => 'Message if Git version control software is not found.',
        'config-imagemagick' => '$1 is ImageMagick\'s <code>convert</code> executable file name.
 
 Add dir="ltr" to the <nowiki><code></nowiki> for right-to-left languages.',
@@ -3267,6 +3273,7 @@ $messages['crh-latn'] = array(
 
 /** Czech (česky)
  * @author Danny B.
+ * @author Jezevec
  * @author Mormegil
  * @author 아라
  */
@@ -3399,6 +3406,8 @@ Kešování objektů bude vypnuto.",
        'config-mod-security' => "'''Upozornění''': váš webový server má zapnuto [http://modsecurity.org/ mod_security]. Při chybné konfiguraci může způsobovat potíže MediaWiki či dalším programům, které umožňují ukládat libovolný obsah.
 Pokud narazíte na náhodné chyby, podívejte se do [http://modsecurity.org/documentation/ dokumentace mod_security] nebo kontaktujte technickou podporu vašeho poskytovatele.",
        'config-diff3-bad' => 'Nebyl nalezen GNU diff3.',
+       'config-git' => 'Nalezen software pro správu verzí Git: <code>$1</code>.',
+       'config-git-bad' => 'Software pro správu verzí Git nebyl nalezen.',
        'config-imagemagick' => 'Nalezen ImageMagick: <code>$1</code>.
 Pokud povolíte načítání souborů, bude zapnuto vytváření náhledů.',
        'config-gd' => 'Nalezena vestavěná grafická knihovna GD.
@@ -3710,7 +3719,7 @@ Tento adresář by ideálně neměl být dostupný z webu.',
        'config-logo-help' => 'Základní vzhled MediaWiki zahrnuje místo pro logo o velikosti 135×160 pixelů nad bočním menu.
 Načtěte obrázek odpovídající velikosti a zadejte sem jeho URL.
 
-Pokud je vaše logo umístěno relativně vůči $wgStylePath nebo $wgScriptPath, můžete zde tyto proměnné použít.
+Pokud je vaše logo umístěno relativně vůči <code>$wgStylePath</code> nebo <code>$wgScriptPath</code>, můžete zde tyto proměnné použít.
 
 Pokud logo nechcete, ponechte toto pole prázdné.',
        'config-instantcommons' => 'Zapnout Instant Commons',
@@ -3862,6 +3871,7 @@ $messages['da'] = array(
 );
 
 /** German (Deutsch)
+ * @author Geitost
  * @author Kghbln
  * @author LWChris
  * @author Metalhead64
@@ -4002,6 +4012,8 @@ Das Objektcaching kann daher nicht aktiviert werden.",
        'config-mod-security' => "'''Warnung:''' Auf dem Webserver wurde [http://modsecurity.org/ ModSecurity] aktiviert. Sofern falsch konfiguriert, kann dies zu Problemen mit MediaWiki sowie anderer Software auf dem Server führen und es Benutzern ermöglichen beliebige Inhalte im Wiki einzustellen.
 Für weitere Informationen empfehlen wir die [http://modsecurity.org/documentation/ Dokumentation zu ModSecurity] oder den Kontakt zum Hoster, sofern Fehler auftreten.",
        'config-diff3-bad' => 'GNU diff3 wurde nicht gefunden.',
+       'config-git' => 'Die Git-Versionsverwaltungssoftware wurde gefunden: <code>$1</code>.',
+       'config-git-bad' => 'Die Git-Versionsverwaltungssoftware wurde nicht gefunden.',
        'config-imagemagick' => 'ImageMagick wurde gefunden: <code>$1</code>.
 Miniaturansichten von Bildern werden möglich sein, sobald das Hochladen von Dateien aktiviert wurde.',
        'config-gd' => 'Die im System integrierte GD-Grafikbibliothek wurde gefunden.
@@ -4086,12 +4098,12 @@ Nur Änderungen daran vornehmen, sofern es gute Gründe dafür gibt.',
 
 Das für sie vorgesehene Verzeichnis muss während des Installationsvorgangs beschreibbar sein.
 
-Es sollte '''nicht'' über das Web zugänglich sein, was der Grund ist, warum die Datei nicht dort abgelegt wird, wo sich die PHP-Dateien befinden.
+Es sollte '''nicht''' über das Web zugänglich sein, was der Grund ist, warum die Datei nicht dort abgelegt wird, wo sich die PHP-Dateien befinden.
 
 Das Installationsprogramm wird mit der Datei zusammen eine zusätzliche <code>.htaccess</code>-Datei erstellen. Sofern dies scheitert, können Dritte auf die Datendatei zugreifen.
 Dies umfasst die Nutzerdaten (E-Mail-Adressen, Passwörter, etc.) wie auch gelöschte Seitenversionen und andere vertrauliche Daten, die im Wiki gespeichert sind.
 
-Es ist daher zu erwägen die Datendatei an gänzlich anderer Stelle abzulegen, beispielsweise im Verzeichnis <code>./var/lib/mediawiki/yourwiki</code>.",
+Es ist daher zu erwägen, die Datendatei an gänzlich anderer Stelle abzulegen, beispielsweise im Verzeichnis <code>./var/lib/mediawiki/yourwiki</code>.",
        'config-oracle-def-ts' => 'Standardtabellenraum:',
        'config-oracle-temp-ts' => 'Temporärer Tabellenraum:',
        'config-type-mysql' => 'MySQL',
@@ -4290,11 +4302,11 @@ Für den Fall, dass die E-Mail-Funktionen nicht benötigt werden, können sie hi
        'config-email-auth' => 'E-Mail-Authentifizierung ermöglichen',
        'config-email-auth-help' => "Sofern diese Funktion aktiviert ist, müssen Benutzer ihre E-Mail-Adresse bestätigen, indem sie den Bestätigungslink nutzen, der ihnen immer dann zugesandt wird, wenn sie ihre E-Mail-Adresse angeben oder ändern.
 Nur bestätigte E-Mail-Adressen können Nachrichten von anderen Benutzer oder Benachrichtigungsmitteilungen erhalten.
-Die Aktivierung dieser Funktion wird bei offenen Wikis, mit Hinblick auf möglichen Missbrauch der E-Mailfunktionen, '''empfohlen'''.",
+Die Aktivierung dieser Funktion wird bei offenen Wikis, mit Hinblick auf möglichen Missbrauch der E-Mail-Funktionen, '''empfohlen.'''",
        'config-email-sender' => 'E-Mail-Adresse für Antworten:',
        'config-email-sender-help' => 'Bitte hier die E-Mail-Adresse angeben, die als Absenderadresse bei ausgehenden E-Mails eingesetzt werden soll.
 Rücklaufende E-Mails werden an diese E-Mail-Adresse gesandt.
-Bei viele E-Mail-Servern muss der Teil der E-Mail-Adresse mit der Domainangabe korrekt sein.',
+Bei vielen E-Mail-Servern muss der Teil der E-Mail-Adresse mit der Domainangabe korrekt sein.',
        'config-upload-settings' => 'Hochladen von Bildern und Dateien',
        'config-upload-enable' => 'Das Hochladen von Dateien ermöglichen',
        'config-upload-help' => 'Das Hochladen von Dateien macht den Server für potentielle Sicherheitsprobleme anfällig.
@@ -4309,7 +4321,7 @@ Idealerweise sollte es nicht über das Internet zugänglich sein.',
        'config-logo-help' => 'Die Standardoberfläche von MediaWiki verfügt links oberhalb der Seitenleiste über Platz für ein Logo mit den Maßen 135x160 Pixel.
 Bitte ein Logo in entsprechender Größe hochladen und die zugehörige URL an dieser Stelle angeben.
 
-Du kannst $wgStylePath oder $wgScriptPath verwenden, falls dein Logo relativ zu diesen Pfaden ist.
+Du kannst <code>$wgStylePath</code> oder <code>$wgScriptPath</code> verwenden, falls dein Logo relativ zu diesen Pfaden ist.
 
 Sofern kein Logo benötigt wird, kann dieses Datenfeld leer bleiben.',
        'config-instantcommons' => '„InstantCommons“ aktivieren',
@@ -5458,6 +5470,7 @@ $messages['fa'] = array(
  * @author Crt
  * @author Nike
  * @author Olli
+ * @author Silvonen
  * @author Str4nd
  * @author VezonThunder
  * @author 아라
@@ -5553,6 +5566,7 @@ Asennus saattaa epäonnistua!",
        'config-db-install-help' => 'Anna käyttäjätunnus ja salasana, joita käytetään asennuksen aikana.',
        'config-db-account-lock' => 'Käytä samaa tunnusta ja salasanaa myös asennuksen jälkeen',
        'config-db-prefix' => 'Tietokantataulujen etuliite',
+       'config-db-charset' => 'Tietokannan merkistö',
        'config-charset-mysql5-binary' => 'MySQL 4.1/5.0, binääri',
        'config-charset-mysql5' => 'MySQL 4.1/5.0, UTF-8',
        'config-charset-mysql4' => 'MySQL 4.0, taaksepäin yhteensopiva UTF-8',
@@ -5800,6 +5814,8 @@ La mise en cache d'objets n'est pas activée.",
        'config-mod-security' => "'''Attention''': Votre serveur web a [http://modsecurity.org/ mod_security] activé. S&il est mal configuré, cela peut poser des problèmes à MediaWiki ou à d'autres applications qui permettent aux utilisateurs de publier un contenu quelconque.
 Reportez-vous à [http://modsecurity.org/documentation/ la documentation de mod_security] ou contactez le support de votre hébergeur si vous rencontrez des erreurs aléatoires.",
        'config-diff3-bad' => 'GNU diff3 introuvable.',
+       'config-git' => 'Logiciel de contrôle de version Git trouvé : <code>$1</code>.',
+       'config-git-bad' => 'Logiciel de contrôle de version Git non trouvé.',
        'config-imagemagick' => "ImageMagick trouvé : <code>$1</code>.
 La miniaturisation d'images sera activée si vous activez le téléversement de fichiers.",
        'config-gd' => "La bibliothèque graphique GD intégrée a été trouvée.
@@ -6101,7 +6117,7 @@ Idéalement, il ne devrait pas être accessible depuis le web.',
        'config-logo-help' => 'L’habillage par défaut de MediaWiki comprend l’espace pour un logo de 135x160 pixels au-dessus de la barre de menu latérale.
 Téléchargez une image de la taille appropriée, et entrez son URL ici.
 
-Vous pouvez utiliser $wgStylePath ou $wgScriptPath si votre logo est relatif à ces chemins.
+Vous pouvez utiliser <code>$wgStylePath</code> ou <code>$wgScriptPath</code> si votre logo est relatif à ces chemins.
 
 Si vous ne voulez pas de logo, laissez cette case vide.',
        'config-instantcommons' => "Activer ''InstantCommons''",
@@ -6610,6 +6626,8 @@ A caché de obxectos está desactivada.",
        'config-mod-security' => "'''Atención:''' O seu servidor web ten o [http://modsecurity.org/ mod_security] activado. Se estivese mal configurado, pode causar problemas a MediaWiki ou calquera outro software que permita aos usuarios publicar contidos arbitrarios.
 Olle a [http://modsecurity.org/documentation/ documentación do mod_security] ou póñase en contacto co soporte do seu servidor se atopa erros aleatorios.",
        'config-diff3-bad' => 'GNU diff3 non se atopou.',
+       'config-git' => 'Atopouse o software de control da versión de Git: <code>$1</code>.',
+       'config-git-bad' => 'Non se atopou o software de control da versión de Git.',
        'config-imagemagick' => 'ImageMagick atopado: <code>$1</code>.
 As miniaturas de imaxes estarán dispoñibles se activa as cargas.',
        'config-gd' => 'Atopouse a biblioteca gráfica GD integrada.
@@ -6919,7 +6937,7 @@ O ideal é que non sexa accesible desde a web.',
        'config-logo-help' => 'A aparencia de MediaWiki por defecto inclúe espazo para un logo de 135x160 píxeles por riba do menú lateral.
 Cargue unha imaxe do tamaño axeitado e introduza o enderezo URL aquí.
 
-Pode utilizar $wgStylePath ou $wgScriptPath se o seu logo está relacionado con esas rutas.
+Pode utilizar <code>$wgStylePath</code> ou <code>$wgScriptPath</code> se o seu logo está relacionado con esas rutas.
 
 Se non quere un logo, deixe esta caixa en branco.',
        'config-instantcommons' => 'Activar Instant Commons',
@@ -7158,6 +7176,7 @@ Miniaturaasichte vu Bilder sin megli, sobald s Uffelade vu Dateie aktiviert isch
 );
 
 /** Gujarati (ગુજરાતી)
+ * @author Ashok modhvadia
  * @author Dineshjk
  */
 $messages['gu'] = array(
@@ -7167,7 +7186,8 @@ $messages['gu'] = array(
 == શરૂઆતના તબક્કે ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings કોનફીગ્યુરેશન સેટીંગ્સની યાદી]
 * [//www.mediawiki.org/wiki/Manual:FAQ વારંવાર પુછાતા પ્રશ્નો]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce મિડીયાવિકિ રીલીઝ મેઇલીંગ લીસ્ટ]',
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce મિડીયાવિકિ રીલીઝ મેઇલીંગ લીસ્ટ]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localise MediaWiki for your language]',
 );
 
 /** Manx (Gaelg)
@@ -10247,6 +10267,8 @@ MediaWiki を正しく動作させるには、UTF-8 対応が必要です。",
        'config-no-cache' => "'''警告:''' [http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache]、[http://www.iis.net/download/WinCacheForPhp WinCache] のいずれも見つかりませんでした。
 オブジェクトのキャッシュは有効化されません。",
        'config-diff3-bad' => 'GNU diff3 が見つかりません。',
+       'config-git' => 'バージョン管理ソフトウェア Git が見つかりました: <code>$1</code>',
+       'config-git-bad' => 'バージョン管理ソフトウェア Git が見つかりません。',
        'config-imagemagick' => 'ImageMagickが見つかりました: <code>$1</code>。
 アップロードが有効であれば、画像のサムネイルを利用できます。',
        'config-gd' => 'GD画像ライブラリが内蔵されていることが確認されました。
@@ -10539,7 +10561,7 @@ GFDLは有効なライセンスですが、内容を理解するのは困難で
        'config-logo-help' => 'MediaWiki の既定の外装では、サイドバー上部に135x160ピクセルのロゴ用の余白があります。
 適切なサイズの画像をアップロードして、その URL をここに入力してください。
 
-ロゴが相対パスの場合は、$wgStylePath や $wgScriptPath を使用できます。
+ロゴが相対パスの場合は、<code>$wgStylePath</code> や <code>$wgScriptPath</code> を使用できます。
 
 ロゴが不要の場合は、この欄を空白のままにしてください。',
        'config-instantcommons' => 'Instant Commons 機能を有効にする',
@@ -11326,8 +11348,10 @@ GFDL 하에 사용을 허가한 내용을 재사용하는 것도 어렵습니다
        'config-upload-deleted-help' => '삭제된 파일을 보관할 디렉토리를 선택하세요.
 이상적으로 웹에서 접근할 수 없게 해야 합니다.',
        'config-logo' => '로고 URL:',
-       'config-logo-help' => '미디어위키의 기본 스킨은 사이드바 메뉴 위에 135×160 픽셀의 로고를 포함하고 있습니다.
-적당한 크기로 이미지를 올리고 URL을 여기에 입력하세요.
+       'config-logo-help' => '미디어위키의 기본 스킨은 사이드바 메뉴 위에 135×160 픽셀의 로고의 공간을 포함하고 있습니다.
+적당한 크기로 그림을 올리고 여기에 URL을 입력하세요.
+
+로고가 상대적인 경로에 있으면 <code>$wgStylePath</code>나 <code>$wgScriptPath</code>를 사용할 수 있습니다.
 
 로고 사용을 원하지 않으면 이 상자를 비우세요.',
        'config-instantcommons' => '인스턴트 공용 활성화',
@@ -12664,6 +12688,8 @@ $1
        'config-mod-security' => "'''Предупредување''': на вашиот опслужувач има овозможено [http://modsecurity.org/ mod_security]. Ако не е поставено како што треба, ова може да предизвика проблеми кај МедијаВики и други програми што им овозможуваат на корисниците да објавуваат произволни содржини.
 Погледнете ја [http://modsecurity.org/documentation/ mod_security документацијата] или обратете се кај домаќинот ако наидете на случајни грешки.",
        'config-diff3-bad' => 'GNU diff3 не е пронајден.',
+       'config-git' => 'Го пронајдов Git програмот за контрола на верзии: <code>$1</code>.',
+       'config-git-bad' => 'Не го пронајдов Git-програмот за контрола на верзии.',
        'config-imagemagick' => 'Пронајден е ImageMagick: <code>$1</code>.
 Ако овозможите подигање, тогаш ќе биде овозможена минијатуризација на сликите.',
        'config-gd' => 'Утврдив дека има вградена GD графичка библиотека.
@@ -12969,7 +12995,7 @@ chmod a+w $3</pre>',
        'config-logo' => 'URL за логото:',
        'config-logo-help' => 'Матичното руво на МедијаВики има простор за лого од 135x160 пиксели над страничната лента.
 
-Можете да употребите $wgStylePath или $wgScriptPath ако вашето лого е релативно на тие патеки.
+Можете да употребите <code>$wgStylePath</code> или <code>$wgScriptPath</code> ако вашето лого е релативно на тие патеки.
 
 Ако не сакате да имате лого, тогаш оставете го ова поле празно.',
        'config-instantcommons' => 'Овозможи Instant Commons',
@@ -14137,6 +14163,8 @@ Het cachen van objecten is niet ingeschakeld.",
        'config-mod-security' => "'''Waarschuwing:''' uw webserver heeft de module [http://modsecurity.org/ mod_security] ingeschakeld. Als deze onjuist is ingesteld, kan dit problemen geven in combinatie met MediaWiki of andere software die gebruikers in staat stelt willekeurige inhoud te posten.
 Lees de [http://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van uw provider als u tegen problemen aanloopt.",
        'config-diff3-bad' => 'GNU diff3 niet aangetroffen.',
+       'config-git' => 'Versiecontrolesoftware git is aangetroffen: <code>$1</code>',
+       'config-git-bad' => 'Geen git versiecontrolesoftware aangetroffen.',
        'config-imagemagick' => 'ImageMagick aangetroffen: <code>$1</code>.
 Het aanmaken van miniaturen van afbeeldingen wordt ingeschakeld als u uploaden inschakelt.',
        'config-gd' => 'Ingebouwde GD grafische bibliotheek aangetroffen.
@@ -14450,7 +14478,9 @@ Idealiter is deze map niet via het web te benaderen.',
        'config-logo-help' => 'Het standaarduiterlijk van MediaWiki bevat ruimte voor een logo van 135x160 pixels boven het menu.
 Upload een afbeelding met de juiste afmetingen en voer de URL hier in.
 
-Als u geen logo wilt gebruiken, kunt u dit veld leeg laten.', # Fuzzy
+U kunt <code>$wgStylePath</code> of <code>$wgScriptPath</code> gebruiken als uw logo relatief is aan een van deze paden.
+
+Als u geen logo wilt gebruiken, kunt u dit veld leeg laten.',
        'config-instantcommons' => 'Instant Commons inschakelen',
        'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] is functie die het mogelijk maakt om afbeeldingen, geluidsbestanden en andere mediabestanden te gebruiken van de website [//commons.wikimedia.org/ Wikimedia Commons].
 Hiervoor heeft MediaWiki toegang nodig tot Internet.
@@ -16060,7 +16090,6 @@ $messages['ps'] = array(
        'config-header-postgres' => 'د PostgreSQL امستنې',
        'config-header-sqlite' => 'د SQLite امستنې',
        'config-header-oracle' => 'د اورېکل امستنې',
-       'config-header-ibm_db2' => 'د IBM DB2 امستنې',
        'config-sqlite-readonly' => 'د <code>$1</code> دوتنه د ليکلو وړ نه ده.',
        'config-sqlite-cant-create-db' => 'د توکبنسټ دوتنه <code>$1</code> جوړه نه شوه.',
        'config-site-name' => 'د ويکي نوم:',
@@ -16072,7 +16101,7 @@ $messages['ps'] = array(
        'config-admin-password' => 'پټنوم:',
        'config-admin-password-confirm' => 'پټنوم يو ځل بيا:',
        'config-admin-email' => 'برېښليک پته:',
-       'config-profile-wiki' => 'دوديزه ويکي', # Fuzzy
+       'config-profile-wiki' => 'پرانيستې ويکي',
        'config-license-pd' => 'ټولګړی شپول',
        'config-email-settings' => 'د برېښليک امستنې',
        'config-install-step-done' => 'ترسره شو',
 );
 
 /** Urdu (اردو)
+ * @author Noor2020
  * @author පසිඳු කාවින්ද
  */
 $messages['ur'] = array(
        'config-information' => 'معلومات',
+       'config-git' => 'Git ورژن کنٹرول مصنع لطیف ملا: <code>$1</code> ۔',
+       'config-git-bad' => 'GIT ورژن کنٹرول مصنع لطیف نہيں ملا ۔',
        'config-profile-fishbowl' => 'صرف مجاز ایڈیٹرز',
        'config-license-pd' => 'پبلک ڈومین',
        'config-email-settings' => 'ای میل کی ترتیبات',
@@ -20027,6 +20059,7 @@ $messages['zea'] = array(
  * @author Hydra
  * @author Hzy980512
  * @author Liangent
+ * @author Makecat
  * @author PhiLiP
  * @author Xiaomingyan
  * @author Yfdyh000
@@ -20132,6 +20165,8 @@ $1',
 Object caching is not enabled.",
        'config-mod-security' => "'''警告''':您的服务器已启动[http://modsecurity.org/ mod_security]。若其配置错误, 会导致MediaWiki和其他软件的错误并允许用户任意发布内容。如果您遇到任何错误,请查阅[http://modsecurity.org/documentation/ mod_security文档]或联系您的客服。",
        'config-diff3-bad' => '找不到GNU diff3。',
+       'config-git' => '发现Git版本控制软件:<code>$1</code>',
+       'config-git-bad' => 'Git版本控制软件未找到。',
        'config-imagemagick' => '已找到ImageMagick:<code>$1</code>。如果你启用了上传功能,缩略图功能也将被启用。',
        'config-gd' => '已找到内建的GD图形库。如果你启用了上传功能,缩略图功能也将被启用。',
        'config-no-scaling' => '找不到GD库或ImageMagick。缩略图功能将不可用。',
@@ -20376,6 +20411,8 @@ GNU自由文档许可证是维基百科曾经使用过的许可证,并迄今
        'config-logo' => '标志URL:',
        'config-logo-help' => '在MediaWiki的默认外观中,左侧栏菜单之上有一块135x160像素的标志区。请上传一幅相应大小的图像,并在此输入URL。
 
+你可以用<code>$wgStylePath</code>或<code>$wgScriptPath</code>来表示相对于这些位置的路径。
+
 如果您不希望使用标志,请将本处留空。',
        'config-instantcommons' => '启用即时共享资源',
        'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons 即时共享资源]可以让wiki使用来自[//commons.wikimedia.org/ 维基共享资源]网站的图像、音频和其他媒体文件。要启用该功能,MediaWiki必须能够访问互联网。
index daac558..6a7970b 100644 (file)
@@ -114,6 +114,7 @@ abstract class Installer {
                'envCheckModSecurity',
                'envCheckDiff3',
                'envCheckGraphics',
+               'envCheckGit',
                'envCheckServer',
                'envCheckPath',
                'envCheckExtension',
@@ -147,6 +148,7 @@ abstract class Installer {
                'wgDBtype',
                'wgDiff3',
                'wgImageMagickConvertCommand',
+               'wgGitBin',
                'IP',
                'wgServer',
                'wgScriptPath',
@@ -464,7 +466,7 @@ abstract class Installer {
                $type = strtolower( $type );
 
                if ( !isset( $this->dbInstallers[$type] ) ) {
-                       $class = ucfirst( $type ). 'Installer';
+                       $class = ucfirst( $type ) . 'Installer';
                        $this->dbInstallers[$type] = new $class( $this );
                }
 
@@ -898,7 +900,8 @@ abstract class Installer {
         */
        protected function envCheckGraphics() {
                $names = array( wfIsWindows() ? 'convert.exe' : 'convert' );
-               $convert = self::locateExecutableInDefaultPaths( $names, array( '$1 -version', 'ImageMagick' ) );
+               $versionInfo = array( '$1 -version', 'ImageMagick' );
+               $convert = self::locateExecutableInDefaultPaths( $names, $versionInfo );
 
                $this->setVar( 'wgImageMagickConvertCommand', '' );
                if ( $convert ) {
@@ -914,6 +917,28 @@ abstract class Installer {
                return true;
        }
 
+       /**
+        * Search for git.
+        *
+        * @since 1.22
+        * @return bool
+        */
+       protected function envCheckGit() {
+               $names = array( wfIsWindows() ? 'git.exe' : 'git' );
+               $versionInfo = array( '$1 --version', 'git version' );
+
+               $git = self::locateExecutableInDefaultPaths( $names, $versionInfo );
+
+               if ( $git ) {
+                       $this->setVar( 'wgGitBin', $git );
+                       $this->showMessage( 'config-git', $git );
+               } else {
+                       $this->setVar( 'wgGitBin', false );
+                       $this->showMessage( 'config-git-bad' );
+               }
+               return true;
+       }
+
        /**
         * Environment check for the server hostname.
         */
index 632015f..e85d07f 100644 (file)
@@ -66,8 +66,8 @@ class OracleInstaller extends DatabaseInstaller {
                        $this->getTextBox( '_OracleDefTS', 'config-oracle-def-ts' ) .
                        $this->getTextBox( '_OracleTempTS', 'config-oracle-temp-ts', array(), $this->parent->getHelpBox( 'config-db-oracle-help' ) ) .
                        Html::closeElement( 'fieldset' ) .
-                       $this->parent->getWarningBox( wfMessage( 'config-db-account-oracle-warn' )->text() ).
-                       $this->getInstallUserBox().
+                       $this->parent->getWarningBox( wfMessage( 'config-db-account-oracle-warn' )->text() ) .
+                       $this->getInstallUserBox() .
                        $this->getWebUserBox();
        }
 
index cafe8cd..56d9f21 100644 (file)
@@ -183,7 +183,12 @@ class OracleUpdater extends DatabaseUpdater {
         * cascading taken in account in the deleting function
         */
        protected function doRecentchangesFK2Cascade() {
-               $meta = $this->db->query( 'SELECT 1 FROM all_constraints WHERE owner = \''.strtoupper($this->db->getDBname()).'\' AND constraint_name = \''.$this->db->tablePrefix().'RECENTCHANGES_FK2\' AND delete_rule = \'CASCADE\'' );
+               $meta = $this->db->query( 'SELECT 1 FROM all_constraints WHERE owner = \'' .
+                       strtoupper( $this->db->getDBname() ) .
+                       '\' AND constraint_name = \'' .
+                       $this->db->tablePrefix() .
+                       'RECENTCHANGES_FK2\' AND delete_rule = \'CASCADE\''
+               );
                $row = $meta->fetchRow();
                if ( $row ) {
                        return;
@@ -198,7 +203,10 @@ class OracleUpdater extends DatabaseUpdater {
        protected function doPageRestrictionsPKUKFix() {
                $this->output( "Altering PAGE_RESTRICTIONS keys ... " );
 
-               $meta = $this->db->query( 'SELECT column_name FROM all_cons_columns WHERE owner = \''.strtoupper($this->db->getDBname()).'\' AND constraint_name = \'MW_PAGE_RESTRICTIONS_PK\' AND rownum = 1' );
+               $meta = $this->db->query( 'SELECT column_name FROM all_cons_columns WHERE owner = \'' .
+                       strtoupper( $this->db->getDBname() ) .
+                       '\' AND constraint_name = \'MW_PAGE_RESTRICTIONS_PK\' AND rownum = 1'
+               );
                $row = $meta->fetchRow();
                if ( $row['column_name'] == 'PR_ID' ) {
                        $this->output( "seems to be up to date.\n" );
@@ -234,7 +242,7 @@ class OracleUpdater extends DatabaseUpdater {
                # We can't guarantee that the user will be able to use TRUNCATE,
                # but we know that DELETE is available to us
                $this->output( "Purging caches..." );
-               $this->db->delete( '/*Q*/'.$this->db->tableName( 'objectcache' ), '*', __METHOD__ );
+               $this->db->delete( '/*Q*/' . $this->db->tableName( 'objectcache' ), '*', __METHOD__ );
                $this->output( "done.\n" );
        }
 
index 08797b2..2615fc6 100644 (file)
@@ -744,7 +744,7 @@ END;
        protected function dropIndex( $table, $index, $patch = '', $fullpath = false ) {
                if ( $this->db->indexExists( $table, $index ) ) {
                        $this->output( "Dropping obsolete index '$index'\n" );
-                       $this->db->query( "DROP INDEX \"". $index ."\"" );
+                       $this->db->query( "DROP INDEX \"" . $index . "\"" );
                }
        }
 
@@ -752,7 +752,7 @@ END;
                $pu = $this->db->indexAttributes( $index );
                if ( !empty( $pu ) && $pu != $should_be ) {
                        $this->output( "Dropping obsolete version of index '$index'\n" );
-                       $this->db->query( "DROP INDEX \"". $index ."\"" );
+                       $this->db->query( "DROP INDEX \"" . $index . "\"" );
                        $pu = array();
                } else {
                        $this->output( "...no need to drop index '$index'\n" );
index ac66cd9..30aa956 100644 (file)
@@ -640,7 +640,7 @@ class WebInstaller extends Installer {
         */
        public function getInfoBox( $text, $icon = false, $class = false ) {
                $text = $this->parse( $text, true );
-               $icon = ( $icon == false ) ? '../skins/common/images/info-32.png' : '../skins/common/images/'.$icon;
+               $icon = ( $icon == false ) ? '../skins/common/images/info-32.png' : '../skins/common/images/' . $icon;
                $alt = wfMessage( 'config-information' )->text();
                return Html::infoBox( $text, $icon, $alt, $class, false );
        }
index d61d843..a6a8667 100644 (file)
@@ -223,7 +223,7 @@ class WebInstallerOutput {
                        $this->parent->request->response()->header( 'X-Frame-Options: DENY' );
                }
                if ( $this->redirectTarget ) {
-                       $this->parent->request->response()->header( 'Location: '.$this->redirectTarget );
+                       $this->parent->request->response()->header( 'Location: ' . $this->redirectTarget );
                        return;
                }
 
index 593509e..3f3e50a 100644 (file)
@@ -336,7 +336,7 @@ class WebInstaller_ExistingWiki extends WebInstallerPage {
        protected function showKeyForm() {
                $this->startForm();
                $this->addHTML(
-                       $this->parent->getInfoBox( wfMessage( 'config-localsettings-upgrade' )->plain() ).
+                       $this->parent->getInfoBox( wfMessage( 'config-localsettings-upgrade' )->plain() ) .
                        '<br />' .
                        $this->parent->getTextBox( array(
                                'var' => 'wgUpgradeKey',
@@ -1066,7 +1066,7 @@ class WebInstaller_Options extends WebInstallerPage {
                // If you change this height, also change it in config.css
                $expandJs = str_replace( '$1', '54em', $js );
                $reduceJs = str_replace( '$1', '70px', $js );
-               return '<p>'.
+               return '<p>' .
                        Html::element( 'img', array( 'src' => $this->getVar( 'wgRightsIcon' ) ) ) .
                        '&#160;&#160;' .
                        htmlspecialchars( $this->getVar( 'wgRightsText' ) ) .
@@ -1311,7 +1311,9 @@ abstract class WebInstaller_Document extends WebInstallerPage {
 }
 
 class WebInstaller_Readme extends WebInstaller_Document {
-       protected function getFileName() { return 'README'; }
+       protected function getFileName() {
+               return 'README';
+       }
 }
 
 class WebInstaller_ReleaseNotes extends WebInstaller_Document {
@@ -1327,9 +1329,13 @@ class WebInstaller_ReleaseNotes extends WebInstaller_Document {
 }
 
 class WebInstaller_UpgradeDoc extends WebInstaller_Document {
-       protected function getFileName() { return 'UPGRADE'; }
+       protected function getFileName() {
+               return 'UPGRADE';
+       }
 }
 
 class WebInstaller_Copying extends WebInstaller_Document {
-       protected function getFileName() { return 'COPYING'; }
+       protected function getFileName() {
+               return 'COPYING';
+       }
 }
index 64925f7..a765d5d 100644 (file)
@@ -150,6 +150,7 @@ abstract class Job {
 
        /**
         * @return integer May be 0 for jobs stored outside the DB
+        * @deprecated 1.22
         */
        public function getId() {
                return $this->id;
index 17a1338..92bac3f 100644 (file)
@@ -121,19 +121,19 @@ abstract class JobQueue {
        }
 
        /**
-        * @return string One of (random, timestamp, fifo)
+        * @return string One of (random, timestamp, fifo, undefined)
         */
        final public function getOrder() {
                return $this->order;
        }
 
        /**
-        * @return Array Subset of (random, timestamp, fifo)
+        * @return Array Subset of (random, timestamp, fifo, undefined)
         */
        abstract protected function supportedOrders();
 
        /**
-        * @return string One of (random, timestamp, fifo)
+        * @return string One of (random, timestamp, fifo, undefined)
         */
        abstract protected function optimalOrder();
 
@@ -338,7 +338,7 @@ abstract class JobQueue {
                // Flag this job as an old duplicate based on its "root" job...
                try {
                        if ( $job && $this->isRootJobOldDuplicate( $job ) ) {
-                               wfIncrStats( 'job-pop-duplicate' );
+                               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
@@ -580,6 +580,19 @@ abstract class JobQueue {
                return new ArrayIterator( array() ); // not implemented
        }
 
+       /**
+        * Call wfIncrStats() for the queue overall and for the queue type
+        *
+        * @param string $key Event type
+        * @param string $type Job type
+        * @param integer $delta
+        * @since 1.22
+        */
+       public static function incrStats( $key, $type, $delta = 1 ) {
+               wfIncrStats( $key, $delta );
+               wfIncrStats( "{$key}-{$type}", $delta );
+       }
+
        /**
         * Namespace the queue with a key to isolate it for testing
         *
index 15bb833..c364209 100644 (file)
@@ -93,7 +93,7 @@ class JobQueueAggregatorMemc extends JobQueueAggregator {
                                        'pendingDBs' => $this->findPendingWikiQueues(),
                                        'timestamp'  => time()
                                );
-                               for ( $attempts=1; $attempts <= 25; ++$attempts ) {
+                               for ( $attempts = 1; $attempts <= 25; ++$attempts ) {
                                        if ( $this->cache->add( "$key:lock", 1, 60 ) ) { // lock
                                                $this->cache->set( $key, $pendingDbInfo );
                                                $this->cache->delete( "$key:lock" ); // unlock
index ae4576c..a685fe3 100644 (file)
@@ -177,70 +177,85 @@ class JobQueueDB extends JobQueue {
         * @return bool
         */
        protected function doBatchPush( array $jobs, $flags ) {
-               if ( count( $jobs ) ) {
-                       list( $dbw, $scope ) = $this->getMasterDB();
-
-                       $rowSet = array(); // (sha1 => job) map for jobs that are de-duplicated
-                       $rowList = array(); // list of jobs for jobs that are are not de-duplicated
-
-                       foreach ( $jobs as $job ) {
-                               $row = $this->insertFields( $job );
-                               if ( $job->ignoreDuplicates() ) {
-                                       $rowSet[$row['job_sha1']] = $row;
-                               } else {
-                                       $rowList[] = $row;
-                               }
+               list( $dbw, $scope ) = $this->getMasterDB();
+
+               $that = $this;
+               $method = __METHOD__;
+               $dbw->onTransactionIdle(
+                       function() use ( $dbw, $that, $jobs, $flags, $method, $scope ) {
+                               $that->doBatchPushInternal( $dbw, $jobs, $flags, $method );
                        }
+               );
 
-                       $key = $this->getCacheKey( 'empty' );
-                       $atomic = ( $flags & self::QOS_ATOMIC );
-                       $cache = $this->cache;
+               return true;
+       }
 
-                       $dbw->onTransactionIdle(
-                               function() use ( $dbw, $cache, $rowSet, $rowList, $atomic, $key, $scope
-                       ) {
-                               if ( $atomic ) {
-                                       $dbw->begin( __METHOD__ ); // wrap all the job additions in one transaction
-                               }
-                               try {
-                                       // Strip out any duplicate jobs that are already in the queue...
-                                       if ( count( $rowSet ) ) {
-                                               $res = $dbw->select( 'job', 'job_sha1',
-                                                       array(
-                                                               // No job_type condition since it's part of the job_sha1 hash
-                                                               'job_sha1'  => array_keys( $rowSet ),
-                                                               'job_token' => '' // unclaimed
-                                                       ),
-                                                       __METHOD__
-                                               );
-                                               foreach ( $res as $row ) {
-                                                       wfDebug( "Job with hash '{$row->job_sha1}' is a duplicate." );
-                                                       unset( $rowSet[$row->job_sha1] ); // already enqueued
-                                               }
-                                       }
-                                       // Build the full list of job rows to insert
-                                       $rows = array_merge( $rowList, array_values( $rowSet ) );
-                                       // Insert the job rows in chunks to avoid slave lag...
-                                       foreach ( array_chunk( $rows, 50 ) as $rowBatch ) {
-                                               $dbw->insert( 'job', $rowBatch, __METHOD__ );
-                                       }
-                                       wfIncrStats( 'job-insert', count( $rows ) );
-                                       wfIncrStats( 'job-insert-duplicate',
-                                               count( $rowSet ) + count( $rowList ) - count( $rows ) );
-                               } catch ( DBError $e ) {
-                                       if ( $atomic ) {
-                                               $dbw->rollback( __METHOD__ );
-                                       }
-                                       throw $e;
-                               }
-                               if ( $atomic ) {
-                                       $dbw->commit( __METHOD__ );
-                               }
+       /**
+        * This function should *not* be called outside of JobQueueDB
+        *
+        * @param DatabaseBase $dbw
+        * @param array $jobs
+        * @param int $flags
+        * @param string $method
+        * @return boolean
+        * @throws type
+        */
+       public function doBatchPushInternal( DatabaseBase $dbw, array $jobs, $flags, $method ) {
+               if ( !count( $jobs ) ) {
+                       return true;
+               }
 
-                               $cache->set( $key, 'false', JobQueueDB::CACHE_TTL_LONG );
-                       } );
+               $rowSet = array(); // (sha1 => job) map for jobs that are de-duplicated
+               $rowList = array(); // list of jobs for jobs that are are not de-duplicated
+               foreach ( $jobs as $job ) {
+                       $row = $this->insertFields( $job );
+                       if ( $job->ignoreDuplicates() ) {
+                               $rowSet[$row['job_sha1']] = $row;
+                       } else {
+                               $rowList[] = $row;
+                       }
                }
 
+               if ( $flags & self::QOS_ATOMIC ) {
+                       $dbw->begin( $method ); // wrap all the job additions in one transaction
+               }
+               try {
+                       // Strip out any duplicate jobs that are already in the queue...
+                       if ( count( $rowSet ) ) {
+                               $res = $dbw->select( 'job', 'job_sha1',
+                                       array(
+                                               // No job_type condition since it's part of the job_sha1 hash
+                                               'job_sha1'  => array_keys( $rowSet ),
+                                               'job_token' => '' // unclaimed
+                                       ),
+                                       $method
+                               );
+                               foreach ( $res as $row ) {
+                                       wfDebug( "Job with hash '{$row->job_sha1}' is a duplicate." );
+                                       unset( $rowSet[$row->job_sha1] ); // already enqueued
+                               }
+                       }
+                       // Build the full list of job rows to insert
+                       $rows = array_merge( $rowList, array_values( $rowSet ) );
+                       // Insert the job rows in chunks to avoid slave lag...
+                       foreach ( array_chunk( $rows, 50 ) as $rowBatch ) {
+                               $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 ) );
+               } catch ( DBError $e ) {
+                       if ( $flags & self::QOS_ATOMIC ) {
+                               $dbw->rollback( $method );
+                       }
+                       throw $e;
+               }
+               if ( $flags & self::QOS_ATOMIC ) {
+                       $dbw->commit( $method );
+               }
+
+               $this->cache->set( $this->getCacheKey( 'empty' ), 'false', JobQueueDB::CACHE_TTL_LONG );
+
                return true;
        }
 
@@ -272,7 +287,7 @@ class JobQueueDB extends JobQueue {
                                $this->cache->set( $this->getCacheKey( 'empty' ), 'true', self::CACHE_TTL_LONG );
                                break; // nothing to do
                        }
-                       wfIncrStats( 'job-pop' );
+                       JobQueue::incrStats( 'job-pop', $this->type );
                        // Get the job object from the row...
                        $title = Title::makeTitleSafe( $row->job_namespace, $row->job_title );
                        if ( !$title ) {
@@ -282,6 +297,7 @@ class JobQueueDB extends JobQueue {
                        }
                        $job = Job::factory( $row->job_cmd, $title,
                                self::extractBlob( $row->job_params ), $row->job_id );
+                       $job->metadata['id'] = $row->job_id;
                        $job->id = $row->job_id; // XXX: work around broken subclasses
                        break; // done
                } while( true );
@@ -428,77 +444,6 @@ class JobQueueDB extends JobQueue {
                return $row;
        }
 
-       /**
-        * Recycle or destroy any jobs that have been claimed for too long
-        *
-        * @return integer Number of jobs recycled/deleted
-        */
-       public function recycleAndDeleteStaleJobs() {
-               $now = time();
-               list( $dbw, $scope ) = $this->getMasterDB();
-               $count = 0; // affected rows
-
-               if ( !$dbw->lock( "jobqueue-recycle-{$this->type}", __METHOD__, 1 ) ) {
-                       return $count; // already in progress
-               }
-
-               // Remove claims on jobs acquired for too long if enabled...
-               if ( $this->claimTTL > 0 ) {
-                       $claimCutoff = $dbw->timestamp( $now - $this->claimTTL );
-                       // Get the IDs of jobs that have be claimed but not finished after too long.
-                       // These jobs can be recycled into the queue by expiring the claim. Selecting
-                       // the IDs first means that the UPDATE can be done by primary key (less deadlocks).
-                       $res = $dbw->select( 'job', 'job_id',
-                               array(
-                                       'job_cmd' => $this->type,
-                                       "job_token != {$dbw->addQuotes( '' )}", // was acquired
-                                       "job_token_timestamp < {$dbw->addQuotes( $claimCutoff )}", // stale
-                                       "job_attempts < {$dbw->addQuotes( $this->maxTries )}" ), // retries left
-                               __METHOD__
-                       );
-                       $ids = array_map( function( $o ) { return $o->job_id; }, iterator_to_array( $res ) );
-                       if ( count( $ids ) ) {
-                               // Reset job_token for these jobs so that other runners will pick them up.
-                               // Set the timestamp to the current time, as it is useful to now that the job
-                               // was already tried before (the timestamp becomes the "released" time).
-                               $dbw->update( 'job',
-                                       array(
-                                               'job_token' => '',
-                                               'job_token_timestamp' => $dbw->timestamp( $now ) ), // time of release
-                                       array(
-                                               'job_id' => $ids ),
-                                       __METHOD__
-                               );
-                               $count += $dbw->affectedRows();
-                               wfIncrStats( 'job-recycle', $dbw->affectedRows() );
-                               $this->cache->set( $this->getCacheKey( 'empty' ), 'false', self::CACHE_TTL_LONG );
-                       }
-               }
-
-               // Just destroy any stale jobs...
-               $pruneCutoff = $dbw->timestamp( $now - self::MAX_AGE_PRUNE );
-               $conds = array(
-                       'job_cmd' => $this->type,
-                       "job_token != {$dbw->addQuotes( '' )}", // was acquired
-                       "job_token_timestamp < {$dbw->addQuotes( $pruneCutoff )}" // stale
-               );
-               if ( $this->claimTTL > 0 ) { // only prune jobs attempted too many times...
-                       $conds[] = "job_attempts >= {$dbw->addQuotes( $this->maxTries )}";
-               }
-               // Get the IDs of jobs that are considered stale and should be removed. Selecting
-               // 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 ) { return $o->job_id; }, iterator_to_array( $res ) );
-               if ( count( $ids ) ) {
-                       $dbw->delete( 'job', array( 'job_id' => $ids ), __METHOD__ );
-                       $count += $dbw->affectedRows();
-               }
-
-               $dbw->unlock( "jobqueue-recycle-{$this->type}", __METHOD__ );
-
-               return $count;
-       }
-
        /**
         * @see JobQueue::doAck()
         * @param Job $job
@@ -506,7 +451,7 @@ class JobQueueDB extends JobQueue {
         * @return Job|bool
         */
        protected function doAck( Job $job ) {
-               if ( !$job->getId() ) {
+               if ( !isset( $job->metadata['id'] ) ) {
                        throw new MWException( "Job of type '{$job->getType()}' has no ID." );
                }
 
@@ -515,7 +460,7 @@ class JobQueueDB extends JobQueue {
 
                // Delete a row with a single DELETE without holding row locks over RTTs...
                $dbw->delete( 'job',
-                       array( 'job_cmd' => $this->type, 'job_id' => $job->getId() ), __METHOD__ );
+                       array( 'job_cmd' => $this->type, 'job_id' => $job->metadata['id'] ), __METHOD__ );
 
                return true;
        }
@@ -598,12 +543,85 @@ class JobQueueDB extends JobQueue {
                                        strlen( $row->job_params ) ? unserialize( $row->job_params ) : false,
                                        $row->job_id
                                );
+                               $job->metadata['id'] = $row->job_id;
                                $job->id = $row->job_id; // XXX: work around broken subclasses
                                return $job;
                        }
                );
        }
 
+       /**
+        * Recycle or destroy any jobs that have been claimed for too long
+        *
+        * @return integer Number of jobs recycled/deleted
+        */
+       public function recycleAndDeleteStaleJobs() {
+               $now = time();
+               list( $dbw, $scope ) = $this->getMasterDB();
+               $count = 0; // affected rows
+
+               if ( !$dbw->lock( "jobqueue-recycle-{$this->type}", __METHOD__, 1 ) ) {
+                       return $count; // already in progress
+               }
+
+               // Remove claims on jobs acquired for too long if enabled...
+               if ( $this->claimTTL > 0 ) {
+                       $claimCutoff = $dbw->timestamp( $now - $this->claimTTL );
+                       // Get the IDs of jobs that have be claimed but not finished after too long.
+                       // These jobs can be recycled into the queue by expiring the claim. Selecting
+                       // the IDs first means that the UPDATE can be done by primary key (less deadlocks).
+                       $res = $dbw->select( 'job', 'job_id',
+                               array(
+                                       'job_cmd' => $this->type,
+                                       "job_token != {$dbw->addQuotes( '' )}", // was acquired
+                                       "job_token_timestamp < {$dbw->addQuotes( $claimCutoff )}", // stale
+                                       "job_attempts < {$dbw->addQuotes( $this->maxTries )}" ), // retries left
+                               __METHOD__
+                       );
+                       $ids = array_map( function( $o ) { return $o->job_id; }, iterator_to_array( $res ) );
+                       if ( count( $ids ) ) {
+                               // Reset job_token for these jobs so that other runners will pick them up.
+                               // Set the timestamp to the current time, as it is useful to now that the job
+                               // was already tried before (the timestamp becomes the "released" time).
+                               $dbw->update( 'job',
+                                       array(
+                                               'job_token' => '',
+                                               'job_token_timestamp' => $dbw->timestamp( $now ) ), // time of release
+                                       array(
+                                               'job_id' => $ids ),
+                                       __METHOD__
+                               );
+                               $count += $dbw->affectedRows();
+                               JobQueue::incrStats( 'job-recycle', $this->type, $dbw->affectedRows() );
+                               $this->cache->set( $this->getCacheKey( 'empty' ), 'false', self::CACHE_TTL_LONG );
+                       }
+               }
+
+               // Just destroy any stale jobs...
+               $pruneCutoff = $dbw->timestamp( $now - self::MAX_AGE_PRUNE );
+               $conds = array(
+                       'job_cmd' => $this->type,
+                       "job_token != {$dbw->addQuotes( '' )}", // was acquired
+                       "job_token_timestamp < {$dbw->addQuotes( $pruneCutoff )}" // stale
+               );
+               if ( $this->claimTTL > 0 ) { // only prune jobs attempted too many times...
+                       $conds[] = "job_attempts >= {$dbw->addQuotes( $this->maxTries )}";
+               }
+               // Get the IDs of jobs that are considered stale and should be removed. Selecting
+               // 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 ) { return $o->job_id; }, iterator_to_array( $res ) );
+               if ( count( $ids ) ) {
+                       $dbw->delete( 'job', array( 'job_id' => $ids ), __METHOD__ );
+                       $count += $dbw->affectedRows();
+                       JobQueue::incrStats( 'job-abandon', $this->type, $dbw->affectedRows() );
+               }
+
+               $dbw->unlock( "jobqueue-recycle-{$this->type}", __METHOD__ );
+
+               return $count;
+       }
+
        /**
         * @return Array (DatabaseBase, ScopedCallback)
         */
diff --git a/includes/job/JobQueueFederated.php b/includes/job/JobQueueFederated.php
new file mode 100644 (file)
index 0000000..ed3c4f4
--- /dev/null
@@ -0,0 +1,382 @@
+<?php
+/**
+ * Job queue code for federated queues.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Class to handle enqueueing and running of background jobs for federated queues
+ *
+ * This class allows for queues to be partitioned into smaller queues.
+ * A partition is defined by the configuration for a JobQueue instance.
+ * For example, one can set $wgJobTypeConf['refreshLinks'] to point to a
+ * JobQueueFederated instance, which itself would consist of three JobQueueRedis
+ * instances, each using their own redis server. This would allow for the jobs
+ * to be split (evenly or based on weights) accross multiple servers if a single
+ * server becomes impractical or expensive. Different JobQueue classes can be mixed.
+ *
+ * The basic queue configuration (e.g. "order", "claimTTL") of a federated queue
+ * is inherited by the partition queues. Additional configuration defines what
+ * section each wiki is in, what partition queues each section uses (and their weight),
+ * and the JobQueue configuration for each partition. Some sections might only need a
+ * single queue partition, like the sections for groups of small wikis.
+ *
+ * If used for performance, then $wgMainCacheType should be set to memcached/redis.
+ * Note that "fifo" cannot be used for the ordering, since the data is distributed.
+ * One can still use "timestamp" instead, as in "roughly timestamp ordered".
+ *
+ * @ingroup JobQueue
+ * @since 1.22
+ */
+class JobQueueFederated extends JobQueue {
+       /** @var Array (wiki ID => section name) */
+       protected $sectionsByWiki = array();
+       /** @var Array (section name => (partition name => weight)) */
+       protected $partitionsBySection = array();
+       /** @var Array (section name => config array) */
+       protected $configByPartition = array();
+       /** @var Array (partition names => integer) */
+       protected $partitionsNoPush = array();
+
+       /** @var Array (partition name => JobQueue) */
+       protected $partitionQueues = array();
+       /** @var BagOStuff */
+       protected $cache;
+
+       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
+
+       /**
+        * @params include:
+        *  - sectionsByWiki      : A map of wiki IDs to section names.
+        *                          Wikis will default to using the section "default".
+        *  - partitionsBySection : Map of section names to maps of (partition name => weight).
+        *                          A section called 'default' must be defined if not all wikis
+        *                          have explicitly defined sections.
+        *  - configByPartition   : Map of queue partition names to configuration arrays.
+        *                          These configuration arrays are passed to JobQueue::factory().
+        *                          The options set here are overriden by those passed to this
+        *                          the federated queue itself (e.g. 'order' and 'claimTTL').
+        *  - partitionsNoPush    : List of partition names that can handle pop() but not push().
+        *                          This can be used to migrate away from a certain partition.
+        * @param array $params
+        */
+       protected function __construct( array $params ) {
+               parent::__construct( $params );
+               $this->sectionsByWiki = $params['sectionsByWiki'];
+               $this->partitionsBySection = $params['partitionsBySection'];
+               $this->configByPartition = $params['configByPartition'];
+               if ( isset( $params['partitionsNoPush'] ) ) {
+                       $this->partitionsNoPush = array_flip( $params['partitionsNoPush'] );
+               }
+               $baseConfig = $params;
+               foreach ( array( 'class', 'sectionsByWiki',
+                       'partitionsBySection', 'configByPartition', 'partitionsNoPush' ) as $o )
+               {
+                       unset( $baseConfig[$o] );
+               }
+               foreach ( $this->getPartitionMap() as $partition => $w ) {
+                       if ( !isset( $this->configByPartition[$partition] ) ) {
+                               throw new MWException( "No configuration for partition '$partition'." );
+                       }
+                       $this->partitionQueues[$partition] = JobQueue::factory(
+                               $baseConfig + $this->configByPartition[$partition]
+                       );
+               }
+               // Aggregate cache some per-queue values if there are multiple partition queues
+               $this->cache = $this->isFederated() ? wfGetMainCache() : new EmptyBagOStuff();
+       }
+
+       protected function supportedOrders() {
+               // No FIFO due to partitioning, though "rough timestamp order" is supported
+               return array( 'undefined', 'random', 'timestamp' );
+       }
+
+       protected function optimalOrder() {
+               return 'undefined'; // defer to the partitions
+       }
+
+       protected function supportsDelayedJobs() {
+               return true; // defer checks to the partitions
+       }
+
+       protected function doIsEmpty() {
+               $key = $this->getCacheKey( 'empty' );
+
+               $isEmpty = $this->cache->get( $key );
+               if ( $isEmpty === 'true' ) {
+                       return true;
+               } elseif ( $isEmpty === 'false' ) {
+                       return false;
+               }
+
+               foreach ( $this->partitionQueues as $queue ) {
+                       if ( !$queue->doIsEmpty() ) {
+                               $this->cache->add( $key, 'false', self::CACHE_TTL_LONG );
+                               return false;
+                       }
+               }
+
+               $this->cache->add( $key, 'true', self::CACHE_TTL_LONG );
+               return true;
+       }
+
+       protected function doGetSize() {
+               return $this->getCrossPartitionSum( 'size', 'doGetSize' );
+       }
+
+       protected function doGetAcquiredCount() {
+               return $this->getCrossPartitionSum( 'acquiredcount', 'doGetAcquiredCount' );
+       }
+
+       protected function doGetDelayedCount() {
+               return $this->getCrossPartitionSum( 'delayedcount', 'doGetDelayedCount' );
+       }
+
+       protected function doGetAbandonedCount() {
+               return $this->getCrossPartitionSum( 'abandonedcount', 'doGetAbandonedCount' );
+       }
+
+       /**
+        * @param string $type
+        * @param string $method
+        * @return integer
+        */
+       protected function getCrossPartitionSum( $type, $method ) {
+               $key = $this->getCacheKey( $type );
+
+               $count = $this->cache->get( $key );
+               if ( is_int( $count ) ) {
+                       return $count;
+               }
+
+               $count = 0;
+               foreach ( $this->partitionQueues as $queue ) {
+                       $count += $queue->$method();
+               }
+
+               $this->cache->set( $key, $count, self::CACHE_TTL_SHORT );
+               return $count;
+       }
+
+       protected function doBatchPush( array $jobs, $flags ) {
+               if ( !count( $jobs ) ) {
+                       return true; // nothing to do
+               }
+
+               $partitionsTry = array_diff_key(
+                       $this->getPartitionMap(),
+                       $this->partitionsNoPush
+               ); // (partition => weight)
+
+               // Try to insert the jobs and update $partitionsTry on any failures
+               $jobsLeft = $this->tryJobInsertions( $jobs, $partitionsTry, $flags );
+               if ( count( $jobsLeft ) ) { // some jobs failed to insert?
+                       // Try to insert the remaning jobs once more, ignoring the bad partitions
+                       return !count( $this->tryJobInsertions( $jobsLeft, $partitionsTry, $flags ) );
+               } else {
+                       return true;
+               }
+       }
+
+       /**
+        * @param array $jobs
+        * @param array $partitionsTry
+        * @param integer $flags
+        * @return array List of Job object that could not be inserted
+        */
+       protected function tryJobInsertions( array $jobs, array &$partitionsTry, $flags ) {
+               if ( !count( $partitionsTry ) ) {
+                       return $jobs; // can't insert anything
+               }
+
+               $jobsLeft = array();
+
+               $partitionRing = new HashRing( $partitionsTry );
+               // Because jobs are spread across partitions, per-job de-duplication needs
+               // 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)
+               foreach ( $jobs as $key => $job ) {
+                       if ( $job->ignoreDuplicates() ) {
+                               $sha1 = sha1( serialize( $job->getDeduplicationInfo() ) );
+                               $uJobsByPartition[$partitionRing->getLocation( $sha1 )][] = $job;
+                               unset( $jobs[$key] );
+                       }
+               }
+               // Get the batches of jobs that are not de-duplicated
+               if ( $flags & self::QoS_Atomic ) {
+                       $nuJobBatches = array( $jobs ); // all or nothing
+               } else {
+                       // Split the jobs into batches and spread them out over servers if there
+                       // are many jobs. This helps keep the partitions even. Otherwise, send all
+                       // the jobs to a single partition queue to avoids the extra connections.
+                       $nuJobBatches = array_chunk( $jobs, 300 );
+               }
+
+               // Insert the de-duplicated jobs into the queues...
+               foreach ( $uJobsByPartition as $partition => $jobBatch ) {
+                       $queue = $this->partitionQueues[$partition];
+                       if ( $queue->doBatchPush( $jobBatch, $flags ) ) {
+                               $key = $this->getCacheKey( 'empty' );
+                               $this->cache->set( $key, 'false', JobQueueDB::CACHE_TTL_LONG );
+                       } else {
+                               unset( $partitionsTry[$partition] ); // blacklist partition
+                               $jobsLeft = array_merge( $jobsLeft, $jobBatch ); // not inserted
+                       }
+               }
+               // Insert the jobs that are not de-duplicated into the queues...
+               foreach ( $nuJobBatches as $jobBatch ) {
+                       $partition = ArrayUtils::pickRandom( $partitionsTry );
+                       if ( $partition === false ) { // all partitions at 0 weight?
+                               $jobsLeft = array_merge( $jobsLeft, $jobBatch ); // not inserted
+                       } else {
+                               $queue = $this->partitionQueues[$partition];
+                               if ( $queue->doBatchPush( $jobBatch, $flags ) ) {
+                                       $key = $this->getCacheKey( 'empty' );
+                                       $this->cache->set( $key, 'false', JobQueueDB::CACHE_TTL_LONG );
+                               } else {
+                                       unset( $partitionsTry[$partition] ); // blacklist partition
+                                       $jobsLeft = array_merge( $jobsLeft, $jobBatch ); // not inserted
+                               }
+                       }
+               }
+
+               return $jobsLeft;
+       }
+
+       protected function doPop() {
+               $key = $this->getCacheKey( 'empty' );
+
+               $isEmpty = $this->cache->get( $key );
+               if ( $isEmpty === 'true' ) {
+                       return false;
+               }
+
+               $partitionsTry = $this->getPartitionMap(); // (partition => weight)
+
+               while ( count( $partitionsTry ) ) {
+                       $partition = ArrayUtils::pickRandom( $partitionsTry );
+                       if ( $partition === false ) {
+                               break; // all partitions at 0 weight
+                       }
+                       $queue = $this->partitionQueues[$partition];
+                       $job = $queue->pop();
+                       if ( $job ) {
+                               $job->metadata['QueuePartition'] = $partition;
+                               return $job;
+                       } else {
+                               unset( $partitionsTry[$partition] ); // blacklist partition
+                       }
+               }
+
+               $this->cache->set( $key, 'true', JobQueueDB::CACHE_TTL_LONG );
+               return false;
+       }
+
+       protected function doAck( Job $job ) {
+               if ( !isset( $job->metadata['QueuePartition'] ) ) {
+                       throw new MWException( "The given job has no defined partition name." );
+               }
+               return $this->partitionQueues[$job->metadata['QueuePartition']]->ack( $job );
+       }
+
+       protected function doWaitForBackups() {
+               foreach ( $this->partitionQueues as $queue ) {
+                       $queue->waitForBackups();
+               }
+       }
+
+       protected function doGetPeriodicTasks() {
+               $tasks = array();
+               foreach ( $this->partitionQueues as $partition => $queue ) {
+                       foreach ( $queue->getPeriodicTasks() as $task => $def ) {
+                               $tasks["{$partition}:{$task}"] = $def;
+                       }
+               }
+               return $tasks;
+       }
+
+       protected function doFlushCaches() {
+               static $types = array(
+                       'empty',
+                       'size',
+                       'acquiredcount',
+                       'delayedcount',
+                       'abandonedcount'
+               );
+               foreach ( $types as $type ) {
+                       $this->cache->delete( $this->getCacheKey( $type ) );
+               }
+               foreach ( $this->partitionQueues as $queue ) {
+                       $queue->doFlushCaches();
+               }
+       }
+
+       public function getAllQueuedJobs() {
+               $iterator = new AppendIterator();
+               foreach ( $this->partitionQueues as $queue ) {
+                       $iterator->append( $queue->getAllQueuedJobs() );
+               }
+               return $iterator;
+       }
+
+       public function getAllDelayedJobs() {
+               $iterator = new AppendIterator();
+               foreach ( $this->partitionQueues as $queue ) {
+                       $iterator->append( $queue->getAllDelayedJobs() );
+               }
+               return $iterator;
+       }
+
+       public function setTestingPrefix( $key ) {
+               foreach ( $this->partitionQueues as $queue ) {
+                       $queue->setTestingPrefix( $key );
+               }
+       }
+
+       /**
+        * @return Array Map of (partition name => weight)
+        */
+       protected function getPartitionMap() {
+               $section = isset( $this->sectionsByWiki[$this->wiki] )
+                       ? $this->sectionsByWiki[$this->wiki]
+                       : 'default';
+               if ( !isset( $this->partitionsBySection[$section] ) ) {
+                       throw new MWException( "No configuration for section '$section'." );
+               }
+               return $this->partitionsBySection[$section];
+       }
+
+       /**
+        * @return bool The queue is actually split up across multiple queue partitions
+        */
+       protected function isFederated() {
+               return ( count( $this->getPartitionMap() ) > 1 );
+       }
+
+       /**
+        * @return string
+        */
+       private function getCacheKey( $property ) {
+               list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
+               return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, $property );
+       }
+}
index 26a9b72..f14f9fa 100644 (file)
  *   - z-abandoned  : A sorted set of (job ID, UNIX timestamp as score) used for broken jobs
  *   - z-delayed    : A sorted set of (job ID, UNIX timestamp as score) used for delayed jobs
  *   - h-idBySha1   : A hash of (SHA1 => job ID) for unclaimed jobs used for de-duplication
- *   - h-sha1Byid   : A hash of (job ID => SHA1) for unclaimed jobs used for de-duplication
+ *   - h-sha1ById   : A hash of (job ID => SHA1) for unclaimed jobs used for de-duplication
  *   - h-attempts   : A hash of (job ID => attempt count) used for job claiming/retries
  *   - h-data       : A hash of (job ID => serialized blobs) for job storage
  * A job ID can be in only one of z-delayed, l-unclaimed, z-claimed, and z-abandoned.
  * If an ID appears in any of those lists, it should have a h-data entry for its ID.
  * If a job has a SHA1 de-duplication value and its ID is in l-unclaimed or z-delayed, then
- * there should be no other such jobs with that SHA1. Every h-idBySha1 entry has an h-sha1Byid
- * entry and every h-sha1Byid must refer to an ID that is l-unclaimed. If a job has its
+ * there should be no other such jobs with that SHA1. Every h-idBySha1 entry has an h-sha1ById
+ * entry and every h-sha1ById must refer to an ID that is l-unclaimed. If a job has its
  * ID in z-claimed or z-abandoned, then it must also have an h-attempts entry for its ID.
  *
  * Additionally, "rootjob:* keys track "root jobs" used for additional de-duplication.
@@ -216,8 +216,9 @@ class JobQueueRedis extends JobQueue {
                                wfDebugLog( 'JobQueueRedis', "Could not insert {$failed} {$this->type} job(s)." );
                                return false;
                        }
-                       wfIncrStats( 'job-insert', count( $items ) );
-                       wfIncrStats( 'job-insert-duplicate', count( $items ) - $failed - $pushed );
+                       JobQueue::incrStats( 'job-insert', $this->type, count( $items ) );
+                       JobQueue::incrStats( 'job-insert-duplicate', $this->type,
+                               count( $items ) - $failed - $pushed );
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
                }
@@ -232,7 +233,7 @@ class JobQueueRedis extends JobQueue {
         * @throws RedisException
         */
        protected function pushBlobs( RedisConnRef $conn, array $items ) {
-               $args = array(); // ([id, sha1, blob [, id, sha1, blob ... ] ] )
+               $args = array(); // ([id, sha1, rtime, blob [, id, sha1, rtime, blob ... ] ] )
                foreach ( $items as $item ) {
                        $args[] = (string)$item['uuid'];
                        $args[] = (string)$item['sha1'];
@@ -263,7 +264,7 @@ class JobQueueRedis extends JobQueue {
                end
                return pushed
 LUA;
-               return $this->redisEval( $conn, $script,
+               return $conn->luaEval( $script,
                        array_merge(
                                array(
                                        $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
@@ -308,7 +309,7 @@ LUA;
                                        break; // no jobs; nothing to do
                                }
 
-                               wfIncrStats( 'job-pop' );
+                               JobQueue::incrStats( 'job-pop', $this->type );
                                $item = unserialize( $blob );
                                if ( $item === false ) {
                                        wfDebugLog( 'JobQueueRedis', "Could not unserialize {$this->type} job." );
@@ -346,7 +347,7 @@ LUA;
                -- Return the job data
                return item
 LUA;
-               return $this->redisEval( $conn, $script,
+               return $conn->luaEval( $script,
                        array(
                                $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
                                $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
@@ -377,7 +378,7 @@ LUA;
                redis.call('hIncrBy',KEYS[5],id,1)
                return redis.call('hGet',KEYS[6],id)
 LUA;
-               return $this->redisEval( $conn, $script,
+               return $conn->luaEval( $script,
                        array(
                                $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
                                $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
@@ -398,13 +399,12 @@ LUA;
         * @throws MWException
         */
        protected function doAck( Job $job ) {
+               if ( !isset( $job->metadata['uuid'] ) ) {
+                       throw new MWException( "Job of type '{$job->getType()}' has no UUID." );
+               }
                if ( $this->claimTTL > 0 ) {
                        $conn = $this->getConnection();
                        try {
-                               // Get the exact field map this Job came from, regardless of whether
-                               // the job was transformed into a DuplicateJob or anything of the sort.
-                               $item = $job->metadata['sourceFields'];
-
                                static $script =
 <<<LUA
                                -- Unmark the job as claimed
@@ -413,12 +413,12 @@ LUA;
                                -- Delete the job data itself
                                return redis.call('hDel',KEYS[3],ARGV[1])
 LUA;
-                               $res = $this->redisEval( $conn, $script,
+                               $res = $conn->luaEval( $script,
                                        array(
                                                $this->getQueueKey( 'z-claimed' ), # KEYS[1]
                                                $this->getQueueKey( 'h-attempts' ), # KEYS[2]
                                                $this->getQueueKey( 'h-data' ), # KEYS[3]
-                                               $item['uuid'] # ARGV[1]
+                                               $job->metadata['uuid'] # ARGV[1]
                                        ),
                                        3 # number of first argument(s) that are keys
                                );
@@ -467,13 +467,10 @@ LUA;
         * @return bool
         */
        protected function doIsRootJobOldDuplicate( Job $job ) {
-               $params = $job->getParams();
-               if ( !isset( $params['rootJobSignature'] ) ) {
+               if ( !$job->hasRootJobParams() ) {
                        return false; // job has no de-deplication info
-               } elseif ( !isset( $params['rootJobTimestamp'] ) ) {
-                       wfDebugLog( 'JobQueueRedis', "Cannot check root job; missing 'rootJobTimestamp'." );
-                       return false;
                }
+               $params = $job->getRootJobParams();
 
                $conn = $this->getConnection();
                try {
@@ -493,9 +490,6 @@ LUA;
         */
        public function getAllQueuedJobs() {
                $conn = $this->getConnection();
-               if ( !$conn ) {
-                       throw new MWException( "Unable to connect to redis server." );
-               }
                try {
                        $that = $this;
                        return new MappedIterator(
@@ -515,9 +509,6 @@ LUA;
         */
        public function getAllDelayedJobs() {
                $conn = $this->getConnection();
-               if ( !$conn ) {
-                       throw new MWException( "Unable to connect to redis server." );
-               }
                try {
                        $that = $this;
                        return new MappedIterator( // delayed jobs
@@ -547,7 +538,7 @@ LUA;
                        }
                        $title = Title::makeTitle( $item['namespace'], $item['title'] );
                        $job = Job::factory( $item['type'], $title, $item['params'] );
-                       $job->metadata['sourceFields'] = $item;
+                       $job->metadata['uuid'] = $item['uuid'];
                        return $job;
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
@@ -576,7 +567,7 @@ LUA;
                        end
                        return #ids
 LUA;
-                       $count += (int)$this->redisEval( $conn, $script,
+                       $count += (int)$conn->luaEval( $script,
                                array(
                                        $this->getQueueKey( 'z-delayed' ), // KEYS[1]
                                        $this->getQueueKey( 'l-unclaimed' ), // KEYS[2]
@@ -642,7 +633,7 @@ LUA;
                        end
                        return {released,abandoned,pruned}
 LUA;
-                       $res = $this->redisEval( $conn, $script,
+                       $res = $conn->luaEval( $script,
                                array(
                                        $this->getQueueKey( 'z-claimed' ), # KEYS[1]
                                        $this->getQueueKey( 'h-attempts' ), # KEYS[2]
@@ -658,7 +649,8 @@ LUA;
                        if ( $res ) {
                                list( $released, $abandoned, $pruned ) = $res;
                                $count += $released + $pruned;
-                               wfIncrStats( 'job-recycle', count( $released ) );
+                               JobQueue::incrStats( 'job-recycle', $this->type, $released );
+                               JobQueue::incrStats( 'job-abandon', $this->type, $abandoned );
                        }
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $this->server, $conn, $e );
@@ -687,33 +679,6 @@ LUA;
                return $tasks;
        }
 
-       /**
-        * @param RedisConnRef $conn
-        * @param string $script
-        * @param array $params
-        * @param integer $numKeys
-        * @return mixed
-        */
-       protected function redisEval( RedisConnRef $conn, $script, array $params, $numKeys ) {
-               $sha1 = sha1( $script ); // 40 char hex
-
-               // Try to run the server-side cached copy of the script
-               $conn->clearLastError();
-               $res = $conn->evalSha( $sha1, $params, $numKeys );
-               // If the script is not in cache, use eval() to retry and cache it
-               if ( $conn->getLastError() && $conn->script( 'exists', $sha1 ) === array( 0 ) ) {
-                       $conn->clearLastError();
-                       $res = $conn->eval( $script, $params, $numKeys );
-                       wfDebugLog( 'JobQueueRedis', "Used eval() for Lua script $sha1." );
-               }
-
-               if ( $conn->getLastError() ) { // script bug?
-                       wfDebugLog( 'JobQueueRedis', "Lua script error: " . $conn->getLastError() );
-               }
-
-               return $res;
-       }
-
        /**
         * @param $job Job
         * @return array
@@ -744,7 +709,7 @@ LUA;
                $title = Title::makeTitleSafe( $fields['namespace'], $fields['title'] );
                if ( $title ) {
                        $job = Job::factory( $fields['type'], $title, $fields['params'] );
-                       $job->metadata['sourceFields'] = $fields;
+                       $job->metadata['uuid'] = $fields['uuid'];
                        return $job;
                }
                return false;
index 05abeee..0be03b3 100644 (file)
@@ -90,33 +90,33 @@ class DoubleRedirectJob extends Job {
 
                $targetRev = Revision::newFromTitle( $this->title, false, Revision::READ_LATEST );
                if ( !$targetRev ) {
-                       wfDebug( __METHOD__.": target redirect already deleted, ignoring\n" );
+                       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" );
+                       wfDebug( __METHOD__ . ": Redirect has changed since the job was queued\n" );
                        return true;
                }
 
                # Check for a suppression tag (used e.g. in periodically archived discussions)
                $mw = MagicWord::get( 'staticredirect' );
                if ( $content->matchMagicWord( $mw ) ) {
-                       wfDebug( __METHOD__.": skipping: suppressed with __STATICREDIRECT__\n" );
+                       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 ) ) {
                        # The redirect is already right, no need to change it
                        # This can happen if the page was moved back (say after vandalism)
-                       wfDebug( __METHOD__.": skipping, already good\n" );
+                       wfDebug( __METHOD__ . " : skipping, already good\n" );
                }
 
                # Preserve fragment (bug 14904)
index 524983b..be1bfe5 100644 (file)
@@ -45,7 +45,7 @@ final class DuplicateJob extends Job {
         * @return Job
         */
        public static function newFromJob( Job $job ) {
-               $djob = new self( $job->getTitle(), $job->getParams(), $job->getId() );
+               $djob = new self( $job->getTitle(), $job->getParams(), $job->id );
                $djob->command = $job->getType();
                $djob->params = is_array( $djob->params ) ? $djob->params : array();
                $djob->params = array( 'isDuplicate' => true ) + $djob->params;
index 818c6ab..376b388 100644 (file)
@@ -79,8 +79,16 @@ class HTMLCacheUpdateJob extends Job {
         * Update all of the backlinks
         */
        protected function doFullUpdate() {
+               global $wgMaxBacklinksInvalidate;
+
                # Get an estimate of the number of rows from the BacklinkCache
-               $numRows = $this->blCache->getNumLinks( $this->params['table'] );
+               $max = max( $this->rowsPerJob * 2, $wgMaxBacklinksInvalidate ) + 1;
+               $numRows = $this->blCache->getNumLinks( $this->params['table'], $max );
+               if ( $wgMaxBacklinksInvalidate !== false && $numRows > $wgMaxBacklinksInvalidate ) {
+                       wfDebug( "Skipped HTML cache invalidation of {$this->title->getPrefixedText()}." );
+                       return true;
+               }
+
                if ( $numRows > $this->rowsPerJob * 2 ) {
                        # Do fast cached partition
                        $this->insertPartitionJobs();
@@ -90,12 +98,13 @@ class HTMLCacheUpdateJob extends Job {
                        # Check if the row count estimate was correct
                        if ( $titleArray->count() > $this->rowsPerJob * 2 ) {
                                # Not correct, do accurate partition
-                               wfDebug( __METHOD__.": row count estimate was incorrect, repartitioning\n" );
+                               wfDebug( __METHOD__ . ": row count estimate was incorrect, repartitioning\n" );
                                $this->insertJobsFromTitles( $titleArray );
                        } else {
                                $this->invalidateTitles( $titleArray ); // just do the query
                        }
                }
+
                return true;
        }
 
@@ -161,13 +170,13 @@ class HTMLCacheUpdateJob extends Job {
                                'end'   => $this->params['end']
                        ) + $rootJobParams // carry over information for de-duplication
                );
-               wfDebug( __METHOD__.": repartitioning into " . count( $jobs ) . " jobs\n" );
+               wfDebug( __METHOD__ . ": repartitioning into " . count( $jobs ) . " jobs\n" );
 
                if ( count( $jobs ) < 2 ) {
                        # I don't think this is possible at present, but handling this case
                        # makes the code a bit more robust against future code updates and
                        # avoids a potential infinite loop of repartitioning
-                       wfDebug( __METHOD__.": repartitioning failed!\n" );
+                       wfDebug( __METHOD__ . ": repartitioning failed!\n" );
                        $this->invalidateTitles( $titleArray );
                } else {
                        JobQueueGroup::singleton()->push( $jobs );
index 9dbe827..261ae63 100644 (file)
@@ -37,14 +37,11 @@ class RefreshLinksJob extends Job {
         * @return boolean success
         */
        function run() {
-               wfProfileIn( __METHOD__ );
-
                $linkCache = LinkCache::singleton();
                $linkCache->clear();
 
                if ( is_null( $this->title ) ) {
                        $this->error = "refreshLinks: Invalid title";
-                       wfProfileOut( __METHOD__ );
                        return false;
                }
 
@@ -59,13 +56,11 @@ class RefreshLinksJob extends Job {
                if ( !$revision ) {
                        $this->error = 'refreshLinks: Article not found "' .
                                $this->title->getPrefixedDBkey() . '"';
-                       wfProfileOut( __METHOD__ );
                        return false; // XXX: what if it was just deleted?
                }
 
                self::runForTitleInternal( $this->title, $revision, __METHOD__ );
 
-               wfProfileOut( __METHOD__ );
                return true;
        }
 
@@ -123,14 +118,11 @@ class RefreshLinksJob2 extends Job {
        function run() {
                global $wgUpdateRowsPerJob;
 
-               wfProfileIn( __METHOD__ );
-
                $linkCache = LinkCache::singleton();
                $linkCache->clear();
 
                if ( is_null( $this->title ) ) {
                        $this->error = "refreshLinks2: Invalid title";
-                       wfProfileOut( __METHOD__ );
                        return false;
                }
 
@@ -158,7 +150,7 @@ class RefreshLinksJob2 extends Job {
                        $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 ) {
+                       if ( $tbc->getNumLinks( $table, $wgUpdateRowsPerJob + 1 ) <= $wgUpdateRowsPerJob ) {
                                # Just directly insert the single per-title jobs
                                $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
                        } else {
@@ -181,7 +173,6 @@ class RefreshLinksJob2 extends Job {
                        JobQueueGroup::singleton()->push( $jobs );
                }
 
-               wfProfileOut( __METHOD__ );
                return true;
        }
 
index 8a9e6db..1e0e54f 100644 (file)
@@ -55,8 +55,8 @@ class DeleteLogFormatter extends LogFormatter {
                        ) {
                                $paramStart = $subtype === 'revision' ? 4 : 3;
 
-                               $old = $this->parseBitField( $params[$paramStart+1] );
-                               $new = $this->parseBitField( $params[$paramStart+2] );
+                               $old = $this->parseBitField( $params[$paramStart + 1] );
+                               $new = $this->parseBitField( $params[$paramStart + 2] );
                                list( $hid, $unhid, $extra ) = RevisionDeleter::getChanges( $new, $old );
                                $changes = array();
                                foreach ( $hid as $v ) {
index 501af7d..fd598df 100644 (file)
@@ -97,7 +97,7 @@ class LogEventsList extends ContextSource {
         * @param $filter: array
         * @param $tagFilter: array?
         */
-       public function showOptions( $types=array(), $user = '', $page = '', $pattern = '', $year = '',
+       public function showOptions( $types = array(), $user = '', $page = '', $pattern = '', $year = '',
                $month = '', $filter = null, $tagFilter = '' ) {
                global $wgScript, $wgMiserMode;
 
@@ -467,7 +467,7 @@ class LogEventsList extends ContextSource {
         * @return Integer Number of total log items (not limited by $lim)
         */
        public static function showLogExtract(
-               &$out, $types=array(), $page = '', $user = '', $param = array()
+               &$out, $types = array(), $page = '', $user = '', $param = array()
        ) {
                $defaultParameters = array(
                        'lim' => 25,
index 4191c57..36ba200 100644 (file)
@@ -262,7 +262,7 @@ class LogPage {
                                        // User suppression
                                        if ( preg_match( '/^(block|suppress)\/(block|reblock)$/', $key ) ) {
                                                if ( $skin ) {
-                                                       $params[1] = '<span class="blockExpiry" dir="ltr" title="' . htmlspecialchars( $params[1] ). '">' .
+                                                       $params[1] = '<span class="blockExpiry" dir="ltr" title="' . htmlspecialchars( $params[1] ) . '">' .
                                                                $wgLang->translateBlockExpiry( $params[1] ) . '</span>';
                                                } else {
                                                        $params[1] = $wgContLang->translateBlockExpiry( $params[1] );
index 0a39a2c..a7aa82f 100644 (file)
@@ -185,7 +185,7 @@ class DjVuHandler extends ImageHandler {
                }
                $cmd .= ' > ' . wfEscapeShellArg( $dstPath ) . ') 2>&1';
                wfProfileIn( 'ddjvu' );
-               wfDebug( __METHOD__.": $cmd\n" );
+               wfDebug( __METHOD__ . ": $cmd\n" );
                $retval = '';
                $err = wfShellExec( $cmd, $retval );
                wfProfileOut( 'ddjvu' );
@@ -294,7 +294,7 @@ class DjVuHandler extends ImageHandler {
        }
 
        function isMetadataValid( $image, $metadata ) {
-               return !empty( $metadata ) && $metadata != serialize(array());
+               return !empty( $metadata ) && $metadata != serialize( array() );
        }
 
        function pageCount( $image ) {
@@ -311,7 +311,7 @@ class DjVuHandler extends ImageHandler {
                        return false;
                }
 
-               $o = $tree->BODY[0]->OBJECT[$page-1];
+               $o = $tree->BODY[0]->OBJECT[$page - 1];
                if ( $o ) {
                        return array(
                                'width' => intval( $o['width'] ),
@@ -328,7 +328,7 @@ class DjVuHandler extends ImageHandler {
                        return false;
                }
 
-               $o = $tree->BODY[0]->PAGE[$page-1];
+               $o = $tree->BODY[0]->PAGE[$page - 1];
                if ( $o ) {
                        $txt = $o['value'];
                        return $txt;
index 0831e68..5d31898 100644 (file)
@@ -280,7 +280,7 @@ EOR;
                                $txt = preg_replace_callback( $reg, array( $this, 'pageTextCallback' ), $txt );
                                $txt = "<DjVuTxt>\n<HEAD></HEAD>\n<BODY>\n" . $txt . "</BODY>\n</DjVuTxt>\n";
                                $xml = preg_replace( "/<DjVuXML>/", "<mw-djvu><DjVuXML>", $xml, 1 );
-                               $xml = $xml . $txt. '</mw-djvu>';
+                               $xml = $xml . $txt . '</mw-djvu>';
                        }
                }
                wfProfileOut( __METHOD__ );
index 52d3195..5581503 100644 (file)
@@ -36,6 +36,7 @@ class Exif {
        const SHORT = 3; //!< A 16-bit (2-byte) unsigned integer.
        const LONG = 4; //!< A 32-bit (4-byte) unsigned integer.
        const RATIONAL = 5; //!< Two LONGs. The first LONG is the numerator and the second LONG expresses the denominator
+       const SHORT_OR_LONG = 6; //!< A 16-bit (2-byte) or 32-bit (4-byte) unsigned integer.
        const UNDEFINED = 7; //!< An 8-bit byte that can take any value depending on the field definition
        const SLONG = 9; //!< A 32-bit (4-byte) signed integer (2's complement notation),
        const SRATIONAL = 10; //!< Two SLONGs. The first SLONG is the numerator and the second SLONG is the denominator.
@@ -124,8 +125,8 @@ class Exif {
                        # TIFF Rev. 6.0 Attribute Information (p22)
                        'IFD0' => array(
                                # Tags relating to image structure
-                               'ImageWidth' => Exif::SHORT.','.Exif::LONG,             # Image width
-                               'ImageLength' => Exif::SHORT.','.Exif::LONG,            # Image height
+                               'ImageWidth' => Exif::SHORT_OR_LONG,            # Image width
+                               'ImageLength' => Exif::SHORT_OR_LONG,           # Image height
                                'BitsPerSample' => array( Exif::SHORT, 3 ),             # Number of bits per component
                                # "When a primary image is JPEG compressed, this designation is not"
                                # "necessary and is omitted." (p23)
@@ -134,25 +135,25 @@ class Exif {
                                'Orientation' => Exif::SHORT,                           # Orientation of image #p24
                                'SamplesPerPixel' => Exif::SHORT,                       # Number of components
                                'PlanarConfiguration' => Exif::SHORT,                   # Image data arrangement #p24
-                               'YCbCrSubSampling' => array( Exif::SHORT, 2),           # Subsampling ratio of Y to C #p24
+                               'YCbCrSubSampling' => array( Exif::SHORT, 2 ),          # Subsampling ratio of Y to C #p24
                                'YCbCrPositioning' => Exif::SHORT,                      # Y and C positioning #p24-25
                                'XResolution' => Exif::RATIONAL,                        # Image resolution in width direction
                                'YResolution' => Exif::RATIONAL,                        # Image resolution in height direction
                                'ResolutionUnit' => Exif::SHORT,                        # Unit of X and Y resolution #(p26)
 
                                # Tags relating to recording offset
-                               'StripOffsets' => Exif::SHORT.','.Exif::LONG,                   # Image data location
-                               'RowsPerStrip' => Exif::SHORT.','.Exif::LONG,                   # Number of rows per strip
-                               'StripByteCounts' => Exif::SHORT.','.Exif::LONG,                # Bytes per compressed strip
-                               'JPEGInterchangeFormat' => Exif::SHORT.','.Exif::LONG,          # Offset to JPEG SOI
-                               'JPEGInterchangeFormatLength' => Exif::SHORT.','.Exif::LONG,    # Bytes of JPEG data
+                               'StripOffsets' => Exif::SHORT_OR_LONG,                  # Image data location
+                               'RowsPerStrip' => Exif::SHORT_OR_LONG,                  # Number of rows per strip
+                               'StripByteCounts' => Exif::SHORT_OR_LONG,               # Bytes per compressed strip
+                               'JPEGInterchangeFormat' => Exif::SHORT_OR_LONG,         # Offset to JPEG SOI
+                               'JPEGInterchangeFormatLength' => Exif::SHORT_OR_LONG,   # Bytes of JPEG data
 
                                # Tags relating to image data characteristics
                                'TransferFunction' => Exif::IGNORE,                     # Transfer function
-                               'WhitePoint' => array( Exif::RATIONAL, 2),              # White point chromaticity
-                               'PrimaryChromaticities' => array( Exif::RATIONAL, 6),   # Chromaticities of primarities
-                               'YCbCrCoefficients' => array( Exif::RATIONAL, 3),       # Color space transformation matrix coefficients #p27
-                               'ReferenceBlackWhite' => array( Exif::RATIONAL, 6),     # Pair of black and white reference values
+                               'WhitePoint' => array( Exif::RATIONAL, 2 ),             # White point chromaticity
+                               'PrimaryChromaticities' => array( Exif::RATIONAL, 6 ),  # Chromaticities of primarities
+                               'YCbCrCoefficients' => array( Exif::RATIONAL, 3 ),      # Color space transformation matrix coefficients #p27
+                               'ReferenceBlackWhite' => array( Exif::RATIONAL, 6 ),    # Pair of black and white reference values
 
                                # Other tags
                                'DateTime' => Exif::ASCII,                              # File change date and time
@@ -168,7 +169,7 @@ class Exif {
                        'EXIF' => array(
                                # TODO: NOTE: Nonexistence of this field is taken to mean nonconformance
                                # to the EXIF 2.1 AND 2.2 standards
-                               'ExifVersion' =>  Exif::UNDEFINED,                      # Exif version
+                               'ExifVersion' => Exif::UNDEFINED,                       # Exif version
                                'FlashPixVersion' => Exif::UNDEFINED,                   # Supported Flashpix version #p32
 
                                # Tags relating to Image Data Characteristics
@@ -177,8 +178,8 @@ class Exif {
                                # Tags relating to image configuration
                                'ComponentsConfiguration' => Exif::UNDEFINED,                   # Meaning of each component #p33
                                'CompressedBitsPerPixel' => Exif::RATIONAL,                     # Image compression mode
-                               'PixelYDimension' => Exif::SHORT.','.Exif::LONG,                # Valid image width
-                               'PixelXDimension' => Exif::SHORT.','.Exif::LONG,                # Valid image height
+                               'PixelYDimension' => Exif::SHORT_OR_LONG,               # Valid image width
+                               'PixelXDimension' => Exif::SHORT_OR_LONG,               # Valid image height
 
                                # Tags relating to related user information
                                'MakerNote' => Exif::IGNORE,                            # Manufacturer notes
@@ -218,7 +219,7 @@ class Exif {
                                'FocalPlaneXResolution' => Exif::RATIONAL,              # Focal plane X resolution
                                'FocalPlaneYResolution' => Exif::RATIONAL,              # Focal plane Y resolution
                                'FocalPlaneResolutionUnit' => Exif::SHORT,              # Focal plane resolution unit #p46
-                               'SubjectLocation' => array( Exif::SHORT, 2),            # Subject location
+                               'SubjectLocation' => array( Exif::SHORT, 2 ),           # Subject location
                                'ExposureIndex' => Exif::RATIONAL,                      # Exposure index
                                'SensingMethod' => Exif::SHORT,                         # Sensing method #p46
                                'FileSource' => Exif::UNDEFINED,                        # File source #p47
@@ -250,12 +251,12 @@ class Exif {
                                'GPSLatitudeRef' => Exif::ASCII,                        # North or South Latitude #p52-53
                                'GPSLatitude' => array( Exif::RATIONAL, 3 ),            # Latitude
                                'GPSLongitudeRef' => Exif::ASCII,                       # East or West Longitude #p53
-                               'GPSLongitude' => array( Exif::RATIONAL, 3),            # Longitude
+                               'GPSLongitude' => array( Exif::RATIONAL, 3 ),           # Longitude
                                'GPSAltitudeRef' => Exif::UNDEFINED,
                                # Altitude reference. Note, the exif standard says this should be an EXIF::Byte,
                                # but php seems to disagree.
                                'GPSAltitude' => Exif::RATIONAL,                        # Altitude
-                               'GPSTimeStamp' => array( Exif::RATIONAL, 3),            # GPS time (atomic clock)
+                               'GPSTimeStamp' => array( Exif::RATIONAL, 3 ),           # GPS time (atomic clock)
                                'GPSSatellites' => Exif::ASCII,                         # Satellites used for measurement
                                'GPSStatus' => Exif::ASCII,                             # Receiver status #p54
                                'GPSMeasureMode' => Exif::ASCII,                        # Measurement mode #p54-55
@@ -772,6 +773,9 @@ class Exif {
                        case (string)Exif::RATIONAL:
                                $this->debug( $val, __FUNCTION__, $debug );
                                return $this->isRational( $val );
+                       case (string)Exif::SHORT_OR_LONG:
+                               $this->debug( $val, __FUNCTION__, $debug );
+                               return $this->isShort( $val ) || $this->isLong( $val );
                        case (string)Exif::UNDEFINED:
                                $this->debug( $val, __FUNCTION__, $debug );
                                return $this->isUndefined( $val );
@@ -781,9 +785,6 @@ class Exif {
                        case (string)Exif::SRATIONAL:
                                $this->debug( $val, __FUNCTION__, $debug );
                                return $this->isSrational( $val );
-                       case (string)Exif::SHORT.','.Exif::LONG:
-                               $this->debug( $val, __FUNCTION__, $debug );
-                               return $this->isShort( $val ) || $this->isLong( $val );
                        case (string)Exif::IGNORE:
                                $this->debug( $val, __FUNCTION__, $debug );
                                return false;
index 6a4e753..6a46cc0 100644 (file)
@@ -157,7 +157,7 @@ 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
index a1b3fd8..6e04b3d 100644 (file)
@@ -396,7 +396,7 @@ class IPTC {
                        return null;
                }
 
-               $tz = ( intval( substr( $time, 7, 2 ) ) *60*60 )
+               $tz = ( intval( substr( $time, 7, 2 ) ) * 60 * 60 )
                        + ( intval( substr( $time, 9, 2 ) ) * 60 );
 
                if ( substr( $time, 6, 1 ) === '-' ) {
index ad9919b..d2bf1f3 100644 (file)
@@ -58,7 +58,7 @@ abstract class ImageHandler extends MediaHandler {
                } elseif ( isset( $params['width'] ) ) {
                        $width = $params['width'];
                } else {
-                       throw new MWException( 'No width specified to '.__METHOD__ );
+                       throw new MWException( 'No width specified to ' . __METHOD__ );
                }
                # Removed for ProofreadPage
                #$width = intval( $width );
@@ -187,7 +187,7 @@ abstract class ImageHandler extends MediaHandler {
                if ( !$this->normaliseParams( $image, $params ) ) {
                        return false;
                }
-               $url = $script . '&' . wfArrayToCgi( $this->getScriptParams( $params ) );
+               $url = wfAppendQuery( $script, $this->getScriptParams( $params ) );
 
                if( $image->mustRender() || $params['width'] < $image->getWidth() ) {
                        return new ThumbnailImage( $image, $url, false, $params );
index 1c2dfdd..2616edb 100644 (file)
@@ -301,7 +301,7 @@ class ThumbnailImage extends MediaTransformOutput {
         */
        function toHtml( $options = array() ) {
                if ( count( func_get_args() ) == 2 ) {
-                       throw new MWException( __METHOD__ .' called in the old style' );
+                       throw new MWException( __METHOD__ . ' called in the old style' );
                }
 
                $alt = empty( $options['alt'] ) ? '' : $options['alt'];
index f21d6b0..592403a 100644 (file)
@@ -78,7 +78,12 @@ class SVGReader {
                // Expand entities, since Adobe Illustrator uses them for xmlns
                // attributes (bug 31719). Note that libxml2 has some protection
                // against large recursive entity expansions so this is not as
-               // insecure as it might appear to be.
+               // insecure as it might appear to be. However, it is still extremely
+               // insecure. It's necessary to wrap any read() calls with
+               // libxml_disable_entity_loader() to avoid arbitrary local file
+               // inclusion, or even arbitrary code execution if the expect
+               // extension is installed (bug 46859).
+               $oldDisable = libxml_disable_entity_loader( true );
                $this->reader->setParserProperty( XMLReader::SUBST_ENTITIES, true );
 
                $this->metadata['width'] = self::DEFAULT_WIDTH;
@@ -100,9 +105,11 @@ class SVGReader {
                        // Note, if this happens, the width/height will be taken to be 0x0.
                        // Should we consider it the default 512x512 instead?
                        wfRestoreWarnings();
+                       libxml_disable_entity_loader( $oldDisable );
                        throw $e;
                }
                wfRestoreWarnings();
+               libxml_disable_entity_loader( $oldDisable );
        }
 
        /**
@@ -117,7 +124,7 @@ class SVGReader {
         * @throws MWException
         * @return bool
         */
-       public function read() {
+       protected function read() {
                $keepReading = $this->reader->read();
 
                /* Skip until first element */
@@ -126,7 +133,7 @@ class SVGReader {
                }
 
                if ( $this->reader->localName != 'svg' || $this->reader->namespaceURI != self::NS_SVG ) {
-                       throw new MWException( "Expected <svg> tag, got ".
+                       throw new MWException( "Expected <svg> tag, got " .
                                $this->reader->localName . " in NS " . $this->reader->namespaceURI );
                }
                $this->debug( "<svg> tag is correct." );
@@ -178,7 +185,7 @@ class SVGReader {
         * @param string $name of the element that we are reading from
         * @param string $metafield that we will fill with the result
         */
-       private function readField( $name, $metafield=null ) {
+       private function readField( $name, $metafield = null ) {
                $this->debug( "Read field $metafield" );
                if( !$metafield || $this->reader->nodeType != XmlReader::ELEMENT ) {
                        return;
@@ -200,7 +207,7 @@ class SVGReader {
         * @param string $metafield that we will fill with the result
         * @throws MWException
         */
-       private function readXml( $metafield=null ) {
+       private function readXml( $metafield = null ) {
                $this->debug( "Read top level metadata" );
                if( !$metafield || $this->reader->nodeType != XmlReader::ELEMENT ) {
                        return;
index 3b64fd3..feacc2a 100644 (file)
@@ -428,7 +428,7 @@ class XMPInfo {
                                'mode'      => XMPReader::MODE_SIMPLE,
                                'validate'  => 'validateClosed',
                                /* can't use a range, as it skips... */
-                               'choices'   =>  array( '0' => true, '1' => true,
+                               'choices'   => array( '0' => true, '1' => true,
                                        '2' => true, '3' => true, '4' => true,
                                        '9' => true, '10' => true, '11' => true,
                                        '12' => true, '13' => true,
index f727400..3e29c12 100644 (file)
@@ -346,8 +346,8 @@ class XMPValidate {
                        $val, $m )
                ) {
                        $coord = intval( $m[1] );
-                       $coord += intval( $m[2] ) * (1/60);
-                       $coord += intval( $m[3] ) * (1/3600);
+                       $coord += intval( $m[2] ) * ( 1 / 60 );
+                       $coord += intval( $m[3] ) * ( 1 / 3600 );
                        if ( $m[4] === 'S' || $m[4] === 'W' ) {
                                $coord = -$coord;
                        }
@@ -358,7 +358,7 @@ class XMPValidate {
                        $val, $m )
                ) {
                        $coord = intval( $m[1] );
-                       $coord += floatval( $m[2] ) * (1/60);
+                       $coord += floatval( $m[2] ) * ( 1 / 60 );
                        if ( $m[3] === 'S' || $m[3] === 'W' ) {
                                $coord = -$coord;
                        }
index dd74467..fbde251 100644 (file)
@@ -175,7 +175,7 @@ abstract class BagOStuff {
                }
 
                $uRTT = ceil( 1e6 * ( microtime( true ) - $timestamp ) ); // estimate RTT (us)
-               $sleep = 2*$uRTT; // rough time to do get()+set()
+               $sleep = 2 * $uRTT; // rough time to do get()+set()
 
                $locked = false; // lock acquired
                $attempts = 0; // failed attempts
index 3192429..748c423 100644 (file)
@@ -87,13 +87,13 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                                break;
                        case 'igbinary':
                                if ( !Memcached::HAVE_IGBINARY ) {
-                                       throw new MWException( __CLASS__.': the igbinary extension is not available ' .
+                                       throw new MWException( __CLASS__ . ': the igbinary extension is not available ' .
                                                'but igbinary serialization was requested.' );
                                }
                                $this->client->setOption( Memcached::OPT_SERIALIZER, Memcached::SERIALIZER_IGBINARY );
                                break;
                        default:
-                               throw new MWException( __CLASS__.': invalid value for serializer parameter' );
+                               throw new MWException( __CLASS__ . ': invalid value for serializer parameter' );
                }
                $servers = array();
                foreach ( $params['servers'] as $host ) {
index 92afaac..e550c0d 100644 (file)
@@ -43,7 +43,7 @@ class MultiWriteBagOStuff extends BagOStuff {
         */
        public function __construct( $params ) {
                if ( !isset( $params['caches'] ) ) {
-                       throw new MWException( __METHOD__.': the caches parameter is required' );
+                       throw new MWException( __METHOD__ . ': the caches parameter is required' );
                }
 
                $this->caches = array();
index 08b1f3e..8103b60 100644 (file)
@@ -205,7 +205,7 @@ class DateFormatter {
                $key = $this->keys[$this->mSource];
                for ( $p = 0; $p < strlen( $key ); $p++ ) {
                        if ( $key[$p] != ' ' ) {
-                               $bits[$key[$p]] = $matches[$p+1];
+                               $bits[$key[$p]] = $matches[$p + 1];
                        }
                }
 
index 611eb02..3ada925 100644 (file)
@@ -501,6 +501,11 @@ class Parser {
                                "Highest expansion depth: {$this->mHighestExpansionDepth}/{$this->mOptions->getMaxPPExpandDepth()}\n" .
                                $PFreport;
                        wfRunHooks( 'ParserLimitReport', array( $this, &$limitReport ) );
+
+                       // Sanitize for comment. Note '‐' in the replacement is U+2010,
+                       // which looks much like the problematic '-'.
+                       $limitReport = str_replace( array( '-', '&' ), array( '‐', '&amp;' ), $limitReport );
+
                        $text .= "\n<!-- \n$limitReport-->\n";
 
                        if ( $this->mGeneratedPPNodeCount > $this->mOptions->getMaxGeneratedPPNodeCount() / 10 ) {
@@ -531,7 +536,7 @@ class Parser {
         *
         * @return string
         */
-       function recursiveTagParse( $text, $frame=false ) {
+       function recursiveTagParse( $text, $frame = false ) {
                wfProfileIn( __METHOD__ );
                wfRunHooks( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
                wfRunHooks( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) );
@@ -1374,12 +1379,12 @@ class Parser {
                                        # If there are ever four apostrophes, assume the first is supposed to
                                        # be text, and the remaining three constitute mark-up for bold text.
                                        if ( strlen( $arr[$i] ) == 4 ) {
-                                               $arr[$i-1] .= "'";
+                                               $arr[$i - 1] .= "'";
                                                $arr[$i] = "'''";
                                        } elseif ( strlen( $arr[$i] ) > 5 ) {
                                                # If there are more than 5 apostrophes in a row, assume they're all
                                                # text except for the last 5.
-                                               $arr[$i-1] .= str_repeat( "'", strlen( $arr[$i] ) - 5 );
+                                               $arr[$i - 1] .= str_repeat( "'", strlen( $arr[$i] ) - 5 );
                                                $arr[$i] = "'''''";
                                        }
                                        # Count the number of occurrences of bold and italics mark-ups.
@@ -1406,8 +1411,8 @@ class Parser {
                                $firstspace = -1;
                                foreach ( $arr as $r ) {
                                        if ( ( $i % 2 == 1 ) and ( strlen( $r ) == 3 ) ) {
-                                               $x1 = substr( $arr[$i-1], -1 );
-                                               $x2 = substr( $arr[$i-1], -2, 1 );
+                                               $x1 = substr( $arr[$i - 1], -1 );
+                                               $x2 = substr( $arr[$i - 1], -2, 1 );
                                                if ( $x1 === ' ' ) {
                                                        if ( $firstspace == -1 ) {
                                                                $firstspace = $i;
@@ -1428,17 +1433,17 @@ class Parser {
                                # If there is a single-letter word, use it!
                                if ( $firstsingleletterword > -1 ) {
                                        $arr[$firstsingleletterword] = "''";
-                                       $arr[$firstsingleletterword-1] .= "'";
+                                       $arr[$firstsingleletterword - 1] .= "'";
                                } elseif ( $firstmultiletterword > -1 ) {
                                        # If not, but there's a multi-letter word, use that one.
                                        $arr[$firstmultiletterword] = "''";
-                                       $arr[$firstmultiletterword-1] .= "'";
+                                       $arr[$firstmultiletterword - 1] .= "'";
                                } elseif ( $firstspace > -1 ) {
                                        # ... otherwise use the first one that has neither.
                                        # (notice that it is possible for all three to be -1 if, for example,
                                        # there is only one pentuple-apostrophe in the line)
                                        $arr[$firstspace] = "''";
-                                       $arr[$firstspace-1] .= "'";
+                                       $arr[$firstspace - 1] .= "'";
                                }
                        }
 
@@ -1539,7 +1544,7 @@ class Parser {
                $s = array_shift( $bits );
 
                $i = 0;
-               while ( $i<count( $bits ) ) {
+               while ( $i < count( $bits ) ) {
                        $url = $bits[$i++];
                        $i++; // protocol
                        $text = $bits[$i++];
@@ -2155,7 +2160,7 @@ class Parser {
        function closeParagraph() {
                $result = '';
                if ( $this->mLastSection != '' ) {
-                       $result = '</' . $this->mLastSection  . ">\n";
+                       $result = '</' . $this->mLastSection . ">\n";
                }
                $this->mInPre = false;
                $this->mLastSection = '';
@@ -2350,13 +2355,13 @@ class Parser {
 
                                # Close all the prefixes which aren't shared.
                                while ( $commonPrefixLength < $lastPrefixLength ) {
-                                       $output .= $this->closeList( $lastPrefix[$lastPrefixLength-1] );
+                                       $output .= $this->closeList( $lastPrefix[$lastPrefixLength - 1] );
                                        --$lastPrefixLength;
                                }
 
                                # Continue the current prefix if appropriate.
                                if ( $prefixLength <= $commonPrefixLength && $commonPrefixLength > 0 ) {
-                                       $output .= $this->nextItem( $prefix[$commonPrefixLength-1] );
+                                       $output .= $this->nextItem( $prefix[$commonPrefixLength - 1] );
                                }
 
                                # Open prefixes where appropriate.
@@ -2383,8 +2388,8 @@ class Parser {
                                # XXX: use a stack for nestable elements like span, table and div
                                $openmatch = preg_match( '/(?:<table|<blockquote|<h1|<h2|<h3|<h4|<h5|<h6|<pre|<tr|<p|<ul|<ol|<dl|<li|<\\/tr|<\\/td|<\\/th)/iS', $t );
                                $closematch = preg_match(
-                                       '/(?:<\\/table|<\\/blockquote|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|'.
-                                       '<td|<th|<\\/?div|<hr|<\\/pre|<\\/p|'.$this->mUniqPrefix . '-pre|<\\/li|<\\/ul|<\\/ol|<\\/dl|<\\/?center)/iS', $t );
+                                       '/(?:<\\/table|<\\/blockquote|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|' .
+                                       '<td|<th|<\\/?div|<hr|<\\/pre|<\\/p|' . $this->mUniqPrefix . '-pre|<\\/li|<\\/ul|<\\/ol|<\\/dl|<\\/?center)/iS', $t );
                                if ( $openmatch or $closematch ) {
                                        $paragraphStack = false;
                                        # TODO bug 5718: paragraph closed
@@ -2441,7 +2446,7 @@ class Parser {
                        }
                }
                while ( $prefixLength ) {
-                       $output .= $this->closeList( $prefix2[$prefixLength-1] );
+                       $output .= $this->closeList( $prefix2[$prefixLength - 1] );
                        --$prefixLength;
                }
                if ( $this->mLastSection != '' ) {
@@ -2477,7 +2482,7 @@ class Parser {
                if ( $lt === false || $lt > $pos ) {
                        # Easy; no tag nesting to worry about
                        $before = substr( $str, 0, $pos );
-                       $after = substr( $str, $pos+1 );
+                       $after = substr( $str, $pos + 1 );
                        wfProfileOut( __METHOD__ );
                        return $pos;
                }
@@ -3089,7 +3094,7 @@ class Parser {
                                $assocArgs[$index++] = $arg;
                        } else {
                                $name = trim( substr( $arg, 0, $eqpos ) );
-                               $value = trim( substr( $arg, $eqpos+1 ) );
+                               $value = trim( substr( $arg, $eqpos + 1 ) );
                                if ( $value === false ) {
                                        $value = '';
                                }
@@ -4094,7 +4099,7 @@ class Parser {
         * @return mixed|string
         * @private
         */
-       function formatHeadings( $text, $origText, $isMain=true ) {
+       function formatHeadings( $text, $origText, $isMain = true ) {
                global $wgMaxTocLevel, $wgHtml5, $wgExperimentalHtmlIds;
 
                # Inhibit editsection links if requested in the page
@@ -4111,7 +4116,7 @@ class Parser {
                # Get all headlines for numbering them and adding funky stuff like [edit]
                # links - this is for later, but we need the number of headlines right now
                $matches = array();
-               $numMatches = preg_match_all( '/<H(?P<level>[1-6])(?P<attrib>.*?'.'>)\s*(?P<header>[\s\S]*?)\s*<\/H[1-6] *>/i', $text, $matches );
+               $numMatches = preg_match_all( '/<H(?P<level>[1-6])(?P<attrib>.*?' . '>)\s*(?P<header>[\s\S]*?)\s*<\/H[1-6] *>/i', $text, $matches );
 
                # if there are fewer than 4 headlines in the article, do not show TOC
                # unless it's been explicitly enabled.
@@ -4260,14 +4265,14 @@ class Parser {
                        # We strip any parameter from accepted tags (second regex), except dir="rtl|ltr" from <span>,
                        # to allow setting directionality in toc items.
                        $tocline = preg_replace(
-                               array( '#<(?!/?(span|sup|sub|i|b)(?: [^>]*)?>).*?'.'>#', '#<(/?(?:span(?: dir="(?:rtl|ltr)")?|sup|sub|i|b))(?: .*?)?'.'>#' ),
+                               array( '#<(?!/?(span|sup|sub|i|b)(?: [^>]*)?>).*?' . '>#', '#<(/?(?:span(?: dir="(?:rtl|ltr)")?|sup|sub|i|b))(?: .*?)?' . '>#' ),
                                array( '', '<$1>' ),
                                $safeHeadline
                        );
                        $tocline = trim( $tocline );
 
                        # For the anchor, strip out HTML-y stuff period
-                       $safeHeadline = preg_replace( '/<.*?'.'>/', '', $safeHeadline );
+                       $safeHeadline = preg_replace( '/<.*?' . '>/', '', $safeHeadline );
                        $safeHeadline = Sanitizer::normalizeSectionNameWhitespace( $safeHeadline );
 
                        # Save headline for section edit hint before it's escaped
index 7cb91da..1e90928 100644 (file)
@@ -72,9 +72,8 @@ class Preprocessor_DOM implements Preprocessor {
                $xml = "<list>";
 
                foreach ( $values as $k => $val ) {
-
                        if ( is_int( $k ) ) {
-                               $xml .= "<part><name index=\"$k\"/><value>" . htmlspecialchars( $val ) ."</value></part>";
+                               $xml .= "<part><name index=\"$k\"/><value>" . htmlspecialchars( $val ) . "</value></part>";
                        } else {
                                $xml .= "<part><name>" . htmlspecialchars( $k ) . "</name>=<value>" . htmlspecialchars( $val ) . "</value></part>";
                        }
@@ -441,7 +440,7 @@ class Preprocessor_DOM implements Preprocessor {
                                }
 
                                $tagStartPos = $i;
-                               if ( $text[$tagEndPos-1] == '/' ) {
+                               if ( $text[$tagEndPos - 1] == '/' ) {
                                        $attrEnd = $tagEndPos - 1;
                                        $inner = null;
                                        $i = $tagEndPos + 1;
@@ -578,7 +577,7 @@ class Preprocessor_DOM implements Preprocessor {
                                                'open' => $curChar,
                                                'close' => $rule['end'],
                                                'count' => $count,
-                                               'lineStart' => ($i > 0 && $text[$i-1] == "\n"),
+                                               'lineStart' => ($i > 0 && $text[$i - 1] == "\n"),
                                        );
 
                                        $stack->push( $piece );
index 469ce80..465c5a6 100644 (file)
@@ -367,7 +367,7 @@ class Preprocessor_Hash implements Preprocessor {
                                }
 
                                $tagStartPos = $i;
-                               if ( $text[$tagEndPos-1] == '/' ) {
+                               if ( $text[$tagEndPos - 1] == '/' ) {
                                        // Short end tag
                                        $attrEnd = $tagEndPos - 1;
                                        $inner = null;
@@ -515,7 +515,7 @@ class Preprocessor_Hash implements Preprocessor {
                                                'open' => $curChar,
                                                'close' => $rule['end'],
                                                'count' => $count,
-                                               'lineStart' => ($i > 0 && $text[$i-1] == "\n"),
+                                               'lineStart' => ($i > 0 && $text[$i - 1] == "\n"),
                                        );
 
                                        $stack->push( $piece );
index c732b8d..e39a7b2 100644 (file)
@@ -53,8 +53,8 @@ function wfProfileOut( $functionname = 'missing' ) {
  * @todo document
  */
 class Profiler {
-       protected $mStack = array(), $mWorkStack = array (), $mCollated = array (),
-               $mCalls = array (), $mTotals = array ();
+       protected $mStack = array(), $mWorkStack = array(), $mCollated = array(),
+               $mCalls = array(), $mTotals = array();
        protected $mTimeMetric = 'wall';
        protected $mProfileID = false, $mCollateDone = false, $mTemplated = false;
        private static $__instance = null;
@@ -257,11 +257,11 @@ class Profiler {
                if( count( $stack ) < 2 ) {
                        return $stack;
                }
-               $outputs = array ();
+               $outputs = array();
                for( $max = count( $stack ) - 1; $max > 0; ) {
                        /* Find all items under this entry */
                        $level = $stack[$max][1];
-                       $working = array ();
+                       $working = array();
                        for( $i = $max -1; $i >= 0; $i-- ) {
                                if( $stack[$i][1] > $level ) {
                                        $working[] = $stack[$i];
@@ -557,9 +557,9 @@ class Profiler {
 
                                $rc = $dbw->affectedRows();
                                if ( $rc == 0 ) {
-                                       $dbw->insert( 'profiling', array ( 'pf_name' => $name, 'pf_count' => $eventCount,
+                                       $dbw->insert( 'profiling', array( 'pf_name' => $name, 'pf_count' => $eventCount,
                                                'pf_time' => $timeSum, 'pf_memory' => $memorySum, 'pf_server' => $pfhost ),
-                                               __METHOD__, array ( 'IGNORE' ) );
+                                               __METHOD__, array( 'IGNORE' ) );
                                }
                                // When we upgrade to mysql 4.1, the insert+update
                                // can be merged into just a insert with this construct added:
index 1d4873c..b59c528 100644 (file)
@@ -96,9 +96,9 @@ class ProfilerSimple extends Profiler {
                                $this->mCollated[$functionname] =& $entry;
                        }
                        $entry['cpu'] += $elapsedcpu;
-                       $entry['cpu_sq'] += $elapsedcpu*$elapsedcpu;
+                       $entry['cpu_sq'] += $elapsedcpu * $elapsedcpu;
                        $entry['real'] += $elapsedreal;
-                       $entry['real_sq'] += $elapsedreal*$elapsedreal;
+                       $entry['real_sq'] += $elapsedreal * $elapsedreal;
                        $entry['count']++;
 
                }
index 37350bf..1d57ea8 100644 (file)
@@ -51,17 +51,17 @@ class ProfilerSimpleText extends ProfilerSimple {
                        uasort( $this->mCollated, array( 'self', 'sort' ) );
                        array_walk( $this->mCollated, array( 'self', 'format' ), $totalReal );
                        if ( PHP_SAPI === 'cli' ) {
-                               print "<!--\n".self::$out."\n-->\n";
+                               print "<!--\n" . self::$out . "\n-->\n";
                        } elseif ( $this->getContentType() === 'text/html' ) {
                                if ( $this->visible ) {
-                                       print '<pre>'.self::$out.'</pre>';
+                                       print '<pre>' . self::$out . '</pre>';
                                } else {
-                                       print "<!--\n".self::$out."\n-->\n";
+                                       print "<!--\n" . self::$out . "\n-->\n";
                                }
                        } elseif ( $this->getContentType() === 'text/javascript' ) {
-                               print "\n/*\n".self::$out."*/\n";
+                               print "\n/*\n" . self::$out . "*/\n";
                        } elseif ( $this->getContentType() === 'text/css' ) {
-                               print "\n/*\n".self::$out."*/\n";
+                               print "\n/*\n" . self::$out . "*/\n";
                        }
                }
        }
@@ -71,7 +71,7 @@ class ProfilerSimpleText extends ProfilerSimple {
        }
 
        static function format( $item, $key, $totalReal ) {
-               $perc = $totalReal ? $item['real']/$totalReal*100 : 0;
+               $perc = $totalReal ? $item['real'] / $totalReal * 100 : 0;
                self::$out .= sprintf( "%6.2f%% %3.6f %6d - %s\n",
                        $perc, $item['real'], $item['count'], $key );
        }
index 5d335b0..dd613a7 100644 (file)
@@ -289,7 +289,7 @@ class ResourceLoader {
 
                // Add the testrunner (which configures QUnit) to the dependencies.
                // Since it must be ready before any of the test suites are executed.
-               foreach( $testModules['qunit'] as &$module ) {
+               foreach ( $testModules['qunit'] as &$module ) {
                        // Make sure all test modules are top-loading so that when QUnit starts
                        // on document-ready, it will run once and finish. If some tests arrive
                        // later (possibly after QUnit has already finished) they will be ignored.
@@ -297,7 +297,7 @@ class ResourceLoader {
                        $module['dependencies'][] = 'mediawiki.tests.qunit.testrunner';
                }
 
-               foreach( $testModules as $id => $names ) {
+               foreach ( $testModules as $id => $names ) {
                        // Register test modules
                        $this->register( $testModules[$id] );
 
@@ -472,7 +472,7 @@ class ResourceLoader {
                        $this->hasErrors = true;
                }
 
-               wfProfileIn( __METHOD__.'-getModifiedTime' );
+               wfProfileIn( __METHOD__ . '-getModifiedTime' );
 
                // To send Last-Modified and support If-Modified-Since, we need to detect
                // the last modified time
@@ -491,7 +491,7 @@ class ResourceLoader {
                        }
                }
 
-               wfProfileOut( __METHOD__.'-getModifiedTime' );
+               wfProfileOut( __METHOD__ . '-getModifiedTime' );
 
                // If there's an If-Modified-Since header, respond with a 304 appropriately
                if ( $this->tryRespondLastModified( $context, $mtime ) ) {
@@ -914,7 +914,7 @@ class ResourceLoader {
 
                                        if ( $media === '' || $media == 'all' ) {
                                                $out[] = $style;
-                                       } else if ( is_string( $media ) ) {
+                                       } elseif ( is_string( $media ) ) {
                                                $out[] = "@media $media {\n" . str_replace( "\n", "\n\t", "\t" . $style ) . "}";
                                        }
                                        // else: skip
index 24cdeb0..5919cde 100644 (file)
@@ -185,7 +185,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
         * @return string
         */
        public function getScript( ResourceLoaderContext $context ) {
-               global $IP, $wgLoadScript, $wgLegacyJavaScriptGlobals;
+               global $IP, $wgLegacyJavaScriptGlobals;
 
                $out = file_get_contents( "$IP/resources/startup.js" );
                if ( $context->getOnly() === 'scripts' ) {
@@ -225,7 +225,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                                "};\n";
 
                        // Conditional script injection
-                       $scriptTag = Html::linkedScript( $wgLoadScript . '?' . wfArrayToCgi( $query ) );
+                       $scriptTag = Html::linkedScript( wfAppendQuery( wfScript( 'load' ), $query ) );
                        $out .= "if ( isCompatible() ) {\n" .
                                "\t" . Xml::encodeJsCall( 'document.write', array( $scriptTag ) ) .
                                "}\n" .
index ae5d934..d2ce0b7 100644 (file)
@@ -673,7 +673,7 @@ class RevDel_FileItem extends RevDel_Item {
                        ' (' . $this->list->msg( 'nbytes' )->numParams( $this->file->getSize() )->text() . ')';
 
                return '<li>' . $this->getLink() . ' ' . $this->getUserTools() . ' ' .
-                       $data . ' ' . $this->getComment(). '</li>';
+                       $data . ' ' . $this->getComment() . '</li>';
        }
 }
 
index 6b3e62b..cfd941a 100644 (file)
@@ -1006,7 +1006,7 @@ class SearchHighlighter {
                                                                $len = strlen( $endMatches[2][0] );
                                                                $off = $endMatches[2][1];
                                                                $this->splitAndAdd( $otherExt, $count,
-                                                                       substr( $text, $start, $off + $len  - $start ) );
+                                                                       substr( $text, $start, $off + $len - $start ) );
                                                                $start = $off + $len;
                                                                $found = true;
                                                                break;
@@ -1119,7 +1119,7 @@ class SearchHighlighter {
                        // if begin of the article contains the whole phrase, show only that !!
                        if ( array_key_exists( $first, $snippets ) && preg_match( $pat1, $snippets[$first] )
                                && $offsets[$first] < $contextchars * 2 ) {
-                               $snippets = array ( $first => $snippets[$first] );
+                               $snippets = array( $first => $snippets[$first] );
                        }
 
                        // calc by how much to extend existing snippets
index 605a71b..ddfd1b3 100644 (file)
@@ -449,7 +449,7 @@ class SearchMySQL extends SearchEngine {
  * @ingroup Search
  */
 class MySQLSearchResultSet extends SqlSearchResultSet {
-       function __construct( $resultSet, $terms, $totalHits=null ) {
+       function __construct( $resultSet, $terms, $totalHits = null ) {
                parent::__construct( $resultSet, $terms );
                $this->mTotalHits = $totalHits;
        }
index b8d5dc1..148a657 100644 (file)
@@ -163,7 +163,7 @@ class SearchPostgres extends SearchEngine {
                $top = $top[0];
 
                if ( $top === "" ) { ## e.g. if only stopwords are used XXX return something better
-                       $query = "SELECT page_id, page_namespace, page_title, 0 AS score ".
+                       $query = "SELECT page_id, page_namespace, page_title, 0 AS score " .
                                "FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
                                "AND r.rev_text_id = c.old_id AND 1=0";
                }
@@ -175,8 +175,8 @@ class SearchPostgres extends SearchEngine {
                                }
                        }
 
-                       $query = "SELECT page_id, page_namespace, page_title, ".
-                       "ts_rank($fulltext, to_tsquery($searchstring), 5) AS score ".
+                       $query = "SELECT page_id, page_namespace, page_title, " .
+                       "ts_rank($fulltext, to_tsquery($searchstring), 5) AS score " .
                        "FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
                        "AND r.rev_text_id = c.old_id AND $fulltext @@ to_tsquery($searchstring)";
                }
@@ -208,7 +208,7 @@ class SearchPostgres extends SearchEngine {
 
        function update( $pageid, $title, $text ) {
                ## We don't want to index older revisions
-               $SQL = "UPDATE pagecontent SET textvector = NULL WHERE old_id IN ".
+               $SQL = "UPDATE pagecontent SET textvector = NULL WHERE old_id IN " .
                                "(SELECT rev_text_id FROM revision WHERE rev_page = " . intval( $pageid ) .
                                " ORDER BY rev_text_id DESC OFFSET 1)";
                $this->db->query( $SQL );
index ee30d9b..5b0b7f7 100644 (file)
@@ -333,7 +333,7 @@ class SearchSqlite extends SearchEngine {
  * @ingroup Search
  */
 class SqliteSearchResultSet extends SqlSearchResultSet {
-       function __construct( $resultSet, $terms, $totalHits=null ) {
+       function __construct( $resultSet, $terms, $totalHits = null ) {
                parent::__construct( $resultSet, $terms );
                $this->mTotalHits = $totalHits;
        }
index 21226fd..98004a2 100644 (file)
@@ -130,7 +130,7 @@ class MediaWikiSite extends Site {
                                // Also consider smaxage if maxage is used.
                        );
 
-                       $url = $this->getFileUrl( 'api.php' ) . '?' . wfArrayToCgi( $args );
+                       $url = wfAppendQuery( $this->getFileUrl( 'api.php' ), $args );
 
                        // Go on call the external site
                        //@todo: we need a good way to specify a timeout here.
index 855d409..16652a9 100644 (file)
@@ -28,7 +28,6 @@
  * @ingroup SpecialPage
  */
 class SpecialAllmessages extends SpecialPage {
-
        /**
         * @var AllmessagesTablePager
         */
@@ -87,7 +86,6 @@ class SpecialAllmessages extends SpecialPage {
  * getting data from a table when in fact not all of it comes from the database.
  */
 class AllmessagesTablePager extends TablePager {
-
        protected $filter, $prefix, $langcode, $displayPrefix;
 
        public $mLimitsShown;
@@ -285,6 +283,9 @@ class AllmessagesTablePager extends TablePager {
        /**
         *  This function normally does a database query to get the results; we need
         * to make a pretend result using a FakeResultWrapper.
+        * @param string $offset
+        * @param int $limit
+        * @param bool $descending
         * @return FakeResultWrapper
         */
        function reallyDoQuery( $offset, $limit, $descending ) {
index 942b767..8c93520 100644 (file)
@@ -71,7 +71,6 @@ class SpecialAllpages extends IncludableSpecialPage {
         * @param string $par becomes "FOO" when called like Special:Allpages/FOO (default NULL)
         */
        function execute( $par ) {
-               global $wgContLang;
                $request = $this->getRequest();
                $out = $this->getOutput();
 
@@ -85,7 +84,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                $namespace = $request->getInt( 'namespace' );
                $hideredirects = $request->getBool( 'hideredirects', false );
 
-               $namespaces = $wgContLang->getNamespaces();
+               $namespaces = $this->getContext()->getLanguage()->getNamespaces();
 
                $out->setPageTitle(
                        ( $namespace > 0 && in_array( $namespace, array_keys( $namespaces ) ) ) ?
@@ -305,6 +304,7 @@ class SpecialAllpages extends IncludableSpecialPage {
         * @return string
         */
        function showline( $inpoint, $outpoint, $namespace = NS_MAIN, $hideRedirects = false ) {
+               // Use content language since page titles are considered to use content language
                global $wgContLang;
                $inpointf = htmlspecialchars( str_replace( '_', ' ', $inpoint ) );
                $outpointf = htmlspecialchars( str_replace( '_', ' ', $outpoint ) );
@@ -312,7 +312,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                $inpointf = $wgContLang->truncate( $inpointf, $this->maxPageLength );
                $outpointf = $wgContLang->truncate( $outpointf, $this->maxPageLength );
 
-               $queryParams = array (
+               $queryParams = array(
                        'from' => $inpoint,
                        'to' => $outpoint,
                );
@@ -335,18 +335,17 @@ class SpecialAllpages extends IncludableSpecialPage {
        }
 
        /**
-        * @param $namespace Integer (Default NS_MAIN)
+        * @param int $namespace Namespace (Default NS_MAIN)
         * @param string $from list all pages from this name (default FALSE)
         * @param string $to list all pages to this name (default FALSE)
         * @param bool $hideredirects dont show redirects (default FALSE)
         */
        function showChunk( $namespace = NS_MAIN, $from = false, $to = false, $hideredirects = false ) {
-               global $wgContLang;
                $output = $this->getOutput();
 
                $fromList = $this->getNamespaceKeyAndText( $namespace, $from );
                $toList = $this->getNamespaceKeyAndText( $namespace, $to );
-               $namespaces = $wgContLang->getNamespaces();
+               $namespaces = $this->getContext()->getLanguage()->getNamespaces();
                $n = 0;
 
                if ( !$fromList || !$toList ) {
index fafe75f..5d0b79f 100644 (file)
@@ -64,6 +64,11 @@ class AncientPagesPage extends QueryPage {
                return false;
        }
 
+       /**
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string
+        */
        function formatResult( $skin, $result ) {
                global $wgContLang;
 
index 53f7f4d..2a5e504 100644 (file)
@@ -527,6 +527,7 @@ class SpecialBlock extends FormSpecialPage {
        public static function validateTarget( $value, User $user ) {
                global $wgBlockCIDRLimit;
 
+               /** @var User $target */
                list( $target, $type ) = self::getTargetAndType( $value );
                $status = Status::newGood( $target );
 
@@ -605,6 +606,7 @@ class SpecialBlock extends FormSpecialPage {
                # can come from it
                $data['Confirm'] = !in_array( $data['Confirm'], array( '', '0', null, false ), true );
 
+               /** @var User $target */
                list( $target, $type ) = self::getTargetAndType( $data['Target'] );
                if ( $type == Block::TYPE_USER ) {
                        $user = $target;
index eb25eaf..4868a75 100644 (file)
@@ -141,7 +141,7 @@ class SpecialBlockList extends SpecialPage {
                                        break;
 
                                case Block::TYPE_USER:
-                                       $conds['ipb_address'] = (string)$this->target;
+                                       $conds['ipb_address'] = $target->getName();
                                        $conds['ipb_auto'] = 0;
                                        break;
                        }
@@ -420,7 +420,7 @@ class BlockListPager extends TablePager {
 
        /**
         * Do a LinkBatch query to minimise database load when generating all these links
-        * @param $result
+        * @param ResultWrapper $result
         */
        function preprocessResults( $result ) {
                wfProfileIn( __METHOD__ );
index 0774c44..b3933c5 100644 (file)
@@ -116,13 +116,14 @@ class SpecialBookSources extends SpecialPage {
        private function makeForm() {
                global $wgScript;
 
-               $form = '<fieldset><legend>' . $this->msg( 'booksources-search-legend' )->escaped() . '</legend>';
-               $form .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
-               $form .= Html::hidden( 'title', $this->getTitle()->getPrefixedText() );
+               $form = Html::openElement( 'fieldset' ) . "\n";
+               $form .= Html::element( 'legend', array(), $this->msg( 'booksources-search-legend' )->text() ) . "\n";
+               $form .= Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) ) . "\n";
+               $form .= Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . "\n";
                $form .= '<p>' . Xml::inputLabel( $this->msg( 'booksources-isbn' )->text(), 'isbn', 'isbn', 20, $this->isbn );
-               $form .= '&#160;' . Xml::submitButton( $this->msg( 'booksources-go' )->text() ) . '</p>';
-               $form .= Xml::closeElement( 'form' );
-               $form .= '</fieldset>';
+               $form .= '&#160;' . Xml::submitButton( $this->msg( 'booksources-go' )->text() ) . "</p>\n";
+               $form .= Html::closeElement( 'form' ) . "\n";
+               $form .= Html::closeElement( 'fieldset' ) . "\n";
                return $form;
        }
 
@@ -177,7 +178,8 @@ class SpecialBookSources extends SpecialPage {
         */
        private function makeListItem( $label, $url ) {
                $url = str_replace( '$1', $this->isbn, $url );
-               return '<li><a href="' . htmlspecialchars( $url ) . '" class="external">' . htmlspecialchars( $label ) . '</a></li>';
+               return Html::rawElement( 'li', array(),
+                       Html::element( 'a', array( 'href' => $url, 'class' => 'external' ), $label ) );
        }
 
        protected function getGroupName() {
index e6fd58d..dd878cf 100644 (file)
@@ -92,9 +92,9 @@ class BrokenRedirectsPage extends QueryPage {
        }
 
        /**
-        * @param $skin Skin
-        * @param $result
-        * @return String
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string
         */
        function formatResult( $skin, $result ) {
                $fromObj = Title::makeTitle( $result->namespace, $result->title );
index 3287c63..c8190c8 100644 (file)
@@ -104,13 +104,13 @@ class EmailConfirmation extends UnlistedSpecialPage {
                        }
 
                        $out->addWikiMsg( 'confirmemail_text' );
-                       $form = Xml::openElement(
+                       $form = Html::openElement(
                                'form',
                                array( 'method' => 'post', 'action' => $this->getTitle()->getLocalURL() )
-                       );
-                       $form .= Html::hidden( 'token', $user->getEditToken() );
-                       $form .= Xml::submitButton( $this->msg( 'confirmemail_send' )->text() );
-                       $form .= Xml::closeElement( 'form' );
+                       ) . "\n";
+                       $form .= Html::hidden( 'token', $user->getEditToken() ) . "\n";
+                       $form .= Xml::submitButton( $this->msg( 'confirmemail_send' )->text() ) . "\n";
+                       $form .= Html::closeElement( 'form' ) . "\n";
                        $out->addHTML( $form );
                }
        }
index e985811..932f05e 100644 (file)
@@ -155,7 +155,7 @@ class SpecialContributions extends SpecialPage {
                                $apiParams['month'] = $this->opts['month'];
                        }
 
-                       $url = wfScript( 'api' ) . '?' . wfArrayToCgi( $apiParams );
+                       $url = wfAppendQuery( wfScript( 'api' ), $apiParams );
 
                        $out->redirect( $url, '301' );
                        return;
index 2126ca5..51262b4 100644 (file)
@@ -27,7 +27,6 @@
  * @ingroup SpecialPage
  */
 class DisambiguationsPage extends QueryPage {
-
        function __construct( $name = 'Disambiguations' ) {
                parent::__construct( $name );
        }
@@ -86,12 +85,13 @@ class DisambiguationsPage extends QueryPage {
                        $set = 'FALSE';
                        wfDebug( "Mediawiki:disambiguationspage message does not link to any templates!\n" );
                }
+
                return $set;
        }
 
        function getQueryInfo() {
                // @todo FIXME: What are pagelinks and p2 doing here?
-               return array (
+               return array(
                        'tables' => array(
                                'templatelinks',
                                'p1' => 'page',
@@ -125,8 +125,8 @@ class DisambiguationsPage extends QueryPage {
        /**
         * Fetch links and cache their existence
         *
-        * @param $db DatabaseBase
-        * @param $res
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
         */
        function preprocessResults( $db, $res ) {
                if ( !$res->numRows() ) {
@@ -142,6 +142,11 @@ class DisambiguationsPage extends QueryPage {
                $res->seek( 0 );
        }
 
+       /**
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string
+        */
        function formatResult( $skin, $result ) {
                $title = Title::newFromID( $result->value );
                $dp = Title::makeTitle( $result->namespace, $result->title );
index 5a5d749..7564b00 100644 (file)
@@ -28,7 +28,6 @@
  * @ingroup SpecialPage
  */
 class DoubleRedirectsPage extends QueryPage {
-
        function __construct( $name = 'DoubleRedirects' ) {
                parent::__construct( $name );
        }
@@ -52,8 +51,8 @@ class DoubleRedirectsPage extends QueryPage {
        function reallyGetQueryInfo( $namespace = null, $title = null ) {
                $limitToTitle = !( $namespace === null && $title === null );
                $dbr = wfGetDB( DB_SLAVE );
-               $retval = array (
-                       'tables' => array (
+               $retval = array(
+                       'tables' => array(
                                'ra' => 'redirect',
                                'rb' => 'redirect',
                                'pa' => 'page',
@@ -91,10 +90,12 @@ class DoubleRedirectsPage extends QueryPage {
                                'rb.rd_from = pb.page_id',
                        )
                );
+
                if ( $limitToTitle ) {
                        $retval['conds']['pa.page_namespace'] = $namespace;
                        $retval['conds']['pa.page_title'] = $title;
                }
+
                return $retval;
        }
 
@@ -103,9 +104,14 @@ class DoubleRedirectsPage extends QueryPage {
        }
 
        function getOrderFields() {
-               return array ( 'ra.rd_namespace', 'ra.rd_title' );
+               return array( 'ra.rd_namespace', 'ra.rd_title' );
        }
 
+       /**
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string
+        */
        function formatResult( $skin, $result ) {
                $titleA = Title::makeTitle( $result->namespace, $result->title );
 
index 163e5c6..3607be9 100644 (file)
@@ -264,6 +264,8 @@ class SpecialEmailUser extends UnlistedSpecialPage {
         * getPermissionsError(). It is probably also a good
         * idea to check the edit token and ping limiter in advance.
         *
+        * @param array $data
+        * @param IContextSource $context
         * @return Mixed: Status object, or potentially a String on error
         * or maybe even true on success if anything uses the EmailUser hook.
         */
index ed3321e..ef86e8e 100644 (file)
@@ -526,6 +526,11 @@ class SpecialExport extends SpecialPage {
 
        /**
         * Expand a list of pages to include items used in those pages.
+        * @param array $inputPages Array of page titles
+        * @param array $pageSet
+        * @param string $table
+        * @param array $fields Array of field names
+        * @param array $join
         * @return array
         */
        private function getLinks( $inputPages, $pageSet, $table, $fields, $join ) {
index 5b7f353..41b1d4b 100644 (file)
@@ -42,15 +42,15 @@ class FewestrevisionsPage extends QueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'revision', 'page' ),
-                       'fields' => array ( 'namespace' => 'page_namespace',
+               return array(
+                       'tables' => array( 'revision', 'page' ),
+                       'fields' => array( 'namespace' => 'page_namespace',
                                        'title' => 'page_title',
                                        'value' => 'COUNT(*)',
                                        'redirect' => 'page_is_redirect' ),
-                       'conds' => array ( 'page_namespace' => MWNamespace::getContentNamespaces(),
+                       'conds' => array( 'page_namespace' => MWNamespace::getContentNamespaces(),
                                        'page_id = rev_page' ),
-                       'options' => array ( 'HAVING' => 'COUNT(*) > 1',
+                       'options' => array( 'HAVING' => 'COUNT(*) > 1',
                        // ^^^ This was probably here to weed out redirects.
                        // Since we mark them as such now, it might be
                        // useful to remove this. People _do_ create pages
@@ -65,8 +65,8 @@ class FewestrevisionsPage extends QueryPage {
        }
 
        /**
-        * @param $skin Skin object
-        * @param $result Object: database row
+        * @param Skin $skin
+        * @param object $result Database row
         * @return String
         */
        function formatResult( $skin, $result ) {
index cc5cd5b..71f19fa 100644 (file)
@@ -59,7 +59,7 @@ class FileDuplicateSearchPage extends QueryPage {
        /**
         * Fetch dupes from all connected file repositories.
         *
-        * @return Array of File objects
+        * @return array of File objects
         */
        function getDupes() {
                return RepoGroup::singleton()->findBySha1( $this->hash );
index bbcced2..dc56b5a 100644 (file)
@@ -37,11 +37,11 @@ class SpecialFilepath extends SpecialPage {
                $this->outputHeader();
 
                $request = $this->getRequest();
-               $file = !is_null( $par ) ? $par : $request->getText( 'file' );
+               $file = $par ?: $request->getText( 'file' );
 
                $title = Title::newFromText( $file, NS_FILE );
 
-               if ( ! $title instanceof Title || $title->getNamespace() != NS_FILE ) {
+               if ( !( $title instanceof Title ) || $title->getNamespace() != NS_FILE ) {
                        $this->showForm( $title );
                } else {
                        $file = wfFindFile( $title );
@@ -70,7 +70,7 @@ class SpecialFilepath extends SpecialPage {
        }
 
        /**
-        * @param $title Title
+        * @param Title $title Title requested, or null.
         */
        function showForm( $title ) {
                global $wgScript;
index fc6172f..68b0024 100644 (file)
@@ -35,7 +35,7 @@ class SpecialImport extends SpecialPage {
        private $namespace;
        private $rootpage = '';
        private $frompage = '';
-       private $logcomment= false;
+       private $logcomment = false;
        private $history = true;
        private $includeTemplates = false;
        private $pageLinkDepth;
@@ -188,7 +188,7 @@ class SpecialImport extends SpecialPage {
 
                if( $user->isAllowed( 'importupload' ) ) {
                        $out->addHTML(
-                               Xml::fieldset( $this->msg( 'import-upload' )->text() ).
+                               Xml::fieldset( $this->msg( 'import-upload' )->text() ) .
                                Xml::openElement( 'form', array( 'enctype' => 'multipart/form-data', 'method' => 'post',
                                        'action' => $action, 'id' => 'mw-import-upload-form' ) ) .
                                $this->msg( 'importtext' )->parseAsBlock() .
@@ -228,7 +228,7 @@ class SpecialImport extends SpecialPage {
                                                Xml::submitButton( $this->msg( 'uploadbtn' )->text() ) .
                                        "</td>
                                </tr>" .
-                               Xml::closeElement( 'table' ).
+                               Xml::closeElement( 'table' ) .
                                Html::hidden( 'editToken', $user->getEditToken() ) .
                                Xml::closeElement( 'form' ) .
                                Xml::closeElement( 'fieldset' )
@@ -335,7 +335,7 @@ class SpecialImport extends SpecialPage {
                                                Xml::submitButton( $this->msg( 'import-interwiki-submit' )->text(), Linker::tooltipAndAccesskeyAttribs( 'import' ) ) .
                                        "</td>
                                </tr>" .
-                               Xml::closeElement( 'table' ).
+                               Xml::closeElement( 'table' ) .
                                Xml::closeElement( 'form' ) .
                                Xml::closeElement( 'fieldset' )
                        );
@@ -352,7 +352,7 @@ class SpecialImport extends SpecialPage {
  * @ingroup SpecialPage
  */
 class ImportReporter extends ContextSource {
-       private $reason=false;
+       private $reason = false;
        private $mOriginalLogCallback = null;
        private $mOriginalPageOutCallback = null;
        private $mLogItemCount = 0;
index 030416f..ded881c 100644 (file)
@@ -72,7 +72,7 @@ class LinkSearchPage extends QueryPage {
                } elseif ( !$pr_sl && $pr_cl ) {
                        // For protocols without '//' like 'mailto:'
                        $protocol = substr( $target2, 0, $pr_cl + 1 );
-                       $target2 = substr( $target2, $pr_cl+1 );
+                       $target2 = substr( $target2, $pr_cl + 1 );
                } elseif ( $protocol == '' && $target2 != '' ) {
                        // default
                        $protocol = 'http://';
@@ -100,8 +100,8 @@ class LinkSearchPage extends QueryPage {
                                        'all' => '',
                                        'label' => $this->msg( 'linksearch-ns' )->text()
                                ), array(
-                                       'name'  => 'namespace',
-                                       'id'    => 'namespace',
+                                       'name' => 'namespace',
+                                       'id' => 'namespace',
                                        'class' => 'namespaceselector',
                                )
                        );
@@ -133,6 +133,8 @@ class LinkSearchPage extends QueryPage {
        /**
         * Return an appropriately formatted LIKE query and the clause
         *
+        * @param string $query
+        * @param string $prot
         * @return array
         */
        static function mungeQuery( $query, $prot ) {
@@ -172,12 +174,12 @@ class LinkSearchPage extends QueryPage {
 
                $stripped = LinkFilter::keepOneWildcard( $this->mMungedQuery );
                $like = $dbr->buildLike( $stripped );
-               $retval = array (
-                       'tables' => array ( 'page', 'externallinks' ),
-                       'fields' => array ( 'namespace' => 'page_namespace',
+               $retval = array(
+                       'tables' => array( 'page', 'externallinks' ),
+                       'fields' => array( 'namespace' => 'page_namespace',
                                        'title' => 'page_title',
                                        'value' => 'el_index', 'url' => 'el_to' ),
-                       'conds' => array ( 'page_id = el_from',
+                       'conds' => array( 'page_id = el_from',
                                        "$clause $like" ),
                        'options' => array( 'USE INDEX' => $clause )
                );
@@ -187,6 +189,11 @@ class LinkSearchPage extends QueryPage {
                return $retval;
        }
 
+       /**
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string
+        */
        function formatResult( $skin, $result ) {
                $title = Title::makeTitle( $result->namespace, $result->title );
                $url = $result->url;
index 0283767..24888c0 100644 (file)
@@ -67,14 +67,14 @@ class ListredirectsPage extends QueryPage {
        }
 
        function getOrderFields() {
-               return array ( 'p1.page_namespace', 'p1.page_title' );
+               return array( 'p1.page_namespace', 'p1.page_title' );
        }
 
        /**
         * Cache page existence for performance
         *
-        * @param $db DatabaseBase
-        * @param $res ResultWrapper
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
         */
        function preprocessResults( $db, $res ) {
                $batch = new LinkBatch;
@@ -104,6 +104,11 @@ class ListredirectsPage extends QueryPage {
                }
        }
 
+       /**
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string
+        */
        function formatResult( $skin, $result ) {
                # Make a link to the redirect itself
                $rd_title = Title::makeTitle( $result->namespace, $result->title );
index 8c6a88a..33f291b 100644 (file)
@@ -50,23 +50,23 @@ class LonelyPagesPage extends PageQueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'page', 'pagelinks',
+               return array(
+                       'tables' => array( 'page', 'pagelinks',
                                        'templatelinks' ),
-                       'fields' => array ( 'namespace' => 'page_namespace',
+                       'fields' => array( 'namespace' => 'page_namespace',
                                        'title' => 'page_title',
                                        'value' => 'page_title' ),
-                       'conds' => array ( 'pl_namespace IS NULL',
+                       'conds' => array( 'pl_namespace IS NULL',
                                        'page_namespace' => MWNamespace::getContentNamespaces(),
                                        'page_is_redirect' => 0,
                                        'tl_namespace IS NULL' ),
-                       'join_conds' => array (
-                                       'pagelinks' => array (
-                                               'LEFT JOIN', array (
+                       'join_conds' => array(
+                                       'pagelinks' => array(
+                                               'LEFT JOIN', array(
                                                'pl_namespace = page_namespace',
                                                'pl_title = page_title' ) ),
-                                       'templatelinks' => array (
-                                               'LEFT JOIN', array (
+                                       'templatelinks' => array(
+                                               'LEFT JOIN', array(
                                                'tl_namespace = page_namespace',
                                                'tl_title = page_title' ) ) )
                );
index c5a109d..c11016d 100644 (file)
@@ -92,6 +92,11 @@ class MIMEsearchPage extends QueryPage {
                parent::execute( $par );
        }
 
+       /**
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string
+        */
        function formatResult( $skin, $result ) {
                global $wgContLang;
 
index 11f26bd..a0dbcf0 100644 (file)
@@ -30,7 +30,6 @@
  * @ingroup SpecialPage
  */
 class MostcategoriesPage extends QueryPage {
-
        function __construct( $name = 'Mostcategories' ) {
                parent::__construct( $name );
        }
@@ -44,22 +43,22 @@ class MostcategoriesPage extends QueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'categorylinks', 'page' ),
-                       'fields' => array ( 'namespace' => 'page_namespace',
+               return array(
+                       'tables' => array( 'categorylinks', 'page' ),
+                       'fields' => array( 'namespace' => 'page_namespace',
                                        'title' => 'page_title',
                                        'value' => 'COUNT(*)' ),
-                       'conds' => array ( 'page_namespace' => MWNamespace::getContentNamespaces() ),
-                       'options' => array ( 'HAVING' => 'COUNT(*) > 1',
+                       'conds' => array( 'page_namespace' => MWNamespace::getContentNamespaces() ),
+                       'options' => array( 'HAVING' => 'COUNT(*) > 1',
                                'GROUP BY' => array( 'page_namespace', 'page_title' ) ),
-                       'join_conds' => array ( 'page' => array ( 'LEFT JOIN',
+                       'join_conds' => array( 'page' => array( 'LEFT JOIN',
                                        'page_id = cl_from' ) )
                );
        }
 
        /**
-        * @param $db DatabaseBase
-        * @param $res
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
         */
        function preprocessResults( $db, $res ) {
                # There's no point doing a batch check if we aren't caching results;
@@ -78,8 +77,8 @@ class MostcategoriesPage extends QueryPage {
        }
 
        /**
-        * @param $skin Skin
-        * @param $result
+        * @param Skin $skin
+        * @param object $result Result row
         * @return string
         */
        function formatResult( $skin, $result ) {
index 78b2d91..a961efd 100644 (file)
@@ -44,12 +44,12 @@ class MostimagesPage extends ImageQueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'imagelinks' ),
-                       'fields' => array ( 'namespace' => NS_FILE,
+               return array(
+                       'tables' => array( 'imagelinks' ),
+                       'fields' => array( 'namespace' => NS_FILE,
                                        'title' => 'il_to',
                                        'value' => 'COUNT(*)' ),
-                       'options' => array ( 'GROUP BY' => 'il_to',
+                       'options' => array( 'GROUP BY' => 'il_to',
                                        'HAVING' => 'COUNT(*) > 1' )
                );
        }
index 574a9af..0321fb6 100644 (file)
@@ -44,24 +44,24 @@ class MostinterwikisPage extends QueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array (
+               return array(
+                       'tables' => array(
                                'langlinks',
                                'page'
-                       ), 'fields' => array (
+                       ), 'fields' => array(
                                'namespace' => 'page_namespace',
                                'title' => 'page_title',
                                'value' => 'COUNT(*)'
-                       ), 'conds' => array (
+                       ), 'conds' => array(
                                'page_namespace' => MWNamespace::getContentNamespaces()
-                       ), 'options' => array (
+                       ), 'options' => array(
                                'HAVING' => 'COUNT(*) > 1',
-                               'GROUP BY' => array (
+                               'GROUP BY' => array(
                                        'page_namespace',
                                        'page_title'
                                )
-                       ), 'join_conds' => array (
-                               'page' => array (
+                       ), 'join_conds' => array(
+                               'page' => array(
                                        'LEFT JOIN',
                                        'page_id = ll_from'
                                )
@@ -72,8 +72,8 @@ class MostinterwikisPage extends QueryPage {
        /**
         * Pre-fill the link cache
         *
-        * @param $db DatabaseBase
-        * @param $res
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
         */
        function preprocessResults( $db, $res ) {
                # There's no point doing a batch check if we aren't caching results;
index 4b6e567..be28b99 100644 (file)
@@ -45,17 +45,17 @@ class MostlinkedPage extends QueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'pagelinks', 'page' ),
-                       'fields' => array ( 'namespace' => 'pl_namespace',
+               return array(
+                       'tables' => array( 'pagelinks', 'page' ),
+                       'fields' => array( 'namespace' => 'pl_namespace',
                                        'title' => 'pl_title',
                                        'value' => 'COUNT(*)',
                                        'page_namespace' ),
-                       'options' => array ( 'HAVING' => 'COUNT(*) > 1',
+                       'options' => array( 'HAVING' => 'COUNT(*) > 1',
                                'GROUP BY' => array( 'pl_namespace', 'pl_title',
                                                'page_namespace' ) ),
-                       'join_conds' => array ( 'page' => array ( 'LEFT JOIN',
-                                       array ( 'page_namespace = pl_namespace',
+                       'join_conds' => array( 'page' => array( 'LEFT JOIN',
+                                       array( 'page_namespace = pl_namespace',
                                                'page_title = pl_title' ) ) )
                );
        }
@@ -63,8 +63,8 @@ class MostlinkedPage extends QueryPage {
        /**
         * Pre-fill the link cache
         *
-        * @param $db DatabaseBase
-        * @param $res
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
         */
        function preprocessResults( $db, $res ) {
                if ( $res->numRows() > 0 ) {
@@ -92,8 +92,8 @@ class MostlinkedPage extends QueryPage {
        /**
         * Make links to the page corresponding to the item, and the "what links here" page for it
         *
-        * @param $skin Skin to be used
-        * @param $result Result row
+        * @param Skin $skin Skin to be used
+        * @param object $result Result row
         * @return string
         */
        function formatResult( $skin, $result ) {
index a1bce45..f0ec664 100644 (file)
@@ -40,9 +40,9 @@ class MostlinkedCategoriesPage extends QueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'category' ),
-                       'fields' => array ( 'title' => 'cat_title',
+               return array(
+                       'tables' => array( 'category' ),
+                       'fields' => array( 'title' => 'cat_title',
                                        'namespace' => NS_CATEGORY,
                                        'value' => 'cat_pages' ),
                );
@@ -55,8 +55,8 @@ class MostlinkedCategoriesPage extends QueryPage {
        /**
         * Fetch user page links and cache their existence
         *
-        * @param $db DatabaseBase
-        * @param $res DatabaseResult
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
         */
        function preprocessResults( $db, $res ) {
                if ( !$res->numRows() ) {
@@ -74,8 +74,8 @@ class MostlinkedCategoriesPage extends QueryPage {
        }
 
        /**
-        * @param $skin Skin
-        * @param  $result
+        * @param Skin $skin
+        * @param object $result Result row
         * @return string
         */
        function formatResult( $skin, $result ) {
index 506e6b2..2590cf8 100644 (file)
@@ -62,12 +62,12 @@ class MostlinkedTemplatesPage extends QueryPage {
        }
 
        public function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'templatelinks' ),
-                       'fields' => array ( 'namespace' => 'tl_namespace',
+               return array(
+                       'tables' => array( 'templatelinks' ),
+                       'fields' => array( 'namespace' => 'tl_namespace',
                                        'title' => 'tl_title',
                                        'value' => 'COUNT(*)' ),
-                       'conds' => array ( 'tl_namespace' => NS_TEMPLATE ),
+                       'conds' => array( 'tl_namespace' => NS_TEMPLATE ),
                        'options' => array( 'GROUP BY' => array( 'tl_namespace', 'tl_title' ) )
                );
        }
@@ -76,7 +76,7 @@ class MostlinkedTemplatesPage extends QueryPage {
         * Pre-cache page existence to speed up link generation
         *
         * @param $db DatabaseBase connection
-        * @param $res ResultWrapper
+        * @param ResultWrapper $res
         */
        public function preprocessResults( $db, $res ) {
                if ( !$res->numRows() ) {
@@ -95,9 +95,9 @@ class MostlinkedTemplatesPage extends QueryPage {
        /**
         * Format a result row
         *
-        * @param $skin Skin to use for UI elements
-        * @param $result Result row
-        * @return String
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string
         */
        public function formatResult( $skin, $result ) {
                $title = Title::makeTitleSafe( $result->namespace, $result->title );
@@ -115,8 +115,8 @@ class MostlinkedTemplatesPage extends QueryPage {
        /**
         * Make a "what links here" link for a given title
         *
-        * @param $title Title to make the link for
-        * @param $result Result row
+        * @param Title $title Title to make the link for
+        * @param object $result Result row
         * @return String
         */
        private function makeWlhLink( $title, $result ) {
index 4adb037..c35c44e 100644 (file)
@@ -532,7 +532,7 @@ class MovePageForm extends UnlistedSpecialPage {
                ) ) {
                        $conds = array(
                                'page_title' . $dbr->buildLike( $ot->getDBkey() . '/', $dbr->anyString() )
-                                       .' OR page_title = ' . $dbr->addQuotes( $ot->getDBkey() )
+                                       . ' OR page_title = ' . $dbr->addQuotes( $ot->getDBkey() )
                        );
                        $conds['page_namespace'] = array();
                        if( MWNamespace::hasSubpages( $nt->getNamespace() ) ) {
@@ -571,7 +571,7 @@ class MovePageForm extends UnlistedSpecialPage {
                        }
 
                        $newPageName = preg_replace(
-                               '#^'.preg_quote( $ot->getDBkey(), '#' ).'#',
+                               '#^' . preg_quote( $ot->getDBkey(), '#' ) . '#',
                                StringUtils::escapeRegexReplacement( $nt->getDBkey() ), # bug 21234
                                $oldSubpage->getDBkey()
                        );
index 2f49803..51dd99f 100644 (file)
@@ -119,6 +119,11 @@ class SpecialPagesWithProp extends QueryPage {
                return array( 'page_id' );
        }
 
+       /**
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string
+        */
        function formatResult( $skin, $result ) {
                $title = Title::newFromRow( $result );
                $ret = Linker::link( $title, null, array(), array(), array( 'known' ) );
index 491fadc..a166b56 100644 (file)
@@ -33,6 +33,11 @@ class SpecialPasswordReset extends FormSpecialPage {
         */
        private $email;
 
+       /**
+        * @var User
+        */
+       private $firstUser;
+
        /**
         * @var Status
         */
@@ -257,8 +262,11 @@ class SpecialPasswordReset extends FormSpecialPage {
 
                $this->result = $firstUser->sendMail( $title->escaped(), $this->email->text() );
 
-               // Blank the email if the user is not supposed to see it
-               if( !isset( $data['Capture'] ) || !$data['Capture'] ) {
+               if( isset( $data['Capture'] ) && $data['Capture'] ) {
+                       // Save the user, will be used if an error occurs when sending the email
+                       $this->firstUser = $firstUser;
+               } else {
+                       // Blank the email if the user is not supposed to see it
                        $this->email = null;
                }
 
@@ -281,7 +289,8 @@ class SpecialPasswordReset extends FormSpecialPage {
                        if( $this->result->isGood() ) {
                                $this->getOutput()->addWikiMsg( 'passwordreset-emailsent-capture' );
                        } else {
-                               $this->getOutput()->addWikiMsg( 'passwordreset-emailerror-capture', $this->result->getMessage() );
+                               $this->getOutput()->addWikiMsg( 'passwordreset-emailerror-capture',
+                                       $this->result->getMessage(), $this->firstUser->getName() );
                        }
 
                        $this->getOutput()->addHTML( Html::rawElement( 'pre', array(), $this->email->escaped() ) );
@@ -292,7 +301,7 @@ class SpecialPasswordReset extends FormSpecialPage {
        }
 
        protected function canChangePassword( User $user ) {
-               global $wgPasswordResetRoutes, $wgAuth;
+               global $wgPasswordResetRoutes, $wgEnableEmail, $wgAuth;
 
                // Maybe password resets are disabled, or there are no allowable routes
                if ( !is_array( $wgPasswordResetRoutes ) ||
@@ -306,6 +315,11 @@ class SpecialPasswordReset extends FormSpecialPage {
                        return 'resetpass_forbidden';
                }
 
+               // Maybe email features have been disabled
+               if ( !$wgEnableEmail ) {
+                       return 'passwordreset-emaildisabled';
+               }
+
                // Maybe the user is blocked (check this here rather than relying on the parent
                // method as we have a more specific error message to use here
                if ( $user->isBlocked() ) {
index 7ce8c13..61ba83b 100644 (file)
@@ -42,7 +42,7 @@ class PopularPagesPage extends QueryPage {
        }
 
        function getQueryInfo() {
-               return array (
+               return array(
                        'tables' => array( 'page' ),
                        'fields' => array( 'namespace' => 'page_namespace',
                                        'title' => 'page_title',
@@ -52,8 +52,8 @@ class PopularPagesPage extends QueryPage {
        }
 
        /**
-        * @param $skin Skin
-        * @param $result
+        * @param Skin $skin
+        * @param object $result Result row
         * @return string
         */
        function formatResult( $skin, $result ) {
index 5927851..979c3ee 100644 (file)
@@ -92,7 +92,7 @@ class SpecialProtectedpages extends SpecialPage {
 
                $link = Linker::link( $title );
 
-               $description_items = array ();
+               $description_items = array();
 
                $protType = $this->msg( 'restriction-level-' . $row->pr_level )->escaped();
 
@@ -197,8 +197,8 @@ class SpecialProtectedpages extends SpecialPage {
                                        'all' => '',
                                        'label' => $this->msg( 'namespace' )->text()
                                ), array(
-                                       'name'  => 'namespace',
-                                       'id'    => 'namespace',
+                                       'name' => 'namespace',
+                                       'id' => 'namespace',
                                        'class' => 'namespaceselector',
                                )
                        )
@@ -206,6 +206,7 @@ class SpecialProtectedpages extends SpecialPage {
        }
 
        /**
+        * @param bool $indefOnly
         * @return string Formatted HTML
         */
        protected function getExpiryCheck( $indefOnly ) {
@@ -213,6 +214,7 @@ class SpecialProtectedpages extends SpecialPage {
        }
 
        /**
+        * @param bool $cascadeOnly
         * @return string Formatted HTML
         */
        protected function getCascadeCheck( $cascadeOnly ) {
@@ -220,6 +222,8 @@ class SpecialProtectedpages extends SpecialPage {
        }
 
        /**
+        * @param string $sizetype "min" or "max"
+        * @param mixed $size
         * @return string Formatted HTML
         */
        protected function getSizeLimit( $sizetype, $size ) {
index ab53bb5..cf2b272 100644 (file)
@@ -69,6 +69,7 @@ class SpecialProtectedtitles extends SpecialPage {
        /**
         * Callback function to output a restriction
         *
+        * @param object $row Database row
         * @return string
         */
        function formatRow( $row ) {
@@ -90,7 +91,7 @@ class SpecialProtectedtitles extends SpecialPage {
 
                $link = Linker::link( $title );
 
-               $description_items = array ();
+               $description_items = array();
 
                $protType = $this->msg( 'restriction-level-' . $row->pt_create_perm )->escaped();
 
@@ -149,14 +150,15 @@ class SpecialProtectedtitles extends SpecialPage {
                                'all' => '',
                                'label' => $this->msg( 'namespace' )->text()
                        ), array(
-                               'name'  => 'namespace',
-                               'id'    => 'namespace',
+                               'name' => 'namespace',
+                               'id' => 'namespace',
                                'class' => 'namespaceselector',
                        )
                );
        }
 
        /**
+        * @param string $pr_level Determines which option is selected as default
         * @return string Formatted HTML
         * @private
         */
index d9145b8..6772cb5 100644 (file)
@@ -887,7 +887,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                $links = array();
                foreach ( $filters as $key => $msg ) {
                        $link = $this->makeOptionsLink( $showhide[1 - $options[$key]],
-                               array( $key => 1-$options[$key] ), $nondefaults );
+                               array( $key => 1 - $options[$key] ), $nondefaults );
                        $links[] = $this->msg( $msg )->rawParams( $link )->escaped();
                }
 
index a4ab7a8..644a575 100644 (file)
@@ -705,7 +705,7 @@ class SpecialSearch extends SpecialPage {
 
                $html = null;
 
-               if ( wfRunHooks( 'ShowSearchHit', array (
+               if ( wfRunHooks( 'ShowSearchHit', array(
                        $this, $result, $terms,
                        &$link, &$redirect, &$section, &$extract,
                        &$score, &$size, &$date, &$related,
@@ -733,7 +733,7 @@ class SpecialSearch extends SpecialPage {
                wfProfileIn( __METHOD__ );
                $terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
 
-               $out = "<div id='mw-search-interwiki'><div id='mw-search-interwiki-caption'>".
+               $out = "<div id='mw-search-interwiki'><div id='mw-search-interwiki-caption'>" .
                        $this->msg( 'search-interwiki-caption' )->text() . "</div>\n";
                $out .= "<ul class='mw-search-iwresults'>\n";
 
index 1be7fbe..9b50875 100644 (file)
@@ -38,15 +38,15 @@ class ShortPagesPage extends QueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'page' ),
-                       'fields' => array ( 'namespace' => 'page_namespace',
+               return array(
+                       'tables' => array( 'page' ),
+                       'fields' => array( 'namespace' => 'page_namespace',
                                        'title' => 'page_title',
                                        'value' => 'page_len' ),
-                       'conds' => array ( 'page_namespace' =>
+                       'conds' => array( 'page_namespace' =>
                                        MWNamespace::getContentNamespaces(),
                                        'page_is_redirect' => 0 ),
-                       'options' => array ( 'USE INDEX' => 'page_redirect_namespace_len' )
+                       'options' => array( 'USE INDEX' => 'page_redirect_namespace_len' )
                );
        }
 
@@ -56,8 +56,7 @@ class ShortPagesPage extends QueryPage {
 
        /**
         * @param $db DatabaseBase
-        * @param $res
-        * @return void
+        * @param ResultWrapper $res
         */
        function preprocessResults( $db, $res ) {
                # There's no point doing a batch check if we aren't caching results;
@@ -79,6 +78,11 @@ class ShortPagesPage extends QueryPage {
                return false;
        }
 
+       /**
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string
+        */
        function formatResult( $skin, $result ) {
                $dm = $this->getLanguage()->getDirMark();
 
index 57fffb8..3901074 100644 (file)
@@ -60,6 +60,7 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
 
                /** Put them into a sortable array */
                $groups = array();
+               /** @var SpecialPage $page */
                foreach ( $pages as $page ) {
                        if ( $page->isListed() ) {
                                $group = $page->getFinalGroupName();
@@ -104,7 +105,7 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
 
                        $out->wrapWikiMsg( "<h2 class=\"mw-specialpagesgroup\" id=\"mw-specialpagesgroup-$group\">$1</h2>\n", "specialpages-group-$group" );
                        $out->addHTML(
-                               Html::openElement( 'table', array( 'style' => 'width:100%;', 'class' => 'mw-specialpages-table' ) ) ."\n" .
+                               Html::openElement( 'table', array( 'style' => 'width:100%;', 'class' => 'mw-specialpages-table' ) ) . "\n" .
                                Html::openElement( 'tr' ) . "\n" .
                                Html::openElement( 'td', array( 'style' => 'width:30%;vertical-align:top' ) ) . "\n" .
                                Html::openElement( 'ul' ) . "\n"
index ec924b0..a362fa2 100644 (file)
@@ -64,7 +64,7 @@ class SpecialStatistics extends SpecialPage {
                        if( !$wgMemc->get( $key ) ) {
                                $dbw = wfGetDB( DB_MASTER );
                                SiteStatsUpdate::cacheUpdate( $dbw );
-                               $wgMemc->set( $key, '1', 24*3600 ); // don't update for 1 day
+                               $wgMemc->set( $key, '1', 24 * 3600 ); // don't update for 1 day
                        }
                }
 
@@ -111,7 +111,7 @@ class SpecialStatistics extends SpecialPage {
         * @param $number  Float: a statistical number
         * @param $trExtraParams  Array: params to table row, see Html::elememt
         * @param $descMsg  String: message key
-        * @param $descMsgParam  Array: message params
+        * @param array|string $descMsgParam Message parameters
         * @return string table row in HTML format
         */
        private function formatRow( $text, $number, $trExtraParams = array(), $descMsg = '', $descMsgParam = '' ) {
@@ -229,11 +229,11 @@ class SpecialStatistics extends SpecialPage {
                        Xml::closeElement( 'tr' ) .
                                $this->formatRow( $this->msg( 'statistics-views-total' )->parse(),
                                        $this->getLanguage()->formatNum( $this->views ),
-                                               array ( 'class' => 'mw-statistics-views-total' ), 'statistics-views-total-desc' ) .
+                                               array( 'class' => 'mw-statistics-views-total' ), 'statistics-views-total-desc' ) .
                                $this->formatRow( $this->msg( 'statistics-views-peredit' )->parse(),
                                        $this->getLanguage()->formatNum( sprintf( '%.2f', $this->edits ?
                                                $this->views / $this->edits : 0 ) ),
-                                               array ( 'class' => 'mw-statistics-views-peredit' ) );
+                                               array( 'class' => 'mw-statistics-views-peredit' ) );
        }
 
        private function getMostViewedPages() {
index c4a53cf..7b3ae6b 100644 (file)
@@ -138,6 +138,8 @@ class SpecialUnblock extends SpecialPage {
 
        /**
         * Submit callback for an HTMLForm object
+        * @param array $data
+        * @param HTMLForm $form
         * @return Array( Array(message key, parameters)
         */
        public static function processUIUnblock( array $data, HTMLForm $form ) {
index ebc32cf..1cc40a9 100644 (file)
@@ -34,8 +34,8 @@ class UncategorizedCategoriesPage extends UncategorizedPagesPage {
 
        /**
         * Formats the result
-        * @param $skin The current skin
-        * @param $result The query result
+        * @param Skin $skin The current skin
+        * @param object $result The query result
         * @return string The category link
         */
        function formatResult( $skin, $result ) {
index 53aa3f3..3bfcede 100644 (file)
@@ -47,7 +47,7 @@ class UncategorizedImagesPage extends ImageQueryPage {
        }
 
        function getQueryInfo() {
-               return array (
+               return array(
                        'tables' => array( 'page', 'categorylinks' ),
                        'fields' => array( 'namespace' => 'page_namespace',
                                        'title' => 'page_title',
index b518e6f..bfcb58f 100644 (file)
@@ -47,17 +47,17 @@ class UncategorizedPagesPage extends PageQueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'page', 'categorylinks' ),
-                       'fields' => array ( 'namespace' => 'page_namespace',
+               return array(
+                       'tables' => array( 'page', 'categorylinks' ),
+                       'fields' => array( 'namespace' => 'page_namespace',
                                        'title' => 'page_title',
                                        'value' => 'page_title' ),
                        // default for page_namespace is all content namespaces (if requestedNamespace is false)
                        // otherwise, page_namespace is requestedNamespace
-                       'conds' => array ( 'cl_from IS NULL',
+                       'conds' => array( 'cl_from IS NULL',
                                        'page_namespace' => ( $this->requestedNamespace !== false ? $this->requestedNamespace : MWNamespace::getContentNamespaces() ),
                                        'page_is_redirect' => 0 ),
-                       'join_conds' => array ( 'categorylinks' => array (
+                       'join_conds' => array( 'categorylinks' => array(
                                        'LEFT JOIN', 'cl_from = page_id' ) )
                );
        }
index 0e8cf58..70a34e3 100644 (file)
@@ -271,7 +271,7 @@ class PageArchive {
        /**
         * Get the text from an archive row containing ar_text, ar_flags and ar_text_id
         *
-        * @param Object $row Database row
+        * @param object $row Database row
         * @return string
         */
        function getTextFromRow( $row ) {
index 6b91dd3..b686a5b 100644 (file)
@@ -39,15 +39,15 @@ class UnusedCategoriesPage extends QueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'page', 'categorylinks' ),
-                       'fields' => array ( 'namespace' => 'page_namespace',
+               return array(
+                       'tables' => array( 'page', 'categorylinks' ),
+                       'fields' => array( 'namespace' => 'page_namespace',
                                        'title' => 'page_title',
                                        'value' => 'page_title' ),
-                       'conds' => array ( 'cl_from IS NULL',
+                       'conds' => array( 'cl_from IS NULL',
                                        'page_namespace' => NS_CATEGORY,
                                        'page_is_redirect' => 0 ),
-                       'join_conds' => array ( 'categorylinks' => array (
+                       'join_conds' => array( 'categorylinks' => array(
                                        'LEFT JOIN', 'cl_to = page_title' ) )
                );
        }
@@ -60,6 +60,11 @@ class UnusedCategoriesPage extends QueryPage {
                return false;
        }
 
+       /**
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string
+        */
        function formatResult( $skin, $result ) {
                $title = Title::makeTitle( NS_CATEGORY, $result->title );
                return Linker::link( $title, htmlspecialchars( $title->getText() ) );
index 6955328..d332db7 100644 (file)
@@ -45,28 +45,28 @@ class UnusedimagesPage extends ImageQueryPage {
 
        function getQueryInfo() {
                global $wgCountCategorizedImagesAsUsed;
-               $retval = array (
-                       'tables' => array ( 'image', 'imagelinks' ),
-                       'fields' => array ( 'namespace' => NS_FILE,
+               $retval = array(
+                       'tables' => array( 'image', 'imagelinks' ),
+                       'fields' => array( 'namespace' => NS_FILE,
                                        'title' => 'img_name',
                                        'value' => 'img_timestamp',
                                        'img_user', 'img_user_text',
                                        'img_description' ),
-                       'conds' => array ( 'il_to IS NULL' ),
-                       'join_conds' => array ( 'imagelinks' => array (
+                       'conds' => array( 'il_to IS NULL' ),
+                       'join_conds' => array( 'imagelinks' => array(
                                        'LEFT JOIN', 'il_to = img_name' ) )
                );
 
                if ( $wgCountCategorizedImagesAsUsed ) {
                        // Order is significant
-                       $retval['tables'] = array ( 'image', 'page', 'categorylinks',
+                       $retval['tables'] = array( 'image', 'page', 'categorylinks',
                                        'imagelinks' );
                        $retval['conds']['page_namespace'] = NS_FILE;
                        $retval['conds'][] = 'cl_from IS NULL';
                        $retval['conds'][] = 'img_name = page_title';
-                       $retval['join_conds']['categorylinks'] = array (
+                       $retval['join_conds']['categorylinks'] = array(
                                        'LEFT JOIN', 'cl_from = page_id' );
-                       $retval['join_conds']['imagelinks'] = array (
+                       $retval['join_conds']['imagelinks'] = array(
                                        'LEFT JOIN', 'il_to = page_title' );
                }
                return $retval;
index 493e936..1dc9f42 100644 (file)
@@ -48,23 +48,23 @@ class UnusedtemplatesPage extends QueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'page', 'templatelinks' ),
-                       'fields' => array ( 'namespace' => 'page_namespace',
+               return array(
+                       'tables' => array( 'page', 'templatelinks' ),
+                       'fields' => array( 'namespace' => 'page_namespace',
                                        'title' => 'page_title',
                                        'value' => 'page_title' ),
-                       'conds' => array ( 'page_namespace' => NS_TEMPLATE,
+                       'conds' => array( 'page_namespace' => NS_TEMPLATE,
                                        'tl_from IS NULL',
                                        'page_is_redirect' => 0 ),
-                       'join_conds' => array ( 'templatelinks' => array (
-                               'LEFT JOIN', array ( 'tl_title = page_title',
+                       'join_conds' => array( 'templatelinks' => array(
+                               'LEFT JOIN', array( 'tl_title = page_title',
                                        'tl_namespace = page_namespace' ) ) )
                );
        }
 
        /**
-        * @param $skin Skin
-        * @param $result
+        * @param Skin $skin
+        * @param object $result Result row
         * @return string
         */
        function formatResult( $skin, $result ) {
index 05ec6b0..954e3ff 100644 (file)
@@ -44,17 +44,17 @@ class UnwatchedpagesPage extends QueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'page', 'watchlist' ),
-                       'fields' => array ( 'namespace' => 'page_namespace',
+               return array(
+                       'tables' => array( 'page', 'watchlist' ),
+                       'fields' => array( 'namespace' => 'page_namespace',
                                        'title' => 'page_title',
                                        'value' => 'page_namespace' ),
-                       'conds' => array ( 'wl_title IS NULL',
+                       'conds' => array( 'wl_title IS NULL',
                                        'page_is_redirect' => 0,
                                        "page_namespace != '" . NS_MEDIAWIKI .
                                        "'" ),
-                       'join_conds' => array ( 'watchlist' => array (
-                               'LEFT JOIN', array ( 'wl_title = page_title',
+                       'join_conds' => array( 'watchlist' => array(
+                               'LEFT JOIN', array( 'wl_title = page_title',
                                        'wl_namespace = page_namespace' ) ) )
                );
        }
@@ -68,8 +68,8 @@ class UnwatchedpagesPage extends QueryPage {
        }
 
        /**
-        * @param $skin Skin
-        * @param $result
+        * @param Skin $skin
+        * @param object $result Result row
         * @return string
         */
        function formatResult( $skin, $result ) {
index ddf0c6d..a8e140d 100644 (file)
@@ -311,6 +311,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
         * Note the stash has to be recreated since this is being called in a static context.
         * This works, because there really is only one stash per logged-in user, despite appearances.
         *
+        * @param array $formData
         * @return Status
         */
        public static function tryClearStashedUploads( $formData ) {
index 17c8ec9..c3a954f 100644 (file)
@@ -50,12 +50,23 @@ class LoginForm extends SpecialPage {
        var $mType, $mReason, $mRealName;
        var $mAbortLoginErrorMsg = 'login-abort-generic';
        private $mLoaded = false;
+       private $mSecureLoginUrl;
+       // TODO Remove old forms and mShowVForm gating after all WMF wikis have
+       // adapted messages and help links to new versions.
+       private $mShowVForm;
 
        /**
         * @ var WebRequest
         */
        private $mOverrideRequest = null;
 
+       /**
+        * Effective request; set at the beginning of load
+        *
+        * @var WebRequest $mRequest
+        */
+       private $mRequest = null;
+
        /**
         * @param WebRequest $request
         */
@@ -81,6 +92,7 @@ class LoginForm extends SpecialPage {
                } else {
                        $request = $this->mOverrideRequest;
                }
+               $this->mRequest = $request;
 
                $this->mType = $request->getText( 'type' );
                $this->mUsername = $request->getText( 'wpName' );
@@ -132,22 +144,43 @@ class LoginForm extends SpecialPage {
        }
 
        function getDescription() {
-               return $this->msg( $this->getUser()->isAllowed( 'createaccount' ) ?
-                       'userlogin' : 'userloginnocreate' )->text();
+               if ( !$this->getUser()->isAllowed( 'createaccount' ) ) {
+                       return $this->msg( 'userloginnocreate' )->text();
+               }
+               if ( $this->mShowVForm ) {
+                       if ( $this->mType === 'signup' ) {
+                               return $this->msg( 'createaccount' )->text();
+                       } else {
+                               return $this->msg( 'login' )->text();
+                       }
+               } else {
+                       return $this->msg( 'userlogin' )->text();
+               }
        }
 
-       public function execute( $par ) {
+       /*
+        * @param $subPage string|null
+        */
+       public function execute( $subPage ) {
                if ( session_id() == '' ) {
                        wfSetupSession();
                }
 
                $this->load();
+
+               // Check for [[Special:Userlogin/signup]. This affects form display and
+               // page title.
+               if ( $subPage == 'signup' ) {
+                       $this->mType = 'signup';
+               }
+               $this->mShowVForm = $this->shouldShowVForm();
+
                $this->setHeaders();
 
+               // If logging in and not on HTTPS, either redirect to it or offer a link.
                global $wgSecureLogin;
                if (
                        $this->mType !== 'signup' &&
-                       $wgSecureLogin &&
                        WebRequest::detectProtocol() !== 'https'
                ) {
                        $title = $this->getFullTitle();
@@ -157,12 +190,17 @@ class LoginForm extends SpecialPage {
                                'wpStickHTTPS' => $this->mStickHTTPS
                        );
                        $url = $title->getFullURL( $query, false, PROTO_HTTPS );
-                       $this->getOutput()->redirect( $url );
-                       return;
-               }
-
-               if ( $par == 'signup' ) { # Check for [[Special:Userlogin/signup]]
-                       $this->mType = 'signup';
+                       if ( $wgSecureLogin ) {
+                               $this->getOutput()->redirect( $url );
+                               return;
+                       } else {
+                               // A wiki without HTTPS login support should set $wgServer to
+                               // http://somehost, in which case the secure URL generated
+                               // above won't actually start with https://
+                               if ( substr( $url, 0, 8 ) === 'https://' ) {
+                                       $this->mSecureLoginUrl = $url;
+                               }
+                       }
                }
 
                if ( !is_null( $this->mCookieCheck ) ) {
@@ -781,7 +819,7 @@ class LoginForm extends SpecialPage {
                                $this->resetLoginForm( $this->msg( 'resetpass_announce' )->text() );
                                break;
                        case self::CREATE_BLOCKED:
-                               $this->userBlockedMessage( $this->getUser()->mBlock );
+                               $this->userBlockedMessage( $this->getUser()->isBlockedFromCreateAccount() );
                                break;
                        case self::THROTTLED:
                                $this->mainLoginForm( $this->msg( 'login-throttled' )->text() );
@@ -978,6 +1016,22 @@ class LoginForm extends SpecialPage {
                }
        }
 
+       /**
+        * Whether to show new vertically laid out login form.
+        * ?useNew=1 forces new style, ?useNew=0 forces old style,
+        * otherwise consult $wgUseVFormUserLogin.
+        * @return Boolean
+        */
+       private function shouldShowVForm() {
+               global $wgUseVFormUserLogin;
+
+               if ( $this->mType == 'signup' ) {
+                       return false;
+               } else {
+                       return $this->mRequest->getBool( 'useNew', $wgUseVFormUserLogin );
+               }
+       }
+
        /**
         * @private
         */
@@ -989,6 +1043,7 @@ class LoginForm extends SpecialPage {
 
                $titleObj = $this->getTitle();
                $user = $this->getUser();
+               $out = $this->getOutput();
 
                if ( $this->mType == 'signup' ) {
                        // Block signup here if in readonly. Keeps user from
@@ -1019,9 +1074,17 @@ class LoginForm extends SpecialPage {
                        $q = 'action=submitlogin&type=signup';
                        $linkq = 'type=login';
                        $linkmsg = 'gotaccount';
-                       $this->getOutput()->addModules( 'mediawiki.special.userlogin.signup' );
+                       $out->addModules( 'mediawiki.special.userlogin.signup' );
                } else {
-                       $template = new UserloginTemplate();
+                       if ( $this->mShowVForm ) {
+                               $template = new UserloginTemplateVForm();
+                               $out->addModuleStyles( array(
+                                       'mediawiki.ui',
+                                       'mediawiki.special.userlogin.vform'
+                               ) );
+                       } else {
+                               $template = new UserloginTemplate();
+                       }
                        $q = 'action=submitlogin&type=login';
                        $linkq = 'type=signup';
                        $linkmsg = 'nologin';
@@ -1037,16 +1100,23 @@ class LoginForm extends SpecialPage {
                        $linkq .= $returnto;
                }
 
-               # Don't show a "create account" link if the user can't
+               # Don't show a "create account" link if the user can't.
                if( $this->showCreateOrLoginLink( $user ) ) {
                        # Pass any language selection on to the mode switch link
                        if( $wgLoginLanguageSelector && $this->mLanguage ) {
                                $linkq .= '&uselang=' . $this->mLanguage;
                        }
-                       $link = Html::element( 'a', array( 'href' => $titleObj->getLocalURL( $linkq ) ),
-                               $this->msg( $linkmsg . 'link' )->text() ); # Calling either 'gotaccountlink' or 'nologinlink'
+                       if ( !$this->mShowVForm ) {
+                               $link = Html::element( 'a', array( 'href' => $titleObj->getLocalURL( $linkq ) ),
+                                       $this->msg( $linkmsg . 'link' )->text() ); # Calling either 'gotaccountlink' or 'nologinlink'
 
-                       $template->set( 'link', $this->msg( $linkmsg )->rawParams( $link )->parse() );
+                                       $template->set( 'link', $this->msg( $linkmsg )->rawParams( $link )->parse() );
+
+                       } else {
+                               // Supply URL, login template creates the button.
+                               // (The template 'link' key, passed above, is obsolete in the VForm design.)
+                               $template->set( 'createOrLoginHref', $titleObj->getLocalURL( $linkq ) );
+                       }
                } else {
                        $template->set( 'link', '' );
                }
@@ -1061,6 +1131,7 @@ class LoginForm extends SpecialPage {
                        : is_array( $wgPasswordResetRoutes ) && in_array( true, array_values( $wgPasswordResetRoutes ) );
 
                $template->set( 'header', '' );
+               $template->set( 'skin', $this->getSkin() );
                $template->set( 'name', $this->mUsername );
                $template->set( 'password', $this->mPassword );
                $template->set( 'retype', $this->mRetype );
@@ -1106,8 +1177,9 @@ class LoginForm extends SpecialPage {
                        }
                }
 
+               $template->set( 'secureLoginUrl', $this->mSecureLoginUrl );
                // Use loginend-https for HTTPS requests if it's not blank, loginend otherwise
-               // Ditto for signupend
+               // Ditto for signupend.  New forms use neither.
                $usingHTTPS = WebRequest::detectProtocol() == 'https';
                $loginendHTTPS = $this->msg( 'loginend-https' );
                $signupendHTTPS = $this->msg( 'signupend-https' );
@@ -1130,7 +1202,6 @@ class LoginForm extends SpecialPage {
                        wfRunHooks( 'UserLoginForm', array( &$template ) );
                }
 
-               $out = $this->getOutput();
                $out->disallowUserJs(); // just in case...
                $out->addTemplate( $template );
        }
index d4baae2..7501371 100644 (file)
@@ -45,6 +45,11 @@ class UserrightsPage extends SpecialPage {
                return $this->userCanChangeRights( $user, false );
        }
 
+       /**
+        * @param User $user
+        * @param bool $checkIfSelf
+        * @return bool
+        */
        public function userCanChangeRights( $user, $checkIfSelf = true ) {
                $available = $this->changeableGroups();
                if ( $user->getId() == 0 ) {
@@ -283,6 +288,7 @@ class UserrightsPage extends SpecialPage {
         * return a user (or proxy) object for manipulating it.
         *
         * Side effects: error output for invalid access
+        * @param string $username
         * @return Status object
         */
        public function fetchUser( $username ) {
@@ -447,12 +453,12 @@ class UserrightsPage extends SpecialPage {
                $count = count( $list );
                if ( $count > 0 ) {
                        $grouplist = $this->msg( 'userrights-groupsmember', $count, $user->getName() )->parse();
-                       $grouplist = '<p>' . $grouplist  . ' ' . $displayedList . "</p>\n";
+                       $grouplist = '<p>' . $grouplist . ' ' . $displayedList . "</p>\n";
                }
                $count = count( $autoList );
                if ( $count > 0 ) {
                        $autogrouplistintro = $this->msg( 'userrights-groupsmember-auto', $count, $user->getName() )->parse();
-                       $grouplist .= '<p>' . $autogrouplistintro  . ' ' . $displayedAutolist . "</p>\n";
+                       $grouplist .= '<p>' . $autogrouplistintro . ' ' . $displayedAutolist . "</p>\n";
                }
 
                $userToolLinks = Linker::userToolLinks(
index 8dd38d4..d375316 100644 (file)
@@ -113,7 +113,7 @@ class SpecialVersion extends SpecialPage {
                global $wgLang;
 
                if ( defined( 'MEDIAWIKI_INSTALL' ) ) {
-                       $othersLink = '[http://www.mediawiki.org/wiki/Special:Version/Credits ' .       wfMessage( 'version-poweredby-others' )->text() . ']';
+                       $othersLink = '[http://www.mediawiki.org/wiki/Special:Version/Credits ' . wfMessage( 'version-poweredby-others' )->text() . ']';
                } else {
                        $othersLink = '[[Special:Version/Credits|' . wfMessage( 'version-poweredby-others' )->text() . ']]';
                }
@@ -274,10 +274,11 @@ class SpecialVersion extends SpecialPage {
        }
 
        /**
-        * @return bool|string wgVersion + HEAD sha1 stripped to the first 7 chars. False on failure
+        * @since 1.22 Returns the HEAD date in addition to the sha1 and link
+        * @return bool|string wgVersion + HEAD sha1 stripped to the first 7 chars with link and date, or false on failure
         */
        private static function getVersionLinkedGit() {
-               global $IP;
+               global $IP, $wgLang;
 
                $gitInfo = new GitInfo( $IP );
                $headSHA1 = $gitInfo->getHeadSHA1();
@@ -286,10 +287,17 @@ class SpecialVersion extends SpecialPage {
                }
 
                $shortSHA1 = '(' . substr( $headSHA1, 0, 7 ) . ')';
-               $viewerUrl = $gitInfo->getHeadViewUrl();
-               if ( $viewerUrl !== false ) {
-                       $shortSHA1 = "[$viewerUrl $shortSHA1]";
+
+               $gitHeadUrl = $gitInfo->getHeadViewUrl();
+               if ( $gitHeadUrl !== false ) {
+                       $shortSHA1 = "[$gitHeadUrl $shortSHA1]";
+               }
+
+               $gitHeadCommitDate = $gitInfo->getHeadCommitDate();
+               if ( $gitHeadCommitDate ) {
+                       $shortSHA1 .= "<br/>" . $wgLang->timeanddate( $gitHeadCommitDate, true );
                }
+
                return self::getwgVersionLinked() . " $shortSHA1";
        }
 
@@ -395,7 +403,7 @@ class SpecialVersion extends SpecialPage {
                                $tags[$i] = "&lt;{$tags[$i]}&gt;";
                        }
                        $out .= $this->openExtType( $this->msg( 'version-parser-extensiontags' )->text(), 'parser-tags' );
-                       $out .= '<tr><td colspan="4">' . $this->listToText( $tags ). "</td></tr>\n";
+                       $out .= '<tr><td colspan="4">' . $this->listToText( $tags ) . "</td></tr>\n";
                }
 
                $fhooks = $wgParser->getFunctionHooks();
@@ -461,6 +469,8 @@ class SpecialVersion extends SpecialPage {
         * @return string
         */
        function getCreditsForExtension( array $extension ) {
+               global $wgLang;
+
                $name = isset( $extension['name'] ) ? $extension['name'] : '[no name]';
 
                $vcsText = false;
@@ -474,6 +484,10 @@ class SpecialVersion extends SpecialPage {
                                if ( $gitViewerUrl !== false ) {
                                        $vcsText = "[$gitViewerUrl $vcsText]";
                                }
+                               $gitHeadCommitDate = $gitInfo->getHeadCommitDate();
+                               if ( $gitHeadCommitDate ) {
+                                       $vcsText .= "<br/>" .  $wgLang->timeanddate( $gitHeadCommitDate, true );
+                               }
                        } else {
                                $svnInfo = self::getSvnInfo( dirname( $extension['path'] ) );
                                # Make subversion text/link.
index 0035bfa..d2ffdb9 100644 (file)
@@ -35,22 +35,22 @@ class WantedCategoriesPage extends WantedQueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'categorylinks', 'page' ),
-                       'fields' => array ( 'namespace' => NS_CATEGORY,
+               return array(
+                       'tables' => array( 'categorylinks', 'page' ),
+                       'fields' => array( 'namespace' => NS_CATEGORY,
                                        'title' => 'cl_to',
                                        'value' => 'COUNT(*)' ),
-                       'conds' => array ( 'page_title IS NULL' ),
-                       'options' => array ( 'GROUP BY' => 'cl_to' ),
-                       'join_conds' => array ( 'page' => array ( 'LEFT JOIN',
-                               array ( 'page_title = cl_to',
+                       'conds' => array( 'page_title IS NULL' ),
+                       'options' => array( 'GROUP BY' => 'cl_to' ),
+                       'join_conds' => array( 'page' => array( 'LEFT JOIN',
+                               array( 'page_title = cl_to',
                                        'page_namespace' => NS_CATEGORY ) ) )
                );
        }
 
        /**
-        * @param $skin Skin
-        * @param $result
+        * @param Skin $skin
+        * @param object $result Result row
         * @return string
         */
        function formatResult( $skin, $result ) {
index 9a2d30a..b5c1fdb 100644 (file)
@@ -73,16 +73,16 @@ class WantedFilesPage extends WantedQueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'imagelinks', 'image' ),
-                       'fields' => array ( 'namespace' => NS_FILE,
+               return array(
+                       'tables' => array( 'imagelinks', 'image' ),
+                       'fields' => array( 'namespace' => NS_FILE,
                                        'title' => 'il_to',
                                        'value' => 'COUNT(*)' ),
-                       'conds' => array ( 'img_name IS NULL' ),
-                       'options' => array ( 'GROUP BY' => 'il_to' ),
-                       'join_conds' => array ( 'image' =>
-                               array ( 'LEFT JOIN',
-                                       array ( 'il_to = img_name' )
+                       'conds' => array( 'img_name IS NULL' ),
+                       'options' => array( 'GROUP BY' => 'il_to' ),
+                       'join_conds' => array( 'image' =>
+                               array( 'LEFT JOIN',
+                                       array( 'il_to = img_name' )
                                )
                        )
                );
index f5539c1..d13fa03 100644 (file)
@@ -38,17 +38,17 @@ class WantedTemplatesPage extends WantedQueryPage {
        }
 
        function getQueryInfo() {
-               return array (
-                       'tables' => array ( 'templatelinks', 'page' ),
-                       'fields' => array ( 'namespace' => 'tl_namespace',
+               return array(
+                       'tables' => array( 'templatelinks', 'page' ),
+                       'fields' => array( 'namespace' => 'tl_namespace',
                                        'title' => 'tl_title',
                                        'value' => 'COUNT(*)' ),
-                       'conds' => array ( 'page_title IS NULL',
+                       'conds' => array( 'page_title IS NULL',
                                        'tl_namespace' => NS_TEMPLATE ),
-                       'options' => array (
+                       'options' => array(
                                'GROUP BY' => array( 'tl_namespace', 'tl_title' ) ),
-                       'join_conds' => array ( 'page' => array ( 'LEFT JOIN',
-                                       array ( 'page_namespace = tl_namespace',
+                       'join_conds' => array( 'page' => array( 'LEFT JOIN',
+                                       array( 'page_namespace = tl_namespace',
                                                'page_title = tl_title' ) ) )
                );
        }
index 543c91e..303df34 100644 (file)
@@ -469,6 +469,8 @@ class SpecialWatchlist extends SpecialPage {
        /**
         * Returns html
         *
+        * @param int $days This gets overwritten, so is not used
+        * @param array $options Query parameters for URL
         * @return string
         */
        protected function cutoffLinks( $days, $options = array() ) {
index 8841af8..57bb7d0 100644 (file)
@@ -94,11 +94,11 @@ class SpecialWhatLinksHere extends SpecialPage {
        }
 
        /**
-        * @param int $level     Recursion level
-        * @param $target Title   Target title
-        * @param int $limit     Number of entries to display
-        * @param $from Title   Display from this article ID
-        * @param $back Title   Display from this article ID at backwards scrolling
+        * @param int $level Recursion level
+        * @param Title $target Target title
+        * @param int $limit Number of entries to display
+        * @param int $from Display from this article ID (default: 0)
+        * @param int $back Display from this article ID at backwards scrolling (default: 0)
         */
        function showIndirectLinks( $level, $target, $limit, $from = 0, $back = 0 ) {
                global $wgMaxRedirectLinksRetrieved;
index 329b1ad..c18c963 100644 (file)
@@ -78,15 +78,15 @@ class WithoutInterwikiPage extends PageQueryPage {
        }
 
        function getQueryInfo() {
-               $query = array (
-                       'tables' => array ( 'page', 'langlinks' ),
-                       'fields' => array ( 'namespace' => 'page_namespace',
+               $query = array(
+                       'tables' => array( 'page', 'langlinks' ),
+                       'fields' => array( 'namespace' => 'page_namespace',
                                        'title' => 'page_title',
                                        'value' => 'page_title' ),
-                       'conds' => array ( 'll_title IS NULL',
+                       'conds' => array( 'll_title IS NULL',
                                        'page_namespace' => MWNamespace::getContentNamespaces(),
                                        'page_is_redirect' => 0 ),
-                       'join_conds' => array ( 'langlinks' => array (
+                       'join_conds' => array( 'langlinks' => array(
                                        'LEFT JOIN', 'll_from = page_id' ) )
                );
                if ( $this->prefix ) {
index 541d9e4..dff9ada 100644 (file)
@@ -25,7 +25,9 @@
  * @defgroup Templates Templates
  */
 
-if( !defined( 'MEDIAWIKI' ) ) die( -1 );
+if ( !defined( 'MEDIAWIKI' ) ) {
+       die( -1 );
+}
 
 /**
  * @ingroup Templates
@@ -42,16 +44,20 @@ class UsercreateTemplate extends QuickTemplate {
        }
 
        function execute() {
-               if( $this->data['message'] ) {
+               if ( $this->data['message'] ) {
 ?>
        <div class="<?php $this->text('messagetype') ?>box">
-               <?php if ( $this->data['messagetype'] == 'error' ) { ?>
-                       <strong><?php $this->msg( 'loginerror' )?></strong><br />
-               <?php } ?>
-               <?php $this->html('message') ?>
+<?php
+                       if ( $this->data['messagetype'] == 'error' ) {
+                               ?><strong><?php $this->msg( 'loginerror' ) ?></strong><br /><?php
+                       }
+                       $this->html('message');
+?>
        </div>
        <div class="visualClear"></div>
-<?php } ?>
+<?php
+               }
+?>
 
 <div id="signupstart"><?php $this->msgWiki( 'signupstart' ); ?></div>
 <div id="userlogin">
@@ -60,7 +66,11 @@ class UsercreateTemplate extends QuickTemplate {
        <h2><?php $this->msg('createaccount') ?></h2>
        <p id="userloginlink"><?php $this->html('link') ?></p>
        <?php $this->html('header'); /* pre-table point for form plugins... */ ?>
-       <?php if( $this->haveData( 'languages' ) ) { ?><div id="languagelinks"><p><?php $this->html( 'languages' ); ?></p></div><?php } ?>
+<?php
+       if ( $this->haveData( 'languages' ) ) {
+               ?><div id="languagelinks"><p><?php $this->html( 'languages' ); ?></p></div><?php
+       }
+?>
        <table>
                <tr>
                        <td class="mw-label"><label for='wpName2'><?php $this->msg('yourname') ?></label></td>
@@ -79,7 +89,8 @@ class UsercreateTemplate extends QuickTemplate {
                <tr>
                        <td></td>
                        <td class="mw-input">
-                               <?php if( $this->data['createemail'] ) {
+<?php
+                               if ( $this->data['createemail'] ) {
                                        echo Xml::checkLabel(
                                                wfMessage( 'createaccountmail' )->text(),
                                                'wpCreateaccountMail',
@@ -87,7 +98,8 @@ class UsercreateTemplate extends QuickTemplate {
                                                $this->data['createemailset'],
                                                array( 'tabindex' => '2' )
                                        );
-                               } ?>
+                               }
+?>
                        </td>
                </tr>
                <tr class="mw-row-password">
@@ -102,12 +114,13 @@ class UsercreateTemplate extends QuickTemplate {
                        ) + User::passwordChangeInputAttribs() ); ?>
                        </td>
                </tr>
-       <?php if( $this->data['usedomain'] ) {
+<?php
+               if ( $this->data['usedomain'] ) {
                $doms = "";
-               foreach( $this->data['domainnames'] as $dom ) {
+               foreach ( $this->data['domainnames'] as $dom ) {
                        $doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
                }
-       ?>
+?>
                <tr id="mw-user-domain-section">
                        <td class="mw-label"><?php $this->msg( 'yourdomainname' ) ?></td>
                        <td class="mw-input">
@@ -117,7 +130,9 @@ class UsercreateTemplate extends QuickTemplate {
                                </select>
                        </td>
                </tr>
-       <?php } ?>
+<?php
+               }
+?>
                <tr class="mw-row-password">
                        <td class="mw-label"><label for='wpRetype'><?php $this->msg('yourpasswordagain') ?></label></td>
                        <td class="mw-input">
@@ -131,7 +146,9 @@ class UsercreateTemplate extends QuickTemplate {
                        </td>
                </tr>
                <tr>
-                       <?php if( $this->data['useemail'] ) { ?>
+<?php
+               if ( $this->data['useemail'] ) {
+?>
                                <td class="mw-label"><label for='wpEmail'><?php $this->msg('youremail') ?></label></td>
                                <td class="mw-input">
                                        <?php
@@ -153,8 +170,11 @@ class UsercreateTemplate extends QuickTemplate {
                                                        } ?>
                                        </div>
                                </td>
-                       <?php } ?>
-                       <?php if( $this->data['userealname'] ) { ?>
+<?php
+               }
+
+               if ( $this->data['userealname'] ) {
+?>
                                </tr>
                                <tr>
                                        <td class="mw-label"><label for='wpRealName'><?php $this->msg('yourrealname') ?></label></td>
@@ -166,8 +186,11 @@ class UsercreateTemplate extends QuickTemplate {
                                                        <?php $this->msgWiki('prefs-help-realname'); ?>
                                                </div>
                                        </td>
-                       <?php } ?>
-                       <?php if( $this->data['usereason'] ) { ?>
+<?php
+               }
+
+               if ( $this->data['usereason'] ) {
+?>
                                </tr>
                                <tr>
                                        <td class="mw-label"><label for='wpReason'><?php $this->msg('createaccountreason') ?></label></td>
@@ -176,9 +199,13 @@ class UsercreateTemplate extends QuickTemplate {
                                                        tabindex="8"
                                                        value="<?php $this->text('reason') ?>" size='20' />
                                        </td>
-                       <?php } ?>
+<?php
+               }
+?>
                </tr>
-               <?php if( $this->data['canremember'] ) { ?>
+<?php
+               if ( $this->data['canremember'] ) {
+?>
                <tr>
                        <td></td>
                        <td class="mw-input">
@@ -195,7 +222,8 @@ class UsercreateTemplate extends QuickTemplate {
                                ?>
                        </td>
                </tr>
-<?php   }
+<?php
+               }
 
                $tabIndex = 10;
                if ( isset( $this->data['extraInput'] ) && is_array( $this->data['extraInput'] ) ) {
@@ -230,12 +258,13 @@ class UsercreateTemplate extends QuickTemplate {
                                <label for="<?php echo htmlspecialchars( $inputItem['name'] ); ?>"><?php
                                        $this->msgHtml( $inputItem['msg'] ) ?></label><?php
                                        }
-                               if( $inputItem['helptext'] !== false ) {
+                               if ( $inputItem['helptext'] !== false ) {
                                ?>
                                <div class="prefsectiontip">
                                        <?php $this->msgWiki( $inputItem['helptext'] ); ?>
-                               </div>
-                               <?php } ?>
+                               </div><?php
+                               }
+                               ?>
                        </td>
                </tr>
 <?php
@@ -251,8 +280,14 @@ class UsercreateTemplate extends QuickTemplate {
                        </td>
                </tr>
        </table>
-<?php if( $this->haveData( 'uselang' ) ) { ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php } ?>
-<?php if( $this->haveData( 'token' ) ) { ?><input type="hidden" name="wpCreateaccountToken" value="<?php $this->text( 'token' ); ?>" /><?php } ?>
+<?php
+       if ( $this->haveData( 'uselang' ) ) {
+               ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php
+       }
+       if ( $this->haveData( 'token' ) ) {
+               ?><input type="hidden" name="wpCreateaccountToken" value="<?php $this->text( 'token' ); ?>" /><?php
+       }
+?>
 </form>
 </div>
 <div id="signupend"><?php $this->html( 'signupend' ); ?></div>
index 7bc0241..0b4b8e5 100644 (file)
  */
 class UserloginTemplate extends QuickTemplate {
        function execute() {
-               if( $this->data['message'] ) {
+               if ( $this->data['message'] ) {
 ?>
        <div class="<?php $this->text('messagetype') ?>box">
-               <?php if ( $this->data['messagetype'] == 'error' ) { ?>
-                       <strong><?php $this->msg( 'loginerror' )?></strong><br />
-               <?php } ?>
+               <?php
+               if ( $this->data['messagetype'] == 'error' ) {
+                       ?><strong><?php $this->msg( 'loginerror' ) ?></strong><br /><?php
+               }
+               ?>
                <?php $this->html('message') ?>
        </div>
-       <div class="visualClear"></div>
-<?php } ?>
+       <div class="visualClear"></div><?php
 
+               }
+?>
 <div id="loginstart"><?php $this->msgWiki( 'loginstart' ); ?></div>
 <div id="userloginForm">
 <form name="userlogin" method="post" action="<?php $this->text('action') ?>">
@@ -49,7 +52,11 @@ class UserloginTemplate extends QuickTemplate {
        <p id="userloginlink"><?php $this->html('link') ?></p>
        <?php $this->html('header'); /* pre-table point for form plugins... */ ?>
        <div id="userloginprompt"><?php  $this->msgWiki('loginprompt') ?></div>
-       <?php if( $this->haveData( 'languages' ) ) { ?><div id="languagelinks"><p><?php $this->html( 'languages' ); ?></p></div><?php } ?>
+<?php
+               if ( $this->haveData( 'languages' ) ) {
+                       ?><div id="languagelinks"><p><?php $this->html( 'languages' ); ?></p></div><?php
+               }
+?>
        <table>
                <tr>
                        <td class="mw-label"><label for='wpName1'><?php $this->msg('yourname') ?></label></td>
@@ -80,12 +87,13 @@ class UserloginTemplate extends QuickTemplate {
 
                        </td>
                </tr>
-       <?php if( isset( $this->data['usedomain'] ) && $this->data['usedomain'] ) {
+<?php
+               if ( isset( $this->data['usedomain'] ) && $this->data['usedomain'] ) {
                $doms = "";
-               foreach( $this->data['domainnames'] as $dom ) {
+               foreach ( $this->data['domainnames'] as $dom ) {
                        $doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
                }
-       ?>
+?>
                <tr id="mw-user-domain-section">
                        <td class="mw-label"><?php $this->msg( 'yourdomainname' ) ?></td>
                        <td class="mw-input">
@@ -95,13 +103,15 @@ class UserloginTemplate extends QuickTemplate {
                                </select>
                        </td>
                </tr>
-       <?php }
+<?php
+               }
 
-       if( $this->haveData( 'extrafields' ) ) {
-               echo $this->data['extrafields'];
-       }
+               if ( $this->haveData( 'extrafields' ) ) {
+                       echo $this->data['extrafields'];
+               }
 
-       if( $this->data['canremember'] ) { ?>
+               if ( $this->data['canremember'] ) {
+?>
                <tr>
                        <td></td>
                        <td class="mw-input">
@@ -118,8 +128,11 @@ class UserloginTemplate extends QuickTemplate {
                                ?>
                        </td>
                </tr>
-<?php } ?>
-<?php if( $this->data['cansecurelogin'] ) { ?>
+<?php
+               }
+
+               if ( $this->data['cansecurelogin'] ) {
+?>
                <tr>
                        <td></td>
                        <td class="mw-input">
@@ -131,26 +144,28 @@ class UserloginTemplate extends QuickTemplate {
                                $this->data['stickHTTPS'],
                                array( 'tabindex' => '9' )
                        );
-               ?>
+?>
                        </td>
                </tr>
-<?php } ?>
+<?php
+               }
+?>
                <tr>
                        <td></td>
                        <td class="mw-submit">
-                               <?php
-               echo Html::input( 'wpLoginAttempt', wfMessage( 'login' )->text(), 'submit', array(
-                       'id' => 'wpLoginAttempt',
-                       'tabindex' => '9'
-               ) );
+                       <?php
+                       echo Html::input( 'wpLoginAttempt', wfMessage( 'login' )->text(), 'submit', array(
+                               'id' => 'wpLoginAttempt',
+                               'tabindex' => '9'
+                       ) );
                if ( $this->data['useemail'] && $this->data['canreset'] ) {
-                       if( $this->data['resetlink'] === true ) {
+                       if ( $this->data['resetlink'] === true ) {
                                echo '&#160;';
                                echo Linker::link(
                                        SpecialPage::getTitleFor( 'PasswordReset' ),
                                        wfMessage( 'userlogin-resetlink' )
                                );
-                       } elseif( $this->data['resetlink'] === null ) {
+                       } elseif ( $this->data['resetlink'] === null ) {
                                echo '&#160;';
                                echo Html::input(
                                        'wpMailmypassword',
@@ -161,13 +176,20 @@ class UserloginTemplate extends QuickTemplate {
                                        )
                                );
                        }
-               } ?>
-
+               }
+?>
                        </td>
                </tr>
        </table>
-<?php if( $this->haveData( 'uselang' ) ) { ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php } ?>
-<?php if( $this->haveData( 'token' ) ) { ?><input type="hidden" name="wpLoginToken" value="<?php $this->text( 'token' ); ?>" /><?php } ?>
+<?php
+       if ( $this->haveData( 'uselang' ) ) {
+               ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php
+       }
+
+       if ( $this->haveData( 'token' ) ) {
+               ?><input type="hidden" name="wpLoginToken" value="<?php $this->text( 'token' ); ?>" /><?php
+       }
+?>
 </form>
 </div>
 <div id="loginend"><?php $this->html( 'loginend' ); ?></div>
diff --git a/includes/templates/UserloginVForm.php b/includes/templates/UserloginVForm.php
new file mode 100644 (file)
index 0000000..2e90c09
--- /dev/null
@@ -0,0 +1,195 @@
+<?php
+/**
+ * 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 Templates
+ */
+
+
+/**
+ * Html form for user login with new VForm appearance.
+ */
+class UserloginTemplateVForm extends BaseTemplate {
+
+       function execute() {
+               global $wgCookieExpiration;
+               $expirationDays = ceil( $wgCookieExpiration / ( 3600 * 24 ) );
+?>
+<div class="mw-ui-container">
+       <?php
+       // Some extensions including CAPTCHAs add content to header on UserLoginForm hook.
+       $this->html('header');
+       if( $this->haveData( 'languages' ) ) {
+       ?>
+               <div id="languagelinks">
+                       <p><?php $this->html('languages' ); ?></p>
+               </div>
+       <?php
+       }
+       ?>
+<div id="userloginForm">
+<form name="userlogin" class="mw-ui-vform" method="post" action="<?php $this->text('action') ?>">
+       <?php
+
+       if( $this->data['message'] ) {
+       ?>
+               <div class="<?php $this->text('messagetype') ?>box">
+               <?php
+               if ( $this->data['messagetype'] == 'error' ) {
+               ?>
+                       <strong><?php $this->msg( 'loginerror' )?></strong><br />
+               <?php
+               }
+               $this->html('message')
+               ?>
+               </div>
+       <?php
+       }
+       ?>
+               <div>
+                       <label for='wpName1'>
+                               <?php
+                               $this->msg( 'userlogin-yourname' );
+                               if ( $this->data['secureLoginUrl'] ) {
+                                       echo Html::element( 'a', array(
+                                                       'href' => $this->data['secureLoginUrl'],
+                                                       'class' => 'mw-ui-flush-right mw-secure',
+                                               ), $this->getMsg( 'userlogin-signwithsecure' )->text() );
+                               } ?>
+                       </label>
+                       <?php
+                       $extraAttrs = array();
+                       // Set focus to this field if its blank.
+                       if ( !$this->data['name'] ) {
+                               $extraAttrs['autofocus'] = '';
+                       }
+                       echo Html::input( 'wpName', $this->data['name'], 'text', array(
+                               'class' => 'loginText',
+                               'id' => 'wpName1',
+                               'tabindex' => '1',
+                               'size' => '20',
+                               // 'required' is blacklisted for now in Html.php due to browser issues.
+                               // Keeping here in case that changes
+                               'required',
+                               'placeholder' => $this->getMsg( 'userlogin-yourname-ph' )->text()
+                       ) + $extraAttrs );
+                       ?>
+               </div>
+               <div>
+                       <label for='wpPassword1'>
+                       <?php
+                       $this->msg('userlogin-yourpassword');
+
+                       if ( $this->data['useemail'] && $this->data['canreset'] && $this->data['resetlink'] === true ) {
+                               echo Linker::link(
+                                       SpecialPage::getTitleFor( 'PasswordReset' ),
+                                       $this->getMsg( 'userlogin-resetlink' )->parse(),
+                                       array( 'class' => 'mw-ui-flush-right' )
+                                       );
+                               // TODO: remove the wpMailmypassword code branch from
+                               // templates/Userlogin.php as well; it is never executed and
+                               // doesn't work.
+                       }
+                       ?>
+                       </label>
+                       <?php
+                       $extraAttrs = array();
+                       // Set focus to this field if username is filled in.
+                       if ( $this->data['name'] ) {
+                               $extraAttrs['autofocus'] = '';
+                       }
+                       echo Html::input( 'wpPassword', null, 'password', array(
+                               'class' => 'loginPassword',
+                               'id' => 'wpPassword1',
+                               'tabindex' => '2',
+                               'size' => '20',
+                               'placeholder' => $this->getMsg( 'userlogin-yourpassword-ph' )->text()
+                       ) + $extraAttrs );
+                       ?>
+               </div>
+       <?php
+       if( isset( $this->data['usedomain'] ) && $this->data['usedomain'] ) {
+               $doms = "";
+               foreach( $this->data['domainnames'] as $dom ) {
+                       $doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
+               }
+       ?>
+               <div id="mw-user-domain-section">
+                       <label for='wpDomain' class="pos-above"><?php $this->msg( 'yourdomain' ) ?></label>
+                               <select name="wpDomain" value="<?php $this->text( 'domain' ) ?>"
+                                       tabindex="3">
+                                       <?php echo $doms ?>
+                               </select>
+               </div>
+       <?php }
+
+       if( $this->haveData( 'extrafields' ) ) {
+               echo $this->data['extrafields'];
+       } ?>
+
+               <div>
+
+       <?php if( $this->data['canremember'] ) { ?>
+               <label class="mw-ui-checkbox-label">
+                       <input name="wpRemember" type="checkbox" value="1" id="wpRemember" tabindex="4"
+                               <?php if ( $this->data['remember'] ) {
+                                       echo 'checked="checked"';
+                               } ?>
+                       >
+                       <?php echo $this->getMsg( 'userlogin-remembermypassword' )->numParams( $expirationDays )->escaped(); ?>
+               </label>
+       <?php } ?>
+               </div>
+
+       <?php if( $this->data['cansecurelogin'] ) { ?>
+               <div>
+                       <label class="mw-ui-checkbox-label">
+                               <input name="wpStickHTTPS" type="checkbox" value="1" id="wpStickHTTPS" tabindex="5"
+                                       <?php if ( $this->data['stickHTTPS'] ) {
+                                               echo 'checked="checked"';
+                                       } ?>
+                               >
+                               <?php $this->msg( 'securelogin-stick-https' ); ?>
+                       </label>
+               </div>
+       <?php } ?>
+               <div>
+                       <?php
+                       echo Html::input( 'wpLoginAttempt', $this->getMsg( 'login' )->text(), 'submit', array(
+                               'id' => 'wpLoginAttempt',
+                               'tabindex' => '6',
+                               'class' => 'mw-ui-button mw-ui-big mw-ui-block mw-ui-primary'
+                       ) );
+                       ?>
+               </div>
+               <div id="mw-userlogin-help">
+                       <?php echo $this->getMsg( 'userlogin-helplink' )->parse() ?>
+               </div>
+               <?php if( $this->haveData( 'createOrLoginHref' ) ) { ?>
+                       <div id="mw-createaccount-cta">
+                               <h3 id="mw-userloginlink"><?php $this->msg( 'userlogin-noaccount' ) ?><a href="<?php $this->text( 'createOrLoginHref' ) ?>" id="mw-createaccount-join" tabindex="7"  class="mw-ui-button mw-ui-constructive"><?php $this->msg( 'userlogin-joinproject' ) ?></a></h3>
+                       </div>
+               <?php } ?>
+       <input type="hidden" id="mw-useNew" name="useNew" value="1" />
+<?php if( $this->haveData( 'uselang' ) ) { ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php } ?>
+<?php if( $this->haveData( 'token' ) ) { ?><input type="hidden" name="wpLoginToken" value="<?php $this->text( 'token' ); ?>" /><?php } ?>
+</form>
+</div>
+</div>
+<?php
+       }
+}
index 34af8ca..c98c445 100644 (file)
@@ -187,7 +187,9 @@ abstract class UploadBase {
         * @since 1.18
         * @return string
         */
-       public function getSourceType() { return null; }
+       public function getSourceType() {
+               return null;
+       }
 
        /**
         * Initialize the path information
@@ -898,7 +900,7 @@ abstract class UploadBase {
                                        "unrecognized extension '$extension', can't verify\n" );
                                return true;
                        } else {
-                               wfDebug( __METHOD__ . ": rejecting file with unknown detected mime type; ".
+                               wfDebug( __METHOD__ . ": rejecting file with unknown detected mime type; " .
                                        "recognized extension '$extension', so probably invalid file\n" );
                                return false;
                        }
@@ -1452,7 +1454,7 @@ abstract class UploadBase {
                                // Remove additional comments after a prefix
                                $comment = strpos( $line, '#' );
                                if ( $comment > 0 ) {
-                                       $line = substr( $line, 0, $comment-1 );
+                                       $line = substr( $line, 0, $comment - 1 );
                                }
                                $blacklist[] = trim( $line );
                        }
index 8144c34..7e07516 100644 (file)
@@ -31,7 +31,7 @@ class UploadFromChunks extends UploadFromFile {
        protected $mOffset, $mChunkIndex, $mFileKey, $mVirtualTempPath;
 
        /**
-        * Setup local pointers to stash, repo and user ( similar to UploadFromStash )
+        * Setup local pointers to stash, repo and user (similar to UploadFromStash)
         *
         * @param $user User
         * @param $stash UploadStash
@@ -72,7 +72,7 @@ class UploadFromChunks extends UploadFromFile {
                $this->mOffset = 0;
                // Create a local stash target
                $this->mLocalFile = parent::stashFile();
-               // Update the initial file offset ( based on file size )
+               // Update the initial file offset (based on file size)
                $this->mOffset = $this->mLocalFile->getSize();
                $this->mFileKey = $this->mLocalFile->getFileKey();
 
@@ -132,7 +132,7 @@ class UploadFromChunks extends UploadFromFile {
                }
                wfDebugLog( 'fileconcatenate', "Combined $i chunks in $tAmount seconds.\n" );
                // Update the mTempPath and mLocalFile
-               // ( for FileUpload or normal Stash to take over )
+               // (for FileUpload or normal Stash to take over)
                $this->mTempPath = $tmpPath; // file system path
                $tStart = microtime( true );
                $this->mLocalFile = parent::stashFile( $this->user );
index 70b6903..150e516 100644 (file)
@@ -160,7 +160,9 @@ class UploadFromUrl extends UploadBase {
        /**
         * @return string
         */
-       public function getSourceType() { return 'url'; }
+       public function getSourceType() {
+               return 'url';
+       }
 
        /**
         * @return Status
index 326d91d..a90fecf 100644 (file)
@@ -209,7 +209,7 @@ class UploadStash {
                list( $usec, $sec ) = explode( ' ', microtime() );
                $usec = substr( $usec, 2 );
                $key = wfBaseConvert( $sec . $usec, 10, 36 ) . '.' .
-                       wfBaseConvert( mt_rand(), 10, 36 ) . '.'.
+                       wfBaseConvert( mt_rand(), 10, 36 ) . '.' .
                        $this->userId . '.' .
                        $extension;
 
index b653f99..df1b156 100644 (file)
@@ -275,7 +275,7 @@ class Language {
                $alpha = '[a-z]';
                $digit = '[0-9]';
                $alphanum = '[a-z0-9]';
-               $x = 'x' ; # private use singleton
+               $x = 'x'; # private use singleton
                $singleton = '[a-wy-z]'; # other singleton
                $s = $lenient ? '[-_]' : '-';
 
@@ -482,6 +482,9 @@ class Language {
        }
 
        /**
+        * Returns an array of localised namespaces indexed by their numbers. If the namespace is not
+        * available in localised form, it will be included in English.
+        *
         * @return array
         */
        public function getNamespaces() {
@@ -1121,7 +1124,9 @@ class Language {
                                        $s .= $this->getMonthNameGen( substr( $ts, 4, 2 ) );
                                        break;
                                case 'xjx':
-                                       if ( !$hebrew ) $hebrew = self::tsToHebrew( $ts );
+                                       if ( !$hebrew ) {
+                                               $hebrew = self::tsToHebrew( $ts );
+                                       }
                                        $s .= $this->getHebrewCalendarMonthNameGen( $hebrew[1] );
                                        break;
                                case 'd':
@@ -1637,7 +1642,7 @@ class Language {
        private static function hebrewYearStart( $year ) {
                $a = intval( ( 12 * ( $year - 1 ) + 17 ) % 19 );
                $b = intval( ( $year - 1 ) % 4 );
-               $m = 32.044093161144 + 1.5542417966212 * $a +  $b / 4.0 - 0.0031777940220923 * ( $year - 1 );
+               $m = 32.044093161144 + 1.5542417966212 * $a + $b / 4.0 - 0.0031777940220923 * ( $year - 1 );
                if ( $m < 0 ) {
                        $m--;
                }
@@ -1811,7 +1816,7 @@ class Language {
                }
                if ( strlen( $s ) == 2 ) {
                        $str = $s . "'";
-               } else  {
+               } else {
                        $str = substr( $s, 0, strlen( $s ) - 2 ) . '"';
                        $str .= substr( $s, strlen( $s ) - 2, 2 );
                }
@@ -1900,12 +1905,12 @@ class Language {
                # will normalize out-of-range values so we don't have to split $minDiff
                # into hours and minutes.
                $t = mktime( (
-                 (int)substr( $ts, 8, 2 ) ), # Hours
-                 (int)substr( $ts, 10, 2 ) + $minDiff, # Minutes
-                 (int)substr( $ts, 12, 2 ), # Seconds
-                 (int)substr( $ts, 4, 2 ), # Month
-                 (int)substr( $ts, 6, 2 ), # Day
-                 (int)substr( $ts, 0, 4 ) ); # Year
+                       (int)substr( $ts, 8, 2 ) ), # Hours
+                       (int)substr( $ts, 10, 2 ) + $minDiff, # Minutes
+                       (int)substr( $ts, 12, 2 ), # Seconds
+                       (int)substr( $ts, 4, 2 ), # Month
+                       (int)substr( $ts, 6, 2 ), # Day
+                       (int)substr( $ts, 0, 4 ) ); # Year
 
                $date = date( 'YmdHis', $t );
                wfRestoreWarnings();
@@ -2781,7 +2786,9 @@ class Language {
         * @since 1.20
         */
        function getDirMarkEntity( $opposite = false ) {
-               if ( $opposite ) { return $this->isRTL() ? '&lrm;' : '&rlm;'; }
+               if ( $opposite ) {
+                       return $this->isRTL() ? '&lrm;' : '&rlm;';
+               }
                return $this->isRTL() ? '&rlm;' : '&lrm;';
        }
 
@@ -2798,7 +2805,9 @@ class Language {
        function getDirMark( $opposite = false ) {
                $lrm = "\xE2\x80\x8E"; # LEFT-TO-RIGHT MARK, commonly abbreviated LRM
                $rlm = "\xE2\x80\x8F"; # RIGHT-TO-LEFT MARK, commonly abbreviated RLM
-               if ( $opposite ) { return $this->isRTL() ? $lrm : $rlm; }
+               if ( $opposite ) {
+                       return $this->isRTL() ? $lrm : $rlm;
+               }
                return $this->isRTL() ? $rlm : $lrm;
        }
 
@@ -3022,7 +3031,7 @@ class Language {
                        $sign = "";
                        if ( intval( $number ) < 0 ) {
                                // For negative numbers apply the algorithm like positive number and add sign.
-                               $sign =  "-";
+                               $sign = "-";
                                $number = substr( $number, 1 );
                        }
                        $integerPart = array();
@@ -3030,20 +3039,20 @@ class Language {
                        $numMatches = preg_match_all( "/(#+)/", $digitGroupingPattern, $matches );
                        preg_match( "/\d+/", $number, $integerPart );
                        preg_match( "/\.\d*/", $number, $decimalPart );
-                       $groupedNumber = ( count( $decimalPart ) > 0 ) ? $decimalPart[0]:"";
-                       if ( $groupedNumber  === $number ) {
+                       $groupedNumber = ( count( $decimalPart ) > 0 ) ? $decimalPart[0] : "";
+                       if ( $groupedNumber === $number ) {
                                // the string does not have any number part. Eg: .12345
                                return $sign . $groupedNumber;
                        }
                        $start = $end = strlen( $integerPart[0] );
                        while ( $start > 0 ) {
-                               $match = $matches[0][$numMatches -1] ;
+                               $match = $matches[0][$numMatches - 1];
                                $matchLen = strlen( $match );
                                $start = $end - $matchLen;
                                if ( $start < 0 ) {
                                        $start = 0;
                                }
-                               $groupedNumber = substr( $number, $start, $end -$start ) . $groupedNumber ;
+                               $groupedNumber = substr( $number, $start, $end -$start ) . $groupedNumber;
                                $end = $start;
                                if ( $numMatches > 1 ) {
                                        // use the last pattern for the rest of the number
@@ -3220,9 +3229,9 @@ class Language {
                                # We got the first byte only of a multibyte char; remove it.
                                $string = substr( $string, 0, -1 );
                        } elseif ( $char >= 0x80 &&
-                                 preg_match( '/^(.*)(?:[\xe0-\xef][\x80-\xbf]|' .
-                                                         '[\xf0-\xf7][\x80-\xbf]{1,2})$/', $string, $m ) )
-                       {
+                               preg_match( '/^(.*)(?:[\xe0-\xef][\x80-\xbf]|' .
+                                       '[\xf0-\xf7][\x80-\xbf]{1,2})$/', $string, $m )
+                       {
                                # We chopped in the middle of a character; remove it
                                $string = $m[1];
                        }
@@ -3306,7 +3315,9 @@ class Language {
                                        break;
                                }
                        }
-                       if ( $pos >= $textLen ) break; // extra iteration just for above checks
+                       if ( $pos >= $textLen ) {
+                               break; // extra iteration just for above checks
+                       }
 
                        # Read the next char...
                        $ch = $text[$pos];
@@ -3439,7 +3450,7 @@ class Language {
        function getGrammarForms() {
                global $wgGrammarForms;
                if ( isset( $wgGrammarForms[$this->getCode()] ) && is_array( $wgGrammarForms[$this->getCode()] ) ) {
-                        return $wgGrammarForms[$this->getCode()];
+                       return $wgGrammarForms[$this->getCode()];
                }
                return array();
        }
index e36c085..512736b 100644 (file)
@@ -344,7 +344,7 @@ class LanguageConverter {
                        }
                }
 
-               if( $this->guessVariant( $text, $toVariant ) ) {
+               if ( $this->guessVariant( $text, $toVariant ) ) {
                        wfProfileOut( __METHOD__ );
                        return $text;
                }
@@ -644,14 +644,14 @@ class LanguageConverter {
                        if ( $pos === false ) {
                                // No more markup, append final segment
                                $fragment = substr( $text, $startPos );
-                               $out .= $shouldConvert? $this->autoConvert( $fragment, $variant ): $fragment;
+                               $out .= $shouldConvert ? $this->autoConvert( $fragment, $variant ) : $fragment;
                                return $out;
                        }
 
                        // Markup found
                        // Append initial segment
                        $fragment = substr( $text, $startPos, $pos - $startPos );
-                       $out .= $shouldConvert? $this->autoConvert( $fragment, $variant ): $fragment;
+                       $out .= $shouldConvert ? $this->autoConvert( $fragment, $variant ) : $fragment;
 
                        // Advance position
                        $startPos = $pos;
@@ -687,7 +687,7 @@ class LanguageConverter {
 
                while ( $startPos < $length ) {
                        $m = false;
-                       preg_match( '/-\{|\}-/', $text, $m,  PREG_OFFSET_CAPTURE, $startPos );
+                       preg_match( '/-\{|\}-/', $text, $m, PREG_OFFSET_CAPTURE, $startPos );
                        if ( !$m ) {
                                // Unclosed rule
                                break;
@@ -1259,14 +1259,14 @@ class ConverterRule {
                $choice = preg_split( $varsep_pattern, $rules );
 
                foreach ( $choice as $c ) {
-                       $v  = explode( ':', $c, 2 );
+                       $v = explode( ':', $c, 2 );
                        if ( count( $v ) != 2 ) {
                                // syntax error, skip
                                continue;
                        }
                        $to = trim( $v[1] );
-                       $v  = trim( $v[0] );
-                       $u  = explode( '=>', $v, 2 );
+                       $v = trim( $v[0] );
+                       $u = explode( '=>', $v, 2 );
                        // if $to is empty, strtr() could return a wrong result
                        if ( count( $u ) == 1 && $to && in_array( $v, $variants ) ) {
                                $bidtable[$v] = $to;
@@ -1439,7 +1439,7 @@ class ConverterRule {
                                   // then we check its fallback variants.
                                $variantFallbacks =
                                        $this->mConverter->getVariantFallbacks( $variant );
-                               if( is_array( $variantFallbacks ) ) {
+                               if ( is_array( $variantFallbacks ) ) {
                                        foreach ( $variantFallbacks as $variantFallback ) {
                                                // if current variant's fallback exist in flags
                                                if ( isset( $this->mVariantFlags[$variantFallback] ) ) {
index 89eff30..61fed2c 100644 (file)
  */
 
 /**
 * These determine things like interwikis, language selectors, and so on.
 * Safe to change without running scripts on the respective sites.
 *
 * \xE2\x80\x8E is the left-to-right marker and
 * \xE2\x80\x8F is the right-to-left marker.
 * They are required for ensuring the correct display of brackets in
 * mixed rtl/ltr environment.
 *
 * Some writing systems require some line-height fixes. This includes
 * most Indic scripts, like Devanagari.
 * If you are adding support for such a language, add it also to
 * the relevant section in skins/common/shared.css.
 *
 * @ingroup Language
 */
+ * These determine things like interwikis, language selectors, and so on.
+ * Safe to change without running scripts on the respective sites.
+ *
+ * \xE2\x80\x8E is the left-to-right marker and
+ * \xE2\x80\x8F is the right-to-left marker.
+ * They are required for ensuring the correct display of brackets in
+ * mixed rtl/ltr environment.
+ *
+ * Some writing systems require some line-height fixes. This includes
+ * most Indic scripts, like Devanagari.
+ * If you are adding support for such a language, add it also to
+ * the relevant section in skins/common/shared.css.
+ *
+ * @ingroup Language
+ */
 /* private */ $coreLanguageNames = array(
        'aa' => 'Qafár af',    # Afar
        'ab' => 'Аҧсшәа', # Abkhaz
        'ho' => 'Hiri Motu',    # Hiri Motu
        'hr' => 'hrvatski',             # Croatian
        'hsb' => 'hornjoserbsce',       # Upper Sorbian
-       'ht'  => 'Kreyòl ayisyen',             # Haitian Creole French
+       'ht' => 'Kreyòl ayisyen',              # Haitian Creole French
        'hu' => 'magyar',               # Hungarian
        'hy' => 'Հայերեն',       # Armenian
        'hz' => 'Otsiherero',   # Herero
        'ks-arab' => 'کٲشُر',      # Kashmiri (Perso-Arabic script)
        'ks-deva' => 'कॉशुर', # Kashmiri (Devanagari script)
        'ksh' => 'Ripoarisch',  # Ripuarian
-       'ku'  => 'Kurdî',      # Kurdish (multiple scripts - defaults to Latin)
+       'ku' => 'Kurdî',       # Kurdish (multiple scripts - defaults to Latin)
        'ku-latn' => "Kurdî (latînî)\xE2\x80\x8E",   # Northern Kurdish (Latin script)
        'ku-arab' => "كوردي (عەرەبی)\xE2\x80\x8F",   # Northern Kurdish (Arabic script) (falls back to ckb)
        'kv' => 'коми',     # Komi-Zyrian (Cyrillic is common script but also written in Latin script)
        'liv' => 'Līvõ kēļ',        # Livonian
        'lmo' => 'lumbaart',    # Lombard
        'ln' => 'lingála',             # Lingala
-       'lo' => 'ລາວ',# Laotian
+       'lo' => 'ລາວ',    # Laotian
        'loz' => 'Silozi', # Lozi
        'lt' => 'lietuvių',    # Lithuanian
        'ltg' => 'latgaļu',    # Latgalian
index b781d7a..6497b50 100644 (file)
@@ -46,13 +46,17 @@ class LanguageBe_tarask extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
 
                // If the actual number is not mentioned in the expression, then just two forms are enough:
                // singular for $count == 1
                // plural   for $count != 1
                // For example, "This user belongs to {{PLURAL:$1|one group|several groups}}."
-               if ( count( $forms ) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
+               if ( count( $forms ) === 2 ) {
+                       return $count == 1 ? $forms[0] : $forms[1];
+               }
 
                // @todo FIXME: CLDR defines 4 plural forms instead of 3
                //        http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
@@ -62,10 +66,10 @@ class LanguageBe_tarask extends Language {
                        return $forms[2];
                } else {
                        switch ( $count % 10 ) {
-                               case 1:  return $forms[0];
+                               case 1: return $forms[0];
                                case 2:
                                case 3:
-                               case 4:  return $forms[1];
+                               case 4: return $forms[1];
                                default: return $forms[2];
                        }
                }
index 2016a43..454ce34 100644 (file)
@@ -48,18 +48,19 @@ class LanguageCu extends Language {
                # join and array_slice instead mb_substr
                $ar = array();
                preg_match_all( '/./us', $word, $ar );
-               if ( !preg_match( "/[a-zA-Z_]/us", $word ) )
+               if ( !preg_match( "/[a-zA-Z_]/us", $word ) ) {
                        switch ( $case ) {
                                case 'genitive': # родительный падеж
-                                       if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вики' ) || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вики' ) )
-                                               { }
-                                       elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ї' )
+                                       if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вики' ) || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вики' ) ) {
+                                       } elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ї' ) {
                                                $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'їѩ';
+                                       }
                                        break;
                                case 'accusative': # винительный падеж
                                        # stub
                                        break;
                        }
+               }
                return $word;
        }
 
@@ -69,14 +70,16 @@ class LanguageCu extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
                $forms = $this->preConvertPlural( $forms, 4 );
 
                switch ( $count % 10 ) {
-                       case 1:  return $forms[0];
-                       case 2:  return $forms[1];
+                       case 1: return $forms[0];
+                       case 2: return $forms[1];
                        case 3:
-                       case 4:  return $forms[2];
+                       case 4: return $forms[2];
                        default: return $forms[3];
                }
        }
index 8f84322..39bdfb5 100644 (file)
@@ -78,14 +78,14 @@ class LanguageEo extends Language {
         * @return string
         */
        function strrtuxCallback( $matches ) {
-               static $ux = array (
-                       'x' => 'xx' , 'X' => 'Xx' ,
-                       "\xc4\x88" => "Cx" , "\xc4\x89" => "cx" ,
-                       "\xc4\x9c" => "Gx" , "\xc4\x9d" => "gx" ,
-                       "\xc4\xa4" => "Hx" , "\xc4\xa5" => "hx" ,
-                       "\xc4\xb4" => "Jx" , "\xc4\xb5" => "jx" ,
-                       "\xc5\x9c" => "Sx" , "\xc5\x9d" => "sx" ,
-                       "\xc5\xac" => "Ux" , "\xc5\xad" => "ux"
+               static $ux = array(
+                       'x' => 'xx', 'X' => 'Xx',
+                       "\xc4\x88" => "Cx", "\xc4\x89" => "cx",
+                       "\xc4\x9c" => "Gx", "\xc4\x9d" => "gx",
+                       "\xc4\xa4" => "Hx", "\xc4\xa5" => "hx",
+                       "\xc4\xb4" => "Jx", "\xc4\xb5" => "jx",
+                       "\xc5\x9c" => "Sx", "\xc5\x9d" => "sx",
+                       "\xc5\xac" => "Ux", "\xc5\xad" => "ux",
                );
                return strtr( $matches[1], $ux );
        }
@@ -95,21 +95,21 @@ class LanguageEo extends Language {
         * @return string
         */
        function strrtxuCallback( $matches ) {
-               static $xu = array (
-                       'xx' => 'x' , 'xX' => 'x' ,
-                       'Xx' => 'X' , 'XX' => 'X' ,
-                       "Cx" => "\xc4\x88" , "CX" => "\xc4\x88" ,
-                       "cx" => "\xc4\x89" , "cX" => "\xc4\x89" ,
-                       "Gx" => "\xc4\x9c" , "GX" => "\xc4\x9c" ,
-                       "gx" => "\xc4\x9d" , "gX" => "\xc4\x9d" ,
-                       "Hx" => "\xc4\xa4" , "HX" => "\xc4\xa4" ,
-                       "hx" => "\xc4\xa5" , "hX" => "\xc4\xa5" ,
-                       "Jx" => "\xc4\xb4" , "JX" => "\xc4\xb4" ,
-                       "jx" => "\xc4\xb5" , "jX" => "\xc4\xb5" ,
-                       "Sx" => "\xc5\x9c" , "SX" => "\xc5\x9c" ,
-                       "sx" => "\xc5\x9d" , "sX" => "\xc5\x9d" ,
-                       "Ux" => "\xc5\xac" , "UX" => "\xc5\xac" ,
-                       "ux" => "\xc5\xad" , "uX" => "\xc5\xad"
+               static $xu = array(
+                       'xx' => 'x', 'xX' => 'x',
+                       'Xx' => 'X', 'XX' => 'X',
+                       "Cx" => "\xc4\x88", "CX" => "\xc4\x88",
+                       "cx" => "\xc4\x89", "cX" => "\xc4\x89",
+                       "Gx" => "\xc4\x9c", "GX" => "\xc4\x9c",
+                       "gx" => "\xc4\x9d", "gX" => "\xc4\x9d",
+                       "Hx" => "\xc4\xa4", "HX" => "\xc4\xa4",
+                       "hx" => "\xc4\xa5", "hX" => "\xc4\xa5",
+                       "Jx" => "\xc4\xb4", "JX" => "\xc4\xb4",
+                       "jx" => "\xc4\xb5", "jX" => "\xc4\xb5",
+                       "Sx" => "\xc5\x9c", "SX" => "\xc5\x9c",
+                       "sx" => "\xc5\x9d", "sX" => "\xc5\x9d",
+                       "Ux" => "\xc5\xac", "UX" => "\xc5\xac",
+                       "ux" => "\xc5\xad", "uX" => "\xc5\xad",
                );
                return strtr( $matches[1], $xu ) . strtr( $matches[2], $xu );
        }
@@ -127,9 +127,9 @@ class LanguageEo extends Language {
                if ( $ishigh and !$isutf ) {
                        # Assume Latin1
                        $s = utf8_encode( $s );
-               } else {
-                       if ( preg_match( '/(\xc4[\x88\x89\x9c\x9d\xa4\xa5\xb4\xb5]' .
-                               '|\xc5[\x9c\x9d\xac\xad])/', $s ) )
+               } elseif ( preg_match( '/(\xc4[\x88\x89\x9c\x9d\xa4\xa5\xb4\xb5]' .
+                               '|\xc5[\x9c\x9d\xac\xad])/', $s )
+               ) {
                        return $s;
                }
 
index 6a2820d..ee1d1b5 100644 (file)
@@ -53,12 +53,14 @@ class LanguageFi extends Language {
                # The general case cannot be handled without a dictionary, but there's at least one notable
                # special case we should check for:
 
-               if ( preg_match( '/wiki$/i', $word ) )
+               if ( preg_match( '/wiki$/i', $word ) ) {
                        $aou = false;
+               }
 
                # append i after final consonant
-               if ( preg_match( '/[bcdfghjklmnpqrstvwxz]$/i', $word ) )
+               if ( preg_match( '/[bcdfghjklmnpqrstvwxz]$/i', $word ) ) {
                        $word .= 'i';
+               }
 
                switch ( $case ) {
                        case 'genitive':
index 2f58384..339ad4d 100644 (file)
@@ -46,19 +46,26 @@ class LanguageGa extends Language {
                case 'ainmlae':
                        switch ( $word ) {
                        case 'an Domhnach':
-                               $word = 'Dé Domhnaigh'; break;
+                               $word = 'Dé Domhnaigh';
+                               break;
                        case 'an Luan':
-                               $word = 'Dé Luain'; break;
+                               $word = 'Dé Luain';
+                               break;
                        case 'an Mháirt':
-                               $word = 'Dé Mháirt'; break;
+                               $word = 'Dé Mháirt';
+                               break;
                        case 'an Chéadaoin':
-                               $word = 'Dé Chéadaoin'; break;
+                               $word = 'Dé Chéadaoin';
+                               break;
                        case 'an Déardaoin':
-                               $word = 'Déardaoin'; break;
+                               $word = 'Déardaoin';
+                               break;
                        case 'an Aoine':
-                               $word = 'Dé hAoine'; break;
+                               $word = 'Dé hAoine';
+                               break;
                        case 'an Satharn':
-                               $word = 'Dé Sathairn'; break;
+                               $word = 'Dé Sathairn';
+                               break;
                        }
                }
                return $word;
index 3cc1f29..d941d67 100644 (file)
@@ -50,7 +50,7 @@ class GanConverter extends LanguageConverter {
                                                                        $flags,
                                                                        $manualLevel );
                $names = array(
-                       'gan'      => '原文',
+                       'gan' => '原文',
                        'gan-hans' => '简体',
                        'gan-hant' => '繁體',
                );
@@ -62,7 +62,7 @@ class GanConverter extends LanguageConverter {
                $this->mTables = array(
                        'gan-hans' => new ReplacementArray( $zh2Hans ),
                        'gan-hant' => new ReplacementArray( $zh2Hant ),
-                       'gan'      => new ReplacementArray
+                       'gan' => new ReplacementArray
                );
        }
 
@@ -89,12 +89,12 @@ class LanguageGan extends LanguageZh {
 
                $variants = array( 'gan', 'gan-hans', 'gan-hant' );
                $variantfallbacks = array(
-                       'gan'      => array( 'gan-hans', 'gan-hant' ),
+                       'gan' => array( 'gan-hans', 'gan-hant' ),
                        'gan-hans' => array( 'gan' ),
                        'gan-hant' => array( 'gan' ),
                );
                $ml = array(
-                       'gan'      => 'disable',
+                       'gan' => 'disable',
                );
 
                $this->mConverter = new GanConverter( $this, 'gan',
index 70b80ad..ba8a53c 100644 (file)
@@ -35,7 +35,9 @@ class LanguageGv extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
 
                $forms = $this->preConvertPlural( $forms, 4 );
 
index 6a2302c..6f7edb4 100644 (file)
@@ -36,7 +36,9 @@ class LanguageHi extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
                $forms = $this->preConvertPlural( $forms, 2 );
 
                return ( $count <= 1 ) ? $forms[0] : $forms[1];
index a0e9a87..910bc10 100644 (file)
@@ -34,7 +34,9 @@ class LanguageHr extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
                // @todo FIXME: CLDR defines 4 plural forms instead of 3. Plural for for decimals is missing.
                //        http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
                $forms = $this->preConvertPlural( $forms, 3 );
@@ -43,10 +45,10 @@ class LanguageHr extends Language {
                        return $forms[2];
                } else {
                        switch ( $count % 10 ) {
-                               case 1:  return $forms[0];
+                               case 1: return $forms[0];
                                case 2:
                                case 3:
-                               case 4:  return $forms[1];
+                               case 4: return $forms[1];
                                default: return $forms[2];
                        }
                }
index 5079813..2406829 100644 (file)
@@ -49,17 +49,18 @@ class LanguageHy extends Language {
                # join and array_slice instead mb_substr
                $ar = array();
                preg_match_all( '/./us', $word, $ar );
-               if ( !preg_match( "/[a-zA-Z_]/us", $word ) )
+               if ( !preg_match( "/[a-zA-Z_]/us", $word ) ) {
                        switch ( $case ) {
                                case 'genitive': # սեռական հոլով
-                                       if ( join( '', array_slice( $ar[0], -1 ) ) == 'ա' )
+                                       if ( join( '', array_slice( $ar[0], -1 ) ) == 'ա' ) {
                                                $word = join( '', array_slice( $ar[0], 0, -1 ) ) . 'այի';
-                                       elseif ( join( '', array_slice( $ar[0], -1 ) ) == 'ո' )
+                                       } elseif ( join( '', array_slice( $ar[0], -1 ) ) == 'ո' ) {
                                                $word = join( '', array_slice( $ar[0], 0, -1 ) ) . 'ոյի';
-                                       elseif ( join( '', array_slice( $ar[0], -4 ) ) == 'գիրք' )
+                                       } elseif ( join( '', array_slice( $ar[0], -4 ) ) == 'գիրք' ) {
                                                $word = join( '', array_slice( $ar[0], 0, -4 ) ) . 'գրքի';
-                                       else
+                                       } else {
                                                $word .= 'ի';
+                                       }
                                        break;
                                case 'dative':  # Տրական հոլով
                                        # stub
@@ -74,6 +75,7 @@ class LanguageHy extends Language {
                                        # stub
                                        break;
                        }
+               }
                return $word;
        }
 
index 14a5641..4c2d21e 100644 (file)
@@ -92,7 +92,7 @@ class IuConverter extends LanguageConverter {
                        'lowercase' => new ReplacementArray( $this->mUpperToLowerCaseLatin ),
                        'ike-cans' => new ReplacementArray( $this->mToSyllabics ),
                        'ike-latn' => new ReplacementArray( $this->mToLatin ),
-                       'iu'    => new ReplacementArray()
+                       'iu' => new ReplacementArray()
                );
        }
 
@@ -144,17 +144,19 @@ class IuConverter extends LanguageConverter {
         * @param $ignoreOtherCond bool
         */
        function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
-                // check for user namespace
+               // check for user namespace
                if ( is_object( $nt ) ) {
                        $ns = $nt->getNamespace();
-                       if ( $ns == NS_USER || $ns == NS_USER_TALK )
+                       if ( $ns == NS_USER || $ns == NS_USER_TALK ) {
                                return;
+                       }
                }
 
                $oldlink = $link;
                parent::findVariantLink( $link, $nt, $ignoreOtherCond );
-               if ( $this->getPreferredVariant() == $this->mMainLanguageCode )
+               if ( $this->getPreferredVariant() == $this->mMainLanguageCode ) {
                        $link = $oldlink;
+               }
        }
 
        /**
@@ -170,7 +172,9 @@ class IuConverter extends LanguageConverter {
                global $wgTitle;
                if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
                        $imagename = $wgTitle->getNsText();
-                       if ( preg_match( "/^$imagename:/", $text ) ) return $text;
+                       if ( preg_match( "/^$imagename:/", $text ) ) {
+                               return $text;
+                       }
                }
                return parent::autoConvert( $text, $toVariant );
        }
@@ -189,7 +193,7 @@ class IuConverter extends LanguageConverter {
                if ( trim( $text ) ) {
                        $this->loadTables();
                        // To syllabics, first translate uppercase to lowercase Latin
-                       if($toVariant == 'ike-cans') {
+                       if ( $toVariant == 'ike-cans' ) {
                                $text = $this->mTables['lowercase']->replace( $text );
                        }
                        $text = $this->mTables[$toVariant]->replace( $text );
index 0318fb1..6203b4b 100644 (file)
@@ -41,7 +41,7 @@ class LanguageKaa extends Language {
        function convertGrammar( $word, $case ) {
                global $wgGrammarForms;
                if ( isset( $wgGrammarForms['kaa'][$case][$word] ) ) {
-                    return $wgGrammarForms['kaa'][$case][$word];
+                       return $wgGrammarForms['kaa'][$case][$word];
                }
                /* Full code of function convertGrammar() is in development. Updates coming soon. */
                return $word;
index d8a7e2c..c8c06f3 100644 (file)
@@ -68,18 +68,18 @@ class KkConverter extends LanguageConverter {
                $kk2Cyrl = array();
                $kk2Latn = array();
                $kk2Arab = array();
-               $kk2KZ   = array();
-               $kk2TR   = array();
-               $kk2CN   = array();
+               $kk2KZ = array();
+               $kk2TR = array();
+               $kk2CN = array();
 
                $this->mTables = array(
                        'kk-cyrl' => new ReplacementArray( $kk2Cyrl ),
                        'kk-latn' => new ReplacementArray( $kk2Latn ),
                        'kk-arab' => new ReplacementArray( $kk2Arab ),
-                       'kk-kz'   => new ReplacementArray( array_merge( $kk2Cyrl, $kk2KZ ) ),
-                       'kk-tr'   => new ReplacementArray( array_merge( $kk2Latn, $kk2TR ) ),
-                       'kk-cn'   => new ReplacementArray( array_merge( $kk2Arab, $kk2CN ) ),
-                       'kk'      => new ReplacementArray()
+                       'kk-kz' => new ReplacementArray( array_merge( $kk2Cyrl, $kk2KZ ) ),
+                       'kk-tr' => new ReplacementArray( array_merge( $kk2Latn, $kk2TR ) ),
+                       'kk-cn' => new ReplacementArray( array_merge( $kk2Arab, $kk2CN ) ),
+                       'kk' => new ReplacementArray()
                );
        }
 
@@ -173,9 +173,9 @@ class KkConverter extends LanguageConverter {
                        # # Punctuation -> Arabic
                        '/#|№|No\./u' => '؀', # &#x0600;
                        '/\,/' => '،', # &#x060C;
-                       '/;/'  => '؛', # &#x061B;
+                       '/;/' => '؛', # &#x061B;
                        '/\?/' => '؟', # &#x061F;
-                       '/%/'  => '٪', # &#x066A;
+                       '/%/' => '٪', # &#x066A;
                        '/\*/' => '٭', # &#x066D;
                        # # Digits -> Arabic
                        '/0/' => '۰', # &#x06F0;
@@ -259,14 +259,16 @@ class KkConverter extends LanguageConverter {
                // check for user namespace
                if ( is_object( $nt ) ) {
                        $ns = $nt->getNamespace();
-                       if ( $ns == NS_USER || $ns == NS_USER_TALK )
+                       if ( $ns == NS_USER || $ns == NS_USER_TALK ) {
                                return;
+                       }
                }
 
                $oldlink = $link;
                parent::findVariantLink( $link, $nt, $ignoreOtherCond );
-               if ( $this->getPreferredVariant() == $this->mMainLanguageCode )
+               if ( $this->getPreferredVariant() == $this->mMainLanguageCode ) {
                        $link = $oldlink;
+               }
        }
 
        /**
@@ -282,7 +284,9 @@ class KkConverter extends LanguageConverter {
                global $wgTitle;
                if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
                        $imagename = $wgTitle->getNsText();
-                       if ( preg_match( "/^$imagename:/", $text ) ) return $text;
+                       if ( preg_match( "/^$imagename:/", $text ) ) {
+                               return $text;
+                       }
                }
                return parent::autoConvert( $text, $toVariant );
        }
@@ -414,13 +418,13 @@ class LanguageKk extends LanguageKk_cyrl {
 
                $variants = array( 'kk', 'kk-cyrl', 'kk-latn', 'kk-arab', 'kk-kz', 'kk-tr', 'kk-cn' );
                $variantfallbacks = array(
-                       'kk'      => 'kk-cyrl',
+                       'kk' => 'kk-cyrl',
                        'kk-cyrl' => 'kk',
                        'kk-latn' => 'kk',
                        'kk-arab' => 'kk',
-                       'kk-kz'   => 'kk-cyrl',
-                       'kk-tr'   => 'kk-latn',
-                       'kk-cn'   => 'kk-arab'
+                       'kk-kz' => 'kk-cyrl',
+                       'kk-tr' => 'kk-latn',
+                       'kk-cn' => 'kk-arab'
                );
 
                $this->mConverter = new KkConverter( $this, 'kk', $variants, $variantfallbacks );
index 081a20f..5a7bbf3 100644 (file)
@@ -115,14 +115,14 @@ class LanguageKk_cyrl extends Language {
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "а";
                                        }
-                               } elseif ( in_array( $wordEnding, $secondPerson  ) ) {
+                               } elseif ( in_array( $wordEnding, $secondPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "ге";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "ға";
                                        }
-                               } elseif ( in_array( $wordEnding, $thirdPerson  ) ) {
-                                 if ( in_array( $wordLastVowel, $frontVowels ) ) {
+                               } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
+                                       if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "не";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "на";
@@ -153,13 +153,13 @@ class LanguageKk_cyrl extends Language {
                                break;
                        case "dc31":
                        case "possessive accusative": # täweldık + tabıs
-                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson  ) ) {
+                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "ді";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "ды";
                                        }
-                               } elseif ( in_array( $wordEnding, $thirdPerson  ) ) {
+                               } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
                                                $word = $word . "н";
                                }
                                break;
@@ -181,13 +181,13 @@ class LanguageKk_cyrl extends Language {
                                break;
                        case "dc41":
                        case "possessive locative": # täweldık + jatıs
-                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson  ) ) {
+                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "де";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "да";
                                        }
-                               } elseif ( in_array( $wordEnding, $thirdPerson  ) ) {
+                               } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "нде";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
@@ -209,7 +209,7 @@ class LanguageKk_cyrl extends Language {
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "дан";
                                        }
-                               }  elseif ( in_array( $wordEnding, $Nasals ) ) {
+                               } elseif ( in_array( $wordEnding, $Nasals ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "нен";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
@@ -219,13 +219,13 @@ class LanguageKk_cyrl extends Language {
                                break;
                        case "dc51":
                        case "possessive ablative": # täweldık + şığıs
-                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson  ) ) {
+                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "нен";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "нан";
                                        }
-                               } elseif ( in_array( $wordEnding, $secondPerson  ) ) {
+                               } elseif ( in_array( $wordEnding, $secondPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "ден";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
@@ -340,14 +340,14 @@ class LanguageKk_cyrl extends Language {
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "a";
                                        }
-                               } elseif ( in_array( $wordEnding, $secondPerson  ) ) {
+                               } elseif ( in_array( $wordEnding, $secondPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "ge";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "ğa";
                                        }
-                               } elseif ( in_array( $wordEnding, $thirdPerson  ) ) {
-                                 if ( in_array( $wordLastVowel, $frontVowels ) ) {
+                               } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
+                                       if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "ne";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "na";
@@ -378,13 +378,13 @@ class LanguageKk_cyrl extends Language {
                                break;
                        case "dc31":
                        case "possessive accusative": # täweldık + tabıs
-                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson  ) ) {
+                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "di";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "dı";
                                        }
-                               } elseif ( in_array( $wordEnding, $thirdPerson  ) ) {
+                               } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
                                                $word = $word . "n";
                                }
                                break;
@@ -406,13 +406,13 @@ class LanguageKk_cyrl extends Language {
                                break;
                        case "dc41":
                        case "possessive locative": # täweldık + jatıs
-                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson  ) ) {
+                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "de";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "da";
                                        }
-                               } elseif ( in_array( $wordEnding, $thirdPerson  ) ) {
+                               } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "nde";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
@@ -434,7 +434,7 @@ class LanguageKk_cyrl extends Language {
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "dan";
                                        }
-                               }  elseif ( in_array( $wordEnding, $Nasals ) ) {
+                               } elseif ( in_array( $wordEnding, $Nasals ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "nen";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
@@ -444,13 +444,13 @@ class LanguageKk_cyrl extends Language {
                                break;
                        case "dc51":
                        case "possessive ablative": # täweldık + şığıs
-                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson  ) ) {
+                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "nen";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "nan";
                                        }
-                               } elseif ( in_array( $wordEnding, $secondPerson  ) ) {
+                               } elseif ( in_array( $wordEnding, $secondPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "den";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
@@ -499,7 +499,7 @@ class LanguageKk_cyrl extends Language {
                // Set up some constants...
                // Vowels in last syllable
                $frontVowels = array( "ە", "ٶ", "ٷ", "ٸ", "ٵ", "ە" );
-               $backVowels = array( "ا", "و", "ۇ", "ى"  );
+               $backVowels = array( "ا", "و", "ۇ", "ى" );
                $allVowels = array( "ە", "ٶ", "ٷ", "ٸ", "ٵ", "ە", "ا", "و", "ۇ", "ى" );
                // Preceding letters
                $Nasals = array( "م", "ن", "ڭ" );
@@ -565,14 +565,14 @@ class LanguageKk_cyrl extends Language {
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "ا";
                                        }
-                               } elseif ( in_array( $wordEnding, $secondPerson  ) ) {
+                               } elseif ( in_array( $wordEnding, $secondPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "گە";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "عا";
                                        }
-                               } elseif ( in_array( $wordEnding, $thirdPerson  ) ) {
-                                 if ( in_array( $wordLastVowel, $frontVowels ) ) {
+                               } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
+                                       if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "نە";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "نا";
@@ -603,13 +603,13 @@ class LanguageKk_cyrl extends Language {
                                break;
                        case "dc31":
                        case "possessive accusative": # täweldık + tabıs
-                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson  ) ) {
+                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "دٸ";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "دى";
                                        }
-                               } elseif ( in_array( $wordEnding, $thirdPerson  ) ) {
+                               } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
                                                $word = $word . "ن";
                                }
                                break;
@@ -631,13 +631,13 @@ class LanguageKk_cyrl extends Language {
                                break;
                        case "dc41":
                        case "possessive locative": # täweldık + jatıs
-                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson  ) ) {
+                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "دە";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "دا";
                                        }
-                               } elseif ( in_array( $wordEnding, $thirdPerson  ) ) {
+                               } elseif ( in_array( $wordEnding, $thirdPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "ندە";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
@@ -659,7 +659,7 @@ class LanguageKk_cyrl extends Language {
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "دان";
                                        }
-                               }  elseif ( in_array( $wordEnding, $Nasals ) ) {
+                               } elseif ( in_array( $wordEnding, $Nasals ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "نەن";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
@@ -669,13 +669,13 @@ class LanguageKk_cyrl extends Language {
                                break;
                        case "dc51":
                        case "possessive ablative": # täweldık + şığıs
-                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson  ) ) {
+                               if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "نەن";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
                                                $word = $word . "نان";
                                        }
-                               } elseif ( in_array( $wordEnding, $secondPerson  ) ) {
+                               } elseif ( in_array( $wordEnding, $secondPerson ) ) {
                                        if ( in_array( $wordLastVowel, $frontVowels ) ) {
                                                $word = $word . "دەن";
                                        } elseif ( in_array( $wordLastVowel, $backVowels ) ) {
index 074ad13..09c5727 100644 (file)
@@ -104,17 +104,17 @@ class LanguageKsh extends Language {
                        # däm WikiMaatplaz sing, dä Wikipeedija ier, däm Wikiwööterbooch sing
                        # dem/em WikiMaatplaz sing, de Wikipeedija ier, dem/em Wikiwööterbooch sing
                        $word = ( preg_match( '/ b/', $case )
-                                               ? ( $gender=='f' ? 'dä' : 'däm' )
-                                               : ( $gender=='f' ? 'de' : 'dem' )
+                                               ? ( $gender == 'f' ? 'dä' : 'däm' )
+                                               : ( $gender == 'f' ? 'de' : 'dem' )
                                        ) . ' ' . $word . ' ' .
-                                       ( $gender=='f' ? 'ier' : 'sing' ) .
+                                       ( $gender == 'f' ? 'ier' : 'sing' ) .
                                        ( preg_match( '/ m/', $case ) ? 'e' : ''
                                );
                } elseif ( preg_match( '/ e/', $case ) ) {
                        # en dämm WikiMaatPlaz, en dä Wikipeedija, en dämm Wikiwööterbooch
                        # em WikiMaatplaz, en de Wikipeedija, em Wikiwööterbooch
                        if ( preg_match( '/ b/', $case ) ) {
-                               $word = 'en '.( $gender == 'f' ? 'dä' : 'däm' ) . ' ' . $word;
+                               $word = 'en ' . ( $gender == 'f' ? 'dä' : 'däm' ) . ' ' . $word;
                        } else {
                                $word = ( $gender == 'f' ? 'en de' : 'em' ) . ' ' . $word;
                        }
@@ -124,13 +124,13 @@ class LanguageKsh extends Language {
                        if ( preg_match( '/ b/', $case ) ) {
                                $word = 'vun ' . ( $gender == 'f' ? 'dä' : 'däm' ) . ' ' . $word;
                        } else {
-                               $word = ( $gender== 'f' ? 'vun de' : 'vum' ) . ' ' . $word;
+                               $word = ( $gender == 'f' ? 'vun de' : 'vum' ) . ' ' . $word;
                        }
                } elseif ( preg_match( '/ [3d]/', $case ) ) {
                        # dämm WikiMaatPlaz, dä Wikipeedija, dämm Wikiwööterbooch
                        # dem/em WikiMaatplaz, de Wikipeedija, dem/em Wikiwööterbooch
                        if ( preg_match( '/ b/', $case ) ) {
-                               $word = ( $gender == 'f' ? 'dää' : 'dämm' ) .' ' . $word;
+                               $word = ( $gender == 'f' ? 'dää' : 'dämm' ) . ' ' . $word;
                        } else {
                                $word = ( $gender == 'f' ? 'de' : 'dem' ) . ' ' . $word;
                        }
@@ -141,7 +141,7 @@ class LanguageKsh extends Language {
                                switch ( $gender ) {
                                        case 'm':
                                                $lord = 'dä';
-                                               break ;
+                                               break;
                                        case 'f':
                                                $lord = 'di';
                                                break;
@@ -160,7 +160,7 @@ class LanguageKsh extends Language {
                                                $lord = 'et';
                                }
                        }
-                       $word = $lord.' '.$word;
+                       $word = $lord . ' ' . $word;
                }
                return $word;
        }
@@ -189,7 +189,9 @@ class LanguageKsh extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
                $forms = $this->preConvertPlural( $forms, 3 );
 
                if ( $count == 1 ) {
index ef1b065..e4290ce 100644 (file)
@@ -41,23 +41,23 @@ class KuConverter extends LanguageConverter {
 
                /* Doppel- und Halbvokale */
                'ڵ' => 'll', # ll
-               'ڕ'  => 'rr', # rr
-               'ا'  => 'a',
+               'ڕ' => 'rr', # rr
+               'ا' => 'a',
                # 'ئێ' => 'ê', # initial e
-               'ە'  => 'e',
-               'ه‌'  => 'e', # with one non-joiner
-               'ه‌‌'  => 'e', # with two non-joiner
-               'ة'  => 'e',
+               'ە' => 'e',
+               'ه‌' => 'e', # with one non-joiner
+               'ه‌‌' => 'e', # with two non-joiner
+               'ة' => 'e',
                'ێ' => 'ê',
-               'ي'  => 'î',
-               'ی'  => 'î', # U+06CC  db 8c  ARABIC LETTER FARSI YEH
-               'ى'  => 'î', # U+0649  d9 89  ARABIC LETTER ALEF MAKSURA
-               'ۆ'  => 'o',
-               'و'  => 'w',
-               'ئ'  => '', # initial hemze should not be shown
-               '،'  => ',',
-               'ع'  => '\'', # ayn
-               '؟'  => '?',
+               'ي' => 'î',
+               'ی' => 'î', # U+06CC  db 8c  ARABIC LETTER FARSI YEH
+               'ى' => 'î', # U+0649  d9 89  ARABIC LETTER ALEF MAKSURA
+               'ۆ' => 'o',
+               'و' => 'w',
+               'ئ' => '', # initial hemze should not be shown
+               '،' => ',',
+               'ع' => '\'', # ayn
+               '؟' => '?',
 
                # digits
                '٠' => '0', # &#x0660;
@@ -113,13 +113,13 @@ class KuConverter extends LanguageConverter {
                ' o' => 'ئۆ ',
                ' u' => 'ئو ',
                ' û' => 'ئوو ',
-               'A'  => 'ئا',
-               'E'  => 'ئە',
-               'Ê'  => 'ئێ',
-               'Î'  => 'ئی',
-               'O'  => 'ئۆ',
-               'U'  => 'ئو',
-               'Û'  => 'ئوو',
+               'A' => 'ئا',
+               'E' => 'ئە',
+               'Ê' => 'ئێ',
+               'Î' => 'ئی',
+               'O' => 'ئۆ',
+               'U' => 'ئو',
+               'Û' => 'ئوو',
                ' A' => 'ئا ',
                ' E' => 'ئە ',
                ' Ê' => 'ئێ ',
@@ -149,7 +149,7 @@ class KuConverter extends LanguageConverter {
                $this->mTables = array(
                        'ku-latn' => new ReplacementArray( $this->mArabicToLatin ),
                        'ku-arab' => new ReplacementArray( $this->mLatinToArabic ),
-                       'ku'      => new ReplacementArray()
+                       'ku' => new ReplacementArray()
                );
        }
 
@@ -167,14 +167,16 @@ class KuConverter extends LanguageConverter {
                // check for user namespace
                if ( is_object( $nt ) ) {
                        $ns = $nt->getNamespace();
-                       if ( $ns == NS_USER || $ns == NS_USER_TALK )
+                       if ( $ns == NS_USER || $ns == NS_USER_TALK ) {
                                return;
+                       }
                }
 
                $oldlink = $link;
                parent::findVariantLink( $link, $nt, $ignoreOtherCond );
-               if ( $this->getPreferredVariant() == $this->mMainLanguageCode )
+               if ( $this->getPreferredVariant() == $this->mMainLanguageCode ) {
                        $link = $oldlink;
+               }
        }
 
        /**
@@ -190,7 +192,9 @@ class KuConverter extends LanguageConverter {
                global $wgTitle;
                if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
                        $imagename = $wgTitle->getNsText();
-                       if ( preg_match( "/^$imagename:/", $text ) ) return $text;
+                       if ( preg_match( "/^$imagename:/", $text ) ) {
+                               return $text;
+                       }
                }
                return parent::autoConvert( $text, $toVariant );
        }
@@ -253,7 +257,7 @@ class LanguageKu extends LanguageKu_ku {
 
                $variants = array( 'ku', 'ku-arab', 'ku-latn' );
                $variantfallbacks = array(
-                       'ku'      => 'ku-latn',
+                       'ku' => 'ku-latn',
                        'ku-arab' => 'ku-latn',
                        'ku-latn' => 'ku-arab',
                );
index ba0f140..9c77878 100644 (file)
@@ -49,54 +49,60 @@ class LanguageLa extends Language {
                switch ( $case ) {
                case 'genitive':
                        // only a few declensions, and even for those mostly the singular only
-                       $in  = array(   '/u[ms]$/',                     # 2nd declension singular
-                                       '/ommunia$/',                   # 3rd declension neuter plural (partly)
-                                       '/a$/',                         # 1st declension singular
-                                       '/libri$/', '/nuntii$/',        # 2nd declension plural (partly)
-                                       '/tio$/', '/ns$/', '/as$/',     # 3rd declension singular (partly)
-                                       '/es$/'                         # 5th declension singular
-                                       );
-                       $out = array(   'i',
-                                       'ommunium',
-                                       'ae',
-                                       'librorum', 'nuntiorum',
-                                       'tionis', 'ntis', 'atis',
-                                       'ei'
-                                       );
+                       $in = array(
+                               '/u[ms]$/',                     # 2nd declension singular
+                               '/ommunia$/',                   # 3rd declension neuter plural (partly)
+                               '/a$/',                         # 1st declension singular
+                               '/libri$/', '/nuntii$/',        # 2nd declension plural (partly)
+                               '/tio$/', '/ns$/', '/as$/',     # 3rd declension singular (partly)
+                               '/es$/'                         # 5th declension singular
+                       );
+                       $out = array(
+                               'i',
+                               'ommunium',
+                               'ae',
+                               'librorum', 'nuntiorum',
+                               'tionis', 'ntis', 'atis',
+                               'ei'
+                       );
                        return preg_replace( $in, $out, $word );
                case 'accusative':
                        // only a few declensions, and even for those mostly the singular only
-                       $in  = array(   '/u[ms]$/',                     # 2nd declension singular
-                                       '/a$/',                         # 1st declension singular
-                                       '/ommuniam$/',                  # 3rd declension neuter plural (partly)
-                                       '/libri$/', '/nuntii$/',        # 2nd declension plural (partly)
-                                       '/tio$/', '/ns$/', '/as$/',     # 3rd declension singular (partly)
-                                       '/es$/'                         # 5th declension singular
-                                       );
-                       $out = array(   'um',
-                                       'am',
-                                       'ommunia',
-                                       'libros', 'nuntios',
-                                       'tionem', 'ntem', 'atem',
-                                       'em'
-                                       );
+                       $in = array(
+                               '/u[ms]$/',                     # 2nd declension singular
+                               '/a$/',                         # 1st declension singular
+                               '/ommuniam$/',              # 3rd declension neuter plural (partly)
+                               '/libri$/', '/nuntii$/',        # 2nd declension plural (partly)
+                               '/tio$/', '/ns$/', '/as$/',     # 3rd declension singular (partly)
+                               '/es$/'                         # 5th declension singular
+                       );
+                       $out = array(
+                               'um',
+                               'am',
+                               'ommunia',
+                               'libros', 'nuntios',
+                               'tionem', 'ntem', 'atem',
+                               'em'
+                       );
                        return preg_replace( $in, $out, $word );
                case 'ablative':
                        // only a few declensions, and even for those mostly the singular only
-                       $in  = array(   '/u[ms]$/',                     # 2nd declension singular
-                                       '/ommunia$/',                   # 3rd declension neuter plural (partly)
-                                       '/a$/',                         # 1st declension singular
-                                       '/libri$/', '/nuntii$/',        # 2nd declension plural (partly)
-                                       '/tio$/', '/ns$/', '/as$/',     # 3rd declension singular (partly)
-                                       '/es$/'                         # 5th declension singular
-                                       );
-                       $out = array(   'o',
-                                       'ommunibus',
-                                       'a',
-                                       'libris', 'nuntiis',
-                                       'tione', 'nte', 'ate',
-                                       'e'
-                                       );
+                       $in = array(
+                               '/u[ms]$/',                     # 2nd declension singular
+                               '/ommunia$/',                   # 3rd declension neuter plural (partly)
+                               '/a$/',                         # 1st declension singular
+                               '/libri$/', '/nuntii$/',        # 2nd declension plural (partly)
+                               '/tio$/', '/ns$/', '/as$/',     # 3rd declension singular (partly)
+                               '/es$/'                         # 5th declension singular
+                       );
+                       $out = array(
+                               'o',
+                               'ommunibus',
+                               'a',
+                               'libris', 'nuntiis',
+                               'tione', 'nte', 'ate',
+                               'e'
+                       );
                        return preg_replace( $in, $out, $word );
                default:
                        return $word;
index ace0a4c..bf6800c 100644 (file)
@@ -36,7 +36,9 @@ class LanguageMg extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
                $forms = $this->preConvertPlural( $forms, 2 );
 
                return ( $count <= 1 ) ? $forms[0] : $forms[1];
index 68bd7ca..20213a8 100644 (file)
@@ -35,14 +35,21 @@ class LanguageMt extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
 
                $forms = $this->preConvertPlural( $forms, 4 );
 
-               if ( $count == 1 ) $index = 0;
-               elseif ( $count == 0 || ( $count % 100 > 1 && $count % 100 < 11 ) ) $index = 1;
-               elseif ( $count % 100 > 10 && $count % 100 < 20 ) $index = 2;
-               else $index = 3;
+               if ( $count == 1 ) {
+                       $index = 0;
+               } elseif ( $count == 0 || ( $count % 100 > 1 && $count % 100 < 11 ) ) {
+                       $index = 1;
+               } elseif ( $count % 100 > 10 && $count % 100 < 20 ) {
+                       $index = 2;
+               } else {
+                       $index = 3;
+               }
                return $forms[$index];
        }
 }
index a808840..f37e2d5 100644 (file)
@@ -81,27 +81,41 @@ class LanguageOs extends Language {
                # Checking if $word ends on 'у'. 'У' can be either consonant 'W' or vowel 'U' in cyrillic Ossetic.
                # Examples: {{grammar:genitive|аунеу}} = аунеуы, {{grammar:genitive|лæппу}} = лæппуйы.
                elseif ( preg_match( "/у$/u", $word ) ) {
-                       if ( !preg_match( "/[аæеёиоыэюя]$/u", mb_substr( $word, -2, 1 ) ) )
+                       if ( !preg_match( "/[аæеёиоыэюя]$/u", mb_substr( $word, -2, 1 ) ) ) {
                                $jot = 'й';
+                       }
                } elseif ( !preg_match( "/[бвгджзйклмнопрстфхцчшщьъ]$/u", $word ) ) {
                        $hyphen = '-';
                }
 
                switch ( $case ) {
-                       case 'genitive': $ending = $hyphen . $jot . 'ы'; break;
-                       case 'dative': $ending = $hyphen . $jot . 'æн'; break;
-                       case 'allative': $ending = $hyphen . $end_allative; break;
+                       case 'genitive':
+                               $ending = $hyphen . $jot . 'ы';
+                               break;
+                       case 'dative':
+                               $ending = $hyphen . $jot . 'æн';
+                               break;
+                       case 'allative':
+                               $ending = $hyphen . $end_allative;
+                               break;
                        case 'ablative':
                                if ( $jot == 'й' ) {
-                                       $ending = $hyphen . $jot . 'æ'; break;
+                                       $ending = $hyphen . $jot . 'æ';
+                               } else {
+                                       $ending = $hyphen . $jot . 'æй';
                                }
-                               else {
-                                       $ending = $hyphen . $jot . 'æй'; break;
-                               }
-                       case 'inessive': break;
-                       case 'superessive': $ending = $hyphen . $jot . 'ыл'; break;
-                       case 'equative': $ending = $hyphen . $jot . 'ау'; break;
-                       case 'comitative': $ending = $hyphen . 'имæ'; break;
+                               break;
+                       case 'inessive':
+                               break;
+                       case 'superessive':
+                               $ending = $hyphen . $jot . 'ыл';
+                               break;
+                       case 'equative':
+                               $ending = $hyphen . $jot . 'ау';
+                               break;
+                       case 'comitative':
+                               $ending = $hyphen . 'имæ';
+                               break;
                }
                return $word . $ending;
        }
index 68bf020..e15c9e2 100644 (file)
@@ -34,7 +34,9 @@ class LanguagePl extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
                $forms = $this->preConvertPlural( $forms, 3 );
                $count = abs( $count );
                if ( $count == 1 ) {
index 1fcddfc..83c42cc 100644 (file)
@@ -34,10 +34,14 @@ class LanguageSh extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
 
                // if no number with word, then use $form[0] for singular and $form[1] for plural or zero
-               if ( count( $forms ) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
+               if ( count( $forms ) === 2 ) {
+                       return $count == 1 ? $forms[0] : $forms[1];
+               }
 
                // @todo FIXME: CLDR defines 4 plural forms. Form with decimals missing.
                // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#sh
@@ -47,10 +51,10 @@ class LanguageSh extends Language {
                        return $forms[2];
                } else {
                        switch ( $count % 10 ) {
-                               case 1:  return $forms[0];
+                               case 1: return $forms[0];
                                case 2:
                                case 3:
-                               case 4:  return $forms[1];
+                               case 4: return $forms[1];
                                default: return $forms[2];
                        }
                }
index 001ad08..ff0181e 100644 (file)
@@ -42,25 +42,25 @@ class ShiConverter extends LanguageConverter {
        public $mToLatin = array(
                'ⴰ' => 'a', 'ⴱ' => 'b', 'ⴳ' => 'g', 'ⴷ' => 'd', 'ⴹ' => 'ḍ', 'ⴻ' => 'e',
                'ⴼ' => 'f', 'ⴽ' => 'k', 'ⵀ' => 'h', 'ⵃ' => 'ḥ', 'ⵄ' => 'ε', 'ⵅ' => 'x',
-               'ⵇ' => 'q', 'ⵉ' => 'i', 'ⵊ' => 'j',  'ⵍ' => 'l', 'ⵎ' => 'm', 'ⵏ' => 'n',
+               'ⵇ' => 'q', 'ⵉ' => 'i', 'ⵊ' => 'j', 'ⵍ' => 'l', 'ⵎ' => 'm', 'ⵏ' => 'n',
                'ⵓ' => 'u', 'ⵔ' => 'r', 'ⵕ' => 'ṛ', 'ⵖ' => 'γ', 'ⵙ' => 's', 'ⵚ' => 'ṣ',
                'ⵛ' => 'š', 'ⵜ' => 't', 'ⵟ' => 'ṭ', 'ⵡ' => 'w', 'ⵢ' => 'y', 'ⵣ' => 'z',
                'ⵥ' => 'ẓ', 'ⵯ' => 'ʷ', 'ⵖ' => 'ɣ', 'ⵠ' => 'v', 'ⵒ' => 'p',
        );
 
        public $mUpperToLowerCaseLatin = array(
-               'A' => 'a',     'B' => 'b',     'C' => 'c',     'D' => 'd',     'E' => 'e',
-               'F' => 'f',     'G' => 'g',     'H' => 'h',     'I' => 'i',     'J' => 'j',
-               'K' => 'k',     'L' => 'l',     'M' => 'm',     'N' => 'n',     'O' => 'o',
-               'P' => 'p',     'Q' => 'q',     'R' => 'r',     'S' => 's',     'T' => 't',
-               'U' => 'u',     'V' => 'v',     'W' => 'w',     'X' => 'x',     'Y' => 'y',
+               'A' => 'a', 'B' => 'b', 'C' => 'c', 'D' => 'd', 'E' => 'e',
+               'F' => 'f', 'G' => 'g', 'H' => 'h', 'I' => 'i', 'J' => 'j',
+               'K' => 'k', 'L' => 'l', 'M' => 'm', 'N' => 'n', 'O' => 'o',
+               'P' => 'p', 'Q' => 'q', 'R' => 'r', 'S' => 's', 'T' => 't',
+               'U' => 'u', 'V' => 'v', 'W' => 'w', 'X' => 'x', 'Y' => 'y',
                'Z' => 'z', 'Ɣ' => 'ɣ',
        );
 
        public $mToTifinagh = array(
                'a' => 'ⴰ', 'b' => 'ⴱ', 'g' => 'ⴳ', 'd' => 'ⴷ', 'ḍ' => 'ⴹ', 'e' => 'ⴻ',
                'f' => 'ⴼ', 'k' => 'ⴽ', 'h' => 'ⵀ', 'ḥ' => 'ⵃ', 'ε' => 'ⵄ', 'x' => 'ⵅ',
-               'q' => 'ⵇ', 'i' => 'ⵉ', 'j' => 'ⵊ',  'l' => 'ⵍ', 'm' => 'ⵎ', 'n' => 'ⵏ',
+               'q' => 'ⵇ', 'i' => 'ⵉ', 'j' => 'ⵊ', 'l' => 'ⵍ', 'm' => 'ⵎ', 'n' => 'ⵏ',
                'u' => 'ⵓ', 'r' => 'ⵔ', 'ṛ' => 'ⵕ', 'γ' => 'ⵖ', 's' => 'ⵙ', 'ṣ' => 'ⵚ',
                'š' => 'ⵛ', 't' => 'ⵜ', 'ṭ' => 'ⵟ', 'w' => 'ⵡ', 'y' => 'ⵢ', 'z' => 'ⵣ',
                'ẓ' => 'ⵥ', 'ʷ' => 'ⵯ', 'ɣ' => 'ⵖ', 'v' => 'ⵠ', 'p' => 'ⵒ',
@@ -71,7 +71,7 @@ class ShiConverter extends LanguageConverter {
                        'lowercase' => new ReplacementArray( $this->mUpperToLowerCaseLatin ),
                        'shi-tfng' => new ReplacementArray( $this->mToTifinagh ),
                        'shi-latn' => new ReplacementArray( $this->mToLatin ),
-                       'shi'    => new ReplacementArray()
+                       'shi' => new ReplacementArray()
                );
        }
 
@@ -123,17 +123,19 @@ class ShiConverter extends LanguageConverter {
         * @param $ignoreOtherCond bool
         */
        function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
-                // check for user namespace
+               // check for user namespace
                if ( is_object( $nt ) ) {
                        $ns = $nt->getNamespace();
-                       if ( $ns == NS_USER || $ns == NS_USER_TALK )
+                       if ( $ns == NS_USER || $ns == NS_USER_TALK ) {
                                return;
+                       }
                }
 
                $oldlink = $link;
                parent::findVariantLink( $link, $nt, $ignoreOtherCond );
-               if ( $this->getPreferredVariant() == $this->mMainLanguageCode )
+               if ( $this->getPreferredVariant() == $this->mMainLanguageCode ) {
                        $link = $oldlink;
+               }
        }
 
        /**
@@ -149,7 +151,9 @@ class ShiConverter extends LanguageConverter {
                global $wgTitle;
                if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
                        $imagename = $wgTitle->getNsText();
-                       if ( preg_match( "/^$imagename:/", $text ) ) return $text;
+                       if ( preg_match( "/^$imagename:/", $text ) ) {
+                               return $text;
+                       }
                }
                return parent::autoConvert( $text, $toVariant );
        }
@@ -168,7 +172,7 @@ class ShiConverter extends LanguageConverter {
                if ( trim( $text ) ) {
                        $this->loadTables();
                        // To Tifinagh, first translate uppercase to lowercase Latin
-                       if( $toVariant == 'shi-tfng' ) {
+                       if ( $toVariant == 'shi-tfng' ) {
                                $text = $this->mTables['lowercase']->replace( $text );
                        }
                        $text = $this->mTables[$toVariant]->replace( $text );
@@ -190,7 +194,7 @@ class LanguageShi extends Language {
 
                $variants = array( 'shi', 'shi-tfng', 'shi-latn' );
                $variantfallbacks = array(
-                       'shi'    => 'shi-tfng',
+                       'shi' => 'shi-tfng',
                        'shi-tfng' => 'shi',
                        'shi-latn' => 'shi',
                );
index b1da70e..cd15f18 100644 (file)
@@ -34,7 +34,9 @@ class LanguageSk extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
                $forms = $this->preConvertPlural( $forms, 3 );
 
                if ( $count == 1 ) {
index 77957b2..06c75c9 100644 (file)
@@ -45,9 +45,11 @@ class LanguageSl extends Language {
 
                switch ( $case ) {
                        case 'mestnik': # locative
-                               $word = 'o ' . $word; break;
+                               $word = 'o ' . $word;
+                               break;
                        case 'orodnik': # instrumental
                                $word = 'z ' . $word;
+                               break;
                }
 
                return $word; # this will return the original value for 'imenovalnik' (nominativ) and all undefined case values
index b29cfb8..7c5c683 100644 (file)
@@ -75,7 +75,7 @@ class SrConverter extends LanguageConverter {
                $this->mTables = array(
                        'sr-ec' => new ReplacementArray( $this->mToCyrillics ),
                        'sr-el' => new ReplacementArray( $this->mToLatin ),
-                       'sr'    => new ReplacementArray()
+                       'sr' => new ReplacementArray()
                );
        }
 
@@ -118,14 +118,16 @@ class SrConverter extends LanguageConverter {
                // check for user namespace
                if ( is_object( $nt ) ) {
                        $ns = $nt->getNamespace();
-                       if ( $ns == NS_USER || $ns == NS_USER_TALK )
+                       if ( $ns == NS_USER || $ns == NS_USER_TALK ) {
                                return;
+                       }
                }
 
                $oldlink = $link;
                parent::findVariantLink( $link, $nt, $ignoreOtherCond );
-               if ( $this->getPreferredVariant() == $this->mMainLanguageCode )
+               if ( $this->getPreferredVariant() == $this->mMainLanguageCode ) {
                        $link = $oldlink;
+               }
        }
 
        /**
@@ -141,7 +143,9 @@ class SrConverter extends LanguageConverter {
                global $wgTitle;
                if ( is_object( $wgTitle ) && $wgTitle->getNamespace() == NS_FILE ) {
                        $imagename = $wgTitle->getNsText();
-                       if ( preg_match( "/^$imagename:/", $text ) ) return $text;
+                       if ( preg_match( "/^$imagename:/", $text ) ) {
+                               return $text;
+                       }
                }
                return parent::autoConvert( $text, $toVariant );
        }
@@ -194,13 +198,13 @@ class SrConverter extends LanguageConverter {
         * @since 1.19
         */
        public function guessVariant( $text, $variant ) {
-               $numCyrillic = preg_match_all("/[шђчћжШЂЧЋЖ]/u", $text, $dummy);
-               $numLatin = preg_match_all("/[šđč枊ĐČĆŽ]/u", $text, $dummy);
+               $numCyrillic = preg_match_all( "/[шђчћжШЂЧЋЖ]/u", $text, $dummy );
+               $numLatin = preg_match_all( "/[šđč枊ĐČĆŽ]/u", $text, $dummy );
 
-               if( $variant == 'sr-ec' ) {
-                       return (boolean) ($numCyrillic > $numLatin);
-               } elseif( $variant == 'sr-el' ) {
-                       return (boolean) ($numLatin > $numCyrillic);
+               if ( $variant == 'sr-ec' ) {
+                       return (boolean) ( $numCyrillic > $numLatin );
+               } elseif ( $variant == 'sr-el' ) {
+                       return (boolean) ( $numLatin > $numCyrillic );
                } else {
                        return false;
                }
@@ -222,14 +226,14 @@ class LanguageSr extends LanguageSr_ec {
 
                $variants = array( 'sr', 'sr-ec', 'sr-el' );
                $variantfallbacks = array(
-                       'sr'    => 'sr-ec',
+                       'sr' => 'sr-ec',
                        'sr-ec' => 'sr',
                        'sr-el' => 'sr',
                );
 
                $flags = array(
                        'S' => 'S', 'писмо' => 'S', 'pismo' => 'S',
-                       'W' => 'W', 'реч'   => 'W', 'reč'   => 'W', 'ријеч' => 'W', 'riječ' => 'W'
+                       'W' => 'W', 'реч' => 'W', 'reč' => 'W', 'ријеч' => 'W', 'riječ' => 'W'
                );
                $this->mConverter = new SrConverter( $this, 'sr', $variants, $variantfallbacks, $flags );
                $wgHooks['PageContentSaveComplete'][] = $this->mConverter;
@@ -262,10 +266,10 @@ class LanguageSr extends LanguageSr_ec {
                        return $forms[2];
                } else {
                        switch ( $count % 10 ) {
-                               case 1:  return $forms[0];
+                               case 1: return $forms[0];
                                case 2:
                                case 3:
-                               case 4:  return $forms[1];
+                               case 4: return $forms[1];
                                default: return $forms[2];
                        }
                }
index 352e293..cb9e819 100644 (file)
@@ -34,17 +34,19 @@ class LanguageSr_ec extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
                $forms = $this->preConvertPlural( $forms, 3 );
 
                if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) {
                        return $forms[2];
                } else {
                        switch ( $count % 10 ) {
-                               case 1:  return $forms[0];
+                               case 1: return $forms[0];
                                case 2:
                                case 3:
-                               case 4:  return $forms[1];
+                               case 4: return $forms[1];
                                default: return $forms[2];
                        }
                }
index 0e36d6c..99d1293 100644 (file)
@@ -34,17 +34,19 @@ class LanguageSr_el extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
                $forms = $this->preConvertPlural( $forms, 3 );
 
                if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) {
                        return $forms[2];
                } else {
                        switch ( $count % 10 ) {
-                               case 1:  return $forms[0];
+                               case 1: return $forms[0];
                                case 2:
                                case 3:
-                               case 4:  return $forms[1];
+                               case 4: return $forms[1];
                                default: return $forms[2];
                        }
                }
index 3ec1476..8c82837 100644 (file)
@@ -108,7 +108,7 @@ class TgConverter extends LanguageConverter {
        function loadDefaultTables() {
                $this->mTables = array(
                        'tg-latn' => new ReplacementArray( $this->table ),
-                       'tg'      => new ReplacementArray()
+                       'tg' => new ReplacementArray()
                );
        }
 
index 27331cc..f17b4d1 100644 (file)
@@ -36,7 +36,9 @@ class LanguageTi extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
                $forms = $this->preConvertPlural( $forms, 2 );
 
                return ( $count <= 1 ) ? $forms[0] : $forms[1];
index 15bce76..060d1e2 100644 (file)
@@ -36,7 +36,9 @@ class LanguageTl extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
                $forms = $this->preConvertPlural( $forms, 2 );
 
                return ( $count <= 1 ) ? $forms[0] : $forms[1];
index 6d147c8..fc1e8a8 100644 (file)
@@ -150,7 +150,7 @@ class LanguageTyv extends Language {
                                                $word = implode( "", $ar[0] ) . "ты";
                                        } else {
                                        }
-                               } elseif ( $wordEnding === "л"  || $wordEnding === "l" ) {
+                               } elseif ( $wordEnding === "л" || $wordEnding === "l" ) {
                                        if ( in_array( $wordLastVowel, $roundFrontVowels ) ) {
                                                $word = implode( "", $ar[0] ) . "дү";
                                        } elseif ( in_array( $wordLastVowel, $unroundFrontVowels ) ) {
index ce9ed33..4ad272b 100644 (file)
@@ -48,32 +48,32 @@ class LanguageUk extends Language {
                # join and array_slice instead mb_substr
                $ar = array();
                preg_match_all( '/./us', $word, $ar );
-               if ( !preg_match( "/[a-zA-Z_]/us", $word ) )
+               if ( !preg_match( "/[a-zA-Z_]/us", $word ) ) {
                        switch ( $case ) {
                                case 'genitive': # родовий відмінок
-                                       if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вікі' ) || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вікі' ) )
-                                               { }
-                                       elseif ( join( '', array_slice( $ar[0], -1 ) ) == 'ь' )
+                                       if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вікі' ) || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вікі' ) ) {
+                                       } elseif ( join( '', array_slice( $ar[0], -1 ) ) == 'ь' ) {
                                                $word = join( '', array_slice( $ar[0], 0, -1 ) ) . 'я';
-                                       elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ія' )
+                                       } elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ія' ) {
                                                $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'ії';
-                                       elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ка' )
+                                       } elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ка' ) {
                                                $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'ки';
-                                       elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ти' )
+                                       } elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ти' ) {
                                                $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'тей';
-                                       elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ди' )
+                                       } elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ди' ) {
                                                $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'дів';
-                                       elseif ( join( '', array_slice( $ar[0], -3 ) ) == 'ник' )
+                                       } elseif ( join( '', array_slice( $ar[0], -3 ) ) == 'ник' ) {
                                                $word = join( '', array_slice( $ar[0], 0, -3 ) ) . 'ника';
+                                       }
                                        break;
                                case 'dative':  # давальний відмінок
                                        # stub
                                        break;
                                case 'accusative': # знахідний відмінок
-                                       if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вікі' ) || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вікі' ) )
-                                               { }
-                                       elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ія' )
+                                       if ( ( join( '', array_slice( $ar[0], -4 ) ) == 'вікі' ) || ( join( '', array_slice( $ar[0], -4 ) ) == 'Вікі' ) ) {
+                                       } elseif ( join( '', array_slice( $ar[0], -2 ) ) == 'ія' ) {
                                                $word = join( '', array_slice( $ar[0], 0, -2 ) ) . 'ію';
+                                       }
                                        break;
                                case 'instrumental':  # орудний відмінок
                                        # stub
@@ -82,6 +82,7 @@ class LanguageUk extends Language {
                                        # stub
                                        break;
                        }
+               }
                return $word;
        }
 
@@ -91,13 +92,17 @@ class LanguageUk extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
 
                // If the actual number is not mentioned in the expression, then just two forms are enough:
                // singular for $count == 1
                // plural   for $count != 1
                // For example, "This user belongs to {{PLURAL:$1|one group|several groups}}."
-               if ( count( $forms ) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
+               if ( count( $forms ) === 2 ) {
+                       return $count == 1 ? $forms[0] : $forms[1];
+               }
 
                // @todo FIXME: CLDR defines 4 plural forms. Form for decimals is missing/
                // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#uk
@@ -107,10 +112,10 @@ class LanguageUk extends Language {
                        return $forms[2];
                } else {
                        switch ( $count % 10 ) {
-                               case 1:  return $forms[0];
+                               case 1: return $forms[0];
                                case 2:
                                case 3:
-                               case 4:  return $forms[1];
+                               case 4: return $forms[1];
                                default: return $forms[2];
                        }
                }
index a2c917c..d9154f7 100644 (file)
@@ -75,9 +75,9 @@ class UzConverter extends LanguageConverter {
                'f' => 'ф', 'F' => 'Ф',
                'g' => 'г', 'G' => 'Г',
                'g‘' => 'ғ', 'G‘' => 'Ғ', 'gʻ' => 'ғ', 'Gʻ' => 'Ғ',
-               'h'  => 'ҳ', 'H' => 'Ҳ',
+               'h' => 'ҳ', 'H' => 'Ҳ',
                'i' => 'и', 'I' => 'И',
-               'k'  => 'к', 'K' => 'К',
+               'k' => 'к', 'K' => 'К',
                'l' => 'л', 'L' => 'Л',
                'm' => 'м', 'M' => 'М',
                'n' => 'н', 'N' => 'Н',
@@ -108,7 +108,7 @@ class UzConverter extends LanguageConverter {
                $this->mTables = array(
                        'uz-cyrl' => new ReplacementArray( $this->toCyrillic ),
                        'uz-latn' => new ReplacementArray( $this->toLatin ),
-                       'uz'      => new ReplacementArray()
+                       'uz' => new ReplacementArray()
                );
        }
 
@@ -126,7 +126,7 @@ class LanguageUz extends Language {
 
                $variants = array( 'uz', 'uz-latn', 'uz-cyrl' );
                $variantfallbacks = array(
-                       'uz'    => 'uz-latn',
+                       'uz' => 'uz-latn',
                        'uz-cyrl' => 'uz',
                        'uz-latn' => 'uz',
                );
index 9e90c7f..fde8c53 100644 (file)
@@ -39,7 +39,9 @@ class LanguageWa extends Language {
         * @return string
         */
        function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
+               if ( !count( $forms ) ) {
+                       return '';
+               }
                $forms = $this->preConvertPlural( $forms, 2 );
 
                return ( $count <= 1 ) ? $forms[0] : $forms[1];
@@ -67,14 +69,14 @@ class LanguageWa extends Language {
                #
                # we also output this format for YMD (eg: 2001 January 15)
                if ( $datePreference == 'ISO 8601' ) {
-                      $d = substr( $ts, 0, 4 ) . '-' . substr( $ts, 4, 2 ) . '-' . substr( $ts, 6, 2 );
-                      return $d;
+                       $d = substr( $ts, 0, 4 ) . '-' . substr( $ts, 4, 2 ) . '-' . substr( $ts, 6, 2 );
+                       return $d;
                }
 
                # dd/mm/YYYY format
                if ( $datePreference == 'walloon short' ) {
-                      $d = substr( $ts, 6, 2 ) . '/' . substr( $ts, 4, 2 ) . '/' . substr( $ts, 0, 4 );
-                      return $d;
+                       $d = substr( $ts, 6, 2 ) . '/' . substr( $ts, 4, 2 ) . '/' . substr( $ts, 0, 4 );
+                       return $d;
                }
 
                # Walloon format
@@ -83,17 +85,17 @@ class LanguageWa extends Language {
                $m = substr( $ts, 4, 2 );
                $n = substr( $ts, 6, 2 );
                if ( $n == 1 ) {
-                   $d = "1î d' " . $this->getMonthName( $m ) .
-                       " " .  substr( $ts, 0, 4 );
+                       $d = "1î d' " . $this->getMonthName( $m ) .
+                               " " . substr( $ts, 0, 4 );
                } elseif ( $n == 2 || $n == 3 || $n == 20 || $n == 22 || $n == 23 ) {
-                   $d = ( 0 + $n ) . " d' " . $this->getMonthName( $m ) .
-                       " " .  substr( $ts, 0, 4 );
+                       $d = ( 0 + $n ) . " d' " . $this->getMonthName( $m ) .
+                               " " . substr( $ts, 0, 4 );
                } elseif ( $m == 4 || $m == 8 || $m == 10 ) {
-                   $d = ( 0 + $n ) . " d' " . $this->getMonthName( $m ) .
-                       " " .  substr( $ts, 0, 4 );
+                       $d = ( 0 + $n ) . " d' " . $this->getMonthName( $m ) .
+                               " " . substr( $ts, 0, 4 );
                } else {
-                   $d = ( 0 + $n ) . " di " . $this->getMonthName( $m ) .
-                       " " .  substr( $ts, 0, 4 );
+                       $d = ( 0 + $n ) . " di " . $this->getMonthName( $m ) .
+                               " " . substr( $ts, 0, 4 );
                }
                return $d;
        }
@@ -106,7 +108,9 @@ class LanguageWa extends Language {
         * @return string
         */
        function timeanddate( $ts, $adj = false, $format = true, $tc = false ) {
-               if ( $adj ) { $ts = $this->userAdjust( $ts, $tc ); }
+               if ( $adj ) {
+                       $ts = $this->userAdjust( $ts, $tc );
+               }
                $datePreference = $this->dateFormat( $format );
                if ( $datePreference == 'ISO 8601' ) {
                        return parent::timeanddate( $ts, $adj, $format, $tc );
index ac386c5..31731e7 100644 (file)
@@ -50,15 +50,15 @@ class ZhConverter extends LanguageConverter {
                                                                        $flags,
                                                                        $manualLevel );
                $names = array(
-                       'zh'      => '原文',
+                       'zh' => '原文',
                        'zh-hans' => '简体',
                        'zh-hant' => '繁體',
-                       'zh-cn'   => '大陆',
-                       'zh-tw'   => '台灣',
-                       'zh-hk'   => '香港',
-                       'zh-mo'   => '澳門',
-                       'zh-sg'   => '新加坡',
-                       'zh-my'   => '大马',
+                       'zh-cn' => '大陆',
+                       'zh-tw' => '台灣',
+                       'zh-hk' => '香港',
+                       'zh-mo' => '澳門',
+                       'zh-sg' => '新加坡',
+                       'zh-my' => '大马',
                );
                $this->mVariantNames = array_merge( $this->mVariantNames, $names );
        }
@@ -68,13 +68,13 @@ class ZhConverter extends LanguageConverter {
                $this->mTables = array(
                        'zh-hans' => new ReplacementArray( $zh2Hans ),
                        'zh-hant' => new ReplacementArray( $zh2Hant ),
-                       'zh-cn'   => new ReplacementArray( array_merge( $zh2Hans, $zh2CN ) ),
-                       'zh-hk'   => new ReplacementArray( array_merge( $zh2Hant, $zh2HK ) ),
-                       'zh-mo'   => new ReplacementArray( array_merge( $zh2Hant, $zh2HK ) ),
-                       'zh-my'   => new ReplacementArray( array_merge( $zh2Hans, $zh2SG ) ),
-                       'zh-sg'   => new ReplacementArray( array_merge( $zh2Hans, $zh2SG ) ),
-                       'zh-tw'   => new ReplacementArray( array_merge( $zh2Hant, $zh2TW ) ),
-                       'zh'      => new ReplacementArray
+                       'zh-cn' => new ReplacementArray( array_merge( $zh2Hans, $zh2CN ) ),
+                       'zh-hk' => new ReplacementArray( array_merge( $zh2Hant, $zh2HK ) ),
+                       'zh-mo' => new ReplacementArray( array_merge( $zh2Hant, $zh2HK ) ),
+                       'zh-my' => new ReplacementArray( array_merge( $zh2Hans, $zh2SG ) ),
+                       'zh-sg' => new ReplacementArray( array_merge( $zh2Hans, $zh2SG ) ),
+                       'zh-tw' => new ReplacementArray( array_merge( $zh2Hant, $zh2TW ) ),
+                       'zh' => new ReplacementArray
                );
        }
 
@@ -111,18 +111,18 @@ class LanguageZh extends LanguageZh_hans {
                $variants = array( 'zh', 'zh-hans', 'zh-hant', 'zh-cn', 'zh-hk', 'zh-mo', 'zh-my', 'zh-sg', 'zh-tw' );
 
                $variantfallbacks = array(
-                       'zh'      => array( 'zh-hans', 'zh-hant', 'zh-cn', 'zh-tw', 'zh-hk', 'zh-sg', 'zh-mo', 'zh-my' ),
+                       'zh' => array( 'zh-hans', 'zh-hant', 'zh-cn', 'zh-tw', 'zh-hk', 'zh-sg', 'zh-mo', 'zh-my' ),
                        'zh-hans' => array( 'zh-cn', 'zh-sg', 'zh-my' ),
                        'zh-hant' => array( 'zh-tw', 'zh-hk', 'zh-mo' ),
-                       'zh-cn'   => array( 'zh-hans', 'zh-sg', 'zh-my' ),
-                       'zh-sg'   => array( 'zh-hans', 'zh-cn', 'zh-my' ),
-                       'zh-my'   => array( 'zh-hans', 'zh-sg', 'zh-cn' ),
-                       'zh-tw'   => array( 'zh-hant', 'zh-hk', 'zh-mo' ),
-                       'zh-hk'   => array( 'zh-hant', 'zh-mo', 'zh-tw' ),
-                       'zh-mo'   => array( 'zh-hant', 'zh-hk', 'zh-tw' ),
+                       'zh-cn' => array( 'zh-hans', 'zh-sg', 'zh-my' ),
+                       'zh-sg' => array( 'zh-hans', 'zh-cn', 'zh-my' ),
+                       'zh-my' => array( 'zh-hans', 'zh-sg', 'zh-cn' ),
+                       'zh-tw' => array( 'zh-hant', 'zh-hk', 'zh-mo' ),
+                       'zh-hk' => array( 'zh-hant', 'zh-mo', 'zh-tw' ),
+                       'zh-mo' => array( 'zh-hant', 'zh-hk', 'zh-tw' ),
                );
                $ml = array(
-                       'zh'      => 'disable',
+                       'zh' => 'disable',
                        'zh-hans' => 'unidirectional',
                        'zh-hant' => 'unidirectional',
                );
index dd485ef..580e52f 100644 (file)
@@ -46,8 +46,6 @@ $messages = array(
 'tog-shownumberswatching' => 'اعرض عدد المستخدمين المراقبين',
 'tog-oldsig' => 'التوقيع الحالي:',
 'tog-fancysig' => 'عامل التوقيع كنص ويكي (بدون وصلة أوتوماتيكية)',
-'tog-externaleditor' => 'استخدم محررا خارجيا بشكل افتراضي (للخبراء فقط، يحتاج إعدادات خاصة على حاسوبك) ([//www.mediawiki.org/wiki/Manual:External_editors مزيد من المعلومات.])',
-'tog-externaldiff' => 'استخدم فرقا خارجيا بشكل افتراضي (للخبراء فقط، يحتاج إعدادات خاصة على حاسوبك) ([//www.mediawiki.org/wiki/Manual:External_editors للمزيد من المعلومات.])',
 'tog-showjumplinks' => 'مكن وصلات "اذهب إلى" المساعدة',
 'tog-uselivepreview' => 'استخدم الاستعراض السريع (جافاسكريبت) (تجريبي)',
 'tog-forceeditsummary' => 'نبهني عند إدخال ملخص تعديل فارغ',
index e8d5d0e..6ad368d 100644 (file)
@@ -237,8 +237,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Wys die aantal gebruikers wat dophou',
 'tog-oldsig' => 'Bestaande handtekening:',
 'tog-fancysig' => 'Doodgewone handtekening (sonder outomatiese skakel)',
-'tog-externaleditor' => "Gebruik outomaties 'n eksterne redigeringsprogram (vir kundiges; [//www.mediawiki.org/wiki/Manual:External_editors benodig verdere verstellings])",
-'tog-externaldiff' => "Gebruik outomaties 'n eksterne vergelykingsprogram (net vir kundiges - benodig spesiale verstellings op u rekenaar)",
 'tog-showjumplinks' => 'Wys "spring na"-skakels vir toeganklikheid',
 'tog-uselivepreview' => 'Gebruik lewendige voorskou (JavaScript) (eksperimenteel)',
 'tog-forceeditsummary' => "Let my daarop as ek nie 'n opsomming van my wysiging gee nie",
@@ -252,6 +250,7 @@ $messages = array(
 'tog-diffonly' => "Moenie 'n bladsy se inhoud onder die wysigingsverskil wys nie",
 'tog-showhiddencats' => 'Wys versteekte kategorië',
 'tog-norollbackdiff' => 'Laat verskille weg na terugrol',
+'tog-useeditwarning' => "Waarsku my as ek 'n gewysigde bladsy verlaat voordat dit gestoor is",
 
 'underline-always' => 'Altyd',
 'underline-never' => 'Nooit',
@@ -424,7 +423,7 @@ $messages = array(
 'otherlanguages' => 'Ander tale',
 'redirectedfrom' => '(Aangestuur vanaf $1)',
 'redirectpagesub' => 'Aanstuurblad',
-'lastmodifiedat' => 'Die bladsy is laas op $1 om $1 bygewerk.',
+'lastmodifiedat' => 'Die bladsy is laas op $1 om $2 bygewerk.',
 'viewcount' => 'Hierdie bladsy is al {{PLURAL:$1|keer|$1 kere}} aangevra.',
 'protectedpage' => 'Beskermde bladsy',
 'jumpto' => 'Spring na:',
@@ -621,9 +620,15 @@ Dit is moontlik dat sommige bladsye nog sal aandui dat u aangeteken is totdat u
 'welcomecreation-msg' => 'U gebruiker is geskep.
 Moenie vergeet om u [[Special:Preferences|voorkeure vir {{SITENAME}}]] te stel nie.',
 'yourname' => 'Gebruikersnaam:',
+'userlogin-yourname' => 'Gebruikersnaam',
+'userlogin-yourname-ph' => 'Sleutel u gebruikersnaam in',
 'yourpassword' => 'Wagwoord:',
+'userlogin-yourpassword' => 'Wagwoord',
+'userlogin-yourpassword-ph' => 'Sleutel u wagwoord in',
 'yourpasswordagain' => 'Herhaal wagwoord',
 'remembermypassword' => 'Onthou dat ek op hierdie rekenaar ingeteken het (vir \'n maksimum van $1 {{PLURAL:$|dag|dae}})',
+'userlogin-remembermypassword' => 'Onthou my',
+'userlogin-signwithsecure' => 'Meld via beveiligde bediener aan',
 'securelogin-stick-https' => 'Bly verbind met HTTPS na aanmelding',
 'yourdomainname' => 'U domein:',
 'password-change-forbidden' => 'U kan nie wagwoorde op hierdie wiki verander nie.',
@@ -636,12 +641,16 @@ Moenie vergeet om u [[Special:Preferences|voorkeure vir {{SITENAME}}]] te stel n
 'logout' => 'Teken uit',
 'userlogout' => 'Teken uit',
 'notloggedin' => 'Nie ingeteken nie',
+'userlogin-noaccount' => 'Nog nie geregistreer nie?',
+'userlogin-joinproject' => 'Word lid van {{SITENAME}}',
 'nologin' => 'Nog nie geregistreer nie? $1.',
 'nologinlink' => "Skep gerus 'n rekening",
 'createaccount' => 'Skep nuwe rekening',
 'gotaccount' => "Het u reeds 'n rekening? $1.",
 'gotaccountlink' => 'Meld aan',
 'userlogin-resetlink' => 'U aanmeld besonderhede vergeet?',
+'helplogin-url' => 'Help:Aanmelding',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hulp met aanmelding]]',
 'createaccountmail' => "Gebruik 'n tydelike lukrake wagwoord en stuur dit na die e-posadres hier onder",
 'createaccountreason' => 'Rede:',
 'badretype' => 'Die ingetikte wagwoorde is nie dieselfde nie.',
@@ -739,6 +748,7 @@ U het moontlik reeds u wagwoord gewysig of 'n nuwe tydelike wagwoord aangevra.",
 'passwordreset-text' => 'Voltooi hierdie vorm om u wagwoord te herstel.',
 'passwordreset-legend' => 'Kry nuwe wagwoord',
 'passwordreset-disabled' => 'Die herskik van U wagwoord is gedeaktiveer op hierdie wiki.',
+'passwordreset-emaildisabled' => 'E-posfunksies is afgeskakel op hierdie wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1| | Voer een van die onderstaande velde in}}',
 'passwordreset-username' => 'Gebruiker:',
 'passwordreset-domain' => 'Domein:',
@@ -764,7 +774,7 @@ Meld asseblief aan en verander u wagwoord nou. As u dit nie versoek het nie, of
 Tydelike wagwoord: $2',
 'passwordreset-emailsent' => "'n E-pos is gestuur om u wagwoord te herstel.",
 'passwordreset-emailsent-capture' => "'n E-pos vir die herstel van 'n wagwoord is gestuur. Dit word hieronder vertoon.",
-'passwordreset-emailerror-capture' => "'n E-pos vir die herstel van 'n wagwoord is saamgestel. Dit word hieronder vertoon. Die uitstuur daarvan het egter gefaal: $1",
+'passwordreset-emailerror-capture' => "'n E-pos vir die herstel van 'n wagwoord is saamgestel. Dit word hieronder vertoon. Die uitstuur daarvan na die {{GENDER:$2|gebruiker}} het egter gefaal: $1",
 
 # Special:ChangeEmail
 'changeemail' => 'Wysig E-posadres',
@@ -814,7 +824,7 @@ Tydelike wagwoord: $2',
 'missingsummary' => "'''Neem kennis''': Geen opsomming van die wysiging is verskaf nie. As \"Stoor\" weer gekliek word, word die wysiging sonder 'n opsomming gestoor.",
 'missingcommenttext' => 'Tik die opsomming onder.',
 'missingcommentheader' => "'''Let op:''' U het geen onderwerp/opskrif vir die opmerking verskaf nie. As u weer op \"{{int:savearticle}}\" klik, sal u wysiging sonder die onderwerp/opskrif gestoor word.",
-'summary-preview' => 'Opsomming nakijken:',
+'summary-preview' => 'Opsommingsvoorskou:',
 'subject-preview' => 'Onderwerp/opskrif voorskou:',
 'blockedtitle' => 'Gebruiker is geblokkeer',
 'blockedtext' => "'''U gebruikersnaam of IP-adres is geblokkeer.'''
@@ -899,7 +909,7 @@ Onthou dat u eie .css- en .js-bladsye met 'n kleinletter begin, byvoorbeeld {{ns
 'previewnote' => "'''Onthou dat hierdie slegs 'n voorskou is.'''
 U teks is nog nie gestoor nie!",
 'continue-editing' => 'Wysig verder',
-'previewconflict' => 'Hierdie voorskou vertoon die teks in die boonste teksarea soos dit sou lyk indien u die bladsy stoor.',
+'previewconflict' => 'Hierdie voorskou vertoon die teks in die boonste teksarea soos dit sou lyk as u die bladsy stoor.',
 'session_fail_preview' => "'''Jammer! Weens verlies aan sessie-inligting is die wysiging nie verwerk nie.
 Probeer asseblief weer. As dit steeds nie werk nie, probeer om [[Special:UserLogout|af te teken]] en dan weer aan te meld.'''",
 'session_fail_preview_html' => "'''Jammer! U wysigings is nie verwerk nie omdat sessie-data verlore gegaan het.'''
@@ -980,6 +990,8 @@ Dit bestaan alreeds.',
 'content-failed-to-parse' => 'Dit was nie moontlik om die inhoud van die MIME-tipe $2 vir die model $1 te verwerk nie: $3.',
 'invalid-content-data' => 'Ongeldige inhoud',
 'content-not-allowed-here' => '"$1" word nie op bladsy [[$2]] toegelaat nie.',
+'editwarning-warning' => 'As u hierdie bladsy verlaat, verloor u moontlik al die wysigings wat u aangebring het.
+Indien u aangemeld is, kan u hierdie waarskuwing in die "{{int:prefs-editing}}"-afdeling van u voorkeure afskakel.',
 
 # Content models
 'content-model-wikitext' => 'Wikiteks',
@@ -1204,7 +1216,7 @@ Details kan in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} s
 # Search results
 'searchresults' => 'Soekresultate',
 'searchresults-title' => 'Soekresultate vir "$1"',
-'searchresulttext' => 'Vir meer inligting oor {{SITENAME}}-soekresultate, sien [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchresulttext' => 'Vir meer inligting oor {{SITENAME}}-soekresultate, lees [[{{MediaWiki:Helppage}}|{{int:help}}]].',
 'searchsubtitle' => 'U soek vir \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|alle bladsye wat met "$1" begin]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|alle bladsye wat aan "$1" skakel]])',
 'searchsubtitleinvalid' => 'Vir navraag "$1"',
 'toomanymatches' => "Te veel resultate. Probeer asseblief 'n ander soektog.",
@@ -1247,7 +1259,7 @@ Details kan in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} s
 'searcheverything-enable' => 'Soek in alle naamruimtes',
 'searchrelated' => 'verwante',
 'searchall' => 'alle',
-'showingresults' => "Hier volg {{PLURAL:$1|'''1''' resultaat|'''$1''' resultate}} wat met #'''$2''' begin.",
+'showingresults' => "Hier volg {{PLURAL:$1|'''1''' resultaat|'''$1''' resultate}} vanaf #'''$2'''.",
 'showingresultsnum' => "Hier onder {{PLURAL:$3|is '''1''' resultaat|is '''$3''' resultate}} vanaf #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultate '''$1 - $2''' van '''$3'''}} vir '''$4'''",
 'nonefound' => "<strong>Opmerking</strong>: nie alle naamruimtes word by verstek deursoek nie.
@@ -1264,6 +1276,7 @@ U kan ook 'n naamruimte as voorvoegsel gebruik.",
 'powersearch-togglenone' => 'Geen',
 'search-external' => 'Eksterne soektog',
 'searchdisabled' => '{{SITENAME}} se soekfunksie is tans afgeskakel ter wille van werkverrigting. Gebruik gerus intussen Google of Yahoo! Let daarop dat hulle indekse van die {{SITENAME}}-inhoud verouderd mag wees.',
+'search-error' => "'n Fout het tydens die soektog voorgekom: $1",
 
 # Preferences page
 'preferences' => 'Voorkeure',
@@ -1364,7 +1377,8 @@ Dit mag nie meer as $1 {{PLURAL:$1|karakter|karakters}} bevat nie.',
 'prefs-help-gender' => 'Opsioneel: dit word gebruik om gebruikers korrek aan te spreek in die sagteware.
 Die inligting is vir ander gebruikers sigbaar.',
 'email' => 'E-pos',
-'prefs-help-realname' => 'Regte naam (opsioneel): as u hierdie verskaf, kan dit gebruik word om erkenning vir u werk te gee.',
+'prefs-help-realname' => 'Regte naam is opsioneel.
+As u dit verskaf, sal dit gebruik word om erkenning vir u werk te gee.',
 'prefs-help-email' => 'E-posadres is opsioneel, maar is nodig om u wagwoord aan u te stuur sou u dit vergeet.',
 'prefs-help-email-others' => 'U kan ook kies om ander toe te laat om u deur u gebruikers- en besprekingsbladsy te kontak sonder om u identiteit te openbaar.',
 'prefs-help-email-required' => 'E-pos adres word benodig.',
@@ -1551,7 +1565,7 @@ Die inligting is vir ander gebruikers sigbaar.',
 'recentchanges-label-bot' => "Hierdie wysiging was deur 'n bot uitgevoer",
 'recentchanges-label-unpatrolled' => 'Die wysiging is nog nie gekontroleer nie',
 '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 onder is die wysigings sedert <b>$2</b> (tot by <b>$1</b> word gewys).',
+'rcnotefrom' => "Hier volg wysigings sedert '''$2''' (maksimum van '''$1''' word gewys).",
 'rclistfrom' => 'Vertoon wysigings vanaf $1',
 'rcshowhideminor' => '$1 klein wysigings',
 'rcshowhidebots' => '$1 robotte',
@@ -2135,7 +2149,7 @@ Sien ook [[Special:WantedCategories|nie-bestaande kategorieë met verwysings]].'
 'sp-deletedcontributions-contribs' => 'bydraes',
 
 # Special:LinkSearch
-'linksearch' => 'Eksterne skakels soek',
+'linksearch' => 'Soek eksterne skakels',
 'linksearch-pat' => 'Soekpatroon:',
 'linksearch-ns' => 'Naamruimte:',
 'linksearch-ok' => 'Soek',
@@ -2172,7 +2186,7 @@ Daar kan [[{{MediaWiki:Listgrouprights-helppage}}|extra inligting]] oor individu
 
 # Email user
 'mailnologin' => 'Geen versendadres beskikbaar',
-'mailnologintext' => "U moet [[Special:UserLogin|ingeteken]] wees en 'n geldige e-posadres in die [[Special:Preferences|voorkeure]] hê om e-pos aan ander gebruikers te stuur.",
+'mailnologintext' => "U moet [[Special:UserLogin|ingeteken]] wees en 'n geldige e-posadres in u [[Special:Preferences|voorkeure]] hê om e-pos aan ander gebruikers te kan stuur.",
 'emailuser' => 'Stuur e-pos na hierdie gebruiker',
 'emailuser-title-target' => 'E-pos die {{GENDER:$1|gebruiker}}',
 'emailuser-title-notarget' => 'E-pos gebruiker',
@@ -2337,7 +2351,8 @@ Die mees onlangse wysiging is gemaak deur [[User:$3|$3]] ([[User talk:$3|besprek
 'editcomment' => "Die wysigsopsomming was: \"''\$1''\".",
 'revertpage' => 'Wysigings deur [[Special:Contributions/$2|$2]] teruggerol na laaste weergawe deur $1',
 'revertpage-nouser' => 'Rol wysigings deur (gebruikersnaam verwyder) terug na die laaste weergawe deur [[User:$1|$1]]',
-'rollback-success' => 'Wysigings deur $1 teruggerol; terugverander na laaste weergawe deur $2.',
+'rollback-success' => 'Wysigings deur $1 is teruggerol.
+Die laaste weergawe van $2 is teruggeplaas.',
 
 # Edit tokens
 'sessionfailure-title' => 'Sessie het gefaal',
@@ -2415,7 +2430,7 @@ Hier is die huidige verstellings vir bladsy '''$1''':",
 
 # Undelete
 'undelete' => 'Besigtig geskrapte bladsye',
-'undeletepage' => 'Kyk na en herstel geskrapte bladsye',
+'undeletepage' => 'Wys en herstel geskrapte bladsye',
 'undeletepagetitle' => "'''Hier onder is die verwyderde weergawes van [[:$1]]'''.",
 'viewdeletedpage' => 'Bekyk geskrapte bladsye',
 'undeletepagetext' => 'Die volgende {{PLURAL:$1|bladsy|$1 bladsye}} is geskrap, maar is nog in die argief en kan teruggeplaas word. Die argief van geskrapte blaaie kan periodiek skoongemaak word.',
@@ -2430,7 +2445,7 @@ In sulke gevalle, verwyder die mees onlangs verwyderde weergawe uit die seleksie
 'undeletehistorynoadmin' => 'Die bladsy is geskrap.
 Die rede hiervoor word onder in die opsomming aangedui, saam met besonderhede van die gebruikers wat die bladsy gewysig het voordat dit verwyder is.
 Die verwyderde inhoud is slegs vir administrateurs sigbaar.',
-'undelete-revision' => 'Verwyder weergawe van $1 (per $4 om $5) deur $3:',
+'undelete-revision' => 'Verwyderde weergawe van $1 (soos op $4 om $5) deur $3:',
 'undeleterevision-missing' => "Ongeldige of vermiste weergawe.
 U mag moontlik 'n foutiewe skakel hê, of die weergawe is reeds herstel of uit die argief verwyder.",
 'undelete-nodiff' => 'Geen vorige wysigings gevind.',
@@ -2500,7 +2515,7 @@ Die laaste inskrywing uit die blokkeerlogboek word hier ter inligting weergegee:
 'sp-contributions-search' => 'Soek na bydraes',
 'sp-contributions-username' => 'IP-adres of gebruikersnaam:',
 'sp-contributions-toponly' => 'Wys slegs die nuutste weergawes',
-'sp-contributions-submit' => 'Vertoon',
+'sp-contributions-submit' => 'Soek',
 
 # What links here
 'whatlinkshere' => 'Skakels hierheen',
@@ -2647,6 +2662,7 @@ Kontak asseblief u internet-diensverskaffer of tegniese ondersteuning en lig hul
 'sorbsreason' => "U IP-adres is gelys as 'n oop instaanbediener (proxy) in die DNS-swartlys wat op {{SITENAME}} gebruik word.",
 'sorbs_create_account_reason' => "U IP-adres is gelys as 'n oop instaanbediener (proxy) in die DNS-swartlys wat op {{SITENAME}} gebruik word.
 U kan nie 'n rekening skep nie.",
+'xffblockreason' => "'n IP-adres wat u gebruik is geblokkeer. Dit kom in die opskrif 'X-Forwarded-For' voor. Die oorspronklike rede vir die blokkade is: $1",
 'cant-block-while-blocked' => 'U kan nie ander gebruikers blokkeer terwyl u self geblokkeer is nie.',
 'cant-see-hidden-user' => "Die gebruiker wat u probeer blokkeer is reeds geblokkeer en weggesteek.
 Aangesien u nie die 'hideuser'-reg het nie, kan u nie die blokkade van die gebruiker sien of wysig nie.",
@@ -2952,7 +2968,7 @@ Die lêer is slegs gedeeltelik opgelaai.',
 'tooltip-watchlistedit-raw-submit' => 'Opdateer dophoulys',
 'tooltip-recreate' => 'Herskep hierdie bladsy al is dit voorheen geskrap',
 'tooltip-upload' => 'Begin oplaai',
-'tooltip-rollback' => '"Terugrol" rol met een kliek wysiging(s) terug wat die laaste gebruiker aan hierdie bladsy aangebring het.',
+'tooltip-rollback' => 'Rol met een kliek die laaste gebruiker se wysiging(s) van aan hierdie bladsy terug.',
 'tooltip-undo' => 'Met "ongedaan maak" maak u hierdie wysiging ongedaan en land u in die wysigingsvenster.
 U kan daar \'n wysigingsopsomming byvoeg.',
 'tooltip-preferences-save' => 'Stoor voorkeure',
@@ -3609,8 +3625,9 @@ Die bevestigingskode sal om $4 verval.',
 
 # Delete conflict
 'deletedwhileediting' => "'''Let op''': die bladsy is verwyder terwyl u besig was om dit te wysig!",
-'confirmrecreate' => "Gebruiker [[User:$1|$1]] ([[User talk:$1|bespreek]]) het hierdie blad uitgevee ná u begin redigeer het met rede: : ''$2''
-Bevestig asseblief dat u regtig hierdie blad oor wil skep.",
+'confirmrecreate' => "Gebruiker [[User:$1|$1]] ([[User talk:$1|kontak]]) het hierdie bladsy uitgevee nádat u begin redigeer het met rede:
+:''$2''
+Bevestig asseblief dat u hierdie blad weer wil skep.",
 'confirmrecreate-noreason' => 'Gebruiker [[User:$1|$1]] ([[User talk:$1|bespreking]]) het die bladsy geskrap nadat u dit begin wysig het.
 Bevestig dat u die bladsy wil herskep.',
 'recreate' => 'Herskep',
@@ -3696,7 +3713,7 @@ U kan ook die [[Special:EditWatchlist|standaard opdaterigskerm gebruik]].',
 'watchlisttools-raw' => 'Wysig bronkode',
 
 # Signatures
-'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|bespreek]])',
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|kontak]])',
 
 # Core parser functions
 'unknown_extension_tag' => 'Onbekende etiket "$1"',
@@ -3831,6 +3848,8 @@ Beelde word in hulle volle resolusie gewys. Ander lêertipes word direk met hull
 'htmlform-submit' => 'Dien in',
 'htmlform-reset' => 'Maak wysigings ongedaan',
 'htmlform-selectorother-other' => 'Ander',
+'htmlform-no' => 'Nee',
+'htmlform-yes' => 'Ja',
 
 # SQLite database support
 'sqlite-has-fts' => 'Weergawe $1 met ondersteuning vir vol-teks soektogte ("full-text search")',
index f40de91..1e4a9f4 100644 (file)
@@ -77,8 +77,6 @@ $messages = array(
 'tog-shownumberswatching' => 'የሚከታተሉ ተጠቃሚዎችን ቁጥር አሳይ',
 'tog-oldsig' => 'የቀድሞው ፊርማ ቅደመ እይታ',
 'tog-fancysig' => 'ጥሬ ፊርማ (ያለራስገዝ ማያያዣ)',
-'tog-externaleditor' => 'በቀዳሚነት ውጪያዊ አራሚን ተጠቀም',
-'tog-externaldiff' => 'በቀዳሚነት የውጭ ልዩነት-ማሳያን ተጠቀም',
 'tog-showjumplinks' => 'የ"ዝለል" አቅላይ መያያዣዎችን አስችል',
 'tog-uselivepreview' => 'ቀጥታ ቅድመ-ዕይታን ይጠቀሙ (JavaScript) (የሙከራ)',
 'tog-forceeditsummary' => 'ማጠቃለያው ባዶ ከሆነ ማስታወሻ ይስጠኝ',
@@ -846,13 +844,6 @@ $1ን ወይም ማንም ሌላ [[{{MediaWiki:Grouppage-sysop}}|መጋቢ]] ስ
 'search-external' => 'አፍአዊ ፍለጋ',
 'searchdisabled' => '{{SITENAME}} ፍለጋ አሁን እንዳይሠራ ተደርጓል። ለጊዜው ግን በGoogle ላይ መፈልግ ይችላሉ። የ{{SITENAME}} ይዞታ ማውጫ በዚያ እንዳልታደሰ ማቻሉ ያስታውሱ።',
 
-# Quickbar
-'qbsettings-none' => ' ምንም',
-'qbsettings-fixedleft' => 'በግራ የተለጠፈ',
-'qbsettings-fixedright' => 'በቀኝ የተለጠፈ',
-'qbsettings-floatingleft' => 'በግራ ተንሳፋፊ',
-'qbsettings-floatingright' => 'በቀኝ ተንሳፋፊ',
-
 # Preferences page
 'preferences' => 'ምርጫዎች፤',
 'mypreferences' => 'ምርጫዎች፤',
@@ -1474,14 +1465,6 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listusers-noresult' => 'ማንም ተጠቃሚ አልተገኘም።',
 'listusers-blocked' => '(ታግዷል)',
 
-# Special:ActiveUsers
-'activeusers' => 'ተግባራዊ አባላት ዝርዝር',
-'activeusers-intro' => 'እነዚህ አባላት ባለፈው $1 ቀን ውስጥ ማናቸውንም አይነት ተግባር ፈጸሙ።',
-'activeusers-count' => '$1 {{PLURAL:$1|ለውጥ|ለውጦች}} ባለፈው $3 ቀን ውስጥ',
-'activeusers-hidebots' => 'ሎሌዎች ይደበቁ',
-'activeusers-hidesysops' => 'መጋቢዎች ይደበቁ',
-'activeusers-noresult' => 'ማንም ተጠቃሚ አልተገኘም።',
-
 # Special:ListGroupRights
 'listgrouprights' => 'የተጠቃሚ ስብስባ መብቶች',
 'listgrouprights-group' => 'ስብስባ',
index 03fc479..d458c1d 100644 (file)
@@ -161,8 +161,6 @@ $messages = array(
 'tog-shownumberswatching' => "Amostrar o numero d'usuarios que cosiran un articlo",
 'tog-oldsig' => 'Sinyadura actual',
 'tog-fancysig' => 'Tratar as sinyaduras como wikitexto (sin de vinclo automatico)',
-'tog-externaleditor' => "Fer servir l'editor externo por defecto (nomás ta espiertos, cal que faiga achustes especials en o suyo ordenador.  [//www.mediawiki.org/wiki/Manual:External_editors Mas información.])",
-'tog-externaldiff' => 'Fer servir o visualizador de diferencias externo por defecto (nomás ta expertos, cal que faiga achustes especials en o suyo ordenador.  [//www.mediawiki.org/wiki/Manual:External_editors Mas información.])',
 'tog-showjumplinks' => 'Activar vinclos d\'accesibilidat "blincar enta"',
 'tog-uselivepreview' => 'Activar previsualización automatica (cal JavaScript) (Esperimental)',
 'tog-forceeditsummary' => 'Avisar-me quan o campo de resumen siga buedo.',
@@ -177,6 +175,7 @@ $messages = array(
 'tog-showhiddencats' => 'Amostrar categorías amagatas',
 'tog-noconvertlink' => 'Desactivar a conversión de titol de vinclo',
 'tog-norollbackdiff' => 'No amostrar as diferencias dimpués de revertir',
+'tog-useeditwarning' => "Alvertir-me quan salga d'una pachina d'edición sin alzar os cambios",
 
 'underline-always' => 'Siempre',
 'underline-never' => 'Nunca',
@@ -840,6 +839,7 @@ Pareix que la hesen borrau.",
 'edit-no-change' => "S'ha ignorato a suya edición, pos no s'ha feito garra cambeo ta o texto.",
 'edit-already-exists' => "No s'ha puesto creyar una pachina nueva.
 Ya existe.",
+'editwarning-warning' => "Si sale d'ista pachina perderá totz os cambios que haiga feito. Si tiene una cuenta d'usuario, puet eliminar ista alvertencia en a sección «Caixa d'edición» d'as suyas preferencies.",
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Pare cuenta: Ista pachina tiene masiadas cridas ta funcions de preproceso (parser functions) costosas.
@@ -1101,15 +1101,6 @@ Asegure-se que iste cambio no trencará a continidat de l'historial d'a pachina.
 'search-external' => 'Busca externa',
 'searchdisabled' => 'A busca en {{SITENAME}} ye temporalment desactivata. Entremistanto, puede mirar en {{SITENAME}} fendo servir buscadors externos, pero pare cuenta que os suyos endices de {{SITENAME}} puede no estar esviellatos.',
 
-# Quickbar
-'qbsettings' => 'Preferencias de "Quickbar"',
-'qbsettings-none' => 'Garra',
-'qbsettings-fixedleft' => 'Fixa a la zurda',
-'qbsettings-fixedright' => 'Fixa a la dreita',
-'qbsettings-floatingleft' => 'Flotant a la zurda',
-'qbsettings-floatingright' => 'Flotant a la dreita',
-'qbsettings-directionality' => "Fixato, pendendo en a direccionalidat d'o suyo script y o suyo luengache",
-
 # Preferences page
 'preferences' => 'Preferencias',
 'mypreferences' => 'Preferencias',
@@ -1646,7 +1637,6 @@ Por seguridat, s'ha desactivau img_auth.php.",
 'http-read-error' => 'Error de lectura HTTP.',
 'http-timed-out' => 'A requesta HTTP ha circumducito.',
 'http-curl-error' => 'Error en recuperar a URL: $1',
-'http-host-unreachable' => "No s'ha puesto acceder t'a URL.",
 'http-bad-status' => 'Ha habiu un problema en a requesta HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1948,15 +1938,6 @@ Protocolos suportados: <code>$1</code> (no los adhiba en a suya busca).',
 'listusers-noresult' => "No s'ha trobato ixe usuario.",
 'listusers-blocked' => '({{GENDER:$1|bloqueyato|bloqueyata}})',
 
-# Special:ActiveUsers
-'activeusers' => "Lista d'usuarios activos",
-'activeusers-intro' => "Ista ye una lista d'usuarios que han teniu bella actividat en os zaguers $1 {{PLURAL:$1|diya|diyas}}.",
-'activeusers-count' => '$1 {{PLURAL:$1|edición|edicions}} en os zaguers {{PLURAL:$3|diya|$3 diyas}}',
-'activeusers-from' => "Amostrar nombres d'usuario que prencipien por:",
-'activeusers-hidebots' => 'Amagar robots',
-'activeusers-hidesysops' => 'Amagar administradors',
-'activeusers-noresult' => "No s'han trobato usuarios.",
-
 # Special:ListGroupRights
 'listgrouprights' => "Dreitos d'a colla d'usuarios",
 'listgrouprights-summary' => "Contino trobará a lista de collas d'usuario definitas en iste wiki, con os suyos dreitos d'acceso asociatos. Tamién puet trobar aquí [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] sobre os dreitos individuals.",
@@ -2718,13 +2699,8 @@ Puede veyer-ne, manimenos, o codigo fuent.',
 
 # Stylesheets
 'common.css' => '/* Os estilos CSS definius aquí aplicarán a todas as apariencias (skins) */',
-'standard.css' => "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Standard */",
-'nostalgia.css' => "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Nostalgia */",
 'cologneblue.css' => "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Cologne Blue */",
 'monobook.css' => "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Monobook */",
-'myskin.css' => "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que que faigan servir l'apariencia MySkin */",
-'chick.css' => "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Chick */",
-'simple.css' => "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Simpla */",
 'modern.css' => "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Modern */",
 'vector.css' => "/* Os estilos CSS colocaus aquí s'aplicarán ta totz os usuarios que faigan servir l'apariencia Vector */",
 'print.css' => '/* Os estilos CSS colocaus aquí afectarán a la impresión */',
@@ -2737,13 +2713,8 @@ Puede veyer-ne, manimenos, o codigo fuent.',
 
 # Scripts
 'common.js' => '/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios en cada carga de pachina */',
-'standard.js' => "/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios que faigan servir l'apariencia Estandar */",
-'nostalgia.js' => "/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios que faigan servir l'apariencia Nostalgia. */",
 'cologneblue.js' => "/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios que faigan servir l'apariencia Colonia azul */",
 'monobook.js' => "/* O codigo Javascript que se meta aquí será cargau por os usuarios faigan servir l'apariencia MonoBook */",
-'myskin.js' => "/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios que faigan servir l'apariencia MySkin */",
-'chick.js' => "/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios que faigan servir l'apariencia Chick */",
-'simple.js' => "/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios que faigan servir l'apariencia Simple */",
 'modern.js' => "/* O codigo Javascript que se meta aquí será cargau por os usuarios faigan servir l'apariencia Modern */",
 'vector.js' => '/* Qualsiquier codigo Javascript escrito aquí se cargará ta totz os usuarios que usen a piel Vector */',
 'group-autoconfirmed.js' => '/* Qualsiquier codigo Javascript escrito aquí se cargará nomás ta os usuarios autoconfirmatos */',
@@ -2783,13 +2754,8 @@ Puede veyer-ne, manimenos, o codigo fuent.',
 'pageinfo-authors' => "Numero d'autors diferents",
 
 # Skin names
-'skinname-standard' => 'Clasica (Classic)',
-'skinname-nostalgia' => 'Recosiros (Nostalgia)',
 'skinname-cologneblue' => 'Colonia Azul (Cologne Blue)',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'A mía aparencia (MySkin)',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Simpla (Simple)',
 'skinname-modern' => 'Moderna',
 'skinname-vector' => 'Vector',
 
index 9bbec45..4da788c 100644 (file)
@@ -500,8 +500,6 @@ $messages = array(
 'tog-shownumberswatching' => 'اعرض عدد المستخدمين المراقبِين',
 'tog-oldsig' => 'التوقيع الحالي:',
 'tog-fancysig' => 'عامل التوقيع كنص ويكي (بدون وصلة أوتوماتيكية)',
-'tog-externaleditor' => 'استخدم محررًا خارجيًا مبدئيا (للخبراء فقط، يتطلب إعدادات خاصة على حاسوبك) ([//www.mediawiki.org/wiki/Manual:External_editors لمزيد من المعلومات].)',
-'tog-externaldiff' => 'استخدم مستعرض فروقات خارجيًا مبدئيا (للخبراء فقط، يتطلّب إعدادات خاصة على حاسوبك) ([//www.mediawiki.org/wiki/Manual:External_editors للمزيد من المعلومات].)',
 'tog-showjumplinks' => 'مكن وصلات "اذهب إلى" المساعدة',
 'tog-uselivepreview' => 'استخدم الاستعراض السريع (جافاسكريبت) (تجريبي)',
 'tog-forceeditsummary' => 'نبهني عند إدخال ملخص تحرير فارغ',
@@ -516,6 +514,7 @@ $messages = array(
 'tog-showhiddencats' => 'أظهر التصنيفات المخفية',
 'tog-noconvertlink' => 'عطل تحويل عناوين الروابط',
 'tog-norollbackdiff' => 'أزل الفرق بعد القيام باسترجاع',
+'tog-useeditwarning' => 'حذّرني عندما أغادر تحرير صفحة ذات تغييرات غير محفوظة',
 
 'underline-always' => 'دائما',
 'underline-never' => 'أبدا',
@@ -890,9 +889,15 @@ $2',
 'welcomecreation-msg' => 'تم إنشاء حسابك.
 لا تنس تعديل [[Special:Preferences|تفضيلاتك في {{SITENAME}}]].',
 'yourname' => 'اسم المستخدم:',
+'userlogin-yourname' => 'اسم المستخدم',
+'userlogin-yourname-ph' => 'أدخل اسم المستخدم الخاص بك',
 'yourpassword' => 'كلمة السر:',
+'userlogin-yourpassword' => 'كلمة السر',
+'userlogin-yourpassword-ph' => 'أدخل كلمة السر الخاصة بك',
 'yourpasswordagain' => 'أعد كتابة كلمة السر:',
 'remembermypassword' => 'تذكر دخولي بهذا المتصفح (لمدة أقصاها {{PLURAL:$1||يوم واحد|يومان|$1 أيام|$1 يوما|$1 يوم}})',
+'userlogin-remembermypassword' => 'تذكرني',
+'userlogin-signwithsecure' => 'تسجيل الدخول باستخدام خادم أمن',
 'securelogin-stick-https' => 'ابقَ في اتصال HTTPS بعد الدخول.',
 'yourdomainname' => 'نطاقك:',
 'password-change-forbidden' => 'أنت لا يمكنك تغيير كلمات السر على هذا الويكي.',
@@ -905,12 +910,16 @@ $2',
 'logout' => 'تسجيل الخروج',
 'userlogout' => 'اخرج',
 'notloggedin' => 'غير مسجل الدخول',
+'userlogin-noaccount' => 'ليس لديك حساب؟',
+'userlogin-joinproject' => 'انضم إلى {{SITENAME}}',
 'nologin' => "ليس لديك حساب؟ '''$1'''.",
 'nologinlink' => 'أنشئ حسابا',
 'createaccount' => 'أنشئ حسابا',
 'gotaccount' => "لديك حساب؟ '''$1'''.",
 'gotaccountlink' => 'تسجيل الدخول',
 'userlogin-resetlink' => 'نسيت تفاصيل الدخول؟',
+'helplogin-url' => 'Help:تسجيل الدخول',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|المساعدة في تسجيل الدخول]]',
 'createaccountmail' => 'استخدم كلمة سر عشوائية مؤقتة وارسلها إلى عنوان البريد الإلكتروني المحدد أدناه',
 'createaccountreason' => 'السبب:',
 'badretype' => 'كلمات السر التي أدخلتها لا تتطابق.',
@@ -1013,9 +1022,10 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'إعادة ضبط كلمة السر',
-'passwordreset-text' => 'Ø£Ù\83Ù\85Ù\84 Ù\87ذا Ø§Ù\84Ù\86Ù\85Ù\88ذج Ù\84تتÙ\84Ù\82Ù\89 Ø¨Ø±Ù\8aدا Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8aا Ù\8aØ°Ù\83ر Ø¨ØªÙ\81اصÙ\8aÙ\84 Ø­Ø³Ø§بك.',
+'passwordreset-text' => 'Ø£Ù\83Ù\85Ù\84 Ù\87ذا Ø§Ù\84Ù\86Ù\85Ù\88ذج Ù\84إعادة Ø¶Ø¨Ø· Ù\83Ù\84Ù\85Ø© Ø§Ù\84سر Ø§Ù\84خاصة بك.',
 'passwordreset-legend' => 'إعادة تعيين كلمة السر',
 'passwordreset-disabled' => 'عُطّلت إعادة تعيين كلمة السر على هذه الويكي.',
+'passwordreset-emaildisabled' => 'تم تعطيل ميزات البريد الإلكتروني على هذه الويكي.',
 'passwordreset-pretext' => '{{PLURAL:$1||أدخل أحد أجزاء البيانات أدناه}}',
 'passwordreset-username' => 'اسم المستخدم:',
 'passwordreset-domain' => 'النطاق:',
@@ -1023,25 +1033,23 @@ $2',
 'passwordreset-capture-help' => 'إذا علّمت هذا الصندوق فسيعرض لك البريد الإلكتروني (الذي يحتوي كلمة سر مؤقتة) وسيرسل أيضا للمستخدم.',
 'passwordreset-email' => 'عنوان البريد الإلكتروني:',
 'passwordreset-emailtitle' => 'تفاصيل حساب {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'احد Ù\85ا (Ù\82د Ù\8aÙ\83Ù\88Ù\86 Ø§Ù\86ت$1)Ø·Ù\84ب Ù\85Ø°Ù\83رة ØªÙ\81اصÙ\8aÙ\84 Ø§Ù\84حساب Ù\84{{SITENAME}} ($4).اÙ\84Ù\85ستخدÙ\85 Ø§Ù\84اتÙ\8a {{PLURAL:$3|اÙ\84حساب Ù\87Ù\88|اÙ\84حسابات Ù\87Ù\8a}} Ù\82د Ù\82رÙ\86 Ø¨Ù\87ذا Ø§Ù\84عÙ\86Ù\88اÙ\86 :
+'passwordreset-emailtext-ip' => 'أحد Ù\85ا (Ù\82د Ù\8aÙ\83Ù\88Ù\86 Ø£Ù\86تØ\8c Ù\85Ù\86 Ø§Ù\84عÙ\86Ù\88اÙ\86 $1)  Ø·Ù\84ب Ø¥Ø¹Ø§Ø¯Ø© Ø¶Ø¨Ø· Ù\83Ù\84Ù\85Ø© Ø³Ø± Ø­Ø³Ø§Ø¨Ù\83 Ø¹Ù\84Ù\89 {{SITENAME}} ($4). {{PLURAL:$3||اÙ\84حساب|اÙ\84حساباÙ\86| Ø§Ù\84حسابات}} Ø£Ø¯Ù\86اÙ\87 Ù\82د Ø§Ù\82ترÙ\86ت Ø¨Ø¨Ø±Ù\8aدÙ\83 Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a :
 
 $2
 
-{{PLURAL:$3|كلمة المرور المؤقتة|كلمات المرور المؤقة}}سينتهي في {{PLURAL:$5|يوم|ايام$5 }}
-من الافضل ان تسجل الدخول وتختار كلمة مرور جديدة الان .
-إذا قام شخص آخر بهذا الطلب، أو إذا  تذكرت كلمة المرور الأصلية الخاصة بك،ولم تعد ترغب في تغييره، يمكنك تجاهل هذه الرسالة ومتابعة استخدام  كلمة المرورالقديمة.',
-'passwordreset-emailtext-user' => 'احد ما (قد يكون انت$1)طلب مذكرة تفاصيل الحساب ل{{SITENAME}} ($4).المستخدم الاتي {{PLURAL:$3|الحساب هو|الحسابات هي}} قد قرن بهذا العنوان :
+{{PLURAL:$3||كلمة السر المؤقتة|كلمات السر المؤقتة}} ستنتهي صلاحيتها في {{PLURAL:$5||يوم واحد|يومين|$5 أيام|$5 يوما|$5 يوم}}
+يمكنك تسجيل الدخول واختيار كلمة سر جديدة. إذا كان هذا الطلب تم بواسطة شخص أخر، أو إذا تذكرت كلمة السر الأصلية الخاصة بك، ولم تعد ترغب في تغييرها، يمكنك تجاهل هذه الرسالة ومتابعة استخدام كلمة السر القديمة.',
+'passwordreset-emailtext-user' => 'المستخدم $1 على {{SITENAME}} طلب إعادة ضبط كلمة سر حسابك على {{SITENAME}} ($4). {{PLURAL:$3||الحساب|الحسابان| الحسابات}} أدناه قد اقترنت ببريدك الإلكتروني :
 
 $2
 
-{{PLURAL:$3|كلمة المرور المؤقتة|كلمات المرور المؤقة}}سينتهي في {{PLURAL:$5|يوم|ايام$5 }}
-من الافضل ان تسجل الدخول وتختار كلمة مرور جديدة الان .
-إذا قام شخص آخر بهذا الطلب، أو إذا  تذكرت كلمة المرور الأصلية الخاصة بك،ولم تعد ترغب في تغييره، يمكنك تجاهل هذه الرسالة ومتابعة استخدام  كلمة المرورالقديمة.',
+{{PLURAL:$3||كلمة السر المؤقتة|كلمات السر المؤقتة}} ستنتهي صلاحيتها في {{PLURAL:$5||يوم واحد|يومين|$5 أيام|$5 يوما|$5 يوم}}
+يمكنك تسجيل الدخول واختيار كلمة سر جديدة. إذا كان هذا الطلب تم بواسطة شخص أخر، أو إذا تذكرت كلمة السر الأصلية الخاصة بك، ولم تعد ترغب في تغييرها، يمكنك تجاهل هذه الرسالة ومتابعة استخدام كلمة السر القديمة.',
 'passwordreset-emailelement' => 'اسم {{GENDER:$1|المستخدم|المستخدمة}}: $1
 كلمة السر المؤقتة: $2',
-'passwordreset-emailsent' => 'أرسل بريد إلكتروني تذكيري',
-'passwordreset-emailsent-capture' => 'أرسل بريد إلكتروني تذكيري وهو معروض بالأسفل.',
-'passwordreset-emailerror-capture' => 'ولّد بريد إلكتروني تذكيري وهو معروض بالأسفل لكن فشل إرساله للمستخدم: $1',
+'passwordreset-emailsent' => 'أُرسل بريد إلكتروني لإعادة ضبط كلمة السر.',
+'passwordreset-emailsent-capture' => 'أُرسل بريد إلكتروني لإعادة ضبط كلمة السر، وهو معروض بالأسفل.',
+'passwordreset-emailerror-capture' => 'ولّد بريد إلكتروني لإعادة ضبط كلمة السر وهو معروض بالأسفل لكن فشل إرساله للمستخدم: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'تغيير عنوان البريد الإلكتروني',
@@ -1268,6 +1276,8 @@ $2
 'content-failed-to-parse' => 'فشل في تحليل $2 محتوى لـ $1 نموذج: $3',
 'invalid-content-data' => 'بيانات المحتوى غير صالحة',
 'content-not-allowed-here' => '"$1" المحتوى غير مسموح على صفحة [[$2]]',
+'editwarning-warning' => 'قد تتسبب مغادرة هذه الصفحة بخسارتك لأي تغييرات قمت بها.
+يمكنك تعطيل هذا التحذير إذا كنت والجلًا في قسم "{{int:prefs-editing}}" في تفضيلاتك.',
 
 # Content models
 'content-model-wikitext' => 'نص ويكي',
@@ -1556,6 +1566,7 @@ $1",
 'searchdisabled' => 'البحث في {{SITENAME}} معطل.
 يمكنك البحث من خلال جوجل في الوقت الحالي.
 لاحظ أن فهارسه لمحتوى {{SITENAME}} ربما تكون غير محدثة.',
+'search-error' => 'حدث خطأ ما أثناء البحث: $1',
 
 # Preferences page
 'preferences' => 'تفضيلات',
@@ -4293,21 +4304,23 @@ $5
 'htmlform-submit' => 'إرسال',
 'htmlform-reset' => 'الرجوع عن التغييرات',
 'htmlform-selectorother-other' => 'أخرى',
+'htmlform-no' => 'لا',
+'htmlform-yes' => 'نعم',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 بدعم البحث في كامل النص',
 'sqlite-no-fts' => '$1 بدون دعم البحث في كامل النص',
 
 # New logging system
-'logentry-delete-delete' => '$1 حذف الصفحة $3',
-'logentry-delete-restore' => 'استعاد $1 صفحة $3',
-'logentry-delete-event' => '$1 غير خاصية العرض لـ {{PLURAL:$5|مدخل السجل|$5 مدخلات السجل}} في $3: $4',
-'logentry-delete-revision' => 'غيّر $1 إمكانية مشاهدة {{PLURAL:$5||مراجعة واحدة|مراجعتين|$5 مراجعات|$5 مراجعة}} في صفحة $3: $4',
-'logentry-delete-event-legacy' => 'غيّر $1 إمكانية رؤية أحداث سجل $3',
-'logentry-delete-revision-legacy' => 'غيّر $1 إمكانية رؤية مراجعات صفحة $3',
-'logentry-suppress-delete' => '$1 suppressed صفحة $3',
-'logentry-suppress-event' => 'غيّر $1 بسرية إمكانية مشاهدة {{PLURAL:$5||حدث|حدثين|$5 أحداث|$5 حدثًا|$5 حدث}} في سجل $3: $4',
-'logentry-suppress-revision' => 'غيّر $1 بسرية إمكانية مشاهدة {{PLURAL:$5||مراجعة واحدة|مراجعتين|$5 مراجعات|$5 مراجعة}} في صفحة $3: $4',
+'logentry-delete-delete' => '{{GENDER:$2|حذف|حذفت}} $1 صفحة $3',
+'logentry-delete-restore' => '{{GENDER:$2|استعاد|استعادت}} $1 صفحة $3',
+'logentry-delete-event' => '{{GENDER:$2|غيّر|غيّرت}} $1 إمكانية مشاهدة {{PLURAL:$5||حدث|حدثين|$5 أحداث|$5 حدثًا|$5 حدث}} في سجل $3: $4',
+'logentry-delete-revision' => 'غيّر{{GENDER:$2||ت}} $1 إمكانية مشاهدة {{PLURAL:$5||مراجعة واحدة|مراجعتين|$5 مراجعات|$5 مراجعة}} في صفحة $3: $4',
+'logentry-delete-event-legacy' => '{{GENDER:$2|غيّر|غيّرت}} $1 إمكانية رؤية أحداث في سجل $3',
+'logentry-delete-revision-legacy' => '{{GENDER:$2|غيّر|غيّرت}} $1 إمكانية رؤية مراجعات من صفحة $3',
+'logentry-suppress-delete' => '{{GENDER:$2|أخفى|أخفت}} $1 صفحة $3',
+'logentry-suppress-event' => 'غيّر{{GENDER:$2||ت}} $1 بسرية إمكانية مشاهدة {{PLURAL:$5||حدث|حدثين|$5 أحداث|$5 حدثًا|$5 حدث}} في سجل $3: $4',
+'logentry-suppress-revision' => 'غيّر{{GENDER:$2||ت}} $1 سراً إمكانية مشاهدة {{PLURAL:$5||مراجعة واحدة|مراجعتين|$5 مراجعات|$5 مراجعة}} في صفحة $3: $4',
 'logentry-suppress-event-legacy' => 'غيّر $1 بسرية إمكانية رؤية أحداث سجل $3',
 'logentry-suppress-revision-legacy' => 'غيّر $1 بسرية إمكانية رؤية مراجعات صفحة $3',
 'revdelete-content-hid' => 'محتوى مخفي',
index 89eb33c..e496c00 100644 (file)
@@ -159,6 +159,7 @@ $messages = array(
 'tog-watchlisthideanons' => 'ܛܫܝ ܫܘܚܠܦ̈ܐ ܕܡܦܠܚܢ̈ܐ ܠܐ ܝܕ̈ܝܥܐ ܡܢ ܪ̈ܗܝܬܐ',
 'tog-ccmeonemails' => 'ܫܕܪ ܠܝ ܨܚܚ̈ܐ ܕܒܝܠܕܪ̈ܐ ܐܠܩܛܪ̈ܘܢܝܐ ܕܫܕܪ ܐܢܐ ܠܡܦܠܚܢ̈ܐ ܐܚܪ̈ܢܐ',
 'tog-showhiddencats' => 'ܚܘܝ ܣܕܪ̈ܐ ܛܘܫܝ̈ܐ',
+'tog-useeditwarning' => 'ܙܗܪ ܠܝ ܐܡܬܝ ܫܒܩ ܐܢܐ ܦܐܬܐ ܕܫܘܚܠܦܐ ܕܐܝܬ ܒܗ ܫܘܚܠܦ̈ܐ ܠܐ ܠܒܝܟ̈ܐ',
 
 'underline-always' => 'ܐܡܝܢ',
 'underline-never' => 'ܠܐ ܡܡܬܘܡ',
@@ -287,7 +288,7 @@ $messages = array(
 'edit' => 'ܫܚܠܦ',
 'create' => 'ܒܪܝ',
 'editthispage' => 'ܫܚܠܦ ܦܐܬܐ ܗܕܐ',
-'create-this-page' => 'Ü£Ü\9dÜ¡ Ü¦Ü\90ܬÜ\90 Ü\97Ü\95ܐ',
+'create-this-page' => 'Ü\92ܪÜ\9d Ü\97Ü\95Ü\90 Ü¦Ü\90ܬܐ',
 'delete' => 'ܫܘܦ',
 'deletethispage' => 'ܫܘܦ ܦܐܬܐ ܗܕܐ',
 'undelete_short' => 'ܠܐ ܫܘܦ {{PLURAL:$1|ܚܕ ܫܘܚܠܦܐ|$1 ܫܘܚܠܦ̈ܐ}}',
@@ -560,6 +561,8 @@ $1',
 'log-fulllog' => 'ܚܙܝ ܣܓܠܐ ܓܡܝܪܐ',
 'edit-already-exists' => 'ܒܪܝܐ ܕܦܐܬܐ ܚܕܬܐ ܠܐ ܡܬܡܨܝܢܐ.
 ܗܕܐ ܦܐܬܐ ܐܝܬ ܡܢ ܟܕܘ.',
+'editwarning-warning' => 'ܐܢ ܫܒܩܬ ܦܐܬܐ ܗܕܐ ܡܬܡܨܝܢܬܐ ܐܝܬܝܗ ܕܚܣܪܬ ܟܠ ܫܘܚܠܦ̈ܐ ܕܥܒܝܕܬ ܗܪܟܐ.
+ܡܨܬ ܕܬܒܛܠ ܙܘܗܪܐ ܗܢܐ ܐܢ ܥܠܝܠܐ ܐܝܬܝܟ ܒܡܢܬܐ ܕ"ܫܚܠܦܬܐ" ܒܨܒܝܢܝܘܬ̈ܐ.',
 
 # "Undo" feature
 'undo-summary' => 'ܠܐ ܬܥܒܕ $1 ܒܝܕ [[Special:Contributions/$2|$2]] ([[User talk:$2|ܡܡܠܠܐ]])',
@@ -667,7 +670,7 @@ $1',
 'viewprevnext' => 'ܚܘܝ ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'ܓܒܝܬ̈ܐ ܕܒܨܝܐ',
 'searchmenu-exists' => "'''ܐܝܬ ܦܐܬܐ ܒܫܡ \"[[:\$1]]\" ܥܠ ܗܢܐ ܘܝܩܝ'''",
-'searchmenu-new' => "'''Ü£Ü\9dÜ¡ ܦܐܬܐ \"[[:\$1]]\" ܥܠ ܗܢܐ ܘܝܩܝ!'''",
+'searchmenu-new' => "'''Ü\92ܪÜ\9d ܦܐܬܐ \"[[:\$1]]\" ܥܠ ܗܢܐ ܘܝܩܝ!'''",
 'searchhelp-url' => 'Help:ܚܒܝܫܬ̈ܐ',
 'searchprofile-articles' => 'ܦܐܬܬ̈ܐ ܕܚܒܝܫܬ̈ܐ',
 'searchprofile-project' => 'ܦܐܬܬ̈ܐ ܕܬܪ̈ܡܝܬܐ ܘܕܥܘܕܪܢܐ',
@@ -703,9 +706,6 @@ $1',
 'powersearch-togglenone' => 'ܠܐ ܡܕܡ',
 'search-external' => 'ܒܨܝܐ ܒܪܝܐ',
 
-# Quickbar
-'qbsettings-none' => 'ܠܐ ܡܕܡ',
-
 # Preferences page
 'preferences' => 'ܨܒܝܢܝܘܬ̈ܐ',
 'mypreferences' => 'ܨܒܝܢܝܘܬ̈ܐ',
index f4f242e..6c07f0b 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Assamese (à¦\85সমà§\80à§\9fা)
+/** Assamese (à¦\85সমà§\80য়া)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -212,8 +212,6 @@ $messages = array(
 'tog-shownumberswatching' => 'লক্ষ্য কৰি থকা সদস্য সমূহৰ সংখ্যা দেখুৱাওক',
 'tog-oldsig' => 'বৰ্তমানৰ স্বাক্ষৰ:',
 'tog-fancysig' => 'স্বাক্ষৰ ৱিকিটেক্সট হিচাপে ব্যৱহাৰ কৰক (স্বয়ংক্ৰিয় সংযোগ অবিহনে)',
-'tog-externaleditor' => 'ডিফ’ল্ট ভাবে বাহ্যিক সম্পাদন-সঁজুলি ব্যৱহাৰ কৰক (দক্ষ জনৰ বাবেহে, আপোনাৰ কম্পিউটাৰত বিশেষ ব্যৱস্থা থাকিব লাগিব । [//www.mediawiki.org/wiki/Manual:External_editors সবিশেষ ।])',
-'tog-externaldiff' => 'ডিফ’ল্ট ভাবে বাহ্যিক তফাৎ (diff) ব্যৱহাৰ কৰক (দক্ষ জনৰ বাবেহে, আপোনাৰ কম্পিউটাৰত বিশেষ ব্যৱস্থা থাকিব লাগিব । [//www.mediawiki.org/wiki/Manual:External_editors সবিশেষ ।])',
 'tog-showjumplinks' => '"জঁপিয়াই যাওক" সংযোগ সক্ৰিয় কৰক',
 'tog-uselivepreview' => 'সম্পাদনাৰ লগে লগে খচৰা দেখুৱাওক (জাভাস্ক্ৰিপ্টৰ প্ৰয়োজন) (পৰীক্ষামূলক)',
 'tog-forceeditsummary' => 'সম্পাদনাৰ সাৰাংশ নিদিলে মোক জনাব',
@@ -227,6 +225,7 @@ $messages = array(
 'tog-diffonly' => 'পার্থক্যৰ তলত পৃষ্ঠাৰ বিষয়বস্তু নেদেখুৱাব',
 'tog-showhiddencats' => 'নিহিত শ্ৰেণী সমূহ দেখুৱাওক',
 'tog-norollbackdiff' => 'পূৰ্বৱত কৰা পাছত পাৰ্থক্য নেদেখুৱাব',
+'tog-useeditwarning' => 'সালসলনি সংৰক্ষণ নকৰাকৈ সম্পাদনা পৃষ্ঠা ত্যাগৰ সময়ত মোক সাৱধান কৰক',
 
 'underline-always' => 'সদায়',
 'underline-never' => 'কেতিয়াও নহয়',
@@ -966,6 +965,7 @@ $1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।
 'content-failed-to-parse' => '$1 মডেলৰ বাবে $2ৰ তথ্য নিকা কৰিব পৰা নগ’ল: $3',
 'invalid-content-data' => 'অবৈধ সমল তথ্য',
 'content-not-allowed-here' => '[[$2]] পৃষ্ঠাত "$1" সমল অনুমোদিত নহয়',
+'editwarning-warning' => 'এই পৃষ্ঠাটো এৰিলে আপুনি কৰা পৰিবৰ্তনসমূহ হেৰাব পাৰে। যদি আপুনি প্ৰৱেশ কৰা অৱস্থাত আছে, আপুনি এই সতৰ্কবাৰ্তাক আপোনাৰ পছন্দসমূহৰ "সম্পাদনা" অংশত অসামৰ্থবান কৰিব পাৰিব।',
 
 # Content models
 'content-model-wikitext' => 'ৱিকিপাঠ্য',
@@ -1256,15 +1256,6 @@ $1",
 তেতিয়ালৈকে গুগলত অনুসন্ধান কৰক।
 মনত ৰাখিব যে তেঁওলোকৰ {{SITENAME}}ৰ ইণ্ডেক্স পুৰণি হব পাৰে।',
 
-# Quickbar
-'qbsettings' => 'শীঘ্ৰদণ্ডিকা',
-'qbsettings-none' => 'একেবাৰে নহয়',
-'qbsettings-fixedleft' => 'বাঁওফাল স্থিৰ',
-'qbsettings-fixedright' => 'সোঁফাল স্থিৰ',
-'qbsettings-floatingleft' => 'বাঁওফাল অস্থিৰ',
-'qbsettings-floatingright' => 'সোঁফাল অস্থিৰ',
-'qbsettings-directionality' => 'আপোনাৰ ভাষাৰ আৰু লিপিৰ দিশৰ ওপৰত নিৰ্ভৰ কৰি ঠিক কৰা হ’ল',
-
 # Preferences page
 'preferences' => 'পছন্দসমূহ',
 'mypreferences' => 'পছন্দসমূহ',
@@ -1816,7 +1807,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'http-read-error' => 'HTTP পঠন ত্ৰুটি ।',
 'http-timed-out' => 'HTTP অনুৰোধৰ সময় পাৰ হৈছে ।',
 'http-curl-error' => 'URL অনাত ত্ৰুটি হৈছে: $1',
-'http-host-unreachable' => 'URL পাব পৰা নগ’ল ।',
 'http-bad-status' => 'HTTP অনুৰোধৰ সময়ত কোনো সমস্যা হৈছে: $1, $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2141,15 +2131,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'listusers-noresult' => 'ব্যৱহাৰকাৰী বিচাৰি পোৱা নগ’ল',
 'listusers-blocked' => '(বাৰণ কৰা)',
 
-# Special:ActiveUsers
-'activeusers' => 'সক্ৰিয় ব্যবহাৰকাৰীৰ তালিকা',
-'activeusers-intro' => 'যোৱা  {{PLURAL:$1|দিন|দিন}}ৰ ভিতৰত অৱদান আগবঢ়োৱা ব্যৱহাৰকাৰীৰ তালিকা',
-'activeusers-count' => 'যোৱা {{PLURAL:$3|দিনত|$3 দিনত}} সৰ্বমুঠ {{PLURAL:$1|কামৰ|কামৰ}} সংখ্যা $1',
-'activeusers-from' => 'ইয়াৰে আৰম্ভ হোৱা ব্যৱহাৰকাৰী সকল দেখুৱাওক:',
-'activeusers-hidebots' => 'বট নেদেখুৱাব',
-'activeusers-hidesysops' => 'প্ৰশাসক নেদেখুৱাব',
-'activeusers-noresult' => "কোনো সদস্য পোৱা নগ'ল।",
-
 # Special:ListGroupRights
 'listgrouprights' => 'ব্যৱহাৰকাৰী গোটৰ অধিকাৰ',
 'listgrouprights-summary' => 'এই ৱিকিত থকা গোটসমূহৰ তালিকা সেইবোৰৰ প্ৰৱেশাধিকাৰসহ তলত দিয়া হ’ল ।
index 6ce634b..20b8103 100644 (file)
@@ -60,7 +60,7 @@ $specialPageAliases = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Sorrayar enllaces:',
-'tog-justify' => 'Xustificar parágrafos',
+'tog-justify' => 'Xustificar párrafos',
 'tog-hideminor' => 'Anubrir les ediciones menores nos cambeos recientes',
 'tog-hidepatrolled' => 'Anubrir les ediciones vixilaes nos cambeos recientes',
 'tog-newpageshidepatrolled' => 'Anubrir les páxines vixilaes na llista de páxines nueves',
@@ -77,9 +77,9 @@ $messages = array(
 'tog-watchdefault' => "Amestar les páxines y ficheros qu'edito a la mio llista de vixilancia",
 'tog-watchmoves' => 'Amestar les páxines y ficheros que muevo a la mio llista de vixilancia',
 'tog-watchdeletion' => 'Amestar les páxines y ficheros que desanicio a la mio llista de vixilancia',
-'tog-minordefault' => 'Marcar toles ediciones como menores por defeutu',
-'tog-previewontop' => "Amosar previsualización enantes de la caxa d'edición",
-'tog-previewonfirst' => 'Amosar previsualización na primer edición',
+'tog-minordefault' => 'Marcar toles ediciones como menores de mou predetermináu',
+'tog-previewontop' => "Amosar previsualización enantes del cuadru d'edición",
+'tog-previewonfirst' => 'Amosar previsualización na primera edición',
 'tog-nocache' => 'Desactivar la caché de páxines del restolador',
 'tog-enotifwatchlistpages' => 'Mandame un corréu cuando camude una páxina o ficheru de la mio llista de vixilancia',
 'tog-enotifusertalkpages' => "Mandame un corréu cuando camude la mio páxina d'alderique",
@@ -88,8 +88,6 @@ $messages = array(
 'tog-shownumberswatching' => "Amosar el númberu d'usuarios que tán vixilando la páxina",
 'tog-oldsig' => 'Firma esistente:',
 'tog-fancysig' => 'Tratar la firma como testu wiki (ensin enllaz automáticu)',
-'tog-externaleditor' => 'Usar un editor esternu por defeutu (namái pa espertos, necesita configuraciones especiales nel to ordenador. [//www.mediawiki.org/wiki/Manual:External_editors Más información.])',
-'tog-externaldiff' => 'Usar un diff esternu por defutu (namái pa espertos, necesita configuraciones especiales nel to ordenador. [//www.mediawiki.org/wiki/Manual:External_editors Más información.])',
 'tog-showjumplinks' => 'Activar los enllaces d\'accesibilidá "saltar a"',
 'tog-uselivepreview' => 'Usar vista previa en tiempu real (necesita JavaScript) (en pruebes)',
 'tog-forceeditsummary' => "Avisame cuando grabe col resume d'edición en blanco",
@@ -104,6 +102,7 @@ $messages = array(
 'tog-showhiddencats' => 'Amosar categoríes anubríes',
 'tog-noconvertlink' => 'Desactivar la conversión del títulu del enllaz',
 'tog-norollbackdiff' => 'Desaniciar les diferencies depués de facer una restauración',
+'tog-useeditwarning' => "Avisame cuando salga d'una páxina d'edición con cambios ensin guardar",
 
 'underline-always' => 'Siempre',
 'underline-never' => 'Nunca',
@@ -111,7 +110,7 @@ $messages = array(
 
 # Font style option in Special:Preferences
 'editfont-style' => "Estilu de fonte de l'área d'edición:",
-'editfont-default' => 'Restolador por defeutu',
+'editfont-default' => 'Predeterminao del restolador',
 'editfont-monospace' => 'Tipu de lletra monoespaciada',
 'editfont-sansserif' => 'Tipu de lletra Sans-serif',
 'editfont-serif' => 'TIpu de lletra Serif',
@@ -200,14 +199,14 @@ $messages = array(
 'and' => '&#32;y',
 
 # Cologne Blue skin
-'qbfind' => 'Guetar',
-'qbbrowse' => 'Restolar',
+'qbfind' => 'Alcontrar',
+'qbbrowse' => 'Navegar',
 'qbedit' => 'Editar',
 'qbpageoptions' => 'Esta páxina',
 'qbmyoptions' => 'Les mios páxines',
 'qbspecialpages' => 'Páxines especiales',
 'faq' => 'EMF (entrugues más frecuentes)',
-'faqpage' => 'Project:EMF',
+'faqpage' => 'Project:FAQ',
 
 # Vector skin
 'vector-action-addsection' => 'Amestar seición',
@@ -268,7 +267,7 @@ $messages = array(
 'userpage' => "Ver la páxina d'usuariu",
 'projectpage' => 'Ver la páxina del proyeutu',
 'imagepage' => 'Ver la páxina del ficheru',
-'mediawikipage' => 'Ver la páxina de mensaxes',
+'mediawikipage' => 'Ver la páxina del mensaxe',
 'templatepage' => 'Ver la páxina de plantía',
 'viewhelppage' => "Ver la páxina d'ayuda",
 'categorypage' => 'Ver la páxina de la categoría',
@@ -282,11 +281,11 @@ $messages = array(
 'jumpto' => 'Saltar a:',
 'jumptonavigation' => 'navegación',
 'jumptosearch' => 'guetar',
-'view-pool-error' => 'Sentímoslo, los sirvidores tán sobrecargaos nestos momentos.
-Hai demasiaos usuarios faciendo por ver esta páxina.
-Por favor espera un cachín enantes de volver intentar acceder a esta páxina.
+'view-pool-error' => "Sentímoslo, los sirvidores tán sobrecargaos nestos momentos.
+Hai demasiaos usuarios intentando ver esta páxina.
+Por favor espera un ratu enantes d'intentar otra vuelta entrar a esta páxina.
 
-$1',
+$1",
 'pool-timeout' => 'Tiempu escosáu esperando pal bloquéu',
 'pool-queuefull' => 'La cola de trabayu ta enllena',
 'pool-errorunknown' => 'Fallu desconocíu',
@@ -294,7 +293,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) and the disambiguation template definition (see disambiguations).
 'aboutsite' => 'Tocante a {{SITENAME}}',
 'aboutpage' => 'Project:Tocante a',
-'copyright' => 'El conteníu ta disponible baxo los términos de llicencia  $1.',
+'copyright' => 'El conteníu ta disponible baxo $1.',
 'copyrightpage' => "{{ns:project}}:Drechos d'autor",
 'currentevents' => 'Actualidá',
 'currentevents-url' => 'Project:Actualidá',
@@ -313,7 +312,7 @@ $1',
 
 'badaccess' => 'Fallu de permisos',
 'badaccess-group0' => "Nun tienes permisu pa executar l'aición solicitada.",
-'badaccess-groups' => "L'aición solicitada ta acutada pa usuarios {{PLURAL:$2|del grupu|d'ún d'estos grupos}}: $1.",
+'badaccess-groups' => "L'aición solicitada ta acutada pa usuarios {{PLURAL:$2|del grupu|d'unu d'estos grupos}}: $1.",
 
 'versionrequired' => 'Necesítase la versión $1 de MediaWiki',
 'versionrequiredtext' => 'Necesítase la versión $1 de MediaWiki pa usar esta páxina. Ver la [[Special:Version|páxina de versión]].',
@@ -343,11 +342,11 @@ $1',
 'viewdeleted' => '¿Ver $1?',
 'restorelink' => '{{PLURAL:$1|una edición desaniciada|$1 ediciones desaniciaes}}',
 'feedlinks' => 'Canal:',
-'feed-invalid' => 'Suscripción non válida a la triba de canal.',
+'feed-invalid' => 'Tipu inválidu de canal de suscripción.',
 'feed-unavailable' => 'Les canales de sindicación nun tán disponibles',
-'site-rss-feed' => 'Canal RSS $1',
+'site-rss-feed' => 'Canal RSS de $1',
 'site-atom-feed' => 'Canal Atom $1',
-'page-rss-feed' => 'Canal RSS «$1»',
+'page-rss-feed' => 'Canal RSS de «$1»',
 'page-atom-feed' => 'Canal Atom «$1»',
 'red-link-title' => '$1 (la páxina nun esiste)',
 'sort-descending' => 'Orde descendente',
@@ -384,11 +383,11 @@ La postrer consulta a la base de datos que s'intentó foi:
 <blockquote><code>$1</code></blockquote>
 dende la función «<code>$2</code>».
 La base datos dio'l fallu «<samp>$3: $4</samp>».",
-'dberrortextcl' => "Hebo un fallu de sintaxis nuna consulta a la base de datos.
-La postrer consulta de la base de datos que s'intentó foi:
+'dberrortextcl' => "Hebo un error de sintaxis nuna consulta a la base de datos.
+La última consulta a la base de datos que s'intentó foi:
 «$1»
 dende la función «$2».
-La base de datos dio'l fallu «$3: $4».",
+La base de datos devolvió l'error «$3: $4».",
 'laggedslavemode' => "'''Avisu:''' Esta páxina pue que nun tenga actualizaciones recientes.",
 'readonly' => 'Base de datos candada',
 'enterlockreason' => 'Introduz un motivu pal candáu, amestando una estimación de cuándo va tener llugar el descandáu',
@@ -402,7 +401,7 @@ Esto débese davezu a siguir una \"dif\" caducada o un enllaz d'historial a una
 Si esti nun ye'l casu, seique tengas atopao un bug nel software.
 Por favor informa d'esto a un [[Special:ListUsers/sysop|alministrador]], anotando la URL.",
 'missingarticle-rev' => '(núm. revisión: $1)',
-'missingarticle-diff' => '(dif: $1, $2)',
+'missingarticle-diff' => '(Diff: $1, $2)',
 'readonly_lag' => 'La base de datos candóse automáticamente mentes los sirvidores de la base de datos esclava se sincronicen cola maestra',
 'internalerror' => 'Fallu internu',
 'internalerror_info' => 'Fallu internu: $1',
@@ -413,7 +412,7 @@ Por favor informa d'esto a un [[Special:ListUsers/sysop|alministrador]], anotand
 'filedeleteerror' => 'Nun se pudo desaniciar el ficheru «$1».',
 'directorycreateerror' => 'Nun se pudo crear el direutoriu «$1».',
 'filenotfound' => 'Nun se pudo atopar el ficheru «$1».',
-'fileexistserror' => 'Nun se pue escribir nel archivu «$1»: yá esiste',
+'fileexistserror' => 'Nun se pue escribir nel ficheru «$1»: yá esiste',
 'unexpected' => 'Valor inesperáu: «$1»=«$2».',
 'formerror' => 'Fallu: Nun se pudo unviar el formulariu.',
 'badarticleerror' => 'Esta aición nun pue facese nesta páxina.',
@@ -433,7 +432,7 @@ Estos datos nun van refrescase nestos momentos.",
 Función: $1<br />
 Consulta: $2',
 'viewsource' => 'Ver fonte',
-'viewsource-title' => 'Ver la fonte de «$1»',
+'viewsource-title' => 'Ver la fonte de $1',
 'actionthrottled' => 'Aición llendada',
 'actionthrottledtext' => 'Como midida anti-spam, nun se pue repetir esta aición munches vegaes en pocu tiempu, y trespasasti esi llímite.
 Por favor vuelvi intentalo nunos minutos.',
@@ -476,9 +475,15 @@ Ten en cuenta que dalgunes páxines puen siguir apaeciendo como si tovía tuvier
 'welcomecreation-msg' => "Creóse la to cuenta.
 Nun t'escaezas d'escoyer les tos [[Special:Preferences|preferencies de {{SITENAME}}]].",
 'yourname' => "Nome d'usuariu:",
+'userlogin-yourname' => "Nome d'usuariu",
+'userlogin-yourname-ph' => "Escriba'l so nome d'usuariu",
 'yourpassword' => 'Contraseña:',
+'userlogin-yourpassword' => 'Contraseña',
+'userlogin-yourpassword-ph' => 'Escriba la so contraseña',
 'yourpasswordagain' => 'Escribi otra vuelta la contraseña:',
 'remembermypassword' => "Recordar la mio identificación nesti restolador (un máximu {{PLURAL:$1|d'un día|de $1 díes}})",
+'userlogin-remembermypassword' => 'Recordame',
+'userlogin-signwithsecure' => 'Aniciar sesión con un sirvidor seguru',
 'securelogin-stick-https' => "Siguir coneutáu al HTTPS dempués d'identificase",
 'yourdomainname' => 'El to dominiu:',
 'password-change-forbidden' => 'Nun se pueden camudar les contraseñes nesta wiki.',
@@ -491,12 +496,16 @@ Nun t'escaezas d'escoyer les tos [[Special:Preferences|preferencies de {{SITENAM
 'logout' => 'Dexar de tar identificáu',
 'userlogout' => 'Colar',
 'notloggedin' => 'Non identificáu',
+'userlogin-noaccount' => '¿Nun tien una cuenta?',
+'userlogin-joinproject' => 'Xunise a {{SITENAME}}',
 'nologin' => '¿Nun tienes una cuenta? $1.',
 'nologinlink' => 'Crear una cuenta',
 'createaccount' => 'Crear una cuenta',
 'gotaccount' => '¿Ya tienes una cuenta? $1.',
 'gotaccountlink' => 'Identificase',
 'userlogin-resetlink' => "¿Escaecisti los datos d'identificación?",
+'helplogin-url' => 'Help:Aniciar sesión',
+'userlogin-helplink' => "[[{{MediaWiki:helplogin-url}}|Ayuda p'aniciar sesión]]",
 'createaccountmail' => 'Usar una contraseña al debalu temporal y unviala a la direición de corréu electrónicu conseñada más abaxo',
 'createaccountreason' => 'Motivu:',
 'badretype' => "Les claves qu'escribisti nun concuayen.",
@@ -605,6 +614,7 @@ Seique yá camudaras correutamente la clave o que pidieras una nueva clave provi
 'passwordreset-text' => 'Complete esti formulariu pa reaniciar la contraseña.',
 'passwordreset-legend' => 'Reaniciar clave',
 'passwordreset-disabled' => 'Los reanicios de clave tán desactivaos nesta wiki.',
+'passwordreset-emaildisabled' => 'Les funciones de corréu electrónicu tan desactivaes nesta wiki.',
 'passwordreset-pretext' => "{{PLURAL:$1||Escribi ún de los elementos de los datos d'abaxo}}",
 'passwordreset-username' => "Nome d'usuariu:",
 'passwordreset-domain' => 'Dominiu:',
@@ -632,7 +642,7 @@ Tendría d'aniciar sesión y escoyer una contraseña nueva agora. Si esta solici
 Clave provisional: $2",
 'passwordreset-emailsent' => 'Unvióse un corréu electrónicu pa reaniciar la contraseña.',
 'passwordreset-emailsent-capture' => "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo.",
-'passwordreset-emailerror-capture' => "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo, pero falló l'unviu al usuariu: $1",
+'passwordreset-emailerror-capture' => "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo, pero falló l'unviu {{GENDER:$2|al usuariu|a la usuaria}}: $1",
 
 # Special:ChangeEmail
 'changeemail' => 'Camudar la direición de corréu electrónicu',
@@ -859,6 +869,8 @@ Yá esiste.',
 'content-failed-to-parse' => 'Fallu al analizar el conteníu $2 pal modelu $1: $3',
 'invalid-content-data' => 'Datos del conteníu inválidos',
 'content-not-allowed-here' => 'El conteníu «$1» nun se permite na páxina [[$2]]',
+'editwarning-warning' => 'Salir d\'esta páxina pue facer que se pierda cualesquier cambiu fechu.
+Si aniciasti sesión, puedes desactivar esti avisu na seición "Edición" de les tos preferencies.',
 
 # Content models
 'content-model-wikitext' => 'testu wiki',
@@ -1141,6 +1153,7 @@ Se puen alcontrar más detalles nel [{{fullurl:{{#Special:Log}}/delete|page={{FU
 'powersearch-togglenone' => 'Dengún',
 'search-external' => 'Busca esterna',
 'searchdisabled' => "La busca en {{SITENAME}} ta desactivada. Mentanto, pues buscar en Google. Has fixate en que'l conteníu de los sos índices de {{SITENAME}} pue tar desfasáu.",
+'search-error' => 'Hebo un error al guetar: $1',
 
 # Preferences page
 'preferences' => 'Preferencies',
@@ -3732,6 +3745,8 @@ Les imáxenes amuésense a resolución completa; les demás tribes d'archivu exe
 'htmlform-submit' => 'Unviar',
 'htmlform-reset' => 'Desfacer los cambios',
 'htmlform-selectorother-other' => 'Otros',
+'htmlform-no' => 'Non',
+'htmlform-yes' => 'Sí',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 con sofitu pa gueta en testu completu',
index 1b1cf65..ddf5a23 100644 (file)
@@ -115,8 +115,6 @@ $messages = array(
 'tog-shownumberswatching' => 'ایزله‌ين ایستیفاده‌چیلرین سایینی گؤستر',
 'tog-oldsig' => 'ایندی‌کی ایمضا:',
 'tog-fancysig' => 'ویکی متن کیمی ایمضا (اوتوماتیک باغلانتی‌سیز)',
-'tog-externaleditor' => 'دَییشدیرمک اوچون ائشیک یازیلیم ایشلد (یالنیز چوخ باشارانلار اوچون، بیلگی‌سایارینیزدا مخصوص تنظیملر لازیم‌دیر. [//www.mediawiki.org/wiki/Manual:External_editors آرتیق بیلگیلر])',
-'tog-externaldiff' => 'موقاییسه ائتمک اوچون ائشیک یازیلیم ایشلد (یالنیز چوخ باشارانلار اوچون، بیلگی‌سایارینیزدا مخصوص تنظیملر لازیم‌دیر. [//www.mediawiki.org/wiki/Manual:External_editors آرتیق بیلگیلر])',
 'tog-showjumplinks' => '«آتلان:» یاردیم باغلانتیلارینی آچ',
 'tog-uselivepreview' => 'دیری اؤن‌گؤستریش ایشلد (جاوااسکریپت لازیم‌دیر)(تست مرحله‌سینده)',
 'tog-forceeditsummary' => 'دَییشیکلیک قیساسی بوش قالاندا منی بیلدیر',
@@ -130,6 +128,7 @@ $messages = array(
 'tog-diffonly' => 'موقاییسه‌لر آلیتندا صحیفه‌لرین ایچینده‌کیلرینی گؤسترمه',
 'tog-showhiddencats' => 'گیزلی بؤلمه‌لری گؤستر',
 'tog-norollbackdiff' => 'قایتاراندان سونرا موقاییسه گؤسترمه',
+'tog-useeditwarning' => 'دَییشدیرمه صحیفه‌سینده چیخیش زامانی، آچیق و قئید اولمایان دَییشدیرمه صحیفه وارسا منه هشدار وئریلسین',
 
 'underline-always' => 'همیشه',
 'underline-never' => 'هئچ واخت',
index 03952be..8823dd5 100644 (file)
@@ -177,8 +177,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Битте күҙәтеү исемлегенә өҫтәгән ҡулланыусылар һанын күрһәтергә',
 'tog-oldsig' => 'Хәҙерге имза:',
 'tog-fancysig' => 'Имзаның үҙ вики-тамғаһы (автоматик һылтанмаһыҙ)',
-'tog-externaleditor' => 'Махсус билдәләнмәһә, тышҡы мөхәррирләүсе ҡулланырға (белгестәр өсөн генә, компьютер махсус көйләнгән булырға тейеш)',
-'tog-externaldiff' => 'Махсус билдәләнмәһә, версияларҙы сағыштырыу өсөн тышҡы программа ҡулланырға (белгестәр өсөн генә, компьютер махсус көйләнгән булырға тейеш)',
 'tog-showjumplinks' => '«Күс» ярҙамсы һылтанмалары асылһын',
 'tog-uselivepreview' => 'Тиҙ ҡарап алыуҙы ҡулланырға (JavaScript, эксперименталь)',
 'tog-forceeditsummary' => 'Төҙәтеүҙе тасуирлау юлы тултырылмаһа, мине киҫәт',
@@ -192,6 +190,7 @@ $messages = array(
 'tog-diffonly' => 'Версия сағыштырыу аҫтында бит эстәлеге күрһәтелмәһен',
 'tog-showhiddencats' => 'Йәшерен категорияларҙы күрһәтергә',
 'tog-norollbackdiff' => 'Кире ҡайтарыуҙан һуң версия айырмалары күрһәтелмәһен',
+'tog-useeditwarning' => 'Мөхәррирләү битенән үҙгәртеүҙәрҙе һаҡламайынса сыҡҡан ваҡытта мине киҫәтергә',
 
 'underline-always' => 'Һәр ваҡыт',
 'underline-never' => 'Бер ҡасан да',
@@ -912,6 +911,8 @@ $2
 'content-failed-to-parse' => '$2 эстәлеге $1 төрөнә тура килмәй: $3.',
 'invalid-content-data' => 'Ярамаған мәғлүмәт',
 'content-not-allowed-here' => '"$1" эстәлеге [[$2]] бит өсөн ярамай',
+'editwarning-warning' => 'Икенсе биткә күсеү һеҙ индергән үҙгәрештәрҙең юғалыуына килтереүе мөмкин.
+Әгәр системала танылыу үтһәгеҙ, көйләүҙәрегеҙ битенең "Мөхәррирләү" бүлегендә был киҫәтеүҙе һүндерә алаһығыҙ.',
 
 # Content models
 'content-model-wikitext' => 'викияҙма',
@@ -1196,15 +1197,6 @@ $1",
 Хәҙергә эҙләүҙе Google менән үтәй алаһығыҙ.
 Тик унда {{SITENAME}} өсөн индекслауҙың иҫке булыуы мөмкинлеген онотмағыҙ.',
 
-# Quickbar
-'qbsettings' => 'Тиҙ күсеү',
-'qbsettings-none' => 'Һис бере',
-'qbsettings-fixedleft' => 'Һулда нығытылған',
-'qbsettings-fixedright' => 'Уңда нығытылған',
-'qbsettings-floatingleft' => 'Һулда күсеүсе',
-'qbsettings-floatingright' => 'Уңда күсеүсе',
-'qbsettings-directionality' => 'Беркетелгән, телегеҙҙең яҙыу йүнәлешенә бәйле',
-
 # Preferences page
 'preferences' => 'Көйләүҙәр',
 'mypreferences' => 'Көйләүҙәр',
@@ -1753,7 +1745,6 @@ $1',
 'http-read-error' => 'HTTP уҡыу хатаһы.',
 'http-timed-out' => 'HTTP-һорауҙы көтөү ваҡыты үтте.',
 'http-curl-error' => 'URL адрес буйынса мөрәжәғәт итеү хатаһы: $1',
-'http-host-unreachable' => 'URL адрес буйынса мөрәжәғәт итеү мөмкин түгел.',
 'http-bad-status' => 'HTTP-һорауҙы эшкәрткән ваҡытта ҡыйынлыҡтар тыуҙы: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2951,11 +2942,7 @@ The wiki server cannot provide data in a format your client can read.',
 'pageinfo-protect-cascading-from' => 'Бынан башлап һикәлтәле һаҡлау',
 
 # Skin names
-'skinname-standard' => 'Классик',
 'skinname-cologneblue' => 'Кёльн һағышы',
-'skinname-myskin' => 'Шәхси',
-'skinname-chick' => 'Себеш',
-'skinname-simple' => 'Ябай',
 'skinname-modern' => 'Заманса',
 'skinname-vector' => 'Векторлы',
 
index 35d80f0..16bdb47 100644 (file)
@@ -126,10 +126,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Ihayag an numero kan nagbabantay na mga parágamit',
 'tog-oldsig' => 'Tugmadong pirma',
 'tog-fancysig' => 'Trataron an pirma na wiki-teksto (mayo nin awtomatikong kilyaw)',
-'tog-externaleditor' => 'Gamiton an pirmihan na panluwas na editor (para sa mga eksperto sana, minakaipo nin espesyal na mga panuytoy sa saimong kompyuter.
-[//www.mediawiki.org/wiki/Manual:External_editors Mga dagdag na impormasyon.])',
-'tog-externaldiff' => 'Gamíta an panluwas na diff nguna (para sa mga eksperto sana, minakaipo nin espesyal na mga panuytoy (settings) sa saimong kompyuter.
-[//www.mediawiki.org/wiki/Manual:External_editors Kadagdagang impormasyon.])',
 'tog-showjumplinks' => 'Paganaha an "luksó sa" kilyaw nin kalangkayan',
 'tog-uselivepreview' => 'Gamíta an buhay na patànaw (minakaipo nin JavaScript) (eksperimental)',
 'tog-forceeditsummary' => 'Ibunyaw sako kun maglalaog sa blangkong kalanyang nin paghirá',
@@ -143,6 +139,7 @@ $messages = array(
 'tog-diffonly' => 'Dai tabi ihayag an laog kan pahina sa ibaba nin mga diffs',
 'tog-showhiddencats' => 'Ihayag an nakatagong mga kategorya',
 'tog-norollbackdiff' => 'Omidohon an diff matapos himoon an pagbalikot',
+'tog-useeditwarning' => 'Patanidan ako kunsoarin na ako nagbaya sa pahinang pigliliwat na dae naitatagama an mga kaliwatan',
 
 'underline-always' => 'Pirmi',
 'underline-never' => 'Nungka',
@@ -514,9 +511,15 @@ Giromdoma na an ibang mga pahina mapuwedeng padagos na magpapahiling siring baga
 'welcomecreation-msg' => 'An saimong panindog pinagmukna na.
 Dae malingaw na liwaton an saimong [[Special:Preferences|{{SITENAME}} mga kamuyahan]].',
 'yourname' => 'Pangaran kan paragamit:',
+'userlogin-yourname' => 'Paragamit-na-Ngaran',
+'userlogin-yourname-ph' => 'Ikaag an saimong paragamit-na-ngaran',
 'yourpassword' => 'Pasa-taramon:',
+'userlogin-yourpassword' => 'Sikretong panlaog',
+'userlogin-yourpassword-ph' => 'Ikaag an saimong sekretong panlaog',
 'yourpasswordagain' => 'Pakilaog giraray kan sekretong panlaog:',
 'remembermypassword' => 'Giromdoma an sakong paglaog sa kilyaw (browser) na ini (para sa maksimum na $1 {{PLURAL:$1|aldaw|mga aldaw}})',
+'userlogin-remembermypassword' => 'Giromdoma ako',
+'userlogin-signwithsecure' => 'Maglaog sa seguradong serbidor',
 'securelogin-stick-https' => 'Magpirmeng konektado sa HTTPS matapos kang maglaog',
 'yourdomainname' => 'An saimong kasakupan:',
 'password-change-forbidden' => 'Ika dae makapagliwat nin sekretong panlaog sa wiking ini.',
@@ -529,13 +532,17 @@ Dae malingaw na liwaton an saimong [[Special:Preferences|{{SITENAME}} mga kamuya
 'logout' => 'Magluwas',
 'userlogout' => 'Magluwás',
 'notloggedin' => 'Dae ka nakalaog',
+'userlogin-noaccount' => 'Mayo ka nin panindog?',
+'userlogin-joinproject' => 'Mag-ayon{{SITENAME}}',
 'nologin' => 'Mayò ka pa nin panindog (account)? $1.',
 'nologinlink' => 'Magmukna nin panindog',
 'createaccount' => 'Magmukna nin panindog',
 'gotaccount' => 'Igwa ka na tabi nin panindog? $1.',
 'gotaccountlink' => 'Maglaog',
 'userlogin-resetlink' => 'Nakalingaw ka sa panlaog mong detalye?',
-'createaccountmail' => 'Sa paagi nin e-koreo',
+'helplogin-url' => 'Help:Paglalaog',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Tabang sa paglalaog]]',
+'createaccountmail' => 'Gumamit nin sarong random na temporaryong sekretong panlaog asin ipadara ini sa adres kan e-surat na pinaghaya sa ibaba',
 'createaccountreason' => 'Rason:',
 'badretype' => 'An mga sekretong panlaog mong pinagtatak bakong pareho.',
 'userexists' => 'Paragamit na ngarang piglaog may naggagamit na.
@@ -581,8 +588,8 @@ Tabi maglaog giraray matapos mong maresibe ini.',
 'blocked-mailpassword' => 'An saimong IP address pinagkubkob na magliwat, asin kaya dae tinutugutan na gumamit kan pambawi nin sekretong panlaog na punksyon tanganing makalikay sa abuso.',
 'eauthentsent' => 'Sarong e-koreong pankumpirmasyon an ipinadara sa nominadong e-koreong address.
 Bago an ibang e-koreo ipinadara sa panindog, ika igwang pagsunudong na mga instruksyon na yaon sa e-koreo, tanganing kumpirmaron na an panindog tunay talagang saimo.',
-'throttled-mailpassword' => 'Sarong pagiromdom kan sekretong panlaog an ipinadara na, sa laog nin {{PLURAL:$1|hour|$1 hours}}.
-Tangarig malikayan an abuso, saro sanang pagiromdom kan sekretong panlaog an ipinapadara sa lambang {{PLURAL:$1|hour|$1 hours}}.',
+'throttled-mailpassword' => 'Sarong e-surat sa pagliliwat kan sekretong panlaog an ipinadara na, sa laog nin {{PLURAL:$1|hour|$1 hours}}.
+Tangarig malikayan an abuso, saro sanang e-surat sa pagliliwat kan sekretong panlaog an ipinapadara sa lambang {{PLURAL:$1|hour|$1 hours}}.',
 'mailerror' => 'Salâ an pagpadará kan koreo: $1',
 'acct_creation_throttle_hit' => 'Mga bisita kaining wiki na ginagamit an saimong IP address nagmukna nin {{PLURAL:$1|1 panindog|$1 mga panindog}} sa nakaaging aldaw, na iyo ngani an maximum na pinagtutugot sa laog kan peryodong panahon.
 Bilang resulta, an mga bisita na naggagamit kaining IP address dae nguna makakamukna nin mga panindog.',
@@ -631,9 +638,10 @@ Matriumpo mo nang nailaog an sekretong panlaog o nakua an bàgong temporaryong s
 
 # Special:PasswordReset
 'passwordreset' => 'Pakibago kan sekretong panlaog',
-'passwordreset-text' => 'Kumpletoha ining porma tanganing makaresibe nin pampagiromdom na e-koreo kan detalye nin saimong panindog.',
+'passwordreset-text' => 'Kumpletoha ining porma tangarig liwatong an saimong sekretong panlaog.',
 'passwordreset-legend' => 'Pakibago kan sekretong panlaog',
 'passwordreset-disabled' => 'An pagbago kan sekretong panlaog pinagpundo sa wiking ini.',
+'passwordreset-emaildisabled' => 'E-surat na mga estima pinag-uruntok sa wiking ini.',
 'passwordreset-pretext' => '{{PLURAL:$1||Pakilaog kan saro sa mga pedaso nin datos sa ibaba}}',
 'passwordreset-username' => 'Paragamit-ngaran:',
 'passwordreset-domain' => 'Kasakupan:',
@@ -641,12 +649,12 @@ Matriumpo mo nang nailaog an sekretong panlaog o nakua an bàgong temporaryong s
 'passwordreset-capture-help' => 'Kun saimong i-tsek ini box, an e-koreo (na igwang temporaryong sekretong panlaog) ipapahiling saimo siring na ini ipagpapadara sa paragamit.',
 'passwordreset-email' => 'E-koreong address:',
 'passwordreset-emailtitle' => 'Mga detalye kan panindog sa {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'May sarong tawo (pwedeng ika gayod, gikan sa IP address na $1) naghagad nin sarong pagiromdom kan detalye kan saimong panindog para sa {{SITENAME}} ($4). An minasunod na paragamit {{PLURAL:$3|panindog iyo an|mga panindog iyo an}} na asosyado kaining e-koreong address:
+'passwordreset-emailtext-ip' => 'May sarong tawo (pwedeng ika gayod, gikan sa IP address na $1) naghahagad nin pagliliwat kan saimong sekretong panlaog para sa{{SITENAME}}($4). An minasunod na paragamit {{PLURAL:$3|panindog iyo an|mga panindog iyo an}} na asosyado kaining e-surat na adres:
 
 $2
 
-{{PLURAL:$3|Ining temporaryong sekretong panlaog|Ining mga temporaryong panlaog}} mapapaso sa {{PLURAL:$5|sarong aldaw|$5 mga aldaw}}.
-Ika dapat na maglaog asin magpili nin sarong bagong sekretong panlaog ngunyan. Kun ibang tawo an naghimo kaining kahagadan, o kun saimo nang nagiromdoman an saimong orihinal na sekretong panlaog, asin habo mo nang ribayan ini, ipasapara mo na sana an mensaheng ini asin ipadagos mo nang gamiton an saimong lumang sekretong panlaog.',
+{{PLURAL:$3|Ining temporaryong sekretong panlaog|Ining mga temporaryong sekretong panlaog}} mapapaso sa laog nin {{PLURAL:$5|sarong aldaw|$5 mga aldaw}}.
+Dapat kang maglaog asin magpili nin sarong baguhon na sekretong panlaog ngunyan. Kun ibang tawo an naghimo kaining kahagadan, o kun saimo nang nagiromdoman an saimong orihinal na sekretong panlaog, asin habo mo nang ribayan ini, ipasipara mo na sana ining mensahe asin ipagpadagos mo nang gamiton an luma mong sekretong panlaog.',
 'passwordreset-emailtext-user' => 'Paragamit $1 sa {{SITENAME}} naghahagad nin sarong pagiromdom kan detalye nin saimong panindog para sa {{SITENAME}}
 ($4). An minasunod na paragamit {{PLURAL:$3|panindog iyo an|mga panindog iyo an}} na asosyado kaining e-koreong address:
 
@@ -657,9 +665,9 @@ $2
 Ika dapat na maglaog asin magpili nin sarong bagong sekretong panlaog ngunyan. Kun ibang tawo an naghimo kaining kahagadan, o kun saimo nang nagiromdoman an saimong orihinal na sekretong panlaog, asin habo mo nang ribayan ini, ipasapara mo na sana an mensaheng ini asin ipadagos mo nang gamiton an saimong lumang sekretong panlaog.',
 'passwordreset-emailelement' => 'Paragamit-ngaran: $1
 Temporaryong sekretong panlaog: $2',
-'passwordreset-emailsent' => 'Sarong pampagiromdom na e-koreo ipinadara na.',
-'passwordreset-emailsent-capture' => 'Sarong pampagiromdom na e-koreo ipinadara na, ipinapahiling sa may ibaba.',
-'passwordreset-emailerror-capture' => 'Sarong pampagiromdom na e-koreo pinaghimo na, ipinapahiling sa may ibaba, alagad an pagpapadara kaini sa paragamit nagpalya: $1',
+'passwordreset-emailsent' => 'Sarong e-surat sa pagliliwat kan sekretong panlaog an ipinadara na.',
+'passwordreset-emailsent-capture' => 'Sarong e-surat sa pagliliwat kan sekretong panlaog an ipinadara na, yaon ipinapahiling sa ibaba.',
+'passwordreset-emailerror-capture' => 'Sarong e-surat sa pagliliwat kan sekretong panlaog an pinagpuyos na, yaon ipinapahiling sa ibaba, alagad sa pagpapadara kaini sa {{GENDER:$2|paragamit}} nagpalya: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Ribayan an e-koreong address',
@@ -834,8 +842,8 @@ Pigpropromesa mo man samuyà na ika an kagsurat kaini, o kinopya mo ini sa domin
 Pigpapangakò mo man samuyà na ika an nagsurat kaini, o pigkopya mo ini sa dominiong panpubliko o sarong parehong libreng rekurso (hilingon an $1 para sa mga detalye). '''DAI TABÌ MAGSUMITIR NIN MGA GIBONG IPINAPANGALAD NA KOPYAHON NIN MAYONG PERMISO!'''",
 'longpageerror' => "'''Ay Sala: An teksto na saimong pinagsumite {{PLURAL:$1|sarong kilobyte|$1 kilobytes}} an laba, mas halaba kesa maksimum na {{PLURAL:$2|sarong kilobyte|$2 kilobytes}}.'''
 Ini dae tabi maitatagama.",
-'readonlywarning' => "'''Patanid tabi: An datos-sarayan nakakandado para sa maintenance, kay ika dae makakapagtagama kan saimong mga pinagriliwat sa ngunyan.'''
-Ika mapuwedeng maikopya an teksto pasiring sa sarong sagunson kan teksto asin para itagama ini sa huri.
+'readonlywarning' => "'''Patanid tabi: An datos-sarayan nakakandado para sa maintenance, kaya ika dae makakapagtagama kan saimong mga pinagriliwat sa ngunyan.'''
+Ika mapuwedeng makakopya asin idukot an saimong teksto pasiring sa sarong sagunson kan teksto asin itagama ini sa bandang huri.
 
 An administrador na iyo an nagkandado kaini naghayag kaining kapaliwanagan: $1",
 'protectedpagewarning' => "'''Patanid tabi: Ining pahina pinagprotektaran tanganing an mga paragamit sana na igwang pribilihiyo bilang administrador an makakapagliwat kaini.'''
@@ -879,6 +887,7 @@ Igwa na kaini.',
 'content-failed-to-parse' => 'Nagpalya sa paglunhay an $2 na laman para sa $1 na modelo: $3',
 'invalid-content-data' => 'Imbalidong datos nin laman',
 'content-not-allowed-here' => '"$1" na laman dae pinagtutugutan sa pahina [[$2]]',
+'editwarning-warning' => 'Sa pagbaya kaining pahina magkakausa saimo na mawara an anuman na mga kaliwatan na saimong ginibo. Kun ika maglaog, mapuwede mong untukon ining patanid sa "Pagliliwat" na seksyon kan saimong mga kamuyahan.',
 
 # Content models
 'content-model-wikitext' => 'wiki-teksto',
@@ -1144,7 +1153,7 @@ An mga detalye mapuwedeng matatagboan sa [{{fullurl:{{#Special:Log}}/delete|page
 'search-interwiki-default' => '$1 na mga resulta:',
 'search-interwiki-more' => '(dakol pa)',
 'search-relatedarticle' => 'Kauyon',
-'mwsuggest-disable' => 'Pundohon an AJAX na mga suhestiyon',
+'mwsuggest-disable' => 'Untokon an suhestiyon nin paghahanap',
 'searcheverything-enable' => 'Maghanap sa gabos na mga espasyong-ngaran',
 'searchrelated' => 'kauyon',
 'searchall' => 'gabós',
@@ -1164,15 +1173,7 @@ Prubaran na panigmitan an saimong kahaputan nin ''all:'' sa paghanap kan gabos n
 'powersearch-togglenone' => 'Wara',
 'search-external' => 'Panluwas na paghahanap',
 'searchdisabled' => 'Pigpopogolan mûna an paghanap sa {{SITENAME}}. Mientras tanto, pwede ka man maghanap sa Google. Giromdomon tabî na an mga indise kan laog ninda sa {{SITENAME}} pwede ser na lumâ na.',
-
-# Quickbar
-'qbsettings' => 'Quickbar',
-'qbsettings-none' => 'Mayô',
-'qbsettings-fixedleft' => 'Nakatakód sa walá',
-'qbsettings-fixedright' => 'Nakatakód sa tûo',
-'qbsettings-floatingleft' => 'Naglálatáw sa walá',
-'qbsettings-floatingright' => 'Naglálatáw sa tûo',
-'qbsettings-directionality' => 'Nakadukot, minadepende sa skrip panukdoan kan saimong lengguwahe',
+'search-error' => 'May salang nangyari habang naghahanap:$1',
 
 # Preferences page
 'preferences' => 'Mga kabòtan',
@@ -1719,7 +1720,6 @@ Para sa pinakamakusog na seguridad, img_auth.php nganay pinagpundo.',
 'http-read-error' => 'HTTP na pagbabasa nasasala.',
 'http-timed-out' => 'HTTP na kahagadan naubos na an oras.',
 'http-curl-error' => 'An kasalaan nagsusungko sa kilyawan: $1',
-'http-host-unreachable' => 'Dae nakakaabot sa kilyawan.',
 'http-bad-status' => 'Igwa nin sarong problema habang yaon sa HTTP na kahagadan: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1874,6 +1874,12 @@ Giromdoma baya na mag-tsek para sa iba pang kasugpon sa mga templato bago mo pag
 Sinda mapuwedeng makipagsugpon pasiring sa sarong mas manigong pahina nanggad.<br />
 An sarong pahina tratado bilang pampalinaw na pahina kun ini minagamit nin sarong templato na nakasugpon gikan sa [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Mga pahina na igwang pahina nin kagrugaring',
+'pageswithprop-legend' => 'Mga pahina na igwang pahina nin kagrugaring',
+'pageswithprop-text' => 'Ining mahina naglilista kan mga pahina na minagamit nin partikular na pahina nin kagrugaring.',
+'pageswithprop-prop' => 'Kagrugaring na pangaran:',
+'pageswithprop-submit' => 'Larga',
+
 'doubleredirects' => 'Dobleng mga redirekta',
 'doubleredirectstext' => 'Ining pahina minalista nin mga pahina na minatukdo liwat pasiring sa pinagtukdong-liwat na mga pahina.
 Kada palunpon igwang laog na minasugpon pasiring sa enot asin ikaduwang pagtukdo-liwat, siring man sa target kan ikaduwang pagtukdo-liwat, na pirme nanggad an "tunay" na pahinang target, na an enot na pagtukdong-liwat dapat na iyo an pagtutukdoon.
@@ -2037,15 +2043,6 @@ Suportadong {{PLURAL:$2|protokol|mga protokol}}: <code>$1</code> (defaults to ht
 'listusers-noresult' => 'Mayong nakuang parágamit.',
 'listusers-blocked' => '(pinagbarado)',
 
-# Special:ActiveUsers
-'activeusers' => 'Listahan kan aktibong paragamit',
-'activeusers-intro' => 'Iyo in an listahan kan mga paragamit na nagkaigwa nin mga ginibo sa laog kan nakaaging $1 {{PLURAL:$1|aldaw|mga aldaw}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|pigliwat|mga pigliwat}} sa nakaaging {{PLURAL:$3|aldaw|$3 mga aldaw}}',
-'activeusers-from' => 'Ipahiling an mga paragamit magpoon sa:',
-'activeusers-hidebots' => 'Itago an mga panalnga',
-'activeusers-hidesysops' => 'Itago an mga administrador',
-'activeusers-noresult' => 'Mayong mga paragamit na nanagboan.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Mga karapatan kan grupo nin paragamit',
 'listgrouprights-summary' => 'An minasunod iyo an listahan kan mga grupo nin paragamit na pinaghunsay kaining wiki, kaiba an saindang asosyadong mga karapatan nin paggamit.
@@ -2105,7 +2102,7 @@ An e-surat na estada sa saimong pinaglaog sa [[Special:Preferences|saimong parag
 'usermessage-editor' => 'Pansistemang mensahero',
 
 # Watchlist
-'watchlist' => 'Pigbabantayan ko',
+'watchlist' => 'Bantay-listahan',
 'mywatchlist' => 'Bantay-listahan',
 'watchlistfor2' => 'Para ki $1 $2',
 'nowatchlist' => 'Mayo ka man na mga bagay saimong lista nin pigbabantayan.',
@@ -2540,6 +2537,7 @@ Ini, baya, pinagkubkob bilang parte kan hidwas $2, na mapuwedeng daemakukubkob.'
 'sorbsreason' => 'An saimong IP na estada pinaglista bilang sarong bukas na proksi sa lang kan DNSBL na ginagamit kan {{SITENAME}}.',
 'sorbs_create_account_reason' => 'An saimong IP na estada pinaglista bilang sarong bukas na proksi sa laog kan DNSBL na ginagamit kan {{SITENAME}}.
 Ika dae makakamukna nin sarong panindog.',
+'xffblockreason' => 'An yaong IP adres sa laog nin X-Pinagtulod-Para sa kapamayuhan, dawa saimo o idtong proksing serbidor na saimong ginagamit, pinagkubkob. An orihinal na rason sa pagkubkob iyo na:$1',
 'cant-block-while-blocked' => 'Ika dae makakakubkob kan ibang mga paragamit mantang ika nakukubkob pa.',
 'cant-see-hidden-user' => 'An paragamit na pinagpubaran mong kubkubon pinagkubkob asin pinagtago na. Mala ta ika mayo nin karapatan na magtago nin paragamit, ika dae makakahiling or makakaliwat kan kinubkob na paragamit.',
 'ipbblocked' => 'Ika da makakakubkob or maghale nin kubkob sa ibang mga paragamit, nin huli ta ika mismo sa sadiri mo pinagkubkob na',
@@ -2567,13 +2565,14 @@ Ika dae makakamukna nin sarong panindog.',
 # Move page
 'move-page' => 'Ibalyo an $1',
 'move-page-legend' => 'Ibalyó an páhina',
-'movepagetext' => "Sa paggagamit kan porma na yaon sa ibaba mariribayan nin pangaran an sarong pahina, maibabalyo an gabos kaining historiya pasiring sa baguhon na titulo.
-Ika makakapagsumpay kan mga panlikwat na magtutukdo awtomatiko pasiring sa orihinal na titulo.
-Kun saimong pinili na dae, seguraduhon na ma-tsek para sa [[Special:DoubleRedirects|doble]] o [[Special:BrokenRedirects|nabaak namga panlikwat]].
-Ika an responsable para himoong segurado na an mga kilyaw padagos na minatukdo kun saen sinda dapat na magduman.
+'movepagetext' => "Sa paggagamit kan porma na yaon sa ibaba mariribayan nin pangaran an sarong pahina, maibabalyo an gabos kaining historiya pasiring sa baguhong pangaran.
+An lumang titulo magigin sarong panlikwat na pahina sa baguhong titulo.
+Ika makakapagsumpay kan mga panlikwat na magtutukdong awtomatiko pasiring sa orihinal na titulo.
+Kun saimong pinili na dae, seguraduhon na marikisa para sa [[Special:DoubleRedirects|doble]] o [[Special:BrokenRedirects|nabaak na mga panlikwat]].
+Ika an responsable para himoong segurado na an mga kasugpon padagos na minatukdo kun saen sinda dapat na magduman.
 
 Giromdoma na an pahina '''dae''' maibabalyo kun igwa na nin sarong pahina sa baguhon na titulo, laen lang kun ini daeng laman o sarong panlikwat asin mayo nin nakaaging historiya nin pagliwat.
-Ini minapasabot na ika makakapagliwat nin pangaran nin sarong pahina pabalik sa kun saen ini pinagliwatan nin pangaran kun ika nakahimo nin kasalaan, asin ika dae makakasalambaw nin sarong eksistido nang pahina.
+Ini minapasabot na ika makakapagribay nin pangaran nin sarong pahina pabalik sa kun saen ini pinagribayan nin pangaran kun ika nakahimo nin kasalaan, asin ika dae makakasalambaw nin sarong eksistido nang pahina.
 
 '''Patanid!'''
 Ini magigin sarong biglaan asin dae inaasahan na kaliwatan para sa sarong bantugan na pahina; pakiseguro sana na saimong nasabutan an mga konsekuwensiya kaini bago ipagpadagos.",
@@ -2897,6 +2896,7 @@ Ini hurot na pinagkausa nin sarong sugpunan pasiring sa sarong pinagbawal na pan
 'pageinfo-robot-noindex' => 'Dae maihuhukdo',
 'pageinfo-views' => 'Numero kan mga patanaw',
 'pageinfo-watchers' => 'Numero kan parabantay nin pahina',
+'pageinfo-few-watchers' => 'Kadikiton kesa $1{{PLURAL:$1|parabantay|mga parabantay}}',
 'pageinfo-redirects-name' => 'Maipalikwat pasiring sa pahina ini',
 'pageinfo-subpages-name' => 'Mga sub-pahina kaining pahina',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|panlikwat|mga panlikwat}}; $3 {{PLURAL:$3|bakong panlikwat|bakong mga panlikwat}})',
@@ -2926,8 +2926,6 @@ Ini hurot na pinagkausa nin sarong sugpunan pasiring sa sarong pinagbawal na pan
 'pageinfo-category-files' => 'Bilang nin mga sagunson',
 
 # Skin names
-'skinname-standard' => 'Klasiko',
-'skinname-simple' => 'Simple',
 'skinname-modern' => 'Bago',
 
 # Patrolling
@@ -3663,7 +3661,7 @@ Mga imahe ipinapahiling sa bilog na resolusyon, an iba pang tipo nin mga sagunso
 'specialpages-group-highuse' => 'Halangkawong gamit na mga pahina',
 'specialpages-group-pages' => 'Mga listahan kan mga pahina',
 'specialpages-group-pagetools' => 'Mga kagamitan sa pahina',
-'specialpages-group-wiki' => 'Wiking datos asin mga kagamitan',
+'specialpages-group-wiki' => 'Datos asin mga palindô',
 'specialpages-group-redirects' => 'Panukdo sa espesyal na mga pahina',
 'specialpages-group-spam' => 'Pan-spam na mga kagamitan',
 
@@ -3727,23 +3725,25 @@ Ining sityo igwang naeksperiyensiyahan na mga kakundian sa teknikal.',
 'htmlform-submit' => 'Sumitiron',
 'htmlform-reset' => 'Dae idagos an mga kaliwatan',
 'htmlform-selectorother-other' => 'An iba',
+'htmlform-no' => 'Habó',
+'htmlform-yes' => 'Iyo',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 na igwang suporta sa kabilogang-teksto nin paghahanap',
 'sqlite-no-fts' => '$1 na mayong suporta sa kabilogang-teksto nin paghahanap',
 
 # New logging system
-'logentry-delete-delete' => '$1 pinagpurang pahina $3',
-'logentry-delete-restore' => '$1 pinagbalik na pahina $3',
-'logentry-delete-event' => '$1 pinagliwat an bisibilidad kan {{PLURAL:$5|sarong talaan nin pangyayari|%5 talaan nin mga pangyayari}} kan $3: $4',
-'logentry-delete-revision' => '$1 pinagliwat an bisibilidad kan {{PLURAL:$5|sarong rebisyon|$5 na mga rebisyon}} na yaon sa pahina $3: $4',
-'logentry-delete-event-legacy' => '$1 pinagliwat an bisibilidad kan talaan nin mga pangyayari sa $3',
-'logentry-delete-revision-legacy' => '$1 pinagliwat an bisibilidad kan mga rebisyon sa pahina $3',
-'logentry-suppress-delete' => '$1 pinaglubog na pahina $3',
-'logentry-suppress-event' => '$1 pasikretong pinagliwat an bisibilidad kan {{PLURAL:$5|talaan nin pangyayari|$5 mga talaan nin pangyayari}} sa $3: $4',
-'logentry-suppress-revision' => '$1 pasikretong pinagliwat an bisibilidad kan {{PLURAL:$5|rebisyon|$5 mga rebisyon}} sa pahina $3: $4',
-'logentry-suppress-event-legacy' => '$1 pasikretong pinagliwat an bisibilidad kan talaan nin mga pangyayari sa $3',
-'logentry-suppress-revision-legacy' => '$1 pasikretong pinagliwat an bisibilidad kan mga rebisyon sa pahina $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|pinagpura na}} pahina $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|pinagbalik}} na pahina $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|pinagliwat}}an bisibilidad kan {{PLURAL:$5|sarong talaan nin pangyayari|$5 talaan nin mga pangyayari}} kan $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|pinagliwat}} an bisibilidad kan {{PLURAL:$5|sarong rebisyon|$5 na mga rebisyon}} na yaon sa pahina $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|pinagliwat}} an bisibilidad kan talaan nin mga pangyayari sa $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|pinagliwat}} an bisibilidad kan mga rebisyon sa pahina $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|pinaglubog}} na pahina $3',
+'logentry-suppress-event' => '$1 pasikretong {{GENDER:$2|pinagliwat}} an bisibilidad kan {{PLURAL:$5|talaan nin pangyayari|$5 mga talaan nin pangyayari}} sa $3: $4',
+'logentry-suppress-revision' => '$1 pasikretong {{GENDER:$2|pinagliwat}} an bisibilidad kan {{PLURAL:$5|rebisyon|$5 mga rebisyon}} sa pahina $3: $4',
+'logentry-suppress-event-legacy' => '$1 pasikretong {{GENDER:$2|pinagliwat}} an bisibilidad kan talaan nin mga pangyayari sa $3',
+'logentry-suppress-revision-legacy' => '$1 pasikretong {{GENDER:$2|pinagliwat}} an bisibilidad kan mga rebisyon sa pahina $3',
 'revdelete-content-hid' => 'an laog pinagtago',
 'revdelete-summary-hid' => 'Sumaryo nin pagliwat itinago',
 'revdelete-uname-hid' => 'pangaran nin paragamit itinago',
@@ -3752,19 +3752,20 @@ Ining sityo igwang naeksperiyensiyahan na mga kakundian sa teknikal.',
 'revdelete-uname-unhid' => 'pangaran nin paragamit ipinaghaya',
 'revdelete-restricted' => 'Pinag-aplikar an mga restriksyon sa mga administrador',
 'revdelete-unrestricted' => 'Pinaghale an mga restriksyon para sa mga administrador',
-'logentry-move-move' => '$1 pinagbalyo an pahina $3 paduman sa $4',
-'logentry-move-move-noredirect' => 'S1 pinagbalyo an pahina $3 paduman sa $4 na mayong iwinalat na panlikwat',
-'logentry-move-move_redir' => '$1 pinagbalyo an pahina $3 paduman sa $4 sa paagi kan panlikwat',
-'logentry-move-move_redir-noredirect' => '$1 pinagbalyo an pahina $3 paduman sa $4 sa paagi kan panlikwat na mayong iwinawalat na sarong panlikwat',
-'logentry-patrol-patrol' => '$1 pinagmarkahan an rebisyon $4 kan pahina $3 na patrolyado',
-'logentry-patrol-patrol-auto' => '$1 awtomatikong pinagmarkahan an rebisyonn $4 kan pahina $3 na patrolyado',
-'logentry-newusers-newusers' => 'An paragamit na panindog $1 pinagmukna na',
-'logentry-newusers-create' => 'An paragamit na panindog $1 pinagmukna na',
-'logentry-newusers-create2' => 'An paragamit na panindog $3 pinagmukna na ni $1',
-'logentry-newusers-autocreate' => 'An paragamit na panindog $1 awtomatikong pinagmukna na',
-'logentry-rights-rights' => '$1 nagliwat kan pangrupong pagkamiyembro para sa $3 gikan sa $4 pasiring sa $5',
-'logentry-rights-rights-legacy' => '$1 nagliwat kan pangrupong pagkamiyembro para sa $3',
-'logentry-rights-autopromote' => '$1 awtomatikong pinagpalangkaw gikan sa $4 pasiring sa $5',
+'logentry-move-move' => '$1 {{GENDER:$2|pinagbalyo}} an pahina $3 pasiring sa $4',
+'logentry-move-move-noredirect' => 'S1 {{GENDER:$2|pinagbalyo}} an pahina $3 pasiring sa $4 na dae iwinalat an sarong panlikwat',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|pinagbalyo}} an pahina $3 pasiring sa $4 sa paagi kan panlikwat',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|pinagbalyo}} an pahina $3 pasiring sa $4 sa paagi kan panlikwat na dae iwinawalat na sarong panlikwat',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|pinagmarkahan}} an rebisyon $4 kan pahina $3 na patrolyado',
+'logentry-patrol-patrol-auto' => '$1 awtomatikong {{GENDER:$2|pinagmarkahan}} an rebisyon $4 kan pahina $3 na patrolyado',
+'logentry-newusers-newusers' => 'An panindog kan paragamit $1 {{GENDER:$2|pinagmukna}} na',
+'logentry-newusers-create' => 'An panindog kan paragamit $1 {{GENDER:$2|pinagmukna}} na',
+'logentry-newusers-create2' => 'An panindog kan paragamit $3 {{GENDER:$2|pinagmukna}} na ni $1',
+'logentry-newusers-byemail' => 'An panindog kan paragamit $3 {{GENDER:$2|pinagmukna}} ni $1 asin an sekretong panlaog ipinadara na sa paagi nin e-surat',
+'logentry-newusers-autocreate' => 'An panindong kan paragamit $1 awtomatikong {{GENDER:$2|pinagmukna}} na',
+'logentry-rights-rights' => '$1 {{GENDER:$2|pinagliwat}} kan pangrupong pagkamiyembro para sa $3 gikan sa $4 pasiring sa $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|nagliwat}} kan pangrupong pagkamiyembro para sa $3',
+'logentry-rights-autopromote' => '$1 awtomatikong {{GENDER:$2|pinagpalangkaw}} gikan sa $4 pasiring sa $5',
 'rightsnone' => '(mayô)',
 
 # Feedback
@@ -3819,6 +3820,7 @@ Kun bako man, ika makakagamit nin sayon na porma sa ibaba. An saimong komento id
 'api-error-ok-but-empty' => 'Panlaog na kasalaan: Mayong simbag gikan sa serbidor.',
 'api-error-overwrite' => 'An salambawan na sarong eksistido nang sagunson dae pinagtutugutan.',
 'api-error-stashfailed' => 'Panlaog na kasalaan: An serbidor nagpalya sa pagsaray kan temporaryong sagunson.',
+'api-error-publishfailed' => 'Panlaog na kasalaan: An serbidor nagpalya na ipublikar an temporaryong sagunson.',
 'api-error-timeout' => 'An serbidor dae nakapagsimbag sa laog kan pinaghunang panahon.',
 'api-error-unclassified' => 'May dae midbid na kasalaan an nangyari.',
 'api-error-unknown-code' => 'Dae midbid na kasalaan: "$1".',
@@ -3839,4 +3841,7 @@ Kun bako man, ika makakagamit nin sayon na porma sa ibaba. An saimong komento id
 'duration-centuries' => '$1 {{PLURAL:$1|siglo|mga siglo}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenyo|mga millenyo}}',
 
+# Image rotation
+'rotate-comment' => 'An imahe pinagbirik ni $1 {{PLURAL:$1|grado|mga grado}} hitsado',
+
 );
index ec98157..760bfa1 100644 (file)
@@ -119,8 +119,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Паказваць колькасць назіральнікаў',
 'tog-oldsig' => 'Існуючы подпіс:',
 'tog-fancysig' => 'Апрацоўваць подпіс як вікі-тэкст (без аўтаматычнай спасылкі)',
-'tog-externaleditor' => "Карыстацца вонкавай праграмай для праўкі (edit); рэкамендуецца толькі для спецыялістаў, бо патрабуе адмысловых настаўленняў на камп'ютары; [//www.mediawiki.org/wiki/Manual:External_editors гл. падрабязна.]",
-'tog-externaldiff' => "Карыстацца вонкавай праграмай для параўнання (diff); рэкамендуецца толькі для спецыялістаў, бо патрабуе адмысловых настаўленняў на камп'ютары; [//www.mediawiki.org/wiki/Manual:External_editors гл. падрабязна.]",
 'tog-showjumplinks' => 'Дазволіць дапаможныя спасылкі "jump to"',
 'tog-uselivepreview' => 'Жывы перадпаказ (Яваскрыпт, эксперыментальн.)',
 'tog-forceeditsummary' => 'Папярэджваць пра пустое поле тлумачэння праўкі',
@@ -134,6 +132,7 @@ $messages = array(
 'tog-diffonly' => 'Не паказваць рэшты старонкі пад розніцай',
 'tog-showhiddencats' => 'Паказаць схаваныя катэгорыі',
 'tog-norollbackdiff' => 'Не паказваць розніцу ў выніку адкату',
+'tog-useeditwarning' => 'Папярэдзіць мяне, калі я пакідаю старонку з незахаванымі праўкамі',
 
 'underline-always' => 'Заўсёды',
 'underline-never' => 'Ніколі',
@@ -815,6 +814,8 @@ $2
 'edit-no-change' => 'Вашая праўка была праігнараваная, таму што не мяняўся тэкст.',
 'edit-already-exists' => 'Не ўдалося стварыць новую старонку.
 Такая ўжо існуе.',
+'editwarning-warning' => 'Выхад з гэтай старонкі прывядзе да страты правак, якія вы зрабілі. 
+Калі Вы зарэгістраваныя ў сістэме, Вы можаце адключыць гэта папярэджанне ў закладцы "Праца" Вашых настаўленняў.',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "Увага: На старонцы занадта шмат працаёмістых зваротаў да парсера.
@@ -1075,15 +1076,6 @@ $1",
 'search-external' => 'Вонкавы пошук',
 'searchdisabled' => 'Функцыя пошуку {{SITENAME}} не працуе. Тымчасова можна шукаць з дапамогай Google. Заўважце, што тамтэйшыя індэксы зместу {{SITENAME}} могуць не быць актуальнымі.',
 
-# Quickbar
-'qbsettings' => 'Хуткая стужка',
-'qbsettings-none' => 'Няма',
-'qbsettings-fixedleft' => 'Прымацавана злева',
-'qbsettings-fixedright' => 'Прымацавана справа',
-'qbsettings-floatingleft' => 'Плавае злева',
-'qbsettings-floatingright' => 'Плавае справа',
-'qbsettings-directionality' => 'Фіксаваная, у залежнасці ад накіравання вашай мовы',
-
 # Preferences page
 'preferences' => 'Настаўленні',
 'mypreferences' => 'Настáўленні',
@@ -1600,7 +1592,6 @@ $1',
 'http-read-error' => 'Памылка чытання HTTP',
 'http-timed-out' => 'Мінуў час чакання HTTP-запыту.',
 'http-curl-error' => 'Памылка звароту да URL: $1',
-'http-host-unreachable' => 'Не ўдалося адкрыць URL',
 'http-bad-status' => 'Пад час апрацоўкі HTTP-запыту выяўлена праблема: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1901,15 +1892,6 @@ $1',
 'listusers-noresult' => 'Удзельнікі не знойдзеныя.',
 'listusers-blocked' => '(Заблакаваны)',
 
-# Special:ActiveUsers
-'activeusers' => 'Актыўныя ўдзельнікі',
-'activeusers-intro' => 'Гэта пералік удзельнікаў, якія нешта рабілі за апошнія $1 {{PLURAL:$1|дзень|дзён}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|праўка|праўкі|правак}} за апошні{{PLURAL:$3| дзень|я $3 дзён}}',
-'activeusers-from' => 'Паказ, пачынаючы з:',
-'activeusers-hidebots' => 'Без робатаў',
-'activeusers-hidesysops' => 'Без адміністратараў',
-'activeusers-noresult' => 'Няма такіх удзельнікаў.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Дазволы для груп удзельнікаў',
 'listgrouprights-summary' => 'Гэты пералік вызначаных у гэтай вікі груп удзельнікаў, разам з прыпісанымі ім дазволамі.
@@ -2717,13 +2699,8 @@ $1',
 'pageinfo-authors' => 'Колькасць розных аўтараў',
 
 # Skin names
-'skinname-standard' => 'Класіка',
-'skinname-nostalgia' => 'Настальгія',
 'skinname-cologneblue' => 'Сіні Кёльн',
 'skinname-monobook' => 'Манабук',
-'skinname-myskin' => 'Майскін',
-'skinname-chick' => 'Чык',
-'skinname-simple' => 'Проста',
 'skinname-modern' => 'Сучаснасць',
 
 # Patrolling
index 1e743c3..7e78295 100644 (file)
@@ -289,8 +289,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Паказваць колькасьць назіральнікаў',
 'tog-oldsig' => 'Цяперашні подпіс:',
 'tog-fancysig' => 'Апрацоўваць подпіс як вікі-тэкст (без аўтаматычнай спасылкі)',
-'tog-externaleditor' => 'Выкарыстоўваць вонкавы рэдактар па змоўчваньні (толькі для адмыслоўцаў, патрабуе спэцыяльных наладак на вашым кампутары. [//www.mediawiki.org/wiki/Manual:External_editors Падрабязнасьці.])',
-'tog-externaldiff' => 'Выкарыстоўваць вонкавую праграму параўнаньня вэрсіяў па змоўчваньні (толькі для адмыслоўцаў, патрабуе спэцыяльных наладак на вашым кампутары. [//www.mediawiki.org/wiki/Manual:External_editors Падрабязнасьці.])',
 'tog-showjumplinks' => 'Актываваць дапаможныя спасылкі «перайсьці да»',
 'tog-uselivepreview' => 'Выкарыстоўваць хуткі папярэдні прагляд (патрабуе JavaScript) (экспэрымэнтальна)',
 'tog-forceeditsummary' => 'Папярэджваць пра адсутнасьць кароткага апісаньня зьменаў',
@@ -305,6 +303,7 @@ $messages = array(
 'tog-showhiddencats' => 'Паказваць схаваныя катэгорыі',
 'tog-noconvertlink' => 'Забараніць канвэртацыю назваў спасылак',
 'tog-norollbackdiff' => 'Не паказваць зьмены пасьля выкарыстаньня функцыі адкату',
+'tog-useeditwarning' => 'Папярэджваць мяне, калі я буду пакідаць старонку рэдагаваньня зь незахаванымі зьменамі',
 
 'underline-always' => 'Заўсёды',
 'underline-never' => 'Ніколі',
@@ -674,9 +673,15 @@ $2',
 'welcomecreation-msg' => 'Ваш рахунак быў створаны.
 Не забудзьцеся зьмяніць Вашыя [[Special:Preferences|налады ў {{GRAMMAR:месны|{{SITENAME}}}}]].',
 'yourname' => 'Імя ўдзельніка:',
+'userlogin-yourname' => 'Імя ўдзельніка',
+'userlogin-yourname-ph' => 'Увядзіце вашае імя ўдзельніка',
 'yourpassword' => 'Пароль:',
+'userlogin-yourpassword' => 'Пароль',
+'userlogin-yourpassword-ph' => 'Увядзіце ваш пароль',
 'yourpasswordagain' => 'Паўтарыце пароль:',
 'remembermypassword' => 'Запомніць мяне на гэтым кампутары (ня больш за $1 {{PLURAL:$1|дзень|дні|дзён}})',
+'userlogin-remembermypassword' => 'Запамятаць мяне',
+'userlogin-signwithsecure' => 'Уваходзіць празь бясьпечны сэрвэр',
 'securelogin-stick-https' => 'Утрымліваць злучэньне праз HTTPS пасьля ўваходу ў сыстэму',
 'yourdomainname' => 'Ваш дамэн:',
 'password-change-forbidden' => 'Вы ня можаце зьмяняць паролі ў гэтай вікі.',
@@ -689,12 +694,16 @@ $2',
 'logout' => 'Выйсьці',
 'userlogout' => 'Выйсьці',
 'notloggedin' => 'Вы не ўвайшлі ў сыстэму',
+'userlogin-noaccount' => 'Ня маеце рахунку?',
+'userlogin-joinproject' => 'Далучайцеся да {{GRAMMAR:родны|{{SITENAME}}}}',
 'nologin' => 'Ня маеце рахунку? $1.',
 'nologinlink' => 'Стварыце рахунак',
 'createaccount' => 'Стварэньне рахунку',
 'gotaccount' => 'Ужо маеце рахунак? $1.',
 'gotaccountlink' => 'Увайдзіце',
 'userlogin-resetlink' => 'Забыліся на зьвесткі для ўваходу?',
+'helplogin-url' => 'Help:Уваход у сыстэму',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Дапамога па ўваходзе ў сыстэму]]',
 'createaccountmail' => 'Стварыць часовы адвольны пароль і даслаць яго на e-mail адрас, пазначаны ніжэй',
 'createaccountreason' => 'Прычына:',
 'badretype' => 'Уведзеныя Вамі паролі не супадаюць.',
@@ -792,6 +801,7 @@ $2',
 'passwordreset-text' => 'Запоўніце гэтую форму, каб скінуць пароль.',
 'passwordreset-legend' => 'Ачысьціць пароль',
 'passwordreset-disabled' => 'Магчымасьць ачысткі паролю была забароненая ў {{GRAMMAR:месны|{{SITENAME}}}}.',
+'passwordreset-emaildisabled' => 'Функцыі e-mail у гэтай вікі былі адключаныя.',
 'passwordreset-pretext' => '{{PLURAL:$1||Увядзіце ніжэй частку зьвестак}}',
 'passwordreset-username' => 'Імя ўдзельніка:',
 'passwordreset-domain' => 'Дамэн:',
@@ -819,7 +829,7 @@ $2
 Часовы пароль: $2',
 'passwordreset-emailsent' => 'Ліст пра скіданьне паролю быў дасланы.',
 'passwordreset-emailsent-capture' => 'Ліст пра скіданьне паролю быў дасланы, што паказана ніжэй.',
-'passwordreset-emailerror-capture' => 'Ліст пра скіданьне паролю быў створаны і паказаны ніжэй, але не ўдалося адправіць яго карыстальніку: $1',
+'passwordreset-emailerror-capture' => 'Ліст пра скіданьне паролю быў створаны і паказаны ніжэй, але не ўдалося адправіць яго {{GENDER:$2|ўдзельніку|ўдзельніцы}}: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Зьмяніць адрас электроннай пошты',
@@ -1033,6 +1043,8 @@ $2
 'content-failed-to-parse' => 'Зьмест «$2» не адпавядае тыпу $1: $3.',
 'invalid-content-data' => 'Няслушныя зьвесткі',
 'content-not-allowed-here' => 'Зьмест тыпу «$1» на старонцы [[$2]] не дазволены',
+'editwarning-warning' => 'Усе зробленыя Вамі зьмены могуць быць страчаныя, калі Вы пакінеце гэтую старонку.
+Калі Вы ўвайшлі ў сыстэму, Вы можаце адключыць гэтае папярэджаньне у сэкцыі «{{int:prefs-editing}}» Вашых наладаў.',
 
 # Content models
 'content-model-wikitext' => 'вікі-тэкст',
@@ -1316,6 +1328,7 @@ $1",
 'search-external' => 'Вонкавы пошук',
 'searchdisabled' => 'Функцыя пошуку ў {{GRAMMAR:месны|{{SITENAME}}}} адключаная.
 Вы можаце пашукаць з дапамогай Google, але заўважце, што там інфармацыя пра старонкі {{GRAMMAR:родны|{{SITENAME}}}} можа быць састарэлай.',
+'search-error' => 'Узьнікла памылка пры пошуку: $1',
 
 # Preferences page
 'preferences' => 'Налады',
@@ -3879,6 +3892,8 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'htmlform-submit' => 'Захаваць',
 'htmlform-reset' => 'Адмяніць зьмены',
 'htmlform-selectorother-other' => 'Іншае',
+'htmlform-no' => 'Не',
+'htmlform-yes' => 'Так',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 з падтрымкай поўнатэкстнага пошуку',
index 594eafe..b06bc4b 100644 (file)
@@ -266,10 +266,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Показване на броя на потребителите, наблюдаващи дадена страница',
 'tog-oldsig' => 'Текущ подпис:',
 'tog-fancysig' => 'Без превръщане на подписа в препратка към потребителската страница',
-'tog-externaleditor' => 'Използване на външен редактор по подразбиране (само за експерти, необходими са специални настройки на компютъра.
-[//www.mediawiki.org/wiki/Manual:External_editors Повече информация.])',
-'tog-externaldiff' => 'Използване на външна програма за разлики по подразбиране (само за експерти, необходими са специални настройки на компютъра.
-[//www.mediawiki.org/wiki/Manual:External_editors Повече информация.])',
 'tog-showjumplinks' => 'Показване на препратки за достъпност от типа „Към…“',
 'tog-uselivepreview' => 'Използване на бърз предварителен преглед (изисква Джаваскрипт; експериментално)',
 'tog-forceeditsummary' => 'Предупреждаване при празно поле за резюме на редакцията',
@@ -283,6 +279,7 @@ $messages = array(
 'tog-diffonly' => 'Без показване на съдържанието на страницата при преглед на разлики',
 'tog-showhiddencats' => 'Показване на скритите категории',
 'tog-norollbackdiff' => 'Пропускане на разликовата връзка след извършване на отмяна на редакции',
+'tog-useeditwarning' => 'Предупреждаване при опит за напускане на страница, отворена в режим на редактиране, без да са запазени промените',
 
 'underline-always' => 'Винаги',
 'underline-never' => 'Никога',
@@ -997,6 +994,8 @@ $2
 'invalid-content-data' => 'Невалидни данни за съдържание',
 'content-not-allowed-here' => '
 На страницата [[$2]] не е позволено използването на $1',
+'editwarning-warning' => 'Ако излезете от тази страница, може да загубите всички незапазени промени, които сте направили. 
+Ако сте влезли в системата, можете да изключите това предупреждение през меню "Редактиране" във вашите лични настройки.',
 
 # Content models
 'content-model-wikitext' => 'уикитекст',
index 91a73c4..ae393f0 100644 (file)
@@ -119,7 +119,7 @@ $messages = array(
 'article' => 'सामग्री पन्ना',
 'newwindow' => '(नया विंडो में खोलीं)',
 'cancel' => 'निरस्त',
-'mytalk' => 'हमार बात',
+'mytalk' => 'राà¤\89र बात',
 'navigation' => 'परिभ्रमण',
 
 # Cologne Blue skin
@@ -215,7 +215,7 @@ $1',
 'disclaimerpage' => 'Project:सामान्य अस्विकरण',
 'edithelp' => 'मदद सम्पादन',
 'edithelppage' => 'Help:सम्पादन',
-'helppage' => 'मदद:सामग्री',
+'helppage' => 'Help:सामग्री',
 'mainpage' => 'मुख्य पन्ना',
 'mainpage-description' => 'पहिलका पन्ना',
 'portal' => 'सामुदायिक पन्ना',
@@ -430,7 +430,7 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'compareselectedversions' => 'चुनल गईल संशोधन में अन्तर देखीं',
 'showhideselectedversions' => 'चुनल गईल संशोधन दिखाईं/छुपाईं',
 'editundo' => 'पूर्ववत',
-'diff-multi' => '({{PLURAL:$1|एगो मध्यम संशोधन|$1 गो मध्यम संशोधन}} नईखे दिखावल)',
+'diff-multi' => '({{PLURAL:$2|एगो योगदानकर्ता|$2 योगदानकर्ताओं}} द्वारा {{PLURAL:$1|कियल गईल बीच के एगो|कियल गईल बीच के $1}} अवतरण नईखे दर्शावल बा।)',
 
 # Search results
 'searchresults' => 'खोज परिणाम',
@@ -489,12 +489,9 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'powersearch-togglenone' => 'कउनो ना',
 'search-external' => 'बाहरी खोज',
 
-# Quickbar
-'qbsettings-none' => 'कउनो ना',
-
 # Preferences page
 'preferences' => 'वरीयता',
-'mypreferences' => 'हमार पसन्द',
+'mypreferences' => 'राà¤\89र पसन्द',
 'prefs-edits' => 'सम्पादन संख्या',
 'prefsnologin' => 'खाता में प्रवेश नईखीं कईले',
 'changepassword' => 'गुप्त शब्द बदलीं',
@@ -538,7 +535,7 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'filehist-filesize' => 'फाईल के आकार',
 'filehist-comment' => 'टिप्पणी',
 'filehist-missing' => 'गायब फाईल',
-'imagelinks' => 'फाà¤\88ल à¤²à¤¿à¤\82à¤\95',
+'imagelinks' => 'फाà¤\88ल à¤\95à¥\87 à¤\89पयà¥\8bà¤\97',
 'nolinkstoimage' => 'इ फाईल जोड़े कौनो फाइल लिंक नईखे।',
 'morelinkstoimage' => 'इ फाइल संगे जुड़ल [[Special:WhatLinksHere/$1|सब लिंक]] देखीं।',
 'sharedupload' => 'इ फाईल $1 से बा आ दुसर परियोजना में प्रयोग करल जा सकत बा।',
@@ -585,8 +582,8 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'emailuser' => 'ई प्रयोगकर्ता के ईमेल करीं',
 
 # Watchlist
-'watchlist' => 'हमार à¤§à¥\8dयानसूची',
-'mywatchlist' => 'हमार à¤§à¥\8dयानसूची',
+'watchlist' => 'राà¤\89र à¤§à¥\8dयान à¤¦à¤¿à¤¯à¤² à¤ªà¤¨à¥\8dना à¤\95à¥\87 सूची',
+'mywatchlist' => 'राà¤\89र à¤§à¥\8dयान à¤¦à¤¿à¤¯à¤² à¤ªà¤¨à¥\8dना à¤\95à¥\87 सूची',
 'watch' => 'ध्यानसूची में डालीं',
 'watchthispage' => 'ई पन्ना ध्यानसूची में डालीं',
 'unwatch' => 'ध्यानसूची से हटाईं',
@@ -609,9 +606,9 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'blanknamespace' => '(मुख्य)',
 
 # Contributions
-'contributions' => 'प्रयोगकर्ता योगदान',
+'contributions' => '{{GENDER:$1|सदस्य}} योगदान',
 'contributions-title' => ' $1 खातिर प्रयोगकर्ता योगदान',
-'mycontris' => 'हमार à¤¯à¥\8bà¤\97दान',
+'mycontris' => 'राà¤\89र à¤¯à¥\8bà¤\97दान à¤\95à¥\87 à¤¸à¥\82à¤\9aà¥\80',
 'nocontribs' => 'ई मानदंड से मिलत जुलत कौनो बदलाव ना मिलल।',
 'uctop' => '(शीर्ष)',
 'month' => 'महिना से (आ उ से पहिले):',
@@ -636,17 +633,18 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'nolinkshere' => "'''[[:$1]]''' से कौनो पन्ना नईखे जुड़ल।",
 'nolinkshere-ns' => "चुनल गईल सन्दर्भ में '''[[:$1]]''' से कौनो पन्ना ना जुड़ेला।",
 'isredirect' => 'पुन: निर्दिष्ट पन्ना',
-'isimage' => 'तसà¥\8dवà¥\80र लिंक',
+'isimage' => 'फाà¤\88ल लिंक',
 'whatlinkshere-prev' => '{{PLURAL:$1|पिछला|पिछला $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|अगला|अगला $1}}',
 'whatlinkshere-links' => '← लिंक',
 'whatlinkshere-hideredirs' => '$1 पुन: निर्देशित',
 'whatlinkshere-hidelinks' => '$1 लिंक',
-'whatlinkshere-hideimages' => '$1 à¤¤à¤¸à¥\8dवà¥\80र लिंक',
+'whatlinkshere-hideimages' => '$1 à¤«à¤¼à¤¾à¤\87ल लिंक',
 'whatlinkshere-filters' => 'फिल्टर',
 
 # Block/unblock
 'blockip' => 'प्रतिबंधित प्रयोगकर्ता',
+'ipboptions' => '२ घंटे:2 hours,१ दिन:1 day,३ दिन:3 days,१ हफ्ता:1 week,२ हफ्ते:2 weeks,१ महिना:1 month,३ महिने:3 months,६ महिने:6 months,१ साल:1 year,हमेशा खातिर:infinite',
 'blocklink' => 'निष्क्रिय',
 'unblocklink' => 'ताला खोलीं',
 'change-blocklink' => 'ब्लॉक बदलीं',
index 899c251..bcb5714 100644 (file)
@@ -173,8 +173,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Tampaiakan barapa pamakai nang maitihi',
 'tog-oldsig' => 'Tandateken nang sudah ada:',
 'tog-fancysig' => 'Tapsirakan tandatangan sawagai naskah wiki (kada batautan utumatis)',
-'tog-externaleditor' => 'Puruk pambabak luar sawagai default (hagan nang harat haja, musti ada setélan istimiwa pada komputer Pian.[//www.mediawiki.org/wiki/Manual:External_editors More information.])',
-'tog-externaldiff' => 'Puruk palainan luar sawagai default (hagan nang harat haja, musti ada setélan istimiwa pada komputer Pian. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
 'tog-showjumplinks' => 'Kawa\'akan "lacung ka" tautan kakawaan-masuk',
 'tog-uselivepreview' => 'Puruk titilikan langsung (parlu ada JavaScript) (cacubaan)',
 'tog-forceeditsummary' => 'Ingatakan ulun wayah babuat sabuting kasimpulan babakan puang',
@@ -188,6 +186,7 @@ $messages = array(
 'tog-diffonly' => 'Kada usah manampaiakan isi tungkaran di bawah balain',
 'tog-showhiddencats' => 'Tampaiakan tutumbung tasungkup',
 'tog-norollbackdiff' => 'Kada usah manampaiakan lainan imbah mambulikakan',
+'tog-useeditwarning' => 'Ingatakan ulun pabila maninggalakan tungkaran pambabakan sabalum manyimpan parubahan',
 
 'underline-always' => 'Tarus',
 'underline-never' => 'Kada suah',
index 2c7276c..3243c2a 100644 (file)
@@ -101,8 +101,6 @@ $messages = array(
 'tog-shownumberswatching' => 'নজরদারী করছে, এমন ব্যবহারকারীর সংখ্যা দেখানো হোক',
 'tog-oldsig' => 'বর্তমান স্বাক্ষর:',
 'tog-fancysig' => 'স্বাক্ষরকে উইকিটেক্সট হিসেবে মনে করুন (কোন সয়ংক্রিয় লিঙ্ক ছাড়া)',
-'tog-externaleditor' => 'শুরুতেই বহিঃস্থ সম্পাদক ব্যবহার করা হোক (শুধুমাত্র দক্ষ ব্যবহারকারীদের জন্য, কম্পিউটারে বিশেষ সেটিংস এর প্রয়জোন। [//www.mediawiki.org/wiki/Manual:External_editors বিস্তারিত তথ্য।])',
-'tog-externaldiff' => 'শুরুতেই বহিঃস্থ পার্থক্য ব্যবহার করা হোক (শুধুমাত্র দক্ষ ব্যবহারকারীদের জন্য, কম্পিউটারে বিশেষ সেটিংস এর প্রয়জোন। [//www.mediawiki.org/wiki/Manual:External_editors বিস্তারিত তথ্য।])',
 'tog-showjumplinks' => '"ঝাঁপ দিন" বৈশিষ্ট্যের সংযোগ চালু করা হোক',
 'tog-uselivepreview' => 'তাৎক্ষণিক প্রাকদর্শনের ক্ষমতা চালু করা হোক (জাভাস্ক্রিপ্ট) (পরীক্ষামূলক)',
 'tog-forceeditsummary' => 'খালি সম্পাদনা সারাংশ প্রবেশ করানোর সময় আমাকে জানানো হোক',
@@ -116,6 +114,7 @@ $messages = array(
 'tog-diffonly' => 'পার্থক্যের নিচে পাতার বিষয়বস্তু না দেখানো হোক',
 'tog-showhiddencats' => 'লুকায়িত বিষয়শ্রেণীসমূহ দেখাও',
 'tog-norollbackdiff' => 'রোলব্যাকের পরে পার্থক্য দেখিও না',
+'tog-useeditwarning' => 'অসংরক্ষিত পরিবর্তন সহ কোনো পাতা ত্যাগের সময় সাবধান করো',
 
 'underline-always' => 'সব সময়',
 'underline-never' => 'কখনো নয়',
@@ -233,7 +232,7 @@ $messages = array(
 'vector-view-edit' => 'সম্পাদনা',
 'vector-view-history' => 'ইতিহাস',
 'vector-view-view' => 'পড়ুন',
-'vector-view-viewsource' => 'সà§\8bরà§\8dস দেখুন',
+'vector-view-viewsource' => 'à¦\89à§\8eস দেখুন',
 'actions' => 'কার্যক্রম',
 'namespaces' => 'নামস্থান',
 'variants' => 'বিকল্পসমূহ',
@@ -338,7 +337,7 @@ $1',
 'youhavenewmessagesfromusers' => 'আপনি {{PLURAL:$3|অন্য ব্যবহারকারীর|$3 ব্যবহারকারীর}} কাছ থেকে $1 পেয়েছেন ($2)।',
 'youhavenewmessagesmanyusers' => 'আপনি অনেক ব্যবহারকারীর কাছ থেকে $1 পেয়েছেন ($2)।',
 'newmessageslinkplural' => '{{PLURAL:$1|একটি নতুন বার্তা|নতুন বার্তা}}',
-'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|পরিবর্তন|পরিবর্তনসমূহ}}',
+'newmessagesdifflinkplural' => 'সর্বশেষ {{PLURAL:$1|পরিবর্তন|পরিবর্তনসমূহ}}',
 'youhavenewmessagesmulti' => 'আপনার $1টি নতুন বার্তা এসেছে',
 'editsection' => 'সম্পাদনা',
 'editold' => 'সম্পাদনা',
@@ -485,9 +484,14 @@ $2',
 'welcomecreation-msg' => 'আপনার অ্যাকাউন্ট তৈরী হয়েছে।
 আপনার [[Special:Preferences|{{SITENAME}} পছন্দসমূহ]]  পরিবর্তন করে নিতে ভুলবেন না।',
 'yourname' => 'ব্যবহারকারী নাম:',
+'userlogin-yourname' => 'ব্যবহারকারী নাম',
+'userlogin-yourname-ph' => 'আপনার ব্যবহাকারী নাম প্রবেশ করান',
 'yourpassword' => 'শব্দচাবি:',
+'userlogin-yourpassword' => 'শব্দচাবি (Password)',
+'userlogin-yourpassword-ph' => 'আপনার শব্দচাবি (পাসওয়ার্ড) লিখুন',
 'yourpasswordagain' => 'শব্দচাবিটি (password) আবার লিখুন',
 'remembermypassword' => 'একাধিক সেশনের জন্য শব্দচাবি মনে রাখা হোক (সর্বোচ্চ $1 {{PLURAL:$1|দিনের|দিনের}} জন্য)',
+'userlogin-remembermypassword' => 'আমাকে মনে রাখো',
 'securelogin-stick-https' => 'লগইনের পর এইচটিটিপিএস-এর সাথে সংযোগকৃত থাকুন',
 'yourdomainname' => 'আপনার ডোমেইন',
 'password-change-forbidden' => 'আপনি এই উইকিতে পাসওয়ার্ড পরিবর্তন করতে পারবেন না।',
@@ -500,12 +504,14 @@ $2',
 'logout' => 'প্রস্থান করুন',
 'userlogout' => 'প্রস্থান',
 'notloggedin' => 'আপনি সংযুক্ত নন',
+'userlogin-noaccount' => 'কোনও অ্যাকাউন্ট নেই?',
 'nologin' => "আপনার কি উইকিপিডিয়াতে অ্যাকাউন্ট নেই? তাহলে '''$1'''।",
 'nologinlink' => 'অ্যাকাউন্ট তৈরি করুন',
 'createaccount' => 'নতুন অ্যাকাউন্ট খুলুন',
 'gotaccount' => "আপনার কি ইতিমধ্যে একটি অ্যাকাউন্ট তৈরি করা আছে? '''$1''' করুন।",
 'gotaccountlink' => 'প্রবেশ',
 'userlogin-resetlink' => 'আপনার লগইনের বিস্তারিত তথ্যাদি ভুলে গেছেন?',
+'helplogin-url' => 'Help:প্রবেশ',
 'createaccountmail' => 'একটি র‌্যান্ডম পাসওয়ার্ড নির্বাচন করুন এবং নিচের নির্ধারিত ইমেইল ঠিকানায় পাঠিয়ে দিন',
 'createaccountreason' => 'কারণ:',
 'badretype' => "আপনার প্রবেশ করানো শব্দচাবি'টি মিলছেনা।",
@@ -834,6 +840,8 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'content-failed-to-parse' => '$1 মডেলের জন্য $2 কন্টেন্ট পার্স করা যাচ্ছে না: $3',
 'invalid-content-data' => 'ভুল কন্টেন্ট ডাটা',
 'content-not-allowed-here' => '"$1" কন্টেন্টটি [[$2]] পাতায় অনুমোদিত নয়',
+'editwarning-warning' => 'এই পাতাটি ত্যাগ করলে আপনার আপনার করা পরিবর্তনগুলো হারিয়ে যেতে পারে।
+আপনি যদি লগইন করা থাকেন, আপনি এই সতর্কীকরণ বার্তাটি আপনার পছন্দের "{{int:prefs-editing}}" অনুচ্ছেদ থেকে নিস্ক্রিয় করতে পারেন।',
 
 # Content models
 'content-model-wikitext' => 'উইকিটেক্সট',
@@ -2505,6 +2513,17 @@ $1',
 
 '''সতর্কীকরণ!'''
 কোন জনপ্রিয় পাতার ক্ষেত্রে এই পরিবর্তনটি খুবই আকস্মিক হতে পারে; অগ্রসর হবার আগে এই কাজটির ফলাফল কী হতে পারে, সে ব্যাপারে অনুগ্রহ করে নিশ্চিত হোন।",
+'movepagetext-noredirectfixer' => "নিচের ফর্মটি ব্যবহার করে একটি পাতার শিরোনাম পরিবর্তন করা যাবে, এবং সেই সাথে নতুন শিরোনামে এর সমগ্র ইতিহাস স্থানান্তর করা যাবে।
+পুরনো শিরোনামটি নতুন শিরোনামটির প্রতি একটি পুনর্নির্দেশনা ধারণ করবে।
+[[Special:DoubleRedirects|দ্বি-পুনর্নির্দেশনা]] বা [[Special:BrokenRedirects|অচল পুনর্নির্দেশনাগুলি]] পরীক্ষা করে দেখতে ভুলবেন না।
+সংযোগগুলি যাতে তাদের লক্ষ্যে পৌঁছায়, তা নিশ্চিত করার দায়িত্ব আপনার।
+
+লক্ষ্য করুন যে যদি নতুন শিরোনামে ইতিমধ্যেই একটি পাতা থেকে থাকে, তবে উৎস পাতাটি সেই শিরোনামে স্থানান্তর করা হবে '''না''', যদি না নতুন শিরোনামের পাতাটি খালি থাকে বা একটি পুননির্দেশনা হয় এবং এর কোন অতীত সম্পাদনা ইতিহাস না থাকে। 
+অর্থাৎ আপনি ভুল করে নাম পরিবর্তন করলে সহজেই পুরনো নামে ফেরত যেতে পারবেন, কিন্তু ইতিমধ্যে বিদ্যমান কোন পাতার উপরে লিখতে পারবেন না।
+
+'''সতর্কীকরণ!'''
+কোন জনপ্রিয় পাতার ক্ষেত্রে এই পরিবর্তনটি খুবই আকস্মিক হতে পারে;
+অগ্রসর হবার আগে এই কাজটির ফলাফল কী হতে পারে, সে ব্যাপারে অনুগ্রহ করে নিশ্চিত হোন।",
 'movepagetalktext' => "পাতাটির সাথে সাথে সংশ্লিষ্ট আলোচনা পাতাটিও স্বয়ংক্রিয়ভাবে সরানো হবে '''যদি না:'''
 *খালি নয় এমন একটি আলাপ পাতা নতুন শিরোনামটির অধীনে ইতিমধ্যেই বিদ্যমান থাকে, অথবা
 *আপনি নিচের বাক্সটি থেকে টিক সরিয়ে নিতে পারেন।
@@ -3573,6 +3592,8 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'htmlform-submit' => 'জমা দাও',
 'htmlform-reset' => 'পরিবর্তন বাতিল',
 'htmlform-selectorother-other' => 'অন্য',
+'htmlform-no' => 'না',
+'htmlform-yes' => 'হ্যাঁ',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 সহ পূর্ণ টেক্সট সার্চ সমর্থন',
@@ -3663,7 +3684,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'api-error-ok-but-empty' => 'অভ্যন্তরীণ ত্রুটি: সার্ভার হতে কোন সাড়া পাওয়া যাচ্ছে না।',
 'api-error-overwrite' => 'ইতিমধ্যেই রয়েছে এমন কোনো ফাইলের প্রতিস্থাপন গ্রহণযোগ্য নয়।',
 'api-error-stashfailed' => 'অভ্যন্তরীণ ত্রুটি: সার্ভার অস্থায়ী ফাইলটি সংরক্ষণ করতে ব্যর্থ হয়েছে।',
-'api-error-publishfailed' => 'à¦\85ভà§\8dযনà§\8dতরà§\80ন à¦¤à§\8dরà§\81à¦\9fি: à¦¸à¦¾à¦°à§\8dভার à¦\9fà§\87মà§\8dপরারি à¦«à¦¾à¦\87লà¦\9fি à¦ªà§\8dরà¦\95াশ à¦\95রতà§\87 à¦ªà¦¾à¦°à¦\9bà§\87 à¦¨à¦¾।',
+'api-error-publishfailed' => 'à¦\85ভà§\8dযনà§\8dতরà§\80ন à¦¤à§\8dরà§\81à¦\9fি: à¦¸à¦¾à¦°à§\8dভার à¦\85সà§\8dথায়à§\80 à¦«à¦¾à¦\87লà¦\9fি à¦ªà§\8dরà¦\95াশ à¦\95রতà§\87 à¦¬à§\8dযরà§\8dথ à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।',
 'api-error-timeout' => 'কাঙ্খিত সময়ের মধ্যে সার্ভারের কোন সাড়া পাওয়া যায়নি।',
 'api-error-unclassified' => 'একটি অজানা ত্রুটি দেখা দিয়েছে',
 'api-error-unknown-code' => 'অজানা ত্রুটি: "$1"',
index 80a09b4..dd13914 100644 (file)
@@ -208,8 +208,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Diskouez an niver a lennerien',
 'tog-oldsig' => 'Ar sinadur zo evit poent :',
 'tog-fancysig' => 'Ober gant ar sinadur evel pa vefe wikitestenn (hep liamm emgefre)',
-'tog-externaleditor' => "Ober gant ur skridaozer diavaez dre ziouer (evit arbennigourien hepken rak ezhomm zo arventenniñ hoc'h urzhiataer evit se. [//www.mediawiki.org/wiki/Manual:External_editors Titouroù all.])",
-'tog-externaldiff' => "Ober gant ur c'heñverier diavaez dre ziouer (evit arbennigourien hepken rak ezhomm zo arventenniñ hoc'h urzhiataer evit se. [//www.mediawiki.org/wiki/Manual:External_editors Titouroù all.])",
 'tog-showjumplinks' => 'Gweredekaat al liammoù moned "lammat da"',
 'tog-uselivepreview' => 'Implijout Rakwelet prim (JavaScript) (taol-arnod)',
 'tog-forceeditsummary' => 'Kemenn din pa ne skrivan netra er stern diverrañ',
@@ -224,6 +222,7 @@ $messages = array(
 'tog-showhiddencats' => 'Diskouez ar rummadoù kuzhet',
 'tog-noconvertlink' => 'Diweredekaat amdroadur an titloù',
 'tog-norollbackdiff' => 'Na ziskouez an diff goude un distaoladenn',
+'tog-useeditwarning' => 'Kas keloù din pa guitaan ur bajenn degaset kemmoù enni hep enrollañ',
 
 'underline-always' => 'Atav',
 'underline-never' => 'Morse',
@@ -590,9 +589,15 @@ Notit mat e c'hallo pajennoù zo kenderc'hel da vezañ diskwelet evel pa vefec'h
 'welcomecreation-msg' => 'Krouet eo bet ho kont implijer.
 Na zisoñjit ket resisaat ho [[Special:Preferences|penndibaboù evit {{SITENAME}}]].',
 'yourname' => 'Anv implijer :',
+'userlogin-yourname' => 'Anv implijer',
+'userlogin-yourname-ph' => "Merkit hoc'h anv implijer",
 'yourpassword' => 'Ger-tremen :',
+'userlogin-yourpassword' => 'Ger-tremen',
+'userlogin-yourpassword-ph' => 'Merkit ho ker-tremen',
 'yourpasswordagain' => 'Skrivit ho ker-tremen en-dro',
 'remembermypassword' => "Derc'hel soñj eus ma ger-tremen war an urzhiataer-mañ (evit $1 devezh{{PLURAL:$1||}} d'ar muiañ)",
+'userlogin-remembermypassword' => "Derc'hel soñj ac'hanon",
+'userlogin-signwithsecure' => 'Kevreañ gant ur servijer suraet',
 'securelogin-stick-https' => 'Chom kevreet da HTTPS goude bezañ bet kevreet',
 'yourdomainname' => 'Ho tomani',
 'password-change-forbidden' => "Ne c'hallit ket kemmañ ar gerioù-tremen er wiki-mañ.",
@@ -605,12 +610,16 @@ Na zisoñjit ket resisaat ho [[Special:Preferences|penndibaboù evit {{SITENAME}
 'logout' => 'Digevreañ',
 'userlogout' => 'Digevreañ',
 'notloggedin' => 'Digevreet',
+'userlogin-noaccount' => "Kont ebet ganeoc'h c'hoazh ?",
+'userlogin-joinproject' => 'Kemer perzh e {{SITENAME}}',
 'nologin' => "N'hoc'h eus kont ebet ? '''$1'''.",
 'nologinlink' => 'Krouiñ ur gont',
 'createaccount' => 'Krouiñ ur gont nevez',
 'gotaccount' => "Ur gont zo ganeoc'h dija ? '''$1'''.",
 'gotaccountlink' => 'Kevreañ',
 'userlogin-resetlink' => "Ha disoñjet eo bet ho titouroù kevreañ ganeoc'h ?",
+'helplogin-url' => 'Skoazell : Kevreañ',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Skoazell evit kevreañ]]',
 'createaccountmail' => 'Dre bostel',
 'createaccountreason' => 'Abeg :',
 'badretype' => 'Ne glot ket ar gerioù-tremen an eil gant egile.',
@@ -652,8 +661,8 @@ Trugarez deoc\'h da gevreañ kerkent ha ma vo bet resevet ganeoc\'h.',
 'blocked-mailpassword' => "N'haller ket kemmañ pajennoù gant ar chomlec'h IP-mañ ken rak stanket eo bet. Gant se n'hallit ket implijout an arc'hwel adtapout gerioù-tremen, kuit m'en em ledfe gwallimplijoù.",
 'eauthentsent' => "Kaset ez eus bet ur postel kadarnaat war-du ar chomlec'h postel spisaet.
 A-raok na vije kaset postel ebet d'ar gont-se e vo ret deoc'h heuliañ ar c'huzulioù merket er postel resevet evit kadarnaat ez eo mat ho kont deoc'h.",
-'throttled-mailpassword' => "Kaset ez eus bet deoc'h ur postel degas soñj e-kerzh an
-{{PLURAL:$1|eurvezh|$1 eurvezh}} ziwezhañ. Evit mirout ouzh nep gaou ne gaser nemet ur postel a-seurt-se dre {{PLURAL:$1|eurvezh|$1 eurvezh}}.",
+'throttled-mailpassword' => "Kaset ez eus bet deoc'h ur postel adderaouekaat e-kerzh an
+{{PLURAL:$1|eurvezh|$1 eurvezh}} tremenet. Evit mirout ouzh nep gaou ne gaser ket ouzhpenn ur postel a seurt-se bep {{PLURAL:$1|eurvezh|$1 eurvezh}}.",
 'mailerror' => 'Fazi en ur gas ar postel : $1',
 'acct_creation_throttle_hit' => "{{PLURAL:$1|1 gont|$1 kont}} zo bet krouet c'hoazh nevez zo dre ho chomlec'h IP gant gweladennerien d'ar wiki-mañ, ar pezh zo an niver brasañ aotreet. Dre se, n'hall ket ket ar weladennerien a implij an IP-mañ krouiñ kontoù mui evit ar mare.",
 'emailauthenticated' => "Gwiriet eo bet ho chomlec'h postel d'an $2 da $3.",
@@ -944,6 +953,8 @@ Krouet e oa bet c'hoazh.",
 'content-failed-to-parse' => "C'hwitet eo dielfennadur endalc'had $2 evit ar patrom $1: $3",
 'invalid-content-data' => "n'eo ket mat roadennoù an endalc'had",
 'content-not-allowed-here' => 'N\'eo ket aotreet an endalc\'had "$1" er bajenn [[$2]]',
+'editwarning-warning' => "Mar kuitait ar bajenn-mañ e c'hallit koll ar c'hemmoù degaset ganeoc'h.
+Ma'z oc'h kevreet e c'hallit diweredekaat ar c'hemenn-diwall-mañ e rann \"{{int:prefs-editing}}\" ho penndibaboù.",
 
 # Content models
 'content-model-wikitext' => 'wikitestenn',
@@ -2448,8 +2459,8 @@ Dindan emañ merket enmont diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :",
 'isredirect' => 'pajenn adkas',
 'istemplate' => 'enframmet',
 'isimage' => 'Liamm war-zu ar restr',
-'whatlinkshere-prev' => '{{PLURAL:$1|kent|kent $1}}',
-'whatlinkshere-next' => "{{PLURAL:$1|war-lerc'h|war-lerc'h $1}}",
+'whatlinkshere-prev' => '{{PLURAL:$1|kent|$1 kent}}',
+'whatlinkshere-next' => "{{PLURAL:$1|war-lerc'h|$1 war-lerc'h}}",
 'whatlinkshere-links' => '← liammoù',
 'whatlinkshere-hideredirs' => '$1 adkas',
 'whatlinkshere-hidetrans' => '$1 treuzkluzadur',
@@ -3788,6 +3799,8 @@ Diskouezet eo ar skeudennoù gant ur pizhder uhel, erounit a ra ar restroù all
 'htmlform-submit' => 'Kas',
 'htmlform-reset' => "Dizober ar c'hemmoù",
 'htmlform-selectorother-other' => 'Unan all',
+'htmlform-no' => 'Ket',
+'htmlform-yes' => 'Ya',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 gant enklask eus an destenn a-bezh embreget',
index 3dacc4a..2a4a3c2 100644 (file)
@@ -308,8 +308,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Prikaži broj korisnika koji prate',
 'tog-oldsig' => 'Postojeći potpis:',
 'tog-fancysig' => 'Smatraj potpis kao wikitekst (bez automatskog linka)',
-'tog-externaleditor' => 'Koristi vanjski program za uređivanje po postavkama (samo za naprednije korisnike, potrebne su posebne postavke na vašem računaru)',
-'tog-externaldiff' => 'Koristi vanjski (diff) program po pretpostavljenom za prikaz razlika (samo za naprednije korisnike, potrebne su posebne postavke na vašem računaru)',
 'tog-showjumplinks' => 'Omogući "skoči na" linkove',
 'tog-uselivepreview' => 'Koristite pregled uživo (JavaScript) (Eksperimentalno)',
 'tog-forceeditsummary' => 'Opomeni me pri unosu praznog sažetka',
@@ -324,6 +322,7 @@ $messages = array(
 'tog-showhiddencats' => 'Prikaži skrivene kategorije',
 'tog-noconvertlink' => 'Onemogući konverziju naslova linkova',
 'tog-norollbackdiff' => 'Nakon vraćanja zanemari prikaz razlika',
+'tog-useeditwarning' => 'Upozori me kada napustim stranicu za izmjene bez spašenih promjena',
 
 'underline-always' => 'Uvijek',
 'underline-never' => 'Nikad',
@@ -1062,6 +1061,8 @@ Izgleda da je obrisana.',
 'edit-already-exists' => 'Stranica nije mogla biti kreirana.
 Izgleda da već postoji.',
 'defaultmessagetext' => 'Uobičajeni tekst poruke',
+'editwarning-warning' => 'Napuštanje ove stranice može dovesti do gubitka svih promjena koje ste načinili.
+Ako ste prijavljeni, možete isključiti ovo upozorenje u "{{int:prefs-editing}}" dijelu vaših opcija.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
index 18cd88e..cdfede3 100644 (file)
@@ -17,6 +17,7 @@
  * @author Gemmaa
  * @author Grondin
  * @author Iradigalesc
+ * @author Jmarchn
  * @author Jordi Roqué
  * @author Juanpabl
  * @author Kaganer
@@ -227,8 +228,6 @@ $messages = array(
 'tog-shownumberswatching' => "Mostra el nombre d'usuaris que hi vigilen",
 'tog-oldsig' => 'Signatura actual:',
 'tog-fancysig' => 'Tractar la signatura com a text wiki (sense enllaç automàtic)',
-'tog-externaleditor' => "Utilitza per defecte un editor extern (opció per a experts, requereix la configuració adient de l'ordinador, [//www.mediawiki.org/wiki/Manual:External_editors consulteu-ho al manual])",
-'tog-externaldiff' => "Utilitza per defecte un altre visualitzador de diferències (opció per a experts, requereix la configuració adient de l'ordinador, [//www.mediawiki.org/wiki/Manual:External_editors consulteu-ho al manual])",
 'tog-showjumplinks' => "Habilita els enllaços de dreceres d'accessibilitat",
 'tog-uselivepreview' => 'Utilitza la previsualització automàtica (cal JavaScript) (experimental)',
 'tog-forceeditsummary' => "Avisa'm en deixar el resum de la modificació en blanc",
@@ -243,6 +242,7 @@ $messages = array(
 'tog-showhiddencats' => 'Mostra les categories ocultes',
 'tog-noconvertlink' => 'Inhabilita la conversió dels títols dels enllaços',
 'tog-norollbackdiff' => 'Omet la pàgina de diferències després de realitzar una reversió',
+'tog-useeditwarning' => "Avisa'm quan surti d'una pàgina d'edició amb canvis sense desar",
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Mai',
@@ -610,9 +610,15 @@ Tingueu en compte que algunes pàgines poden continuar mostrant-se com si encara
 'welcomecreation-msg' => 'El vostre compte ha estat creat.
 No oblideu de canviar les vostres [[Special:Preferences|preferències de {{SITENAME}}]].',
 'yourname' => "Nom d'usuari",
+'userlogin-yourname' => "Nom d'usuari",
+'userlogin-yourname-ph' => "Introduïu el vostre nom d'usuari",
 'yourpassword' => 'Contrasenya',
+'userlogin-yourpassword' => 'Contrasenya',
+'userlogin-yourpassword-ph' => 'Introduïu la vostra contrasenya',
 'yourpasswordagain' => 'Escriviu una altra vegada la contrasenya',
 'remembermypassword' => 'Recorda la contrasenya entre sessions (per un màxim de $1 {{PLURAL:$1|dia|dies}})',
+'userlogin-remembermypassword' => "Recorda'm",
+'userlogin-signwithsecure' => 'Inicia la sessió amb un servidor segur',
 'securelogin-stick-https' => "Roman connectat via HTTPS desprès d'autenticar-se",
 'yourdomainname' => 'El vostre domini',
 'password-change-forbidden' => 'No podeu canviar les contrasenyes en aquest wiki.',
@@ -625,6 +631,8 @@ No oblideu de canviar les vostres [[Special:Preferences|preferències de {{SITEN
 'logout' => 'Finalitza la sessió',
 'userlogout' => 'Finalitza la sessió',
 'notloggedin' => 'No us heu identificat',
+'userlogin-noaccount' => 'No teniu cap compte?',
+'userlogin-joinproject' => 'Uniu-vos a {{SITENAME}}',
 'nologin' => "No teniu un compte? '''$1'''.",
 'nologinlink' => 'Crea un compte',
 'createaccount' => 'Crea un compte',
@@ -961,6 +969,8 @@ Ja existeix.",
 'content-failed-to-parse' => "Ha fallat l'anàlisi del contingut de $2 per al model $1: $3",
 'invalid-content-data' => 'Dades de contingut no vàlides',
 'content-not-allowed-here' => 'No és permés el contingut "$1" a la pàgina [[$2]]',
+'editwarning-warning' => "Si sortiu d'aquesta pàgina perdreu tots els canvis que hàgiu fet.
+Si teniu un compte d'usuari, podeu eliminar aquest avís a la secció «{{int:prefs-editing}}» de les vostres preferències.",
 
 # Content models
 'content-model-wikitext' => 'wikitext',
@@ -1242,6 +1252,7 @@ Es pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{F
 'powersearch-togglenone' => 'Cap',
 'search-external' => 'Cerca externa',
 'searchdisabled' => 'La cerca dins el projecte {{SITENAME}} està inhabilitada. Mentrestant, podeu cercar a través de Google, però tingueu en compte que la seua base de dades no estarà actualitzada.',
+'search-error' => "S'ha produït un error durant la recerca: $1",
 
 # Preferences page
 'preferences' => 'Preferències',
@@ -2450,7 +2461,7 @@ Per més detalls, la última entrada del registre es mostra a continuació:',
 
 # What links here
 'whatlinkshere' => 'Què hi enllaça',
-'whatlinkshere-title' => 'Pàgines que enllacen amb $1',
+'whatlinkshere-title' => 'Pàgines que enllacen amb «$1»',
 'whatlinkshere-page' => 'Pàgina:',
 'linkshere' => "Les següents pàgines enllacen amb '''[[:$1]]''':",
 'nolinkshere' => "Cap pàgina no enllaça amb '''[[:$1]]'''.",
@@ -3784,6 +3795,8 @@ Les imatges es mostren en plena resolució; altres tipus de fitxer s'inicien dir
 'htmlform-submit' => 'Tramet',
 'htmlform-reset' => 'Desfés els canvis',
 'htmlform-selectorother-other' => 'Altres',
+'htmlform-no' => 'No',
+'htmlform-yes' => 'Sí',
 
 # SQLite database support
 'sqlite-has-fts' => '$1, amb suport de búsqueda de text íntegre',
@@ -3796,7 +3809,7 @@ Les imatges es mostren en plena resolució; altres tipus de fitxer s'inicien dir
 'logentry-delete-revision' => "$1 ha canviat la visibilitat {{PLURAL:$5|d'una revisió|de $5 revisions}} a la pàgina $3: $4",
 'logentry-delete-event-legacy' => "$1 ha canviat la visibilitat d'esdeveniments al registre de $3",
 'logentry-delete-revision-legacy' => '$1 ha canviat la visibilitat de revisions a la pàgina $3',
-'logentry-suppress-delete' => '$1 ha suprimit $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|ha suprimit}} la pàgina $3',
 'logentry-suppress-event' => "$1 secretament ha canviat la visibilitat {{PLURAL:$5|d'un esdeveniment al registre|de $5 esdeveniments al registre}} de $3: $4",
 'logentry-suppress-revision' => "$1 secretament ha canviat la visibilitat {{PLURAL:$5|d'una revisió|de $5 revisions}} a la pàgina $3: $4",
 'logentry-suppress-event-legacy' => "$1 secretament ha canviat la visibilitat d'esdeveniments al registre de $3",
index 8c5dc41..7833a2c 100644 (file)
@@ -176,8 +176,6 @@ $messages = array(
 'tog-shownumberswatching' => 'ژمارەی بەکارھێنەرە چاودێڕەکان نیشان بدە',
 'tog-oldsig' => 'واژووی ئێستا:',
 'tog-fancysig' => 'وەکوو ویکیدەق واژووەکە لەبەر چاو بگرە (بێ بەستەرێکی خۆگەڕ)',
-'tog-externaleditor' => 'دەستکاریکەری دەرەکی بەکاربێنە لە حاڵەتی دیفاڵتدا (تەنھا بۆ شارەزایان، ڕێکخستنی تایبەتی پێویستە لە سەر کۆمپیوتەرەکەت [//www.mediawiki.org/wiki/Manual:External_editors زانیاریی زۆرتر.])',
-'tog-externaldiff' => 'لە پرۆگرامێکی دەرەکی بۆ بینینی جیاوازیەکان کەڵک وەرگرە لە دیفاڵتدا (تەنها بۆ شارەزایان، ڕێکخستنی تایبەتی پێویستە لە سەر کۆمپیوتەرەکەت. [//www.mediawiki.org/wiki/Manual:External_editors زانیاریی زۆرتر.])',
 'tog-showjumplinks' => 'ڕێگە بدە بۆ بەستەرەکانی «{{int:jumpto}}»',
 'tog-uselivepreview' => 'لە پێشبینینی زیندوو کەڵک وەرگرە (جاڤاسکریپت پێویستە) (تاقیکاری‌)',
 'tog-forceeditsummary' => 'ئەگەر کورتەی دەستکاریم نەنووسی پێم بڵێ',
@@ -192,6 +190,7 @@ $messages = array(
 'tog-showhiddencats' => 'ھاوپۆلە شاراوەکان نیشان بدە',
 'tog-noconvertlink' => 'لەکارخستنی ئاڵوگۆڕی سەرناوی بەستەر',
 'tog-norollbackdiff' => 'لە دوای گەڕاندنەوە جیاوازی نیشان مەدە',
+'tog-useeditwarning' => 'ھۆشیارم بکەوە کاتێک لە پەڕەیەکی دەستکاری بە گۆڕانکاریی پاشەکەوت‌نەکراو دەردەچم',
 
 'underline-always' => 'ھەمیشە',
 'underline-never' => 'قەت',
@@ -910,6 +909,7 @@ $2
 ئەوە لەپێش‌دا هەبوو.',
 'defaultmessagetext' => 'دەقی پەیامی هەمیشەیی',
 'invalid-content-data' => 'دراوەی ناوەرۆکی نادروست',
+'editwarning-warning' => 'بەجێ‌هێشتنی ئەم لاپەڕەیە دەبێتە هۆی لە‌دەست چوونی هەموو ئەو گۆڕانکاریانەی کردووتە.',
 
 # Content models
 'content-model-wikitext' => 'ویکیدەق',
index b4c4fef..2215b81 100644 (file)
@@ -129,8 +129,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Közetken qullanıcı sayısını köster',
 'tog-oldsig' => 'Şimdiki imza:',
 'tog-fancysig' => 'İmza vikimetin kibi olsun (avtomatik bağlantı olmaz)',
-'tog-externaleditor' => 'Tış türlendirgiç (redaktor) qullan (tecribeli qullanıcılar içün; kompyuteriñizni mahsus sazlamaq kerek. [ //www.mediawiki.org/wiki/Manual:External_editors tafsilâtlı malümat mında])',
-'tog-externaldiff' => 'Teñeştimek içün tış bir programma qullan (tecribeli qullanıcılar içün; kompyuteriñizni mahsus sazlamaq kerek. [ //www.mediawiki.org/wiki/Manual:External_editors tafsilâtlı malümat mında])',
 'tog-showjumplinks' => '"Bar" bağlantısını faalleştir',
 'tog-uselivepreview' => 'Canlı baqıp çıquv hususiyetini qullan (JavaScript) (daa deñeme alında)',
 'tog-forceeditsummary' => 'Deñiştirmeniñ qısqa tarifini boş taşlasam meni tenbile',
index 89595e2..99681ba 100644 (file)
@@ -390,8 +390,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Zobrazovat počet sledujících uživatelů',
 'tog-oldsig' => 'Stávající podpis:',
 'tog-fancysig' => 'Používat v podpisu wikitext (bez automatického odkazu)',
-'tog-externaleditor' => 'Implicitně používat externí editor (pouze pro pokročilé, vyžaduje speciální nastavení počítače; [//www.mediawiki.org/wiki/Manual:External_editors další informace])',
-'tog-externaldiff' => 'Implicitně používat externí porovnávací program (pouze pro pokročilé, vyžaduje speciální nastavení počítače; [//www.mediawiki.org/wiki/Manual:External_editors další informace])',
 'tog-showjumplinks' => 'Používat odkazy „skočit na“ pro vyšší přístupnost',
 'tog-uselivepreview' => 'Používat rychlý náhled (JavaScript) (Experimentální)',
 'tog-forceeditsummary' => 'Upozornit, když nevyplním shrnutí editace',
@@ -406,6 +404,7 @@ $messages = array(
 'tog-showhiddencats' => 'Zobrazit skryté kategorie',
 'tog-noconvertlink' => 'Vypnout konverzi názvů',
 'tog-norollbackdiff' => 'Po vrácení změny nezobrazovat porovnání rozdílů',
+'tog-useeditwarning' => 'Upozornit, když budu opouštět editaci bez uložení změn',
 
 'underline-always' => 'Vždy',
 'underline-never' => 'Nikdy',
@@ -773,9 +772,15 @@ Uvědomte si, že některé stránky se mohou i nadále zobrazovat, jako byste b
 'welcomecreation-msg' => 'Váš účet byl vytvořen.
 Nezapomeňte si upravit své [[Special:Preferences|nastavení {{grammar:2sg|{{SITENAME}}}}]].',
 'yourname' => 'Uživatelské jméno:',
+'userlogin-yourname' => 'Uživatelské jméno',
+'userlogin-yourname-ph' => 'Zadejte své uživatelské jméno',
 'yourpassword' => 'Vaše heslo',
+'userlogin-yourpassword' => 'Heslo',
+'userlogin-yourpassword-ph' => 'Zadejte své heslo',
 'yourpasswordagain' => 'Zopakujte heslo:',
 'remembermypassword' => 'Zapamatovat si mé přihlášení na tomto počítači (maximálně $1 {{PLURAL:$1|den|dny|dní}})',
+'userlogin-remembermypassword' => 'Zapamatovat si mě',
+'userlogin-signwithsecure' => 'Přihlášení na zabezpečený server',
 'securelogin-stick-https' => 'Zůstat po přihlášení připojen přes HTTPS',
 'yourdomainname' => 'Vaše doména',
 'password-change-forbidden' => 'Na této wiki nemůžete měnit hesla.',
@@ -788,12 +793,16 @@ Nezapomeňte si upravit své [[Special:Preferences|nastavení {{grammar:2sg|{{SI
 'logout' => 'Odhlásit se',
 'userlogout' => 'Odhlášení',
 'notloggedin' => 'Nejste přihlášen(a)',
+'userlogin-noaccount' => 'Nemáte účet?',
+'userlogin-joinproject' => 'Přidejte se k {{grammar:3sg|{{SITENAME}}}}',
 'nologin' => "Dosud nemáte účet? '''$1'''.",
 'nologinlink' => 'Zaregistrujte se',
 'createaccount' => 'Vytvořit účet',
 'gotaccount' => "Už jste registrováni? '''$1'''.",
 'gotaccountlink' => 'Přihlaste se',
 'userlogin-resetlink' => 'Zapomněli jste přihlašovací údaje?',
+'helplogin-url' => 'Help:Přihlášení',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Nápověda k přihlašování]]',
 'createaccountmail' => 'Použít dočasné náhodné heslo a odeslat ho na níže uvedenou e-mailovou adresu',
 'createaccountreason' => 'Důvod:',
 'badretype' => 'Vámi napsaná hesla nesouhlasí.',
@@ -889,6 +898,7 @@ Možná jste si již úspěšně heslo změnili, nebo jste si vyžádali nové d
 'passwordreset-text' => 'Pro získání nového hesla vyplňte tento formulář.',
 'passwordreset-legend' => 'Znovu nastavit heslo',
 'passwordreset-disabled' => 'Znovunastavení hesla je na této wiki zakázáno.',
+'passwordreset-emaildisabled' => 'E-mailové funkce byly na této wiki vypnuty.',
 'passwordreset-pretext' => '{{PLURAL:$1||Zadejte jeden z údajů níže}}',
 'passwordreset-username' => 'Uživatelské jméno:',
 'passwordreset-domain' => 'Doména:',
@@ -917,7 +927,7 @@ tedy změnit, můžete tuto zprávu ignorovat a nadále používat původní hes
 Dočasné heslo: $2',
 'passwordreset-emailsent' => 'E-mail pro získání nového hesla byl odeslán.',
 'passwordreset-emailsent-capture' => 'Byl odeslán e-mail pro získání nového hesla, který je zobrazen níže.',
-'passwordreset-emailerror-capture' => 'Byl vygenerován e-mail pro získání nového hesla, který je zobrazen níže, ale nepodařilo se ho odeslat uživateli: $1',
+'passwordreset-emailerror-capture' => 'Byl vygenerován e-mail pro získání nového hesla, který je zobrazen níže, ale nepodařilo se ho odeslat {{GENDER:$2|uživateli|uživatelce}}: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Změna e-mailové adresy',
@@ -1126,6 +1136,8 @@ Zřejmě byla smazána.',
 'content-failed-to-parse' => 'Nepodařilo se zpracovat data $2 do modelu $1: $3',
 'invalid-content-data' => 'Obsažená data jsou chybná',
 'content-not-allowed-here' => 'Obsah typu $1 není na stránce [[$2]] dovolen.',
+'editwarning-warning' => 'Opuštěním této stránky se mohou veškeré provedené změny ztratit.
+Pokud jste {{GENDER:|přihlášen|přihlášena|přihlášeni}}, můžete si toto varování vypnout na záložce „{{int:prefs-editing}}“ v uživatelském nastavení.',
 
 # Content models
 'content-model-wikitext' => 'wikitext',
@@ -1408,6 +1420,7 @@ Pokud na začátek dotazu přidáte ''all:'', bude se hledat všude (včetně di
 'powersearch-togglenone' => 'Nic',
 'search-external' => 'Externí hledání',
 'searchdisabled' => '<p>Omlouváme se. Plnotextové vyhledávání je dočasně nedostupné. Zatím můžete zkusit vyhledávání Googlem; je ale možné, že jeho výsledky nemusí být aktuální.</p>',
+'search-error' => 'Při hledání došlo k chybě: $1',
 
 # Preferences page
 'preferences' => 'Nastavení',
@@ -4012,6 +4025,8 @@ Obrázky se zobrazí v plném rozlišení, jiné typy souborů se otevřenou v p
 'htmlform-submit' => 'Odeslat',
 'htmlform-reset' => 'Vrátit změny',
 'htmlform-selectorother-other' => 'Jiná hodnota',
+'htmlform-no' => 'Ne',
+'htmlform-yes' => 'Ano',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 s podporou plnotextového vyhledávání',
index 1579254..02bef10 100644 (file)
@@ -147,8 +147,6 @@ $messages = array(
 'tog-shownumberswatching' => "Dangos y nifer o ddefnyddwyr sy'n gwylio",
 'tog-oldsig' => 'Y llofnod cyfredol:',
 'tog-fancysig' => 'Trin y llofnod fel testun wici (heb gyswllt wici awtomatig)',
-'tog-externaleditor' => 'Defnyddio golygydd allanol trwy ragosodiad (ar gyfer arbenigwyr yn unig; mae arno angen gosodiadau arbennig ar eich cyfrifiadur. [//www.mediawiki.org/wiki/Manual:External_editors Rhagor o wybodaeth.])',
-'tog-externaldiff' => 'Defnyddio "external diff" trwy ragosodiad (ar gyfer arbenigwyr yn unig; mae arno angen gosodiadau arbennig ar eich cyfrifiadur. [//www.mediawiki.org/wiki/Manual:External_editors Rhagor o wybodaeth.])',
 'tog-showjumplinks' => 'Galluogi dolenni hygyrchedd "neidio i"',
 'tog-uselivepreview' => 'Defnyddio rhagolwg byw (JavaScript) (Arbrofol)',
 'tog-forceeditsummary' => 'Tynnu fy sylw pan adawaf flwch crynodeb golygu yn wag',
@@ -162,6 +160,7 @@ $messages = array(
 'tog-diffonly' => "Peidio â dangos cynnwys y dudalen islaw'r gymhariaeth ar dudalennau cymharu",
 'tog-showhiddencats' => 'Dangos categorïau cuddiedig',
 'tog-norollbackdiff' => 'Hepgor dangos cymhariaeth ar ôl gwrthdroi golygiad',
+'tog-useeditwarning' => "Tynnwch fy sylw pan wyf ar fin gadael tudalen olygu heb roi'r newidiadau ar gadw",
 
 'underline-always' => 'Bob amser',
 'underline-never' => 'Byth',
@@ -528,9 +527,15 @@ Sylwer y bydd rhai tudalennau yn parhau i ymddangos fel ag yr oeddent pan oeddec
 'welcomeuser' => 'Croeso, $1!',
 'welcomecreation-msg' => 'Peidiwch ag anghofio newid eich [[Special:Preferences|{{SITENAME}} preferences]].',
 'yourname' => 'Eich enw defnyddiwr:',
+'userlogin-yourname' => 'Enw Defnyddiwr',
+'userlogin-yourname-ph' => 'Rhowch eich enw defnyddiwr',
 'yourpassword' => 'Eich cyfrinair:',
+'userlogin-yourpassword' => 'Cyfrinair',
+'userlogin-yourpassword-ph' => 'Teipiwch eich cyfrinair',
 'yourpasswordagain' => 'Ail-deipiwch y cyfrinair:',
 'remembermypassword' => "Y porwr hwn i gofio'r manylion mewngofnodi (am hyd at $1 {{PLURAL:$1||diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}})",
+'userlogin-remembermypassword' => 'Cofio fi',
+'userlogin-signwithsecure' => 'Mewngofnodi drwy weinydd diogel',
 'securelogin-stick-https' => "Cadw'r cyswllt â HTTPS ar ôl mewngofnodi",
 'yourdomainname' => 'Eich parth',
 'password-change-forbidden' => 'Ni allwch newid cyfrineiriau ar y wici hwn.',
@@ -543,12 +548,16 @@ Sylwer y bydd rhai tudalennau yn parhau i ymddangos fel ag yr oeddent pan oeddec
 'logout' => 'Allgofnodi',
 'userlogout' => 'Allgofnodi',
 'notloggedin' => 'Nid ydych wedi mewngofnodi',
+'userlogin-noaccount' => 'Dim cyfrif gennych?',
+'userlogin-joinproject' => 'Ymuno â {{SITENAME}}',
 'nologin' => "Dim cyfrif gennych? '''$1'''.",
 'nologinlink' => 'Crëwch gyfrif',
 'createaccount' => 'Creu cyfrif newydd',
 'gotaccount' => "Oes cyfrif gennych eisoes? '''$1'''.",
 'gotaccountlink' => 'Mewngofnodwch',
 'userlogin-resetlink' => 'Ydych chi wedi anghofio eich manylion mewngofnodi?',
+'helplogin-url' => 'Help:Mewngofnodi',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Cymorth i fewngofnodi]]',
 'createaccountmail' => "Defnyddier cyfrinair ar hap dros dro a'i anfon i'r cyfeiriad e-bost isod",
 'createaccountreason' => 'Rheswm:',
 'badretype' => "Nid yw'r cyfrineiriau'n union yr un fath.",
@@ -639,6 +648,7 @@ Gall fod eich bod wedi llwyddo newid eich cyfrinair eisoes neu eich bod wedi gof
 'passwordreset-text' => 'Cwblhewch y ffurflen hon er mwyn ailosod eich cyfrinair.',
 'passwordreset-legend' => 'Ailosod y cyfrinair',
 'passwordreset-disabled' => 'Analluogwyd ailosod cyfrineiriau ar y wici hwn.',
+'passwordreset-emaildisabled' => 'Analluogwyd offer e-bost ar y wici hwn.',
 'passwordreset-pretext' => "{{PLURAL:$1|||Rhowch un o'r darnau o ddata isod|Rhowch un o'r darnau o ddata isod|Rhowch un o'r darnau o ddata isod|Rhowch un o'r darnau o ddata isod|Rhowch un o'r darnau o ddata isod}}",
 'passwordreset-username' => 'Eich enw defnyddiwr:',
 'passwordreset-domain' => 'Parth:',
@@ -662,7 +672,7 @@ Dylech fewngofnodi nawr a dewis cyfrinair newydd. Os mai rhywun arall a ofynodd
 Y cyfrinair dros dro: $2",
 'passwordreset-emailsent' => 'Anfonwyd e-bost i ailosod eich cyfrinair atoch.',
 'passwordreset-emailsent-capture' => "Anfonwyd e-bost i ailosod cyfrinair, ac fe'i ddangosir isod.",
-'passwordreset-emailerror-capture' => "Lluniwyd e-bost i ailosod cyfrinair fel ag a welir isod, ond ni lwyddwyd i'w anfon at y defnyddiwr: $1",
+'passwordreset-emailerror-capture' => "Lluniwyd e-bost i ailosod cyfrinair fel ag a welir isod, ond ni lwyddwyd i'w anfon at y {{GENDER:$2|defnyddiwr}}: $1",
 
 # Special:ChangeEmail
 'changeemail' => 'Newid y cyfeiriad e-bost',
@@ -874,6 +884,8 @@ Mae ar gael yn barod.',
 'content-failed-to-parse' => "Ni lwyddwyd i ddosrannu'r cynnwys sydd ar ffurf $2 yn ôl y model $1: $3",
 'invalid-content-data' => "Data annilys i'r cynnwys",
 'content-not-allowed-here' => 'Nid yw cynnwys ar ffurf "$1" yn cael ei ganiatau ar y dudalen [[$2]]',
+'editwarning-warning' => 'Os y gadewch y dudalen hon mae\'n bosib y collwch eich newidiadau iddi.
+Gallwch ddiddymu\'r rhybudd hwn yn yr adran "{{int:prefs-editing}}" yn eich dewisiadau.',
 
 # Content models
 'content-model-wikitext' => 'cystrawen wici',
@@ -1157,6 +1169,7 @@ Mae manylion pellach i'w cael yn [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'searchdisabled' => "Mae'r teclyn chwilio ar {{SITENAME}} wedi'i analluogi dros dro.
 Yn y cyfamser gallwch chwilio drwy Google.
 Cofiwch y gall mynegeion Google o gynnwys {{SITENAME}} fod ar ei hôl hi.",
+'search-error' => 'Cafwyd gwall wrth chwilio: $1',
 
 # Preferences page
 'preferences' => 'Dewisiadau',
@@ -3690,6 +3703,8 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'htmlform-submit' => 'Gosoder',
 'htmlform-reset' => 'Datod y newidiadau',
 'htmlform-selectorother-other' => 'Arall',
+'htmlform-no' => 'Na/Nac ydw/Na fydd...',
+'htmlform-yes' => 'Ie/Iawn/Ydw/Oes...',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 gyda chymorth chwilio yr holl destun',
index 3094234..63c41f2 100644 (file)
@@ -220,8 +220,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Vis antal brugere, der overvåger',
 'tog-oldsig' => 'Nuværende signatur:',
 'tog-fancysig' => 'Behandl signatur som wikitekst uden automatisk henvisning',
-'tog-externaleditor' => 'Brug ekstern editor automatisk (kun for rutinerede brugere, da det kræver særlige indstillinger på din computer. [//www.mediawiki.org/wiki/Manual:External_editors Flere oplysninger.])',
-'tog-externaldiff' => 'Brug ekstern forskelsvisning automatisk (kun for rutinerede brugere, da det kræver særlige indstillinger på din computer. [//www.mediawiki.org/wiki/Manual:External_editors Flere oplysninger.])',
 'tog-showjumplinks' => 'Vis tilgængeligheds-henvisninger',
 'tog-uselivepreview' => 'Brug automatisk forhåndsvisning (kræver JavaScript og er på forsøgsstadiet)',
 'tog-forceeditsummary' => 'Advar mig hvis jeg ikke udfylder beskrivelsesfeltet',
@@ -236,6 +234,7 @@ $messages = array(
 'tog-showhiddencats' => 'Vis skjulte kategorier',
 'tog-noconvertlink' => 'Slå konvertering af sidetitler fra',
 'tog-norollbackdiff' => 'Vis ikke forskel efter tilbagerulning',
+'tog-useeditwarning' => 'Advar mig, hvis jeg forlader en redigeringsside med ændringer, der ikke er gemt.',
 
 'underline-always' => 'Altid',
 'underline-never' => 'Aldrig',
@@ -487,15 +486,15 @@ $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Side',
-'nstab-user' => 'brugerside',
-'nstab-media' => 'medie',
-'nstab-special' => 'speciel',
+'nstab-user' => 'Brugerside',
+'nstab-media' => 'Medieside',
+'nstab-special' => 'Specialside',
 'nstab-project' => 'Projektside',
 'nstab-image' => 'Fil',
 'nstab-mediawiki' => 'Besked',
-'nstab-template' => 'skabelon',
-'nstab-help' => 'hjælp',
-'nstab-category' => 'kategori',
+'nstab-template' => 'Skabelon',
+'nstab-help' => 'Hjælp',
+'nstab-category' => 'Kategori',
 
 # Main script and global functions
 'nosuchaction' => 'Funktionen findes ikke',
@@ -603,9 +602,15 @@ Bemærk, at nogle sider stadigvæk kan vises som om du var logget på, indtil du
 'welcomecreation-msg' => 'Din konto er blevet oprettet.
 Glem ikke at ændre dine [[Special:Preferences|{{SITENAME}} indstillinger]].',
 'yourname' => 'Dit brugernavn:',
+'userlogin-yourname' => 'Brugernavn',
+'userlogin-yourname-ph' => 'Indtast dit brugernavn',
 'yourpassword' => 'Din adgangskode:',
+'userlogin-yourpassword' => 'Adgangskode',
+'userlogin-yourpassword-ph' => 'Indtast din adgangskode',
 'yourpasswordagain' => 'Gentag adgangskode',
 'remembermypassword' => 'Husk mit brugernavn i denne browser (højst $1 {{PLURAL:$1|dag|dage}})',
+'userlogin-remembermypassword' => 'Husk mig',
+'userlogin-signwithsecure' => 'Log på med sikker server',
 'securelogin-stick-https' => 'Behold forbindelsen til HTTPS efter login',
 'yourdomainname' => 'Dit domænenavn:',
 'password-change-forbidden' => 'Du kan ikke ændre adgangskoder på denne wiki.',
@@ -618,12 +623,16 @@ Glem ikke at ændre dine [[Special:Preferences|{{SITENAME}} indstillinger]].',
 'logout' => 'Log af',
 'userlogout' => 'Log af',
 'notloggedin' => 'Ikke logget på',
+'userlogin-noaccount' => 'Har du ikke en konto?',
+'userlogin-joinproject' => 'Slut dig til {{SITENAME}}',
 'nologin' => 'Har du ingen konto? $1.',
 'nologinlink' => 'Opret en ny brugerkonto',
 'createaccount' => 'Opret en ny brugerkonto',
 'gotaccount' => 'Har du allerede en konto? $1.',
 'gotaccountlink' => 'Log på',
 'userlogin-resetlink' => 'Har du glemt dine login oplysninger?',
+'helplogin-url' => 'Help:Logge på',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjælp til at logge på]]',
 'createaccountmail' => 'Brug en midlertidig tilfældig adgangskode og send den til e-mailadressen angivet nedenfor',
 'createaccountreason' => 'Begrundelse:',
 'badretype' => 'De indtastede adgangskoder er ikke ens.',
@@ -721,6 +730,7 @@ Du har muligvis allerede skiftet din adgangskode eller anmodet om en ny midlerti
 'passwordreset-text' => 'Udfyld denne formular for at nulstille din adgangskode.',
 'passwordreset-legend' => 'Nulstil adgangskode',
 'passwordreset-disabled' => 'Nulstilling af kodeord er slået fra på denne wiki.',
+'passwordreset-emaildisabled' => 'E-mailfunktioner er slået fra på denne wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Indtast en af de nedenstående oplysninger}}',
 'passwordreset-username' => 'Brugernavn:',
 'passwordreset-domain' => 'Domæne:',
@@ -961,6 +971,8 @@ Den ser du til at være slettet.',
 'content-failed-to-parse' => 'Kunne ikke fortolke $2-indholdet af $1-modellen: $3',
 'invalid-content-data' => 'Ugyldig indholdsdata',
 'content-not-allowed-here' => '"$1" indhold er ikke tilladt på siden [[$2]]',
+'editwarning-warning' => 'Hvis du forlader siden nu, risikerer du at miste alle ændringer, som du har lavet.
+Denne advarsel kan slås fra under "Redigering" i dine indstillinger.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
@@ -1239,6 +1251,7 @@ Du kan prøve at bruge \"all:\" som præfiks for at søge i alt indhold (inkl. d
 'powersearch-togglenone' => 'Ingen',
 'search-external' => 'Brug anden søgemaskine',
 'searchdisabled' => '<p>Beklager! Fuldtekstsøgningen er midlertidigt afbrudt på grund af for stor belastning på serverne. I mellemtidem kan du anvende Google- eller Yahoo!-søgefelterne herunder. Bemærk at deres kopier af {{SITENAME}}s indhold kan være forældet.</p>',
+'search-error' => 'Der opstod en fejl under søgning: $1',
 
 # Preferences page
 'preferences' => 'Indstillinger',
@@ -3732,7 +3745,7 @@ Billeder vises i fuld opløsning, og andre mediatyper vil blive aktiveret med de
 
 # Special:Tags
 'tags' => 'Tags til sideversioner',
-'tag-filter' => '[[Special:Tags|tag]]filter:',
+'tag-filter' => '[[Special:Tags|Tag]]filter:',
 'tag-filter-submit' => 'Filtrér',
 'tags-title' => 'Tags',
 'tags-intro' => 'Denne side oplister de tags som programmet kan mærke en redigering med, og deres betydning.',
@@ -3775,6 +3788,8 @@ Billeder vises i fuld opløsning, og andre mediatyper vil blive aktiveret med de
 'htmlform-submit' => 'Gem',
 'htmlform-reset' => 'Annuller ændringer',
 'htmlform-selectorother-other' => 'Anden',
+'htmlform-no' => 'Nej',
+'htmlform-yes' => 'Ja',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 med fuld-tekst søgnings support',
index d005170..e803c12 100644 (file)
@@ -439,8 +439,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Anzahl der beobachtenden Benutzer anzeigen',
 'tog-oldsig' => 'Vorhandene Signatur:',
 'tog-fancysig' => 'Signatur als Wikitext behandeln (ohne automatische Verlinkung)',
-'tog-externaleditor' => 'Externen Editor standardmäßig nutzen (nur für Experten, erfordert spezielle Einstellungen auf dem eigenen Computer. [//www.mediawiki.org/wiki/Manual:External_editors Weitere Informationen hierzu.])',
-'tog-externaldiff' => 'Externes Programm standardmäßig für Versionsunterschiede nutzen (nur für Experten, erfordert spezielle Einstellungen auf dem eigenen Computer. [//www.mediawiki.org/wiki/Manual:External_editors Weitere Informationen hierzu.])',
 'tog-showjumplinks' => '„Wechseln-zu“-Links aktivieren',
 'tog-uselivepreview' => 'Vorschau sofort anzeigen (benötigt JavaScript) (experimentell)',
 'tog-forceeditsummary' => 'Warnen, sofern beim Speichern die Zusammenfassung fehlt',
@@ -455,6 +453,7 @@ $messages = array(
 'tog-showhiddencats' => 'Anzeige versteckter Kategorien',
 'tog-noconvertlink' => 'Konvertierung des Titels deaktivieren',
 'tog-norollbackdiff' => 'Unterschied nach dem Zurücksetzen unterdrücken',
+'tog-useeditwarning' => 'Warnen, sofern eine zur Bearbeitung geöffnete Seite verlassen wird, die nicht gespeicherte Änderungen enthält',
 
 'underline-always' => 'immer',
 'underline-never' => 'nie',
@@ -825,9 +824,15 @@ Beachte, dass einige Seiten noch anzeigen können, dass du angemeldet bist, sola
 'welcomecreation-msg' => 'Dein Benutzerkonto wurde erstellt.
 Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ändern.',
 'yourname' => 'Benutzername:',
+'userlogin-yourname' => 'Benutzername',
+'userlogin-yourname-ph' => 'Gib deinen Benutzernamen ein',
 'yourpassword' => 'Passwort:',
+'userlogin-yourpassword' => 'Passwort',
+'userlogin-yourpassword-ph' => 'Gib dein Passwort ein',
 'yourpasswordagain' => 'Passwort wiederholen:',
 'remembermypassword' => 'Mit diesem Browser dauerhaft angemeldet bleiben (maximal $1 {{PLURAL:$1|Tag|Tage}})',
+'userlogin-remembermypassword' => 'Angemeldet bleiben',
+'userlogin-signwithsecure' => 'Mit dem sicheren Server anmelden',
 'securelogin-stick-https' => 'Nach dem Anmelden mit HTTPS verbunden bleiben',
 'yourdomainname' => 'Deine Domain:',
 'password-change-forbidden' => 'Du kannst auf diesem Wiki keine Passwörter ändern.',
@@ -840,12 +845,16 @@ Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ände
 'logout' => 'Abmelden',
 'userlogout' => 'Abmelden',
 'notloggedin' => 'Nicht angemeldet',
+'userlogin-noaccount' => 'Du hast noch kein Benutzerkonto?',
+'userlogin-joinproject' => '{{SITENAME}} beitreten',
 'nologin' => "Du hast kein Benutzerkonto? '''$1'''.",
 'nologinlink' => 'Neues Benutzerkonto anlegen',
 'createaccount' => 'Benutzerkonto anlegen',
 'gotaccount' => "Du hast bereits ein Benutzerkonto? '''$1'''.",
 'gotaccountlink' => 'Anmelden',
 'userlogin-resetlink' => 'Die Anmeldedaten vergessen?',
+'helplogin-url' => 'Help:Anmelden',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hilfe beim Anmelden]]',
 'createaccountmail' => 'Ein temporäres Zufallspasswort verwenden und an die unten angegebene E-Mail-Adresse versenden',
 'createaccountreason' => 'Grund:',
 'badretype' => 'Die beiden Passwörter stimmen nicht überein.',
@@ -941,15 +950,16 @@ Möglicherweise hast du dein Passwort bereits erfolgreich geändert oder ein neu
 'passwordreset-text' => 'Bitte dieses Formular ausfüllen, um dein Passwort zurückzusetzen.',
 'passwordreset-legend' => 'Passwort zurücksetzen',
 'passwordreset-disabled' => 'Das Zurücksetzen von Passwörtern wurde in diesem Wiki deaktiviert.',
+'passwordreset-emaildisabled' => 'Die E-Mail-Funktionen wurden auf diesem Wiki deaktiviert.',
 'passwordreset-pretext' => '{{PLURAL:$1||Gib eines der folgenden Daten ein.}}',
 'passwordreset-username' => 'Benutzername:',
 'passwordreset-domain' => 'Domain:',
 'passwordreset-capture' => 'Die E-Mail-Nachricht ansehen?',
-'passwordreset-capture-help' => 'Sofern Du dieses Kästchen ankreuzt, wird die E-Mail-Nachricht mit dem temporären Passwort, sowohl dir angezeigt, als auch dem Benutzer zugesandt.',
+'passwordreset-capture-help' => 'Wenn du dieses Kästchen ankreuzt, wird die E-Mail-Nachricht mit dem temporären Passwort sowohl dir angezeigt als auch dem Benutzer zugesandt.',
 'passwordreset-email' => 'E-Mail-Adresse:',
 'passwordreset-emailtitle' => 'Benutzerkontoinformationen auf {{SITENAME}}',
 'passwordreset-emailtext-ip' => 'Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat eine Zurücksetzung deines
-Passworts für {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}}
+Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}}
 mit dieser E-Mail-Adresse verknüpft:
 
 $2
@@ -959,7 +969,7 @@ Du solltest dich anmelden und ein neues Passwort vergeben. Falls jemand anderes
 Anfrage getätigt hat oder du dich wieder an dein ursprüngliches Passwort erinnern kannst und es nicht länger
 ändern möchtest, kannst du diese Nachricht ignorieren und weiterhin dein altes
 Passwort benutzen.',
-'passwordreset-emailtext-user' => 'Benutzer $1 auf {{SITENAME}} hat eine Zurücksetzung deines Passworts für {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:
+'passwordreset-emailtext-user' => 'Benutzer $1 bei {{SITENAME}} hat eine Zurücksetzung deines Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:
 
 $2
 
@@ -968,7 +978,7 @@ $2
 Temporäres Passwort: $2',
 'passwordreset-emailsent' => 'Eine Passwortzurücksetzungs-E-Mail wurde versandt.',
 'passwordreset-emailsent-capture' => 'Eine Passwortzurücksetzungs-E-Mail wurde versandt, die unten angezeigt wird.',
-'passwordreset-emailerror-capture' => 'Die unten angezeigte Passwortzurücksetzungs-E-Mail wurde generiert, allerdings ist der Versand an den Benutzer gescheitert: $1',
+'passwordreset-emailerror-capture' => 'Die unten angezeigte Passwortzurücksetzungs-E-Mail wurde generiert, allerdings ist der Versand an {{GENDER:$2|den Benutzer|die Benutzerin}} gescheitert: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'E-Mail-Adresse ändern',
@@ -1012,7 +1022,7 @@ Temporäres Passwort: $2',
 'showpreview' => 'Vorschau zeigen',
 'showlivepreview' => 'Sofortige Vorschau',
 'showdiff' => 'Änderungen zeigen',
-'anoneditwarning' => "Du bearbeitest diese Seite unangemeldet. Wenn du sie speicherst, wird deine aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.",
+'anoneditwarning' => "Du bearbeitest diese Seite unangemeldet. Wenn du sie abspeicherst, wird deine aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.",
 'anonpreviewwarning' => "''Du bist nicht angemeldet. Beim Speichern wird deine IP-Adresse in der Versionsgeschichte aufgezeichnet.''",
 'missingsummary' => "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
 'missingcommenttext' => 'Dein Abschnitt enthält keinen Text.',
@@ -1181,6 +1191,8 @@ Sie wurde anscheinend gelöscht.',
 'content-failed-to-parse' => 'Parsen des Inhalts $2 für Modell $1 fehlgeschlagen: $3',
 'invalid-content-data' => 'Ungültige Inhaltsdaten',
 'content-not-allowed-here' => 'Der Inhalt „$1“ ist auf der Seite [[$2]] nicht erlaubt',
+'editwarning-warning' => 'Das Verlassen dieser Seite kann dazu führen, dass deine Änderungen verloren gehen.
+Wenn du angemeldet bist, kannst du das Anzeigen dieser Warnung im „{{int:prefs-editing}}“-Bereich deiner Einstellungen abschalten.',
 
 # Content models
 'content-model-wikitext' => 'Wikitext',
@@ -1727,7 +1739,7 @@ Dies kann nicht mehr rückgängig gemacht werden.',
 'action-rollback' => 'die Änderungen des letzten Bearbeiters einer bestimmten Seite schnell zurückzusetzen',
 'action-import' => 'Seiten aus einem anderen Wiki zu importieren',
 'action-importupload' => 'Seiten über das Hochladen einer Datei zu importieren',
-'action-patrol' => 'die Bearbeitungen andere Benutzer zu kontrollieren',
+'action-patrol' => 'die Bearbeitungen anderer Benutzer zu kontrollieren',
 'action-autopatrol' => 'eigene Bearbeitungen als kontrolliert zu markieren',
 'action-unwatchedpages' => 'die Liste der unbeobachteten Seiten einzusehen',
 'action-mergehistory' => 'die Versionengeschichten von Seiten zu vereinen',
@@ -2363,7 +2375,7 @@ Zusätzliche Informationen über einzelne Rechte können [[{{MediaWiki:Listgroup
 'emailuser-title-notarget' => 'E-Mail an Benutzer',
 'emailpage' => 'E-Mail an Benutzer',
 'emailpagetext' => 'Du kannst {{GENDER:$1|dem Benutzer|der Benutzerin}} mit dem unten stehenden Formular eine E-Mail senden.
-Als Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} dir antworten kann.',
+Als Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} dir direkt antworten kann.',
 'usermailererror' => 'Das E-Mail-Objekt gab einen Fehler zurück:',
 'defemailsubject' => '{{SITENAME}} – E-Mail von Benutzer „$1“',
 'usermaildisabled' => 'E-Mail-Empfang deaktiviert',
@@ -2413,7 +2425,7 @@ Spätere Änderungen an dieser Seite und der zugehörigen Diskussionsseite werde
 'notanarticle' => 'Keine Seite',
 'notvisiblerev' => 'Version wurde gelöscht',
 'watchnochange' => 'Keine der von dir beobachteten Seiten wurde während des angezeigten Zeitraums bearbeitet.',
-'watchlist-details' => 'Du beobachtest {{PLURAL:$1|1 Seite|$1 Seiten}}.',
+'watchlist-details' => 'Du beobachtest {{PLURAL:$1|eine Seite|$1 Seiten}}, ohne dass Diskussionsseiten gezählt werden.',
 'wlheader-enotif' => '* Der E-Mail-Benachrichtigungsdienst ist aktiviert.',
 'wlheader-showupdated' => "* Seiten mit noch nicht gesehenen Änderungen werden '''fett''' dargestellt.",
 'watchmethod-recent' => 'Überprüfen der letzten Bearbeitungen für die Beobachtungsliste',
@@ -2455,16 +2467,16 @@ Kontakt zum Bearbeiter:
 E-Mail: $PAGEEDITOR_EMAIL
 Wiki: $PAGEEDITOR_WIKI
 
-Es werden dir solange keine weiteren Benachrichtigungs-E-Mails gesendet, bis du die Seite wieder besucht hast. Auf deiner Beobachtungsliste kannst du alle Benachrichtigungsmarkierungen zusammen zurücksetzen.
+Bei weiterer Aktivität auf der Seite werden dir so lange keine weiteren Benachrichtigungs-E-Mails gesendet, bis du die Seite wieder besucht hast. Auf deiner Beobachtungsliste kannst du alle Benachrichtigungsmarkierungen zusammen zurücksetzen.
 
-             Dein freundliches {{SITENAME}}-Benachrichtigungssystem
+Dein freundliches {{SITENAME}}-Benachrichtigungssystem
 
 --
-Um die Einstellungen der E-Mail-Benachrichtigung anzupassen, besuche {{canonicalurl:{{#special:Preferences}}}}
+Um die Einstellungen der E-Mail-Benachrichtigung anzupassen, besuche {{canonicalurl:{{#special:Preferences}}}}.
 
-Um die Einstellungen deiner Beobachtungsliste anzupassen, besuche {{canonicalurl:{{#special:EditWatchlist}}}}
+Um die Einstellungen deiner Beobachtungsliste anzupassen, besuche {{canonicalurl:{{#special:EditWatchlist}}}}.
 
-Um die Seite von deiner Beobachtungsliste herunterzunehmen, besuche $UNWATCHURL
+Um die Seite von deiner Beobachtungsliste herunterzunehmen, besuche $UNWATCHURL.
 
 Rückmeldungen und weitere Hilfe: {{canonicalurl:{{MediaWiki:Helppage}}}}',
 'created' => 'erstellt',
@@ -2721,7 +2733,7 @@ Bitte gib den Grund für die Sperre an.',
 'ipbenableautoblock' => 'Sperre die aktuell von diesem Benutzer genutzte IP-Adresse sowie automatisch alle folgenden, von denen aus er Bearbeitungen oder das Anlegen von Benutzerkonten versucht',
 'ipbsubmit' => 'IP-Adresse/Benutzer sperren',
 'ipbother' => 'Andere Dauer (englisch):',
-'ipboptions' => '2 Stunden:2 hours,1 Tag:1 day,3 Tage:3 days,1 Woche:1 week,2 Wochen:2 weeks,1 Monat:1 month,3 Monate:3 months,6 Monate:6 months,1 Jahr:1 year,Unbeschränkt:infinite',
+'ipboptions' => '2 Stunden:2 hours,1 Tag:1 day,3 Tage:3 days,1 Woche:1 week,2 Wochen:2 weeks,1 Monat:1 month,3 Monate:3 months,6 Monate:6 months,1 Jahr:1 year,unbeschränkt:infinite',
 'ipbotheroption' => 'Andere Dauer',
 'ipbotherreason' => 'Anderer/ergänzender Grund:',
 'ipbhidename' => 'Benutzername in Bearbeitungen und Listen verstecken',
@@ -2846,7 +2858,7 @@ Du kannst Weiterleitungen, die auf den Originaltitel verlinken, automatisch korr
 Stelle sicher, dass du im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfst.
 Du bist dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.
 
-Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese eine Weiterleitung ohne Versionsgeschichte.
+Die Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, letztere ist eine Weiterleitung ohne Versionsgeschichte.
 Dies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine existierende Seite überschreiben.
 
 '''Warnung!'''
@@ -3751,30 +3763,28 @@ Rückmeldung des Mailservers: $1',
 'confirmemail_subject' => '[{{SITENAME}}] Bestätigung der E-Mail-Adresse',
 'confirmemail_body' => 'Hallo,
 
-jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat das Benutzerkonto „$2“ in {{SITENAME}} registriert.
+jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat das Benutzerkonto „$2“ bei {{SITENAME}} registriert.
 
-Um die E-Mail-Funktion von {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen,
-dass dieses Benutzerkonto wirklich zu deiner E-Mail-Adresse und damit zu dir gehört, öffne bitte die folgende Web-Adresse:
+Um die E-Mail-Funktionen von {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen,
+dass dieses Benutzerkonto wirklich zu deiner E-Mail-Adresse und damit zu dir gehört, öffne bitte folgenden Link in deinem Browser:
 
 $3
 
-Sollte die vorstehende Adresse in deinem E-Mail-Programm über mehrere Zeilen gehen, musst du sie eventuell per Hand in die Adresszeile deines Web-Browsers einfügen.
-
 Wenn du das genannte Benutzerkonto *nicht* registriert hast, folge diesem Link, um den Bestätigungsprozess abzubrechen:
 
 $5
 
-Dieser Bestätigungscode ist gültig bis $6, $7 Uhr.',
+Dieser Bestätigungscode ist gültig bis zum $6, $7 Uhr.',
 'confirmemail_body_changed' => 'Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,
-hat die E-Mail-Adresse des Benutzerkontos „$2“ zu dieser Adresse auf {{SITENAME}} geändert.
+hat die E-Mail-Adresse des Benutzerkontos „$2“ zu dieser Adresse bei {{SITENAME}} geändert.
 
-Um zu bestätigen, dass dieses Benutzerkonto wirklich dir gehört
-und um die E-Mail-Features auf {{SITENAME}} zu reaktivieren, öffne diesen Link in deinem Browser:
+Um zu bestätigen, dass dieses Benutzerkonto wirklich dir gehört,
+und um die E-Mail-Features bei {{SITENAME}} zu reaktivieren, öffne diesen Link in deinem Browser:
 
 $3
 
 Falls das Konto *nicht* dir gehört, folge diesem Link,
-um die E-Mail-Adress-Bestätigung abzubrechen:
+um die E-Mail-Bestätigung abzubrechen:
 
 $5
 
@@ -4040,6 +4050,8 @@ Eine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License'']
 'htmlform-submit' => 'Speichern',
 'htmlform-reset' => 'Änderungen rückgängig machen',
 'htmlform-selectorother-other' => 'Andere',
+'htmlform-no' => 'Nein',
+'htmlform-yes' => 'Ja',
 
 # SQLite database support
 'sqlite-has-fts' => 'Version $1 mit Unterstützung für die Volltextsuche',
index 3f0c02a..4e3d6d8 100644 (file)
@@ -338,8 +338,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Amarê karberanê seyrkerdoğan bımocne',
 'tog-oldsig' => 'İmzaya mewcude:',
 'tog-fancysig' => 'İmza rê mameleyê wikimeqaley bıke (bê gıreyo otomatik)',
-'tog-externaleditor' => 'Editorê teberi standard bıxebetne (tenya seba ekspertano, komputerê şıma de eyarê xısusiy lazımê. [//www.mediawiki.org/wiki/Manual:External_editors Melumato vêşêr.])',
-'tog-externaldiff' => 'Têverşanayışan pê programê teberi vıraze (tenya seba ekspertano, komputerê şıma de eyarê xısusiy lazımê. [//www.mediawiki.org/wiki/Manual:External_editors Melumato vêşêr.])',
 'tog-showjumplinks' => 'Gıreyê "şo"y aktif ke',
 'tog-uselivepreview' => 'Verqayto cınde bıxebetne (JavaScript lazımo) (hewna cerrebnayış dero)',
 'tog-forceeditsummary' => 'Mı ke xulasa kerde cı vira, hay be mı ser de',
@@ -354,6 +352,7 @@ $messages = array(
 'tog-showhiddencats' => 'Kategoriyanê dızdine bımocne',
 'tog-noconvertlink' => 'Greyê sernami çerx kerdışi bıqefılne',
 'tog-norollbackdiff' => 'Peyserardışi ra dıme ferqi caverde',
+'tog-useeditwarning' => 'wexta ke ez pelo nêqeydbiyaye ra veciyaya mı hişyar bıker',
 
 'underline-always' => 'Tım',
 'underline-never' => 'Qet',
@@ -1080,6 +1079,8 @@ Pel ca ra esto.',
 'content-failed-to-parse' => 'Qandê madela $3 zereyê $1, $2 sero nêagozyayo',
 'invalid-content-data' => 'Zerrey malumati nêravêrdeyo',
 'content-not-allowed-here' => '"$1" sero per da [[$2]] rê mısade nêdeyêno',
+'editwarning-warning' => 'ihtimal o ke wexta şıma peli ra bıveci, vurnayiş o ke şıma kerdo, hewna şiyêro .
+eke şıma kewtê hesabê xo, no hişyari tercihanê xo ra şıma eşkeni "{{int:prefs-editing}}" bıvındarnî .',
 
 # Content models
 'content-model-wikitext' => 'wikimetin',
@@ -1194,7 +1195,7 @@ Eke şıma serkari u devam bıkeri [$1 no vurnayiş şıma eşkeni bıvini].",
 'revdelete-nologid-text' => 'Şıma vıraştışê nê fonksiyoni rê ya yew cıkewtışo waşte diyar nêkerdo, ya ki çıkewtışo diyarkerde çıniyo.',
 'revdelete-no-file' => 'Dosya diyarkerdiye çıniya.',
 'revdelete-show-file-confirm' => 'Şıma eminê ke wazenê çımraviyarnayışê esterıtey na dosya "<nowiki>$1</nowiki>" $2 ra $3 de bıvênê?',
-'revdelete-show-file-submit' => 'E',
+'revdelete-show-file-submit' => 'Eya',
 'revdelete-selected' => "'''[[:$1]]: ra {{PLURAL:$2|çımraviyarnayışo weçinıte|çımraviyarnayışê weçinıtey}}'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Qeydbiyayışo weçinıte|Qeydbiyayışê weçinıtey}}:'''",
 'revdelete-text' => "'''Çımraviyarnayışê esterıtey u kerdışi hewna tarixê pele u qeydan de asenê, hema parçeyê zerrekê dinan areze nêbenê.'''
@@ -1212,7 +1213,7 @@ Eke şertê ilawekerdey ke niyê ro, idarekerê bini {{SITENAME}} de nêşenê h
 'revdelete-hide-user' => 'Karber u IP ê ke vurnayiş kerdo bınım.',
 'revdelete-hide-restricted' => 'Malumatan pa serkaran u karberan ra bınım.',
 'revdelete-radio-same' => '(mevurne)',
-'revdelete-radio-set' => 'E',
+'revdelete-radio-set' => 'Eya',
 'revdelete-radio-unset' => 'Nê',
 'revdelete-suppress' => 'Hem ê binan ra hem zi serkaran ra malumatan bınım',
 'revdelete-unsuppress' => 'reizyonê ke tepiya anciye serbest ker',
@@ -1442,8 +1443,8 @@ Na game tepeya nêerziyena.',
 'prefs-textboxsize' => 'Ebatê pencerey vurnayışi',
 'youremail' => 'E-Mail (mecbur niyo) *:',
 'username' => '{{GENDER:$1|Nameyê karberi}}:',
-'uid' => 'Namey karberi:',
-'prefs-memberingroups' => 'Ezayê {{PLURAL:$1|grube|gruban}}:',
+'uid' => 'Kamiya {{GENDER:$1|karberi}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Ezayê}} {{PLURAL:$1|grube|gruban}}:',
 'prefs-memberingroups-type' => '$1',
 'prefs-registration' => 'Wextê qeydbiyayışi',
 'prefs-registration-date-time' => '$1',
@@ -2072,6 +2073,9 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 'disambiguationspage' => 'Template:Maneo bin',
 'disambiguations-text' => "Peleyê ke satır da sıteyên dı pelanê '''maneo bin'''i rê esteyina zeregri mocnenê. Nara satırda dıdın dı zi <br />tiya de [[MediaWiki:Disambiguationspage|Pelaya Maneo do bini ]] gani heme gıreyê şablonê ciya-manayan re gıre dayış icab keno.",
 
+'pageswithprop' => 'Peli be yew xısusiyetê pele',
+'pageswithprop-legend' => 'Peli be yew xısusiyetê pele',
+'pageswithprop-prop' => 'Nameyo xısusi:',
 'pageswithprop-submit' => 'Şo',
 
 'doubleredirects' => 'Hetenayışê dıletıni',
@@ -2297,7 +2301,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 'usermessage-template' => 'MediaWiki:UserMessage',
 
 # Watchlist
-'watchlist' => 'Lista mına seyrkerdışi',
+'watchlist' => 'Lista seyrkerdışi',
 'mywatchlist' => 'Lista seyrkerdışi',
 'watchlistfor2' => 'Qandê $1 ($2)',
 'nowatchlist' => 'listeya temaşa kerdıişê şıma de yew madde zi çina.',
@@ -2468,7 +2472,7 @@ Tı eşkeno seviyeye kılit kerdışi bıvurno, feqat tı nıeşken "cascading p
 'protect-default' => 'Destur bıde karberan pêrune',
 'protect-fallback' => 'Desturê "$1" lazımo',
 'protect-level-autoconfirmed' => 'Karberanê neweyan u qeyd-nêbiyaoğan kılit ke',
-'protect-level-sysop' => 'Tenya idarekeri',
+'protect-level-sysop' => 'Tenya idarekeran rê destur bıde',
 'protect-summary-cascade' => 'çırrayış',
 'protect-expiring' => 'qediyeno $1 (UTC)',
 'protect-expiring-local' => '$1 do bı qedyo',
@@ -2830,7 +2834,7 @@ Yewna name bınus.',
 '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?',
-'delete_and_move_confirm' => 'Heya, na pele bestere',
+'delete_and_move_confirm' => 'Eya, na pele bestere',
 'delete_and_move_reason' => '"[[$1]]" qey vurnayişê nameyi esteriya',
 'selfmove' => 'name yo ke şıma wazeni bıbo, ın name û name yo ke ca ra esto eyni yê /zepê yê. vurnayiş mumkin niyo.',
 'immobile-source-namespace' => '"$1" pelê cayi de nameyi nêkırışyenî',
@@ -3090,6 +3094,7 @@ Tı eşkeno yew sebeb bınus.',
 'pageinfo-robot-noindex' => 'İndeksnêbiyayen',
 'pageinfo-views' => 'Amarina mocnayışan',
 'pageinfo-watchers' => 'Amariya pela serykeran',
+'pageinfo-few-watchers' => '$1 ra tayê {{PLURAL:$1|seyrker|seyrkeri}}',
 'pageinfo-redirects-name' => 'Hetenayışê na pela',
 'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'Bınpelê na pela',
@@ -3110,9 +3115,9 @@ Tı eşkeno yew sebeb bınus.',
 'pageinfo-redirectsto' => 'Beno hetê',
 'pageinfo-redirectsto-info' => 'melumat',
 'pageinfo-contentpage' => 'Zey jû pela zerreki hesebiyena',
-'pageinfo-contentpage-yes' => 'Heya',
+'pageinfo-contentpage-yes' => 'Eya',
 'pageinfo-protect-cascading' => 'Sıtarkerdey tiya cı ra yenê war',
-'pageinfo-protect-cascading-yes' => 'Heya',
+'pageinfo-protect-cascading-yes' => 'Eya',
 'pageinfo-protect-cascading-from' => 'Sıtarkerdey cı ra yenê war',
 'pageinfo-category-info' => 'Şınasiya kategoriye',
 'pageinfo-category-pages' => 'Amarê pelan',
@@ -3220,8 +3225,6 @@ Na rêze de her gırêyo bin zey istisna vêniyeno, yanê pelê ke dosya beno ke
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans',
@@ -4123,44 +4126,46 @@ Ena sita dı newke xırabiya teknik esta.',
 'htmlform-submit' => 'Bişirav',
 'htmlform-reset' => 'Vurnayişî reyna biyar',
 'htmlform-selectorother-other' => 'Bin',
+'htmlform-no' => 'Nê',
+'htmlform-yes' => 'Eya',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 tam-metn destegê cı geyrayışiya piya',
 'sqlite-no-fts' => '$1 tam-metn bê destegê cı geyrayışi',
 
 # New logging system
-'logentry-delete-delete' => "Karber $1' pelay $3' besternê",
-'logentry-delete-restore' => "Karber $1' pelay $3' peyser grot",
-'logentry-delete-event' => '$1 asaneyaışê {{PLURAL:$5|weqey roceke|$5 weqey rocekan}} kerdi het de $3: $4 vurna',
-'logentry-delete-revision' => '$1 $3: pela da $4 dı  {{PLURAL:$5|jew revizyon|$5 revizyon}} asayışê cı vurna',
+'logentry-delete-delete' => '$1 pela $3 {{GENDER:$2|esterıte}}',
+'logentry-delete-restore' => '$1 pela $3 {{GENDER:$2|peyser arde}}',
+'logentry-delete-event' => '$1 $3: $4 de asayışê {{PLURAL:$5|cıkerdışi|cıkerdışan}} {{GENDER:$2|vurna}}',
+'logentry-delete-revision' => '$1 pela $3: $4 de asayışê {{PLURAL:$5|yew revizyoni|$5 revizyonan}} {{GENDER:$2|vurna}}',
 'logentry-delete-event-legacy' => '$1 Asayışê {{GENDER:$2|vurnayışê}} $3 dekerde de',
-'logentry-delete-revision-legacy' => '$1 revizyonê pela da $3 asayışê cı vurna',
+'logentry-delete-revision-legacy' => '$1 pela $3 de asayışê revizyonan {{GENDER:$2|vurna}}',
 'logentry-suppress-delete' => '$1 Pela $3 {{GENDER:$2|dewosiyayiye}}',
-'logentry-suppress-event' => '$1 asayışê  {{PLURAL:$5|weqey rocaka|$5 weqey rocekan}}  $3: $4 miyanıki vurna',
-'logentry-suppress-revision' => '$1 $3: pela da $4 dı  {{PLURAL:$5|jew revizyon|$5 revizyon}} asayışê cı xısusiye vurna',
-'logentry-suppress-event-legacy' => '$1 Asayışê vurnayışê ciyo xısusiyeta cı $3 dekerde de',
-'logentry-suppress-revision-legacy' => '$1 revizyonê pela da $3 asayışê cıyo xısuiye vurna',
-'revdelete-content-hid' => 'zerreko nımte',
-'revdelete-summary-hid' => 'xulusaya vurnayışa nımneyê',
-'revdelete-uname-hid' => 'namey karberi nımteyo',
-'revdelete-content-unhid' => 'errek mocneya',
-'revdelete-summary-unhid' => 'Xulusaya vurnayışa mucneyê',
-'revdelete-uname-unhid' => 'namey karberi ne nımteyo',
-'revdelete-restricted' => 'verger (vergırewtış) ê ke qey xızmkaran biye',
-'revdelete-unrestricted' => 'verger (ver gırewtış) ê ke qey xızmkaran diyê wera (wedariyê)',
+'logentry-suppress-event' => '$1 pela $3: $4 de dızdêni asayışê {{PLURAL:$5|yew weqeyo rocane|$5 weqeyê rocaney}} {{GENDER:$2|vurnay}}',
+'logentry-suppress-revision' => '$1 pela $3: $4 de asayışê {{PLURAL:$5|yew revizyoni|$5 revizyonan}} dızdêni {{GENDER:$2|vurna}}',
+'logentry-suppress-event-legacy' => '$3 asayışê cıyo xısusi $1 dızdêni {{GENDER:$2|vurna}}',
+'logentry-suppress-revision-legacy' => '$3 asayışê cıyo xısusi $1 dızdêni {{GENDER:$2|vurna}}',
+'revdelete-content-hid' => 'zerrek nımıteyo',
+'revdelete-summary-hid' => 'xulasaya vurnayışi nımıtiya',
+'revdelete-uname-hid' => 'nameyê karberi nımıteyo',
+'revdelete-content-unhid' => 'zerrek nênımıteyo',
+'revdelete-summary-unhid' => 'xulasaya vurnayışi nênımıtiya',
+'revdelete-uname-unhid' => 'nameyê karberi nênımıteyo',
+'revdelete-restricted' => 'vergırewtışê ke xızmekaran rê biye',
+'revdelete-unrestricted' => 'vergırewtışê ke xızmekaran rê dariyê we',
 'logentry-move-move' => '$1 pela $3 {{GENDER:$2|berde}} $4',
-'logentry-move-move-noredirect' => "$1'i pelay $3 raçarnayış neker dı u berd $4",
+'logentry-move-move-noredirect' => 'Hetenayışi sera pela $3 ra $1 {{GENDER:$2|berd}} pela $4',
 'logentry-move-move_redir' => 'Hetenayışi sera pela $3 ra $1 {{GENDER:$2|berd}} pela $4',
-'logentry-move-move_redir-noredirect' => '$1 hetenayışê qeydê pela da  $3 ahulnê $4 sero hetenayış vıraşt',
-'logentry-patrol-patrol' => '$1 revizyonê pela da $4 $3 ke kontrol',
-'logentry-patrol-patrol-auto' => "$1 pelay $3'i rewizyon dê $4 ya kontrol ke",
+'logentry-move-move_redir-noredirect' => 'Hetenayışi sera pela $3 ra $1 {{GENDER:$2|berd}} pela $4',
+'logentry-patrol-patrol' => '$1 versiyono $4 ke {{GENDER:$2|nişan biyo}} pela $3 ra qontrol kerd',
+'logentry-patrol-patrol-auto' => 'Çımraviyarnayışê $4 pela $3 ke $1 otomatikman {{GENDER:$2|nişan biyo}} qontrol kerd',
 'logentry-newusers-newusers' => 'Hesabê karberê $1 {{GENDER:$2|vıraziya}}',
-'logentry-newusers-create' => 'Hesabê karberi $1 vıraziya',
-'logentry-newusers-create2' => 'Hesabê karberi $1 terefê $3 ra vıraziya',
+'logentry-newusers-create' => 'Hesabê karberi $1 {{GENDER:$2|vıraziya}}',
+'logentry-newusers-create2' => 'Hesabê karberi $1 terefê $3 ra {{GENDER:$2|vıraziya}}',
 'logentry-newusers-autocreate' => 'Hesabê karberi $1 otomatikmen {{GENDER:$2|vıraşt}}',
-'logentry-rights-rights' => '$1 qandê $3 rê ezayina grube $4 ra $5 vuriye',
-'logentry-rights-rights-legacy' => '$1 qandê $3 rê ezayina grube vuriye',
-'logentry-rights-autopromote' => '$1 otomatikmen $4 ra terfi bi ra $5',
+'logentry-rights-rights' => '$1 qandê $3 rê ezayiya grube $4 ra $5 {{GENDER:$2|vuriye}}',
+'logentry-rights-rights-legacy' => '$1 qandê $3 rê ezayiya grube {{GENDER:$2|vuriye}}',
+'logentry-rights-autopromote' => '$1 otomatikmen $4 ra $5 {{GENDER:$2|terfi bi}}',
 'rightsnone' => '(çino)',
 
 # Feedback
@@ -4214,6 +4219,7 @@ Ena sita dı newke xırabiya teknik esta.',
 'api-error-ok-but-empty' => 'Xırabiya zerrek:Wastero cıwan nêdano.',
 'api-error-overwrite' => 'Ser yew dosyayê ke hama esta, ser ey qeyd nibena.',
 'api-error-stashfailed' => 'Xırabiya zerrek:Wasteri idari dosyey kerdi vıni.',
+'api-error-publishfailed' => 'Xetaya zerrey: Cıgeyrayoği nêşiya dosyaya rocaniye akero.',
 'api-error-timeout' => 'Cıwab dayışê wasteri peyra mend.',
 'api-error-unclassified' => 'Yew xeteyê nizanyeni biya.',
 'api-error-unknown-code' => "$1'dı jew xeta vıciye",
index 0970c5a..0474db0 100644 (file)
@@ -188,8 +188,6 @@ $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-externaleditor' => 'Eksterny editor ako standard wužywaś (jano za ekspertow, pomina sebje specialne nastajenja na wašom licadle. [//www.mediawiki.org/wiki/Manual:External_editors Dalšne informacije.])',
-'tog-externaldiff' => 'Eksterny diff ako standard wužywaś (jano za ekspertow, pomina sebje specialne nastajenja na wašom licadle. [//www.mediawiki.org/wiki/Manual:External_editors Dalšne informacije.])',
 'tog-showjumplinks' => 'Wótkaze typa „źi do” zmóžniś',
 'tog-uselivepreview' => 'Live-pśeglěd wužywaś (JavaScript) (eksperimentelnje)',
 'tog-forceeditsummary' => 'Warnowaś, gaž pśi składowanju zespominanje felujo',
@@ -203,6 +201,7 @@ $messages = array(
 'tog-diffonly' => 'Pśi pśirownowanju wersijow jano rozdźěle pokazaś',
 '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',
 
 'underline-always' => 'pśecej',
 'underline-never' => 'žednje',
@@ -902,6 +901,7 @@ 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ś.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
index 436c90a..5cd073a 100644 (file)
@@ -44,8 +44,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Pokitono ginumu do momomoguno minongintong',
 'tog-oldsig' => 'Sain poinsandad:',
 'tog-fancysig' => 'Pokitono sain sobaagi do tikwiki (ingaa oporian toput )',
-'tog-externaleditor' => 'Pomoguno pongigidit poinlabus sobaagi do pongoiso (montok di angasampin nopo, mongoguno do nuludan pointantu id kompiutonu. [//www.mediawiki.org/wiki/Manual:External_editors Lobi pomoilaan.])',
-'tog-externaldiff' => 'Pomoguno pongigidit poinlabus sobaagi do pongoiso (montok di angasampin nopo, mongoguno do nuludan pointantu id kompiutonu. [//www.mediawiki.org/wiki/Manual:External_editors Lobi pomoilaan.])',
 'tog-showjumplinks' => 'Pasagao "tumopik hilo" noputan awayaan',
 'tog-uselivepreview' => 'Momoguno pongingintong poimpasi (momoguno JawaSikrip) (pogumbalan)',
 'tog-forceeditsummary' => 'Posoroho oku no nung awu nosuangan kutak koinibaan niditan',
@@ -993,14 +991,6 @@ Umbalai momogonop it ihumonnu miampai do ''all:'' mooi do oihum ot oinsanan suan
 Milo ko mogihum maya Googol do daamot.
 Imurai no do indik suang diti {{SITENAME}} nopo nga nokolipas.',
 
-# Quickbar
-'qbsettings' => 'Barposikap',
-'qbsettings-none' => 'Ingaa',
-'qbsettings-fixedleft' => 'Pogolibango',
-'qbsettings-fixedright' => 'Pawanano',
-'qbsettings-floatingleft' => 'Posoibaho gibang',
-'qbsettings-floatingright' => 'Posoibaho wanan',
-
 # Preferences page
 'preferences' => 'Pipilion',
 'mypreferences' => 'Pipilion',
index a425530..80cf53e 100644 (file)
@@ -384,8 +384,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Εμφάνιση του αριθμού των συνδεδεμένων χρηστών',
 'tog-oldsig' => 'Υπάρχουσα υπογραφή:',
 'tog-fancysig' => 'Μεταχείριση υπογραφής ως κώδικα wiki (χωρίς αυτόματο σύνδεσμο)',
-'tog-externaleditor' => 'Χρήση εξωτερικού επεξεργαστή από προεπιλογή (για προχωρημένους μόνο, χρειάζεται ειδικές ρυθμίσεις του υπολογιστή σας. [//www.mediawiki.org/wiki/Manual:External_editors Περισσότερες πληροφορίες.])',
-'tog-externaldiff' => 'Χρήση εξωτερικού diff από προεπιλογή (για προχωρημένους μόνο, χρειάζεται ειδικές ρυθμίσεις του υπολογιστή σας. [//www.mediawiki.org/wiki/Manual:External_editors Περισσότερες πληροφορίες.])',
 'tog-showjumplinks' => 'Ενεργοποίησε τους συνδέσμους προσβασιμότητας του τύπου "μετάβαση σε"',
 'tog-uselivepreview' => 'Χρήση ζωντανής προεπισκόπησης (απαιτεί JavaScript) (πειραματικό)',
 'tog-forceeditsummary' => 'Να ειδοποιούμαι κατά την εισαγωγή κενής σύνοψης επεξεργασίας',
@@ -400,6 +398,7 @@ $messages = array(
 'tog-showhiddencats' => 'Εμφάνιση κρυμμένων κατηγοριών',
 'tog-noconvertlink' => 'Απενεργοποίησε την μετατροπή τίτλου συνδέσμου',
 'tog-norollbackdiff' => 'Παράλειψη διαφοράς μετά την εκτέλεση επαναφοράς',
+'tog-useeditwarning' => 'Προειδοποίηση όταν εγκαταλείπω μία σελίδα επεξεργασίας χωρίς να έχω πρώτα αποθηκεύσει τις αλλαγές',
 
 'underline-always' => 'Πάντα',
 'underline-never' => 'Ποτέ',
@@ -767,9 +766,15 @@ $2',
 'welcomecreation-msg' => 'Ο λογαριασμός σας έχει δημιουργηθεί.
 Μην ξεχάσετε να αλλάξετε τις [[Special:Preferences|{{SITENAME}} προτιμήσεις]] σας.',
 'yourname' => 'Όνομα χρήστη:',
+'userlogin-yourname' => 'Όνομα χρήστη',
+'userlogin-yourname-ph' => 'Εισάγετε το όνομα χρήστη σας',
 'yourpassword' => 'Κωδικός:',
+'userlogin-yourpassword' => 'Κωδικός',
+'userlogin-yourpassword-ph' => 'Εισάγετε τον κωδικό σας',
 'yourpasswordagain' => 'Πληκτρολογήστε ξανά τον κωδικό',
 'remembermypassword' => 'Διατήρηση του κωδικού πρόσβασης σε αυτόν τον υπολογιστή (για μέγιστο $1 {{PLURAL:$1|ημέρα|ημέρες}})',
+'userlogin-remembermypassword' => 'Να με θυμάστε',
+'userlogin-signwithsecure' => 'Συνδεθείτε με ασφαλή διακομιστή',
 'securelogin-stick-https' => 'Μείνετε συνδεδεμένοι με HTTPS μετά την είσοδο',
 'yourdomainname' => 'Το domain σας:',
 'password-change-forbidden' => 'Δεν μπορείτε να αλλάξετε τους κωδικούς πρόσβασης σε αυτό το βίκι.',
@@ -782,12 +787,15 @@ $2',
 'logout' => 'Έξοδος',
 'userlogout' => 'Έξοδος',
 'notloggedin' => 'Δεν έχετε συνδεθεί.',
+'userlogin-noaccount' => 'Δεν έχετε λογαριασμό;',
+'userlogin-joinproject' => 'Συνδεθείτε σε {{SITENAME}}',
 'nologin' => "Δεν έχετε λογαριασμό; '''$1'''.",
 'nologinlink' => 'Δημιουργήστε έναν λογαριασμό',
 'createaccount' => 'Δημιουργία νέου λογαριασμού',
 'gotaccount' => "Έχετε ήδη έναν λογαριασμό; '''$1'''.",
 'gotaccountlink' => 'Είσοδος',
 'userlogin-resetlink' => 'Ξεχάσατε τα στοιχεία σύνδεσής σας;',
+'helplogin-url' => 'Βοήθεια:Σύνδεση',
 'createaccountmail' => 'Χρήση τυχαίου προσωρινού κωδικού πρόσβασης και αποστολή του στη διεύθυνση ηλεκτρονικού ταχυδρομείου που καθορίζεται παρακάτω',
 'createaccountreason' => 'Αιτία:',
 'badretype' => 'Οι κωδικοί που έχετε δηλώσει δεν συμφωνούν μεταξύ τους.',
@@ -879,6 +887,7 @@ $2',
 'passwordreset-text' => 'Συμπληρώστε αυτή τη φόρμα για να επαναφέρετε τον κωδικό σας.',
 'passwordreset-legend' => 'Επαναφορά κωδικού πρόσβασης',
 'passwordreset-disabled' => 'Η επαναφορά κωδικού πρόσβασης έχει απενεργοποιηθεί σε αυτό το wiki',
+'passwordreset-emaildisabled' => "Τα χαρακτηριστικά ηλεκτρονικού ταχυδρομείου έχουν απενεργοποιηθεί σ' αυτό το wiki.",
 'passwordreset-pretext' => '{{PLURAL:$1||Εισάγεται ένα από τα στοιχεία δεδομένων που βλέπετε παρακάτω}}',
 'passwordreset-username' => 'Όνομα χρήστη:',
 'passwordreset-domain' => 'Domain:',
@@ -1109,8 +1118,11 @@ $2
 'edit-already-exists' => 'Δεν ήταν εφικτό να δημιουργηθεί η νέα σελίδα.
 Υπάρχει ήδη.',
 'defaultmessagetext' => 'Προεπιλεγμένο κείμενο μηνύματος',
+'content-failed-to-parse' => 'Απέτυχε η ανάλυση  περιεχομένου του $2 για το μοντέλο $1:$3',
 'invalid-content-data' => 'Μη έγκυρα δεδομένα περιεχομένου',
 'content-not-allowed-here' => 'Το περιεχόμενο «$1» δεν επιτρέπεται στη σελίδα [[$2]]',
+'editwarning-warning' => 'Αφήνοντας αυτή τη σελίδα μπορεί να σας κάνει να χάσετε κάποιες αλλαγές που έχετε κάνει.
+Αν έχετε συνδεθεί, μπορείτε να απενεργοποιήσετε αυτή την προειδοποίηση στο τμήμα "{{int:prefs-editing}}" των προτιμήσεών σας.',
 
 # Content models
 'content-model-wikitext' => 'βικικείμενο',
@@ -1132,6 +1144,10 @@ $2
 'parser-template-loop-warning' => 'Εντοπίστηκε πρότυπο σε βρόχο: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Το όριο του μάκρους της αναδρομής του πρότυπου έχει ξεπεραστεί ($1)',
 'language-converter-depth-warning' => 'Το όριο βάθους του μετατροπέα γλώσσας έχει ξεπεραστεί ($1)',
+'node-count-exceeded-category' => 'Σελίδες υπέρβασης του αριθμού κόμβων',
+'node-count-exceeded-warning' => 'Η σελίδα έχει υπερβεί τον αριθμό κόμβων',
+'expansion-depth-exceeded-category' => 'Σελίδες υπέρβασης της επέκτασης σε βάθος',
+'expansion-depth-exceeded-warning' => 'Η σελίδα υπερέβη το βάθος επέκτασης',
 'converter-manual-rule-error' => 'Εντοπίστηκε σφάλμα σε μη αυτόματο κανόνα μετατροπής γλώσσας',
 
 # "Undo" feature
@@ -1385,15 +1401,7 @@ $1",
 'powersearch-togglenone' => 'Καμία',
 'search-external' => 'Εξωτερική αναζήτηση',
 'searchdisabled' => 'Η αναζήτηση για τον ιστότοπο "{{SITENAME}}" είναι απενεργοποιημένη. Μπορείτε να αναζητήσετε μέσω του Google εν τω μεταξύ. Σημειώστε ότι οι κατάλογοί τους για το περιεχόμενο του ιστοτόπου "{{SITENAME}}" μπορεί να είναι απαρχαιωμένοι.',
-
-# Quickbar
-'qbsettings' => 'Γρήγορη πρόσβαση',
-'qbsettings-none' => 'Καμία',
-'qbsettings-fixedleft' => 'Σταθερά αριστερά',
-'qbsettings-fixedright' => 'Σταθερά δεξιά',
-'qbsettings-floatingleft' => 'Πλανώμενα αριστερά',
-'qbsettings-floatingright' => 'Πλανώμενα δεξιά',
-'qbsettings-directionality' => 'Διορθώθηκε, ανάλογα με τις κατευθύνσεις του σεναρίου εντολών της γλώσσας σας',
+'search-error' => 'Παρουσιάστηκε σφάλμα κατά την αναζήτηση:$1',
 
 # Preferences page
 'preferences' => 'Προτιμήσεις',
@@ -1884,10 +1892,15 @@ $1',
 'backend-fail-contenttype' => 'Δεν μπόρεσε να προσδιοριστεί ο τύπος περιεχομένου του αρχείου για την αποθήκευση σε "$1".',
 'backend-fail-usable' => 'Δεν ήταν δυνατή η ανάγνωση ή εγγραφή του αρχείου "$1" λόγω ανεπαρκών δικαιωμάτων ή απουσίας καταλόγων/φακέλων.',
 
+# File journal errors
+'filejournal-fail-dbconnect' => 'Δεν ήταν δυνατή η σύνδεση με τη βάση δεδομένων εγγραφών για αποθηκευτικό σύστημα υποστήριξης "$1".',
+'filejournal-fail-dbquery' => 'Δεν ήταν δυνατή η ενημέρωση της βάσης δεδομένων εγγραφών για αποθηκευτικό σύστημα υποστήριξης "$1".',
+
 # Lock manager
 'lockmanager-notlocked' => 'Δεν μπορέσατε να  ξεκλειδώσετε το " $1 ". Δεν είναι κλειδωμένο.',
 'lockmanager-fail-closelock' => 'Δεν μπόρεσε να κλείσει το κλειδωμένο αρχείο για "$1".',
 'lockmanager-fail-deletelock' => 'Δεν μπόρεσε να διαγράψει το αρχείο κλειδώματος για το "$1".',
+'lockmanager-fail-acquirelock' => 'Δεν ήταν δυνατή η απόκτηση κλειδώματος για "$1".',
 'lockmanager-fail-openlock' => 'Δεν μπόρεσε να ανοίξει το αρχείο κλειδώματος για το "$1".',
 
 # ZipDirectoryReader
@@ -1932,7 +1945,6 @@ $1',
 'http-read-error' => 'Σφάλμα ανάγνωσης HTTP.',
 'http-timed-out' => 'Ο χρόνος του αιτήματος HTTP έληξε.',
 'http-curl-error' => 'Σφάλμα κατά τη λήψη του URL: $1',
-'http-host-unreachable' => 'Το URL δεν ήταν προσβάσιμο.',
 'http-bad-status' => 'Υπήρξε πρόβλημα κατά τη διάρκεια του αιτήματος HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2087,6 +2099,8 @@ $1',
 Αντιθέτως θα έπρεπε να κατευθύνουν στο κατάλληλο θέμα.<br />
 Μια σελίδα αντιμετωπίζεται ως σελίδα αποσαφήνισης αν χρησιμοποιεί ένα πρότυπο το οποίο συνδέεται από το [[MediaWiki:Disambiguationspage]]",
 
+'pageswithprop-prop' => 'Όνομα ιδιότητας:',
+
 'doubleredirects' => 'Διπλές ανακατευθύνσεις',
 'doubleredirectstext' => 'Αυτή η σελίδα συγκαταλέγει σελίδες οι οποίες ανακατευθύνουν σε άλλες σελίδες ανακατεύθυνσης. Κάθε σειρά περιέχει συνδέσμους προς την πρώτη και τη δεύτερη σελίδα ανακατεύθυνσης, όπως επίσης και την πρώτη αράδα του κειμένου στη δεύτερη σελίδα ανακατεύθυνσης η οποία και είναι, κανονικά, ο πραγματικός προορισμός της ανακατεύθυνσης -εκεί δηλαδή όπου θα έπρεπε να είχατε οδηγηθεί από την αρχή. Τα <del>διεγραμμένα</del> λήμματα έχουν επιλυθεί.',
 'double-redirect-fixed-move' => 'Η [[$1]] έχει μετακινηθεί, τώρα είναι ανακατεύθυνση στην [[$2]]',
@@ -2247,15 +2261,6 @@ $1',
 'listusers-noresult' => 'Δεν βρέθηκε χρήστης.',
 'listusers-blocked' => '(υπό φραγή)',
 
-# Special:ActiveUsers
-'activeusers' => 'Κατάλογος ενεργών χρηστών',
-'activeusers-intro' => 'Αυτή είναι μια λίστα από χρήστες που είχαν κάποιου είδους δραστηριότητα {{PLURAL:$1|την τελευταία $1 μέρα|τις τελευταίες $1 μέρες}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|ενέργεια|ενέργειες}} {{PLURAL:$3|την τελευταία μέρα|τις τελευταίες $3 μέρες}}',
-'activeusers-from' => 'Προβολή χρηστών ξεκινώντας από:',
-'activeusers-hidebots' => 'Απόκρυψη bots',
-'activeusers-hidesysops' => 'Απόκρυψη διαχειριστών',
-'activeusers-noresult' => 'Δεν βρέθηκε χρήστης.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Δικαιώματα ομάδων χρηστών',
 'listgrouprights-summary' => 'Ακόλουθεί μία λίστα με τις ομάδες χρηστών σε αυτό το wiki καθώς και με τα δικαιώματα πρόσβασης αυτών.
@@ -3050,13 +3055,8 @@ $1',
 
 # Stylesheets
 'common.css' => '/* Το τοποθετημένο εδώ CSS θα εφαρμοστεί σε όλα τα skins */',
-'standard.css' => '/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Standard skin */',
-'nostalgia.css' => '/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Nostalgia skin */',
 'cologneblue.css' => '/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Cologne Blue skin */',
 'monobook.css' => '/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Monobook skin */',
-'myskin.css' => '/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του MySkin skin */',
-'chick.css' => '/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Chick skin */',
-'simple.css' => '/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Simple skin */',
 'modern.css' => '/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Modern skin */',
 'vector.css' => '/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Vector skin */',
 'print.css' => '/* Το τοποθετημένο εδώ CSS θα επηρεάσει το αποτέλεσμα της εκτύπωσης */',
@@ -3064,13 +3064,8 @@ $1',
 
 # Scripts
 'common.js' => '/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για όλους τους χρήστες σε κάθε φόρτωση σελίδας. */',
-'standard.js' => '/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Standard skin */',
-'nostalgia.js' => '/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Nostalgia skin */',
 'cologneblue.js' => '/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Cologne Blue skin */',
 'monobook.js' => '/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το MonoBook skin */',
-'myskin.js' => '/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το MySkin skin */',
-'chick.js' => '/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Chick skin */',
-'simple.js' => '/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Simple skin */',
 'modern.js' => '/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Modern skin */',
 'vector.js' => '/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Vector skin */',
 
@@ -3146,10 +3141,6 @@ $1',
 'pageinfo-category-files' => 'Αριθμός αρχείων',
 
 # Skin names
-'skinname-standard' => 'Κλασσικό',
-'skinname-nostalgia' => 'Νοσταλγία',
-'skinname-myskin' => 'ΤοSkinΜου',
-'skinname-simple' => 'Απλό',
 'skinname-modern' => 'Μοντέρνο',
 
 # Patrolling
@@ -3948,6 +3939,8 @@ $5
 'htmlform-submit' => 'Υποβολή',
 'htmlform-reset' => 'Αναστροφή αλλαγών',
 'htmlform-selectorother-other' => 'Άλλο',
+'htmlform-no' => 'Όχι',
+'htmlform-yes' => 'Ναι',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 με υποστήριξη αναζήτησης πλήρους κειμένου',
@@ -3955,7 +3948,7 @@ $5
 
 # New logging system
 'logentry-delete-delete' => '{{GENDER:$1|Ο|Η}} $1 διέγραψε τη σελίδα $3',
-'logentry-delete-restore' => 'Î\9f· $1 αποκατέστησε τη σελίδα $3',
+'logentry-delete-restore' => 'Î\9f\97 $1 αποκατέστησε τη σελίδα $3',
 'logentry-delete-event' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ορατότητα σε {{PLURAL:$5|ένα γεγονός καταγραφής|$5 log events}} στο $3: $4',
 'logentry-delete-revision' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ορατότητα {{PLURAL:$5|μιας έκδοσης|$5 εκδόσεων}} στη σελίδα $3: $4',
 'logentry-delete-event-legacy' => '{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα των καταγραφόμενων συμβάντων στη σελίδα $3',
@@ -3976,12 +3969,12 @@ $5
 'logentry-move-move' => '{{GENDER:$1|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4',
 'logentry-move-move-noredirect' => '{{GENDER:$1|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4 χωρίς να αφήσει ανακατεύθυνση',
 'logentry-move-move_redir' => '{{GENDER:$1|Ο|Η}} $1 μετακίνησε τη σελίδα $3 στη $4 πάνω από την ανανακατεύθυνση',
-'logentry-move-move_redir-noredirect' => '{{GENDER:$1|Ο|Η}} $1 μετακίνησε την σελίδα $3 στην $4 πάνω από ανακατεύθυνση χωρίς να αφήσει ανακατεύθυνση',
-'logentry-patrol-patrol' => '{{GENDER:$1|Ο|Η}} $1 σήμανε την έκδοση $4 της σελίδας $3 ως ελεγμένη',
+'logentry-move-move_redir-noredirect' => '{{GENDER:$2|Ο|Η}} $1 μετακίνησε την σελίδα $3 στην $4 πάνω από μια ανακατεύθυνση χωρίς να αφήσει ανακατεύθυνση',
+'logentry-patrol-patrol' => '{{GENDER:$2|Ο|Η}} $1 επισήμανε την έκδοση $4 της σελίδας $3 ως ελεγμένη',
 'logentry-patrol-patrol-auto' => '{{GENDER:$1|Ο|Η}} $1 αυτόματα σήμανε την έκδοση $4 της σελίδας $3 ως ελεγμένη',
-'logentry-newusers-newusers' => 'Ο λογαριασμός χρήστη $1 δημιουργήθηκε',
-'logentry-newusers-create' => 'Ο λογαριασμός χρήστη $1 δημιουργήθηκε',
-'logentry-newusers-create2' => 'Ο λογαριασμός χρήστη $3 δημιουργήθηκε από {{GENDER:$1|τον|την}} $1',
+'logentry-newusers-newusers' => 'Ο λογαριασμός χρήστη $1 {{GENDER:$2|δημιουργήθηκε}}',
+'logentry-newusers-create' => 'Ο λογαριασμός χρήστη $1 {{GENDER:$2|δημιουργήθηκε}}',
+'logentry-newusers-create2' => 'Ο λογαριασμός χρήστη $3 δημιουργήθηκε από {{GENDER:$2|τον|την}} $1',
 'logentry-newusers-byemail' => 'Ο λογαριασμός χρήστη $3 δημιουργήθηκε από τον $1  και ο κωδικός πρόσβασης εστάλη μέσω ηλεκτρονικού ταχυδρομείου',
 'logentry-newusers-autocreate' => 'Ο λογαριασμός $1 δημιουργήθηκε αυτόματα',
 'logentry-rights-rights' => '{{GENDER:$1|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας για {{GENDER:$3|τον|την}} $3 από $4 σε $5',
index 500488e..f3a0072 100644 (file)
@@ -666,8 +666,6 @@ XHTML id names.
 'tog-shownumberswatching'     => 'Show the number of watching users',
 'tog-oldsig'                  => 'Existing signature:',
 'tog-fancysig'                => 'Treat signature as wikitext (without an automatic link)',
-'tog-externaleditor'          => 'Use external editor by default (for experts only, needs special settings on your computer. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
-'tog-externaldiff'            => 'Use external diff by default (for experts only, needs special settings on your computer. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
 'tog-showjumplinks'           => 'Enable "jump to" accessibility links',
 'tog-uselivepreview'          => 'Use live preview (requires JavaScript) (experimental)',
 'tog-forceeditsummary'        => 'Prompt me when entering a blank edit summary',
@@ -682,6 +680,7 @@ XHTML id names.
 'tog-showhiddencats'          => 'Show hidden categories',
 'tog-noconvertlink'           => 'Disable link title conversion', # only translate this message to other languages if you have to change it
 'tog-norollbackdiff'          => 'Omit diff after performing a rollback',
+'tog-useeditwarning'          => 'Warn me when I leave an edit page with unsaved changes',
 
 'underline-always'  => 'Always',
 'underline-never'   => 'Never',
@@ -1066,73 +1065,83 @@ The administrator who locked it offered this explanation: "$3".',
 'virus-unknownscanner' => 'unknown antivirus:',
 
 # Login and logout pages
-'logouttext'                      => "'''You are now logged out.'''
+'logouttext'                   => "'''You are now logged out.'''
 
 You can continue to use {{SITENAME}} anonymously, or you can <span class='plainlinks'>[$1 log in again]</span> as the same or as a different user.
 Note that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
-'welcomeuser'                     => 'Welcome, $1!',
-'welcomecreation-msg'             => 'Your account has been created.
+'welcomeuser'                  => 'Welcome, $1!',
+'welcomecreation-msg'          => 'Your account has been created.
 Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
-'yourname'                        => 'Username:',
-'yourpassword'                    => 'Password:',
-'yourpasswordagain'               => 'Retype password:',
-'remembermypassword'              => 'Remember my login on this browser (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'securelogin-stick-https'         => 'Stay connected to HTTPS after login',
-'yourdomainname'                  => 'Your domain:',
-'password-change-forbidden'       => 'You cannot change passwords on this wiki.',
-'externaldberror'                 => 'There was either an authentication database error or you are not allowed to update your external account.',
-'login'                           => 'Log in',
-'nav-login-createaccount'         => 'Log in / create account',
-'loginprompt'                     => 'You must have cookies enabled to log in to {{SITENAME}}.',
-'userlogin'                       => 'Log in / create account',
-'userloginnocreate'               => 'Log in',
-'logout'                          => 'Log out',
-'userlogout'                      => 'Log out',
-'userlogout-summary'              => '', # do not translate or duplicate this message to other languages
-'notloggedin'                     => 'Not logged in',
-'nologin'                         => "Don't have an account? $1.",
-'nologinlink'                     => 'Create an account',
-'createaccount'                   => 'Create account',
-'gotaccount'                      => 'Already have an account? $1.',
-'gotaccountlink'                  => 'Log in',
-'userlogin-resetlink'             => 'Forgotten your login details?',
-'createaccountmail'               => 'Use a temporary random password and send it to the email address specified below',
-'createaccountreason'             => 'Reason:',
-'badretype'                       => 'The passwords you entered do not match.',
-'userexists'                      => 'Username entered already in use.
+'yourname'                     => 'Username:',
+'userlogin-yourname'           => 'Username',
+'userlogin-yourname-ph'        => 'Enter your username',
+'yourpassword'                 => 'Password:',
+'userlogin-yourpassword'       => 'Password',
+'userlogin-yourpassword-ph'    => 'Enter your password',
+'yourpasswordagain'            => 'Retype password:',
+'remembermypassword'           => 'Remember my login on this browser (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'userlogin-remembermypassword' => 'Remember me',
+'userlogin-signwithsecure'     => 'Sign in with secure server',
+'securelogin-stick-https'      => 'Stay connected to HTTPS after login',
+'yourdomainname'               => 'Your domain:',
+'password-change-forbidden'    => 'You cannot change passwords on this wiki.',
+'externaldberror'              => 'There was either an authentication database error or you are not allowed to update your external account.',
+'login'                        => 'Log in',
+'nav-login-createaccount'      => 'Log in / create account',
+'loginprompt'                  => 'You must have cookies enabled to log in to {{SITENAME}}.',
+'userlogin'                    => 'Log in / create account',
+'userloginnocreate'            => 'Log in',
+'logout'                       => 'Log out',
+'userlogout'                   => 'Log out',
+'userlogout-summary'           => '', # do not translate or duplicate this message to other languages
+'notloggedin'                  => 'Not logged in',
+'userlogin-noaccount'          => "Don't have an account?",
+'userlogin-joinproject'        => 'Join {{SITENAME}}',
+'nologin'                      => "Don't have an account? $1.",
+'nologinlink'                  => 'Create an account',
+'createaccount'                => 'Create account',
+'gotaccount'                   => 'Already have an account? $1.',
+'gotaccountlink'               => 'Log in',
+'userlogin-resetlink'          => 'Forgotten your login details?',
+'helplogin-url'                => 'Help:Logging in',
+'userlogin-helplink'           => '[[{{MediaWiki:helplogin-url}}|Help with logging in]]',
+'createaccountmail'            => 'Use a temporary random password and send it to the email address specified below',
+'createaccountreason'          => 'Reason:',
+'badretype'                    => 'The passwords you entered do not match.',
+'userexists'                   => 'Username entered already in use.
 Please choose a different name.',
-'loginerror'                      => 'Login error',
-'createaccounterror'              => 'Could not create account: $1',
-'nocookiesnew'                    => 'The user account was created, but you are not logged in.
+'loginerror'                   => 'Login error',
+'createaccounterror'           => 'Could not create account: $1',
+'nocookiesnew'                 => 'The user account was created, but you are not logged in.
 {{SITENAME}} uses cookies to log in users.
 You have cookies disabled.
 Please enable them, then log in with your new username and password.',
-'nocookieslogin'                  => '{{SITENAME}} uses cookies to log in users.
+'nocookieslogin'               => '{{SITENAME}} uses cookies to log in users.
 You have cookies disabled.
 Please enable them and try again.',
-'nocookiesfornew'                 => 'The user account was not created, as we could not confirm its source.
+'nocookiesfornew'              => 'The user account was not created, as we could not confirm its source.
 Ensure you have cookies enabled, reload this page and try again.',
-'nocookiesforlogin'               => '{{int:nocookieslogin}}', # only translate this message to other languages if you have to change it
-'noname'                          => 'You have not specified a valid username.',
-'loginsuccesstitle'               => 'Login successful',
-'loginsuccess'                    => "'''You are now logged in to {{SITENAME}} as \"\$1\".'''",
-'nosuchuser'                      => 'There is no user by the name "$1".
+'nocookiesforlogin'            => '{{int:nocookieslogin}}', # only translate this message to other languages if you have to change it
+'noname'                       => 'You have not specified a valid username.',
+'loginsuccesstitle'            => 'Login successful',
+'loginsuccess'                 => "'''You are now logged in to {{SITENAME}} as \"\$1\".'''",
+'nosuchuser'                   => 'There is no user by the name "$1".
 Usernames are case sensitive.
 Check your spelling, or [[Special:UserLogin/signup|create a new account]].',
-'nosuchusershort'                 => 'There is no user by the name "$1".
+'nosuchusershort'              => 'There is no user by the name "$1".
 Check your spelling.',
-'nouserspecified'                 => 'You have to specify a username.',
-'login-userblocked'               => 'This user is blocked. Login not allowed.',
-'wrongpassword'                   => 'Incorrect password entered.
+'nouserspecified'              => 'You have to specify a username.',
+'login-userblocked'            => 'This user is blocked. Login not allowed.',
+'wrongpassword'                => 'Incorrect password entered.
 Please try again.',
-'wrongpasswordempty'              => 'Password entered was blank.
+'wrongpasswordempty'           => 'Password entered was blank.
 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',
-'passwordremindertitle'           => 'New temporary password for {{SITENAME}}',
-'passwordremindertext'            => 'Someone (probably you, from IP address $1) requested a new
+'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',
+'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
 "$2" has been created and was set to "$3". If this was your
 intent, you will need to log in and choose a new password now.
@@ -1141,53 +1150,53 @@ Your temporary password will expire in {{PLURAL:$5|one day|$5 days}}.
 If someone else made this request, or if you have remembered your password,
 and you no longer wish to change it, you may ignore this message and
 continue using your old password.',
-'noemail'                         => 'There is no email address recorded for user "$1".',
-'noemailcreate'                   => 'You need to provide a valid email address.',
-'passwordsent'                    => 'A new password has been sent to the email address registered for "$1".
+'noemail'                      => 'There is no email address recorded for user "$1".',
+'noemailcreate'                => 'You need to provide a valid email address.',
+'passwordsent'                 => 'A new password has been sent to the email address registered for "$1".
 Please log in again after you receive it.',
-'blocked-mailpassword'            => 'Your IP address is blocked from editing, and so is not allowed to use the password recovery function to prevent abuse.',
-'eauthentsent'                    => 'A confirmation email has been sent to the nominated email address.
+'blocked-mailpassword'         => 'Your IP address is blocked from editing, and so is not allowed to use the password recovery function to prevent abuse.',
+'eauthentsent'                 => 'A confirmation email has been sent to the nominated email address.
 Before any other email is sent to the account, you will have to follow the instructions in the email, to confirm that the account is actually yours.',
-'throttled-mailpassword'          => 'A password reset email has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.
+'throttled-mailpassword'       => 'A password reset email has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.
 To prevent abuse, only one password reset email will be sent per {{PLURAL:$1|hour|$1 hours}}.',
-'loginstart'                      => '', # do not translate or duplicate this message to other languages
-'loginend'                        => '', # do not translate or duplicate this message to other languages
-'loginend-https'                  => '', # do not translate or duplicate this message to other languages
-'signupstart'                     => '{{int:loginstart}}', # do not translate or duplicate this message to other languages
-'signupend'                       => '{{int:loginend}}', # do not translate or duplicate this message to other languages
-'signupend-https'                 => '', # do not translate or duplicate this message to other languages
-'mailerror'                       => 'Error sending mail: $1',
-'acct_creation_throttle_hit'      => 'Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last day, which is the maximum allowed in this time period.
+'loginstart'                   => '', # do not translate or duplicate this message to other languages
+'loginend'                     => '', # do not translate or duplicate this message to other languages
+'loginend-https'               => '', # do not translate or duplicate this message to other languages
+'signupstart'                  => '{{int:loginstart}}', # do not translate or duplicate this message to other languages
+'signupend'                    => '{{int:loginend}}', # do not translate or duplicate this message to other languages
+'signupend-https'              => '', # do not translate or duplicate this message to other languages
+'mailerror'                    => 'Error sending mail: $1',
+'acct_creation_throttle_hit'   => 'Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last day, which is the maximum allowed in this time period.
 As a result, visitors using this IP address cannot create any more accounts at the moment.',
-'emailauthenticated'              => 'Your email address was authenticated on $2 at $3.',
-'emailnotauthenticated'           => 'Your email address is not yet authenticated.
+'emailauthenticated'           => 'Your email address was authenticated on $2 at $3.',
+'emailnotauthenticated'        => 'Your email address is not yet authenticated.
 No email will be sent for any of the following features.',
-'noemailprefs'                    => 'Specify an email address in your preferences for these features to work.',
-'emailconfirmlink'                => 'Confirm your email address',
-'invalidemailaddress'             => 'The email address cannot be accepted as it appears to have an invalid format.
+'noemailprefs'                 => 'Specify an email address in your preferences for these features to work.',
+'emailconfirmlink'             => 'Confirm your email address',
+'invalidemailaddress'          => 'The email address cannot be accepted as it appears to have an invalid format.
 Please enter a well-formatted address or empty that field.',
-'cannotchangeemail'               => 'Account email addresses cannot be changed on this wiki.',
-'emaildisabled'                   => 'This site cannot send emails.',
-'accountcreated'                  => 'Account created',
-'accountcreatedtext'              => 'The user account for $1 has been created.',
-'createaccount-title'             => 'Account creation for {{SITENAME}}',
-'createaccount-text'              => 'Someone created an account for your email address on {{SITENAME}} ($4) named "$2", with password "$3".
+'cannotchangeemail'            => 'Account email addresses cannot be changed on this wiki.',
+'emaildisabled'                => 'This site cannot send emails.',
+'accountcreated'               => 'Account created',
+'accountcreatedtext'           => 'The user account for $1 has been created.',
+'createaccount-title'          => 'Account creation for {{SITENAME}}',
+'createaccount-text'           => 'Someone created an account for your email address on {{SITENAME}} ($4) named "$2", with password "$3".
 You should log in and change your password now.
 
 You may ignore this message, if this account was created in error.',
-'usernamehasherror'               => 'Username cannot contain hash characters',
-'login-throttled'                 => 'You have made too many recent login attempts.
+'usernamehasherror'            => 'Username cannot contain hash characters',
+'login-throttled'              => 'You have made too many recent login attempts.
 Please wait before trying again.',
-'login-abort-generic'             => 'Your login was unsuccessful - Aborted',
-'loginlanguagelabel'              => 'Language: $1',
-'loginlanguagelinks'              => '* {{#language:de}}|de
+'login-abort-generic'          => 'Your login was unsuccessful - Aborted',
+'loginlanguagelabel'           => 'Language: $1',
+'loginlanguagelinks'           => '* {{#language:de}}|de
 * {{#language:en}}|en
 * {{#language:eo}}|eo
 * {{#language:fr}}|fr
 * {{#language:es}}|es
 * {{#language:it}}|it
 * {{#language:nl}}|nl', # do not translate or duplicate this message to other languages
-'suspicious-userlogout'           => 'Your request to log out was denied because it looks like it was sent by a broken browser or caching proxy.',
+'suspicious-userlogout'        => 'Your request to log out was denied because it looks like it was sent by a broken browser or caching proxy.',
 
 # Email sending
 'pear-mail-error'        => '$1', # do not translate or duplicate this message to other languages
@@ -1221,6 +1230,7 @@ You may have already successfully changed your password or requested a new tempo
 'passwordreset-text'               => 'Complete this form to reset your password.',
 'passwordreset-legend'             => 'Reset password',
 'passwordreset-disabled'           => 'Password resets have been disabled on this wiki.',
+'passwordreset-emaildisabled'      => 'Email features have been disabled on this wiki.',
 'passwordreset-pretext'            => '{{PLURAL:$1||Enter one of the pieces of data below}}',
 'passwordreset-username'           => 'Username:',
 'passwordreset-domain'             => 'Domain:',
@@ -1253,7 +1263,7 @@ password.',
 Temporary password: $2',
 'passwordreset-emailsent'          => 'A password reset email has been sent.',
 'passwordreset-emailsent-capture'  => 'A password reset email has been sent, which is shown below.',
-'passwordreset-emailerror-capture' => 'A password reset email was generated, which is shown below, but sending it to the user failed: $1',
+'passwordreset-emailerror-capture' => 'A password reset email was generated, which is shown below, but sending it to the {{GENDER:$2|user}} failed: $1',
 
 # Special:ChangeEmail
 'changeemail'          => 'Change email address',
@@ -1492,6 +1502,8 @@ It already exists.',
 'content-failed-to-parse'          => 'Failed to parse $2 content for $1 model: $3',
 'invalid-content-data'             => 'Invalid content data',
 'content-not-allowed-here'         => '"$1" content is not allowed on page [[$2]]',
+'editwarning-warning'              => 'Leaving this page may cause you to lose any changes you have made.
+If you are logged in, you can disable this warning in the "Editing" section of your preferences.',
 
 # Content models
 'content-model-wikitext'   => 'wikitext',
@@ -1801,10 +1813,10 @@ Note that their indexes of {{SITENAME}} content may be out of date.',
        <input type="radio" name="sitesearch" id="gWWW" value="" /><label for="gWWW">WWW</label>
   </div>
 </form>', # do not translate or duplicate this message to other languages
+'search-error'                     => 'An error has occurred while searching: $1',
 
 # OpenSearch description
 'opensearch-desc' => '{{SITENAME}} ({{CONTENTLANGUAGE}})', # do not translate or duplicate this message to other languages
-'search-error' => 'An error has occurred while searching: $1',
 
 # Preferences page
 'preferences'                   => 'Preferences',
@@ -2383,13 +2395,13 @@ For optimal security, img_auth.php is disabled.',
 'img-auth-bad-query-string' => 'The URL has an invalid query string.',
 
 # HTTP errors
-'http-invalid-url'      => 'Invalid URL: $1',
-'http-invalid-scheme'   => 'URLs with the "$1" scheme are not supported.',
-'http-request-error'    => 'HTTP request failed due to unknown error.',
-'http-read-error'       => 'HTTP read error.',
-'http-timed-out'        => 'HTTP request timed out.',
-'http-curl-error'       => 'Error fetching URL: $1',
-'http-bad-status'       => 'There was a problem during the HTTP request: $1 $2',
+'http-invalid-url'    => 'Invalid URL: $1',
+'http-invalid-scheme' => 'URLs with the "$1" scheme are not supported.',
+'http-request-error'  => 'HTTP request failed due to unknown error.',
+'http-read-error'     => 'HTTP read error.',
+'http-timed-out'      => 'HTTP request timed out.',
+'http-curl-error'     => 'Error fetching URL: $1',
+'http-bad-status'     => 'There was a problem during the HTTP request: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6'       => 'Could not reach URL',
@@ -3882,8 +3894,6 @@ Any subsequent links on the same line are considered to be exceptions, i.e. page
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans', # only translate this message to other languages if you have to change it
index 071c7fc..0d41e46 100644 (file)
@@ -343,8 +343,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Montri la nombron da priatentaj uzantoj',
 'tog-oldsig' => 'Ekzistanta subskribo:',
 'tog-fancysig' => 'Trakti subskribon kiel vikitekston (sen aŭtomata ligo)',
-'tog-externaleditor' => 'Defaŭlte uzi eksteran tekstprilaborilon (nur por ekspertoj, ĉar tio necesigas specialajn agordojn en via komputilo. [//www.mediawiki.org/wiki/Manual:External_editors Pliaj informoj.])',
-'tog-externaldiff' => 'Defaŭlte uzi eksteran ŝanĝmontrilon (nur por ekspertoj, ĉar tio necesigas specialajn agordojn en via komputilo. [//www.mediawiki.org/wiki/Manual:External_editors Pliaj informoj.])',
 'tog-showjumplinks' => 'Ebligi alirligojn "salti al"
 <!-- Bonvolu kontroli ĉu ĝustas la traduko de : Enable "jump to" accessibility links -->',
 'tog-uselivepreview' => 'Uzi tujan antaŭrigardon (ĜavaSkripto) (Eksperimenta)',
@@ -359,6 +357,7 @@ $messages = array(
 'tog-diffonly' => 'Ne montri paĝan enhavon sub la ŝanĝoj',
 'tog-showhiddencats' => 'Montri kaŝitajn kategoriojn',
 'tog-norollbackdiff' => 'Preterlasi ŝanĝoelmontron post malfaro',
+'tog-useeditwarning' => 'Averti min kiam mi forlasas redaktan paĝon kun nekonservitaj ŝanĝoj',
 
 'underline-always' => 'Ĉiam',
 'underline-never' => 'Neniam',
@@ -1096,6 +1095,8 @@ Verŝajne ĝi estis forigita.',
 'content-failed-to-parse' => 'Oni malsukcesis analizi $2-entenon laŭ la $1-modelo: $3',
 'invalid-content-data' => 'Enhavo estas malvalida',
 'content-not-allowed-here' => 'Enhavo de $1 ne estas permesita en paĝo [[$2]]',
+'editwarning-warning' => 'Forlasante ĉi tiun paĝon kaŭzos al vi perdi iun ajn ŝanĝojn kiujn vi faris.
+Se vi ensalutas, vi povas malŝalti ĉi tiun averton en la sekcio "{{int:prefs-editing}}" de viaj preferoj.',
 
 # Content models
 'content-model-wikitext' => 'vikiteksto',
@@ -1380,15 +1381,6 @@ Provu prefiksi vian mendon kun ''all:'' por serĉi ĉiun enhavon (inkluzivante d
 'searchdisabled' => '<p>Oni provizore malŝaltis serĉadon per la plenteksta
 indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> aŭ per <i>jahu!</i>:</p>',
 
-# Quickbar
-'qbsettings' => 'Preferoj pri ilaro',
-'qbsettings-none' => 'Neniu',
-'qbsettings-fixedleft' => 'Fiksiĝas maldekstre',
-'qbsettings-fixedright' => 'Fiksiĝas dekstre',
-'qbsettings-floatingleft' => 'Ŝvebas maldekstre',
-'qbsettings-floatingright' => 'Ŝvebas dekstre',
-'qbsettings-directionality' => 'Fiksita, laŭ la teksto-direkteco de via lingvo',
-
 # Preferences page
 'preferences' => 'Preferoj',
 'mypreferences' => 'Preferoj',
@@ -1929,7 +1921,6 @@ Por optimuma sekureco, img_auth.php estas malŝalta.',
 'http-read-error' => 'HTTP-legeraro.',
 'http-timed-out' => 'HTTP-peto eltempiĝis.',
 'http-curl-error' => 'Eraro venigante URL-on: $1',
-'http-host-unreachable' => 'URL-o ne estis atingebla.',
 'http-bad-status' => 'Estis problemo dum la HTTP-peto: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2251,15 +2242,6 @@ Subtenataj {{PLURAL:$2|protokolo|protokoloj}}:: <code>$1</code> (ne aldonu ĉi t
 'listusers-noresult' => 'Neniu uzanto trovita.',
 'listusers-blocked' => '(forbarita)',
 
-# Special:ActiveUsers
-'activeusers' => 'Listo de aktivaj uzantoj',
-'activeusers-intro' => 'Jen listo de uzantoj kiu faris iom da agoj dum la lastaj $1 {{PLURAL:$1|tago|tagoj}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|redakto|redaktoj}} dum la {{PLURAL:$3|lasta tago|lastaj $3 tagoj}}',
-'activeusers-from' => 'Montri uzantojn ekde:',
-'activeusers-hidebots' => 'kaŝi robotojn',
-'activeusers-hidesysops' => 'Kaŝi administrantojn',
-'activeusers-noresult' => 'Neniuj uzantoj trovitaj.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Gruprajtoj de uzantoj',
 'listgrouprights-summary' => 'Jen listo de uzanto-grupoj difinitaj en ĉi tiu vikio, kun ties asociaj atingrajtoj.
@@ -3059,13 +3041,8 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 
 # Stylesheets
 'common.css' => '/* La jena CSS influos la aspekton de ĉiaj temoj. */',
-'standard.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Klasika temo. */',
-'nostalgia.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Nostalgia temo. */',
 'cologneblue.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Kolonja Blua temo. */',
 'monobook.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Libreja temo. */',
-'myskin.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Miŝela temo. */',
-'chick.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Kokida temo. */',
-'simple.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Simpla temo. */',
 'modern.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Moderna temo. */',
 'vector.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Vektora temo. */',
 'print.css' => '/* La jena CSS influos la prezentadon de la presaĵo. */',
@@ -3078,13 +3055,8 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 
 # Scripts
 'common.js' => '/* La jena Ĝavaskripto ŝargiĝos por ĉiaj uzantoj ĉe ĉiu paĝoŝargado. */',
-'standard.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Klasika temo. */',
-'nostalgia.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Nostalgia temo. */',
 'cologneblue.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Kolonja Blua temo. */',
 'monobook.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Libreja temo. */',
-'myskin.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Miŝela temo. */',
-'chick.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Kokida temo. */',
-'simple.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Simpla temo. */',
 'modern.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Moderna temo. */',
 'vector.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Vektora temo. */',
 'group-autoconfirmed.js' => '/* La jena Ĝavaskripto sole ŝargiĝos por auxtokonfirmataj uzantoj. */',
@@ -3162,13 +3134,8 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 'pageinfo-category-files' => 'Nombro de dosieroj',
 
 # Skin names
-'skinname-standard' => 'Klasiko',
-'skinname-nostalgia' => 'Nostalgio',
 'skinname-cologneblue' => 'Kolonja Bluo',
 'skinname-monobook' => 'Librejo',
-'skinname-myskin' => 'Miŝelo',
-'skinname-chick' => 'Kokido',
-'skinname-simple' => 'Simplo',
 'skinname-modern' => 'Moderno',
 'skinname-vector' => 'Vektoro',
 
index 50cae1b..d144573 100644 (file)
@@ -60,6 +60,7 @@
  * @author Mahadeva
  * @author Manuelt15
  * @author Maor X
+ * @author MarcoAurelio
  * @author McDutchie
  * @author Muro de Aguas
  * @author Omnipaedista
@@ -394,8 +395,6 @@ $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-externaleditor' => 'Utilizar editor externo por defecto (sólo para expertos: son necesarios ajustes especiales en la computadora; [//www.mediawiki.org/wiki/Manual:External_editors más información])',
-'tog-externaldiff' => "Utilizar ''diferencia'' externa por defecto (sólo para expertos: son necesarios ajustes especiales en la computadora; [//www.mediawiki.org/wiki/Manual:External_editors más información])",
 'tog-showjumplinks' => 'Habilitar los enlaces de accesibilidad «saltar a»',
 'tog-uselivepreview' => 'Usar previsualización en vivo (requiere JavaScript) (experimental)',
 'tog-forceeditsummary' => 'Avisarme cuando grabe la página sin introducir un resumen de edición',
@@ -410,6 +409,7 @@ $messages = array(
 'tog-showhiddencats' => 'Mostrar las categorías escondidas',
 'tog-noconvertlink' => 'Desactivar la conversión de título de enlace',
 'tog-norollbackdiff' => "Omitir la ''diferencia'' después de revertir",
+'tog-useeditwarning' => 'Advertirme cuando abandone una página editada con cambios sin grabar',
 
 'underline-always' => 'Siempre',
 'underline-never' => 'Nunca',
@@ -930,7 +930,7 @@ ignorar este mensaje y continuar usando tu contraseña anterior.',
 Contraseña temporal: $2',
 'passwordreset-emailsent' => 'Se ha enviado un correo electrónico para el restablecimiento de tu contraseña.',
 'passwordreset-emailsent-capture' => 'Se ha enviado un correo para el restablecimiento de la contraseña, el cual se muestra a continuación.',
-'passwordreset-emailerror-capture' => 'Se generó un correo electrónico de restablecimiento de contraseña, que se muestra a continuación, pero el envío al usuario falló: $1',
+'passwordreset-emailerror-capture' => 'Se generó un correo electrónico de restablecimiento de contraseña, que se muestra a continuación, pero el envío {{GENDER:$2|al usuario|a la usuaria}} falló. $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Cambiar la dirección de correo electrónico',
@@ -1145,6 +1145,8 @@ Ya existe.',
 'content-failed-to-parse' => 'No se pudo analizar el contenido $2 del modelo $1: $3',
 'invalid-content-data' => 'Datos de contenido inválidos',
 'content-not-allowed-here' => 'El contenido "$1" no está permitido en la página [[$2]]',
+'editwarning-warning' => 'Dejar esta página le causará la pérdida de cualquier cambio que haya hecho.
+Si está "logueado", puede deshabilitar esta advertencia en la sección "{{int:prefs-editing}}" de sus preferencias.',
 
 # Content models
 'content-model-wikitext' => 'texto wiki',
@@ -1431,15 +1433,6 @@ Prueba a usar el prefijo ''all:'' para buscar en todo el contenido (incluyendo p
 'searchdisabled' => 'Las búsquedas en {{SITENAME}} están temporalmente desactivadas.
 Mientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índices relativos a {{SITENAME}} pueden estar desactualizados.',
 
-# Quickbar
-'qbsettings' => 'Quickbar',
-'qbsettings-none' => 'Ninguna',
-'qbsettings-fixedleft' => 'Fija a la izquierda',
-'qbsettings-fixedright' => 'Fija a la derecha',
-'qbsettings-floatingleft' => 'Flotante a la izquierda',
-'qbsettings-floatingright' => 'Flotante a la derecha',
-'qbsettings-directionality' => 'Fijos, dependiendo de la direccionalidad de la escritura de su idioma',
-
 # Preferences page
 'preferences' => 'Preferencias',
 'mypreferences' => 'Preferencias',
@@ -1447,7 +1440,7 @@ Mientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índice
 'prefsnologin' => 'No has iniciado sesión',
 'prefsnologintext' => 'Necesitas <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} iniciar sesión]</span> para establecer las preferencias del usuario.',
 'changepassword' => 'Cambiar contraseña',
-'prefs-skin' => 'Skin',
+'prefs-skin' => 'Apariencia',
 'skin-preview' => 'Previsualizar',
 'datedefault' => 'Sin preferencia',
 'prefs-beta' => 'Características de prueba',
@@ -2736,7 +2729,7 @@ Véase la [[Special:BlockList|lista de bloqueos]] para revisarlo.',
 'blocklist-tempblocks' => 'Ocultar bloqueos temporales',
 'blocklist-addressblocks' => 'Ocultar bloqueos de una sola dirección IP',
 'blocklist-rangeblocks' => 'Ocultar bloqueos de rango',
-'blocklist-timestamp' => 'Marca de tiempo',
+'blocklist-timestamp' => 'Fecha y hora',
 'blocklist-target' => 'Destino',
 'blocklist-expiry' => 'Caduca',
 'blocklist-by' => 'Administrador bloqueante',
@@ -3108,7 +3101,7 @@ Permite añadir una razón al resumen de edición.',
 'tooltip-summary' => 'Introduce un breve resumen',
 
 # Stylesheets
-'common.css' => '/* El CSS colocado en esta página sera aplicado a todas las pieles (skins) */',
+'common.css' => '/* El CSS colocado en esta página será aplicado a todas las apariencias */',
 'cologneblue.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Cologne Blue" */',
 'monobook.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "MonoBook" */',
 'modern.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Modern" */',
@@ -3885,7 +3878,7 @@ También puedes [[Special:EditWatchlist|usar el editor estándar]].',
 'version-parserhooks' => 'Extensiones del analizador sintáctico',
 'version-variables' => 'Variables',
 'version-antispam' => 'Prevención de spam',
-'version-skins' => 'Pieles',
+'version-skins' => 'Apariencias',
 'version-other' => 'Otro',
 'version-mediahandlers' => 'Manejadores multimedia',
 'version-hooks' => 'Extensiones',
index 5873721..7c2b39d 100644 (file)
@@ -320,8 +320,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Näita jälgivate kasutajate hulka',
 'tog-oldsig' => 'Praegune allkiri:',
 'tog-fancysig' => 'Kasuta vikiteksti vormingus allkirja (ilma automaatse lingita kasutajalehele)',
-'tog-externaleditor' => 'Kasuta vaikimisi välist redaktorit (ainult asjatundjatele, tarvis arvuti eriseadistust – [//www.mediawiki.org/wiki/Manual:External_editors lisateave])',
-'tog-externaldiff' => 'Kasuta vaikimisi välist võrdlusvahendit (ainult asjatundjatele, tarvis arvuti eriseadistust – [//www.mediawiki.org/wiki/Manual:External_editors lisateave])',
 'tog-showjumplinks' => 'Kuva lehekülje ülaservas "mine"-lingid',
 'tog-uselivepreview' => 'Kasuta elavat eelvaadet (vaja JavaScripti) (katseline)',
 'tog-forceeditsummary' => 'Nõua redigeerimisel resümee välja täitmist',
@@ -335,6 +333,7 @@ $messages = array(
 'tog-diffonly' => 'Ära näita erinevuste vaate all lehe sisu',
 'tog-showhiddencats' => 'Näita peidetud kategooriaid',
 'tog-norollbackdiff' => 'Ära näita erinevusi pärast tühistamist',
+'tog-useeditwarning' => 'Hoiata mind, kui lahkun redigeerimisleheküljelt muudatusi salvestamata',
 
 'underline-always' => 'Alati',
 'underline-never' => 'Mitte kunagi',
@@ -703,9 +702,15 @@ Pane tähele, et seni kuni sa pole oma võrgulehitseja puhvrit tühjendanud, võ
 'welcomecreation-msg' => 'Sinu konto on loodud.
 Ära unusta seada oma {{GRAMMAR:genitive|{{SITENAME}}}} [[Special:Preferences|eelistusi]].',
 'yourname' => 'Kasutajanimi:',
+'userlogin-yourname' => 'Kasutajanimi',
+'userlogin-yourname-ph' => 'Sisesta oma kasutajanimi',
 'yourpassword' => 'Parool:',
+'userlogin-yourpassword' => 'Parool',
+'userlogin-yourpassword-ph' => 'Sisesta oma parool',
 'yourpasswordagain' => 'Sisesta parool uuesti:',
 'remembermypassword' => 'Jäta parool meelde (kuni $1 {{PLURAL:$1|päevaks|päevaks}})',
+'userlogin-remembermypassword' => 'Pea mind meeles',
+'userlogin-signwithsecure' => 'Logi sisse turvaserveri kaudu',
 'securelogin-stick-https' => 'Jätka pärast sisselogimist HTTPS-ühenduse kasutamist',
 'yourdomainname' => 'Sinu domeen:',
 'password-change-forbidden' => 'Selles vikis ei saa paroole muuta.',
@@ -718,12 +723,16 @@ Pane tähele, et seni kuni sa pole oma võrgulehitseja puhvrit tühjendanud, võ
 'logout' => 'Logi välja',
 'userlogout' => 'Logi välja',
 'notloggedin' => 'Sisse logimata',
+'userlogin-noaccount' => 'Kas sul pole kontot?',
+'userlogin-joinproject' => 'Ühine projektiga {{SITENAME}}',
 'nologin' => "Sul pole kontot? '''$1'''.",
 'nologinlink' => 'Registreeru siin',
 'createaccount' => 'Loo uus konto',
 'gotaccount' => "Kui sul on juba konto, '''$1'''.",
 'gotaccountlink' => 'logi sisse',
 'userlogin-resetlink' => 'Kas oled unustanud oma sisselogimisandmed?',
+'helplogin-url' => 'Help:Sisselogimine',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Sisselogimisabi]]',
 'createaccountmail' => 'Kasuta juhuslikku parooli ja saada see allpool määratud e-posti aadressile',
 'createaccountreason' => 'Põhjus:',
 'badretype' => 'Sisestatud paroolid ei lange kokku.',
@@ -790,6 +799,7 @@ Palun pea nüüd pisut vahet.',
 # Email sending
 'php-mail-error-unknown' => 'Tundmatu tõrge PHP funktsioonis mail().',
 'user-mail-no-addy' => 'Püüdsid saata e-kirja ilma meiliaadressita.',
+'user-mail-no-body' => 'Püüti saata tühja või ebamõistlikult lühikese sisuosaga e-kirja.',
 
 # Change password dialog
 'resetpass' => 'Parooli muutmine',
@@ -816,6 +826,7 @@ Võib-olla oled juba edukalt muudnud oma salasõna või taotlenud uut ajutist sa
 'passwordreset-text' => 'Täida see vorm, et oma parool lähtestada.',
 'passwordreset-legend' => 'Parooli lähtestamine',
 'passwordreset-disabled' => 'Selles vikis on paroolide lähtestamine keelatud.',
+'passwordreset-emaildisabled' => 'E-posti funktsioonid on selles vikis keelatud.',
 'passwordreset-pretext' => '{{PLURAL:$1||Sisesta üks järgmistest andmeüksustest.}}',
 'passwordreset-username' => 'Kasutajanimi:',
 'passwordreset-domain' => 'Domeen:',
@@ -1055,6 +1066,8 @@ See on juba olemas.',
 'defaultmessagetext' => 'Sõnumi vaiketekst',
 'invalid-content-data' => 'Vigased sisuandmed',
 'content-not-allowed-here' => 'Lehekülg [[$2]] ei või sisaldada $1.',
+'editwarning-warning' => 'Sellelt leheküljelt lahkumise tõttu võivad tehtud muudatused kaotsi minna.
+Kui oled sisse loginud, saad selle hoiatuse eelistuste alaosas "{{int:prefs-editing}}" keelata.',
 
 # Content models
 'content-model-wikitext' => 'vikiteksti',
@@ -1333,15 +1346,6 @@ päringu ees prefiksit ''all:''. Konkreetsest nimeruumist otsimiseks kasuta pref
 Vahepeal saad otsimiseks Google'it kasutada.
 Pane tähele, et Google'is talletatud {{GRAMMAR:genitive|{{SITENAME}}}} sisu võib olla iganenud.",
 
-# Quickbar
-'qbsettings' => 'Kiirriba',
-'qbsettings-none' => 'Puudub',
-'qbsettings-fixedleft' => 'Püsivalt vasakul',
-'qbsettings-fixedright' => 'Püsivalt paremal',
-'qbsettings-floatingleft' => 'Ujuvalt vasakul',
-'qbsettings-floatingright' => 'Ujuvalt paremal',
-'qbsettings-directionality' => 'Fikseeritud, tulenevalt sinu keeles kasutatava kirja suunast',
-
 # Preferences page
 'preferences' => 'Eelistused',
 'mypreferences' => 'Eelistused',
@@ -3839,6 +3843,8 @@ Pilt kuvatakse algupärases suuruses, muu fail avatakse koheselt seostuva progra
 'htmlform-submit' => 'Saada',
 'htmlform-reset' => 'Tühista muudatused',
 'htmlform-selectorother-other' => 'Muu',
+'htmlform-no' => 'Ei',
+'htmlform-yes' => 'Jah',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 koos täistekstiotsingu toega',
@@ -3939,15 +3945,15 @@ Kui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajan
 'api-error-verification-error' => 'See fail võib olla rikutud või vale laiendiga.',
 
 # Durations
-'duration-seconds' => '$1 {{PLURAL:$1|sekundi}}',
-'duration-minutes' => '$1 {{PLURAL:$1|minuti}}',
-'duration-hours' => '$1 {{PLURAL:$1|tunni}}',
-'duration-days' => '$1 {{PLURAL:$1|päeva}}',
-'duration-weeks' => '$1 {{PLURAL:$1|nädala}}',
-'duration-years' => '$1 {{PLURAL:$1|aasta}}',
-'duration-decades' => '$1 {{PLURAL:$1|kümnendi}}',
-'duration-centuries' => '$1 {{PLURAL:$1|sajandi}}',
-'duration-millennia' => '$1 {{PLURAL:$1|aastatuhande}}',
+'duration-seconds' => '$1 {{PLURAL:$1|sekund|sekundit}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minut|minutit}}',
+'duration-hours' => '$1 {{PLURAL:$1|tund|tundi}}',
+'duration-days' => '$1 {{PLURAL:$1|päev|päeva}}',
+'duration-weeks' => '$1 {{PLURAL:$1|nädal|nädalat}}',
+'duration-years' => '$1 {{PLURAL:$1|aasta|aastat}}',
+'duration-decades' => '$1 {{PLURAL:$1|kümnend|kümnendit}}',
+'duration-centuries' => '$1 {{PLURAL:$1|sajand|sajandit}}',
+'duration-millennia' => '$1 {{PLURAL:$1|aastatuhat|aastatuhandet}}',
 
 # Image rotation
 'rotate-comment' => 'Pilti pööratud $1 {{PLURAL:$1|kraad|kraadi}} päripäeva',
index c00732a..efcdad2 100644 (file)
@@ -155,8 +155,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Jarraitzen duen erabiltzaile kopurua erakutsi',
 'tog-oldsig' => 'Egungo sinadura:',
 'tog-fancysig' => 'Sinadura wikitestu gisa tratatu (lotura automatikorik gabe)',
-'tog-externaleditor' => 'Lehenetsi bezala kanpoko editore bat erabili (adituentzako bakarrik, zure ordenagailuak konfigurazio berezia izan behar du. [//www.mediawiki.org/wiki/Manual:External_editors Informazio gehiago.])',
-'tog-externaldiff' => 'Lehenetsi bezala kanpoko diff erreminta erabili (adituentzako bakarrik, zure ordenagailuak konfigurazio berezia izan behar du. [//www.mediawiki.org/wiki/Manual:External_editors Informazio gehiago.])',
 'tog-showjumplinks' => '"Hona jo" irisgarritasun loturak gaitu',
 'tog-uselivepreview' => 'Zuzeneko aurrebista erakutsi (JavaScript) (Proba fasean)',
 'tog-forceeditsummary' => 'Aldaketaren laburpena zuri uzterakoan ohartarazi',
@@ -170,6 +168,7 @@ $messages = array(
 'tog-diffonly' => "''Diff''-ak agertzen direnean, orrialdearen edukiera ezkutatu",
 'tog-showhiddencats' => 'Ikusi kategoria ezkutuak',
 'tog-norollbackdiff' => 'Rollback bat egin ondoren ezberdintasunak ez hartu aintzat',
+'tog-useeditwarning' => 'Abisa nazazu gorde gabeko aldaketak eginez orrialde bat uzten dudanean',
 
 'underline-always' => 'Beti',
 'underline-never' => 'Inoiz ez',
@@ -852,6 +851,8 @@ Ez du azalpenik eman.',
 'edit-no-change' => 'Zure edizioa baztertu da testua aldatu ez duzulako.',
 'edit-already-exists' => 'Ezin izan da orri berria sortu.
 Jada existitzen da.',
+'editwarning-warning' => 'Orrialde honetatik irteten bazara, egindako aldaketak galdu egingo dira.
+Saioa hasi baduzu, mezu hau kendu dezakezu zure hobespenen orrialdeko "{{int:prefs-editing}}" atalean.',
 
 # Content models
 'content-model-wikitext' => 'wikitestua',
index 99945a3..a3ecc82 100644 (file)
@@ -459,8 +459,6 @@ $messages = array(
 'tog-shownumberswatching' => 'شمار کاربران پی‌گیری‌کننده نمایش یابد',
 'tog-oldsig' => 'امضای کنونی:',
 'tog-fancysig' => 'امضا به صورت ویکی‌متن در نظر گرفته شود (بدون درج خودکار پیوند)',
-'tog-externaleditor' => 'استفاده از ویرایشگر خارجی به‌طور پیش‌فرض (فقط برای کاربران حرفه‌ای؛ نیازمند تنظیمات ویژه در رایانهٔ شما است. [//www.mediawiki.org/wiki/Manual:External_editors اطلاعات بیشتر].)',
-'tog-externaldiff' => 'استفاده از تفاوت‌گیر (diff) خارجی به‌طور پیش‌فرض (فقط برای کاربران حرفه‌ای؛ نیازمند تنظیمات ویژه در رایانهٔ شما است. [//www.mediawiki.org/wiki/Manual:External_editors اطلاعات بیشتر].)',
 'tog-showjumplinks' => 'پیوندهای دسترسی‌پذیری «پرش به» فعال باشد',
 'tog-uselivepreview' => 'استفاده از پیش‌نمایش زنده (نیازمند جاوااسکریپت) (آزمایشی)',
 'tog-forceeditsummary' => 'هنگامی که خلاصهٔ ویرایش ننوشته‌ام به من اطلاع داده شود',
@@ -475,6 +473,7 @@ $messages = array(
 'tog-showhiddencats' => 'رده‌های پنهان نمایش داده شود',
 'tog-noconvertlink' => 'تبدیل عنوان پیوند غیرفعال شود',
 'tog-norollbackdiff' => 'بعد از واگردانی تفاوت نشان داده نشود',
+'tog-useeditwarning' => 'زمان خروج از صفحهٔ ویرایش در صورت داشتن ویرایش‌های‌ ذخیره‌نشده به من هشدار داده شود',
 
 'underline-always' => 'همیشه',
 'underline-never' => 'هرگز',
@@ -1230,6 +1229,8 @@ $2
 'content-failed-to-parse' => 'عدم موفقیت در تجزیه محتوای $2 برای مدل $1: $3',
 'invalid-content-data' => 'داده محتوای نامعتبر',
 'content-not-allowed-here' => 'محتوای «$1» در صفحهٔ [[$2]] مجاز نیست',
+'editwarning-warning' => 'خروج از این صفحه ممکن است باعث از دست رفتن هرچه نوشته‌اید شود.
+اگر شما با نام کاربری وارد شده‌اید می‌توانید این هشدار را در بخش «در حال ویرایش» ترجیحاتتان بیابید.',
 
 # Content models
 'content-model-wikitext' => 'ویکی‌متن',
index 4a123aa..3c5799b 100644 (file)
@@ -342,8 +342,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Näytä sivua tarkkailevien käyttäjien määrä',
 'tog-oldsig' => 'Nykyinen allekirjoitus',
 'tog-fancysig' => 'Muotoilematon allekirjoitus ilman automaattista linkkiä',
-'tog-externaleditor' => 'Käytä ulkoista tekstieditoria oletuksena. Vain kokeneille käyttäjille, vaatii selaimen asetusten muuttamista. (<span class="plainlinks">[//www.mediawiki.org/wiki/Manual:External_editors Ohje]</span>)',
-'tog-externaldiff' => 'Käytä oletuksena ulkoista työkalua sivun eri versioiden välisten erojen tarkasteluun. Vain kokeneille käyttäjille, vaatii selaimen asetusten muuttamista. (<span class="plainlinks">[//www.mediawiki.org/wiki/Manual:External_editors Ohje]</span>)',
 'tog-showjumplinks' => 'Lisää loikkaa-käytettävyyslinkit sivun alkuun',
 'tog-uselivepreview' => 'Käytä pikaesikatselua (JavaScript) (kokeellinen)',
 'tog-forceeditsummary' => 'Huomauta, jos yhteenvetoa ei ole annettu',
@@ -358,6 +356,7 @@ $messages = array(
 'tog-showhiddencats' => 'Näytä piilotetut luokat',
 'tog-noconvertlink' => 'Älä muunna linkkien otsikoita toiseen kirjoitusjärjestelmään',
 'tog-norollbackdiff' => 'Älä näytä eroavaisuuksia palauttamisen jälkeen',
+'tog-useeditwarning' => 'Varoita minua, kun poistun muokkaussivulta tallentamatta muutoksia',
 
 'underline-always' => 'Aina',
 'underline-never' => 'Ei koskaan',
@@ -724,6 +723,7 @@ Huomaa, että jotkut sivut saattavat näkyä edelleen kuin olisit kirjautunut si
 'yourpassword' => 'Salasana',
 'yourpasswordagain' => 'Salasana uudelleen',
 'remembermypassword' => 'Muista minut (enintään $1 {{PLURAL:$1|päivä|päivää}})',
+'userlogin-remembermypassword' => 'Muista minut',
 'securelogin-stick-https' => 'Jatka salatun yhteyden käyttämistä sisäänkirjautumisen jälkeen',
 'yourdomainname' => 'Verkkonimi',
 'password-change-forbidden' => 'Et voi muuttaa salasanoja tässä wikissä.',
@@ -773,7 +773,7 @@ Jos joku muu on tehnyt tämän pyynnön, tai jos olet muistanut salasanasi ja et
 'passwordsent' => 'Uusi salasana on lähetetty käyttäjän <b>$1</b> sähköpostiosoitteeseen.',
 'blocked-mailpassword' => 'Osoitteellesi on asetettu muokkausesto, joka estää käyttämästä salasanamuistutustoimintoa.',
 'eauthentsent' => 'Varmennussähköposti on lähetetty annettuun sähköpostiosoitteeseen. Muita viestejä ei lähetetä, ennen kuin olet toiminut viestin ohjeiden mukaan ja varmistanut, että sähköpostiosoite kuuluu sinulle.',
-'throttled-mailpassword' => 'Salasanamuistutus on lähetetty {{PLURAL:$1|kuluvan|kuluvien $1}} tunnin aikana. Salasanamuistutuksia lähetään enintään {{PLURAL:$1|tunnin|$1 tunnin}} välein.',
+'throttled-mailpassword' => 'Salasananpalautusviesti on lähetetty {{PLURAL:$1|kuluvan|kuluvien $1}} tunnin aikana. Salasananpalautusviestejä lähetetään enintään {{PLURAL:$1|tunnin|$1 tunnin}} välein.',
 'mailerror' => 'Virhe lähetettäessä sähköpostia: $1',
 'acct_creation_throttle_hit' => 'IP-osoitteestasi on luotu tähän wikiin jo {{PLURAL:$1|yksi tunnus|$1 tunnusta}} päivän aikana, joka suurin sallittu määrä tälle ajalle.
 Tästä johtuen tästä IP-osoitteesta ei voi tällä hetkellä luoda uusia tunnuksia.',
@@ -823,9 +823,10 @@ Olet saattanut jo onnistuneesti vaihtaa salasanasi tai pyytää uutta väliaikai
 
 # Special:PasswordReset
 'passwordreset' => 'Salasanan alustus',
-'passwordreset-text' => 'Saat sähköpostimuistutuksen tunnuksesi tiedoista, kun täytät tämän lomakkeen.',
+'passwordreset-text' => 'Täytä tämä lomake vaihtaaksesi salasanasi.',
 'passwordreset-legend' => 'Salasanan vaihto',
 'passwordreset-disabled' => 'Salasanojen alustus ei ole mahdollista tässä wikissä.',
+'passwordreset-emaildisabled' => 'Sähköpostitoiminnot on poistettu käytöstä tässä wikissä.',
 'passwordreset-pretext' => '{{PLURAL:$1||Kirjoita jokin jäljempänä pyydetty tieto}}',
 'passwordreset-username' => 'Käyttäjätunnus',
 'passwordreset-domain' => 'Verkkotunnus',
@@ -1055,6 +1056,8 @@ Se on jo olemassa.',
 'content-failed-to-parse' => 'Sisältö tyypiltään $2 ei jäsenny tyypiksi $1: $3',
 'invalid-content-data' => 'Virheellinen sisältö',
 'content-not-allowed-here' => 'Sivun [[$2]] sisältö ei voi olla tyyppiä $1.',
+'editwarning-warning' => 'Tältä sivulta poistuminen saattaa aiheuttaa kaikkien tekemiesi muutosten katoamisen.
+Jos olet kirjautuneena sisään, voit poistaa tämän varoituksen käytöstä asetuksissa osiossa ”{{int:prefs-editing}}”.',
 
 # Content models
 'content-model-wikitext' => 'wikiteksti',
@@ -1334,15 +1337,6 @@ Kokeile lisätä haun alkuun ''all:'', niin haku kohdistuu kaikkeen sisältöön
 'search-external' => 'Ulkoinen haku',
 'searchdisabled' => 'Tekstihaku on poistettu toistaiseksi käytöstä suuren kuorman vuoksi. Voit käyttää alla olevaa Googlen hakukenttää sivujen etsimiseen, kunnes haku tulee taas käyttöön. <small>Huomaa, että ulkopuoliset kopiot {{GRAMMAR:genitive|{{SITENAME}}}} sisällöstä eivät välttämättä ole ajan tasalla.</small>',
 
-# Quickbar
-'qbsettings' => 'Pikavalikko',
-'qbsettings-none' => 'Ei mitään',
-'qbsettings-fixedleft' => 'Tekstin mukana, vasen',
-'qbsettings-fixedright' => 'Tekstin mukana, oikea',
-'qbsettings-floatingleft' => 'Pysyen vasemmalla',
-'qbsettings-floatingright' => 'Pysyen oikealla',
-'qbsettings-directionality' => 'Kiinteä, riippuen käyttämäsi kielen kirjoitusjärjestelmän suunnasta',
-
 # Preferences page
 'preferences' => 'Asetukset',
 'mypreferences' => 'Asetukset',
@@ -3859,6 +3853,8 @@ Kuvat näytetään täysikokoisina. Muut tiedostot avataan niille määritetyss
 'htmlform-submit' => 'Lähetä',
 'htmlform-reset' => 'Kumoa muutokset',
 'htmlform-selectorother-other' => 'Muu',
+'htmlform-no' => 'Ei',
+'htmlform-yes' => 'Kyllä',
 
 # SQLite database support
 'sqlite-has-fts' => '$1, jossa on tuki kokotekstihaulle',
index 4d334d2..c9b7854 100644 (file)
@@ -141,8 +141,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Vís tal av brúkarum sum fylgja við',
 'tog-oldsig' => 'Verandi undirskrift:',
 'tog-fancysig' => 'Viðgerð undirskriftina sum wikitekstur (uttan sjálvvirkandi leinkju)',
-'tog-externaleditor' => 'Nýt útvortis ritil sum fyrimynd (bert fyri fólk við serkunnleika, tað er tørvur á serligum innstillingum á tínari teldu. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
-'tog-externaldiff' => 'Nýt útvortis diff sum fyrimynd (bert fyri serfrøðingar, tín telda tørvar serligar innstillingar. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
 'tog-showjumplinks' => 'Ger "far til"-tilgongd virkna',
 'tog-uselivepreview' => 'Nýt "live preview" (tørvar JavaScript) (á royndarstøði)',
 'tog-forceeditsummary' => 'Gev mær boð, um eg ikki havi skrivað ein samandrátt um mína rætting',
@@ -1134,14 +1132,6 @@ Tú kanst royna at brúka ''all:'' sum fyrsta stavilsi fyri at søkja í øllum
 Tú kanst leita via Google ímeðan.
 Legg til merkis, at teirra innihaldsyvirlit av {{SITENAME}} kann vera gamalt og ikki dagført.',
 
-# Quickbar
-'qbsettings' => 'Skundfjøl innstillingar',
-'qbsettings-none' => 'Eingin',
-'qbsettings-fixedleft' => 'Fast vinstru',
-'qbsettings-fixedright' => 'Fast høgru',
-'qbsettings-floatingleft' => 'Flótandi vinstru',
-'qbsettings-floatingright' => 'Flótandi høgra',
-
 # Preferences page
 'preferences' => 'Innstillingar',
 'mypreferences' => 'Innstillingar',
@@ -1528,7 +1518,6 @@ Bert fílu atgongd er loyvd.',
 'http-read-error' => 'HTTP lesifeilur.',
 'http-timed-out' => 'HTTP fyrispurningurin tók ov langa tíð.',
 'http-curl-error' => 'Feilur meðan vit heintaðu URL: $1',
-'http-host-unreachable' => 'Internetadressan er ikki atkomulig.',
 'http-bad-status' => 'Tað hendi ein feilur undir viðgerðini av HTTP fyrispurnininum: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2133,8 +2122,6 @@ Vinarliga vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] o
 'pageinfo-authors' => 'Tal av ymiskum høvundum',
 
 # Skin names
-'skinname-standard' => 'Standardur',
-'skinname-nostalgia' => 'Nostalgiskur',
 'skinname-cologneblue' => 'Cologne-bláur',
 
 # Patrolling
index 3562a45..10a6f50 100644 (file)
@@ -416,8 +416,6 @@ $messages = array(
 'tog-shownumberswatching' => "Afficher le nombre d'utilisateurs qui suivent cette page",
 'tog-oldsig' => 'Signature existante :',
 'tog-fancysig' => 'Traiter la signature comme du wikitexte (sans lien automatique)',
-'tog-externaleditor' => "Utiliser par défaut un éditeur de texte externe (pour les utilisateurs avancés, nécessite des réglages spécifiques sur votre ordinateur, [//www.mediawiki.org/wiki/Manual:External_editors/fr plus d'informations]).",
-'tog-externaldiff' => "Utiliser un comparateur externe par défaut (pour les utilisateurs avancés, nécessite des réglages sur votre ordinateur, [//www.mediawiki.org/wiki/Manual:External_editors/fr plus d'informations]).",
 'tog-showjumplinks' => 'Activer les liens « navigation » et « recherche » en haut de page',
 'tog-uselivepreview' => "Utiliser l'aperçu rapide (nécessite JavaScript) (expérimental)",
 'tog-forceeditsummary' => "M'avertir lorsque je n'ai pas spécifié de résumé de modification",
@@ -432,6 +430,7 @@ $messages = array(
 'tog-showhiddencats' => 'Afficher les catégories cachées',
 'tog-noconvertlink' => 'Désactiver la conversion des titres',
 'tog-norollbackdiff' => "Ne pas afficher le diff lors d'une révocation",
+'tog-useeditwarning' => 'M’avertir quand je quitte une page de modification sans publier les changements',
 
 'underline-always' => 'Toujours',
 'underline-never' => 'Jamais',
@@ -779,9 +778,9 @@ $2",
 'ns-specialprotected' => "Les pages dans l'espace de noms « {{ns:special}} » ne peuvent pas être modifiées.",
 'titleprotected' => "Ce titre a été protégé à la création par [[User:$1|$1]].
 Le motif avancé est « ''$2'' ».",
-'filereadonlyerror' => "Impossible de modifier le fichier « $1 » parce que le répertoire de fichiers « $2 » est en lecture seule.
+'filereadonlyerror' => 'Impossible de modifier le fichier « $1 » parce que le répertoire de fichiers « $2 » est en lecture seule.
 
-L'administrateur qui l'a verrouillé a fourni ce motif: « $3 ».",
+L’administrateur qui l’a verrouillé a fourni ce motif : « $3 ».',
 'invalidtitle-knownnamespace' => "Titre invalide avec l'espace de noms « $2 » et l'intitulé « $3 »",
 'invalidtitle-unknownnamespace' => "Titre invalide avec le numéro d'espace de noms $1 et l'intitulé « $2 » inconnus",
 'exception-nologin' => 'Non connecté',
@@ -801,9 +800,15 @@ Notez que certaines pages peuvent être encore affichées comme si vous étiez t
 'welcomecreation-msg' => "Votre compte a été créé.
 N'oubliez pas de modifier [[Special:Preferences|vos préférences pour {{SITENAME}}]].",
 'yourname' => "Nom d'utilisateur :",
+'userlogin-yourname' => "Nom d'utilisateur",
+'userlogin-yourname-ph' => "Entrez votre nom d'utilisateur",
 'yourpassword' => 'Mot de passe&nbsp;:',
+'userlogin-yourpassword' => 'Mot de passe',
+'userlogin-yourpassword-ph' => 'Entrez votre mot de passe',
 'yourpasswordagain' => 'Confirmez le mot de passe :',
 'remembermypassword' => 'Me reconnecter automatiquement aux prochaines visites avec ce navigateur (au maximum $1&nbsp;{{PLURAL:$1|jour|jours}})',
+'userlogin-remembermypassword' => 'Se souvenir de moi',
+'userlogin-signwithsecure' => "S'inscrire avec un serveur sécurisé",
 'securelogin-stick-https' => 'Rester connecté en HTTPS après la connexion',
 'yourdomainname' => 'Votre domaine :',
 'password-change-forbidden' => 'Vous ne pouvez pas modifier les mots de passe sur ce wiki.',
@@ -816,12 +821,16 @@ N'oubliez pas de modifier [[Special:Preferences|vos préférences pour {{SITENAM
 'logout' => 'Se déconnecter',
 'userlogout' => 'Déconnexion',
 'notloggedin' => 'Non connecté',
+'userlogin-noaccount' => "Vous n'avez pas de compte ?",
+'userlogin-joinproject' => 'Rejoignez {{SITENAME}}',
 'nologin' => "Vous n'êtes pas encore inscrit ? $1.",
 'nologinlink' => 'Créer un compte',
 'createaccount' => 'Créer un compte',
 'gotaccount' => "Vous avez déjà un compte ? '''$1'''.",
 'gotaccountlink' => 'Connectez-vous',
 'userlogin-resetlink' => 'Vous avez oublié vos détails de connexion ?',
+'helplogin-url' => 'Help:Connexion',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Aide à la connexion]]',
 'createaccountmail' => 'Utiliser un mot de passe aléatoire temporaire et l’envoyer à l’adresse de courriel spécifiée ci-dessous',
 'createaccountreason' => 'Motif :',
 'badretype' => 'Les mots de passe que vous avez saisis ne correspondent pas.',
@@ -918,6 +927,7 @@ Vous avez peut-être déjà changé votre mot de passe ou demandé un nouveau mo
 'passwordreset-text' => 'Remplissez ce formulaire pour réinitialiser votre mot de passe.',
 'passwordreset-legend' => 'Remise à zéro du mot de passe',
 'passwordreset-disabled' => 'La réinitialisation des mots de passe a été désactivée sur ce wiki.',
+'passwordreset-emaildisabled' => 'Les fonctionnalités e-mail ont été désactivées sur ce wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Entrez un élément de données ci-dessous}}',
 'passwordreset-username' => "Nom d'utilisateur :",
 'passwordreset-domain' => 'Domaine :',
@@ -939,7 +949,7 @@ $2
 Mot de passe temporaire : $2",
 'passwordreset-emailsent' => 'Un courriel de réinitialisation de mot de passe a été envoyé.',
 'passwordreset-emailsent-capture' => 'Un courriel de réinitialisation de mot de passe a été envoyé, qui est affiché ci-dessous.',
-'passwordreset-emailerror-capture' => "Un courriel de réinitialisation de mot de passe a été généré, qui est affiché ci-dessous, mais l'envoi à l'utilisateur a échoué : $1",
+'passwordreset-emailerror-capture' => "Un courriel de réinitialisation de mot de passe a été généré, qui est affiché ci-dessous, mais l'envoi à l'{{GENDER:$2|utilisateur}} a échoué : $1",
 
 # Special:ChangeEmail
 'changeemail' => "Changer l'adresse de courriel",
@@ -949,7 +959,7 @@ Mot de passe temporaire : $2",
 'changeemail-oldemail' => 'Adresse de courriel actuelle :',
 'changeemail-newemail' => 'Nouvelle adresse de courriel :',
 'changeemail-none' => '(aucune)',
-'changeemail-password' => 'Votre mot de passe sur {{SITENAME}}:',
+'changeemail-password' => 'Votre mot de passe sur {{SITENAME}} :',
 'changeemail-submit' => "Changer l'adresse de courriel",
 'changeemail-cancel' => 'Annuler',
 
@@ -1153,6 +1163,8 @@ Elle existe déjà.",
 'content-failed-to-parse' => "Échec de l'analyse du contenu de $2 pour le modèle $1: $3",
 'invalid-content-data' => 'Données du contenu non valides',
 'content-not-allowed-here' => 'Le contenu "$1" n\'est pas autorisé sur la page [[$2]]',
+'editwarning-warning' => 'Quitter cette page vous fera perdre toutes les modifications que vous avez faites.
+Si vous êtes connecté avec votre compte, vous pouvez retirer cet avertissement dans la section « {{int:prefs-editing}} » de vos préférences.',
 
 # Content models
 'content-model-wikitext' => 'wikitexte',
@@ -1509,7 +1521,7 @@ Voici une valeur générée aléatoirement que vous pouvez utiliser : $1',
 'prefs-emailconfirm-label' => 'Confirmation du courriel :',
 'prefs-textboxsize' => 'Taille de la fenêtre de modification',
 'youremail' => 'Courriel :',
-'username' => "{{GENDER:$1|Nom d'utilisateur|Nom d'utilisatrice}}:",
+'username' => "{{GENDER:$1|Nom d'utilisateur|Nom d'utilisatrice}} :",
 'uid' => "Numéro d'{{GENDER:$1|utilisateur|utilisatrice}}:",
 'prefs-memberingroups' => '{{GENDER:$2|Membre}} {{PLURAL:$1|du groupe|des groupes}}:',
 'prefs-registration' => "Date d'inscription :",
@@ -1982,7 +1994,7 @@ Pour une sécurité optimale, img_auth.php est désactivé.",
 
 # HTTP errors
 'http-invalid-url' => 'URL incorrecte : $1',
-'http-invalid-scheme' => 'Les URL avec le schéma « $1 » ne sont pas supportées.',
+'http-invalid-scheme' => 'Les URL avec le schéma « $1 » ne sont pas prises en charge.',
 'http-request-error' => "Erreur inconnue lors de l'envoi de la requête.",
 'http-read-error' => 'Erreur de lecture HTTP.',
 'http-timed-out' => 'La requête HTTP a expiré.',
@@ -2986,7 +2998,7 @@ Toutes les actions d'importation inter-wiki sont consignées dans l'[[Special:Lo
 'import-interwiki-templates' => 'Inclure tous les modèles',
 'import-interwiki-submit' => 'Importer',
 'import-interwiki-namespace' => 'Espace de noms de destination :',
-'import-interwiki-rootpage' => 'Page racine de destination (optionnelle):',
+'import-interwiki-rootpage' => 'Page racine de destination (optionnelle) :',
 'import-upload-filename' => 'Nom du fichier :',
 'import-comment' => 'Commentaire :',
 'importtext' => "Veuillez exporter le fichier depuis le wiki d'origine en utilisant son [[Special:Export|outil d'exportation]].
@@ -3020,12 +3032,12 @@ Un dossier temporaire est manquant.",
 'import-error-edit' => "La page « $1 » n'a pas été importée parce que vous n'êtes pas autorisés à la modifier.",
 'import-error-create' => "La page « $1 » n'a pas été importée parce que vous n'êtes pas autorisés à la créer.",
 'import-error-interwiki' => "La page « $1 » n'est pas importée parce que son nom est réservé pour un lien externe (interwiki).",
-'import-error-special' => 'La page " $1 " n\'est pas importée parce qu\'elle appartient à un espace de noms special qui n\'en autorise aucune.',
+'import-error-special' => 'La page « $1 » n’est pas importée parce qu’elle appartient à un espace de noms spécial qui n’en autorise aucune.',
 'import-error-invalid' => "Page « $1 » n'est pas importée parce que son nom n'est pas valide.",
-'import-error-unserialize' => 'La révision $2 de la page "$1" ne peut pas être désérialisée. La révision est indiquée comme utilisant le modèle de contenu $3 sérialisé en $4.',
-'import-options-wrong' => '{{PLURAL:$2|Mauvaise option|Mauvaises options}}: <nowiki>$1</nowiki>',
+'import-error-unserialize' => 'La révision $2 de la page « $1 » ne peut pas être désérialisée. La révision est indiquée comme utilisant le modèle de contenu $3 sérialisé en $4.',
+'import-options-wrong' => '{{PLURAL:$2|Mauvaise option|Mauvaises options}} : <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'La page racine fournie est un titre non valide.',
-'import-rootpage-nosubpage' => 'L\'espace de noms "$1" de la page racine n\'autorise pas les sous-pages.',
+'import-rootpage-nosubpage' => 'L’espace de noms « $1 » de la page racine n’autorise pas les sous-pages.',
 
 # Import log
 'importlogpage' => 'Journal des importations',
@@ -3039,7 +3051,7 @@ Un dossier temporaire est manquant.",
 'javascripttest' => 'Test de JavaScript',
 'javascripttest-title' => 'Exécution des tests $1',
 'javascripttest-pagetext-noframework' => "Cette page est réservée pour l'exécution des tests JavaScript.",
-'javascripttest-pagetext-unknownframework' => 'Structure "$1" inconnue.',
+'javascripttest-pagetext-unknownframework' => 'Structure « $1 » inconnue.',
 'javascripttest-pagetext-frameworks' => "Veuillez choisir l'une des structures de test suivantes : $1",
 'javascripttest-pagetext-skins' => 'Choisissez un habillage avec lequel lancer les tests :',
 'javascripttest-qunit-intro' => 'Voir [$1 la documentation de test] sur mediawiki.org.',
@@ -3259,7 +3271,7 @@ Si vous l'exécutez, votre système peut être compromis.",
 'widthheightpage' => '$1 × $2, $3 page{{PLURAL:$3||s}}',
 'file-info' => 'Taille du fichier : $1, type MIME : $2',
 'file-info-size' => '$1 × $2 pixels, taille du fichier : $3, type MIME : $4',
-'file-info-size-pages' => '$1 × $2 pixels, taille de fichier: $3, type MIME: $4, $5 {{PLURAL:$5|page|pages}}',
+'file-info-size-pages' => '$1 × $2 pixels, taille de fichier : $3, type MIME : $4, $5 page{{PLURAL:$5||s}}',
 'file-nohires' => 'Pas de plus haute résolution disponible.',
 'svg-long-desc' => 'Fichier SVG, résolution de $1 × $2 pixels, taille : $3',
 'svg-long-desc-animated' => 'Fichier SVG animé, taille $1 x $2 pixels, taille du fichier: $3',
@@ -3271,10 +3283,10 @@ Si vous l'exécutez, votre système peut être compromis.",
 'file-info-gif-looped' => 'en boucle',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|image|images}}',
 'file-info-png-looped' => 'en boucle',
-'file-info-png-repeat' => 'joué $1 {{PLURAL:$1|fois|fois}}',
+'file-info-png-repeat' => 'joué $1 {{PLURAL:$1|fois}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|image|images}}',
-'file-no-thumb-animation' => "'''Remarque: En raison de limitations techniques, les vignettes de ce fichier ne seront pas animées.'''",
-'file-no-thumb-animation-gif' => "'''Remarque: En raison de limitations techniques, les vignettes d'images GIF en haute résolution telles que celle-ci ne seront pas animées.'''",
+'file-no-thumb-animation' => "'''Remarque : En raison de limitations techniques, les vignettes de ce fichier ne seront pas animées.'''",
+'file-no-thumb-animation-gif' => "'''Remarque : En raison de limitations techniques, les vignettes d’images GIF en haute résolution telles que celle-ci ne seront pas animées.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerie des nouveaux fichiers',
@@ -4039,7 +4051,7 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 
 # Special:BlankPage
 'blankpage' => 'Page vide',
-'intentionallyblankpage' => 'Cette page est laissée intentionellement vide.',
+'intentionallyblankpage' => 'Cette page est laissée intentionnellement (presque) vide.',
 
 # External image whitelist
 'external_image_whitelist' => " #Laisser cette ligne exactement telle quelle.<pre>
@@ -4096,6 +4108,8 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'htmlform-submit' => 'Soumettre',
 'htmlform-reset' => 'Défaire les modifications',
 'htmlform-selectorother-other' => 'Autre',
+'htmlform-no' => 'Non',
+'htmlform-yes' => 'Oui',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 avec recherche en texte intégral supportée',
@@ -4145,7 +4159,7 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'feedback-cancel' => 'Annuler',
 'feedback-submit' => 'Envoyer vos commentaires',
 'feedback-adding' => 'Ajout de vos commentaires à la page...',
-'feedback-error1' => "Erreur : Résultat de l'API non reconnu",
+'feedback-error1' => 'Erreur : Résultat de l’IPA non reconnu',
 'feedback-error2' => 'Erreur : la modification a échoué',
 'feedback-error3' => "Erreur : aucune réponse de l'API",
 'feedback-thanks' => 'Merci ! Votre commentaire a été publié sur la page "[$2 $1]".',
index 0b0f09a..e9ca509 100644 (file)
@@ -338,8 +338,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Montrar lo nombro d’utilisators que siuvont na pâge',
 'tog-oldsig' => 'Signatura ègzistenta :',
 'tog-fancysig' => 'Trètar la signatura coment de vouiquitèxto (sen lim ôtomatico)',
-'tog-externaleditor' => 'Empleyér per dèfôt un changior de tèxto de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
-'tog-externaldiff' => 'Empleyér per dèfôt un comparator de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
 'tog-showjumplinks' => 'Activar los lims d’accèssibilitât « {{int:jumpto}} »',
 'tog-uselivepreview' => 'Empleyér l’apèrçu rapido (at fôta de JavaScript) (èxpèrimentâl)',
 'tog-forceeditsummary' => 'Mè balyér na semonce quand j’é pas buchiê de rèsumâ de changement',
@@ -354,6 +352,7 @@ $messages = array(
 'tog-showhiddencats' => 'Montrar les catègories cachiêes',
 'tog-noconvertlink' => 'Dèsactivar la convèrsion des titros des lims',
 'tog-norollbackdiff' => 'Pas fâre vêre la dif pendent na rèvocacion',
+'tog-useeditwarning' => 'M’avèrtir quand quito una pâge de changement sen sôvar los changements',
 
 'underline-always' => 'Tojorn',
 'underline-never' => 'Jamés',
@@ -1114,6 +1113,8 @@ Semble que seye étâye suprimâye.',
 'content-failed-to-parse' => 'Falyita de l’analisa du contegnu de $2 por lo modèlo $1 : $3',
 'invalid-content-data' => 'Balyês du contegnu pas justes',
 'content-not-allowed-here' => 'Lo contegnu « $1 » est pas ôtorisâ sur la pâge [[$2]]',
+'editwarning-warning' => 'Quitar ceta pâge vos farat pèrdre tôs los changements que vos éd fêts.
+Se vos éte branchiê, vos pouede enlevar ceti avèrtissement dens la sèccion « Fenétra d’èdicion » de voutres prèferences.',
 
 # Content models
 'content-model-wikitext' => 'vouiquitèxto',
@@ -1403,15 +1404,6 @@ Vos pouede trovar més de dètalys sur lo [{{fullurl:{{#Special:Log}}/delete|pag
 Pendent cél temps, vos pouede fâre na rechèrche avouéc Google.
 Notâd que lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
 
-# Quickbar
-'qbsettings' => 'Bârra rapida',
-'qbsettings-none' => 'Pas yona',
-'qbsettings-fixedleft' => 'Fix’a gôche',
-'qbsettings-fixedright' => 'Fix’a drêta',
-'qbsettings-floatingleft' => 'Fllotent’a gôche',
-'qbsettings-floatingright' => 'Fllotent’a drêta',
-'qbsettings-directionality' => 'Fixa, d’aprés la dirèccionalitât d’ècritura de voutra lengoua',
-
 # Preferences page
 'preferences' => 'Prèferences',
 'mypreferences' => 'Prèferences',
@@ -1980,7 +1972,6 @@ Por na sècuritât pèrfèta, img_auth.php est dèsactivâ.',
 'http-read-error' => 'Fôta de lèctura HTTP.',
 'http-timed-out' => 'La demanda HTTP at èxpirâ.',
 'http-curl-error' => 'Fôta pendent la rècupèracion de l’URL : $1',
-'http-host-unreachable' => 'Y at pas moyen d’avengiér l’URL.',
 'http-bad-status' => 'Y at avu un problèmo pendent la demanda HTTP : $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3124,13 +3115,8 @@ Pèrmèt de rètablir la vèrsion devant et pués d’apondre una rêson dens la
 
 # Stylesheets
 'common.css' => '/* Lo code CSS betâ ique serat aplicâ a tôs los habelyâjos. */',
-'standard.css' => '/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « Estandârd ». */',
-'nostalgia.css' => '/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « Cafârd ». */',
 'cologneblue.css' => '/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « Blu de Cologne ». */',
 'monobook.css' => '/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « MonoBook ». */',
-'myskin.css' => '/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « MonHabelyâjo ». */',
-'chick.css' => '/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « Pugin ». */',
-'simple.css' => '/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « Simplo ». */',
 'modern.css' => '/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « Modèrno ». */',
 'vector.css' => '/* Lo code CSS betâ ique afècterat los usanciérs de l’habelyâjo « Vèctor ». */',
 'print.css' => '/* Lo code CSS betâ ique afècterat les emprèssions. */',
@@ -3143,13 +3129,8 @@ Pèrmèt de rètablir la vèrsion devant et pués d’apondre una rêson dens la
 
 # Scripts
 'common.js' => '/* Tot code JavaScript betâ ique serat chargiê per tôs los usanciérs avouéc châque chargement de pâge. */',
-'standard.js' => '/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « Estandârd ». */',
-'nostalgia.js' => '/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « Cafârd ». */',
 'cologneblue.js' => '/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « Blu de Cologne ». */',
 'monobook.js' => '/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « MonoBook ». */',
-'myskin.js' => '/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « MonHabelyâjo ». */',
-'chick.js' => '/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « Pugin ». */',
-'simple.js' => '/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « Simplo ». */',
 'modern.js' => '/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « Modèrno ». */',
 'vector.js' => '/* Tot code JavaScript betâ ique serat chargiê per los usanciérs de l’habelyâjo « Vèctor ». */',
 'group-autoconfirmed.js' => '/* Tot code JavaScript betâ ique serat chargiê ren que por los usanciérs encartâs. */',
@@ -3220,13 +3201,8 @@ O est probâblament diu a un lim de vers un seto de defôr qu’aparêt sur la l
 'pageinfo-protect-cascading-yes' => 'Ouè',
 
 # Skin names
-'skinname-standard' => 'Estandârd',
-'skinname-nostalgia' => 'Cafârd',
 'skinname-cologneblue' => 'Blu de Cologne',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MonHabelyâjo',
-'skinname-chick' => 'Pugin',
-'skinname-simple' => 'Simplo',
 'skinname-modern' => 'Modèrno',
 'skinname-vector' => 'Vèctor',
 
index b48f940..81b35f8 100644 (file)
@@ -48,9 +48,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Wis di tål foon wåchende brükere',
 'tog-oldsig' => 'Aktuel signatuur:',
 'tog-fancysig' => 'Signatuur behoonle ås wikitäkst',
-'tog-externaleditor' => 'Gewöönlik äksterne ediitor for färsjoonsunerschiise brüke (bloot for ekspärte, deer mönje spetsjäle önjstalinge aw di äine kompjuuter fornümen wårde
-[//www.mediawiki.org/wiki/Manual:External_editors Mör informatsjoone.])',
-'tog-externaldiff' => 'Gewöönlik äkstern program for färsjoonsunerschiise brüke (bloot for ekspärte, deer mönje spetsjäle önjstalinge aw di äine kompjuuter fornümen wårde[//www.mediawiki.org/wiki/Manual:External_editors Mör informatsjoone.])',
 'tog-showjumplinks' => '"Schafte tu"-ferbininge aktiwiire',
 'tog-uselivepreview' => 'Live-forbekiik ferwiinje (brükt JavaScript) (äksperimentäl)',
 'tog-forceeditsummary' => 'Woorschoue, wan bai dåt spiikern jü tuhuupefooting breecht',
@@ -64,6 +61,7 @@ $messages = array(
 'tog-diffonly' => 'Wis bai di fersjoonsferglik bloot da unerschiise, ai jü hiilj sid',
 'tog-showhiddencats' => 'Wis ferstäägene kategoriie',
 'tog-norollbackdiff' => 'Unerschiis eefter dåt tübäägseeten unerdrüke',
+'tog-useeditwarning' => 'Waarskaue mi, wan en sidj slööden woort, huar noch ünseekert feranrangen maaget wurden san',
 
 'underline-always' => 'Åltens',
 'underline-never' => 'uler',
@@ -793,6 +791,8 @@ Dåt bestöö ål.',
 'content-failed-to-parse' => "Parsing faan $2 för't model $1 ging skiaf: $3",
 'invalid-content-data' => 'Diar stäänt wat uun, wat diar ei hen hiart',
 'content-not-allowed-here' => '„$1“ mut ei skrewen wurd üüb sidj [[$2]]',
+'editwarning-warning' => 'Wan dü detheer sidj slotst, kön feranrangen ferleesen gung.
+Üs uunmeldet brüker könst dü detheer wäärnang bi din iinstelangen oner „Bewerke“ wechknipse.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
index 15a1cfd..f5bebb2 100644 (file)
@@ -141,11 +141,10 @@ $messages = array(
 'tog-enotifrevealaddr' => 'Distapone fûr il gno recapit email tai messaçs di notifiche',
 'tog-shownumberswatching' => 'Mostre il numar di utents che a stan tignint di voli',
 'tog-fancysig' => 'Interprete lis firmis come test wiki (cence un leam automatic)',
-'tog-externaleditor' => 'Dopre un editôr esterni come opzion predeterminade (dome par utents esperts, a coventin impuestazions specifichis, [//www.mediawiki.org/wiki/Manual:External_editors cjale culì par altris informazions.])',
-'tog-externaldiff' => 'Dopre editôr difarencis esterni come opzion predeterminade',
 'tog-watchlisthideown' => 'Plate i miei cambiaments inte liste des pagjinis tignudis di voli',
 'tog-ccmeonemails' => 'Mandimi une copie dai messaçs che o mandi ai altris utents',
 'tog-showhiddencats' => 'Mostre categoriis platadis',
+'tog-useeditwarning' => 'Visimi cuant che o stoi par lassâ une pagjine dulà che a son cambiaments no salvâts',
 
 'underline-always' => 'Simpri',
 'underline-never' => 'Mai',
@@ -229,7 +228,7 @@ $messages = array(
 'cancel' => 'Scancele',
 'moredotdotdot' => 'Plui...',
 'mypage' => 'Mê pagjine',
-'mytalk' => 'Mês discussions',
+'mytalk' => 'Discussions',
 'anontalk' => 'Discussion par chest IP',
 'navigation' => 'somari',
 'and' => '&#32;e',
@@ -546,12 +545,13 @@ La password par cheste identitât e pues jessi cambiade su la pagjine ''[[Specia
 Tu puedis [[Special:Search/{{PAGENAME}}|cirî chest titul]] in altris pagjinis o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cirî i regjistris leâts],
 o ben [{{fullurl:{{FULLPAGENAME}}|action=edit}} cambiâ cheste pagjine]</span>.',
 'noarticletext-nopermission' => 'Par cumò nol è nuie in cheste pagjine.
-Tu puedis [[Special:Search/{{PAGENAME}}|cirî chest titul]] in altris pagjinis o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cirî i regjistris leâts].',
+Tu puedis [[Special:Search/{{PAGENAME}}|cirî chest titul]] in altris pagjinis o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cirî i regjistris leâts]</span>, ma no tu âs a vonde permès par creâ cheste pagjine.',
 'userpage-userdoesnotexist' => 'La identitât "<nowiki>$1</nowiki>" no je di un utent regjistrât. Controle che tu vuelis pardabon creâ o modificâ cheste pagjine.',
 'clearyourcache' => "'''Ocjo: dopo vê salvât, tu podaressis scugnî netâ la cache dal to sgarfadôr par viodi i cambiaments.''' Par '''Mozilla / Firefox / Safari''': frache ''Torne a cjamâ'' tignint jù ancje il tast des maiusculis, o se no frache ''Ctrl-F5'' o ''Ctrl-R'' (''Command-R'' su Mac); par '''Konqueror''': frache ''Reload'' o il tast ''F5''; par '''Opera''' al pues jessi necessari disvuedâ dal dut la cache doprant il menù ''Tools → Preferencis''; par '''Internet Explorer:''' ten fracât il tast ''Ctrl'' cuant che tu cjalcjis su ''Aggiorna'' o frache ''Ctrl-F5''.",
 'updated' => '(Inzornât)',
 'note' => "'''Note:'''",
-'previewnote' => "'''Visiti che cheste e je dome une anteprime, e no je stade ancjemò salvade!'''",
+'previewnote' => "'''Visiti che cheste e je dome une anteprime.'''
+I tiei cambiaments no son stâts ancjemò salvâts!",
 'editing' => 'Cambiament di $1',
 'editingsection' => 'Cambiament di $1 (sezion)',
 'editingcomment' => 'Cambiament di $1 (gnove sezion)',
@@ -703,17 +703,9 @@ Leiende: (cur) = difarencis cun la version atuâl, (prec) = difarencis cun la ve
 'search-external' => 'Ricercje esterne',
 'searchdisabled' => 'La ricercje in {{SITENAME}} no je ative. Tu puedis doprâ Google intant. Sta atent che lis lôr tabelis sul contignût di {{SITENAME}} a puedin jessi pôc inzornadis.',
 
-# Quickbar
-'qbsettings' => 'Sbare svelte',
-'qbsettings-none' => 'Nissune',
-'qbsettings-fixedleft' => 'Fis a Çampe',
-'qbsettings-fixedright' => 'Fis a Drete',
-'qbsettings-floatingleft' => 'Flutuant a çampe',
-'qbsettings-floatingright' => 'Flutuant a diestre',
-
 # Preferences page
 'preferences' => 'Preferencis',
-'mypreferences' => 'mês preferencis',
+'mypreferences' => 'Preferencis',
 'prefs-edits' => 'Numar di cambiaments fats:',
 'prefsnologin' => 'No tu sês jentrât',
 'changepassword' => 'Gambie peraule clâf',
@@ -936,7 +928,7 @@ Par includi une figure intune pagjine, dopre un leam inte form
 'filehist-dimensions' => 'Dimensions',
 'filehist-filesize' => 'Dimension dal file',
 'filehist-comment' => 'Coment',
-'imagelinks' => 'Leams ae figure',
+'imagelinks' => 'Ûs dal file',
 'linkstoimage' => '{{PLURAL:$1|La pagjine ca sot e je leade|Lis $1 pagjinis ca sot a son leadis}} a cheste figure:',
 'nolinkstoimage' => 'No son pagjinis leadis a chest file.',
 'sharedupload' => 'Chest file al è ven di $1 e al pues jessi doprât di altris progjets.',
@@ -1043,7 +1035,7 @@ La descrizion su la sô [$2 pagjine di descrizion] e je mostrade ca sot.',
 'protectedtitles' => 'Titui protezûts',
 'listusers' => 'Liste dai utents',
 'usereditcount' => '$1 {{PLURAL:$1|contribût|contribûts}}',
-'usercreated' => 'Creât ai $1 a lis $2',
+'usercreated' => '{{GENDER:$3|Creât|Creade}} ai $1 a lis $2',
 'newpages' => 'Gnovis pagjinis',
 'newpages-username' => 'Non utent:',
 'ancientpages' => 'Pagjinis plui vecjis',
@@ -1107,22 +1099,13 @@ Cjale ancje lis [[Special:WantedCategories|categoriis desideradis]].',
 'listusers-noresult' => 'Nissun utent cjatât.',
 'listusers-blocked' => '({{GENDER:$1|blocât|blocade}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Liste dai utents atîfs',
-'activeusers-intro' => 'Cheste e je une liste dai utents che a àn vût cualchi gjenar di ativitât {{PLURAL:$1|te ultime dì|tai ultins $1 diis}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|cambiament|cambiaments}} {{PLURAL:$3|te ultime dì|tai ultins $3 diis}}',
-'activeusers-from' => 'Mostre i utents scomençant di:',
-'activeusers-hidebots' => 'Plate i bots',
-'activeusers-hidesysops' => 'Plate i aministradôrs',
-'activeusers-noresult' => 'Nissun utent cjatât.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Dirits dai grups di utents',
 'listgrouprights-group' => 'Grup',
 'listgrouprights-rights' => 'Dirits',
 'listgrouprights-members' => '(liste dai membris)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Messaç di pueste a chest utent',
 'emailpage' => 'Mande un messaç di pueste eletroniche al utent',
 'defemailsubject' => 'Messaç di {{SITENAME}}',
@@ -1140,7 +1123,7 @@ Cjale ancje lis [[Special:WantedCategories|categoriis desideradis]].',
 
 # Watchlist
 'watchlist' => 'Tignûts di voli',
-'mywatchlist' => 'Tignûts di voli',
+'mywatchlist' => 'Tignudis di voli',
 'watchlistfor2' => 'Par $1 $2',
 'nowatchlist' => 'Nissun element al è tignût di voli.',
 'watchnologin' => 'No tu sês jentrât',
@@ -1254,9 +1237,9 @@ Tu puedis cambiâ il nivel di protezion di cheste pagjine, ma chest nol varà ef
 'blanknamespace' => '(Principâl)',
 
 # Contributions
-'contributions' => 'Contribûts dal utent',
+'contributions' => 'Contribûts {{GENDER:$1|dal utent|de utente}}',
 'contributions-title' => 'Contribûts di $1',
-'mycontris' => 'Miei contribûts',
+'mycontris' => 'Contribûts',
 'contribsub2' => 'Par $1 ($2)',
 'nocontribs' => 'Nissun cambiament che al rispiete chescj criteris cjatât.',
 'uctop' => ' (su)',
@@ -1291,7 +1274,7 @@ Tu puedis cambiâ il nivel di protezion di cheste pagjine, ma chest nol varà ef
 'whatlinkshere-hideredirs' => '$1 re-indreçaments',
 'whatlinkshere-hidetrans' => '$1 inclusions',
 'whatlinkshere-hidelinks' => '$1 leams',
-'whatlinkshere-hideimages' => '$1 leams da figuris',
+'whatlinkshere-hideimages' => '$1 leams di files',
 'whatlinkshere-filters' => 'Filtris',
 
 # Block/unblock
@@ -1481,8 +1464,6 @@ Par plasê va su [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation]
 'nocredits' => 'Nissune informazion sui ricognossiments disponibil par cheste pagjine.',
 
 # Skin names
-'skinname-standard' => 'Classiche',
-'skinname-nostalgia' => 'Nostalgjie',
 'skinname-modern' => 'Moderne',
 
 # Browsing diffs
@@ -1568,7 +1549,7 @@ Se il file al è stât cambiât rispiet al so stât origjinâl, cualchi informaz
 'namespacesall' => 'ducj',
 'monthsall' => 'ducj',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Conferme direzione di pueste',
 'confirmemail_noemail' => 'No tu âs metût une direzion di pueste eletroniche valide intes tôs [[Special:Preferences|preferencis]].',
 'confirmemail_text' => 'Cheste wiki ti domande di valid la to direzion di pueste eletroniche prime di doprâ lis funzions di email. Ative il boton ca sot par inviâ un codiç di conferme ae to direzion. Chest messaç al includarà un leam cuntun codiç; cjame il leam tal to sgarfadôr par confermâ la validitât de tô direzion.',
index c617308..09968d0 100644 (file)
@@ -65,8 +65,6 @@ $messages = array(
 'tog-shownumberswatching' => "Nochd àireamh nan cleachdaichean a tha a' cumail sùil air",
 'tog-oldsig' => 'An t-earr-sgrìobhadh làithreach:',
 'tog-fancysig' => 'Làimhsich an t-earr-sgrìobhadh mar wikitext (gun cheangal leis fhèin)',
-'tog-externaleditor' => "Cleachd deasaichear on taobh a-muigh a ghnàth (do shàr-eòlaichean a-mhàin, feumaidh seo roghainnean sònraichte air a' choimpiutair agad [//www.mediawiki.org/wiki/Manual:External_editors Barrachd fiosrachaidh.])",
-'tog-externaldiff' => "Cleachd diff on taobh a-muigh a ghnàth (do shàr-eòlaichean a-mhàin, feumaidh seo roghainnean sònraichte air a' choimpiutair agad. [//www.mediawiki.org/wiki/Manual:External_editors Barrachd fiosrachaidh.])",
 'tog-showjumplinks' => 'Cuir an comas ceanglaichean so-inntrigeachd "gearr leum gu"',
 'tog-uselivepreview' => 'Cleachd an ro-shealladh beò (feumaidh seo JavaScript) (deuchainneach)',
 'tog-forceeditsummary' => "Cuir ceist nuair a dh'fhàgas mi gearr-chunntas an deasachaidh bàn",
@@ -80,6 +78,7 @@ $messages = array(
 'tog-diffonly' => 'Na seall susbaint nan duilleagan fo na diofaichean',
 'tog-showhiddencats' => 'Seall na roinnean falaichte',
 'tog-norollbackdiff' => 'Na dèan diof às dèidh roiligeadh air ais',
+'tog-useeditwarning' => 'Thoir rabhadh dhomh ma bhios mi an impis duilleag deasachaidh fhàgail mus do shàbhail mi na mùthaidhean agam',
 
 'underline-always' => 'An-còmhnaidh',
 'underline-never' => 'Na dèan seo idir',
@@ -826,6 +825,8 @@ Tha e ann mu thràth.",
 'content-failed-to-parse' => "Dh'fhàillig parsadh susbaint $2 airson modail $1: $3",
 'invalid-content-data' => 'Dàta susbaint a tha mì-dhligheach',
 'content-not-allowed-here' => 'Chan eil susbaint "$1" ceadaichte air an duilleag [[$2]]',
+'editwarning-warning' => 'Ma dh\'fhàgas tu an duilleag seo, faodaidh gun caill thu mùthadh sam bith a rinn thu.
+Ma tha thu air logadh a-steach, \'s urrainn dhut an rabhadh seo a chur dheth san roinn "Deasachadh" sna roghainnean agad.',
 
 # Content models
 'content-model-wikitext' => 'wikitext',
@@ -1213,7 +1214,7 @@ Tha duilleagan air [[Special:Watchlist|do chlàr-faire]] ann an litrichean '''tr
 'filehist-revert' => 'till',
 'filehist-current' => 'làithreach',
 'filehist-datetime' => 'Ceann-là/Àm',
-'filehist-thumb' => 'Meabh-dhealbh',
+'filehist-thumb' => 'Meanbh-dhealbh',
 'filehist-thumbtext' => 'Meanbh-dhealbh airson an tionndaidh on $1',
 'filehist-user' => 'Neach-cleachdaidh',
 'filehist-dimensions' => 'Meud',
index a57c62b..8432ec5 100644 (file)
@@ -278,8 +278,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Mostrar o número de usuarios que están a vixiar',
 'tog-oldsig' => 'Sinatura actual:',
 'tog-fancysig' => 'Tratar a sinatura como se fose texto wiki (sen ligazón automática)',
-'tog-externaleditor' => 'Usar un editor externo por defecto (só para expertos; cómpre configurar o computador. [//www.mediawiki.org/wiki/Manual:External_editors Máis información.])',
-'tog-externaldiff' => 'Usar as diferenzas externas por defecto (só para expertos; cómpre configurar o computador. [//www.mediawiki.org/wiki/Manual:External_editors Máis información.])',
 'tog-showjumplinks' => 'Permitir as ligazóns de accesibilidade "ir a"',
 'tog-uselivepreview' => 'Usar a vista previa en tempo real (cómpre JavaScript) (experimental)',
 'tog-forceeditsummary' => 'Avisádeme cando o campo resumo estea baleiro',
@@ -294,6 +292,7 @@ $messages = array(
 'tog-showhiddencats' => 'Mostrar as categorías ocultas',
 'tog-noconvertlink' => 'Desactivar a conversión dos títulos de ligazón',
 'tog-norollbackdiff' => 'Omitir as diferenzas despois de levar a cabo unha reversión de edicións',
+'tog-useeditwarning' => 'Avisádeme cando deixe unha páxina de edición cos cambios sen gardar',
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Nunca',
@@ -665,9 +664,15 @@ Teña en conta que mentres non se limpa a memoria caché do seu navegador algunh
 'welcomecreation-msg' => 'A súa conta foi creada correctamente.
 Non esqueza personalizar as súas [[Special:Preferences|preferencias de {{SITENAME}}]].',
 'yourname' => 'Nome de usuario:',
+'userlogin-yourname' => 'Nome de usuario',
+'userlogin-yourname-ph' => 'Insira o seu nome de usuario',
 'yourpassword' => 'Contrasinal:',
+'userlogin-yourpassword' => 'Contrasinal',
+'userlogin-yourpassword-ph' => 'Insira o seu contrasinal',
 'yourpasswordagain' => 'Insira o contrasinal outra vez:',
 'remembermypassword' => 'Lembrar o meu contrasinal neste ordenador (ata $1 {{PLURAL:$1|día|días}})',
+'userlogin-remembermypassword' => 'Lembrádeme',
+'userlogin-signwithsecure' => 'Acceder ao sistema no servidor seguro',
 'securelogin-stick-https' => 'Permanecer conectado mediante as HTTPS despois de acceder',
 'yourdomainname' => 'O seu dominio:',
 'password-change-forbidden' => 'Non pode mudar os contrasinais neste wiki.',
@@ -680,12 +685,16 @@ Non esqueza personalizar as súas [[Special:Preferences|preferencias de {{SITENA
 'logout' => 'Saír ao anonimato',
 'userlogout' => 'Saír ao anonimato',
 'notloggedin' => 'Non accedeu ao sistema',
-'nologin' => "Non está rexistrado? '''$1'''.",
+'userlogin-noaccount' => 'Non está rexistrado?',
+'userlogin-joinproject' => 'Únase a {{SITENAME}}',
+'nologin' => 'Non está rexistrado? $1.',
 'nologinlink' => 'Cree unha conta',
 'createaccount' => 'Crear unha conta nova',
-'gotaccount' => "Xa ten unha conta? '''$1'''.",
+'gotaccount' => 'Xa ten unha conta? $1.',
 'gotaccountlink' => 'Acceda ao sistema',
 'userlogin-resetlink' => 'Esqueceu os seus datos de rexistro?',
+'helplogin-url' => 'Help:Rexistro',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Axuda co rexistro]]',
 'createaccountmail' => 'Utilizar un contrasinal aleatorio temporal e envialo ao enderezo de correo electrónico especificado embaixo',
 'createaccountreason' => 'Motivo:',
 'badretype' => 'Os contrasinais que inseriu non coinciden.',
@@ -792,6 +801,7 @@ Pode ser que xa cambiase o seu contrasinal ou que solicitase un novo contrasinal
 'passwordreset-text' => 'Encha este formulario para restablecer o seu contrasinal.',
 'passwordreset-legend' => 'Restablecer o contrasinal',
 'passwordreset-disabled' => 'O restablecemento de contrasinais está desactivado neste wiki.',
+'passwordreset-emaildisabled' => 'As funcións do correo electrónico están desactivadas neste wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Introduza un dos datos a continuación}}',
 'passwordreset-username' => 'Nome de usuario:',
 'passwordreset-domain' => 'Dominio:',
@@ -823,7 +833,7 @@ ignore esta mensaxe e continúe empregando o seu contrasinal vello.',
 Contrasinal temporal: $2',
 'passwordreset-emailsent' => 'Enviouse o correo electrónico de restablecemento do contrasinal.',
 'passwordreset-emailsent-capture' => 'Enviouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación.',
-'passwordreset-emailerror-capture' => 'Xerouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación, pero o envío ao usuario fallou: $1',
+'passwordreset-emailerror-capture' => 'Xerouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación, pero o envío {{GENDER:$2|ao usuario|á usuaria}} fallou: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Cambiar o enderezo de correo electrónico',
@@ -915,7 +925,7 @@ Poida que a movesen ou borrasen mentres ollaba a páxina.',
 'loginreqtitle' => 'Cómpre acceder ao sistema',
 'loginreqlink' => 'acceder ao sistema',
 'loginreqpagetext' => 'Debe $1 para ver outras páxinas.',
-'accmailtitle' => 'O contrasinal foi enviado.',
+'accmailtitle' => 'Enviouse o contrasinal',
 'accmailtext' => 'Un contrasinal xerado ao chou para "[[User talk:$1|$1]]" foi enviado a "$2".
 
 O contrasinal para esta conta nova pode ser modificado na páxina especial \'\'[[Special:ChangePassword|Cambiar o contrasinal]]\'\' tras acceder ao sistema.',
@@ -1043,6 +1053,8 @@ Esta xa existe.',
 'content-failed-to-parse' => 'Erro ao analizar o contido de "$2" para o modelo de $1: $3',
 'invalid-content-data' => 'Datos de contido inválidos',
 'content-not-allowed-here' => 'O contido "$1" non está permitido na páxina "[[$2]]"',
+'editwarning-warning' => 'Deixar esta páxina pode causar a perda de calquera cambio feito.
+Se accedeu ao sistema, pode desactivar esta mensaxe de advertencia na sección "{{int:prefs-editing}}" das súas preferencias.',
 
 # Content models
 'content-model-wikitext' => 'texto wiki',
@@ -1512,7 +1524,7 @@ Ha de ter menos {{PLURAL:$1|dun carácter|de $1 caracteres}}.',
 'right-reupload' => 'Sobrescribir ficheiros existentes',
 'right-reupload-own' => 'Sobrescribir un ficheiro existente cargado polo mesmo usuario',
 'right-reupload-shared' => 'Sobrescribir localmente ficheiros do repositorio multimedia',
-'right-upload_by_url' => 'Cargar un ficheiro dende un enderezo URL',
+'right-upload_by_url' => 'Cargar ficheiros desde un enderezo URL',
 'right-purge' => 'Purgar a caché dunha páxina do wiki sen a páxina de confirmación',
 'right-autoconfirmed' => 'Editar páxinas semiprotexidas',
 'right-bot' => 'Ser tratado coma un proceso automatizado',
@@ -1913,7 +1925,7 @@ Tamén pode reintentalo cando haxa menos actividade.',
 Ao filtrar a lista por usuario, soamente se mostran as últimas versións dos ficheiros cargados polo usuario.',
 'listfiles_search_for' => 'Buscar polo nome do ficheiro multimedia:',
 'imgfile' => 'ficheiro',
-'listfiles' => 'Lista de imaxes',
+'listfiles' => 'Lista de ficheiros',
 'listfiles_thumb' => 'Miniatura',
 'listfiles_date' => 'Data',
 'listfiles_name' => 'Nome',
@@ -2068,7 +2080,7 @@ As entradas <del>riscadas</del> xa foron resoltas.',
 'brokenredirects-edit' => 'editar',
 'brokenredirects-delete' => 'borrar',
 
-'withoutinterwiki' => 'Páxinas sen ligazóns interwiki',
+'withoutinterwiki' => 'Páxinas sen ligazóns interlingüísticas',
 'withoutinterwiki-summary' => 'As seguintes páxinas non ligan con ningunha versión noutra lingua.',
 'withoutinterwiki-legend' => 'Prefixo',
 'withoutinterwiki-submit' => 'Mostrar',
@@ -2090,8 +2102,8 @@ As entradas <del>riscadas</del> xa foron resoltas.',
 'lonelypagestext' => 'As seguintes páxinas non teñen ningunha ligazón que apunte cara a elas desde outra páxina de {{SITENAME}}.',
 'uncategorizedpages' => 'Páxinas sen categorías',
 'uncategorizedcategories' => 'Categorías sen categorías',
-'uncategorizedimages' => 'Ficheiros sen categorizar',
-'uncategorizedtemplates' => 'Modelos sen categorizar',
+'uncategorizedimages' => 'Ficheiros sen categorías',
+'uncategorizedtemplates' => 'Modelos sen categorías',
 'unusedcategories' => 'Categorías sen uso',
 'unusedimages' => 'Imaxes sen uso',
 'popularpages' => 'Páxinas populares',
@@ -2104,7 +2116,7 @@ As entradas <del>riscadas</del> xa foron resoltas.',
 'wantedtemplates' => 'Modelos requiridos',
 'mostlinked' => 'Páxinas máis ligadas',
 'mostlinkedcategories' => 'Categorías máis ligadas',
-'mostlinkedtemplates' => 'Modelos máis enlazados',
+'mostlinkedtemplates' => 'Modelos máis ligados',
 'mostcategories' => 'Páxinas con máis categorías',
 'mostimages' => 'Ficheiros máis usados',
 'mostinterwikis' => 'Páxinas con máis interwikis',
@@ -2119,10 +2131,10 @@ As entradas <del>riscadas</del> xa foron resoltas.',
 'protectedpages-indef' => 'Só as proteccións indefinidas',
 'protectedpages-cascade' => 'Só as proteccións en serie',
 'protectedpagestext' => 'As seguintes páxinas están protexidas fronte á edición ou traslado',
-'protectedpagesempty' => 'Non hai páxinas protexidas neste momento',
+'protectedpagesempty' => 'Actualmente non hai ningunha páxina protexida con eses parámetros.',
 'protectedtitles' => 'Títulos protexidos',
 'protectedtitlestext' => 'Os seguintes títulos están protexidos da creación',
-'protectedtitlesempty' => 'Actualmente non están protexidos títulos con eses parámetros.',
+'protectedtitlesempty' => 'Actualmente non hai ningún título protexido con eses parámetros.',
 'listusers' => 'Lista de usuarios',
 'listusers-editsonly' => 'Mostrar só os usuarios con edicións',
 'listusers-creationsort' => 'Ordenar por data de creación',
@@ -2312,7 +2324,7 @@ Os cambios futuros nesta páxina e na súa páxina de conversa asociada serán l
 
 'enotif_mailer' => 'Sistema de notificacións por correo de {{SITENAME}}',
 'enotif_reset' => 'Marcar todas as páxinas como visitadas',
-'enotif_impersonal_salutation' => 'usuario de {{SITENAME}}',
+'enotif_impersonal_salutation' => 'Usuario de {{SITENAME}}',
 'enotif_subject_deleted' => '{{GENDER:$2|$2}} borrou a páxina chamada "$1" en {{SITENAME}}',
 'enotif_subject_created' => '{{GENDER:$2|$2}} creou a páxina chamada "$1" en {{SITENAME}}',
 'enotif_subject_moved' => '{{GENDER:$2|$2}} trasladou a páxina chamada "$1" en {{SITENAME}}',
@@ -2478,7 +2490,7 @@ Pode mudar o nivel de protección da páxina pero iso non afectará á protecci
 
 # Restriction levels
 'restriction-level-sysop' => 'protección completa',
-'restriction-level-autoconfirmed' => 'semiprotexida',
+'restriction-level-autoconfirmed' => 'semiprotección',
 'restriction-level-all' => 'todos',
 
 # Undelete
@@ -2516,14 +2528,14 @@ $1',
 'undeletedpage' => "'''A páxina \"\$1\" foi restaurada'''
 
 Comprobe o [[Special:Log/delete|rexistro de borrados]] para ver as entradas recentes no rexistro de páxinas eliminadas e restauradas.",
-'undelete-header' => 'Vexa [[Special:Log/delete|no rexistro de borrados]] as páxinas eliminadas recentemente.',
+'undelete-header' => 'Consulte [[Special:Log/delete|no rexistro de borrados]] as páxinas borradas recentemente.',
 'undelete-search-title' => 'Procurar páxinas borradas',
 'undelete-search-box' => 'Procurar páxinas borradas',
 'undelete-search-prefix' => 'Mostrar as páxinas que comecen por:',
 'undelete-search-submit' => 'Procurar',
 'undelete-no-results' => 'Non se atoparon páxinas coincidentes no arquivo de eliminacións.',
-'undelete-filename-mismatch' => 'Non se pode desfacer a eliminación da revisión do ficheiro datada en $1: non corresponde o nome do ficheiro',
-'undelete-bad-store-key' => 'Non se pode desfacer o borrado da revisión do ficheiro datada en $1: o ficheiro faltaba antes de proceder a borralo.',
+'undelete-filename-mismatch' => 'Non se pode restaurar a revisión do ficheiro datada en $1: Non corresponde o nome do ficheiro.',
+'undelete-bad-store-key' => 'Non se pode restaurar a revisión do ficheiro datada en $1: O ficheiro faltaba antes de proceder a borralo.',
 'undelete-cleanup-error' => 'Erro ao eliminar o ficheiro do arquivo sen usar "$1".',
 'undelete-missing-filearchive' => 'Non foi posible restaurar o arquivo do ficheiro co ID $1 porque non figura na base de datos.
 Poida que xa se restaurase con anterioridade.',
@@ -3653,7 +3665,7 @@ Pode ser que caducase.',
 '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.',
-'confirmemail_subject' => '{{SITENAME}} - Verificación do enderezo de correo electrónico',
+'confirmemail_subject' => 'Confirmación do enderezo de correo electrónico de {{SITENAME}}',
 'confirmemail_body' => 'Alguén, probablemente vostede, desde o enderezo IP $1,
 rexistrou a conta "$2" con este enderezo de correo electrónico en {{SITENAME}}.
 
@@ -3928,6 +3940,8 @@ As imaxes móstranse na súa resolución completa; outros tipos de ficheiros in
 'htmlform-submit' => 'Enviar',
 'htmlform-reset' => 'Desfacer os cambios',
 'htmlform-selectorother-other' => 'Outro',
+'htmlform-no' => 'Non',
+'htmlform-yes' => 'Si',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 con soporte para procuras de texto completo',
index e38cb95..f4b8e28 100644 (file)
@@ -162,8 +162,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Aazahl Benutzer aazeige, wo ne Syten am Aaluege sy (i den Artikelsyte, i de «letschten Änderigen» und i der Beobachtigslischte)',
 'tog-oldsig' => 'Vorschau vu dr Unterschrift:',
 'tog-fancysig' => 'Signatur as Wikitext behandle (ohni automatischi Vergleichig)',
-'tog-externaleditor' => 'Externe Editor als Standard bruche (nume fir Experte, doderzue brucht s speziälli Yystellige uf em Computer. [//www.mediawiki.org/wiki/Manual:External_editors Wyteri Informatione doderzue.])',
-'tog-externaldiff' => 'Extern Programm fir Versionsunterschid als Standard bruche (nume fir Experte, doderzue brucht s speziälli Yystellige uf em Computer. [//www.mediawiki.org/wiki/Manual:External_editors Wyteri Informatione doderzue.])',
 'tog-showjumplinks' => '«Wächsle-zu»-Links ermügleche',
 'tog-uselivepreview' => 'Live-Vorschau bruche (JavaScript) (experimentell)',
 'tog-forceeditsummary' => 'Sag mer s, wänn i s Zämmefassigsfeld läär loss',
@@ -178,6 +176,7 @@ $messages = array(
 'tog-showhiddencats' => 'Zeig di versteckte Kategorie',
 'tog-noconvertlink' => 'Konvertierig vum Titel deaktiviere',
 'tog-norollbackdiff' => 'Unterschid noch em Zrucksetze unterdrucke',
+'tog-useeditwarning' => 'Warn mi, wänn I ne Syte verloss mit Bearbeitige, wu nonig gspycheret sin',
 
 'underline-always' => 'immer',
 'underline-never' => 'nie',
@@ -893,6 +892,8 @@ Si isch schyns glescht wore.',
 '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.',
 
 # Content models
 'content-model-wikitext' => 'Wikitext',
@@ -1170,15 +1171,6 @@ Einzelheite chasch im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'search-external' => 'Externi Suech',
 'searchdisabled' => 'D {{SITENAME}}-Suech isch deaktiviert. Du chasch mit Google sueche, s cha aber syy ass dr Suechindex vu Google fir {{SITENAME}} veraltet isch.',
 
-# Quickbar
-'qbsettings' => 'Syteleischte',
-'qbsettings-none' => 'Keini',
-'qbsettings-fixedleft' => 'Links, fescht',
-'qbsettings-fixedright' => 'Rächts, fescht',
-'qbsettings-floatingleft' => 'Links, in dr Schwebi',
-'qbsettings-floatingright' => 'Rächts, in dr Schwebi',
-'qbsettings-directionality' => 'Fescht, abhängig vu dr Schrybrichtig vu dr gwehlte Sproch',
-
 # Preferences page
 'preferences' => 'Yystellige',
 'mypreferences' => 'Yystellige',
@@ -1717,7 +1709,6 @@ Us Sicherheitsgrinde isch img_auth.php deaktiviert.',
 'http-read-error' => 'Fähler bim Läse vu HTTP.',
 'http-timed-out' => 'Uuszyt bim HTTP-Versuech.',
 'http-curl-error' => 'Fähler bim Ufsueche vu dr URL: $1',
-'http-host-unreachable' => 'URL isch nit z verwitsche',
 'http-bad-status' => 'Bi dr HTTP-Aafrog isch e Fähler ufdrätte: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2029,15 +2020,6 @@ Lueg au d Lischt vu dr [[Special:WantedCategories|gwinschte Kategorie]].',
 'listusers-noresult' => 'Kei Benutzer gfunde.',
 'listusers-blocked' => '(gsperrt)',
 
-# Special:ActiveUsers
-'activeusers' => 'Lischt vu dr aktive Benutzer',
-'activeusers-intro' => 'Des isch e Lischt vu Benutzer, wu irgedebis bearbeitet hän {{PLURAL:$1|am letschte Tag|in dr letschte $1 Täg}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|Bearbeitig|Bearbeitige}} {{PLURAL:$3|am letschte Tag|in dr letschte $3 Täg}}',
-'activeusers-from' => 'Zeig Benutzer ab:',
-'activeusers-hidebots' => 'Bötli uusblände',
-'activeusers-hidesysops' => 'Ammanne (Administratore) uusblände',
-'activeusers-noresult' => 'Kei Benutzer gfunde.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Benutzergruppe-Rächt',
 'listgrouprights-summary' => 'Des isch e Liste vu dr Benutzergruppe, wu in däm Wiki definiert sin, un dr Rächt, wu dermit verbunde sin.
index ae6b140..c1b6d66 100644 (file)
@@ -179,8 +179,6 @@ $messages = array(
 'tog-shownumberswatching' => 'ધ્યાનમાં રાખતા સભ્યોની સંખ્યા બતાવો',
 'tog-oldsig' => 'હાલના હસ્તાક્ષર',
 'tog-fancysig' => 'હસ્તાક્ષરનો વિકિલખાણ તરીકે ઉપયોગ કરો (સ્વચાલિત કડી વગર)',
-'tog-externaleditor' => 'બીજું એડીટર વાપરો. (ફક્ત એકસપર્ટ માટે, તમારા કમ્પ્યુટરમાં સેટીંગ્સ બદલવા પડશે. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
-'tog-externaldiff' => 'Use external diff by default (for experts only, needs special settings on your computer. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
 'tog-showjumplinks' => "''આના પર જાવ'' કડીને સક્રીય કરો.",
 'tog-uselivepreview' => 'લાઇવ પ્રિવ્યુ જુઓ (જાવાસ્ક્રીપ્ટ જરૂરી) (પ્રાયોગીક)',
 'tog-forceeditsummary' => "કોરો 'ફેરફાર સારાંશ' ઉમેરતા પહેલા મને ચેતવો",
@@ -195,6 +193,7 @@ $messages = array(
 'tog-showhiddencats' => 'છુપી શ્રેણીઓ દર્શાવો',
 'tog-noconvertlink' => 'Disable link title conversion',
 'tog-norollbackdiff' => 'રોલબેક કર્યા પછીના તફાવતો છુપાવો',
+'tog-useeditwarning' => 'સાચવ્યા વગર જો હું પૃષ્ઠ છોડું તો મને ચેતવણી આપો',
 
 'underline-always' => 'હંમેશાં',
 'underline-never' => 'કદી નહિ',
@@ -285,6 +284,7 @@ $messages = array(
 'newwindow' => '(નવા પાનામાં ખુલશે)',
 'cancel' => 'રદ કરો',
 'moredotdotdot' => 'વધારે...',
+'morenotlisted' => 'વધુ યાદી કરેલી નથી...',
 'mypage' => 'પાનું',
 'mytalk' => 'ચર્ચા',
 'anontalk' => 'આ IP માટેનું ચર્ચા પાનું',
@@ -518,6 +518,8 @@ $1',
 'cannotdelete' => 'ફાઇલ કે પાનું "$1" હટાવી શકાયું નથી.
 શક્ય છે કે અન્ય કોઈએ પહેલેથી હટાવી દીધું હોય.',
 'cannotdelete-title' => '"$1" પાનું કાઢી શકતા નથી',
+'delete-hook-aborted' => 'દૂર કરવાનું હૂક વડે રોકી રાખવામાં આવ્યું.
+તે કોઇ કારણ આપતું નથી.',
 'badtitle' => 'ખરાબ નામ',
 'badtitletext' => 'આપનું ઈચ્છિત શીર્ષક અમાન્ય છે, ખાલી છે, અથવાતો અયોગ્ય રીતે આંતર-ભાષિય કે આંતર-વિકિ સાથે જોડાયેલું શીર્ષક છે.
 શક્ય છે કે તેમાં એક કે વધુ એવા અક્ષર કે ચિહ્નો છે કે જે પાનાનાં શીર્ષક માટે અવૈધ છે.',
@@ -568,9 +570,14 @@ $2',
 'welcomecreation-msg' => 'તમારૂં ખાતું ખુલી ગયું છે.
 તમારી [[Special:Preferences|{{SITENAME}} પસંદ]] બદલવાનું ભૂલશો નહીં.',
 'yourname' => 'સભ્ય નામ:',
+'userlogin-yourname' => 'સભ્ય નામ',
+'userlogin-yourname-ph' => 'તમારૂં સભ્ય નામ દાખલ કરો',
 'yourpassword' => 'ગુપ્ત સંજ્ઞા:',
+'userlogin-yourpassword' => 'ગુપ્ત સંજ્ઞા',
+'userlogin-yourpassword-ph' => 'ગુપ્ત સંજ્ઞા લખો',
 'yourpasswordagain' => 'ગુપ્ત સંજ્ઞા (પાસવર્ડ) ફરી લખો',
 'remembermypassword' => 'આ કોમ્યૂટર પર મારી લૉગ ઇન વિગતો ધ્યાનમાં રાખો (વધુમાં વધુ $1 {{PLURAL:$1|દિવસ|દિવસ}} માટે)',
+'userlogin-remembermypassword' => 'મને યાદ રાખો',
 'securelogin-stick-https' => 'લોગ-ઈન કર્યા પછી  HTTPS સાથે જોડાયેલા રહો.',
 'yourdomainname' => 'તમારૂં ડોમેઇન:',
 'password-change-forbidden' => 'તમે આ વિકિ માટે પાસવર્ડ્સ બદલી શકતા નથી.',
@@ -583,13 +590,15 @@ $2',
 'logout' => 'બહાર નીકળો',
 'userlogout' => 'બહાર નીકળો/લૉગ આઉટ',
 'notloggedin' => 'પ્રવેશ કરેલ નથી',
+'userlogin-noaccount' => 'શું તમારૂં ખાતું નથી ?',
+'userlogin-joinproject' => '{{SITENAME}} સાથે જોડાવ',
 'nologin' => "શું તમારૂં ખાતું નથી? તો નવું '''$1'''.",
 'nologinlink' => 'ખાતું ખોલો',
 'createaccount' => 'નવું ખાતું ખોલો',
 'gotaccount' => "પહેલેથી ખાતું ખોલેલું છે? '''$1'''.",
 'gotaccountlink' => 'પ્રવેશ કરો',
 'userlogin-resetlink' => 'પોતાની પ્રવેશ માહિતી ભૂલી ગયા છો?',
-'createaccountmail' => 'àª\87-મà«\87àª\87લ àª¦à«\8dવારા',
+'createaccountmail' => 'àª\95ામàª\9aલાàª\89 àª\97મà«\87-તà«\87મ àªªàª¾àª¸àªµàª°à«\8dડ àªµàª¾àªªàª°à«\8b àª\85નà«\87 àª¤à«\87નà«\87 àª¨à«\80àª\9aà«\87 àª\86પà«\87લ àª\87મà«\87લ àª¸àª°àª¨àª¾àª®àª¾ àªªàª° àª®à«\8bàª\95લà«\8b',
 'createaccountreason' => 'કારણ:',
 'badretype' => 'તમે દાખલ કરેલ ગુપ્તસંજ્ઞા મળતી આવતી નથી.',
 'userexists' => 'દાખલ કરેલું સભ્ય નુ નામ વપરાશમાં છે.</br>
@@ -638,8 +647,8 @@ $2',
 ફેરફાર કરવા માટે તમારું IP એડ્રેસ  સ્થગિત કરી દેવાયું છે તેથી દૂરુપયોગ ટાળવા માટે તમને ગુપ્તસંજ્ઞા રીકવરી કરવાની છૂટ નથી.',
 'eauthentsent' => 'પુષ્ટિ કરવા માટે તમે આપેલા સરનામાં પર ઇમેઇલ મોકલવામાં આવ્યો છે.
 એ જ સરનામે બીજો ઇમેઇલ થતાં પહેલાં તમારે ઇમેઇલમાં લખેલી સૂચનાઓ પ્રમાણે કરવું પડશે જેથી એ પુષ્ટિ થઇ શકે કે આપેલું સરનામું તમારું છે.',
-'throttled-mailpassword' => 'ગુપ્ત સંજ્ઞા યાદ અપાવતી ઇમેઇલ છેલ્લા {{PLURAL:$1|કલાક|$1 કલાકમાં}} મોકલેલી છે.
-દૂરુપયોગ રોકવા માટે, {{PLURAL:$1|કલાક|$1 કલાકમાં}} ફક્ત એક જ આવી મેઇલ કરવામાં આવે છે.',
+'throttled-mailpassword' => 'ગુપ્ત સંજ્ઞા યાદ અપાવતી ઇમેઇલ છેલ્લા {{PLURAL:$1|કલાકમાં|$1 કલાકોમાં}} મોકલેલી છે.
+દૂરુપયોગ રોકવા માટે, {{PLURAL:$1|કલાકમાં|$1 કલાકોમાં}} ફક્ત એક જ આવી મેઇલ કરવામાં આવે છે.',
 'mailerror' => 'મેઇલ મોકલવામાં ત્રુટિ: $1',
 'acct_creation_throttle_hit' => 'આ વિકિના મુલાકાતીઓએ તમારું IP વાપરીને ગઈ કાલે {{PLURAL:$1|1 ખાતું |$1 ખાતા}} ખોલ્યાં છે,જે પ્રવાનગીની મહત્તમ સંખ્યા છે. આને પરિણામે મુલાકાતી આ ક્ષણેવધુ ખાતા નહીં ખોલી શકે.',
 'emailauthenticated' => 'તમારૂં ઇ-મેઇલ સરનામું $2 ના $3 સમયે પ્રમાણિત કરેલું છે.',
@@ -692,9 +701,10 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'પાસવર્ડ રીસેટ કરો',
-'passwordreset-text' => 'àª\86પના àª\88 àª®à«\87લ àª\96ાતા àª¨à«\80 àª®àª¾àª¹àª¿àª¤à«\80 àª®à«\87ળવવા àª®àª¾àª\9fà«\87 àª\86 àª«à«\8bરà«\8dમ àª®àª¾àª\82 àªµàª¿àª\97તà«\8b àª­રો.',
+'passwordreset-text' => 'તમારà«\8b àªªàª¾àª¸àªµàª°à«\8dડ àª¬àª¦àª²àªµàª¾ àª®àª¾àª\9fà«\87 àª\86 àª«à«\8bરà«\8dમ àªªà«\82રà«\81 àª\95રો.',
 'passwordreset-legend' => 'પાસવર્ડ રીસેટ કરો',
 'passwordreset-disabled' => 'આ વિકી પર પાસવર્ડ રીસેટ કરવા પર પ્રતિબંધ છે.',
+'passwordreset-emaildisabled' => 'આ વિકિ પર ઇમેઇલ સગવડ બંધ છે.',
 'passwordreset-pretext' => '{{PLURAL: $1| | એક નીચે માહિતીના ટુકડાઓ દાખલ}}',
 'passwordreset-username' => 'સભ્ય નામ:',
 'passwordreset-domain' => 'ડોમેઈન:',
@@ -702,23 +712,23 @@ $2',
 'passwordreset-capture-help' => 'જો તમે આ ઓપ્શન સિલેક્ટ કરશો, તો તમને અને યુઝર ને ઈ મેલ (કામચલાઉ પાસવર્ડ સાથે) દેખાડવામાં આવશે.',
 'passwordreset-email' => 'ઇ મેલ સરનામું:',
 'passwordreset-emailtitle' => '{{SITENAME}} માટે ખાતુ બનાવ્યું',
-'passwordreset-emailtext-ip' => 'કોઈક (કદાચ તમો , $1 IP એડ્રેસ થી) એ તમારી વેબસાઈટ {{SITENAME}}  ($4) ના ખાતા ની વિગત અંગે યાદ દેવડાવાની રજૂઆત કરી છે. આ ઈ-મેઈલ એડ્રેસ સાથે {{PLURAL:$3|નું ખાતું|ના ખાતા}} જોડાયેલા છે.
+'passwordreset-emailtext-ip' => 'કોઈકે (કદાચ તમોએ , $1 IP એડ્રેસ થી) તમારી વેબસાઈટ {{SITENAME}}  ($4) નો પાસવર્ડ રિસેટ કરવાની રજૂઆત કરી છે. આ ઈમેઈલ એડ્રેસ સાથે {{PLURAL:$3|નું ખાતું|ના ખાતા}} જોડાયેલા છે.
 .
 .
 
 $2
 
-{{PLURAL:$3|આ કામચલાઉ પાસવર્ડ|આ બધા કામચલાઉ પાસવર્ડ}} {{PLURAL:$5|એક દિવસ|$5 દિવસ}} માં નષ્ટ થઇ જશે. તમારે અત્યારે જ ખાતું ખોલીને નવો પાસવર્ડ સેટ કરી લેવો જોઈએ .જો કોઈ બીજા એ આ રજૂઆત કરી હોય, અથવા જો તમને પોતાનો અસલ પાસવર્ડ યાદ હોય, અને તેને બદલવા નથી માગતા, તો આ સંદેશાને જતો કરીને પોતાના અસલ પાસવર્ડ ને વાપરી શકો છો.',
-'passwordreset-emailtext-user' => 'વેબસાઈટ  {{SITENAME}} ($4) ના વપરાશકર્તા $1 એ તમારી ના ખાતા ની વિગત અંગે યાદ દેવડાવાની રજૂઆત કરી છે. આ ઈ-મેઈલ એડ્રેસ સાથે {{PLURAL:$3|નું ખાતું|ના ખાતા}} જોડાયેલા છે.
+{{PLURAL:$3|આ કામચલાઉ પાસવર્ડ|આ બધા કામચલાઉ પાસવર્ડ}} {{PLURAL:$5|એક દિવસ|$5 દિવસ}} માં નષ્ટ થઇ જશે. તમારે અત્યારે જ ખાતું ખોલીને નવો પાસવર્ડ સેટ કરી લેવો જોઈએ .જો કોઈ બીજા એ આ રજૂઆત કરી હોય, અથવા જો તમને પોતાનો અસલ પાસવર્ડ યાદ હોય, અને તેને બદલવા નથી માગતા, તો આ સંદેશાને જતો કરીને પોતાના અસલ પાસવર્ડ ને વાપરી શકો છો.',
+'passwordreset-emailtext-user' => 'વેબસાઈટ  {{SITENAME}} ના વપરાશકર્તા $1 એ તમારા {{SITENAME}} ($4) નો પાસવર્ડ રિસેટ કરવાની રજૂઆત કરી છે. આ ઈમેઈલ એડ્રેસ સાથે {{PLURAL:$3|નું ખાતું|ના ખાતા}} જોડાયેલ છે.
 
 $2
 
 {{PLURAL:$3|આ કામચલાઉ પાસવર્ડ|આ બધા કામચલાઉ પાસવર્ડ}} {{PLURAL:$5|એક દિવસ|$5 દિવસ}} માં નષ્ટ થઇ જશે. તમારે અત્યારે જ ખાતું ખોલીને નવો પાસવર્ડ સેટ કરી લેવો જોઈએ .જો કોઈ બીજા એ આ રજૂઆત કરી હોય, અથવા જો તમને પોતાનો અસલ પાસવર્ડ યાદ હોય, અને તેને બદલવા નથી માગતા, તો આ સંદેશાને જતો કરીને પોતાના અસલ પાસવર્ડ ને વાપરી શકો છો..',
 'passwordreset-emailelement' => 'વપરાશકર્તા નામ: $1
 કામચલાઉ પાસવર્ડ: $2',
-'passwordreset-emailsent' => 'àª\8fàª\95 àª¸à«\8dમà«\83તિપતà«\8dર àª\88 મેલ મોકલવામાં આવ્યો છે.',
-'passwordreset-emailsent-capture' => 'àª\8fàª\95 àª¸à«\8dમà«\83તિપતà«\8dર àª\88 àª®à«\87લ àª®à«\8bàª\95લવામાàª\82 àª\86વà«\8dયà«\8b àª\9bà«\87, àª\9cà«\87 àª\86 પ્રમાણે છે.',
-'passwordreset-emailerror-capture' => 'àª\8fàª\95 àª¸à«\8dમà«\83તિપતà«\8dર àª\88 àª®à«\87લ àª¬àª¨àª¾àªµàªµàª¾ àª®àª¾àª\82 àª\86વà«\8dયà«\8b àª\9bà«\87, àª\9cà«\87 àª\86 àªªà«\8dરમાણà«\87 àª\9bà«\87, àªªàª°àª\82તà«\81 àª¤à«\87 àª¯à«\81àª\9dર àª¨à«\87 àª®à«\8bàª\95લવા માં નિષ્ફળ થયો છે: $1',
+'passwordreset-emailsent' => 'પાસવરà«\8dડ àª¬àª¦àª²àªµàª¾àª¨à«\8b àª\87મેલ મોકલવામાં આવ્યો છે.',
+'passwordreset-emailsent-capture' => 'પાસવરà«\8dડ àª¬àª¦àª²àªµàª¾àª¨à«\8b àª\87મà«\87લ àª®à«\8bàª\95લવામાàª\82 àª\86વà«\8dયà«\8b àª\9bà«\87, àª\9cà«\87 àª¨à«\80àª\9aà«\87 પ્રમાણે છે.',
+'passwordreset-emailerror-capture' => 'àª\8fàª\95 àªªàª¾àª¸àªµàª°à«\8dડ àª°àª¿àª¸à«\87àª\9f àª\87મà«\87લ àª¬àª¨àª¾àªµàªµàª¾àª®àª¾àª\82 àª\86વà«\8dયà«\8b àª\9bà«\87, àª\9cà«\87 àª¨à«\80àª\9aà«\87 àªªà«\8dરમાણà«\87 àª\9bà«\87, àªªàª°àª\82તà«\81 àª¤à«\87 àª¸àª­à«\8dયનà«\87 àª®à«\8bàª\95લવામાં નિષ્ફળ થયો છે: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'ઈ મેલ ખાતુ બદલવા માટે',
@@ -894,7 +904,7 @@ $2
 'longpageerror' => "ત્રુટિ: તમે લખેલ લેખ {{PLURAL:$1|એક કિલોબાઈટ|$1 કિલોબાઈટ્સ}} કિલોબાઇટ લાંબો છે, જે {{PLURAL:$1|એક કિલોબાઈટ|$2 કિલોબાઈટ્સ}}  કિલોબાઇટની મહત્તમ સીમા કરતાં વધુ છે.'''
 તેને સાચવી ન શકાયા.",
 'readonlywarning' => "'''ચેતવણી: માહિતીસંચ સમારકામ માટે બંધ કરાયો છે, તમે તમારા ફેરફારો હમણા સાચવી નહીં શકો.'''
-તમà«\87 àª¤àª®àª¾àª°à«\81àª\82 àª²à«\87àª\96 àª\95à«\8bàª\87 àª\9fà«\87àª\95à«\8dસà«\8dàª\9f àª«àª¾àª\87લ àª®àª¾àª\82 àª¸à«\87વ àª\95રà«\80 àª®à«\82àª\95à«\80 àª¦à«\8b àª\85નà«\87 àª®àª¾àª¹àª¿àª¤à«\80 સંચ ખુલતા વિકિ પર સાચવી શકશો. 
+તમà«\87 àª¤àª®àª¾àª°à«\81àª\82 àª²àª\96ાણ àª\95à«\8bàª\87 àª\9fà«\87àª\95à«\8dસà«\8dàª\9f àª«àª¾àª\87લ àª®àª¾àª\82 àª¸à«\87વ àª\95રà«\80 àª®à«\82àª\95à«\80 àª¦à«\8b àª\85નà«\87 àª®àª¾àª¹àª¿àª¤à«\80સંચ ખુલતા વિકિ પર સાચવી શકશો. 
 
 જે પ્રબંધકે માહિતીસંચ બંધ કર્યો છે તેણે આ કારણ આપ્યું છે: $1",
 'protectedpagewarning' => "'''ચેતવણી : આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર પ્રબંધકો જ આમાં ફેરફાર કરી શકે.'''
@@ -935,6 +945,8 @@ $2
 તે પહેલેથી હાજર છે.',
 'defaultmessagetext' => 'મૂળભૂત સંદેશ લખાણ',
 'invalid-content-data' => 'અયોગ્ય વિગત માહિતી',
+'editwarning-warning' => 'આ પાનું છોડી દેશો તો તમારા ફેરફારો સચવાશે નહીં.
+જો તમે પ્રવેશ કરેલો હોય તો તમે આ ચેતવણીને તમારી પસંદના "ફેરફાર" વિભાગના વિકલ્પો બદલીને બંધ કરી શકો છો.',
 
 # Content models
 'content-model-wikitext' => 'વિકિલખાણ',
@@ -1190,7 +1202,7 @@ $1",
 'search-interwiki-default' => '$1 પરીણામો:',
 'search-interwiki-more' => '(વધુ)',
 'search-relatedarticle' => 'શોધ સંબંધિત',
-'mwsuggest-disable' => 'AJAX સુઝાવો નિષ્ક્રીય કરો',
+'mwsuggest-disable' => 'શોધ સુઝાવો નિષ્ક્રીય કરો',
 'searcheverything-enable' => 'નામસ્થળોમાં શોધો:',
 'searchrelated' => 'શોધ સંબંધિત',
 'searchall' => 'બધા',
@@ -1212,15 +1224,7 @@ $1",
 'searchdisabled' => "{{SITENAME}} ઉપર શોધ બંધ કરી દેવામાં આવી છે.
 ત્યાં સુધી તમે ગુગલ દ્વારા શોધ કરી શકો.
 '''નોંધઃ'''{{SITENAME}}નાં તેમના (ગુગલના) ઈન્ડેક્સ જુના હોઇ શકે.",
-
-# Quickbar
-'qbsettings' => 'શીઘ્રપટ્ટ',
-'qbsettings-none' => 'કોઇપણ નહીં',
-'qbsettings-fixedleft' => 'અચળ ડાબે',
-'qbsettings-fixedright' => 'અચળ જમણે',
-'qbsettings-floatingleft' => 'ચલિત ડાબે',
-'qbsettings-floatingright' => 'ચલિત જમણે',
-'qbsettings-directionality' => 'નિશ્ચિત, તમારી ભાષા સ્ક્રિપ્ટ directionality પર આધાર રાખીને',
+'search-error' => 'શોધ કરતી વખતે ક્ષતિ આવી: $1',
 
 # Preferences page
 'preferences' => 'પસંદ',
@@ -1764,7 +1768,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'http-read-error' => 'HTTP વાચન ત્રુટિ.',
 'http-timed-out' => ' HTTP અરજી કાલાતિત થઇ ગઇ.',
 'http-curl-error' => 'URL: $1 ખેંચી લાવવામાં ત્રુટિ',
-'http-host-unreachable' => 'URL સુધી ન પહોંચી શકાયું.',
 'http-bad-status' => 'HTTP અરજી વખતે કોઈ અડચણ આવી : $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1833,6 +1836,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'uploadnewversion-linktext' => 'આ ફાઇલની નવી આવૃત્તિ ચઢાવો',
 'shared-repo-from' => '$1 થી',
 'shared-repo' => 'સાંઝો ભંડાર',
+'upload-disallowed-here' => 'તમે આ ફાઇલ ઉપર લખી શકતા નથી.',
 
 # File reversion
 'filerevert' => '$1 હતું તેવું કરો',
@@ -1918,6 +1922,11 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 તેઓ વધુ યોગ્ય પાનાં સાથે જોડાયેલા હોવા જોઇએ.<br />
 પાનાને સંદિગ્ધ વાક્યો વાળું પાનું ત્યારે કહી શકાય જ્યારે તે [[MediaWiki:Disambiguationspage]] નામના માળખા સાથે જોડાયેલું હોય.",
 
+'pageswithprop' => 'પાનાં ગુણધર્મ સાથેનાં પાનાંઓ',
+'pageswithprop-legend' => 'પાનાં ગુણધર્મ સાથેનાં પાનાંઓ',
+'pageswithprop-prop' => 'ગુણધર્મ નામ:',
+'pageswithprop-submit' => 'જાઓ',
+
 'doubleredirects' => 'બમણું દિશાનિર્દેશન',
 'doubleredirectstext' => 'આ પાનું દિશા નિર્દેશિત પાના પર થયેલા દિશા નિર્દેશિત પાનાની યાદિ બતાવે છે.
 દરેક લિટીમાં પાના પ્રથમ અને દ્વીતીય દિશા નિર્દેશન ક્ડી બતાવે છે, તે સિવાય દ્વીતીય દિશા નિર્દેશનનું લક્ષ્ય પણ બતાવે છે કે મોટે ભાગે મૂળ પાનું હોઇ શકે છેૢ જેના પર પ્રથમ દિશા નિર્દેશન લક્ષિત છે. <del>Crossed out</del> લિટીઓ  નો ઉત્તર મેળવાયો છે.',
@@ -2069,7 +2078,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'linksearch-ok' => 'શોધ',
 'linksearch-text' => 'વાઇલ્ડ કાર્ડ જેવા કે "*.wikipedia.org" અહીં વપરાયા હોઈ શકે છે.
 ઓછામાં ઓછું ઉચ્ચસ્તરનું ડોમેઇન જરૂરી છે, દા.ત. \'\'*.org".<br />
-માન્ય પ્રોટોકોલ્સ: <code>$1</code> (જો કોઇ પ્રોટોકોલ આપેલ નહી હોય તો http:// એ મૂળભૂત ગણાશે).',
+માન્ય {{PLURAL:$2|પ્રોટોકોલ|પ્રોટોકોલ્સ}}: <code>$1</code> (જો કોઇ પ્રોટોકોલ આપેલ નહી હોય તો http:// એ મૂળભૂત ગણાશે).',
 'linksearch-line' => '$1 એ $2થી જોડાયેલ છે',
 'linksearch-error' => 'યજમાન નામની શરૂઆતમાં જ વાઈલ્ડકાર્ડ પ્રકટ થશે',
 
@@ -2079,15 +2088,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'listusers-noresult' => 'કોઇ સભ્ય ન મળ્યો',
 'listusers-blocked' => '(પ્રતિબંધિત)',
 
-# Special:ActiveUsers
-'activeusers' => 'સક્રિય સભ્યોની યાદી',
-'activeusers-intro' => 'છેલ્લા  $1 {{PLURAL:$1|દિવસ|દિવસો}}માં જે સભ્યોએ કંઈક યોગદાન કર્યું હોય તેમની યાદી.',
-'activeusers-count' => '$1 {{PLURAL:$1|ફેરફાર|ફેરફારો}} છેલ્લા {{PLURAL:$3|દિવસ |$3 દિવસો }}માં',
-'activeusers-from' => 'આનાથી શરૂ થતા સભ્યો દર્શાવો:',
-'activeusers-hidebots' => 'બોટને છુપાવો',
-'activeusers-hidesysops' => 'પ્રબંધકો છુપાવો',
-'activeusers-noresult' => 'કોઇ સક્રીય સભ્ય ન મળ્યો',
-
 # Special:ListGroupRights
 'listgrouprights' => 'સભ્ય જૂથ ના હક્કો',
 'listgrouprights-summary' => 'નીચે આ વિકિ પર વ્યાખ્યાયિત સભ્ય જૂથોની યાદી, તેમની સાથે સંકળાયેલા હક્કો સાથે આપી છે.
@@ -2145,7 +2145,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'usermessage-editor' => 'તંત્ર સંદેશાઓ',
 
 # Watchlist
-'watchlist' => 'મારà«\80 àª§à«\8dયાનસà«\82àª\9aà«\80',
+'watchlist' => 'ધ્યાનસૂચી',
 'mywatchlist' => 'ધ્યાનસૂચિ',
 'watchlistfor2' => 'ધ્યાન સૂચિ $1 $2',
 'nowatchlist' => 'તમારી ધ્યાન સૂચિ ખાલી છે',
@@ -2300,6 +2300,7 @@ Deleting it may disrupt database operations of {{SITENAME}};',
 'prot_1movedto2' => '[[$1]]નું નામ બદલીને [[$2]] કરવામાં આવ્યું છે.',
 'protect-badnamespace-title' => 'સંરક્ષિત ન કરી શકાતું નામસ્થળ',
 'protect-badnamespace-text' => 'આ નામસ્થળમાં પાના સુરક્ષિત કરી શકાતા નથી.',
+'protect-norestrictiontypes-title' => 'અસુરક્ષિત પાનું',
 'protect-legend' => 'સંરક્ષણ બહાલી આપો',
 'protectcomment' => 'કારણ:',
 'protectexpiry' => 'સમાપ્તિ:',
@@ -2317,9 +2318,9 @@ Deleting it may disrupt database operations of {{SITENAME}};',
 
 તમે આ પાનાઓનું સંરક્ષણ સ્તર બદલી શકો છો, પરંતુ તેની અસર ધોધાકાર સંરક્ષણ પર પડવી જોઇએ નહીં.',
 'protect-default' => 'બધા સભ્યોને પરવાનગી',
-'protect-fallback' => '"$1" પરવાનગી જરૂરી',
-'protect-level-autoconfirmed' => 'નવા àª\85નà«\87 àª¨àª¹à«\80 àª¨à«\8bàª\82ધાયà«\87લા àª¸àª­à«\8dયà«\8b àªªàª° àªªà«\8dરતિબàª\82ધ',
-'protect-level-sysop' => 'માત્ર પ્રબંધકો',
+'protect-fallback' => 'માત્ર "$1" પરવાનગી સાથેના સભ્યોને માન્ય રાખો',
+'protect-level-autoconfirmed' => 'માતà«\8dર àª\86પમà«\87ળà«\87 àª\96ાતરà«\80 àª¥àª¯à«\87લા àª¸àª­à«\8dયà«\8bનà«\87 àª®àª¾àª¨à«\8dય àª°àª¾àª\96à«\8b',
+'protect-level-sysop' => 'માત્ર પ્રબંધકોને માન્ય રાખો',
 'protect-summary-cascade' => 'ધોધાકાર',
 'protect-expiring' => '$1 (UTC) એ સમાપ્ત થાય છે',
 'protect-expiring-local' => '$1ના નિવૃત્ત થશે',
@@ -2627,7 +2628,7 @@ $1',
 જો તમે તેમ કરવા ના ઇચ્છતા હોવ તો, [[Special:DoubleRedirects|બેવડા]] અથવા [[Special:BrokenRedirects|ત્રુટક કડી વાળા]] અન્યત્ર વાળેલા પાનાઓની યાદી ચકાસીને ખાતરી કરી લેશો.
 કડી જે પાના પર લઈ જવી જોઈએ તે જ પાના સાથે જોડે તેની ખાતરી કરી લેવી તે તમારી જવાબદારી છે.
 
-àª\8f àªµàª¾àª¤àª¨à«\80 àª¨à«\8bàª\82ધ àª²à«\87શà«\8b àª\95à«\87, àª\9cà«\8b àª¤àª®à«\87 àªªàª¸àª\82દ àª\95રà«\87લા àª¨àªµàª¾ àª¨àª¾àª® àªµàª¾àª³à«\81àª\82 àªªàª¾àª¨à«\81àª\82 àª\85સà«\8dતિતà«\8dવમાàª\82 àª¹àª¶à«\87 àª¤à«\8b àª\9cà«\81નà«\81àª\82 àªªàª¾àª¨à«\81àª\82 '''નહà«\80 àª\96સà«\87''', àª¸àª¿àªµàª¾àª¯àª\95à«\87 àª¤à«\87 àªªàª¾àª¨à«\81àª\82 àª\96ાલà«\80 àª¹à«\8bય àª\85થવા àª¤à«\87 àªªàª£ àª\85નà«\8dયતà«\8dર àªµàª¾àª³àª¤à«\81àª\82 àªªàª¾àª¨à«\81àª\82 àª¹à«\8bય àª\85નà«\87 àª¤à«\87નà«\8b àª\95à«\8bàª\88 àª\87તિહાસ àª¨àª¾ àª¹à«\8bય.
+એ વાતની નોંધ લેશો કે, જો તમે પસંદ કરેલા નવા નામ વાળું પાનું અસ્તિત્વમાં હશે તો જુનું પાનું '''નહી ખસે''', સિવાયકે તે પણ અન્યત્ર વાળતું પાનું હોય અને તેનો કોઈ ઇતિહાસ ના હોય.
 આનો અર્થ એમ થાય છે કે જો તમે કોઈ તબક્કે ભુલ કરશો તો જે પાનાનું નામ બદલવાનો પ્રયત્ન કરતા હોવ તેને તમે ફરી પાછા જુના નામ પર જ પાછું વાળી શકશો, અને બીજું કે પહેલેથી બનેલા પાનાનું નામ તમે નામફેર કરવા માટે ના વાપરી શકો.
 
 '''ચેતવણી!'''
@@ -2930,12 +2931,19 @@ $1',
 'pageinfo-title' => ' $1 પાના ની માહિતી નૂ મથાડૂ',
 'pageinfo-header-basic' => 'સામાન્ય માહિતી',
 'pageinfo-header-edits' => 'ઇતિહાસ સંપાદન',
+'pageinfo-header-restrictions' => 'પાનાંની સુરક્ષા',
 'pageinfo-header-properties' => 'પાનાંના ગુણધર્મો',
 'pageinfo-display-title' => 'દેખાવ શિર્ષક',
+'pageinfo-default-sort' => 'મૂળભૂત ગોઠવણી કળ',
 'pageinfo-length' => 'પૃષ્ઠની લંબાઇ (બાઇટમાં)',
+'pageinfo-article-id' => 'પાનાં ઓળખ',
+'pageinfo-language' => 'પાનાંની વિગતની ભાષા',
 'pageinfo-robot-policy' => 'શોધ એન્જિન સ્થિતિ',
+'pageinfo-robot-index' => 'અનુક્રમિય',
+'pageinfo-robot-noindex' => 'અનુક્રમિય નહી',
 'pageinfo-views' => 'જોનારાની સંખ્યા',
 'pageinfo-watchers' => 'પાના નીરીક્ષકોની સંખ્યા',
+'pageinfo-subpages-name' => 'આ પાનાંનું ઉપપાનું',
 'pageinfo-firstuser' => 'પૃષ્ઠ સર્જક',
 'pageinfo-firsttime' => 'પૃષ્ઠ સર્જનની તારીખ',
 'pageinfo-lastuser' => 'છેલ્લો ફેરફાર કરનાર',
@@ -2943,10 +2951,16 @@ $1',
 'pageinfo-edits' => 'કુલ સંપાદનોની સંખ્યા',
 'pageinfo-authors' => 'ક્ષેત્રના લેખકોની કુલ સંખ્યા',
 'pageinfo-recent-edits' => 'તાજા ફેરફારોની સંખ્યા (છેલ્લા $1 દરમ્યાન)',
+'pageinfo-hidden-categories' => 'છુપી {{PLURAL:$1|શ્રેણી|શ્રેણીઓ}} ($1)',
+'pageinfo-templates' => 'પ્રયુક્ત {{PLURAL:$1|ઢાંચો|ઢાંચાઓ}} ($1)',
 'pageinfo-toolboxlink' => 'પૃષ્ઠમાહિતી',
 'pageinfo-redirectsto-info' => 'માહિતી',
 'pageinfo-contentpage-yes' => 'હા',
 'pageinfo-protect-cascading-yes' => 'હા',
+'pageinfo-category-info' => 'શ્રેણી માહિતી',
+'pageinfo-category-pages' => 'પાનાંઓની સંખ્યા',
+'pageinfo-category-subcats' => 'ઉપશ્રેણીઓની સંખ્યા',
+'pageinfo-category-files' => 'ફાઇલ્સની સંખ્યા',
 
 # Patrolling
 'markaspatrolleddiff' => 'નિરીક્ષીત અંકિત કરો',
@@ -3666,7 +3680,7 @@ $5
 'specialpages-group-highuse' => 'વધુ વપરાશ ધરાવતા પાના',
 'specialpages-group-pages' => 'પાનાની યાદીઓ',
 'specialpages-group-pagetools' => 'પાના સાધનો',
-'specialpages-group-wiki' => 'વિàª\95િ àª®àª¾àª¹àª¿àª¤à«\80સàª\82àª\9a અને સાધનો',
+'specialpages-group-wiki' => 'માહિતà«\80 અને સાધનો',
 'specialpages-group-redirects' => 'ખાસ પાના પરના સમૂહ દિશાનિર્દેશન',
 'specialpages-group-spam' => 'સ્પેમ સાધનો',
 
@@ -3730,14 +3744,16 @@ $5
 'htmlform-submit' => 'જમા કરો',
 'htmlform-reset' => 'ફેરફાર ઉલટાવો',
 'htmlform-selectorother-other' => 'અન્ય',
+'htmlform-no' => 'ના',
+'htmlform-yes' => 'હા',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 પૂર્ણ શબ્દ શોધ સહીત',
 'sqlite-no-fts' => '$1 પૂર્ણ શબ્દ  શોધ વિકલ્પ વગર',
 
 # New logging system
-'logentry-delete-delete' => '$1 દ્વારા પાનું $3 દૂર કરવામાં આવ્યું',
-'logentry-delete-restore' => '$1 પુનઃસંગ્રહ પાનું $3',
+'logentry-delete-delete' => '$1 દ્વારા પાનું $3 {{GENDER:$2|દૂર કરવામાં આવ્યું}}',
+'logentry-delete-restore' => '$1 {{GENDER:$2|પુનઃસંગ્રહ}} પાનું $3',
 'logentry-delete-event' => '$1 બદલાઈ ના દૃશ્યતા {{PLURAL: $5 | લોગ ઘટના | $5 લોગ}} $3 ઘટનાઓ પર $4',
 'logentry-delete-revision' => '$1 બદલાઈ ના દૃશ્યતા {{PLURAL: $5 | સુધારણા | $5 આવૃત્તિઓ}} $3 પાનાં પર: $4',
 'logentry-delete-event-legacy' => '$1 બદલાઈ $3 પર લોગ ઘટનાઓ દૃશ્યતા',
@@ -3761,10 +3777,10 @@ $5
 'logentry-move-move_redir-noredirect' => '$1એ દિશાનિર્દેશન કરીને પાના $3ને $4 પર વાળ્યું પણ પાછળ દિશાનિર્દેશન છોડ્યું નહી',
 'logentry-patrol-patrol' => '$1 આવૃત્તિ ચિહ્નિત થયેલ પાનાં $4 $3 ચોકી કરવા ફરવા નીકળવું',
 'logentry-patrol-patrol-auto' => '$1 આપોઆપ ચિહ્નિત ચોકી પહેરો કરવા લાગ્યા આવૃત્તિ પાનું $4 $3',
-'logentry-newusers-newusers' => 'સભ્ય ખાતું $1 બનાવવામાં આવ્યું',
-'logentry-newusers-create' => 'સભ્ય ખાતું $1 બનાવવામાં આવ્યું',
-'logentry-newusers-create2' => 'સભ્ય ખાતું $3 $1 વડે બનાવવામાં આવ્યું',
-'logentry-newusers-autocreate' => 'àª\8fàª\95ાàª\89નà«\8dàª\9f $1 àª¬àª¨àª¾àªµàª¨àª¾àª° àª\86પà«\8bàª\86પ',
+'logentry-newusers-newusers' => 'સભ્ય ખાતું $1 {{GENDER:$2|બનાવવામાં આવ્યું}}',
+'logentry-newusers-create' => 'સભ્ય ખાતું $1 {{GENDER:$2|બનાવવામાં આવ્યું}}',
+'logentry-newusers-create2' => 'સભ્ય ખાતું $3 $1 વડે {{GENDER:$2|બનાવવામાં આવ્યું હતું}}',
+'logentry-newusers-autocreate' => 'વપરાશàª\95રà«\8dતા àª\96ાતà«\81àª\82 $1 àª\86પમà«\87ળà«\87 {{GENDER:$2|બનાવવામાàª\82 àª\86વà«\8dયà«\81àª\82 àª¹àª¤à«\81àª\82}}',
 'rightsnone' => '(કંઈ નહી)',
 
 # Feedback
@@ -3798,6 +3814,7 @@ $5
 'api-error-empty-file' => 'તમે ચડાવેલ ફાઈલ ખાલી છે',
 'api-error-emptypage' => 'નવા ખાલી પાનાં બનાવવાની પરવાનગી નથી.',
 'api-error-fetchfileerror' => 'આંતરીક ત્રુટી: ફાઈલ લાવતી વખતે અમુક ગડબડ થઈ',
+'api-error-fileexists-forbidden' => '"$1" નામે ફાઇલ અસ્તિત્વમાં છે, અને તે અધિલેખિત થઈ શકશે નહિ.',
 'api-error-file-too-large' => 'તમે ચડાવેલી ફાઈલ ખૂબ મોટી છે',
 'api-error-filename-tooshort' => 'ફાઇલ નામ ખૂબ ટૂંકું છે',
 'api-error-filetype-banned' => 'આ પ્રકારની ફાઈલ પ્રતિબંધિત છે.',
@@ -3817,6 +3834,7 @@ $5
 'api-error-ok-but-empty' => 'આંતરીક ત્રુટી: સર્વર તરફથી કોઈ પ્રત્યુત્તર નથી',
 'api-error-overwrite' => 'વિહરમાન ફાઇલ પર પુનર્લેખન કરવાની પરવાનગી નથી',
 'api-error-stashfailed' => 'આંતરીક ક્ષતિ: હંગામી ફાઈલ સંચયમાં સર્વર નિષ્ફળ',
+'api-error-publishfailed' => 'આંતરીક ક્ષતિ: હંગામી ફાઈલ સંચયમાં સર્વર નિષ્ફળ.',
 'api-error-timeout' => 'અપેક્ષિત સમય સુધી સર્વરે પ્રત્યુત્તર ન આપ્યો.',
 'api-error-unclassified' => 'અજ્ઞાત ચૂક થઈ.',
 'api-error-unknown-code' => 'અજ્ઞાત ક્ષતિ: "$1".',
index e94c0db..ad945fc 100644 (file)
@@ -66,6 +66,7 @@ $messages = array(
 'tog-watchlisthidepatrolled' => 'Follee arraghyn er nyn scrutaghey er my rolley arrey',
 'tog-ccmeonemails' => 'Cur coip dou jeh dagh post-l verrym da ymmydeyr elley',
 'tog-showhiddencats' => 'Taishbyn ny ronnaghyn follit',
+'tog-useeditwarning' => 'Cur raaue dou my ta mee faagail duillag reaghey gyn sauail yn obbyr jeant aym',
 
 'underline-always' => 'Dagh keayrt',
 'underline-never' => 'Ny jean eh arragh',
@@ -500,6 +501,8 @@ Foddee shiu goll er ash as reaghey duillag t'ayn nish, ny [[Special:UserLogin|lo
 
 By chair dhyt smooinagh vel eh kiart goll er oai lesh reaghey yn duillag shoh.<br />
 Ta lioar ny scryssaghyn magh kiarit ayns shoh rere dty chaays hene:",
+'editwarning-warning' => "My faagys oo y duillag, hed caghlaaghyn erbee er coayl, foddee.
+My t'ou uss loggalt stiagh, foddee oo lhiettal y raaue shoh 'sy tosheeaghtyn ayd, 'sy rheynn \"Reaghey\".",
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Cha nod coontys y chroo',
@@ -594,9 +597,6 @@ My t'ou uss son ronsaghey dagh cooid (as shen goaill stiagh duillagyn resooney,
 'powersearch-field' => 'Ronsee er son',
 'search-external' => 'Ronsaghey mooie',
 
-# Quickbar
-'qbsettings-none' => 'Veg',
-
 # Preferences page
 'preferences' => 'Tosheeaghtyn',
 'mypreferences' => 'My hosheeaghtyn',
index 84bd6c6..9d60c9f 100644 (file)
@@ -381,8 +381,6 @@ $messages = array(
 'tog-shownumberswatching' => 'הצגת מספר המשתמשים העוקבים אחרי הדף',
 'tog-oldsig' => 'החתימה הקיימת:',
 'tog-fancysig' => 'פירוש החתימה כקוד ויקי (ללא קישור אוטומטי)',
-'tog-externaleditor' => 'שימוש בעורך חיצוני כברירת מחדל (למשתמשים מומחים בלבד, דורש הגדרות מיוחדות במחשב. [//www.mediawiki.org/wiki/Manual:External_editors למידע נוסף.])',
-'tog-externaldiff' => 'שימוש בתוכנת השוואת הגרסאות החיצונית כברירת מחדל (למשתמשים מומחים בלבד, דורש הגדרות מיוחדות במחשב. [//www.mediawiki.org/wiki/Manual:External_editors למידע נוסף.])',
 'tog-showjumplinks' => 'הצגת קישורי נגישות מסוג "קפוץ אל"',
 'tog-uselivepreview' => 'שימוש בתצוגה מקדימה מהירה (דרוש JavaScript) (ניסיוני)',
 'tog-forceeditsummary' => 'הצגת אזהרה בעת הכנסת תקציר עריכה ריק',
@@ -397,6 +395,7 @@ $messages = array(
 'tog-showhiddencats' => 'הצגת קטגוריות מוסתרות',
 'tog-noconvertlink' => 'ביטול המרת קישורים לכותרות',
 'tog-norollbackdiff' => 'השמטת ההבדלים בין הגרסאות לאחר ביצוע שחזור',
+'tog-useeditwarning' => 'הצגת אזהרה בעת עזיבת דף עריכה עם שינויים שטרם נשמרו',
 
 'underline-always' => 'תמיד',
 'underline-never' => 'לעולם לא',
@@ -769,9 +768,15 @@ $2',
 'welcomecreation-msg' => 'חשבונך נוצר.
 נא לא לשכוח להתאים את [[Special:Preferences|העדפות המשתמש]] שלך ב{{grammar:תחילית|{{SITENAME}}}}.',
 'yourname' => 'שם משתמש:',
+'userlogin-yourname' => 'שם משתמש',
+'userlogin-yourname-ph' => 'יש להקליד את שם המשתמש',
 'yourpassword' => 'סיסמה:',
-'yourpasswordagain' => 'הקש סיסמה שנית:',
+'userlogin-yourpassword' => 'סיסמה',
+'userlogin-yourpassword-ph' => 'יש להקליד את הסיסמה',
+'yourpasswordagain' => 'חזרה על הסיסמה:',
 'remembermypassword' => 'שמירת הכניסה שלי בדפדפן הזה (ל{{PLURAL:$1|יום אחד|יומיים|־$1 ימים}} לכל היותר)',
+'userlogin-remembermypassword' => 'זכור אותי',
+'userlogin-signwithsecure' => 'כניסה לחשבון עם שרת מאובטח',
 'securelogin-stick-https' => 'המשך שימוש ב־HTTPS אחרי הכניסה',
 'yourdomainname' => 'המתחם שלך:',
 'password-change-forbidden' => 'אינכם יכולים לשנות סיסמאות באתר זה.',
@@ -784,12 +789,16 @@ $2',
 'logout' => 'יציאה מהחשבון',
 'userlogout' => 'יציאה מהחשבון',
 'notloggedin' => 'לא בחשבון',
+'userlogin-noaccount' => 'אין לך חשבון?',
+'userlogin-joinproject' => 'הצטרפות ל{{grammar:תחילית|{{SITENAME}}}}',
 'nologin' => 'אין לכם חשבון? $1.',
 'nologinlink' => 'הרשמה',
 'createaccount' => 'יצירת חשבון חדש',
 'gotaccount' => 'כבר נרשמתם? $1.',
 'gotaccountlink' => 'כניסה לחשבון',
 'userlogin-resetlink' => 'שכחת את פרטי הכניסה?',
+'helplogin-url' => 'Help:כניסה לחשבון',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|עזרה בכניסה לחשבון]]',
 'createaccountmail' => 'שימוש בסיסמה זמנית אקראית ושליחתה לכתובת הדוא"ל המצוינת להלן',
 'createaccountreason' => 'סיבה:',
 'badretype' => 'הסיסמאות שהזנתם אינן מתאימות.',
@@ -894,6 +903,7 @@ $2',
 'passwordreset-text' => 'מלאו טופס זה כדי לאפס את הסיסמה.',
 'passwordreset-legend' => 'איפוס סיסמה',
 'passwordreset-disabled' => 'איפוסי סיסמה בוטלו באתר ויקי זה.',
+'passwordreset-emaildisabled' => 'שירותי הדוא"ל בוטלו באתר ויקי זה.',
 'passwordreset-pretext' => '{{PLURAL:$1||הקלידו אחד מפריטי המידע למטה}}',
 'passwordreset-username' => 'שם משתמש:',
 'passwordreset-domain' => 'תחום:',
@@ -924,7 +934,7 @@ $2
 סיסמה זמנית: $2',
 'passwordreset-emailsent' => 'נשלח דואר אלקטרוני לאיפוס הסיסמה.',
 'passwordreset-emailsent-capture' => 'נשלח דואר אלקטרוני לאיפוס הסיסמה, והוא מוצג להלן.',
-'passwordreset-emailerror-capture' => 'נוצר דואר אלקטרוני לאיפוס הסיסמה, והוא מוצג להלן, אך שליחתו למשתמש נכשלה: $1',
+'passwordreset-emailerror-capture' => 'נוצר דואר אלקטרוני לאיפוס הסיסמה, והוא מוצג להלן, אך שליחתו ל{{GENDER:$2|משתמש|משתמשת}} נכשלה: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'שינוי כתובת דוא"ל',
@@ -1138,6 +1148,8 @@ $2
 'content-failed-to-parse' => 'פענוח $2 כתוכן מסוג $1 נכשל: $3',
 'invalid-content-data' => 'מידע שגוי על התוכן',
 'content-not-allowed-here' => 'תוכן מסוג "$1" אינו מותר בדף [[$2]]',
+'editwarning-warning' => 'עזיבת דף זה עשויה לגרום לאובדן כל השינויים שביצעתם.
+אם אתם מחוברים לחשבון, תוכלו לבטל אזהרה זו בחלק "עריכה" שבהעדפות שלכם.',
 
 # Content models
 'content-model-wikitext' => 'טקסט ויקי',
@@ -1995,8 +2007,8 @@ $1',
 'license-header' => 'רישיון',
 'nolicense' => 'אין',
 'license-nopreview' => '(תצוגה מקדימה לא זמינה)',
-'upload_source_url' => ' (כתובת URL תקפה ונגישה)',
-'upload_source_file' => ' (קובץ במחשב שלך)',
+'upload_source_url' => '(כתובת URL תקפה ונגישה)',
+'upload_source_file' => '(קובץ במחשב שלך)',
 
 # Special:ListFiles
 'listfiles-summary' => 'דף מיוחד זה מציג את כל הקבצים שהועלו.
@@ -4073,6 +4085,8 @@ $5
 'htmlform-submit' => 'שליחה',
 'htmlform-reset' => 'ביטול השינויים',
 'htmlform-selectorother-other' => 'אחר',
+'htmlform-no' => 'לא',
+'htmlform-yes' => 'כן',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 עם תמיכה בחיפוש בטקסט מלא',
index a7a4085..202df38 100644 (file)
@@ -217,8 +217,6 @@ $messages = array(
 'tog-shownumberswatching' => 'ध्यान रखने वाले सदस्यों की संख्या दिखाएँ',
 'tog-oldsig' => 'वर्तमान हस्ताक्षर:',
 'tog-fancysig' => 'हस्ताक्षर का विकिपाठ के समान उपयोग करें (बिना स्वचालित कड़ी के)',
-'tog-externaleditor' => 'डिफ़ॉल्ट रूप से बाह्य सम्पादक का उपयोग करें (केवल विशेषज्ञों के लिए, इसके लिए संगणक पर विशेष जमाव चाहिए होंगे। [//www.mediawiki.org/wiki/Manual:External_editors अधिक जानकारी।])',
-'tog-externaldiff' => 'डिफ़ॉल्ट रूप से बाह्य अन्तर का उपयोग करें (केवल विशेषज्ञों के लिए, इसके लिए संगणक पर विशेष जमाव चाहिए होंगे। [//www.mediawiki.org/wiki/Manual:External_editors अधिक जानकारी।])',
 'tog-showjumplinks' => '"की ओर जाएं" कड़ियाँ उपलब्ध कराएँ',
 'tog-uselivepreview' => 'सजीवन झलक का उपयोग करें (जावास्क्रिप्ट चाहिए) (प्रयोगक्षम)',
 'tog-forceeditsummary' => 'यदि बदलाव सारांश ना दिया गया हो तो मुझे सूचित करें',
@@ -1237,15 +1235,6 @@ $1",
 आप गूगल से खोज कर सकते हैं।
 ध्यान रखें कि उनकी {{SITENAME}} सामग्री की सूची पुरानी हो सकती है।',
 
-# Quickbar
-'qbsettings' => 'शीघ्रपट',
-'qbsettings-none' => 'बिल्कुल नहीं',
-'qbsettings-fixedleft' => 'स्थिर बाईं ओर',
-'qbsettings-fixedright' => 'स्थिर दाहिनी ओर',
-'qbsettings-floatingleft' => 'अस्थिर बाईं ओर',
-'qbsettings-floatingright' => 'अस्थिर दाहिनी ओर',
-'qbsettings-directionality' => 'निश्चित, आपकी भाषा की लिपि की दिशात्मकता पर निर्भर',
-
 # Preferences page
 'preferences' => 'मेरी वरीयताएँ',
 'mypreferences' => 'पसंद',
@@ -1805,7 +1794,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'http-read-error' => 'एच॰टी॰टी॰पी पढ़ने में त्रुटि।',
 'http-timed-out' => 'एच॰टी॰टी॰पी अनुरोध का समय समाप्त (टाइम आउट)',
 'http-curl-error' => 'यू॰आर॰एल $1 पाने में त्रुटि',
-'http-host-unreachable' => 'यू॰आर॰एल तक पहुँचा नहीं जा सका।',
 'http-bad-status' => 'एच॰टी॰टी॰पी अनुरोध के दौरान समस्या थी: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2125,15 +2113,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization देखें।',
 'listusers-noresult' => 'सदस्य नहीं मिला।',
 'listusers-blocked' => '(अवरोधित)',
 
-# Special:ActiveUsers
-'activeusers' => 'सक्रिय सदस्यों की सूची',
-'activeusers-intro' => 'यह सक्रिय सदस्यों की सूची है जिन्होंने पिछले $1 {{PLURAL:$1|दिन|दिनों}} में कुछ गतिविधि करी है।',
-'activeusers-count' => '$1 {{PLURAL:$1|सम्पादन}} पिछले $3 {{PLURAL:$3|दिन|दिनों}} में',
-'activeusers-from' => 'इस अक्षर से शुरू होने वाले सदस्य दिखाएँ:',
-'activeusers-hidebots' => 'बॉट छुपाएँ',
-'activeusers-hidesysops' => 'प्रबंधक छुपाएँ',
-'activeusers-noresult' => 'कोई सदस्य नहीं मिले।',
-
 # Special:ListGroupRights
 'listgrouprights' => 'सदस्य समूह अधिकार',
 'listgrouprights-summary' => 'नीचे इसे विकि के लिए परिभाषित सदस्य समूहों की सूची है, साथ में हर समूह से जुड़े अधिकार भी वर्णित हैं।
index b1bc115..68c5ae4 100644 (file)
@@ -65,8 +65,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Ketna sadasya dekhe hai ke number dekhao',
 'tog-oldsig' => 'Abhi ke signature:',
 'tog-fancysig' => 'Signature ke wikitext ke rakam dekho (binaa automatic jorr se)',
-'tog-externaleditor' => 'Apne se bahaari editor ke kaam me lao (khaali chalaak logan khatir, computer me special settings ke jaruri hai. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
-'tog-externaldiff' => ' Apne se bahaari editor ke kaam me lao (khaali chalaak logan khatir, computer me special settings ke jaruri hai. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
 'tog-showjumplinks' => '"jump to" accessibility jorr ke laabu karo',
 'tog-uselivepreview' => 'Jinda jhalak ke kaam me lao (JavaScript) (Experimental)',
 'tog-forceeditsummary' => 'Ek khali badlao waala summary ke likhe ke time hamse puchho',
index 7b38419..48c6df3 100644 (file)
@@ -48,8 +48,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Ipakita ang numero sang mga nagalantaw nga manug-gamit',
 'tog-oldsig' => 'Nagapabilin nga pirma:',
 'tog-fancysig' => 'Tratoha ang pirma bilang wikitext (wala sang tabid nga dayon)',
-'tog-externaleditor' => 'Gamiton dayon ang pang-guha nga manug-ilis (para sa mga sagad lamang, nagakinahanglan sang espesyal nga pagkay-o sa imo computer. [//www.mediawiki.org/wiki/Manual:External_editors Mas madamo pa nga impormasyon.])',
-'tog-externaldiff' => 'Gamiton dayon ang pang-guha nga diff (para sa mga sagad lamang, nagakinahanglan sang espesyal nga pagkay-o sa imo computer. [//www.mediawiki.org/wiki/Manual:External_editors Mas madamo pa nga impormasyon.])',
 'tog-showjumplinks' => 'Sugtan ang "maglumpat sa" nga mga tabid sang paalagyan',
 'tog-uselivepreview' => 'Gamiton ang preview nga live (nagakinahanglan sang JavaScript) (experimentohanon)',
 'tog-forceeditsummary' => 'Sugidi ako kon magasulod ako sa blanko nga kabilogan sang pag-ilis',
@@ -1110,15 +1108,6 @@ Testingan mo i-prefiks ang imo pamangkot upod sang ''tanan:'' para makita mo ang
 Mahimo ka nga magpangita gamit ang Google sa sini nga tion.
 Tandai nga ang ila nga palasulundan sang mga unod sang {{SITENAME}} mahimo nga madaan na.',
 
-# Quickbar
-'qbsettings' => 'Bar nga mahapos',
-'qbsettings-none' => 'Wala',
-'qbsettings-fixedleft' => 'Gintadlong sa wala',
-'qbsettings-fixedright' => 'Gintadlong sa too',
-'qbsettings-floatingleft' => 'Nagalutaw sa wala',
-'qbsettings-floatingright' => 'Nagalutaw sa too',
-'qbsettings-directionality' => 'Indi na maliwat, depende sa direksyon sang iskrip sang imo lenggwahe',
-
 # Preferences page
 'preferences' => 'Mga Ginabasehan',
 'mypreferences' => 'Mga Ginabasehan',
index f1bc100..6906a66 100644 (file)
@@ -343,8 +343,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Prikaži broj suradnika koji prate stranicu (u nedavnim izmjenama, popisu praćenja i samim člancima)',
 'tog-oldsig' => 'Pregled postojećeg potpisa:',
 'tog-fancysig' => 'Običan potpis kao wikitekst (bez automatske poveznice)',
-'tog-externaleditor' => 'Uvijek koristi vanjski program za uređivanje (samo za napredne, potrebne su posebne postavke na računalu. [//www.mediawiki.org/wiki/Manual:External_editors Dodatne informacije.])',
-'tog-externaldiff' => 'Uvijek koristi vanjski program za usporedbu (samo za napredne, potrebne su posebne postavke na računalu. [//www.mediawiki.org/wiki/Manual:External_editors Dodatne informacije.])',
 'tog-showjumplinks' => 'Uključi pomoćne poveznice "Skoči na"',
 'tog-uselivepreview' => 'Uključi trenutačni pretpregled (JavaScript) (eksperimentalno)',
 'tog-forceeditsummary' => 'Podsjeti me ako sažetak uređivanja ostavljam praznim',
@@ -358,6 +356,7 @@ $messages = array(
 'tog-diffonly' => 'Ne prikazuj sadržaj stranice prilikom usporedbe inačica',
 'tog-showhiddencats' => 'Prikaži skrivene kategorije',
 'tog-norollbackdiff' => 'Izostavi razliku nakon upotrebe ukloni',
+'tog-useeditwarning' => 'Upozori me kad napuštam stranicu za uređivanje bez spremanja izmjena',
 
 'underline-always' => 'Uvijek',
 'underline-never' => 'Nikad',
@@ -430,7 +429,7 @@ $messages = array(
 'category-empty' => "''U ovoj kategoriji trenutačno nema članaka ni medija.''",
 'hidden-categories' => '{{PLURAL:$1|Skrivena kategorija|Skrivene kategorije|Skrivenih kategorija}}',
 'hidden-category-category' => 'Skrivene kategorije',
-'category-subcat-count' => '{{PLURAL:$2|Ova kategorija ima samo sljedeću podkategoriju.|Ova kategorija ima {{PLURAL:$1|podkategoriju|$1 podkategorije|$1 podkategorija}}, od njih $2 ukupno.}}',
+'category-subcat-count' => 'Ova kategorija sadrži $2 {{PLURAL:$2|podkategoriju|podkategorije|podkategorija}}, ovaj popis prikazuje $1.',
 'category-subcat-count-limited' => 'Ova kategorija ima {{PLURAL:$1|podkategoriju|$1 podkategorije|$1 podkategorija}}.',
 'category-article-count' => '{{PLURAL:$2|Ova kategorija sadrži $2 članak.|{{PLURAL:$1|Prikazano je $1 članak|Prikazana su $1 članka|Prikazano je $1 članaka}} od njih $2 ukupno.}}',
 'category-article-count-limited' => '{{PLURAL:$1|stranica je|$1 stranice su|$1 stranica je}} u ovoj kategoriji.',
@@ -1076,6 +1075,8 @@ Stranica već postoji.',
 'content-failed-to-parse' => "Obrada (''parsiranje'') formata $2 za model $1 nije uspjela: $3",
 'invalid-content-data' => 'Nevaljani sadržaj',
 'content-not-allowed-here' => 'Sadržaj napisan u obliku "$1"-a nije dozvoljen na stranici [[$2]]',
+'editwarning-warning' => 'Napuštanje ove stranice može uzrokovati gubitak svake izmjene koju ste napravili.
+Možete onemogućiti ovo upozorenje u odjeljku "{{int:prefs-editing}}" Vaših postavki.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
@@ -1356,15 +1357,6 @@ Više informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{F
 'search-external' => 'Vanjski pretraživač',
 'searchdisabled' => '<p>Oprostite! Pretraga po cjelokupnoj bazi je zbog bržeg rada projekta {{SITENAME}} trenutačno onemogućena. Možete se poslužiti tražilicom Google.</p>',
 
-# Quickbar
-'qbsettings' => 'Traka',
-'qbsettings-none' => 'Bez',
-'qbsettings-fixedleft' => 'Lijevo nepomično',
-'qbsettings-fixedright' => 'Desno nepomično',
-'qbsettings-floatingleft' => 'Lijevo leteće',
-'qbsettings-floatingright' => 'Desno leteće',
-'qbsettings-directionality' => 'Fiksno, ovisno o smjeru pisma Vašeg jezika',
-
 # Preferences page
 'preferences' => 'Postavke',
 'mypreferences' => 'Moje postavke',
@@ -1897,7 +1889,6 @@ Za optimalnu sigurnost, img_auth.php je onemogućena.',
 'http-read-error' => 'Pogrješka pri čitanju HTTP.',
 'http-timed-out' => 'HTTP zahtjev je istekao.',
 'http-curl-error' => 'Pogrješka pri otvaranju URL-a: $1',
-'http-host-unreachable' => 'URL nije dostupan.',
 'http-bad-status' => 'Došlo je do problema tijekom HTTP zahtjeva: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3082,12 +3073,8 @@ Razlog je vjerojatno vanjska poveznica koja se nalazi na crnom popisu.',
 'pageinfo-protect-cascading-from' => 'Prenosiva zaštita počinje od',
 
 # Skin names
-'skinname-standard' => 'Standardna',
-'skinname-nostalgia' => 'Nostalgija',
 'skinname-cologneblue' => 'Kölnska plava',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Chick',
 
 # Patrolling
 'markaspatrolleddiff' => 'Označi za pregledano',
index 6e5cb8c..20ef535 100644 (file)
@@ -184,8 +184,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Ličbu wobkedźbowacych wužiwarjow pokazać',
 'tog-oldsig' => 'Eksistowaca signatura:',
 'tog-fancysig' => 'Ze signaturu kaž z wikitekstom wobchadźeć  (bjez awtomatiskeho wotkaza)',
-'tog-externaleditor' => 'Eksterny editor jako standard wužiwać (jenož za ekspertow, žada sej specialne nastajenja na wašim ličaku. [//www.mediawiki.org/wiki/Manual:External_editors Dalše informacije.])',
-'tog-externaldiff' => 'Eksterny diff-program jako standard wužiwać (jenož za ekspertow, žada sej specialne nastajenja na wašim ličaku. [//www.mediawiki.org/wiki/Manual:External_editors Dalše informacije.])',
 'tog-showjumplinks' => 'Wotkazy typa „dźi do” zmóžnić',
 'tog-uselivepreview' => 'Live-přehlad wužiwać (wužaduje sej JavaScript) (eksperimentalny)',
 'tog-forceeditsummary' => 'Mje skedźbnić, jeli zabudu zjeće',
@@ -199,6 +197,7 @@ $messages = array(
 'tog-diffonly' => 'Jenož rozdźěle pokazać (nic pak zbytny wobsah)',
 'tog-showhiddencats' => 'Schowane kategorije pokazać',
 'tog-norollbackdiff' => 'Rozdźěl po wróćostajenju zanjechać',
+'tog-useeditwarning' => 'Warnować, hdyž so wobdźěłowanska strona z njeskładowanymi změnami wopušća',
 
 'underline-always' => 'Přeco',
 'underline-never' => 'Ženje',
@@ -904,6 +903,7 @@ Eksistuje hižo.',
 'content-failed-to-parse' => 'Parsowanje wobsaha $2 za model $1 je so njeporadźiło: $3',
 'invalid-content-data' => 'Njepłaćiwe wobsahowe daty',
 'content-not-allowed-here' => 'Wobsah "$1" njeje na stronje [[$2]] dowoleny',
+'editwarning-warning' => 'Hdyž so strona wopušća, móžeja so změny zhubić, kotrež sy přewjedł. Jeli sy přizjewjeny, móžeš tute warnowanje we wotrězku {{int:prefs-editing}} swojich nastajenjow znjemóžnić.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
index 178f1e5..f7072de 100644 (file)
@@ -343,8 +343,6 @@ $messages = array(
 'tog-shownumberswatching' => 'A lapot figyelő szerkesztők számának megjelenítése',
 'tog-oldsig' => 'A jelenlegi aláírás:',
 'tog-fancysig' => 'Az aláírás wikiszöveg (nem lesz automatikusan hivatkozásba rakva)',
-'tog-externaleditor' => 'Külső szerkesztőprogram használata (Csak haladók számára, speciális beállításokra van szükség a számítógépen. [//www.mediawiki.org/wiki/Manual:External_editors További információ angolul.])',
-'tog-externaldiff' => 'Külső diff program használata (Csak haladók számára, speciális beállításokra van szükség a számítógépen. [//www.mediawiki.org/wiki/Manual:External_editors További információ angolul.])',
 'tog-showjumplinks' => 'Helyezzen el hivatkozást („Ugrás”) a beépített eszköztárra',
 'tog-uselivepreview' => 'Élő előnézet használata (JavaScript-alapú, kísérleti)',
 'tog-forceeditsummary' => 'Figyelmeztessen, ha nem adok meg szerkesztési összefoglalót',
@@ -358,6 +356,7 @@ $messages = array(
 'tog-diffonly' => 'Ne mutassa a lap tartalmát a lapváltozatok közötti eltérések megtekintésekor',
 'tog-showhiddencats' => 'Rejtett kategóriák megjelenítése',
 'tog-norollbackdiff' => 'Ne jelenjenek meg az eltérések visszaállítás után',
+'tog-useeditwarning' => 'Figyelmeztessen, ha szerkesztéskor a módosítások mentése nélkül akarom elhagyni a lapot',
 
 'underline-always' => 'mindig',
 'underline-never' => 'soha',
@@ -723,9 +722,13 @@ Lehetséges, hogy néhány oldalon továbbra is azt látod, be vagy jelentkezve,
 'welcomecreation-msg' => 'A felhasználói fiókod elkészült.
 Ne felejtsd el módosítani a [[Special:Preferences|{{SITENAME}} beállításaidat]].',
 'yourname' => 'Szerkesztőneved:',
+'userlogin-yourname' => 'Felhasználónév',
 'yourpassword' => 'Jelszavad:',
+'userlogin-yourpassword' => 'Jelszó',
 'yourpasswordagain' => 'Jelszavad ismét:',
 'remembermypassword' => 'Emlékezzen rám ezen a számítógépen (legfeljebb $1 napig)',
+'userlogin-remembermypassword' => 'Emlékezzen rám',
+'userlogin-signwithsecure' => 'Bejelentkezés a biztonságos kiszolgálón keresztül',
 'securelogin-stick-https' => 'Kapcsolódás HTTPS-en keresztül bejelentkezés után is',
 'yourdomainname' => 'A domainneved:',
 'password-change-forbidden' => 'Nem módosíthatod a jelszót ezen a wikin.',
@@ -738,12 +741,16 @@ Ne felejtsd el módosítani a [[Special:Preferences|{{SITENAME}} beállításaid
 'logout' => 'Kijelentkezés',
 'userlogout' => 'Kijelentkezés',
 'notloggedin' => 'Nem vagy bejelentkezve',
+'userlogin-noaccount' => 'Nem rendelkezel még felhasználói fiókkal?',
+'userlogin-joinproject' => 'Csatlakozz a(z) {{SITENAME}} wikihez',
 'nologin' => "Nem rendelkezel még felhasználói fiókkal? '''$1'''.",
 'nologinlink' => 'Itt regisztrálhatsz',
 'createaccount' => 'Regisztráció',
 'gotaccount' => "Ha már korábban regisztráltál, '''$1'''.",
 'gotaccountlink' => 'Bejelentkezés',
 'userlogin-resetlink' => 'Elfelejtetted a bejelentkezési adataidat?',
+'helplogin-url' => 'Help:Bejelentkezés',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Segítség a bejelentkezéshez]]',
 'createaccountmail' => 'Átmeneti, véletlenszerű jelszó használata és kiküldése az alábbi e-mail címre',
 'createaccountreason' => 'Indoklás:',
 'badretype' => 'A megadott jelszavak nem egyeznek.',
@@ -837,9 +844,10 @@ Lehet, hogy már sikeresen megváltoztattad a jelszavad, vagy pedig időközben
 
 # Special:PasswordReset
 'passwordreset' => 'Jelszó törlése',
-'passwordreset-text' => 'Az alábbi űrlap kitöltése után egy értesítő e-mailt kapsz a fiókod adataival.',
+'passwordreset-text' => 'Az alábbi űrlap kitöltése után egy jelszóemlékeztető e-mailt kapsz a fiókod adataival.',
 'passwordreset-legend' => 'Új jelszó kérése',
 'passwordreset-disabled' => 'Új jelszó kérése nem engedélyezett ezen a wikin.',
+'passwordreset-emaildisabled' => 'Az e-mail funkció le van tiltva ezen a wikin.',
 'passwordreset-pretext' => '{{PLURAL:$1||Írd be az alábbi adatok egyikét}}',
 'passwordreset-username' => 'Felhasználónév:',
 'passwordreset-domain' => 'Tartomány:',
@@ -1075,6 +1083,8 @@ Már létezik.',
 'content-failed-to-parse' => 'Hiba történt a $2 tartalom $1 modellre történő konvertálása során: $3',
 'invalid-content-data' => 'Érvénytelen tartalom adat',
 'content-not-allowed-here' => '"$1" tartalom nem engedélyezett a [[$2]] oldalon',
+'editwarning-warning' => 'A lap elhagyásával az összes itt végzett változtatás elveszhet.
+Ha be vagy jelentkezve letilthatod ezt a figyelmeztetést a beállításaid „{{int:prefs-editing}}” szakaszában.',
 
 # Content models
 'content-model-wikitext' => 'wikiszöveg',
@@ -1351,15 +1361,6 @@ Ezt általában egy elavult, törölt oldalra mutató laptörténeti hivatkozás
 'search-external' => 'Külső kereső',
 'searchdisabled' => 'Elnézésed kérjük, de a teljes szöveges keresés terhelési okok miatt átmenetileg nem használható. Ezidő alatt használhatod a lenti Google keresést, mely viszont lehetséges, hogy nem teljesen friss adatokkal dolgozik.',
 
-# Quickbar
-'qbsettings' => 'Gyorsmenü',
-'qbsettings-none' => 'Nincs',
-'qbsettings-fixedleft' => 'Fix baloldali',
-'qbsettings-fixedright' => 'Fix jobboldali',
-'qbsettings-floatingleft' => 'Lebegő baloldali',
-'qbsettings-floatingright' => 'Lebegő jobboldali',
-'qbsettings-directionality' => 'Rögzített, a nyelved írásának irányától függően',
-
 # Preferences page
 'preferences' => 'Beállítások',
 'mypreferences' => 'Beállítások',
@@ -1909,7 +1910,6 @@ Ez a wiki publikus, így a biztonság miatt az img_auth.php ki van kapcsolva.',
 'http-read-error' => 'HTTP-olvasási hiba.',
 'http-timed-out' => 'A HTTP-kérés túllépte a határidőt.',
 'http-curl-error' => 'Hiba történt az URL lekérésekor: $1',
-'http-host-unreachable' => 'Nem sikerült elérni az URL-t.',
 'http-bad-status' => 'Probléma történt a HTTP-kérés közben: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2224,15 +2224,6 @@ Támogatott {{PLURAL:$2|protokoll|protokollok}}: <code>$1</code> (http:// az ala
 'listusers-noresult' => 'Nem található szerkesztő.',
 'listusers-blocked' => '(blokkolva)',
 
-# Special:ActiveUsers
-'activeusers' => 'Aktív szerkesztők listája',
-'activeusers-intro' => 'Ez a lap azon felhasználók listáját tartalmazza, akik csináltak valamilyen tevékenységet az elmúlt {{PLURAL:$1|egy|$1}} napban.',
-'activeusers-count' => '$1 szerkesztés az utolsó $3 napban',
-'activeusers-from' => 'Szerkesztők listázása a következő névtől kezdve:',
-'activeusers-hidebots' => 'Botok elrejtése',
-'activeusers-hidesysops' => 'Adminisztrátorok elrejtése',
-'activeusers-noresult' => 'Nem található ilyen szerkesztő.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Szerkesztői csoportok jogai',
 'listgrouprights-summary' => 'Lenn láthatóak a wikiben létező szerkesztői csoportok, valamint az azokhoz tartozó jogok.
@@ -3033,13 +3024,8 @@ Mentsd el a számítógépedre, majd töltsd fel ide.',
 
 # Stylesheets
 'common.css' => '/* Közös CSS az összes felületnek */',
-'standard.css' => '/* Az ide elhelyezett CSS hatással lesz a Klasszikus felület használóira */',
-'nostalgia.css' => '/* Az ide elhelyezett CSS hatással lesz a Nosztalgia felület használóira */',
 'cologneblue.css' => '/* Az ide elhelyezett CSS hatással lesz a Kölni kék felület használóira */',
 'monobook.css' => '/* Az ide elhelyezett CSS hatással lesz a Monobook felület használóira */',
-'myskin.css' => '/* Az ide elhelyezett CSS hatással lesz a MySkin felület használóira */',
-'chick.css' => '/* Az ide elhelyezett CSS hatással lesz a Chick felület használóira */',
-'simple.css' => '/* Az ide elhelyezett CSS hatással lesz a Egyszerű felület használóira */',
 'modern.css' => '/* Az ide elhelyezett CSS hatással lesz a Modern felület használóira */',
 'vector.css' => '/* Az ide elhelyezett CSS hatással lesz a Vector felület használóira */',
 'print.css' => '/* Az ide elhelyezett CSS hatással lesz a nyomtatás kimenetelére */',
@@ -3052,13 +3038,8 @@ Mentsd el a számítógépedre, majd töltsd fel ide.',
 
 # Scripts
 'common.js' => '/* Az ide elhelyezett JavaScript kód minden felhasználó számára lefut az oldalak betöltésekor. */',
-'standard.js' => '/* A Klasszikus felületet használó szerkesztők számára betöltendő JavaScriptek */',
-'nostalgia.js' => '/* A Nosztalgia felületet használó szerkesztők számára betöltendő JavaScriptek */',
 'cologneblue.js' => '/* A Kölni kék felületet használó szerkesztők számára betöltendő JavaScriptek */',
 'monobook.js' => '/* A Monobook felületet használó szerkesztők számára betöltendő JavaScriptek */',
-'myskin.js' => '/* A MySkin felületet használó szerkesztők számára betöltendő JavaScriptek */',
-'chick.js' => '/* A Chick felületet használó szerkesztők számára betöltendő JavaScriptek */',
-'simple.js' => '/* Az Egyszerű felületet használó szerkesztők számára betöltendő JavaScriptek */',
 'modern.js' => '/* A Modern felületet használó szerkesztők számára betöltendő JavaScriptek */',
 'vector.js' => '/* A Vector felületet használó szerkesztők számára betöltendő JavaScriptek */',
 'group-autoconfirmed.js' => '/* Az ide elhelyezett JavaScript csak automatikusan megerősített felhasználóknak töltődik be */',
@@ -3135,13 +3116,8 @@ Ez valószínűleg egy olyan link miatt van, ami egy feketelistán lévő oldalr
 'pageinfo-category-files' => 'Fájlok száma',
 
 # Skin names
-'skinname-standard' => 'Klasszikus',
-'skinname-nostalgia' => 'Nosztalgia',
 'skinname-cologneblue' => 'Kölni kék',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Egyszerű',
 'skinname-modern' => 'Modern',
 
 # Patrolling
@@ -3946,14 +3922,14 @@ A képek teljes méretben jelennek meg, más fájltípusok közvetlenül a hozz
 # New logging system
 'logentry-delete-delete' => '$1 törölte a következő lapot: $3',
 'logentry-delete-restore' => '$1 helyreállította a következő lapot: $3',
-'logentry-delete-event' => '$1 megváltoztatta {{PLURAL:$5|egy napló bejegyzés|$5 napló bejegyzés}} láthatóságát $3 lapon: $4',
+'logentry-delete-event' => '$1 megváltoztatta {{PLURAL:$5|egy napló bejegyzés|$5 napló bejegyzés}} láthatóságát a(z) $3 című lapon: $4',
 'logentry-delete-revision' => '$1 módosította a(z) $3 című lap {{PLURAL:$5|egy|$1}} lapváltozatának láthatóságát: $4',
 'logentry-delete-event-legacy' => '$1 módosította a(z) $3 című lap naplóbejegyzéseinek láthatóságát',
 'logentry-delete-revision-legacy' => '$1 módosította a(z) $3 című lap lapváltozatainak láthatóságát',
 'logentry-suppress-delete' => '$1 elrejtette a következő lapot: $3',
-'logentry-suppress-event' => '$1 rejtetten megváltoztatta {{PLURAL:$5|egy napló bejegyzés|$5 napló bejegyzés}} láthatóságát $3 lapon: $4',
-'logentry-suppress-revision' => '$1 rejtetten megváltoztatta {{PLURAL:$5|egy változat|$5 változat}} láthatóságát $3 lapon: $4',
-'logentry-suppress-event-legacy' => '$1 rejtetten megváltoztatta napló bejegyzések láthatóságát a(z) $3 lapon',
+'logentry-suppress-event' => '$1 rejtetten megváltoztatta {{PLURAL:$5|egy napló bejegyzés|$5 napló bejegyzés}} láthatóságát a(z) $3 című lapon: $4',
+'logentry-suppress-revision' => '$1 rejtetten megváltoztatta {{PLURAL:$5|egy változat|$5 változat}} láthatóságát a(z) $3 című lapon: $4',
+'logentry-suppress-event-legacy' => '$1 rejtetten megváltoztatta napló bejegyzések láthatóságát a(z) $3 című lapon',
 'logentry-suppress-revision-legacy' => '$1 rejtetten megváltoztatta változatok láthatóságát a(z) $3 lapon',
 'revdelete-content-hid' => 'tartalom elrejtve',
 'revdelete-summary-hid' => 'szerkesztési összefoglaló elrejtve',
index d1ab972..50f8747 100644 (file)
@@ -303,8 +303,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Ցույց տալ էջ հսկող մասնակիցների թիվը',
 'tog-oldsig' => 'Ներկայիս ստորագրությունն է․',
 'tog-fancysig' => 'Ստորագրությունը վիքիտեքստի տեսքով (առանց ավտոմատ հղման)',
-'tog-externaleditor' => 'Օգտագործել արտաքին խմբագրիչ ըստ լռության (պահանջում է հատուկ նախընտրություններ ձեր համակարգչում)',
-'tog-externaldiff' => 'Օգտագործել տարբերակների համեմատման արտաքին ծրագիր ըստ լռության (պահանջում է հատուկ նախընտրություններ ձեր համակարգչում)',
 'tog-showjumplinks' => 'Միացնել «անցնել դեպի» օգնական հղումները',
 'tog-uselivepreview' => 'Օգտագործել ուղիղ նախադիտում (JavaScript) (Փորձնական)',
 'tog-forceeditsummary' => 'Նախազգուշացնել խմբագրման ամփոփումը դատարկ թողնելու դեպքում',
@@ -318,6 +316,7 @@ $messages = array(
 'tog-diffonly' => 'Չցուցադրել էջի պարունակությունը տարբերությունների ներքևից',
 'tog-showhiddencats' => 'Ցուցադրել թաքնված կատեգորիաները',
 'tog-norollbackdiff' => 'Չցուցադրել տարբերությունները հետ գլորելուց հետո',
+'tog-useeditwarning' => 'Զգուշացնել ինձ, երբ ես լքում եմ խմբագրման էջը առանց կատարած փոփոխությունները հիշելու։',
 
 'underline-always' => 'Միշտ',
 'underline-never' => 'Երբեք',
@@ -1004,6 +1003,8 @@ $2',
 'edit-conflict' => 'Խմբագրման ընհարում։',
 'edit-no-change' => 'Ձեր խմբագրումը անտեսվել է, քանի որ ոչ մի փոփոխություն չի կատարվել տեքստի մեջ։',
 'defaultmessagetext' => 'Լռելյան տեքստը',
+'editwarning-warning' => 'Այս էջը լքելով դուք կարող եք կորցնել ձեր կատարած փոփոխությունները։
+Եթե դուք գրանցված եք համակարգում, կարող եք անջատել այս նախազգուշացումը ձեր նախընրությունների «{{int:prefs-editing}}» բաժնում։',
 
 # Content models
 'content-model-wikitext' => 'վիքիտեքստ',
@@ -1181,14 +1182,6 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'search-external' => 'Արտաքին որոնում',
 'searchdisabled' => '{{SITENAME}} կայքի ներքին որոնումը անջատված է։ Դուք կարող եք որոնել կայքի պարունակությունը արտաքին որոնման շարժիչներով (Google, Yahoo...), սակայն, ի նկատի ունեցեք, որ կայքի իրենց ինդեքսները կարող են հնացած լինել։',
 
-# Quickbar
-'qbsettings' => 'Արագ անցման վահանակ',
-'qbsettings-none' => 'Չցուցադրել',
-'qbsettings-fixedleft' => 'Ձախից անշարժ',
-'qbsettings-fixedright' => 'Աջից անշարժ',
-'qbsettings-floatingleft' => 'Ձախից լողացող',
-'qbsettings-floatingright' => 'Աջից լողացող',
-
 # Preferences page
 'preferences' => 'Նախընտրություններ',
 'mypreferences' => 'Նախընտրություններ',
@@ -1755,10 +1748,6 @@ $1-ը հղվել է $2 ից',
 'listusers-noresult' => 'Այդպիսի մասնակիցներ չգտնվեցին։',
 'listusers-blocked' => '(արգելափակված)',
 
-# Special:ActiveUsers
-'activeusers' => 'Ակտիվ մասնակիցների ցանկ',
-'activeusers-noresult' => 'Այդպիսի մասնակիցներ չեն գտնվել։',
-
 # Special:ListGroupRights
 'listgrouprights-members' => '(անդամների ցանկ)',
 'listgrouprights-addgroup' => 'Ավելացնեել {{PLURAL:$2|խումբ|խմբեր}}՝  $1',
@@ -2440,13 +2429,8 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'pageinfo-protect-cascading-yes' => 'Այո',
 
 # Skin names
-'skinname-standard' => 'Դասական',
-'skinname-nostalgia' => 'Հայրենաբաղձություն',
 'skinname-cologneblue' => 'Քյոլնի թախիծ',
 'skinname-monobook' => 'ՄիաԳիրք',
-'skinname-myskin' => 'ԻմՏեսք',
-'skinname-chick' => 'Ծիտ',
-'skinname-simple' => 'Պարզ',
 'skinname-modern' => 'Մոդերն',
 'skinname-vector' => 'Սովորական',
 
index 2bc316d..f58f2fa 100644 (file)
@@ -172,8 +172,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Monstrar le numero de usatores que observa le pagina',
 'tog-oldsig' => 'Signatura existente:',
 'tog-fancysig' => 'Tractar signatura como wikitexto (sin ligamine automatic)',
-'tog-externaleditor' => 'Usar un editor externe qua standard (pro expertos solmente, necessita configuration special in tu computator. [//www.mediawiki.org/wiki/Manual:External_editors Plus informationes.])',
-'tog-externaldiff' => "Usar un programma ''diff'' externe qua standard (pro expertos solmente, necessita configuration special in tu computator. [//www.mediawiki.org/wiki/Manual:External_editors Plus informationes.])",
 'tog-showjumplinks' => 'Activar ligamines de accessibilitate "saltar a"',
 'tog-uselivepreview' => 'Usar previsualisation in directo (require JavaScript) (experimental)',
 'tog-forceeditsummary' => 'Avisar me si io non entra un summario de modification',
@@ -188,6 +186,7 @@ $messages = array(
 'tog-showhiddencats' => 'Monstrar categorias celate',
 'tog-noconvertlink' => 'Disactivar conversion de titulos de ligamines',
 'tog-norollbackdiff' => 'Omitter le diff post le execution de un revocation',
+'tog-useeditwarning' => 'Advertir me quando io quita un pagina de modification sin publicar le cambiamentos',
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Nunquam',
@@ -559,7 +558,9 @@ Nota que alcun paginas pote continuar a apparer como si tu esserea ancora authen
 'welcomecreation-msg' => 'Tu conto ha essite create.
 Non oblida personalisar tu [[Special:Preferences|preferentias in {{SITENAME}}]].',
 'yourname' => 'Nomine de usator:',
+'userlogin-yourname' => 'Nomine de usator�',
 'yourpassword' => 'Contrasigno:',
+'userlogin-yourpassword' => 'Contrasigno',
 'yourpasswordagain' => 'Repete contrasigno:',
 'remembermypassword' => 'Memorar mi contrasigno in iste navigator (pro un maximo de $1 {{PLURAL:$1|die|dies}})',
 'securelogin-stick-https' => 'Remaner connectite via HTTPS post apertura de session',
@@ -946,6 +947,8 @@ Illo existe ja.',
 'content-failed-to-parse' => 'Impossibile processar le contento $2 pro le modello $1: $3',
 'invalid-content-data' => 'Datos de contento invalide',
 'content-not-allowed-here' => 'Le contento "$1" non es permittite in le pagina [[$2]]',
+'editwarning-warning' => 'Quitar iste pagina pote causar le perdita de omne modificationes que tu ha facite.
+Si tu ha aperite un session, tu pote disactivar iste aviso in le section "{{int:prefs-editing}}" de tu preferentias.',
 
 # Content models
 'content-model-wikitext' => 'wikitexto',
@@ -1236,15 +1239,6 @@ Tenta prefixar tu consulta con ''all:'' pro cercar in tote le contento (includen
 Tu pote cercar via Google in le interim.
 Nota que lor indices del contento de {{SITENAME}} pote esser obsolete.',
 
-# Quickbar
-'qbsettings' => 'Barra rapide',
-'qbsettings-none' => 'Necun',
-'qbsettings-fixedleft' => 'Fixe a sinistra',
-'qbsettings-fixedright' => 'Fixe a dextra',
-'qbsettings-floatingleft' => 'Flottante a sinistra',
-'qbsettings-floatingright' => 'Flottante a dextra',
-'qbsettings-directionality' => 'Fixe, dependente del direction de scriptura de tu lingua',
-
 # Preferences page
 'preferences' => 'Preferentias',
 'mypreferences' => 'Preferentias',
@@ -1806,7 +1800,6 @@ Pro securitate optimal, img_auth.php es disactivate.',
 'http-read-error' => 'Error de lectura HTTP.',
 'http-timed-out' => 'Le requesta HTTP ha expirate.',
 'http-curl-error' => 'Error al obtener datos del URL: $1',
-'http-host-unreachable' => 'Non poteva acceder al URL',
 'http-bad-status' => 'Un problema occurreva durante le requesta HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2960,13 +2953,8 @@ Es possibile adder un motivo in le summario.',
 
 # Stylesheets
 'common.css' => '/* Le CSS placiate hic se applicara a tote le stilos */',
-'standard.css' => '/* Le CSS placiate hic afficera le usatores del apparentia Classic */',
-'nostalgia.css' => '/* Le CSS placiate hic afficera le usatores del apparentia Nostalgia */',
 'cologneblue.css' => '/* Le CSS placiate hic afficera le usatores del apparentia Colonia Blau */',
 'monobook.css' => '/* Le CSS placiate hic afficera le usatores del apparentia MonoBook */',
-'myskin.css' => '/* Le CSS placiate hic afficera le usatores del apparentia "Mi apparentia" */',
-'chick.css' => '/* Le CSS placiate hic afficera le usatores del apparentia Chique */',
-'simple.css' => '/* Le CSS placiate hic afficera le usatores del apparentia Simple */',
 'modern.css' => '/* Le CSS placiate hic afficera le usatores del apparentia Moderne */',
 'vector.css' => '/* Le CSS placiate hic afficera le usatores del apparentia Vector */',
 'print.css' => '/* Le CSS placiate hic influentiara le apparentia del paginas imprimite */',
@@ -2974,13 +2962,8 @@ Es possibile adder un motivo in le summario.',
 
 # Scripts
 'common.js' => '/* Omne JavaScript hic se executara pro tote le usatores a cata cargamento de pagina. */',
-'standard.js' => '/* Omne JavaScript hic se executara pro le usatores del apparentia Classic */',
-'nostalgia.js' => '/* Omne JavaScript hic se executara pro le usatores del apparentia Nostalgia */',
 'cologneblue.js' => '/* Omne JavaScript hic se executara pro le usatores del apparentia Colonia Blau */',
 'monobook.js' => '/* Omne JavaScript hic se executara pro le usatores del apparentia MonoBook */',
-'myskin.js' => '/* Omne JavaScript hic se executara pro le usatores del apparentia "Mi apparentia" */',
-'chick.js' => '/* Omne JavaScript hic se executara pro le usatores del apparentia Chique */',
-'simple.js' => '/* Omne JavaScript hic se executara pro le usatores del apparentia Simple */',
 'modern.js' => '/* Omne JavaScript hic se executara pro le usatores del apparentia Moderne */',
 'vector.js' => '/* Omne JavaScript hic se executara pro le usatores del apparentia Vector */',
 
@@ -3056,13 +3039,8 @@ Le causa es probabilemente un ligamine verso un sito externe que es presente in
 'pageinfo-category-files' => 'Numero de files',
 
 # Skin names
-'skinname-standard' => 'Classic',
-'skinname-nostalgia' => 'Nostalgia',
 'skinname-cologneblue' => 'Colonia Blau',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'Mi apparentia',
-'skinname-chick' => 'Chique',
-'skinname-simple' => 'Simple',
 'skinname-modern' => 'Moderne',
 
 # Patrolling
index 5647d31..e87ce99 100644 (file)
@@ -349,7 +349,7 @@ $messages = array(
 'tog-editsection' => 'Fungsikan penyuntingan subbagian melalui pranala [sunting]',
 'tog-editsectiononrightclick' => 'Fungsikan penyuntingan subbagian dengan mengeklik kanan pada judul bagian (JavaScript)',
 'tog-showtoc' => 'Perlihatkan daftar isi (untuk halaman yang mempunyai lebih dari 3 subbagian)',
-'tog-rememberpassword' => 'Ingat kata sandi saya di peramban ini (selama $1 {{PLURAL:$1|hari|hari}})',
+'tog-rememberpassword' => 'Ingat kata sandi saya di peramban ini (selama $1 {{PLURAL:$1|hari}})',
 'tog-watchcreations' => 'Tambahkan halaman yang saya buat ke daftar pantauan',
 'tog-watchdefault' => 'Tambahkan halaman yang saya sunting ke daftar pantauan',
 'tog-watchmoves' => 'Tambahkan halaman yang saya pindahkan ke daftar pantauan',
@@ -365,10 +365,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Tunjukkan jumlah pemantau',
 'tog-oldsig' => 'Tanda tangan sekarang:',
 'tog-fancysig' => 'Perlakukan tanda tangan sebagai teks wiki (tanpa suatu pranala otomatis)',
-'tog-externaleditor' => 'Gunakan editor eksternal secara bawaan (hanya untuk ahli, perlu pengaturan khusus pada komputer Anda.
-[//www.mediawiki.org/wiki/Manual:External_editors Informasi selengkapnya].)',
-'tog-externaldiff' => 'Gunakan diff eksternal secara bawaan (hanya untuk ahli, perlu pengaturan khusus pada komputer Anda.
-[//www.mediawiki.org/wiki/Manual:External_editors Informasi selengkapnya].)',
 'tog-showjumplinks' => 'Aktifkan pranala pembantu "langsung ke"',
 'tog-uselivepreview' => 'Gunakan pratayang langsung (JavaScript) (eksperimental)',
 'tog-forceeditsummary' => 'Ingatkan saya bila kotak ringkasan suntingan masih kosong',
@@ -383,6 +379,7 @@ $messages = array(
 'tog-showhiddencats' => 'Tampilkan kategori tersembunyi',
 'tog-noconvertlink' => 'Matikan konversi judul pranala',
 'tog-norollbackdiff' => 'Jangan tampilkan perbedaan setelah melakukan pengembalian',
+'tog-useeditwarning' => 'Ingatkan saya bila meninggalkan halaman penyuntingan sebelum menyimpan perubahan',
 
 'underline-always' => 'Selalu',
 'underline-never' => 'Tidak pernah',
@@ -1111,6 +1108,8 @@ karena telah ada.',
 'content-failed-to-parse' => 'Gagal menjabarkan konten $2 untuk model $1: $3',
 'invalid-content-data' => 'Data konten tidak sah',
 'content-not-allowed-here' => 'Konten "$1" tidak diizinkan di halaman [[$2]]',
+'editwarning-warning' => 'Meninggalkan halaman ini dapat menyebabkan semua perubahan yang belum tersimpan hilang.
+Jika Anda telah masuk log, Anda dapat mematikan peringatan ini lewat "{{int:prefs-editing}}" pada halaman preferensi Anda.',
 
 # Content models
 'content-model-wikitext' => 'teks wiki',
@@ -2164,7 +2163,7 @@ Nama yang telah <del>dicoret</del> berarti telah dibetulkan.',
 'mostcategories' => 'Halaman dengan kategori terbanyak',
 'mostimages' => 'Berkas yang tersering digunakan',
 'mostinterwikis' => 'Halaman dengan interwiki terbanyak',
-'mostrevisions' => 'Halaman dengan perubahan terbanyak',
+'mostrevisions' => 'Laman jo parubahan tabanyak',
 'prefixindex' => 'Semua halaman dengan awalan',
 'prefixindex-namespace' => 'Semua halaman dengan awalan (ruang nama $1)',
 'shortpages' => 'Halaman pendek',
@@ -3265,8 +3264,6 @@ Pranala-pranala selanjutnya pada baris yang sama dianggap sebagai pengecualian,
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans',
index bc66a9e..2e151fd 100644 (file)
@@ -65,8 +65,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Ipakita ti bilang dagiti agbuybuya nga agar-aramat',
 'tog-oldsig' => 'Ti adda a pirma:',
 'tog-fancysig' => 'Tratuen ti pirma a kas wikitext (nga awan ti automatiko a panagsilpo)',
-'tog-externaleditor' => 'Isigud ti panag-usar iti ruar a pnag-urnos (para dagiti eksperto laeng, masapul ti nangruna a kasasaad a panagikabil idiay kompiutermo. [//www.mediawiki.org/wiki/Manual:External_editors Adu pay a pakaammo.])',
-'tog-externaldiff' => 'Isigud ti panag-usar iti ruar a  sabali (para dagiti eksperto laeng, masapul ti nangruna a kasasaad a panagikabil idiay kompiutermo. [//www.mediawiki.org/wiki/Manual:External_editors Adu pay a pakaammo.])',
 'tog-showjumplinks' => 'Pakabaelan a "lumaktaw kadagiti" naipalaka a pagserkan a silpo',
 'tog-uselivepreview' => 'Usaren ti agdama a panagpadas (masapul ti JavaScript) (eksperimento)',
 'tog-forceeditsummary' => 'Pakaammuannak no sumrek ti blanko a pakabuklan ti panag-urnos',
@@ -80,6 +78,7 @@ $messages = array(
 'tog-diffonly' => 'Saan nga iparang ti linaon ti panid dita baba dagiti pagiddiatan',
 'tog-showhiddencats' => 'Ipakita dagiti nailemmeng a kategoria',
 'tog-norollbackdiff' => 'Laksiden ti paggiddiatan kalpasan ti panagaramid ti panagisubli',
+'tog-useeditwarning' => 'Pakaunaannak no pumanawak ti pagurnosan a panid nga adda ti saan a naidulin a sinuksukatan',
 
 'underline-always' => 'Kanayon',
 'underline-never' => 'Saan uray kaanoman',
@@ -839,6 +838,8 @@ Adda met daytoyen.',
 'content-failed-to-parse' => 'Napaay a nausig ti $2 a linaon para iti $1 a modelo: $3',
 'invalid-content-data' => 'Imbalido a datos ti linaon',
 'content-not-allowed-here' => 'Ti "$1" a linaon ket saan a maipalubos idiay [[$2]] a panid',
+'editwarning-warning' => 'Ti ipapanaw ti daytoy a panid ket makapataud ti panakapukaw kadagiti amiaman a binalbaliwam.
+No nakastrekka, mabalinmo nga ibaldado daytoy a ballaag idiay "Panagurnos" a paset kadagiti kakaykayatam.',
 
 # Content models
 'content-model-wikitext' => 'wikitext',
@@ -1127,15 +1128,6 @@ Padasem a  pasarunuan ti panagbiruk mo ti ''all:'' tapno birukem amin a nagyan (
 Mabalin mo ti agbiruk idiay Google tattan.
 Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 
-# Quickbar
-'qbsettings' => 'Quickbar',
-'qbsettings-none' => 'Awan',
-'qbsettings-fixedleft' => 'Agyan latta iti kanigid',
-'qbsettings-fixedright' => 'Agyan latta iti kanawan',
-'qbsettings-floatingleft' => 'Tumpaw ti kanigid',
-'qbsettings-floatingright' => 'Tumpaw ti kanawan',
-'qbsettings-directionality' => 'Nasimpa, gapu laeng ti papanan ti panagsurat ti pagsasaom',
-
 # Preferences page
 'preferences' => 'Kakaykayatan',
 'mypreferences' => 'Kakaykayatan',
index c97e167..e6240cd 100644 (file)
@@ -262,8 +262,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Sýna fjölda vaktandi notenda',
 'tog-oldsig' => 'Núverandi undirskrift:',
 'tog-fancysig' => 'Meðhöndla undirskrift sem wikimál (án sjálfvirks tengils)',
-'tog-externaleditor' => 'Nota utanaðkomandi ritil sjálfgefið (eingöngu fyrir reynda, þarfnast sérstakra stillinga á tölvunni þinni. [//www.mediawiki.org/wiki/Manual:External_editors Frekari upplýsingar.])',
-'tog-externaldiff' => 'Nota utanaðkomandi mismun sjálfgefið (eingöngu fyrir reynda, þarfnast sérstakra stillinga á tölvunni þinni. [//www.mediawiki.org/wiki/Manual:External_editors Frekari upplýsingar.])',
 'tog-showjumplinks' => 'Virkja „stökkva á“ aðgengitengla',
 'tog-uselivepreview' => 'Nota beina forskoðun (JavaScript) (Á tilraunastigi)',
 'tog-forceeditsummary' => 'Birta áminningu þegar breytingarágripið er tómt',
@@ -277,6 +275,7 @@ $messages = array(
 'tog-diffonly' => 'Ekki sýna síðuefni undir mismunum',
 'tog-showhiddencats' => 'Sýna falda flokka',
 'tog-norollbackdiff' => 'Sleppa breytingu eftir að endurvakning síðu hefur verið gerð.',
+'tog-useeditwarning' => 'Vara mig við þegar ég fer frá breytingarsíðu með óvistaðar breytingar',
 
 'underline-always' => 'Alltaf',
 'underline-never' => 'Aldrei',
@@ -1010,6 +1009,8 @@ Hún er nú þegar til.',
 'content-failed-to-parse' => 'Gat ekki þáttað $2 efni samkvæmt $1 líkani: $3',
 'invalid-content-data' => 'Ógild efnisgögn.',
 'content-not-allowed-here' => '„$1“ efni er ekki leyfilegt á síðunni [[$2]]',
+'editwarning-warning' => 'Ef farið er frá þessari síðu gætu þær breytingar sem þú hefur gert tapast.
+Ef þú ert skráður inn, þá getur þú óvirkjað þessi skilaboð í „Breytingarflipanum" undir stillingum.',
 
 # Content models
 'content-model-wikitext' => 'wiki-texti',
index 6036ccf..518d16b 100644 (file)
@@ -316,8 +316,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Mostra il numero di utenti che hanno la pagina in osservazione',
 'tog-oldsig' => 'Firma attuale:',
 'tog-fancysig' => 'Tratta la firma come wikitesto (senza un collegamento automatico)',
-'tog-externaleditor' => "Usa per default un editor di testi esterno (solo per utenti esperti, richiede l'uso di impostazioni particolari sul proprio computer. [//www.mediawiki.org/wiki/Manual:External_editors Ulteriori informazioni.])",
-'tog-externaldiff' => "Usa per default un programma di diff esterno (solo per utenti esperti, richiede l'uso di impostazioni particolari sul proprio computer. [//www.mediawiki.org/wiki/Manual:External_editors Ulteriori informazioni.])",
 'tog-showjumplinks' => 'Attiva i collegamenti accessibili "vai a"',
 'tog-uselivepreview' => "Abilita la funzione ''Live preview'' (anteprima in diretta - richiede JavaScript; sperimentale)",
 'tog-forceeditsummary' => 'Chiedi conferma se il campo oggetto è vuoto',
@@ -332,6 +330,7 @@ $messages = array(
 'tog-showhiddencats' => 'Mostra categorie nascoste',
 'tog-noconvertlink' => 'Disattiva la conversione dei titoli dei link',
 'tog-norollbackdiff' => 'Non mostrare il confronto tra versioni dopo aver effettuato un rollback',
+'tog-useeditwarning' => 'Avvisa quando si lascia una pagina di modifica con modifiche non salvate',
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Mai',
@@ -447,7 +446,7 @@ $messages = array(
 'vector-simplesearch-preference' => 'Abilita la barra per la ricerca semplificata (solo per la skin Vector)',
 'vector-view-create' => 'Crea',
 'vector-view-edit' => 'Modifica',
-'vector-view-history' => 'Visualizza cronologia',
+'vector-view-history' => 'Cronologia',
 'vector-view-view' => 'Leggi',
 'vector-view-viewsource' => 'Visualizza sorgente',
 'actions' => 'Azioni',
@@ -506,7 +505,7 @@ $messages = array(
 'redirectpagesub' => 'Pagina di reindirizzamento',
 'lastmodifiedat' => "Questa pagina è stata modificata per l'ultima volta il $1 alle $2.",
 'viewcount' => 'Questa pagina è stata letta {{PLURAL:$1|una volta|$1 volte}}.',
-'protectedpage' => 'Pagina bloccata',
+'protectedpage' => 'Pagina protetta',
 'jumpto' => 'Vai a:',
 'jumptonavigation' => 'navigazione',
 'jumptosearch' => 'ricerca',
@@ -543,7 +542,7 @@ $1',
 'badaccess-group0' => "Non si dispone dei permessi necessari per eseguire l'azione richiesta.",
 'badaccess-groups' => 'La funzione richiesta è riservata agli utenti che appartengono {{PLURAL:$2|al gruppo|a uno dei seguenti gruppi}}: $1.',
 
-'versionrequired' => 'Versione $1 di MediaWiki richiesta',
+'versionrequired' => 'È necessaria la versione $1 di MediaWiki',
 'versionrequiredtext' => "Per usare questa pagina è necessario disporre della versione $1 del software MediaWiki. Vedi [[Special:Version|l'apposita pagina]].",
 
 'ok' => 'OK',
@@ -646,13 +645,14 @@ Si prega di segnalare l\'accaduto a un [[Special:ListUsers/sysop|amministratore]
 'unexpected' => 'Valore imprevisto: "$1"="$2".',
 'formerror' => 'Errore: impossibile inviare il modulo',
 'badarticleerror' => 'Operazione non consentita per questa pagina.',
-'cannotdelete' => 'Non è stato possibile cancellare il file "$1".
+'cannotdelete' => 'Non è stato possibile cancellare la pagina o il file "$1".
 Potrebbe essere stato già cancellato da qualcun altro.',
 'cannotdelete-title' => 'Impossibile eliminare la pagina "$1"',
 'delete-hook-aborted' => "La cancellazione è stata annullata dall'hook.
 Non è stata restituita alcuna spiegazione.",
 'badtitle' => 'Titolo non corretto',
-'badtitletext' => 'Il titolo della pagina richiesta è vuoto, errato o con caratteri non ammessi oppure deriva da un errore nei collegamenti tra siti wiki diversi o versioni in lingue diverse dello stesso sito.',
+'badtitletext' => 'Il titolo della pagina richiesta è vuoto, errato oppure deriva da un errore nei collegamenti interlingua o interwiki.
+Potrebbe inoltre contenere uno o più caratteri il cui uso non è ammesso nei titoli.',
 'perfcached' => "I dati che seguono sono estratti da una copia ''cache'' del database, e potrebbero non essere aggiornati. Un massimo di {{PLURAL:$1|un risultato è disponibile|$1 risultati sono disponibili}} in cache.",
 'perfcachedts' => "I dati che seguono sono estratti da una copia ''cache'' del database, il cui ultimo aggiornamento risale al $1. Un massimo di {{PLURAL:$4|un risultato è disponibile|$4 risultati sono disponibili}} in cache.",
 'querypage-no-updates' => 'Gli aggiornamenti della pagina sono temporaneamente sospesi. I dati in essa contenuti non verranno aggiornati.',
@@ -701,9 +701,15 @@ Nota che alcune pagine potrebbero continuare ad apparire come se il logout non f
 'welcomecreation-msg' => "L'account è stato creato correttamente.
 Non dimenticare di personalizzare le [[Special:Preferences|preferenze di {{SITENAME}}]].",
 'yourname' => 'Nome utente:',
+'userlogin-yourname' => 'Nome utente',
+'userlogin-yourname-ph' => 'Inserisci il tuo nome utente',
 'yourpassword' => 'Password:',
+'userlogin-yourpassword' => 'Password',
+'userlogin-yourpassword-ph' => 'Inserisci la tua password',
 'yourpasswordagain' => 'Ripeti la password:',
 'remembermypassword' => 'Ricorda la password su questo browser (per un massimo di $1 {{PLURAL:$1|giorno|giorni}})',
+'userlogin-remembermypassword' => 'Ricordami',
+'userlogin-signwithsecure' => 'Accedi con il server sicuro',
 'securelogin-stick-https' => 'Resta connesso attraverso HTTPS dopo il login',
 'yourdomainname' => 'Specificare il dominio',
 'password-change-forbidden' => 'Non è possibile modificare le password su questo wiki.',
@@ -716,12 +722,16 @@ Non dimenticare di personalizzare le [[Special:Preferences|preferenze di {{SITEN
 'logout' => 'Esci',
 'userlogout' => 'esci',
 'notloggedin' => 'Accesso non effettuato',
-'nologin' => "Non hai ancora un accesso? '''$1'''.",
+'userlogin-noaccount' => 'Non hai un account?',
+'userlogin-joinproject' => 'Unisciti a {{SITENAME}}',
+'nologin' => 'Non hai ancora un accesso? $1.',
 'nologinlink' => 'Registrati',
 'createaccount' => "Crea un'utenza",
-'gotaccount' => "Hai già un accesso? '''$1'''.",
+'gotaccount' => 'Hai già un accesso? $1.',
 'gotaccountlink' => 'Entra',
 'userlogin-resetlink' => 'Hai dimenticato i tuoi dati di accesso?',
+'helplogin-url' => 'Help:Login',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Aiuto con il login]]',
 'createaccountmail' => "Usa una password casuale temporanea e inviala all'indirizzo e-mail specificato sotto",
 'createaccountreason' => 'Motivo:',
 'badretype' => 'Le password inserite non coincidono tra loro.',
@@ -764,10 +774,11 @@ Per prevenire abusi, la funzione di reimpostazione della password può essere us
 'mailerror' => "Errore nell'invio del messaggio: $1",
 'acct_creation_throttle_hit' => "I visitatori del sito che usano il tuo indirizzo IP hanno creato {{PLURAL:$1|1 account|$1 account}} nell'ultimo giorno, che è il massimo consentito in questo periodo di tempo.
 Perciò, gli utenti che usano questo indirizzo IP non possono creare altri account per il momento.",
-'emailauthenticated' => "L'indirizzo e-mail è stato confermato il $2 alle $3.",
-'emailnotauthenticated' => "L'indirizzo e-mail non è stato ancora confermato. Non verranno inviati messaggi e-mail attraverso le funzioni elencate di seguito.",
+'emailauthenticated' => "L'indirizzo email è stato confermato il $2 alle $3.",
+'emailnotauthenticated' => "L'indirizzo di posta elettronica non è stato ancora confermato.
+Non verranno inviati messaggi email per le funzioni elencate di seguito.",
 'noemailprefs' => 'Indicare un indirizzo e-mail per attivare queste funzioni.',
-'emailconfirmlink' => 'Confermare il proprio indirizzo e-mail',
+'emailconfirmlink' => 'Conferma il tuo indirizzo email',
 'invalidemailaddress' => "L'indirizzo e-mail indicato ha un formato non valido. Inserire un indirizzo valido o svuotare la casella.",
 'cannotchangeemail' => 'Gli indirizzi e-mail non possono essere modificati in questo wiki.',
 'emaildisabled' => 'Questo sito non può inviare messaggi di posta elettronica.',
@@ -813,6 +824,7 @@ La password potrebbe essere stata già cambiata, oppure potrebbe essere stata ri
 'passwordreset-text' => 'Compila questo modulo per reimpostare la tua password.',
 'passwordreset-legend' => 'Reimposta password',
 'passwordreset-disabled' => 'La reimpostazione delle password è stata disabilitata su questa wiki',
+'passwordreset-emaildisabled' => 'Le funzionalità di posta elettronica sono state disabilitate su questa wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Immetti uno dei dati richiesti qui sotto}}',
 'passwordreset-username' => 'Nome utente:',
 'passwordreset-domain' => 'Dominio:',
@@ -840,7 +852,7 @@ Se non sei stato tu a fare la richiesta, o se ti sei ricordato la password origi
 Password temporanea: $2',
 'passwordreset-emailsent' => 'È stata inviata una email di reimpostazione della password.',
 'passwordreset-emailsent-capture' => 'È stata inviata una email di reimpostazione della password, il contenuto è riportato di seguito.',
-'passwordreset-emailerror-capture' => "È stata generata una email di reimpostazione della password riportata di seguito. L'invio all'utente non è riuscito: $1",
+'passwordreset-emailerror-capture' => "È stata generata una email di reimpostazione della password, riportata di seguito. L'invio {{GENDER:$2|all'utente}} non è riuscito: $1",
 
 # Special:ChangeEmail
 'changeemail' => "Modifica l'indirizzo e-mail",
@@ -998,7 +1010,7 @@ Se non desideri che i tuoi testi possano essere modificati e ridistribuiti da ch
 Inviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera.
 '''Non inviare materiale protetto da copyright senza autorizzazione!'''",
 'copyrightwarning2' => "Per favore tieni presente che tutti i contributi a {{SITENAME}} possono essere modificati, stravolti o cancellati da altri contributori.
-Se non desideri che i tuoi testi possano essere alterati, non inviarli qui.<br />
+Se non vuoi che i tuoi testi possano essere alterati, allora non inserirli.<br />
 Inviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera (vedi $1 per maggiori dettagli).
 '''Non inviare materiale protetto da copyright senza autorizzazione!'''",
 'longpageerror' => "'''Errore: il testo inviato è lungo {{PLURAL:$1|1|$1}} kilobyte, che è maggiore della dimensione massima consentita ({{PLURAL:$2|1|$2}} kilobyte).'''
@@ -1046,6 +1058,8 @@ Esiste già.',
 'content-failed-to-parse' => 'Impossibile analizzare $2 per il modello $1: $3',
 'invalid-content-data' => 'Dati contenuti non validi',
 'content-not-allowed-here' => 'Contenuto in "$1" non consentito nella pagine [[$2]]',
+'editwarning-warning' => 'Lasciare questa pagina potrebbe costarti la perdita di tutti i cambiamenti effettuati.
+Se sei loggato, puoi disattivare questo avviso nella sezione "{{int:prefs-editing}}" delle tue preferenze.',
 
 # Content models
 'content-model-wikitext' => 'wikitesto',
@@ -1075,7 +1089,8 @@ Alcuni template non verranno inclusi.",
 'converter-manual-rule-error' => 'Rilevato errore nella regola manuale di conversione della lingua',
 
 # "Undo" feature
-'undo-success' => 'Questa modifica può essere annullata. Verificare il confronto presentato di seguito per accertarsi che il contenuto corrisponda a quanto desiderato e quindi salvare le modifiche per completare la procedura di annullamento.',
+'undo-success' => 'Questa modifica può essere annullata.
+Controlla le differenze mostrate sotto fra le due versioni per essere certo che il contenuto corrisponda a quanto desiderato, e quindi salvare le modifiche per completare la procedura di annullamento.',
 'undo-failure' => 'Impossibile annullare la modifica a causa di un conflitto con modifiche intermedie.',
 'undo-norev' => 'La modifica non può essere annullata perché non esiste o è stata cancellata.',
 'undo-summary' => 'Annullata la modifica $1 di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]])',
@@ -1092,7 +1107,7 @@ La motivazione del blocco fornita da $3 è la seguente: ''$2''",
 'currentrev' => 'Versione attuale',
 'currentrev-asof' => 'Versione attuale delle $1',
 'revisionasof' => 'Versione delle $1',
-'revision-info' => 'Versione delle $1, autore: $2',
+'revision-info' => 'Versione del $4 alle $5 di $2',
 'previousrevision' => '← Versione meno recente',
 'nextrevision' => 'Versione più recente →',
 'currentrevisionlink' => 'Versione attuale',
@@ -1252,8 +1267,8 @@ Vedi l'[[Special:BlockList|elenco dei blocchi]] per l'elenco dei bandi e dei blo
 'compareselectedversions' => 'Confronta le versioni selezionate',
 'showhideselectedversions' => 'Mostra/nascondi versioni selezionate',
 'editundo' => 'annulla',
-'diff-multi' => '({{PLURAL:$1|Una revisione intermedia|$1 revisioni intermedie}} di {{PLURAL:$2|un utente|$2 utenti}} non mostrate)',
-'diff-multi-manyusers' => '({{PLURAL:$1|Una revisione intermedia|$1 revisioni intermedie}} di oltre $2 {{PLURAL:$2|utente|utenti}} non mostrate)',
+'diff-multi' => '({{PLURAL:$1|Una revisione intermedia|$1 revisioni intermedie}} di {{PLURAL:$2|un utente|$2 utenti}} non {{PLURAL:$1|mostrata|mostrate}})',
+'diff-multi-manyusers' => '({{PLURAL:$1|Una revisione intermedia|$1 revisioni intermedie}} di oltre $2 {{PLURAL:$2|utente|utenti}} non {{PLURAL:$1|mostrata|mostrate}})',
 'difference-missing-revision' => '{{PLURAL:$2|Una versione|$2 versioni}} di questa differenza ($1) {{PLURAL:$2|non è stata trovata|non sono state trovate}}.
 
 Questo si verifica solitamente seguendo un collegamento obsoleto di un diff a una pagina cancellata.
@@ -1387,7 +1402,7 @@ I dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{
 'allowemail' => 'Abilita la ricezione di messaggi e-mail da altri utenti',
 'prefs-searchoptions' => 'Ricerca',
 'prefs-namespaces' => 'Namespace',
-'defaultns' => 'In caso contrario, cerca in questi namespace:',
+'defaultns' => 'Altrimenti, cerca in questi namespace:',
 'default' => 'predefinito',
 'prefs-files' => 'File',
 'prefs-custom-css' => 'CSS personalizzato',
@@ -1448,7 +1463,7 @@ Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
 'editinguser' => "Modifica diritti utente dell'utente '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup' => 'Modifica gruppi utente',
 'saveusergroups' => 'Salva gruppi utente',
-'userrights-groupsmember' => 'Appartiene ai gruppi:',
+'userrights-groupsmember' => 'Appartiene {{PLURAL:$1|al gruppo|ai gruppi}}:',
 'userrights-groupsmember-auto' => 'Membro implicito di:',
 'userrights-groups-help' => "È possibile modificare i gruppi cui è assegnato l'utente.
 * Una casella di spunta selezionata indica l'appartenenza dell'utente al gruppo
@@ -1722,7 +1737,7 @@ Se si dispone dell'immagine nella risoluzione originale, si prega di caricarla.
 'savefile' => 'Salva file',
 'uploadedimage' => 'ha caricato "[[$1]]"',
 'overwroteimage' => 'ha caricato una nuova versione di "[[$1]]"',
-'uploaddisabled' => 'Il caricamento dei file è temporaneamente sospeso.',
+'uploaddisabled' => 'Il caricamento dei file è disabilitato.',
 'copyuploaddisabled' => 'Il caricamento tramite URL è disabilitato.',
 'uploadfromurl-queued' => 'Il caricamento è stato accodato.',
 'uploaddisabledtext' => 'Il caricamento dei file non è attivo.',
@@ -1939,7 +1954,7 @@ Probabilmente vuoi modificare la descrizione presente nella [$2 pagina di descri
 'filerevert-legend' => 'Ripristina file',
 'filerevert-intro' => "Si sta per ripristinare il file '''[[Media:$1|$1]]''' alla [$4 versione del $2, $3].",
 'filerevert-comment' => 'Motivo:',
-'filerevert-defaultcomment' => 'Ripristinata la versione delle $2, $1',
+'filerevert-defaultcomment' => 'Ripristinata la versione del $2, $1',
 'filerevert-submit' => 'Ripristina',
 'filerevert-success' => "'''Il file [[Media:$1|$1]]''' è stato ripristinato alla [$4 versione del $2, $3].",
 'filerevert-badversion' => 'Non esistono versioni locali precedenti del file con il timestamp richiesto.',
@@ -2123,7 +2138,7 @@ Potrebbero essere presenti immagini che sono usate da altri siti con un collegam
 # Special:Log
 'specialloguserlabel' => 'Azione effettuata da:',
 'speciallogtitlelabel' => 'Azione effettuata su:',
-'log' => 'Log',
+'log' => 'Registro',
 'all-logs-page' => 'Tutti i registri pubblici',
 'alllogstext' => "Presentazione unificata di tutti i registri di {{SITENAME}}.
 È possibile restringere i criteri di ricerca selezionando il tipo di registro, l'utente che ha eseguito l'azione, e/o la pagina interessata (entrambi i campi sono sensibili al maiuscolo/minuscolo).",
@@ -2405,7 +2420,7 @@ Le impostazioni correnti per la pagina sono '''$1''':",
 'protect-level-autoconfirmed' => 'Consentito solo agli utenti "autoconfermati"',
 'protect-level-sysop' => 'Consentito solo agli amministratori',
 'protect-summary-cascade' => 'ricorsiva',
-'protect-expiring' => 'scadenza: $1 (UTC)',
+'protect-expiring' => 'scade il $2 alle $3 (UTC)',
 'protect-expiring-local' => 'scade il $1',
 'protect-expiry-indefinite' => 'infinito',
 'protect-cascade' => 'Protezione ricorsiva (estende la protezione a tutte le pagine incluse in questa).',
@@ -2449,7 +2464,8 @@ Le impostazioni correnti per la pagina sono '''$1''':",
 'undeleteextrahelp' => "Per recuperare l'intera cronologia della pagina, lasciare tutte le caselle deselezionate e fare clic su '''''{{int:undeletebtn}}'''''.
 Per effettuare un ripristino selettivo, selezionare le caselle corrispondenti alle revisioni da ripristinare e fare clic su '''''{{int:undeletebtn}}'''''.",
 'undeleterevisions' => '{{PLURAL:$1|Una revisione|$1 revisioni}} in archivio',
-'undeletehistory' => 'Recuperando questa pagina, tutte le sue revisioni verranno ripristinate nella relativa cronologia. Se dopo la cancellazione è stata creata una nuova pagina con lo stesso titolo, le revisioni recuperate saranno inserite nella cronologia precedente.',
+'undeletehistory' => 'Recuperando questa pagina, tutte le sue versioni verranno ripristinate nella relativa cronologia.
+Se dopo la cancellazione è stata creata una nuova pagina con lo stesso titolo, le revisioni recuperate saranno inserite nella cronologia precedente.',
 'undeleterevdel' => "Il ripristino non verrà effettuato se determina la cancellazione parziale della versione attuale della pagina o del file interessato. In tal caso, è necessario rimuovere il segno di spunta o l'oscuramento dalle revisioni cancellate più recenti.",
 'undeletehistorynoadmin' => "Questa pagina è stata cancellata.
 Il motivo della cancellazione è mostrato qui sotto, assieme ai dettagli dell'utente che ha modificato questa pagina prima della cancellazione.
@@ -2473,7 +2489,7 @@ $1',
 Consultare il [[Special:Log/delete|log delle cancellazioni]] per vedere le cancellazioni e i recuperi più recenti.",
 'undelete-header' => 'Consultare il [[Special:Log/delete|log delle cancellazioni]] per vedere le cancellazioni più recenti.',
 'undelete-search-title' => 'Ricerca nelle pagine cancellate',
-'undelete-search-box' => 'Ricerca nelle pagine cancellate',
+'undelete-search-box' => 'Ricerca le pagine cancellate',
 'undelete-search-prefix' => 'Mostra le pagine il cui titolo inizia con:',
 'undelete-search-submit' => 'Cerca',
 'undelete-no-results' => "Nessuna pagina corrispondente nell'archivio delle cancellazioni.",
@@ -2621,7 +2637,7 @@ Sei sicuro di voler continuare?',
 'emailblock' => 'e-mail bloccate',
 'blocklist-nousertalk' => 'non può modificare la propria pagina di discussione',
 'ipblocklist-empty' => "L'elenco dei blocchi è vuoto.",
-'ipblocklist-no-results' => "L'indirizzo IP o nome utente richiesto non è bloccato.",
+'ipblocklist-no-results' => "L'indirizzo IP o il nome utente richiesto non è bloccato.",
 'blocklink' => 'blocca',
 'unblocklink' => 'sblocca',
 'change-blocklink' => 'cambia blocco',
@@ -3090,7 +3106,7 @@ $1',
 # Media information
 'mediawarning' => "'''Attenzione''': Questo file potrebbe contenere codice maligno. La sua esecuzione potrebbe danneggiare il tuo sistema.",
 'imagemaxsize' => "Dimensione massima delle immagini:<br />''(per le pagine di descrizione del file)''",
-'thumbsize' => 'Grandezza delle miniature:',
+'thumbsize' => 'Dimensione delle miniature:',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pagina|pagine}}',
 'file-info' => 'dimensione del file: $1, tipo MIME: $2',
 'file-info-size' => '$1 × $2 pixel, dimensione del file: $3, tipo MIME: $4',
@@ -3589,7 +3605,7 @@ Messaggio di errore del mailer: $1',
 'confirmemail_invalid' => 'Codice di conferma non valido. Il codice potrebbe essere scaduto.',
 'confirmemail_needlogin' => 'È necessario $1 per confermare il proprio indirizzo e-mail.',
 'confirmemail_success' => "L'indirizzo e-mail è confermato. Ora è possibile [[Special:UserLogin|eseguire l'accesso]] e fare pieno uso del sito.",
-'confirmemail_loggedin' => "L'indirizzo e-mail è stato confermato.",
+'confirmemail_loggedin' => "L'indirizzo email è stato confermato.",
 'confirmemail_error' => 'Errore nel salvataggio della conferma.',
 'confirmemail_subject' => "{{SITENAME}}: richiesta di conferma dell'indirizzo",
 'confirmemail_body' => 'Qualcuno, probabilmente tu stesso dall\'indirizzo IP $1, ha registrato l\'account "$2" su {{SITENAME}} indicando questo indirizzo e-mail.
@@ -3643,9 +3659,9 @@ Questo codice di conferma scadrà automaticamente alle $4.',
 # Delete conflict
 'deletedwhileediting' => "'''Attenzione''': questa pagina è stata cancellata dopo che hai cominciato a modificarla!",
 'confirmrecreate' => "L'utente [[User:$1|$1]] ([[User talk:$1|discussioni]]) ha cancellato questa pagina dopo che hai iniziato a modificarla, per il seguente motivo: ''$2''
-Per favore, conferma che desideri veramente ricreare questa pagina.",
+Per favore, conferma che vuoi veramente ricreare questa pagina.",
 'confirmrecreate-noreason' => "L'utente [[User:$1|$1]] ([[User talk:$1|discussioni]]) ha cancellato questa pagina dopo che hai iniziato a modificarla.
-Per favore, conferma che desideri veramente ricreare questa pagina.",
+Per favore, conferma che vuoi veramente ricreare questa pagina.",
 'recreate' => 'Ricrea',
 
 # action=purge
@@ -3675,7 +3691,7 @@ Per favore, conferma che desideri veramente ricreare questa pagina.",
 'table_pager_prev' => 'Pagina precedente',
 'table_pager_first' => 'Prima pagina',
 'table_pager_last' => 'Ultima pagina',
-'table_pager_limit' => 'Mostra $1 file per pagina',
+'table_pager_limit' => 'Mostra $1 elementi per pagina',
 'table_pager_limit_label' => 'Elementi per pagina:',
 'table_pager_limit_submit' => 'Vai',
 'table_pager_empty' => 'Nessun risultato',
@@ -3684,7 +3700,7 @@ Per favore, conferma che desideri veramente ricreare questa pagina.",
 'autosumm-blank' => 'Pagina svuotata',
 'autosumm-replace' => "Pagina sostituita con '$1'",
 'autoredircomment' => 'Redirect alla pagina [[$1]]',
-'autosumm-new' => "Creata pagina con '$1'",
+'autosumm-new' => 'Creata pagina con "$1"',
 
 # Size units
 'size-bytes' => '$1 byte',
@@ -3869,6 +3885,8 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'htmlform-submit' => 'Invia',
 'htmlform-reset' => 'Annulla modifiche',
 'htmlform-selectorother-other' => 'Altro',
+'htmlform-no' => 'No',
+'htmlform-yes' => 'Sì',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 con la possibilità di ricerca completa nel testo',
index da33deb..00264bc 100644 (file)
@@ -393,8 +393,6 @@ $messages = array(
 'tog-shownumberswatching' => 'ページをウォッチしている利用者数を表示',
 'tog-oldsig' => '既存の署名:',
 'tog-fancysig' => '署名をウィキ文として扱う (自動リンクなし)',
-'tog-externaleditor' => '既定で編集に外部アプリケーションを使用 (上級者向け、コンピューターに特殊な設定が必要。[//www.mediawiki.org/wiki/Manual:External_editors 詳細])',
-'tog-externaldiff' => '差分表示に外部アプリケーションを使用 (上級者向け、コンピューターに特殊な設定が必要。[//www.mediawiki.org/wiki/Manual:External_editors 詳細])',
 'tog-showjumplinks' => '利用しやすさ向上のための「{{int:jumpto}}」リンクを有効にする',
 'tog-uselivepreview' => 'ライブプレビューを使用 (JavaScriptが必要) (開発中)',
 'tog-forceeditsummary' => '要約欄が空欄の場合に確認を促す',
@@ -409,6 +407,7 @@ $messages = array(
 'tog-showhiddencats' => '隠しカテゴリを表示',
 'tog-noconvertlink' => 'リンクタイトル変換を無効にする',
 'tog-norollbackdiff' => '巻き戻し後の差分を表示しない',
+'tog-useeditwarning' => '変更を保存せずに編集画面から離れようとしたら警告',
 
 'underline-always' => '常に付ける',
 'underline-never' => '常に付けない',
@@ -784,9 +783,15 @@ $2',
 'welcomecreation-msg' => 'アカウントが作成されました。
 [[Special:Preferences|{{SITENAME}}の個人設定]]の変更も忘れないようにしてください。',
 'yourname' => '利用者名:',
+'userlogin-yourname' => '利用者名',
+'userlogin-yourname-ph' => '利用者名を入力',
 'yourpassword' => 'パスワード:',
+'userlogin-yourpassword' => 'パスワード',
+'userlogin-yourpassword-ph' => 'パスワードを入力',
 'yourpasswordagain' => 'パスワード再入力:',
 'remembermypassword' => 'このブラウザーにログイン情報を保存 (最長 $1 {{PLURAL:$1|日|日間}})',
+'userlogin-remembermypassword' => 'ログイン情報を保存',
+'userlogin-signwithsecure' => 'セキュリティで保護された接続でログイン',
 'securelogin-stick-https' => 'ログイン後にHTTPS接続を維持',
 'yourdomainname' => 'ドメイン:',
 'password-change-forbidden' => 'このウィキではパスワードを変更できません。',
@@ -799,12 +804,16 @@ $2',
 'logout' => 'ログアウト',
 'userlogout' => 'ログアウト',
 'notloggedin' => 'ログインしていません',
+'userlogin-noaccount' => '登録がまだの場合',
+'userlogin-joinproject' => '{{SITENAME}}のアカウントを作成',
 'nologin' => '登録がまだの場合、$1。',
 'nologinlink' => 'アカウントを作成してください',
 'createaccount' => 'アカウント作成',
 'gotaccount' => 'アカウントを既に持っている場合、$1。',
 'gotaccountlink' => 'ログインしてください',
 'userlogin-resetlink' => 'ログイン情報をお忘れですか?',
+'helplogin-url' => 'Help:ログイン',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ログインのヘルプ]]',
 'createaccountmail' => '一時的でランダムなパスワードを生成して、以下に指定したメールアドレスに送信する',
 'createaccountreason' => '理由:',
 'badretype' => '入力したパスワードが一致しません。',
@@ -914,6 +923,7 @@ Cookieを有効にしていることを確認して、このページを再読
 'passwordreset-text' => 'このフォームに記入すると、パスワードを再設定できます。',
 'passwordreset-legend' => 'パスワードの再設定',
 'passwordreset-disabled' => 'パスワードの再設定は、このウィキでは無効になっています。',
+'passwordreset-emaildisabled' => 'メール機能は、このウィキでは無効化されています。',
 'passwordreset-pretext' => '{{PLURAL:$1||下記のデータのいずれか 1 つを入力してください}}',
 'passwordreset-username' => '利用者名:',
 'passwordreset-domain' => 'ドメイン:',
@@ -947,7 +957,7 @@ $2
 仮パスワード: $2',
 'passwordreset-emailsent' => 'パスワード再設定メールをお送りしました。',
 'passwordreset-emailsent-capture' => '下記の内容の、パスワード再設定メールをお送りしました。',
-'passwordreset-emailerror-capture' => '以下の内容のパスワード再設定メールを生成しましたが、利用者への送信に失敗しました: $1',
+'passwordreset-emailerror-capture' => '以下の内容のパスワード再設定メールを生成しましたが、{{GENDER:$2|利用者}}への送信に失敗しました: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'メールアドレスの変更',
@@ -1175,6 +1185,8 @@ $1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロッ
 'content-failed-to-parse' => '$2のコンテンツを$1モデルとして構文解析できませんでした: $3',
 'invalid-content-data' => '本文データが無効です',
 'content-not-allowed-here' => 'ページ [[$2]] では、「$1」コンテンツは許可されていません',
+'editwarning-warning' => 'このページを離れると、あなたが行なった変更がすべて失われてしまうかもしれません。
+ログインしている場合、個人設定の「編集」タブでこの警告を表示しないようにすることができます。',
 
 # Content models
 'content-model-wikitext' => 'ウィキテキスト',
@@ -3391,8 +3403,6 @@ $1',
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => '中国語 (簡体)',
@@ -4239,6 +4249,8 @@ MediaWikiは、有用であることを期待して配布されていますが
 'htmlform-submit' => '送信',
 'htmlform-reset' => '変更を取り消す',
 'htmlform-selectorother-other' => 'その他',
+'htmlform-no' => 'いいえ',
+'htmlform-yes' => 'はい',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 (全文検索あり)',
index 00ce677..47bcc97 100644 (file)
@@ -53,11 +53,11 @@ $namespaceAliases = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Garisen ngisoré pranala:',
-'tog-justify' => 'Ratakna paragraf',
-'tog-hideminor' => 'Delikna suntingan cilik ing owah-owahan pungkasan',
-'tog-hidepatrolled' => 'Delikna suntingan sing wis dipatroli ing kaca owah-owahan',
-'tog-newpageshidepatrolled' => 'Delikna kaca sing wis dipatroli saka daftar kaca anyar',
-'tog-extendwatchlist' => 'Kembangna daftar pangawasan kanggo nuduhaké kabèh pangowahan, ora mung sing paling anyar',
+'tog-justify' => 'Ratakaké paragrap',
+'tog-hideminor' => 'Dhelikaké suntingan cilik ing owah-owahan pungkasan',
+'tog-hidepatrolled' => 'Dhelikaké suntingan kapanto ing owah-owahan pungkasan',
+'tog-newpageshidepatrolled' => 'Dhelikaké kaca kapanto saka daptar kaca anyar',
+'tog-extendwatchlist' => 'Jembaraké daptar pangawasan kanggo nuduhaké kabèh owahan, ora mung sing paling anyar',
 'tog-usenewrc' => 'Owah-owahané paguyuban miturut kaca nèng owah-owahan anyar lan daptar panto (mbutuhaké JavaScript)',
 'tog-numberheadings' => 'Wènèhana nomer judul secara otomatis',
 'tog-showtoolbar' => 'Tuduhna <em>toolbar</em> (batang piranti) panyuntingan',
@@ -81,10 +81,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Tuduhna cacahé pangawas',
 'tog-oldsig' => 'Tapak asma sing ana:',
 'tog-fancysig' => 'Anggepen tapak asta minangka teks wiki (tanpa pranala otomatis)',
-'tog-externaleditor' => 'Pigunakaken program pangolah tembung jawi (namung tumrap ahli, perlu pangaturan mligi ing komputer panjenengan. 
-[//www.mediawiki.org/wiki/Manual:External_editors Informasi sajangkepipun].)',
-'tog-externaldiff' => 'Pigunakaken diff eksternal sacara bektan (namung tumrap para ahli, perlu pangaturan mligi ing komputer panjenengan.
-[//www.mediawiki.org/wiki/Manual:External_editors Informasi sajangkepipun].)',
 'tog-showjumplinks' => 'Aktifna pranala pambiyantu "langsung menyang"',
 'tog-uselivepreview' => 'Nganggoa pratayang langsung (JavaScript) (eksperimental)',
 'tog-forceeditsummary' => 'Élingna aku menawa kothak ringkesan suntingan isih kosong',
@@ -98,6 +94,7 @@ $messages = array(
 'tog-diffonly' => 'Aja dituduhaké isi kaca ing ngisor bédané suntingan',
 'tog-showhiddencats' => 'Tuduhna kategori sing didelikaké',
 'tog-norollbackdiff' => 'Lirwaaké prabédan sawusé nglakokaké sawijining pambalikan.',
+'tog-useeditwarning' => 'Èlingaké kula yèn kula ninggalaké suntingan sing durung kasimpen',
 
 'underline-always' => 'Tansah',
 'underline-never' => 'Ora',
@@ -457,6 +454,8 @@ Cathet yèn sapérangan kaca mungkin isih nampilaké tulisan yèn Sampéyan isih
 'welcomeuser' => 'Sugeng Rawuh, $1!',
 'welcomecreation-msg' => 'Akun panjenengan wis kacipta. Aja lali nata konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] panjenengan.',
 'yourname' => 'Asma pangangeman',
+'userlogin-yourname' => 'Jeneng panganggo',
+'userlogin-yourname-ph' => 'Lebokaké jenengné panganggo',
 'yourpassword' => 'Tembung sandhi:',
 'yourpasswordagain' => 'Balènana tembung sandhi',
 'remembermypassword' => 'Émut tembung sandi kula (salebeting $1 {{PLURAL:$1|dinten|dinten}})',
index 2e70002..e5f7968 100644 (file)
@@ -197,8 +197,6 @@ $messages = array(
 'tog-shownumberswatching' => 'მაკონტროლებელ მომხმარებელთა რიცხვის ჩვენება',
 'tog-oldsig' => 'არსებული ხელმოწერა:',
 'tog-fancysig' => 'საკუთარი ვიკიფორმატიანი ხელმოწერა (ავტომატური ბმულის გარეშე)',
-'tog-externaleditor' => 'გამოიყენეთ გარე რედაქტორი სტანდარტული ფორმით (მხოლოდ ექსპერტებისთვის, მოითხოვს სპეციალურ კონფიგურაციას თქვენს კომპიუტერში. [//www.mediawiki.org/wiki/Manual:External_editors ვრცლად.])',
-'tog-externaldiff' => 'გამოიყენეთ გარე განსხვავება სტანდარტული ფორმით (მხოლოდ ექსპერტთათვის, მოითხოვს სპეციალურ კონფიგურაციას თქვენს კომპიუტერში. [//www.mediawiki.org/wiki/Manual:External_editors ვრცლად.])',
 'tog-showjumplinks' => 'დამხმარე ბმულების „გადასვლა-კენ“ ჩართვა',
 'tog-uselivepreview' => 'გამოიყენეთ ახალი წინასწარი გადახედვა (ჯავასკრიპტი)  (ექსპერიმენტული)',
 'tog-forceeditsummary' => 'გამაფრთხილე ცარიელი რედაქტირების რეზიუმეს შემთხვევაში',
@@ -213,6 +211,7 @@ $messages = array(
 'tog-showhiddencats' => 'დამალული კატეგორიების ჩვენება',
 'tog-noconvertlink' => 'სათაურის გარდაქმნის ბმულის გამორთვა',
 'tog-norollbackdiff' => 'გამოტოვეთ ცვლილება გაუქმებისას',
+'tog-useeditwarning' => 'გამაფრთხილე, როდესაც დავტოვებ რედაქტირებად გვერდს, დაუმახსოვრებელი ცვლილებებით',
 
 'underline-always' => 'მუდამ',
 'underline-never' => 'არასდროს',
@@ -965,6 +964,7 @@ $2
 'content-failed-to-parse' => '$2-ის შინაარსი არ შეესაბამება $1-ის ტიპს: $3.',
 'invalid-content-data' => 'დაუშვებელი მონაცემები',
 'content-not-allowed-here' => '„$1“-ის შინაარსი დაუშვებელია [[$2]] გვერდზე',
+'editwarning-warning' => 'სხვა გვერდზე გადასვლა გამოიწვევს ცვლილებების დაკარგვას.',
 
 # Content models
 'content-model-wikitext' => 'ვიკიტექსტი',
index 33a9490..16c6518 100644 (file)
@@ -73,8 +73,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Ssken geddac yellan n yimseqdacen iɛessasen',
 'tog-oldsig' => 'Azmul yellan :',
 'tog-fancysig' => 'ǧǧ azmul am yettili (war azday awurman)',
-'tog-externaleditor' => 'Sseqdec ambeddel n berra d ameslugen',
-'tog-externaldiff' => 'Sseqdec ambeddel n berra iwakken ad ẓreɣ imgerraden',
 'tog-showjumplinks' => 'Eǧǧ izdayen "neggez ar"',
 'tog-uselivepreview' => 'Sseqdec pre-timeẓriwt taǧiḥbuṭ (JavaScript) (Experimental)',
 'tog-forceeditsummary' => 'Ini-iyi-d mi sskecmeɣ agzul amecluc',
@@ -1060,15 +1058,6 @@ Tzemreḍ ad affeḍ tilɣa deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPA
 'search-external' => 'Anadi yeffɣen',
 'searchdisabled' => 'Anadi deg {{SITENAME}} yettwakkes. Tzemreḍ ad tnadiḍ s Google. Meɛna ur tettuḍ ara, tasmult n google taqdimt.',
 
-# Quickbar
-'qbsettings' => 'Tanuga taǧiḥbuṭ',
-'qbsettings-none' => 'Ulac',
-'qbsettings-fixedleft' => 'Aẓelmaḍ',
-'qbsettings-fixedright' => 'Ayeffus',
-'qbsettings-floatingleft' => 'Tufeg aẓelmaḍ',
-'qbsettings-floatingright' => 'Tufeg ayeffus',
-'qbsettings-directionality' => 'Usbiḍ, ɣef wayen n unamud n tira n tutlayt ik/im',
-
 # Preferences page
 'preferences' => 'Isemyifiyen',
 'mypreferences' => 'Isemyifiyen inu',
@@ -1607,7 +1596,6 @@ I taɣellist tameqqṛant, img_auth.php yensa.',
 'http-read-error' => 'Anezri n taɣuri HTTP.',
 'http-timed-out' => 'Tuttra HTTP teneffeṛ.',
 'http-curl-error' => 'Anezri deg tiririt n URL : $1',
-'http-host-unreachable' => 'Ulamek an siḍes URL',
 'http-bad-status' => 'Yella ugur deg tuttra HTTP : $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1922,15 +1910,6 @@ Ineggafen imazdayen : <code>$1</code> (ur d-renu acemma deg unadi inek/inem)',
 'listusers-noresult' => 'Ur yufi ḥedd (amseqdac).',
 'listusers-blocked' => '(yekyef)',
 
-# Special:ActiveUsers
-'activeusers' => 'Umuɣ n iseqdacen urmiden',
-'activeusers-intro' => 'Wagi d umuɣ n iseqdacen yexedmen armud deg {{PLURAL:$1|ass agi aneggaru|$1 ussan agi ineggura}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|abeddel n ussan agi ineggura|ibeddilen n ussan agi ineggura}} deg {{PLURAL:$3|ass aneggaru|$3 ussan ineggura}}',
-'activeusers-from' => 'Ssken iseqdacen seg :',
-'activeusers-hidebots' => 'Ffer iṛubuten',
-'activeusers-hidesysops' => 'Ffer inedbalen',
-'activeusers-noresult' => 'Ur yufi aseqdac.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Izerfan n igrawen n iseqdacen',
 'listgrouprights-summary' => 'Asebter agi yesɛa yiwen umuɣ n igrawen i sengelen deg wiki agi dɣa izerfan n wadduf i qqenen.
index 3a6fa9d..a084acd 100644 (file)
@@ -82,8 +82,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Amorê karberunê şêrkerdoğu bıasne',
 'tog-oldsig' => 'İmza mewcude:',
 'tog-fancysig' => 'İmza rê mamelê wikimeqaley bıke (bê girewo otomatik)',
-'tog-externaleditor' => 'Editorê teberi standart bıgurene (teyna serba ekspertuno, komputerê sıma de ayarê xusışiy lazımê. [//www.mediawiki.org/wiki/Manual:External_editors Melumato jêdêr.])',
-'tog-externaldiff' => 'Têversanaene pê programê teberi vıraze (teyna serba ekspertuno, komputerê sıma de ayarê xısuşiy lazımê. [//www.mediawiki.org/wiki/Manual:External_editors Melumato jêdêr.])',
 'tog-showjumplinks' => 'Girê "so"y feal ke',
 'tog-uselivepreview' => 'Verqayto cande bıgurene (JavaScript) (hona cerrebnayene dero)',
 'tog-forceeditsummary' => 'Mı ke xulasa kerde cı vira, hay be mı ser de',
@@ -782,14 +780,6 @@ Verê cıfeteliyaene de be ilawekerdena verbendê '''all:'''i ra (ebe pelunê hu
 Sıma şikinê na sıre ''Google'' de şêr kerê.
 Diqet kerê, beno ke tedeestê {{SITENAME}} uza endi rozane niyê.",
 
-# Quickbar
-'qbsettings' => 'Herbişiyaena hedefi',
-'qbsettings-none' => 'Qet',
-'qbsettings-fixedleft' => 'Çhep de bestniyo pa',
-'qbsettings-fixedright' => 'Rast de bestniyo pa',
-'qbsettings-floatingleft' => 'Çhepi ser aznino',
-'qbsettings-floatingright' => 'Rasti ser aznino',
-
 # Preferences page
 'preferences' => 'Tercihi',
 'mypreferences' => 'Tercihê mı',
@@ -803,7 +793,7 @@ Diqet kerê, beno ke tedeestê {{SITENAME}} uza endi rozane niyê.",
 'prefs-datetime' => 'Tarix u zeman',
 'prefs-personal' => 'Dosya karberi',
 'prefs-rc' => 'Vurnaisê peyêni',
-'prefs-watchlist' => 'Lista şêr-kerdişi',
+'prefs-watchlist' => 'Lista şêrkerdene',
 'prefs-watchlist-days' => 'Rozê ke lista şêr-kerdişi de asenê:',
 'prefs-watchlist-edits' => 'Miqdarê tewr jêdêr vurnaisuno ke lista şêr-kerdişia hirakerdiye derê:',
 'prefs-misc' => 'Ğelet',
@@ -844,8 +834,8 @@ Diqet kerê, beno ke tedeestê {{SITENAME}} uza endi rozane niyê.",
 'prefs-files' => 'Dosyey',
 'youremail' => 'E-poste:',
 'username' => 'Namê karberi:',
-'uid' => 'Kamiya karberi:',
-'prefs-memberingroups' => 'Ezaê de {{PLURAL:$1|gruba|grubunê}}:',
+'uid' => 'Kamiya {{GENDER:$1|karberi}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Ezayê}} {{PLURAL:$1|grube|grubu}}:',
 'yourrealname' => 'Namo rastıkên:',
 'yourlanguage' => 'Zon:',
 'yourvariant' => 'Varyant:',
@@ -1125,9 +1115,6 @@ Cêr [$2 pela arezekerdena dosya de] arezekerdene asnina.',
 'listusers-noresult' => 'Karber nêdiya.',
 'listusers-blocked' => '(kilıt biyo)',
 
-# Special:ActiveUsers
-'activeusers' => 'Lista karberunê fealu',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Kome',
 'listgrouprights-rights' => 'Heqi',
@@ -1148,7 +1135,7 @@ Cêr [$2 pela arezekerdena dosya de] arezekerdene asnina.',
 'emailsend' => 'Bırusne',
 
 # Watchlist
-'watchlist' => 'Pela mına şêrkerdene',
+'watchlist' => 'Lista şêrkerdene',
 'mywatchlist' => 'Lista şêrkerdışi',
 'watchlistfor2' => 'Serba $1 ($2)',
 'addedwatchtext' => "Pela \"[[:\$1]]\"i ilawe biye be [[Special:Watchlist|pela şêrkerdişi]].
@@ -1200,7 +1187,7 @@ Tı şikina sewiya sevekiyaena na pele bıvurnê, hema yê nae sevekiyaena qedem
 'protect-default' => 'Destur bıde be karberu pêrune',
 'protect-fallback' => 'Desturê "$1"i lazımo',
 'protect-level-autoconfirmed' => 'Karberunê newun u qeydnêbiyaoğu kilıt ke',
-'protect-level-sysop' => 'Teyna idarekeri',
+'protect-level-sysop' => 'Teyna idarekeru rê izıne bıde',
 'protect-summary-cascade' => 'qedemein',
 'protect-expiring' => 'tarixê qediyaene $1 (UTC)',
 'protect-expiring-local' => '$1 de qedino',
@@ -1468,8 +1455,6 @@ Na rêze de her girêo bin jê istisna vênino, yanê pelê ke dosya beno ke ser
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans',
index 3dd54eb..c12d1f8 100644 (file)
@@ -388,8 +388,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Бақылап тұрған қатысушылардың санын көрсет',
 'tog-oldsig' => 'Ағымдағы қолтаңбаңыз:',
 'tog-fancysig' => 'Қолтаңбаны уикимәтін ретінде қарастыру (автоматты сілтеме қойылмайды)',
-'tog-externaleditor' => 'Шеттік өңдеуішті әдепкіден қолдан (тек сарапшылар үшін, компьютеріңізде арнаулы бапталымдар керек)',
-'tog-externaldiff' => 'Шеттік айырмағышты әдепкіден қолдан (тек сарапшылар үшін, компьютеріңізде арнаулы бапталымдар керек)',
 'tog-showjumplinks' => '«Өтіп кету» қатынау сілтемелерін қос',
 'tog-uselivepreview' => 'Тура қарап шығуды қолдану (JavaScript) (Сынақтама)',
 'tog-forceeditsummary' => 'Өңдеменің қысқаша мазмұндамасы бос қалғанда маған ескерт',
@@ -1076,6 +1074,8 @@ IP-мекенжайыңыз бұл беттің түзету тарихында
 'edit-already-exists' => 'Жаңа бет жасау мүмкін емес.
 Ол әлдеқашан бар.',
 'defaultmessagetext' => 'Әдепкі мәтіні',
+'editwarning-warning' => 'Басқа бетке өтсеңіз сіздің жазған соңғы өңдемелеріңіз жойылуы мүмкін. 
+Егер сiз жүйеде тiркелсеңiз, онда сiз баптауларыңыздағы «{{int:prefs-editing}}» бөлігіне кіріп, бұл ескертуді өшіре аласыз.',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Құлақтандыру: Бұл бетте тым көп шығыс алатын құрылым талдатқыш жетелерінің қоңырау шалулары бар.
@@ -1291,14 +1291,6 @@ $3 келтірілген себебі: ''$2''",
 Әзірше Google арқылы іздеуге болады.
 Аңғартпа: {{SITENAME}} торабының мағлұмат тізбелері ескірген болуы мүмкін.',
 
-# Quickbar
-'qbsettings' => 'Мәзір',
-'qbsettings-none' => 'Ешқандай',
-'qbsettings-fixedleft' => 'Солға бекітілген',
-'qbsettings-fixedright' => 'Оңға бекітілген',
-'qbsettings-floatingleft' => 'Солға қалқыған',
-'qbsettings-floatingright' => 'Оңға қалқыған',
-
 # Preferences page
 'preferences' => 'Бапталымдар',
 'mypreferences' => 'Баптауларым',
@@ -2542,24 +2534,14 @@ MediaWiki жүйесінің [[{{#special:Import}}|сырттан алу бет
 
 # Stylesheets
 'common.css' => '/* Мында орналастырылған CSS барлық мәнерлерде қолданылады */',
-'standard.css' => '/* Мында орналастырылған CSS тек «Дағдылы» (standard) мәнерін пайдаланушыларына ықпал етеді */',
-'nostalgia.css' => '/* Мында орналастырылған CSS тек «Аңсау» (nostalgia) мәнерін пайдаланушыларына ықпал етеді */',
 'cologneblue.css' => '/* Мында орналастырылған CSS тек «Көлн зеңгірлігі» (cologneblue) мәнерін пайдаланушыларына ықпал етеді skin */',
 'monobook.css' => '/* Мында орналастырылған CSS тек «Дара кітап» (monobook) мәнерін пайдаланушыларына ықпал етеді */',
-'myskin.css' => '/* Мында орналастырылған CSS тек «Өз мәнерім» (myskin) мәнерін пайдаланушыларына ықпал етеді */',
-'chick.css' => '/* Мында орналастырылған CSS тек «Балапан» (chick) мәнерін пайдаланушыларына ықпал етеді */',
-'simple.css' => '/* Мында орналастырылған CSS тек «Кәдімгі» (simple) мәнерін пайдаланушыларына ықпал етеді */',
 'modern.css' => '/* Мында орналастырылған CSS тек «Заманауи» (modern) мәнерін пайдаланушыларына ықпал етеді */',
 
 # Scripts
 'common.js' => '/* Мындағы әртүрлі JavaScript кез келген бет қотарылғанда барлық пайдаланушылар үшін жегіледі. */',
-'standard.js' => '/* Мындағы JavaScript тек «Дағдылы» (standard) мәнерін пайдаланушылар үшін жегіледі */',
-'nostalgia.js' => '/* Мындағы JavaScript тек «Аңсау» (nostalgia) мәнерін пайдаланушылар үшін жегіледі*/',
 'cologneblue.js' => '/* Мындағы JavaScript тек «Көлн зеңгірлігі» (cologneblue) мәнерін пайдаланушылар үшін жегіледі */',
 'monobook.js' => '/* Мындағы JavaScript тек «Дара кітап» (monobook) мәнерін пайдаланушылар үшін жегіледі */',
-'myskin.js' => '/* Мындағы JavaScript тек «Өз мәнерім» (myskin) мәнерін пайдаланушылар үшін жегіледі */',
-'chick.js' => '/* Мындағы JavaScript тек «Балапан» (chick) мәнерін пайдаланушылар үшін жегіледі */',
-'simple.js' => '/* Мындағы JavaScript тек «Кәдімгі» (simple) мәнерін пайдаланушылар үшін жегіледі */',
 'modern.js' => '/* Мындағы JavaScript тек «Заманауи» (modern) мәнерін пайдаланушылар үшін жегіледі */',
 
 # Metadata
@@ -2585,13 +2567,8 @@ MediaWiki жүйесінің [[{{#special:Import}}|сырттан алу бет
 'spam_blanking' => '$1 дегенге сілтемелері бар барлық түзетулер тазартылды',
 
 # Skin names
-'skinname-standard' => 'Дағдылы (standard)',
-'skinname-nostalgia' => 'Аңсау (nostalgia)',
 'skinname-cologneblue' => 'Көлн зеңгірлігі (cologneblue)',
 'skinname-monobook' => 'Дара кітап (monobook)',
-'skinname-myskin' => 'Өз мәнерім (myskin)',
-'skinname-chick' => 'Балапан (chick)',
-'skinname-simple' => 'Кәдімгі (simple)',
 'skinname-modern' => 'Заманауи (modern)',
 
 # Patrolling
index 3d6afa0..8d43ade 100644 (file)
@@ -291,8 +291,6 @@ $messages = array(
 'tog-shownumberswatching' => 'បង្ហាញ​ចំនួនអ្នកប្រើប្រាស់​ដែលតាមដាន​ទំព័រនេះ',
 'tog-oldsig' => 'ហត្ថលេខាមានហើយ៖',
 'tog-fancysig' => 'ចុះហត្ថលេខា​ជា​អត្ថបទវិគី​ (ដោយ​គ្មានតំណភ្ជាប់​ស្វ័យប្រវត្តិ)',
-'tog-externaleditor' => 'ប្រើប្រាស់​ឧបករណ៍​កែប្រែខាងក្រៅ​តាមលំនាំដើម (សម្រាប់តែអ្នកមានជំនាញប៉ុណ្ណោះនិងត្រូវការការកំណត់ពិសេសៗនៅលើកុំព្យូទ័ររបស់អ្នក។ [//www.mediawiki.org/wiki/Manual:External_editors ព័ត៌មានបន្ថែម]។)',
-'tog-externaldiff' => 'ប្រើប្រាស់​ឧបករណ៍​ប្រៀបធៀបខាងក្រៅ​តាមលំនាំដើម (សម្រាប់តែអ្នកមានជំនាញប៉ុណ្ណោះនិងត្រូវការការកំណត់ពិសេសៗនៅលើកុំព្យូទ័ររបស់អ្នក។ [//www.mediawiki.org/wiki/Manual:External_editors ព័ត៌មានបន្ថែម]។)',
 'tog-showjumplinks' => 'ប្រើតំណភ្ជាប់ "លោតទៅ"',
 'tog-uselivepreview' => 'ប្រើប្រាស់​ការមើលមុនរហ័ស​ (តម្រូវអោយមាន JavaScript) (ស្ថិតក្រោមការពិសោធន៍នៅឡើយ)',
 'tog-forceeditsummary' => 'សូមរំលឹកខ្ញុំ​កាលបើខ្ញុំទុកប្រអប់ចំណារពន្យល់ឱ្យនៅទំនេរ',
@@ -306,6 +304,7 @@ $messages = array(
 'tog-diffonly' => 'កុំបង្ហាញខ្លឹមសារទំព័រនៅពីក្រោមតារាងប្រៀបធៀបចំណុចខុសគ្នា',
 'tog-showhiddencats' => 'បង្ហាញចំណាត់ថ្នាក់ក្រុមដែលត្រូវបានលាក់',
 'tog-norollbackdiff' => 'បំភ្លេច​ភាព​ខុស​គ្នា​បន្ទាប់​ពី​អនុវត្តការ​ស្ដារវិញ',
+'tog-useeditwarning' => 'សូមព្រមាន​ខ្ញុំ​ ពេលដែលខ្ញុំ​ចាកចេញ​ពី​ទំព័រ​កែប្រែដោយមិន​បានរក្សា​ទុកបំលាស់ប្ដូរ​នានា​',
 
 'underline-always' => 'ជានិច្ច',
 'underline-never' => 'កុំអោយសោះ',
@@ -1073,6 +1072,8 @@ $2
 
 ទំព័រនេះមានរួចហើយ។',
 'defaultmessagetext' => 'អត្ថបទសារតាមលំនាំដើម',
+'editwarning-warning' => 'ចាកចេញពីទំព័រនេះ នឹងធ្វើឲ្យអ្នកបាត់បង់កំណែប្រែដែលអ្នកបានធ្វើ។
+ប្រសិនបើអ្នកបាន​ឡុកអ៊ីនរួចហើយ អ្នកអាច​បិទ​បម្រាម​នេះ​នៅ​ក្នុងផ្នែក​ "{{int:prefs-editing}}" នៃ​ចំណូល​ចិត្ត​របស់​អ្នក​។',
 
 # Content models
 'content-model-wikitext' => 'អត្ថបទវិគី',
@@ -1339,15 +1340,6 @@ $1",
 ក្នុង​ពេល​ឥឡូវ​នេះ​ អ្នកអាច​ស្វែង​រក​តាម​រយៈ​ Google បាន​។
 សូមចងចាំ​ថា​ លិបិក្រម​នៃ​មាតិការ​របស់​{{SITENAME}} អាចហួស​សម័យ​។​',
 
-# Quickbar
-'qbsettings' => 'របារទាន់ចិត្ត',
-'qbsettings-none' => 'ទទេ',
-'qbsettings-fixedleft' => 'ចុងខាងឆ្វេង',
-'qbsettings-fixedright' => 'ចុងខាងស្តាំ',
-'qbsettings-floatingleft' => 'អណ្តែតឆ្វេង',
-'qbsettings-floatingright' => 'អណ្តែតស្តាំ',
-'qbsettings-directionality' => 'នៅមួយកន្លែង, អាស្រ័យលើទិសដៅសរសេររបស់ភាសារបស់អ្នក',
-
 # Preferences page
 'preferences' => 'ចំណង់ចំណូលចិត្ត',
 'mypreferences' => 'ចំណង់ចំណូលចិត្ត​',
@@ -1857,7 +1849,6 @@ $1',
 
 # HTTP errors
 'http-invalid-url' => 'URLមិនត្រឹមត្រូវ៖ $1',
-'http-host-unreachable' => 'មិនអាចទៅកាន់URLបានទេ',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'មិនអាច ចូលទៅដល់ URL',
@@ -2915,13 +2906,8 @@ $1',
 
 # Stylesheets
 'common.css' => '/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើគ្រប់សំបកទាំងអស់ */',
-'standard.css' => '/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Standard */',
-'nostalgia.css' => '/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Nostalgia */',
 'cologneblue.css' => '/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Cologne Blue */',
 'monobook.css' => '/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Monobook */',
-'myskin.css' => '/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក MySkin */',
-'chick.css' => '/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Chick */',
-'simple.css' => '/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Simple */',
 'modern.css' => '/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Modern */',
 'vector.css' => '/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើអ្នកប្រើប្រាស់នៃសំបក Vector */',
 
@@ -2986,13 +2972,8 @@ $1',
 'pageinfo-protect-cascading-from' => 'ការការពារត្រូវបានដាក់ជាថ្នាក់ពី',
 
 # Skin names
-'skinname-standard' => 'បុរាណ',
-'skinname-nostalgia' => 'អាឡោះអាល័យ',
 'skinname-cologneblue' => 'ទឹកអប់ខៀវ',
 'skinname-monobook' => 'សៀវភៅឯក',
-'skinname-myskin' => 'សំបកខ្ញុំ',
-'skinname-chick' => 'កូនមាន់',
-'skinname-simple' => 'សាមញ្ញ',
 'skinname-modern' => 'ទំនើប',
 'skinname-vector' => 'វ៉ិចទ័រ​​',
 
index a301a9d..e59596f 100644 (file)
@@ -374,8 +374,6 @@ $messages = array(
 'tog-shownumberswatching' => '주시 사용자 수 보기',
 'tog-oldsig' => '현재 서명:',
 'tog-fancysig' => '서명을 위키텍스트로 취급 (자동으로 링크를 걸지 않음)',
-'tog-externaleditor' => '바깥 편집기를 기본 편집기로 사용 (숙련자용. 컴퓨터에 특별한 설정이 필요. [//www.mediawiki.org/wiki/Manual:External_editors 자세한 정보 보기])',
-'tog-externaldiff' => '바깥 비교 도구를 기본 도구로 사용 (숙련자용. 컴퓨터에 특별한 설정이 필요. [//www.mediawiki.org/wiki/Manual:External_editors 자세한 설명 보기])',
 'tog-showjumplinks' => '접근성을 위한 "이동" 링크 쓰기 (일부 스킨에서만 작동)',
 'tog-uselivepreview' => '실시간 미리 보기 사용하기 (자바스크립트 필요) (시험 기능)',
 'tog-forceeditsummary' => '편집 요약을 쓰지 않았을 때 알려주기',
@@ -390,6 +388,7 @@ $messages = array(
 'tog-showhiddencats' => '숨은 분류 보기',
 'tog-noconvertlink' => '링크 제목 변환을 비활성화',
 'tog-norollbackdiff' => '되돌리기 후 차이를 보이지 않기',
+'tog-useeditwarning' => '수정한 내용을 저장하지 않고 편집 양식을 닫거나 다른 페이지로 이동할 때 알림',
 
 'underline-always' => '항상',
 'underline-never' => '치지 않음',
@@ -626,8 +625,8 @@ $1',
 'hidetoc' => '숨기기',
 'collapsible-collapse' => '접기',
 'collapsible-expand' => '펼치기',
-'thisisdeleted' => '$1 보거나 되살리겠습니까?',
-'viewdeleted' => '$1 보겠습니까?',
+'thisisdeleted' => '$1 문서를 보거나 되살리겠습니까?',
+'viewdeleted' => '$1 문서를 보겠습니까?',
 'restorelink' => '{{PLURAL:$1|삭제된 편집 $1개}}',
 'feedlinks' => '피드:',
 'feed-invalid' => '잘못된 구독 피드 방식입니다.',
@@ -709,7 +708,7 @@ URL을 잘못 입력하였거나, 잘못된 링크를 따라갔을 수 있습니
 'delete-hook-aborted' => '훅에 의해 삭제가 중단되었습니다.
 아무런 설명도 주어지지 않았습니다.',
 'badtitle' => '잘못된 제목',
-'badtitletext' => '문서 제목이 잘못되었거나 비어있습니다. 또는 잘못된 인터위키 제목으로 링크했습니다.
+'badtitletext' => '요청한 문서 제목이 잘못되었거나, 비어있거나, 잘못된 인터위키 제목으로 링크했습니다.
 문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.',
 'perfcached' => '다음 자료는 캐시된 것이므로 현재 상황을 반영하지 않을 수 있습니다. 캐시에 최대 {{PLURAL:$1|결과 $1개}}가 있습니다.',
 'perfcachedts' => '다음 자료는 캐시된 것으로, $1에 마지막으로 새로 고쳐졌습니다.  캐시에 최대 {{PLURAL:$4|결과 $4개}}가 있습니다.',
@@ -762,9 +761,15 @@ $2',
 'welcomecreation-msg' => '계정이 만들어졌습니다.
 [[Special:Preferences|{{SITENAME}} 사용자 환경 설정]]을 바꿀 수 있습니다.',
 'yourname' => '사용자 이름:',
+'userlogin-yourname' => '사용자 이름',
+'userlogin-yourname-ph' => '사용자 이름을 입력하세요',
 'yourpassword' => '비밀번호:',
+'userlogin-yourpassword' => '비밀번호',
+'userlogin-yourpassword-ph' => '비밀번호를 입력하세요',
 'yourpasswordagain' => '비밀번호 다시 입력:',
 'remembermypassword' => '이 브라우저에서 로그인 상태를 저장하기 (최대 $1{{PLURAL:$1|일}})',
+'userlogin-remembermypassword' => '로그인 상태를 기억하기',
+'userlogin-signwithsecure' => '보안 서버로 로그인',
 'securelogin-stick-https' => '로그인 후에도 HTTPS 연결 상태를 유지합니다',
 'yourdomainname' => '도메인 이름:',
 'password-change-forbidden' => '이 위키에서 비밀번호를 바꿀 수 없습니다.',
@@ -777,15 +782,19 @@ $2',
 'logout' => '로그아웃',
 'userlogout' => '로그아웃',
 'notloggedin' => '로그인하지 않음',
+'userlogin-noaccount' => '계정이 없나요?',
+'userlogin-joinproject' => '{{SITENAME}}에 가입하세요',
 'nologin' => '계정이 없나요? $1.',
 'nologinlink' => '계정을 만들 수 있습니다',
 'createaccount' => '계정 만들기',
 'gotaccount' => '계정이 이미 있다면, $1.',
 'gotaccountlink' => '로그인하세요',
 'userlogin-resetlink' => '사용자 이름이나 비밀번호를 잊으셨나요?',
+'helplogin-url' => 'Help:로그인',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|로그인에 관한 도움말]]',
 'createaccountmail' => '임시 임의 비밀번호를 아래에 지정한 이메일로 보내기',
 'createaccountreason' => '이유:',
-'badretype' => 'ì\9e\85ë ¥í\95\9c ë¹\84ë°\80ë²\88í\98¸ê°\80 ì\84\9cë¡\9c ë\8b¤ë¦\85니다.',
+'badretype' => 'ì\9e\85ë ¥í\95\9c ë¹\84ë°\80ë²\88í\98¸ê°\80 ì\9d¼ì¹\98í\95\98ì§\80 ì\95\8aì\8aµ니다.',
 'userexists' => '입력하신 사용자 이름이 이미 등록되어 있습니다.
 다른 이름을 선택하세요.',
 'loginerror' => '로그인 오류',
@@ -855,7 +864,7 @@ $2',
 실수로 계정을 잘못 만들었다면 이 메시지는 무시해도 됩니다.',
 'usernamehasherror' => '사용자 이름에는 해시 문자가 들어갈 수 없습니다',
 'login-throttled' => '로그인에 연속으로 실패하였습니다.
\9e ì\8b\9c í\9b\84ì\97\90 ë\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95´ì£¼세요.',
\9e ì\8b\9c í\9b\84ì\97\90 ë\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95\98세요.',
 'login-abort-generic' => '로그인에 실패했습니다 - 중지됨',
 'loginlanguagelabel' => '언어: $1',
 'suspicious-userlogout' => '브라우저에 이상이 있거나 캐싱 프록시에서 로그아웃을 요청했기 때문에 로그아웃이 거부되었습니다.',
@@ -890,6 +899,7 @@ $2',
 'passwordreset-text' => '비밀번호를 재설정하려면 이 양식을 채워주세요.',
 'passwordreset-legend' => '비밀번호 재설정',
 'passwordreset-disabled' => '이 위키에서는 비밀번호를 재설정할 수 없습니다.',
+'passwordreset-emaildisabled' => '이 위키에서 이메일 기능이 비활성화되어 있습니다.',
 'passwordreset-pretext' => '{{PLURAL:$1||아래에 한 가지 정보를 입력하세요}}',
 'passwordreset-username' => '사용자 이름:',
 'passwordreset-domain' => '도메인:',
@@ -1011,7 +1021,7 @@ $1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대
 'loginreqlink' => '로그인',
 'loginreqpagetext' => '다른 문서를 보기 위해서는 $1해야 합니다.',
 'accmailtitle' => '비밀번호를 보냈습니다',
-'accmailtext' => '[[User talk:$1|$1]] 사용자의 비밀번호가 임의로 만들어져 $2ë¡\9c ì \84ì\86¡ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.
+'accmailtext' => '[[User talk:$1|$1]] 사용자의 비밀번호가 임의로 만들어져 $2\9c¼)ë¡\9c ë³´ë\83\88ì\8aµë\8b\88ë\8b¤.
 
 새 비밀번호는 로그인한 후 [[Special:ChangePassword|비밀번호를 바꿀]] 수 있습니다.',
 'newarticle' => '(새 문서)',
@@ -1145,6 +1155,8 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'content-failed-to-parse' => '$1 모델에 대한 $2 내용을 구문 분석하는 데 실패했습니다: $3',
 'invalid-content-data' => '잘못된 내용 데이터입니다',
 'content-not-allowed-here' => '"$1" 내용은 [[$2]] 문서예 허용하지 않습니다',
+'editwarning-warning' => '이 창에서 벗어나면 저장하지 않은 편집이 모두 사라집니다.
+로그인한 경우, 환경 설정 ‘{{int:prefs-editing}}’란에서 이 경고창을 띄우지 않도록 설정할 수 있습니다.',
 
 # Content models
 'content-model-wikitext' => '위키텍스트',
@@ -1179,7 +1191,7 @@ $2개 보다 적게 {{PLURAL:$2|써야}} 하지만 {{PLURAL:$1|지금은 $1개
 편집 되돌리기를 완료하려면 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.',
 'undo-failure' => '중간의 다른 편집과 충돌하여 이 편집을 되돌릴 수 없습니다.',
 'undo-norev' => '문서가 없거나 삭제되었기 때문에 편집을 되돌릴 수 없습니다.',
-'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|토론]]) 의 $1판 편집을 되돌림',
+'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|토론]])의 $1판 편집을 되돌림',
 
 # Account creation failure
 'cantcreateaccounttitle' => '계정을 만들 수 없음',
@@ -1431,6 +1443,7 @@ $1",
 'searchdisabled' => '{{SITENAME}} 찾기 기능이 비활성화되어 있습니다.
 기능이 작동하지 않는 동안에는 구글(Google)을 이용해 찾을 수 있습니다.
 검색 엔진의 내용은 최신이 아닐 수 있다는 점을 주의해주세요.',
+'search-error' => '찾는 동안 오류가 발생했습니다: $1',
 
 # Preferences page
 'preferences' => '사용자 환경 설정',
@@ -1531,8 +1544,8 @@ HTML 태그를 확인하세요.',
 'prefs-help-gender' => '선택 사항: 소프트웨어에서 성별에 따른 언어 문제를 해결하기 위해 사용됩니다.
 이 정보는 공개됩니다.',
 'email' => '이메일',
-'prefs-help-realname' => '실명 기입은 자유입니다.
\8b¤ëª\85ì\9d\84 ì\9e\85ë ¥í\95  ê²½ì\9a° 문서 기여에 자신의 이름이 들어가게 됩니다.',
+'prefs-help-realname' => '실명은 선택 사항입니다.
\8b¤ëª\85ì\9d\84 ì\9e\85ë ¥í\95\98ë©´ 문서 기여에 자신의 이름이 들어가게 됩니다.',
 'prefs-help-email' => '이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호 바꾸기를 위해 필요합니다.',
 'prefs-help-email-others' => '자신의 문서나 토론 문서에 있는 이메일 보내기 링크로 다른 사용자가 연락할 수 있게 할 수도 있습니다.
 이 경우에도 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.',
@@ -1554,7 +1567,7 @@ HTML 태그를 확인하세요.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => '이메일 주소가 유효한 것으로 보입니다.',
-'email-address-validity-invalid' => 'ì\9c í\9a¨í\95\9c ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c를 ì\9e\85ë ¥í\95´ì£¼ì\84¸ì\9a\94.',
+'email-address-validity-invalid' => 'ì\98¬ë°\94른 ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c를 ì\9e\85ë ¥í\95\98ì\84¸ì\9a\94',
 
 # User rights
 'userrights' => '사용자 권한 관리',
@@ -1905,7 +1918,7 @@ $1',
 [[Special:ListUsers/sysop|관리자]]에게 연락해주세요.',
 'upload-misc-error' => '알 수 없는 파일 올리기 오류',
 'upload-misc-error-text' => '파일을 올리는 중 알 수 없는 오류가 발생했습니다.
-URLì\9d´ ì\98¬ë°\94르고 ì \91ê·¼ ê°\80ë\8a¥í\95\9cì§\80를 í\99\95ì\9d¸í\95\98ê³  ë\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95´ì£¼세요.
+URLì\9d´ ì\98¬ë°\94르고 ì \91ê·¼ ê°\80ë\8a¥í\95\9cì§\80를 í\99\95ì\9d¸í\95\98ê³  ë\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95\98세요.
 문제가 계속되면 [[Special:ListUsers/sysop|관리자]]에게 연락해주세요.',
 'upload-too-many-redirects' => 'URL이 너무 많은 넘겨주기에 연결되어 있습니다.',
 'upload-unknown-size' => '크기를 알 수 없음',
@@ -2007,8 +2020,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization 을 참고하십시오
 URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'upload-curl-error28' => '업로드 시간 초과',
 'upload-curl-error28-text' => '사이트에서 응답하는 시간이 너무 깁니다.
\82¬ì\9d´í\8a¸ ì \91ì\86\8dì\9d´ ê°\80ë\8a¥í\95\9cì§\80 í\99\95ì\9d¸í\95\9c ë\8b¤ì\9d\8c ë\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95´ì£¼세요.
\95´ë\8b¹ ì\82¬ì\9d´í\8a¸ì\97\90 ì \91ì\86\8dì\9d´ ë§\8eì\9d\84 ê²½ì\9a° ì \91ì\86\8dì\9d´ ì\9b\90í\99\9cí\95\9c ì\8b\9cê°\84ë\8c\80ì\97\90 ì\8b\9cë\8f\84í\95´ì£¼세요.',
\82¬ì\9d´í\8a¸ ì \91ì\86\8dì\9d´ ê°\80ë\8a¥í\95\9cì§\80 í\99\95ì\9d¸í\95\9c ë\8b¤ì\9d\8c ë\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95\98세요.
\95´ë\8b¹ ì\82¬ì\9d´í\8a¸ì\97\90 ì \91ì\86\8dì\9d´ ë§\8eì\9d\84 ê²½ì\9a° ì \91ì\86\8dì\9d´ ì\9b\90í\99\9cí\95\9c ì\8b\9cê°\84ë\8c\80ì\97\90 ì\8b\9cë\8f\84í\95\98세요.',
 
 'license' => '라이선스:',
 'license-header' => '라이선스',
@@ -2019,7 +2032,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 # Special:ListFiles
 'listfiles-summary' => '이 위키에 올라와 있는 모든 파일이 나열되어 있습니다.
-사용자별로 필터링했을 경우에는 사용자가 올린 가장 최신 버전만이 보여집니다.',
+사용자별로 필터링했을 경우에는 사용자가 올린 가장 최신 만이 보여집니다.',
 'listfiles_search_for' => '다음 이름을 가진 미디어 찾기:',
 'imgfile' => '파일',
 'listfiles' => '파일 목록',
@@ -2159,8 +2172,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 그 링크는 다른 적절한 문서로 연결할 필요가 있습니다.<br />
 [[MediaWiki:Disambiguationspage]]에서 링크된 틀을 사용하는 문서를 동음이의 문서로 간주합니다.",
 
-'pageswithprop' => '문ì\84\9c ì\86\8dì\84±ì\9c¼ë¡\9c ë\90\9c 문서',
-'pageswithprop-legend' => '문ì\84\9c ì\86\8dì\84±ì\9c¼ë¡\9c ë\90\9c 문서',
+'pageswithprop' => '문ì\84\9c ì\86\8dì\84±ì\9d´ ì\9e\88ë\8a\94 문서',
+'pageswithprop-legend' => '문ì\84\9c ì\86\8dì\84±ì\9d´ ì\9e\88ë\8a\94 문서',
 'pageswithprop-text' => '이 문서는 특정 문서 속성을 사용한 문서를 나타냅니다.',
 'pageswithprop-prop' => '속성 이름:',
 'pageswithprop-submit' => '가기',
@@ -2205,7 +2218,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'uncategorizedtemplates' => '분류되지 않은 틀 목록',
 'unusedcategories' => '사용하지 않는 분류 목록',
 'unusedimages' => '사용하지 않는 파일 목록',
-'popularpages' => '인기있는 문서 목록',
+'popularpages' => '인기 있는 문서 목록',
 'wantedcategories' => '필요한 분류 목록',
 'wantedpages' => '필요한 문서 목록',
 'wantedpages-badtitle' => '문서 제목이 잘못되었습니다: $1',
@@ -2249,7 +2262,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'unusedcategoriestext' => '사용하지 않는 분류 문서의 목록입니다.',
 'notargettitle' => '해당하는 문서 없음',
 'notargettext' => '기능을 수행할 대상 문서나 사용자를 지정하지 않았습니다.',
-'nopagetitle' => '해당 문서 없음',
+'nopagetitle' => '해당하는 문서 없음',
 'nopagetext' => '찾는 문서가 존재하지 않습니다.',
 'pager-newer-n' => '{{PLURAL:$1|다음 1개|다음 $1개}}',
 'pager-older-n' => '{{PLURAL:$1|이전 1개|이전 $1개}}',
@@ -2289,7 +2302,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'allpagesnext' => '다음',
 'allpagessubmit' => '보기',
 'allpagesprefix' => '다음으로 시작하는 문서 보기:',
-'allpagesbadtitle' => '문서 제목이 잘못되었거나 다른 사이트로 연결되는 인터위키를 가지고 있습니다.
+'allpagesbadtitle' => '주어진 문서 제목이 잘못되었거나 다른 사이트로 연결되는 인터위키가 있습니다.
 문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.',
 'allpages-bad-ns' => '{{SITENAME}}에서는 "$1" 이름공간을 사용하지 않습니다.',
 'allpages-hide-redirects' => '넘겨주기 숨기기',
@@ -2332,13 +2345,13 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 # Special:ListGroupRights
 'listgrouprights' => '사용자 권한 목록',
-'listgrouprights-summary' => '다음은 이 위키에서 설정된 사용자 권한 그룹의 목록입니다.
-ê°\81ê°\81ì\9d\98 ê¶\8cí\95\9cì\97\90 ë\8c\80í\95´ì\84\9cë\8a\94 [[{{MediaWiki:Listgrouprights-helppage}}|ì\9d´ê³³]]ì\9d\84 참고하세요.',
+'listgrouprights-summary' => '다음은 이 위키에 있는 사용자 권한 그룹의 목록입니다.
+ê°\81ê°\81ì\9d\98 ê¶\8cí\95\9cì\97\90 ë\8c\80í\95´ì\84\9cë\8a\94 [[{{MediaWiki:Listgrouprights-helppage}}|ì\94ê°\80 ì \95ë³´]]를 참고하세요.',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">부여된 권한</span>
 * <span class="listgrouprights-revoked">해제된 권한</span>',
 'listgrouprights-group' => '그룹',
 'listgrouprights-rights' => '권한',
-'listgrouprights-helppage' => 'Help:사용자 권한 그룹',
+'listgrouprights-helppage' => 'Help:사용자 권한',
 'listgrouprights-members' => '(사용자 목록)',
 'listgrouprights-addgroup' => '{{PLURAL:$2|권한}} 부여: $1',
 'listgrouprights-removegroup' => '{{PLURAL:$2|권한}} 회수: $1',
@@ -2510,7 +2523,7 @@ $UNWATCHURL
 'rollbacklinkcount-morethan' => '{{PLURAL:$1|편집}} $1회 이상 되돌리기',
 'rollbackfailed' => '되돌리기 실패',
 'cantrollback' => '편집을 되돌릴 수 없습니다.
-문서를 편집한 사용자가 한명뿐입니다.',
+문서를 편집한 사용자가 한 명뿐입니다.',
 'alreadyrolled' => '[[:$1]]에서 [[User:$2|$2]] ([[User talk:$2|토론]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])의 편집을 되돌릴 수 없습니다.
 누군가가 이미 문서를 고치거나 되돌렸습니다.
 
@@ -2536,7 +2549,7 @@ $UNWATCHURL
 'movedarticleprotection' => '사용자가 문서의 보호 설정을 "[[$2]]"에서 "[[$1]]"으로 옮겼습니다',
 'protect-title' => '"$1" 보호하기',
 'protect-title-notallowed' => '"$1" 문서의 보호 수준 보기',
-'prot_1movedto2' => '[[$1]] ë¬¸ì\84\9c를 [[$2]] ë¬¸ì\84\9cë¡\9c ì\9d´ë\8f\99í\95¨',
+'prot_1movedto2' => '[[$1]] ë¬¸ì\84\9c를 [[$2]] ë¬¸ì\84\9cë¡\9c ì\98®ê¹\80',
 'protect-badnamespace-title' => '보호할 수 없는 이름공간',
 'protect-badnamespace-text' => '이 이름공간에 있는 문서는 보호할 수 없습니다.',
 'protect-norestrictiontypes-text' => '이 문서는 제한 유형을 사용할 수 없음으로 보호할 수 없습니다.',
@@ -2606,9 +2619,9 @@ $UNWATCHURL
 'undeleteextrahelp' => "문서 역사 전체를 되살리려면 모든 체크박스의 선택을 해제하고 '''{{int:undeletebtn}}'''를 누르세요.
 특정한 버전만 되살리려면 되살리려는 버전을 선택하고 '''{{int:undeletebtn}}'''를 누르세요.",
 'undeleterevisions' => '{{PLURAL:$1|판}} $1개 보관 중',
-'undeletehistory' => '문서를 되살리면 모든 역사를 같이 되살립니다.
-문ì\84\9cê°\80 ì\82­ì \9cë\90\9c ë\92¤ ê°\99ì\9d\80 ì\9d´ë¦\84ì\9d\98 ë¬¸ì\84\9cê°\80 ë§\8cë\93¤ì\96´ì¡\8cë\8b¤ë©´, ë\90\98ì\82´ë\90\98ë\8a\94 ì\97­ì\82¬ë\8a\94 ì§\80ê¸\88 ì\97­ì\82¬ì\9d\98 ì\9d´ì \84 부분에 나타날 것입니다.',
-'undeleterevdel' => 'ë\90\98ì\82´ë¦¬려는 문서의 최신판이 삭제되어 있는 경우 문서를 되살릴 수 없습니다.
+'undeletehistory' => '문서를 되살리면 모든 역사가 같이 복구됩니다.
+문ì\84\9cê°\80 ì\82­ì \9cë\90\9c ë\92¤ ê°\99ì\9d\80 ì\9d´ë¦\84ì\9d\98 ë¬¸ì\84\9cê°\80 ë§\8cë\93¤ì\96´ì¡\8cë\8b¤ë©´, ë³µêµ¬ë\90\98ë\8a\94 ì\97­ì\82¬ë\8a\94 ì§\80ê¸\88 ì\97­ì\82¬ì\9d\98 ê³¼ê±° 부분에 나타날 것입니다.',
+'undeleterevdel' => '복구í\95\98려는 문서의 최신판이 삭제되어 있는 경우 문서를 되살릴 수 없습니다.
 이러한 경우 삭제된 최신판 문서의 확인 상자를 선택 해제하거나 숨김을 해제해야 합니다.',
 'undeletehistorynoadmin' => '이 문서는 삭제되었습니다.
 삭제된 이유와 삭제되기 전에 이 문서를 편집한 사용자가 아래에 나와 있습니다.
@@ -2813,7 +2826,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'ipb_expiry_invalid' => '차단 기간이 잘못되었습니다.',
 'ipb_expiry_temp' => '사용자 이름을 숨기는 차단은 반드시 무기한이어야 합니다.',
 'ipb_hide_invalid' => '해당 계정은 막을 수 없습니다. 기여량이 너무 많습니다.',
-'ipb_already_blocked' => '"$1" ì\82¬ì\9a©ì\9e\90ë\8a\94 ì\9d´ë¯¸ ì°¨ë\8b¨ë\90¨',
+'ipb_already_blocked' => '"$1" ì\82¬ì\9a©ì\9e\90ë\8a\94 ì\9d´ë¯¸ ì°¨ë\8b¨ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤',
 'ipb-needreblock' => '$1 사용자는 이미 차단되었습니다. 차단 설정을 바꾸시겠습니까?',
 'ipb-otherblocks-header' => '다른 {{PLURAL:$1|차단}} 기록',
 'unblock-hideuser' => '이 사용자 이름이 숨겨져 있기 때문에 이 사용자를 차단 해제할 수 없습니다.',
@@ -2892,32 +2905,32 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 
 이 경우에는 문서를 직접 이동하거나 두 문서를 합쳐야 합니다.",
 'movearticle' => '문서 이동하기',
-'moveuserpage-warning' => "'''경고:''' ì\82¬ì\9a©ì\9e\90 ë¬¸ì\84\9c를 ì\98®ê¸°ë ¤ í\95\98ê³  ì\9e\88ì\8aµë\8b\88ë\8b¤. ì\82¬ì\9a©ì\9e\90 ë¬¸ì\84\9cë§\8c ì\9d´ë\8f\99ë\90\98ë©° ì\82¬ì\9a©ì\9e\90 ì\9d´ë¦\84ì\9d´ ë°\94ë\80\8cì§\80 '''ì\95\8aë\8a\94ë\8b¤'''ë\8a\94 ì \90ì\9d\84 ì°¸ê³ í\95´ì£¼ì\8b\9c기 ë°\94ë\9e\8dë\8b\88ë\8b¤.",
+'moveuserpage-warning' => "'''경고:''' ì\82¬ì\9a©ì\9e\90 ë¬¸ì\84\9c를 ì\98®ê¸°ë ¤ í\95\98ê³  ì\9e\88ì\8aµë\8b\88ë\8b¤. ì\82¬ì\9a©ì\9e\90 ë¬¸ì\84\9cë§\8c ì\9d´ë\8f\99ë\90\98ë©° ì\82¬ì\9a©ì\9e\90 ì\9d´ë¦\84ì\9d´ ë°\94ë\80\8cì§\80 '''ì\95\8aë\8a\94ë\8b¤'''ë\8a\94 ì \90ì\9d\84 ì°¸ê³ í\95\98ì\84¸ì\9a\94.",
 'movenologin' => '로그인하지 않음',
 'movenologintext' => '문서를 이동하려면 [[Special:UserLogin|로그인]]해야 합니다.',
-'movenotallowed' => '문ì\84\9c를 ì\9d´ë\8f\99í\95  권한이 없습니다.',
-'movenotallowedfile' => 'í\8c\8cì\9d¼ì\9d\84 ì\9d´ë\8f\99í\95  권한이 없습니다.',
-'cant-move-user-page' => 'ì\82¬ì\9a©ì\9e\90 ë¬¸ì\84\9c를 ì\9d´ë\8f\99í\95  권한이 없습니다(하위 문서는 예외).',
-'cant-move-to-user-page' => '문ì\84\9c를 ì\82¬ì\9a©ì\9e\90 ë¬¸ì\84\9cë¡\9c ì\9d´ë\8f\99í\95  권한이 없습니다(하위 문서는 예외).',
+'movenotallowed' => '문ì\84\9c를 ì\98®ê¸¸ 권한이 없습니다.',
+'movenotallowedfile' => 'í\8c\8cì\9d¼ì\9d\84 ì\98®ê¸¸ 권한이 없습니다.',
+'cant-move-user-page' => 'ì\82¬ì\9a©ì\9e\90 ë¬¸ì\84\9c를 ì\98®ê¸¸ 권한이 없습니다(하위 문서는 예외).',
+'cant-move-to-user-page' => '문ì\84\9c를 ì\82¬ì\9a©ì\9e\90 ë¬¸ì\84\9cë¡\9c ì\98®ê¸¸ 권한이 없습니다(하위 문서는 예외).',
 'newtitle' => '새 문서 이름',
 'move-watch' => '문서 주시하기',
 'movepagebtn' => '이동',
-'pagemovedsub' => '문서 이동함',
-'movepage-moved' => '\'\'\'"$1" ë¬¸ì\84\9c를 "$2" ë¬¸ì\84\9cë¡\9c ì\9d´ë\8f\99í\96\88습니다.\'\'\'',
+'pagemovedsub' => '옮기기 성공',
+'movepage-moved' => '\'\'\'"$1" ë¬¸ì\84\9c를 "$2" ë¬¸ì\84\9cë¡\9c ì\98®ê²¼습니다.\'\'\'',
 'movepage-moved-redirect' => '넘겨주기 문서를 만들었습니다.',
 'movepage-moved-noredirect' => '넘겨주기 문서를 남기지 않았습니다.',
 'articleexists' => '문서가 이미 존재하거나 이름이 올바르지 않습니다.
\8b¤ë¥¸ ì \9c목ì\9c¼ë¡\9c ì\8b\9cë\8f\84í\95´ì£¼세요.',
-'cantmove-titleprotected' => 'ì\83\88ë¡\9cì\9a´ ì \9c목ì\9c¼ë¡\9c ë¬¸ì\84\9c를 ë§\8cë\93\9cë\8a\94 ê²\83ì\9d´ ê¸\88ì§\80ë\90\98ì\96´ ì\9e\88ì\96´ ë¬¸ì\84\9c를 ì\9d´ë\8f\99í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤.',
\8b¤ë¥¸ ì\9d´ë¦\84ì\9d\84 ì\84 í\83\9dí\95\98세요.',
+'cantmove-titleprotected' => 'ì\83\88ë¡\9cì\9a´ ì \9c목ì\9c¼ë¡\9c ë¬¸ì\84\9c를 ë§\8cë\93\9cë\8a\94 ê²\83ì\9d´ ê¸\88ì§\80ë\90\98ì\96´ ì\9e\88ì\96´ ë¬¸ì\84\9c를 ì\98®ê¸¸ ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤',
 'talkexists' => "'''문서는 이동되었습니다. 하지만 딸린 토론 문서의 새 이름으로 된 문서가 이미 있기 때문에 토론 문서는 옮기지 못했습니다. 직접 문서를 합쳐 주세요.'''",
 'movedto' => '새 이름',
 'movetalk' => '딸린 토론도 함께 이동합니다.',
 'move-subpages' => '하위 문서도 함께 ($1개 이하) 이동합니다.',
 'move-talk-subpages' => '토론 문서의 하위 문서도 ($1개까지) 함께 이동합니다.',
-'movepage-page-exists' => '이동할 수 없습니다. "$1" 문서가 이미 존재합니다.',
-'movepage-page-moved' => '"$1" ë¬¸ì\84\9c를 "$2" ë¬¸ì\84\9cë¡\9c ì\9d´ë\8f\99í\96\88습니다.',
-'movepage-page-unmoved' => '"$1" 문서를 "$2" 문서로 이동할 수 없습니다.',
-'movepage-max-pages' => '{{PLURAL:$1|문ì\84\9c}}를 ìµ\9cë\8c\80 $1ê°\9c ì\9d´ë\8f\99í\96\88ì\8aµë\8b\88ë\8b¤. ë\82\98머ì§\80 ë¬¸ì\84\9cë\8a\94 ì\9e\90ë\8f\99 ì\9d´ë\8f\99í\95\98지 않습니다.',
+'movepage-page-exists' => '$1 문서가 이미 존재하므로 자동으로 덮어쓸 수 없습니다.',
+'movepage-page-moved' => '"$1" ë¬¸ì\84\9c를 "$2" ë¬¸ì\84\9cë¡\9c ì\98®ê²¼습니다.',
+'movepage-page-unmoved' => '$1 문서를 $2 문서로 옮길 수 없습니다.',
+'movepage-max-pages' => '{{PLURAL:$1|문ì\84\9c}}를 ìµ\9cë\8c\80 $1ê°\9c ì\98®ê²¼ì\9c¼ë©° ë\82\98머ì§\80 ë¬¸ì\84\9cë\8a\94 ì\9e\90ë\8f\99ì\9c¼ë¡\9c ì\98®ê¸°지 않습니다.',
 'movelogpage' => '이동 기록',
 'movelogpagetext' => '아래는 이동한 문서의 목록입니다.',
 'movesubpage' => '{{PLURAL:$1|하위 문서}}',
@@ -2932,11 +2945,11 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'delete_and_move_confirm' => '네. 문서를 삭제합니다',
 'delete_and_move_reason' => '"[[$1]]"에서 문서를 이동하기 위해 삭제함',
 'selfmove' => '이동하려는 제목이 원래 제목과 같습니다.
-이동할 수 없습니다.',
+같은 제목으로는 옮길 수 없습니다.',
 'immobile-source-namespace' => '"$1" 이름공간에 속한 문서는 이동시킬 수 없습니다.',
 'immobile-target-namespace' => '"$1" 이름공간에 속한 문서는 이동시킬 수 없습니다.',
-'immobile-target-namespace-iw' => 'ì\9d¸í\84°ì\9c\84í\82¤ ë§\81í\81¬ë¥¼ ë\84\98ì\96´ ë¬¸ì\84\9c를 ì\9d´ë\8f\99í\95  수 없습니다.',
-'immobile-source-page' => 'ì\9d´ ë¬¸ì\84\9cë\8a\94 ì\9d´ë\8f\99í\95  수 없습니다.',
+'immobile-target-namespace-iw' => 'ì\9d¸í\84°ì\9c\84í\82¤ ë§\81í\81¬ë¥¼ ë\84\98ì\96´ ë¬¸ì\84\9c를 ì\98®ê¸¸ 수 없습니다.',
+'immobile-source-page' => 'ì\9d´ ë¬¸ì\84\9cë\8a\94 ì\98®ê¸¸ 수 없습니다.',
 'immobile-target-page' => '새 이름으로 옮길 수 없습니다.',
 'bad-target-model' => '원하는 대상은 다른 내용 모델을 사용합니다. $1에서 $2로 변환할 수 없습니다.',
 'imagenocrossnamespace' => '파일을 파일이 아닌 이름공간으로 옮길 수 없습니다.',
@@ -3193,7 +3206,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 바깥 사이트로 연결하는 링크 중에 블랙리스트에 포함된 사이트가 있을 것입니다.',
 'spamprotectionmatch' => '문제가 되는 부분은 다음과 같습니다: $1',
 'spambot_username' => 'MediaWiki 스팸 제거',
-'spam_reverting' => '$1 포함하지 않는 최신 버전으로 되돌림',
+'spam_reverting' => '$1(을)를 포함하지 않는 최신 버전으로 되돌림',
 'spam_blanking' => '모든 버전에 $1 링크를 포함하고 있어 차단함',
 'spam_deleting' => '모든 버전에 $1 링크를 포함하고 있어 삭제함',
 
@@ -3339,8 +3352,6 @@ $1',
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => '간체',
@@ -3773,7 +3784,7 @@ Variants for Chinese language
 
 # Email address confirmation
 'confirmemail' => '이메일 주소 확인',
-'confirmemail_noemail' => '[[Special:Preferences|환경 설정]]에 이메일을 설정하지 않았습니다.',
+'confirmemail_noemail' => '[[Special:Preferences|사용자 환경 설정]]에 올바른 이메일주소를 설정하지 않았습니다.',
 'confirmemail_text' => '{{SITENAME}}에서는 이메일 기능을 사용하기 전에 이메일 인증을 받아야 합니다.
 아래의 버튼을 누르면 인증 메일을 보냅니다.
 메일에는 인증 코드가 들어있는 링크가 있습니다.
@@ -4050,7 +4061,7 @@ $5
 'dberr-header' => '이 위키에 문제가 있습니다.',
 'dberr-problems' => '죄송합니다!
 이 사이트는 기술적인 문제가 있습니다.',
-'dberr-again' => '잠시 후에 다시 시도해주세요.',
+'dberr-again' => '잠시 기다리고 나서 다시 불러오세요.',
 'dberr-info' => '(데이터베이스에 접속할 수 없습니다: $1)',
 'dberr-usegoogle' => '그 동안 구글을 통해 검색할 수도 있습니다.',
 'dberr-outofdate' => '참고로 구글의 내용 개요는 오래된 것일 수도 있습니다.',
@@ -4067,6 +4078,8 @@ $5
 'htmlform-submit' => '저장',
 'htmlform-reset' => '바꾼 것을 되돌리기',
 'htmlform-selectorother-other' => '기타',
+'htmlform-no' => '아니오',
+'htmlform-yes' => '예',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 (본문 전체 찾기)',
index 58716fb..69fa98e 100644 (file)
@@ -98,8 +98,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Бетни, кёзде тургъан тизмелерине къошханланы санын кёргюз',
 'tog-oldsig' => 'Бусагъатдагъы къол салыннган:',
 'tog-fancysig' => 'Энчи вики-тексти къол салыуну (автомат джибериусюз)',
-'tog-externaleditor' => 'Тынгылау бла тыш редакторну хайырландырыу (къуру усталагъа, компьютерни энчи джарашдырылыуу керекди; [//www.mediawiki.org/wiki/Manual:External_editors толуракъ])',
-'tog-externaldiff' => 'Версияланы тенглешдириучу тыш программа хайырландырыу  (къуру усталагъа, компьютерни энчи джарашдырылыуу керекди; [//www.mediawiki.org/wiki/Manual:External_editors толуракъ])',
 'tog-showjumplinks' => '«Бар» болушлукъ джибериуню джандыр',
 'tog-uselivepreview' => 'Терк ал къарауну хайырландыр (JavaScript, экспериментал халда)',
 'tog-forceeditsummary' => 'Тюрлендириуню ачыкълау тизгини бош къалса, билдир',
@@ -113,6 +111,7 @@ $messages = array(
 'tog-diffonly' => 'Версия тенглешдириуню тюбю бла бетни ичиндегисин кёргюзме',
 'tog-showhiddencats' => 'Джашыртын категорияланы кёргюз',
 'tog-norollbackdiff' => 'Къайтарыудан сора версияланы башхалыкъларын кёргюзме',
+'tog-useeditwarning' => 'Тюрлендириулени сакълатмай редакторлау бетден кетген сагъатымда билдир',
 
 'underline-always' => 'Хаманда',
 'underline-never' => 'Бирзаманда да',
@@ -806,6 +805,8 @@ $2',
 'content-failed-to-parse' => '$2 контент $1 типге келишмейди: $3',
 'invalid-content-data' => 'Джаламагъан билгиле',
 'content-not-allowed-here' => '[[$2]] бетни ичинде "$1" контент джарамайды',
+'editwarning-warning' => 'Башха бетге кёчсегиз, этген тюрлениулеригиз тас болургъа боллукъдула.
+Системада регистрацияны ётген эсегиз, бу билдириуню джарашдырыуларыгъызны «Тюрлендириу» деген бёлюмюнде джукълатыргъа боллукъсуз.',
 
 # Content models
 'content-model-wikitext' => 'вики-текст',
@@ -1089,15 +1090,6 @@ $1",
 'search-external' => 'Тыш излеу',
 'searchdisabled' => '{{SITENAME}} сайтда излеу талай заманнга тохтатылгъанды. Бусагъатда Google бла хайырланыб {{SITENAME}} ичинде излеу этерге боллукъсуз. Излеу сайтлада индекслери бир кесек эски болургъа боллугъун унутмагъыз.',
 
-# Quickbar
-'qbsettings' => 'Джюрютюуню панели',
-'qbsettings-none' => 'Кёргюзтме',
-'qbsettings-fixedleft' => 'Солу къатды',
-'qbsettings-fixedright' => 'Онгу къатды',
-'qbsettings-floatingleft' => 'Солгъа джюзеди',
-'qbsettings-floatingright' => 'Оннга джюзеди',
-'qbsettings-directionality' => 'Тилигизни джазмасыны онг/сол таба джазылгъанына кёре бегитилибди',
-
 # Preferences page
 'preferences' => 'Джарашдырыула',
 'mypreferences' => 'Джарашдырыула',
@@ -1609,7 +1601,6 @@ CGI тамалында ишлерге эмда <code>img_auth</code> бла иш
 'http-read-error' => 'HTTP окъууну халаты.',
 'http-timed-out' => 'HTTP-сорууну сакълау заман ётдю.',
 'http-curl-error' => 'Бу URL-гъа сорууну халаты: $1',
-'http-host-unreachable' => 'URL-ге джетелмеди',
 'http-bad-status' => 'HTTP-соруу ишлеген заманында проблема чыкъгъанды: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2705,13 +2696,8 @@ MediaWiki локализациясына юлюш къошаргъа излей
 'pageinfo-protect-cascading-yes' => 'Хоу',
 
 # Skin names
-'skinname-standard' => 'Стандарт',
-'skinname-nostalgia' => 'Ностальгия',
 'skinname-cologneblue' => 'Кёльн такъылыкъ',
 'skinname-monobook' => 'Моно-китаб',
-'skinname-myskin' => 'Меники',
-'skinname-chick' => 'Шик',
-'skinname-simple' => 'Бош',
 'skinname-modern' => 'Бусагъатдагъы',
 'skinname-vector' => 'Вектор',
 
index 6aec43a..45aa8d8 100644 (file)
@@ -240,8 +240,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Zeich de Aanzahl Metmaacher, die op die Sigg am oppasse sin',
 'tog-oldsig' => 'Esu&nbsp;süht&nbsp;Ding „Ongerschreff“&nbsp;us:',
 'tog-fancysig' => 'Donn de „Ungerschreff“ als Wiki-Tex behandelle (ohne enne automattesche Lengk)',
-'tog-externaleditor' => 'Nemm jedes Mol en extern Editor-Projramm (Doför bruchs de extra Enstellunge op Dingem Kompjutor. Dat es jet för Fachlück. Doh kanns De [//www.mediawiki.org/wiki/Manual:External_editors mieh drövver lässe])',
-'tog-externaldiff' => 'Nemm jedes Mol en extern Diff-Projramm (Doför bruchs de extra Enstellunge op Dingem Kompjutor. Dat es jet för Fachlück. Doh kanns De [//www.mediawiki.org/wiki/Manual:External_editors mieh drövver lässe])',
 'tog-showjumplinks' => '„Jangk-noh“-Links usjevve, die bei em „Zojang ohne Barrikad“ helfe dun',
 'tog-uselivepreview' => 'Dun de „Lebendije Vör-Aansich“ zeije (bruch Java_Skripp)',
 'tog-forceeditsummary' => 'Froch noh, wann en däm Feld „Koot zosammejefass, Quell“ beim Avspeichere nix dren steiht',
@@ -256,6 +254,7 @@ $messages = array(
 'tog-showhiddencats' => 'Donn de verstoche Saachjroppe aanzeije',
 'tog-noconvertlink' => 'Don de Tittele nit ümwandelle',
 'tog-norollbackdiff' => 'Donn noh „{{int:Rollback}}“ de Ungerscheide nit aanzeije',
+'tog-useeditwarning' => 'Donn mesch warne, wann esch vun en Sigg fott jonn, ih dat esch all ming Änderunge avjeschpeischert hann.',
 
 'underline-always' => 'jo, ongershtriishe',
 'underline-never' => 'nä',
@@ -490,7 +489,7 @@ $1',
 'editsectionhint' => 'Avschnedd $1 ändere',
 'toc' => 'Enhaldsüvversich',
 'showtoc' => 'enblende',
-'hidetoc' => 'usblende',
+'hidetoc' => 'ußblände',
 'collapsible-collapse' => 'Zohklappe',
 'collapsible-expand' => 'Opklappe',
 'thisisdeleted' => '$1 - aanluure oder widder zeröckholle?',
@@ -641,7 +640,11 @@ Künnt sin, dat De de ein oder ander Sigg immer wigger aanjezeich kriss, wie wan
 'welcomecreation-msg' => 'Dinge Zohjang es enjerescht.
 Wann De wells, künnts De Ding [[Special:Preferences|Enschtällonge aanpaße]].',
 'yourname' => 'Metmaacher_Naame:',
+'userlogin-yourname' => 'Der Metmaacher_Name',
+'userlogin-yourname-ph' => 'Donn Dinge Metmaachername aanjevve',
 'yourpassword' => 'Paßwoot:',
+'userlogin-yourpassword' => 'Et Paßwoot',
+'userlogin-yourpassword-ph' => 'Donn Ding Paßwood enjävve',
 'yourpasswordagain' => 'Noch ens dat Passwood',
 'remembermypassword' => 'Op Duur aanmelde (hält {{PLURAL:$1|för eine Daach|bes op $1 Dääsch|bloß för hück}})',
 'securelogin-stick-https' => 'Noh em Enlogge övver HTTPS verbonge blieve.',
@@ -656,12 +659,15 @@ Wann De wells, künnts De Ding [[Special:Preferences|Enschtällonge aanpaße]].'
 'logout' => 'Ußlogge',
 'userlogout' => 'Ußlogge',
 'notloggedin' => 'Nit enjelogg',
+'userlogin-noaccount' => 'Do häß noch keine Zohjang?',
 'nologin' => "Wann De Dich noch nit aanjemeldt häs, dann dun Dich '''$1'''.",
 'nologinlink' => 'neu aanmelde',
 'createaccount' => 'Aanmelde als ene neue Metmaacher',
 'gotaccount' => "Do bes ald aanjemeldt {{GRAMMAR:en|{{SITENAME}}}}? Dann jangk nohm '''$1'''.",
 'gotaccountlink' => 'Enlogge',
 'userlogin-resetlink' => 'Häß De Ding Daate för et Enlogge verjäße?',
+'helplogin-url' => 'Hölp:Övver et Enlogge',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hölp bem Enlogge]]',
 'createaccountmail' => 'Scheck mer en E-Mail met enem neu ußjedachte Passwood op Zick',
 'createaccountreason' => 'Jrond:',
 'badretype' => 'Ding zwëij ennjejovve Paßßwööter sinn nit ejaal. Do muss De Dich för ein entscheide.',
@@ -786,9 +792,9 @@ Et süht us, wi wann ene kappodde Brauser udder <i lang=\"en\">proxy</i>ẞööv
 'resetpass-no-info' => 'Do mööts ad enjelogg sin, öm tiräk op di Sigg jonn ze dörve',
 'resetpass-submit-loggedin' => 'Passwood tuusche',
 'resetpass-submit-cancel' => 'Nix donn!',
-'resetpass-wrong-oldpass' => 'Dat Zweschepasswood udder dat aktoälle Passwood stemmp nit.
-Müjjelesch, Do häs Ding Passwood ald jetuusch, künnt och sin,
-Do häs Der enzwesche e neuZweschepasswood jehollt.',
+'resetpass-wrong-oldpass' => 'Dat Zweschepaßwood udder dat aktoälle Paßwood stemmp nit.
+Möjjelesch, Do häs Ding PaÃ\9fwood ald jetuusch, künnt och sin,
+Do häs Der enzwesche e neu Zweschepaßwood jehollt.',
 'resetpass-temp-password' => 'Zweschepasswood:',
 
 # Special:PasswordReset
@@ -1095,6 +1101,8 @@ Ene Jrond weße mer nit.',
 'content-failed-to-parse' => 'Et wohr nit müjjelesch, dä Enhalld met däm <i lang="en">MIME-Typ</i> $2 för en Dattei met $1 dren ze verwooschte: $3.',
 'invalid-content-data' => 'Di Daate en dä Sigg sen onjöltesch.',
 'content-not-allowed-here' => 'Ene Enhalld vun dä Zoot „$1“ es op dä Sigg „[[$2]]“ nit zohjelohße.',
+'editwarning-warning' => 'Wann de vun hee dä Sigg fott jeihß, doh künnte all Ding Änderunge aan dä Sigg verschött jonn.
+Do kanns heh di Warnung affschallde, wann de aanjemelldt un enjelogg bes, dann kriß de se nieh mieh wider. Jangk doför en dä Affschnett „{{int:prefs-editing}}“ en Dinge Enshtellunge.',
 
 # Content models
 'content-model-wikitext' => 'Wikitäx',
@@ -1202,7 +1210,7 @@ Als ene Wiki_Köbes kanns De de Ungerscheide ävver aankike wann De wells.",
 'rev-suppressed-diff-view' => "Ein vun de Versione heh es '''verschtoche'''.
 Mieh Einzelheite hät [{{fullurl:{{#special:Log}}/suppress|page={{FULLPAGENAMEE}}}} {{lcfirst:{{int:suppressionlog}}}}].
 Als ene Wiki_Köbes kanns De de Ungerscheide ävver aankike wann De wells.",
-'rev-delundel' => 'zeije/usblende',
+'rev-delundel' => 'zeije/ußblände',
 'rev-showdeleted' => 'zeije',
 'revisiondelete' => 'Versione fottschmieße un widder zeröck holle',
 'revdelete-nooldid-title' => 'Kein Version aanjejovve, oddeer en Stuß-Nommer',
@@ -1227,7 +1235,7 @@ dem Wiki singe Installation dat anders fassjelaht woode es.",
 'revdelete-hide-text' => 'Dä Tex vun dä Version versteiche',
 'revdelete-hide-image' => 'De Enhallt vun däm Beld versteiche',
 'revdelete-hide-name' => 'Der Förjang, un och der Enndraach uss_em Logboch, versteiche',
-'revdelete-hide-comment' => 'Dä Enhald vun „Koot Zosammejefass, Quell“ usblende',
+'revdelete-hide-comment' => 'Dä Enhald vun „Koot Zosammejefass, Quell“ ußblände',
 'revdelete-hide-user' => 'Däm Bearbeider sing IP Adress oder Metmaacher Name versteiche',
 'revdelete-hide-restricted' => 'Dun dat och för de Wiki-Köbesse esu maache wie för jede Andere',
 'revdelete-radio-same' => '(lohß wi_t eß)',
@@ -1360,8 +1368,8 @@ Mieh doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAG
 'searcheverything-enable' => 'En alle Appachtemangs söhke',
 'searchrelated' => 'ähnlesch',
 'searchall' => 'all',
-'showingresults' => 'Unge {{PLURAL:$1|weed <strong>eine</strong>|wääde bes <strong>$1</strong>|weed <strong>keine</strong>}} vun de jefunge Endräch jezeich, vun de Nummer <strong>$2</strong> av.',
-'showingresultsnum' => 'Unge {{PLURAL:$3|es ein|sin <strong>$3</strong>|sin <strong>kein</strong>}} vun de jefunge Endräch opjeliss, vun de Nummer <strong>$2</strong> av.',
+'showingresults' => 'Onge {{PLURAL:$1|weed <strong>eine</strong>|wääde bes <strong>$1</strong>|weed <strong>keine</strong>}} vun de jefonge Endrähsch jezeisch, vun de Nommer <strong>$2</strong> av.',
+'showingresultsnum' => 'Onge {{PLURAL:$3|es ein|sin <strong>$3</strong>|sin <strong>kein</strong>}} vun de jefonge Endrähsch opjeleß, vun de Nommer <strong>$2</strong> av.',
 'showingresultsheader' => "Jefonge un aanjezeisch: {{PLURAL:$5|'''$1''' vun '''$3'''|'''$1''' beß '''$2''' vun '''$3'''|nix}} för '''$4'''",
 'nonefound' => '<strong>Opjepass:</strong>
 Standatmääßesch don mer nur en bestemmpte Appachtemangs söke.
@@ -1684,7 +1692,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'rclinks' => 'Zeich de letzte {{int:pipe-separator}}$1{{int:pipe-separator}} Änderunge us de letzte {{int:pipe-separator}}$2{{int:pipe-separator}} Däch, un dun {{int:pipe-separator}}$3',
 'diff' => 'Ungerscheid',
 'hist' => 'Versione',
-'hide' => 'Usblende:',
+'hide' => 'Ußblände!',
 'show' => 'Zeije:',
 'minoreditletter' => 'M',
 'newpageletter' => 'N',
@@ -1799,7 +1807,7 @@ Wann dat de Orjinaaljrüß es, do moß keij för dat Beld keij extra Vör-Aansic
 Dat süühd uß, wi wann dat en Minni-Beldsche em Breefmarrke-Fommaat
 (\'\'<span lang="en">thumbnail</span>\'\') wöhr. Don ens di Dattei
 <strong>$1</strong> prööfe, of de nit e besser opjelööß Beld
-dofun häÃ\9f, un don dat met singe OrjinaaljrüÃ\9f huhlade, wann müjjelesch.
+dofun häÃ\9f, un don dat met singe OrjinaaljrüÃ\9f huhlade, wann mÃjjelesch.
 Söns donn besser ene andere Dateiname ußsöke.',
 'fileexists-forbidden' => 'Et jitt ald en Dattei met däm Name, un mer kann se nit övverschriive.
 Wann de Ding Dattei trozdämm huhlaade wells, da jangk zeröck un lad se
@@ -1995,7 +2003,7 @@ Wann ene Metmaacher ußjesöhk es, kritt mer bloß die Dateie, di dä Metmaacher
 'listfiles_name' => 'Name',
 'listfiles_user' => 'Metmaacher',
 'listfiles_size' => 'Byte',
-'listfiles_description' => 'Wat en dä Datei dren shtish',
+'listfiles_description' => 'Wat en dä Datei dren schtisch',
 'listfiles_count' => 'Versione',
 
 # File description page
@@ -2048,7 +2056,7 @@ Velleisch sullts De dä [$2 Täx övver se doh]  aanpasse.',
 'filerevert-intro' => '<span class="plainlinks">Do bes di Datei \'\'\'[[Media:$1|$1]]\'\'\' op di [$4 Version fum $2 öm $3 Uhr] zeröck aam sätze.</span>',
 'filerevert-comment' => 'Jrond:',
 'filerevert-defaultcomment' => 'Zerök jesaz op di Version fum $1 öm $2 Uhr',
-'filerevert-submit' => 'Zeröcknemme',
+'filerevert-submit' => 'Zeröcknämme',
 'filerevert-success' => '<span class="plainlinks">Di Dattei \'\'\'[[Media:$1|$1]]\'\'\' es jäz op di [$4 Version fum $2 öm $3 Uhr] zerök jesatz.</span>',
 'filerevert-badversion' => 'Mer han kei Version fun dä Datei för dä aanjejovve Zickpunk.',
 
@@ -2104,12 +2112,12 @@ wääde, un luur Der der iehr ander Links aan!',
 'randomredirect-nopages' => 'En däm Appachtemang „$1“ sin ja kein Ömleidunge dren.',
 
 # Statistics
-'statistics' => 'Statistike',
+'statistics' => 'Schtatistike',
 'statistics-header-pages' => 'Zahle övver Sigge',
 'statistics-header-edits' => 'Zahle övver Änderunge',
 'statistics-header-views' => 'Zahle övver afjeroofe Sigge',
-'statistics-header-users' => 'Statistike üvver de Metmaacher',
-'statistics-header-hooks' => 'Ander Statistike',
+'statistics-header-users' => 'Schtatistike övver de Metmaacher',
+'statistics-header-hooks' => 'Ander Schtatistike',
 'statistics-articles' => 'Atikele',
 'statistics-pages' => 'Sigge jesamp',
 'statistics-pages-desc' => '
@@ -2264,7 +2272,7 @@ wadd_Er am Sööke sidt.',
 Dä Logböcher ehre Enhald ka'mer all noh de Aat, de Metmaacher,
 oder de Sigge ehr Name, un esu, einzel zoteet aanluure.
 Bei de Name moß mer op Jruß- un Kleinschreff aachjävve.",
-'logempty' => '<i>Mer han kein zopass Endräch en däm Logboch.</i>',
+'logempty' => 'Mer han kein zopaß Endrähsch en däm Logbooch.',
 'log-title-wildcard' => 'Sök noh Titelle, di aanfange met …',
 'showhideselectedlogentries' => 'Ußjesöhk Endrääsch verschteische udder zeije',
 
@@ -2903,7 +2911,7 @@ En dänne Fäll, muss De Der dä Enhald vun dä Klaafsigge selvs vörnemme, un e
 'movepage-moved-redirect' => 'En Ömleidung es aanjelaat woode.',
 'movepage-moved-noredirect' => 'Kein Ömleidung woodt aanjelaat.',
 'articleexists' => "De Sigg met däm Name jitt et ald, oder dä Name ka'mer oder darf mer nit bruche.<br />Do muss Der ene andere Name ussöke.",
-'cantmove-titleprotected' => 'Die Sigg Ã¶mzenänne es esu nit müjjelesch, dänn dä neu Name vun dä Sigg es jäje et Neu-Aanlääje jeschötz.',
+'cantmove-titleprotected' => 'Die Sigg Ã¶mzenänne es esu nit mÃjjelesch, dänn dä neu Name vun dä Sigg es jäje et Neu-Aanlääje jeschötz.',
 'talkexists' => '<strong>Opjepass:</strong> De Sigg selver woodt jetz ömjenannt, ävver dä ehr Klaafsigg kunnte mer nit met ömnenne. Et jitt ald ein met däm neue Name. Bes esu jod un dun die zwei vun Hand zosamme läje!',
 'movedto' => 'ömjenannt en',
 'movetalk' => 'dä ehr Klaafsigg met ömnenne, wat et jeiht',
@@ -3948,13 +3956,13 @@ Do kanns Ding Oppassleß och [[Special:EditWatchlist/raw|en rüh beärbeide]].',
 'watchlistedit-normal-done' => '{{PLURAL:$1|Eine Sigge-Tittel es|<strong>$1</strong> Sigge-Tittele sin|Keine Sigge-Tittel es}} us Dinge Opassliss erus jefloore:',
 'watchlistedit-raw-title' => 'Rüh Oppassliss beärbeide',
 'watchlistedit-raw-legend' => 'Rüh Oppassliss beärbeide',
-'watchlistedit-raw-explain' => "Dat sin de Endräch in Dinge Oppassliss en rüh.
-Öm einzel Titelle loss ze wääde, kanns de de Reije met inne eruß schmieße, ov leddich maache.
-Öm neu Titelle  dobei ze don, schriev neu Reije dobei. Jede Titel moß en en Reih för sijj_allein shtonn.
+'watchlistedit-raw-explain' => "Dat sin de Endrähsch in Dinge Oppaßles en rüh.
+Öm einzel Titelle loßß ze wääde, kanns de de Reije met inne eruß schmieße, ov läddich maache.
+Öm neu Titelle  dobei ze don, schriev neu Reije dobei. Jede Titel moss en en Reih för sijj_allein shtonn.
 Wanns De fädig bes, dann deuß De dä Knopp „{{int:Watchlistedit-raw-submit}}“.
-Natörlech kanns De di Liss och — met Dingem Brauser singe ''<span lang=\"en\">Copy&amp;Paste</span>''-Funkßjohn — komplett kopeere odder ußtuusche.
+Natörlesch kanns De di Les och — met Dingem Brauser singe ''<span lang=\"en\">Copy&amp;Paste</span>''-Funkßjohn — komplett kopeere odder ußtuusche.
 De könnts Ding Oppassliss ävver och [[Special:EditWatchlist|övver e Fomulaa met Kässjer un Hökscher beärbeide]].",
-'watchlistedit-raw-titles' => 'Endräch:',
+'watchlistedit-raw-titles' => 'Endrähsch:',
 'watchlistedit-raw-submit' => 'Oppassliss neu fasshallde',
 'watchlistedit-raw-done' => 'Ding Oppassliss es fassjehallde.',
 'watchlistedit-raw-added' => '{{PLURAL:$1|Eine Sigge-Tittel wood|<strong>$1</strong> Sigge-Tittele woodte|Keine Sigge-Tittel}} dobeijedonn:',
@@ -4008,7 +4016,7 @@ Dä Shtanndat-Zoot-Schlößel „$1“ övverschriif dä älldere Zoot-Schlöße
 'version-hook-name' => 'De Schnettstelle ier Name',
 'version-hook-subscribedby' => 'Opjeroofe vun',
 'version-version' => '(Version $1)',
-'version-license' => 'Lizänz',
+'version-license' => 'Lėzänz',
 'version-poweredby-credits' => "Dat Wiki heh löp met '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001–$1 $2.",
 'version-poweredby-others' => 'sönß wää',
 'version-credits-summary' => 'Mer bedanke ons för iehr Beidrähsch zom [[Special:Version|MediaWiki]] bei:',
@@ -4122,6 +4130,8 @@ die De häs han welle. Se künnt jet ällder un nit mieh aktoäll sin.',
 'htmlform-submit' => 'Lohß Jonn!',
 'htmlform-reset' => 'Änderunge retuur nämme',
 'htmlform-selectorother-other' => 'Annder',
+'htmlform-no' => 'Nää',
+'htmlform-yes' => 'Joh',
 
 # SQLite database support
 'sqlite-has-fts' => 'Version $1 (un kann en janze Täxte söhke)',
@@ -4226,7 +4236,7 @@ Wat De doh enjiß, kütt met Dingem Metmaachername un Dingem Brauser op die Sigg
 'api-error-ok-but-empty' => 'Fähler: Mer krijje kein Antwoot vum ẞööver.',
 'api-error-overwrite' => 'En Dattei ze övverschrieve es nit zohjelohße.',
 'api-error-stashfailed' => 'Fähler: Dä ẞööver hät kein Datteije zweschejeschpeischert.',
-'api-error-publishfailed' => 'Ene Fähler es em  server opjetrodde. En zweschejescheischerte Dattei kunnt nit öffentlesch jemaat wääde.',
+'api-error-publishfailed' => 'Ene Fähler es em ẞööver opjetrodde. En zweschejescheischerte Dattei kunnt nit öffentlesch jemaat wääde.',
 'api-error-timeout' => 'Dä ẞööver hät en dä jewennde Zick nit jeantwoot.',
 'api-error-unclassified' => 'Ene Fähler es opjetrodde, der mer nit kenne.',
 'api-error-unknown-code' => 'Nit bekannte Fähler: „$1“',
index 356b857..e7cdfc6 100644 (file)
@@ -61,8 +61,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Көзөмөлдөп жаткан катышуучулардын санын көрсөтүү',
 'tog-oldsig' => 'Кезектеги кол тамга:',
 'tog-fancysig' => 'Кол тамганын өз уики-белгиси (автоматтык шилтемесиз)',
-'tog-externaleditor' => 'Тышкы редакторду жарыяланбасча колдонуу (адистер үчүн гана, компьютериңизде өзгөчө ырастоолор керек. [//www.mediawiki.org/wiki/Manual:External_editors кошумча маалымат.])',
-'tog-externaldiff' => 'Салыштыруу үчүн тышкы программаны жарыяланбасча колдонуу (адистер үчүн гана, компьютериңизде өзгөчө ырастоолор керек. [//www.mediawiki.org/wiki/Manual:External_editors кошумча маалымат.])',
 'tog-showjumplinks' => '«өтүү» деген жардамчы шилтемелерди күйгүзүү',
 'tog-uselivepreview' => 'Тез алдын ала көрсөтүүнү колдонуу (JavaScript талап кылынат) (эксперименталдык)',
 'tog-forceeditsummary' => 'Оңдоо баяндоосунун талаасы бош болгон кезинде мага алдын ала эскертүү',
@@ -721,14 +719,6 @@ IP дарегиңиз бул барактын оңдоо тарыхына жаз
 'powersearch-togglenone' => 'Эчтеке',
 'search-external' => 'Тышкы издөө',
 
-# Quickbar
-'qbsettings' => 'Навигация панели',
-'qbsettings-none' => 'Көрсөтпөө',
-'qbsettings-fixedleft' => 'Жылбаган сол',
-'qbsettings-fixedright' => 'Жылбаган оң',
-'qbsettings-floatingleft' => 'Оома сол',
-'qbsettings-floatingright' => 'Оома оң',
-
 # Preferences page
 'preferences' => 'Ырастоолор',
 'mypreferences' => 'Ырастоолор',
@@ -1099,12 +1089,6 @@ HTML-тегдеринин тууралыгын текшериңиз.',
 'listusers-noresult' => 'Катышуучу табылган жок.',
 'listusers-blocked' => '(блокировкаланды)',
 
-# Special:ActiveUsers
-'activeusers' => 'Активдүү катышуучулардын тизмеси',
-'activeusers-hidebots' => 'Ботторду жашыруу',
-'activeusers-hidesysops' => 'Администраторлорду жашыруу',
-'activeusers-noresult' => 'Катышуучулар табылган жок.',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'Топ',
 'listgrouprights-rights' => 'Укуктар',
index 71f6e9f..a0825ec 100644 (file)
@@ -211,8 +211,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Àmostrar el kadhar de usadores que están akavidando las hojas',
 'tog-oldsig' => 'La firma presente',
 'tog-fancysig' => 'Tratar la firma como un vikiteksto (sin un atamiento otomatiko)',
-'tog-externaleditor' => 'Yir usando un ēdditor esterno (es sólo para usadores adelantados; tiene menester de ayares especiales en vuestro contador [//www.mediawiki.org/wiki/Manual:External_editors Para saver más.])',
-'tog-externaldiff' => 'Yir usando un comparador (diff) esterno (sólo es para usadores adelantados; tiene menester de ayares especiales en vuestro contador [//www.mediawiki.org/wiki/Manual:External_editors Para saver más.])',
 'tog-showjumplinks' => 'Aktivar los atamientos de ayudo "{{int:jumpto}}"',
 'tog-uselivepreview' => 'Usar el "previsteo bivo" (JavaScript es menester) (eksperimental)',
 'tog-forceeditsummary' => 'Avizarme cuando dexo el somaryo vazío',
index e84ecab..ba467b5 100644 (file)
@@ -211,8 +211,6 @@ $messages = array(
 'tog-shownumberswatching' => "D'Zuel vun de Benotzer déi dës Säit iwwerwaache weisen",
 'tog-oldsig' => 'Aktuell Ënnerschrëft:',
 'tog-fancysig' => 'Ënnerschrëft als Wiki-Text behandelen (Ouni automatesche Link)',
-'tog-externaleditor' => 'Externen Editeur als Standard benotzen (Nëmme fir Experten, et musse speziell Astellungen op ärem Computer gemaach ginn. [//www.mediawiki.org/wiki/Manual:External_editors Méi Informatiounen.])',
-'tog-externaldiff' => 'En Externen Diff-Programm als Standard benotzen (nëmme fir Experten, et musse speziell Astellungen op ärem Computer gemaach ginn. [//www.mediawiki.org/wiki/Manual:External_editors Méi Informatiounen])',
 'tog-showjumplinks' => 'Aktivéiere vun de "Sprang op"-Linken',
 'tog-uselivepreview' => 'Live-Preview benotzen (JavaScript) (experimentell)',
 'tog-forceeditsummary' => 'Warnen, wa beim Späicheren de Resumé feelt',
@@ -227,6 +225,7 @@ $messages = array(
 'tog-showhiddencats' => 'Verstoppt Kategorië weisen',
 'tog-noconvertlink' => 'Ëmwandlung vum Titel desaktivéieren',
 'tog-norollbackdiff' => 'Ënnerscheed nom Zrécksetzen ënnerdrécken',
+'tog-useeditwarning' => "Mech warne wann ech d'Ännerung vun enger Säit verloosen, ouni Ännerunge gespäichert ze hunn",
 
 'underline-always' => 'Ëmmer',
 'underline-never' => 'Ni',
@@ -497,7 +496,7 @@ Et kann awer och sinn datt et e Bug a(n) der Software op {{SITENAME}} gëtt.',
 'nosuchspecialpage' => 'Spezialsäit gëtt et net',
 'nospecialpagetext' => '<strong>Dir hutt eng Spezialsäit ofgefrot déi et net gëtt.</strong>
 
-All Spezialsäiten déi et gëtt, sinn op der [[Special:SpecialPages|Lëscht vun de Spezialsäiten]] ze fannen.',
+All Spezialsäiten déi et gëtt, sinn op der [[Special:SpecialPages|{{int:specialpages}}]] ze fannen.',
 
 # General errors
 'error' => 'Feeler',
@@ -598,9 +597,15 @@ Opgepasst: Op verschiddene Säite kann et nach esou aus gesinn, wéi wann Dir na
 'welcomecreation-msg' => "Äre Benotzerkont gouf ugeluecht.
 Vergiesst net fir Är [[Special:Preferences|{{SITENAME}} Astellungen]] z'änneren",
 'yourname' => 'Benotzernumm:',
+'userlogin-yourname' => 'Benotzernumm',
+'userlogin-yourname-ph' => 'Gitt Äre Benotzernumm an',
 'yourpassword' => 'Passwuert:',
+'userlogin-yourpassword' => 'Passwuert',
+'userlogin-yourpassword-ph' => 'Gitt Ärt Passwuert an',
 'yourpasswordagain' => 'Passwuert nach eemol antippen:',
 'remembermypassword' => 'Meng Umeldung op dësem Computer (fir maximal $1 {{PLURAL:$1|Dag|Deeg}}) verhalen',
+'userlogin-remembermypassword' => 'Sech u mech erënneren',
+'userlogin-signwithsecure' => 'Mat engem séchere Server umellen',
 'securelogin-stick-https' => 'Nom Umelle mat HTTPS verbonn bleiwen',
 'yourdomainname' => 'Ären Domain',
 'password-change-forbidden' => 'Dir däerft op dëser Wiki Passwierder net änneren.',
@@ -613,12 +618,16 @@ Vergiesst net fir Är [[Special:Preferences|{{SITENAME}} Astellungen]] z'ännere
 'logout' => 'Ofmellen',
 'userlogout' => 'Ausloggen',
 'notloggedin' => 'Net ageloggt',
+'userlogin-noaccount' => 'Hutt Dir kee Benotzerkont?',
+'userlogin-joinproject' => 'Maacht mat bäi {{SITENAME}}',
 'nologin' => "Hutt Dir kee Benotzerkont? '''$1'''.",
 'nologinlink' => 'Neie Benotzerkont maachen',
 'createaccount' => 'Neie Kont opmaachen',
 'gotaccount' => "Dir hutt schonn e Benotzerkont? '''$1'''.",
 'gotaccountlink' => 'Umellen',
 'userlogin-resetlink' => "Hutt Dir d'Detailer vun Ärem Login vergiess?",
+'helplogin-url' => 'Help:Aloggen',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hëllef beim aloggen]]',
 'createaccountmail' => 'En temporäert Passwuert benotzen an et per E-Mail un déi E-Mailadress schécken déi hei drënner steet',
 'createaccountreason' => 'Grond:',
 'badretype' => 'Är Passwierder stëmmen net iwwerdeneen.',
@@ -721,6 +730,7 @@ Vläicht hutt Dir Äert Passwuert scho geännert oder en neit temporäert Passwu
 'passwordreset-text' => 'Fëllt dëse Formulaire aus fir Äert Passwuert zréckzesetzen.',
 'passwordreset-legend' => 'Passwuert zrécksetzen',
 'passwordreset-disabled' => "D'Zerécksetze vum Passwuert ass op dëser Wiki ausgeschalt.",
+'passwordreset-emaildisabled' => "D'E-Mail-Fonctioune goufen op dëser Wiki ausgeschalt.",
 'passwordreset-pretext' => '{{PLURAL:$1||Gitt eng vun dësen Donnéeën an}}',
 'passwordreset-username' => 'Benotzernumm:',
 'passwordreset-domain' => 'Domaine:',
@@ -953,6 +963,8 @@ Si gouf anscheinend geläscht.",
 'defaultmessagetext' => 'Standardtext',
 'invalid-content-data' => 'Donnéeë vum Inhalt sinn net valabel',
 'content-not-allowed-here' => '"$1"-Inhalt ass op der Säit [[$2]] net erlaabt',
+'editwarning-warning' => 'Wann Dir dës Säit verloosst kann dat dozou féieren datt Dir all Ännerungen, déi Dir gemaach hutt, verléiert.
+Wann Dir ageloggt sidd, kënnt Dir dës Warnung an der Sektioun "{{int:prefs-editing}}" vun Ären Astellungen ausschalten.',
 
 # Content models
 'content-model-wikitext' => 'Wikitext',
@@ -1232,15 +1244,7 @@ Detailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'powersearch-togglenone' => 'Keen',
 'search-external' => 'Extern sichen',
 'searchdisabled' => "D'Sichfunktioun op {{SITENAME}} ass ausgeschalt. Dir kënnt iwwerdeems mat Hëllef vu Google sichen. Bedenkt awer, datt deenen hire  Sichindex fir {{SITENAME}} eventuell net dem aktuellste Stand entsprecht.",
-
-# Quickbar
-'qbsettings' => 'Geschirläischt',
-'qbsettings-none' => 'Keen',
-'qbsettings-fixedleft' => 'Lénks, fest',
-'qbsettings-fixedright' => 'Riets, fest',
-'qbsettings-floatingleft' => 'schwiewt lenks',
-'qbsettings-floatingright' => 'Schwiewt riets',
-'qbsettings-directionality' => 'Fix, ofhängeg vun der Schreiwrichtung vun Ärer Sprooch',
+'search-error' => 'Beim Sichen ass e Feeler geschitt: $1',
 
 # Preferences page
 'preferences' => 'Astellungen',
@@ -1931,6 +1935,7 @@ Eng Säite gëtt als Homonymie-Säit behandelt, wa si eng Schabloun benotzt déi
 
 'pageswithprop' => 'Säite mat enger Säiten-Eegeschaft',
 'pageswithprop-legend' => 'Säite mat enger Säiten-Eegeschaft',
+'pageswithprop-text' => 'Op dëser Säit sti Säiten déi eng speziell Säiteneegeschaft benotzen.',
 'pageswithprop-prop' => 'Numm vun der Eegeschaft:',
 'pageswithprop-submit' => 'Lass',
 
@@ -2817,6 +2822,7 @@ Späichert en op Ärem Computer of a luet en hei nees erop.',
 'javascripttest-pagetext-unknownframework' => 'Onbekannten Test-Framework "$1".',
 'javascripttest-pagetext-frameworks' => 'Sicht w.e.g. eng vun dësen Test-Strukturen eraus: $1',
 'javascripttest-qunit-intro' => "Kuckt d'[$1 Dokumentatioun vun den Tester] op mediawiki.org",
+'javascripttest-qunit-heading' => 'JavaScript-QUnit Testserie op MediaWiki',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Är Benotzersäit',
@@ -3248,6 +3254,7 @@ Déi aner sinn am Standard verstoppt.
 'exif-giffilecomment' => 'Bemierkung zum GIF-Fichier',
 'exif-intellectualgenre' => 'Typ vum Element',
 'exif-subjectnewscode' => 'Code vum Sujet',
+'exif-event' => 'Duergestallten Evenement',
 'exif-organisationinimage' => 'Organisatioun um Bild',
 'exif-personinimage' => 'Persoun um Bild',
 'exif-originalimageheight' => 'Héicht vum Bild virum Ofschneiden',
@@ -3745,6 +3752,8 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 'htmlform-submit' => 'Späicheren',
 'htmlform-reset' => 'Ännerungen zrécksetzen',
 'htmlform-selectorother-other' => 'Anerer',
+'htmlform-no' => 'Neen',
+'htmlform-yes' => 'Jo',
 
 # SQLite database support
 'sqlite-has-fts' => "$1 ënnerstëtzt d'Volltextsich",
@@ -3778,6 +3787,8 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 'logentry-newusers-create2' => 'De Benotzerkont $3 gouf vum $1 {{GENDER:$2|ugeluecht}}',
 'logentry-newusers-byemail' => "De Benotzerkont $3 gouf vum $1 {{GENDER:$2|ugeluecht}} an d'Passwuert gouf per E-Mail geschéckt.",
 'logentry-newusers-autocreate' => 'De Benotzerkont $1 gouf automatesch {{GENDER:$2|ugeluecht}}',
+'logentry-rights-rights' => "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen de Benotzer $3 gehéiert vu(n) $4 op $5 geännert",
+'logentry-rights-rights-legacy' => "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen de Benotzer $3 gehéiert geännert",
 'logentry-rights-autopromote' => "De Benotzer $1 {{GENDER:$2|krut}} d'Benotzerrechter automatesch vu(n) $4 op $5 geännert",
 'rightsnone' => '(keen)',
 
index d7d50bb..bbee13e 100644 (file)
@@ -187,8 +187,6 @@ $messages = array(
 'tog-shownumberswatching' => "'t Aantal gebroekers tuine die dees pagina volg",
 'tog-oldsig' => 'Bestaonde ongerteikening:',
 'tog-fancysig' => 'Es wikiteks behanjele (zonder autematische verwiezing)',
-'tog-externaleditor' => "Sjtanderd 'ne externe teksbewirker gebroeke (inkel veur experts, speciaal instellinge zien nudig. [//www.mediawiki.org/wiki/Manual:External_editors Mie infermasie])",
-'tog-externaldiff' => "Sjtanderd 'n extern vergeliekingsprogramma gebroeke (inkel veur experts, speciaal instellinge zien nudig [//www.mediawiki.org/wiki/Manual:External_editors Mie infermasie])",
 'tog-showjumplinks' => '"gank nao"-toegankelikheidslinks mäögelik make',
 'tog-uselivepreview' => '"live veurbesjouwing" gebroeke (vereis JavaScript - experimenteel)',
 'tog-forceeditsummary' => "'n Melding gaeve bie 'n laeg samevatting",
@@ -202,6 +200,7 @@ $messages = array(
 'tog-diffonly' => 'Pagina-inhaud zónger verangeringe neet tuine',
 'tog-showhiddencats' => 'Verbórge categorië tuine',
 'tog-norollbackdiff' => 'Wieziginge eweglaote nao trökdrieje',
+'tog-useeditwarning' => "Waorssjoew mich es ich 'n bewerkdje pagina die nag neet is opgeslage wil verlaote",
 
 'underline-always' => 'Altied',
 'underline-never' => 'Noets',
@@ -892,6 +891,8 @@ Ze lik eweggesjaf te zien.',
 'edit-already-exists' => 'De pagina is neet aangemaak.
 Zie besjteit al.',
 'defaultmessagetext' => 'Obligaten teks',
+'editwarning-warning' => "Es se dees pagina verleets verluus se meugelik wieziginge die se haes gemaak.
+Es se bös aangemeld, kins se dees waorsjoewing oetzètten in 't bewerkingstabblaad in dien veurkäöre.",
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Waarschuwing:''' dees pagina gebroek te väöl kosbare parserfuncties.
@@ -1167,15 +1168,6 @@ Doe kans ouch 'n naamruumde es veurvoegsel gebroeke.",
 Zoelang as de servers nog neet sjterk genog zunt kins e zeuke bie Google.
 Mèrk op dat hun indexe van {{SITENAME}} content e bietje gedatierd kint zien.',
 
-# Quickbar
-'qbsettings' => 'Menubalkinsjtèllinge',
-'qbsettings-none' => 'Oetgesjakeld',
-'qbsettings-fixedleft' => 'Links vas',
-'qbsettings-fixedright' => 'Rechts vas',
-'qbsettings-floatingleft' => 'Links zjwevend',
-'qbsettings-floatingright' => 'Rechs zjwevend',
-'qbsettings-directionality' => 'Vas, aafhenkelik vanne sjrifrichting van dien sjpraok',
-
 # Preferences page
 'preferences' => 'Veurkäöre',
 'mypreferences' => 'Mien veurkäöre',
@@ -1715,7 +1707,6 @@ Om beveiligingsrede is img_auth.php oetgesjakeld.",
 'http-read-error' => 'HTTP-laezingsfout.',
 'http-timed-out' => 'HTTP-verzeuktimeout',
 'http-curl-error' => 'Óphaolingsfout URL: $1',
-'http-host-unreachable' => 'Kòs de URL neet bereike',
 'http-bad-status' => "d'r Is e perbleem ópgetraoje bie 't HTTP-verzeuk: $1 $2",
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2028,15 +2019,6 @@ Haet mèndestes e toepleveldomein, wie beveurbeildj "*.org".<br />
 'listusers-noresult' => 'Gein(e) gebroeker(s) gevonje.',
 'listusers-blocked' => '(geblok)',
 
-# Special:ActiveUsers
-'activeusers' => 'Aktief gebroekers',
-'activeusers-intro' => "Dit is 'n lies mit gebroekers die aktief zeen gewaes in de aafgeloupe {{PLURAL:$1|daag|$1 daag}}.",
-'activeusers-count' => '$1 {{PLURAL:$1|bewèrking|bewèrkinger}} inne {{PLURAL:$3|lèsten daag|lès $3 daag}}',
-'activeusers-from' => 'Tuin gebroekers vanaaf:',
-'activeusers-hidebots' => 'Verberg bots',
-'activeusers-hidesysops' => 'Verberg admins',
-'activeusers-noresult' => 'Gein gebroekers gevónje.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechte van gebroekersgróppe',
 'listgrouprights-summary' => 'Op dees pazjena sjtaon de gebroekersgróppe in deze wiki besjreve, mit zien biebehurende rechte.
@@ -2830,8 +2812,6 @@ Meistal wörd dit door 'ne zwarte externe link veroorzaak.",
 'pageinfo-authors' => 'Aantal versjillende sjrievers',
 
 # Skin names
-'skinname-standard' => 'Standaard',
-'skinname-nostalgia' => 'Nostalgie',
 'skinname-cologneblue' => 'Keuls blauw',
 
 # Patrolling
index 6442f4a..2786312 100644 (file)
@@ -10,6 +10,7 @@
  * @author Dario vet
  * @author Dedee
  * @author Gastaz
+ * @author Giromin Cangiaxo
  * @author Malafaya
  * @author Urhixidur
  * @author ZeneizeForesto
@@ -131,7 +132,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Ascondi e modifiche verifichè inte ùrtime modifiche',
 'tog-newpageshidepatrolled' => 'Ascondi e paggine verifiché da-o elenco de paggine ciù reçenti',
 'tog-extendwatchlist' => 'mostrâ tùtte e modifiche a-i òsserve speciali',
-'tog-usenewrc' => 'Usâ e ùrtime modifiche avansê (serve Javascript)',
+'tog-usenewrc' => 'Ammuggia pe paggina e modifiche in urtime modifiche e sotta oservaçion (serve o Javascript)',
 'tog-numberheadings' => 'Nùmeraçion aotomàtica di tìtoli de seçión',
 'tog-showtoolbar' => 'Fâ vedde a barra de strumenti de modìffica (con JavaScript)',
 'tog-editondblclick' => 'Modifica e paggine co-o dópio clic (serve Javascrpt)',
@@ -139,11 +140,21 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Modifica e seçión co-o clic destro in sciô tìtolo (serve Javascipt)',
 'tog-showtoc' => "Fanni védde l'indiçe pe-e pàgine con ciù de 3 seçioìn",
 'tog-rememberpassword' => "Arregorda a mæ paròlla d'ordine (a-o màscimo pe $1 {{PLURAL:$1|day|days}})",
-'tog-watchcreations' => 'Azónzi e pàgine a-i oservæ speciâli',
+'tog-watchcreations' => 'Azonzi e paggine che creo e i file che carrego a-i oservæ speciâli',
+'tog-watchdefault' => 'Azonzi e paggine e i files che modiffico a-i mæ sotta oservaçion',
+'tog-watchmoves' => 'Azonzi e paggine e i file che mescio a-i mæ sotta oservaçion',
+'tog-watchdeletion' => 'Azonzi e paggine e i files che scancello a-i mæ sotta oservaçion',
+'tog-minordefault' => 'Indica de longo comme menô e modiffiche',
 'tog-previewontop' => "Veddi l'anteprimma de d'äto a-o spaçio pe cangiâ",
 'tog-previewonfirst' => "Veddi l'anteprimma a-o primmo cangiamento",
-'tog-enotifwatchlistpages' => "Fammelo savéi via e-mail quande 'na paggina inta mæ lista in osservassion a va cangiaa.",
+'tog-nocache' => 'Disabilita a cache de pagine do navegatô',
+'tog-enotifwatchlistpages' => "Famme savéi via e-mail quande 'na paggina o in file inti mæ osservæ a ven cangiâ.",
 'tog-enotifusertalkpages' => "Màndime un messaggio e-mail se gh'é de-e modìffiche inta pagina de discuscion da mæ pagina d'utente.",
+'tog-enotifminoredits' => 'Inviami una email pe e modifiche menoî ascì de pagine e di file',
+'tog-enotifrevealaddr' => 'Mostra o mæ indirizzo e-mail inti messaggi de notifica',
+'tog-shownumberswatching' => "Mostra o numero di utenti che tegnan d'oeuggio sta pagina",
+'tog-oldsig' => 'Firma attuale:',
+'tog-fancysig' => 'Tratta a firma comme wikitesto (sensa un collegamento aotomatico)',
 'tog-showhiddencats' => 'Fa vedde e categorîe ascose',
 
 'underline-always' => 'Sempre',
@@ -205,15 +216,15 @@ $messages = array(
 'pagecategories' => '{{PLURAL:$1|Categorîa|Categorîe}}',
 'category_header' => 'Pàgine inta categorîa "$1"',
 'subcategories' => 'Sottocategorîe',
-'category-media-header' => 'Archivio inta categorîa "$1"',
-'category-empty' => "''Pe òua sta categorîa a no contegne nisciùnn-a pàgina ò archivio moltimedia.''",
+'category-media-header' => 'Media inta categorîa "$1"',
+'category-empty' => "''Pe òua sta categorîa a no contegne pàgine ò file murtimediæ.''",
 'hidden-categories' => '{{PLURAL:$1|Categoria ascoza|Categorie ascoze}}',
 'hidden-category-category' => 'Categorîe ascôse',
 'category-subcat-count' => "{{PLURAL:$2|Sta categoria a contegne sôlo 'na sottocategoria, chi de segoito.|Sta categoria a contegne {{PLURAL:$1|a sottocategoria indicâ|e $1 sottocategorie indicæ}} di segoito, pe in totale de $2.}}",
 'category-subcat-count-limited' => "'Sta categorîa a contegne {{PLURAL:$1|ûnn-a sottocategorîa, indicaa|$1 sottocategorîe, indicæ}} chì inzû.",
-'category-article-count' => "{{PLURAL:$2|Sta categoria a contegne sôlo inna pagina, chi de segoito.|Sta categoria a contegne {{PLURAL:$1|a pàgina a l'é|e $1 pàgine son}} de segoito, pe in totale de $2.}}",
+'category-article-count' => "{{PLURAL:$2|Questa categoria a contegne solo sta pagina chì.|Questa categoria a contegne {{PLURAL:$1|a pagina indicâ|e $1 pagine indicæ}} chì de sotta , insce 'n totale de $2.}}",
 'category-article-count-limited' => "'Sta categorîa a contegne {{PLURAL:$1|'sta paggina|'ste $1 paggine}}.",
-'category-file-count' => "{{PLURAL:$2|Sta categoria a contegne sôlo in file, chi de segoito.|Sta categoria a contegne {{PLURAL:$1|o file o l'é|e $1 file son}} de segoito, pe in totale de $2.}}",
+'category-file-count' => "{{PLURAL:$2|Sta categoria a contegne sôlo sto file.|{{PLURAL:$1|Sto file o l'é|Sti $1 file son}} inte sta categoria, pe in totale de $2.}}",
 'listingcontinuesabbrev' => 'cont.',
 'noindex-category' => 'Pàgine sénsa indiçe',
 
@@ -223,7 +234,7 @@ $messages = array(
 'cancel' => 'Scancella',
 'moredotdotdot' => 'De ciû...',
 'mypage' => 'A mea pagina',
-'mytalk' => 'Mæ discuscioin',
+'mytalk' => 'Discuscioin',
 'anontalk' => 'Discuscion pe questo indirisso IP',
 'navigation' => 'Navegaçión',
 'and' => '&#32;e',
@@ -240,7 +251,7 @@ $messages = array(
 'vector-action-addsection' => 'Azónzi discusción',
 'vector-action-delete' => 'Scancella',
 'vector-action-move' => 'Mescia',
-'vector-action-protect' => 'Protezzi',
+'vector-action-protect' => 'Protezi',
 'vector-view-create' => 'Crea',
 'vector-view-edit' => 'Càngia',
 'vector-view-history' => 'Fanni védde a Stöia',
@@ -251,7 +262,7 @@ $messages = array(
 'variants' => 'Diferense',
 
 'errorpagetitle' => 'Erô',
-'returnto' => 'Tornâ a $1.',
+'returnto' => 'Torna a $1.',
 'tagline' => 'Da {{SITENAME}}',
 'help' => 'Agiùtto',
 'search' => 'Çerca',
@@ -261,7 +272,7 @@ $messages = array(
 'history' => 'Stöia da pàgina',
 'history_short' => 'Stöia',
 'printableversion' => 'Verscion da stanpâ',
-'permalink' => 'Inganso fisso',
+'permalink' => 'Ingancio fisso',
 'print' => 'Stampa',
 'edit' => 'Càngia',
 'create' => 'Crea',
@@ -269,8 +280,8 @@ $messages = array(
 'create-this-page' => "Crea 'sta paggina",
 'delete' => 'Scancella',
 'deletethispage' => "Scassa 'sta paggina",
-'protect' => 'Proteze',
-'protect_change' => 'cangiâ',
+'protect' => 'Protezi',
+'protect_change' => 'cangia',
 'protectthispage' => "Proteze 'sta paggina.",
 'unprotect' => 'Càngia proteçión',
 'unprotectthispage' => 'Càngia a proteçión de sta paggina',
@@ -286,7 +297,7 @@ $messages = array(
 'projectpage' => 'Veddi a pagina de o progetto',
 'viewtalkpage' => 'Veddi o ciæto',
 'otherlanguages' => 'In âtre lengóe',
-'redirectedfrom' => '(Rediritto da $1)',
+'redirectedfrom' => '(Rendirissou da $1)',
 'redirectpagesub' => 'Paggina de rindirissamento',
 'lastmodifiedat' => "Sta pagina a l'è stæta cangiâ l'urtima votta a e $2 do $1.",
 'viewcount' => "'Sta paggina a l'è stæta vista {{PLURAL:$1|solo 'na vòtta|$1 vòtte}}.",
@@ -299,12 +310,12 @@ $messages = array(
 'aboutsite' => 'Informaçioìn in sciô {{SITENAME}}',
 'aboutpage' => 'Project:Informaçioìn',
 'copyright' => 'O contegnûo o se peu trovâ a $1.',
-'copyrightpage' => "{{ns:project}}:Diritti d'autô",
+'copyrightpage' => "{{ns:project}}:Driti d'autô",
 'currentevents' => 'Atualitæ',
 'currentevents-url' => 'Project:Atualitæ',
-'disclaimers' => 'Avértense',
+'disclaimers' => 'Avertense',
 'disclaimerpage' => 'Project:Avertense generâli',
-'edithelp' => "Agiùtto pe l'ediçion",
+'edithelp' => 'Agiùtto',
 'edithelppage' => 'Help:Modiffica',
 'helppage' => 'Help:Contegnûi',
 'mainpage' => 'Pàgina prinçipâ',
@@ -313,7 +324,7 @@ $messages = array(
 'portal' => 'Pòrtego da comunitæ',
 'portal-url' => 'Project:Pòrtego da comunitæ',
 'privacy' => 'Politica in sci dæti privæ',
-'privacypage' => 'Project:Leze in sci dæti privæ',
+'privacypage' => 'Project:Politica in scî dæti privæ',
 
 'badaccess' => "No ti g'hæ o permisso",
 'badaccess-group0' => "No ti g'hæ o permisso pe fâ quest'assion.",
@@ -323,7 +334,7 @@ $messages = array(
 'retrievedfrom' => 'Estræto da "$1"',
 'youhavenewmessages' => "Ti gh'æ $1 ($2).",
 'newmessageslink' => 'Nêuvi messaggi',
-'newmessagesdifflink' => 'Differensa co-a revixon preçedente',
+'newmessagesdifflink' => 'urtima modiffica',
 'youhavenewmessagesmulti' => "Ti t'æ neuvi messaggi in scia $1",
 'editsection' => 'Càngia',
 'editold' => 'càngia',
@@ -372,7 +383,7 @@ Pe favô ti peu segnalâ quello che l'é sucesso a in [[Special:ListUsers/sysop|
 'badarticleerror' => "L'açion che ti te veu fâ a non l'è permissa in sta pagina.",
 'cannotdelete' => 'Non çe peu scassâ a pagina o o papê. (o peu ese za stæto scassoö da quarchedun ätro).',
 'badtitle' => "O tìtolo o no l'è corretto.",
-'badtitletext' => "O tittolo da paggina çercâa o l'è vêuo, sballiòu o con caratteri no accettæ, oppûre o deriva da 'n errô inti collegamenti tra scîti Wiki diversci o verscioîn in léngue diversce do mæximo scîto.",
+'badtitletext' => "O tittolo da paggina çercâ o l'è vêuo, sballiòu o con caratteri no accettæ, oppû o deriva da 'n errô inti collegamenti inter-lengoa o inter-wiki.",
 'viewsource' => 'Veddi a fonte',
 'protectedpagetext' => "'Sta paggina a l'è stæta protezûa pe impedîghe a modiffica.",
 'viewsourcetext' => "O l'è poscibbile vedde e copiâ o còddice sorgente de 'sta paggina:",
@@ -380,21 +391,21 @@ Pe favô ti peu segnalâ quello che l'é sucesso a in [[Special:ListUsers/sysop|
 # Login and logout pages
 'yourname' => 'Nomme',
 'yourpassword' => 'Pòula segretta:',
-'yourpasswordagain' => 'Scrivi tórna a pòula segrétta:',
-'remembermypassword' => 'Aregòrda a mæ login in sto navegatô (pe in mascìmo de $1 {{PLURAL:$1|giórno|giórni}})',
+'yourpasswordagain' => 'Riscrivi a pòula segrétta:',
+'remembermypassword' => 'Aregòrda a mæ login in sto navegatô (pe in mascimo de $1 {{PLURAL:$1|giórno|giórni}})',
 'yourdomainname' => 'Indirisso do scito:',
 'login' => 'Intra',
 'nav-login-createaccount' => 'Intra / Registrate',
-'loginprompt' => 'Ti devi avéi i cookie abilitæ into teu navigatô pe intrâ in {{SITENAME}}.',
-'userlogin' => 'Intra / Registrate',
+'loginprompt' => "Pe fâ l'accesso inte {{SITENAME}} ti g'hæ da  abilitâ i cookie.",
+'userlogin' => 'Intra / Registrite',
 'logout' => 'Sciorti',
 'userlogout' => 'Sciorti',
-'nologin' => "No ti gh'æ ancon l'aceizo? '''$1'''.",
-'nologinlink' => "Creâ 'n account",
+'nologin' => "No ti gh'æ ancon in acesso? '''$1'''.",
+'nologinlink' => "Creâ 'n' utensa",
 'createaccount' => "Crea 'n nêuvo account",
-'gotaccount' => "Ti ghe l'æ za 'n conto d'aceizo? '''$1'''.",
+'gotaccount' => "Ti ghe l'æ za 'n' utensa? '''$1'''.",
 'gotaccountlink' => 'Intra',
-'userlogin-resetlink' => "T'æ ascordòu i teu dæti de aceizo?",
+'userlogin-resetlink' => "T'æ ascordòu i teu dæti de acesso?",
 'badretype' => "E paròlle d'ordine che t'hæ scrîo son despægie.",
 'userexists' => "O nomme d'ûtente inserîo o l'è zà in ûso.<br />
 Pe piaxei prêuva a scellie 'n âtro.",
@@ -437,33 +448,33 @@ Pe abilitâ l'invîo de messaggi e-mail pe quest'accesso, o se deive seguî l'is
 # Edit page toolbar
 'bold_sample' => 'Grascetto',
 'bold_tip' => 'Grascetto',
-'italic_sample' => 'Testo in corsciva',
+'italic_sample' => 'Testo in corscivo',
 'italic_tip' => 'Corscivo',
-'link_sample' => "Nomme de l'inganço",
-'link_tip' => 'Inganço interno',
-'extlink_sample' => "http://www.example.com Nomme de l'inganço",
+'link_sample' => "Nomme de l'ingancio",
+'link_tip' => 'Ingancio interno',
+'extlink_sample' => "http://www.example.com Nomme de l'ingancio",
 'extlink_tip' => 'Colegaménto esterno (inclûdde o prefisso http:// )',
 'headline_sample' => 'Tìtolo',
 'headline_tip' => 'Tìtolo de 2° livello',
 'nowiki_sample' => 'Inserî chì o testo sensa formattaçion',
 'nowiki_tip' => 'Ignorâ a formattassion wiki',
 'image_sample' => 'Exempio.jpg',
-'image_tip' => 'Inmàgine caregâ',
+'image_tip' => 'Incorpora file',
 'media_sample' => 'Exempio.ogg',
-'media_tip' => 'Colegaménto a file moltimediale',
+'media_tip' => 'Colegaménto a file moltimediâ',
 'sig_tip' => 'Firma con data e ôa',
-'hr_tip' => 'Linnia orissontâ',
+'hr_tip' => 'Linnia orizontâ',
 
 # Edit pages
 'summary' => 'Oggetto:',
 'subject' => 'Argomento (tittolo):',
 'minoredit' => 'Cangiamento minô (m)',
-'watchthis' => 'Azzonze a-i osservæ speçiâli',
+'watchthis' => 'Metti sotta oservaçion',
 'savearticle' => 'Sarva a pàgina',
 'preview' => 'Anteprìmma',
 'showpreview' => "Veddi l'anteprimma",
 'showdiff' => 'Veddi i cangiamenti',
-'anoneditwarning' => "'''Attension:''' No ti t'hæ registròu. O têu indirisso IP o sajà misso inta stöja di cangiamenti da paggina.",
+'anoneditwarning' => "'''Attension:''' No t'ê intròu. Inta stoia di cangiamenti da paggina ghe saiâ misso o têu adresso IP.",
 'summary-preview' => 'Anteprimma oggetto:',
 'blockedtitle' => "L'utente o l'é bloccòu",
 'blockedtext' => "''''Sto nomme d'ûtente ou indirisso IP o l'è stæto bloccòu.'''
@@ -497,14 +508,14 @@ O têu blòcco ID o l'è \$5. Pe piaxei metti 'sto ID in tûtte e domande che ti
 'accmailtitle' => 'Pòula segretta spedïa',
 'accmailtext' => 'A pòula segretta pe-o utente "$1" a l\'è stæta spedïa a o indirisso $2.',
 'newarticle' => '(Nêuvo)',
-'newarticletext' => "Sto colegaménto o corisponde a 'na pàgina che ancon a no l'existe.
+'newarticletext' => "Sto colegaménto o corisponde a 'na pàgina ch'a no l'existe ancon.
 
-Se o se vêu creâ a pàgina òua, o se pêu comensâ a scrive o testo into spàçio vêuo chì sotta.
-(fâ riferimento a-e [[{{MediaWiki:Helppage}}|paggine d'agiûtto]] pe ciû informaçioìn).
+Se se vêu creâ a pàgina òua, se pêu comensâ a scrive into spàçio chì sotta.
+(amia e [[{{MediaWiki:Helppage}}|paggine d'agiûtto]] pe ciû informaçioìn).
 
-Se t'ê intròu inte sto colegaménto pe sbàlio, o basta sciaccâ '''Inderê''' into navegatô.",
+Se t'ê intròu chì pe sballio,  sciacca '''Inderê''' into navegatô.",
 'noarticletext' => "Inte sto momento a pagina çercâ a l'è vêua. O l'è poscibbile [[Special:Search/{{PAGENAME}}|çercâ 'sto tittolo]] inte âtre pagine do scîto opû [{{fullurl:{{FULLPAGENAME}}|action=edit}} cangiâ a pagina òua].",
-'noarticletext-nopermission' => "Òua a pàgina çercâ a l'è vêua. O l'è poscìbile [[Special:Search/{{PAGENAME}}|çercâ sto tìtolo]] inte âtre pàgine do scîto opû [{{fullurl:{{FULLPAGENAME}}|action=edit}} cangiâ a pàgina òua].",
+'noarticletext-nopermission' => "Òua a pàgina çercâ a l'è vêua. L'è poscìbile [[Special:Search/{{PAGENAME}}|çercâ sto tìtolo]] inte di âtre pàgine do scîto o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} çercâ inti registri corelæ]</span>, ma no ti gh'hæ i outorizzaçioin pe creâ sta paggina.",
 'previewnote' => "'''Questa chì a l'è solo 'n'anteprimma; i cangiamenti no son ancon stæti sarvæ!'''",
 'editing' => 'Modiffica de $1',
 'editingsection' => 'Càngio de $1 (seçión)',
@@ -514,24 +525,24 @@ Se t'ê intròu inte sto colegaménto pe sbàlio, o basta sciaccâ '''Inderê'''
 Se no ti veu che i testi teu pêuan esse modificæ da quarchedùn sensa limitaçioìn, no mandâli a {{SITENAME}}.<br />
 Inviando o testo ti diciâri, sott'a teu responsabilitæ, ch'o l'é stæto scrîto da ti personalmente oppure ch'o l'é stæto piggiòu da 'na fonte de pùbrico domìnio òu anàlogamente lìbea.<br />
 '''NO INVI MATERIÂLE COVERTO DA DRÎTI D'AUTÔ SENSA OUTORIZAÇION!'''",
-'templatesused' => '{{PLURAL:$1|Template adêuviòu|Template adêuviæ}} in sta pàgina:',
+'templatesused' => '{{PLURAL:$1|Template dêuviòu|Template dêuviæ}} in sta pàgina:',
 'templatesusedpreview' => "Template dêuviæ inte 'st'anteprimma:",
 'template-protected' => '(protezûo)',
 'template-semiprotected' => '(semiprotezûo)',
-'hiddencategories' => "Sta pàgina a l'é de {{PLURAL:$1|1 categoria ascoza|$1 categorie ascoze}}:",
+'hiddencategories' => 'Sta pàgina a fa parte de {{PLURAL:$1|1 categoria ascoza|$1 categorie ascoze}}:',
 'nocreatetext' => "A poscibilitæ de creâ nêuve paggine insce {{SITENAME}} a l'è stæta limitâ solo a-i ûtenti registræ.
 O se pêu tornâ inderê e modificâ 'na paggina escistente, oppûre [[Special:UserLogin|intrâ ò creâ 'n accesso nêuvo]].",
-'permissionserrorstext-withaction' => "No t'æ i permìssi pe $2 pe {{PLURAL:$1|sta raxon|ste raxoìn}}:",
-'recreate-moveddeleted-warn' => "Atençión: o se sta pe ricreâ 'na pàgina zà scancelâ into passòu.'''
+'permissionserrorstext-withaction' => "No ti g'hæ i permìssi pe $2 pe {{PLURAL:$1|sta raxon|ste raxoìn}}:",
+'recreate-moveddeleted-warn' => "Atençión: ti stæ pe ricreâ 'na pàgina zà scancelâ into passòu.'''
 
-O se deive consciderâ se o l'è davéi coretto continoâ  a cangiâ 'sta pàgina.
-E cancellaçioìn e mesciaménti son publicæ chì sotta:",
-'moveddeleted-notice' => "Sta pàgina a l'é stæta cancelâ.
-E scancelaçioìn e mescaménti son riportæ chi pe informaçión.",
+Consciddera se l'è o caxo de continoâ  a cangiâ 'sta pàgina.
+Pe comoditæ e cancellaçioìn e i stramui son pubricæ chì sotta:",
+'moveddeleted-notice' => "Sta pàgina a l'é stæta scancelâ.
+A lista de scancelaçioìn e di stramui son riportæ chi de sotta pe informaçión.",
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning' => "'''Atento:''' a dimensción di template che t'æ misso l'é tròppo grànde.
-Quàrcheùn di teu template no saiâ azónto.",
+'post-expand-template-inclusion-warning' => "'''Atento:''' a dimensción di template che t'æ misso a l'é tròppo grande.
+Quarchedun di teu template o no saiâ incluzo.",
 'post-expand-template-inclusion-category' => "Pàgine con di template che gh'àn a dimensción ciù âta do limite mascimo",
 'post-expand-template-argument-warning' => "'''Atençión:''' sta pàgina a contegne un ò ciù argomenti di template che son tròppo gràndi pe êse espansi. Sti argomenti no saiàn fæti védde.",
 'post-expand-template-argument-category' => 'Pàgine con di template che ghe mancàn di argoménti',
@@ -547,7 +558,7 @@ A razon dæta a l'è ''$2''",
 'currentrev' => 'Verscion attuâle',
 'currentrev-asof' => 'Ùrtima revixón de-e $1',
 'revisionasof' => 'Verscion do $1',
-'revision-info' => 'Verscion do $1, outô: $2',
+'revision-info' => 'Verscion do $1 de $2',
 'previousrevision' => '← Verscion meno recente',
 'nextrevision' => 'Revixon ciù nêuva →',
 'currentrevisionlink' => 'Ûrtima revixon',
@@ -556,9 +567,9 @@ A razon dæta a l'è ''$2''",
 'last' => 'Ûrtima',
 'page_first' => 'primma',
 'page_last' => 'ûrtima',
-'histlegend' => "Confronto tra verscioîn: selessionâ e cascette corispondenti a-e verscioîn descideræ e schissâ Inviâ oppûre o pomello lì sotta.
+'histlegend' => "Confronto tra verscioîn: selession-a e cascette corispondenti a-e verscioîn dexidiæ e schissa Invio oppû o pomello da basso.
 
-Leggenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a verscion preçedente, '''m''' = modiffica minô",
+Legenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a verscion precedente, '''m''' = modiffica minô",
 'history-fieldset-title' => 'Véddi a stöia',
 'history-show-deleted' => 'Sôlo scancelæ',
 'histfirst' => 'Prìmmo',
@@ -583,7 +594,7 @@ Leggenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a v
 'lineno' => 'Linia $1:',
 'compareselectedversions' => 'Confronta e verscioîn selessionæ',
 'editundo' => 'Anùlla',
-'diff-multi' => '({{PLURAL:$1|Inna revixión intermedia|$1 revixioìn intermedie}} de {{PLURAL:$2|un utente|$2 utenti}} no son mostræ)',
+'diff-multi' => '({{PLURAL:$1|Inna revixón intermedia|$1 de revixoìn intermedie}} de {{PLURAL:$2|un utente|$2 utenti}} no son mostræ)',
 
 # Search results
 'searchresults' => 'Resultati da reçerca',
@@ -596,8 +607,8 @@ Leggenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a v
 'nextn-title' => 'Pròscimo $1 {{PLURAL:$1|rezoltato|rezoltati}}',
 'shown-title' => 'Fanni védde {{PLURAL:$1|in rizoltato|$1 rizoltati}} pe pàgina',
 'viewprevnext' => 'Veddi ($1 {{int:pipe-separator}} $2) ($3).',
-'searchmenu-exists' => "'''In sciô scîto l'existe za 'na pàgina co-o nómme \"[[:\$1]]\"'''",
-'searchmenu-new' => 'Crea la pagina "[[:$1]]" su questo sito',
+'searchmenu-exists' => "'''Inte questa wiki gh'è za 'na pàgina co-o nómme \"[[:\$1]]\"'''",
+'searchmenu-new' => 'Crea a pagina "[[:$1]]" insce questo scito',
 'searchhelp-url' => 'Help:Contegnûi',
 'searchprofile-articles' => 'Pàgina di contegnûi',
 'searchprofile-project' => 'Pàgine de agiùtto e relative a-o progetto',
@@ -614,15 +625,15 @@ Leggenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a v
 'search-redirect' => '(redirect $1)',
 'search-section' => '(seçión $1)',
 'search-suggest' => 'Fòscia ti voéivi: $1',
-'searchrelated' => 'relativi',
+'searchrelated' => 'corelæ',
 'searchall' => 'tùtti',
 'showingresultsheader' => "{{PLURAL:$5|Rizoltato '''$1''' di '''$3'''|Rizoltati '''$1 - $2''' de '''$3'''}} pe '''$4'''",
-'search-nonefound' => 'Mi no ò trovòu nìnte',
+'search-nonefound' => "Mi n'ho atrovòu ninte",
 'powersearch' => 'Çerca',
 
 # Preferences page
 'preferences' => 'Preferençe',
-'mypreferences' => 'Mæ preferense',
+'mypreferences' => 'Preferençe',
 'changepassword' => 'Cangiâ a pòula segretta',
 'skin-preview' => 'Anteprimma',
 'prefs-datetime' => 'Data e oùa',
@@ -643,8 +654,8 @@ Leggenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a v
 'badsiglength' => "O nommeaggio o l'é tròppo lóngo; o dêve avéi meno de $1 caratteri.",
 'email' => 'Posta elettronega',
 'prefs-help-realname' => '* Nomme vëo (opsionâ): se o se scellie de scrivilo, o sajà dêuviòu pe ascrivighe a paternitæ di contegnûi inviæ.',
-'prefs-help-email' => "L'emal a no l'é obligatöia, ma a teu peu permette de reçéive a paròlla segrétta se ti t'ascòrdi.",
-'prefs-help-email-others' => 'Ti ti peu ascì scélie de lasciâ che i âtri te contâtino da-e teu pàgine utente ò de discoscioìn sénsa revelâ a teu indentitæ.',
+'prefs-help-email' => "L'email a no l'é obligatöia, ma a te permette de reçéive a paròlla segrétta se ti l'ascòrdi.",
+'prefs-help-email-others' => 'Ti ti peu scélie ascì de lasciâ che i âtri te contattan via e-mail co-in ingancio da-a to pàgina utente ò de discoscion sénsa rivelâ a to e-mail quande i atri utenti te contattan.',
 
 # Groups
 'group-user' => 'Ûtenti',
@@ -663,23 +674,23 @@ Leggenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a v
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|modiffica|modiffiche}}',
 'recentchanges' => 'Ùrtimi cangiamenti',
-'recentchanges-legend' => 'Inpostaçioìn de lìùrtimi cangiaménti',
+'recentchanges-legend' => 'Opçioin di ùrtimi cangiaménti',
 'recentchanges-summary' => "Questa pàgina a g'ha di càngi ciù reçenti a-i contegnûi do scîto.",
 'recentchanges-feed-description' => "Questo feed o g'ha di cangiaménti ciù reçenti a-i contegnûi do scîto.",
 'recentchanges-label-newpage' => "Sto cangiaménto o l'à creòu 'na pàgina nêuva",
 'recentchanges-label-minor' => 'Cangiamento minô (m)',
 'recentchanges-label-bot' => "Sto cangiaménto o l'à fæto in bot",
 'recentchanges-label-unpatrolled' => "Sto cangiaménto o no l'é stæto ancón verificòu",
-'rcnote' => "De segoito {{PLURAL:$1|l'é elencâ o cangiménto ciù reçente|son elencæ e '''$1''' cangiménti ciù reçenti}} a-o scîto {{PLURAL:$2|inte ùrtime 24 ôe|inti ùrtimi '''$2''' giórni}}; i dæti son agiornæ a-e $5 do $4.",
-'rcnotefrom' => "Chì sotta gh'è i cangiamenti fæti comensando da '''$2''' (scinn-a '''$1''').",
-'rclistfrom' => 'Fanni vedde e modiffiche apportæ partendo da $1',
+'rcnote' => "Chì sotta {{PLURAL:$1|l'é elencou o cangiaménto ciù reçente|son elencæ i '''$1''' cangiaménti ciù reçenti}} a-o scîto {{PLURAL:$2|inte ùrtime 24 ôe|inti ùrtimi '''$2''' giorni}}; i dæti son agiornæ a-e $5 do $4.",
+'rcnotefrom' => "Chì sotta gh'è i cangiamenti fæti comensando da '''$2''' (scin a '''$1''').",
+'rclistfrom' => 'Fanni vedde e modiffiche apportæ partindo da $1',
 'rcshowhideminor' => '$1 cangiaménti minoi',
 'rcshowhidebots' => '$1 bot',
 'rcshowhideliu' => '$1 utenti registræ',
 'rcshowhideanons' => '$1 utenti anonnimi',
 'rcshowhidepatr' => '$1 i cangiaménti controllæ',
 'rcshowhidemine' => '$1 i mæ cangiamenti',
-'rclinks' => 'Fâ vedde i $1 cangiménti ciù reçenti fæte inti ùrtimi $2 giorni<br />$3',
+'rclinks' => 'Fanni vedde i $1 cangiaménti ciù reçenti fæti inti ùrtimi $2 giorni<br />$3',
 'diff' => 'diff',
 'hist' => 'stö',
 'hide' => 'Ascondi',
@@ -688,8 +699,8 @@ Leggenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a v
 'newpageletter' => 'N',
 'boteditletter' => 'b',
 'rc_categories_any' => 'Quarsevêuggia',
-'rc-enhanced-expand' => 'Fanni védde detàli (con JavaScript)',
-'rc-enhanced-hide' => 'Ascondi detàli',
+'rc-enhanced-expand' => 'Fanni védde detaggi (serve JavaScript)',
+'rc-enhanced-hide' => 'Ascondi detaggi',
 
 # Recent changes linked
 'recentchangeslinked' => 'Cangiamenti correlæ',
@@ -697,17 +708,17 @@ Leggenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a v
 'recentchangeslinked-toolbox' => 'Cangiaménti corelæ',
 'recentchangeslinked-title' => 'Modiffiche correlæ a "$1"',
 'recentchangeslinked-noresult' => 'Nisciûn cangiamento a-e paggine collegæ into periodo speçificòu.',
-'recentchangeslinked-summary' => "Sta pàgina a fa védde i cangiaménti ciù reçenti a-e pàgine colegæ a quésta.
+'recentchangeslinked-summary' => "Sta pàgina a fa védde i cangiaménti ciù reçenti a-e pàgine colegæ a questa.
 E pàgine che t'æ in oservaçion inti [[Special:Watchlist|oservæ speciâli]] son in '''grascetto'''.",
 'recentchangeslinked-page' => 'Nómme da pàgina:',
 'recentchangeslinked-to' => 'Fanni védde sôlo i cangiaménti a-e pàgine colegæ a-a pàgina specificâ',
 
 # Upload
-'upload' => "Caregâ 'n archivio",
+'upload' => "Carrega 'n file",
 'uploadbtn' => "Carega 'n archivvio",
-'uploadlogpage' => 'Log di archivi caregæ',
+'uploadlogpage' => 'Log di file caregæ',
 'filename' => 'Nomme do papê',
-'filedesc' => 'Detàli',
+'filedesc' => 'Detaggi',
 'filesource' => 'Reixe:',
 'uploadedfiles' => 'Papê caregæ',
 'badfilename' => 'O nomme do papê o l\'è stæto cangioö in "$1".',
@@ -715,7 +726,7 @@ E pàgine che t'æ in oservaçion inti [[Special:Watchlist|oservæ speciâli]] s
 [[$1|thumb]]",
 'fileexists-forbidden' => 'Un papê co sto nomme o existe de zà, pe piaxei vanni in derrê e carega sto papê co un ätro nomme. [[File:$1|thumb|center|$1]]',
 'savefile' => 'Sarva o papê',
-'uploadedimage' => 'O s\'ha caregòu "[[$1]]"',
+'uploadedimage' => 'O l\'ha caregòu "[[$1]]"',
 'uploaddisabledtext' => 'In {{SITENAME}} non se peu caregâ de papê.',
 'uploadvirus' => 'O papê gha un virus!! Dettaggi: $1',
 'sourcefilename' => "Nomme do papê d'origine:",
@@ -734,24 +745,24 @@ E pàgine che t'æ in oservaçion inti [[Special:Watchlist|oservæ speciâli]] s
 'listfiles_date' => 'Dæta',
 
 # File description page
-'file-anchor-link' => 'Archivio',
+'file-anchor-link' => 'file',
 'filehist' => "Stöia de l'archivio",
-'filehist-help' => "Sciacca inscie 'n grûppo data/ôa pe vedde l'archivio comme o se presentâva into momento indicòu.",
-'filehist-revert' => 'Repìggia',
+'filehist-help' => "Sciacca insce data/ôa pe amiâ o file comm'o s'apresentâva into momento indicòu.",
+'filehist-revert' => 'Ripristina',
 'filehist-current' => 'Corrente',
 'filehist-datetime' => 'Dæta/Ôa',
-'filehist-thumb' => 'Miniatora',
-'filehist-thumbtext' => 'Miniatora de versción de $1',
+'filehist-thumb' => 'Miniatua',
+'filehist-thumbtext' => 'Miniatua da versción de $1',
 'filehist-user' => 'Utente',
-'filehist-dimensions' => 'Dimensioîn',
+'filehist-dimensions' => 'Dimenscioin',
 'filehist-filesize' => "Dimension de l'archivvio",
 'filehist-comment' => 'Coménti',
 'imagelinks' => "Ûzo de l'archivio",
 'linkstoimage' => '{{PLURAL:$1|A segoente pàgina a contegne|E segoenti $1 pàgine contegnan}} colegaménti a-o file:',
-'nolinkstoimage' => "No gh'è nisciûnn-a pàgina collegâa con 'st'archivvio.",
+'nolinkstoimage' => "No gh'è nisciûnn-a pàgina collegâ con 'sto file.",
 'sharedupload' => "'St'archivvio o l'è condiviso; sajeiva a dî c'o pêu ese dêuviòu da ciû progetti wiki.",
-'sharedupload-desc-here' => 'Sto file o vegne da $1 e o peu êse adêuviòu inti âtri progetti.
-Chi de segoito ti peu védde a descriçión inta [$2 pàgina de descriçión do file].',
+'sharedupload-desc-here' => 'Sto file o vegne da $1 e o peu êse dêuviòu inti âtri progetti.
+Chì apreuvo ti peu védde a descriçión inta [$2 pàgina de descriçión do file].',
 'uploadnewversion-linktext' => "Carega 'na nêuva verscion de 'st'archivvio chì",
 
 # File deletion
@@ -776,7 +787,7 @@ Chi de segoito ti peu védde a descriçión inta [$2 pàgina de descriçión do
 'statistics' => 'Statistiche',
 
 'disambiguations' => 'Paggine de desambiguassion',
-'disambiguationspage' => 'Template:Dizanbigoa',
+'disambiguationspage' => 'Template:Omonimia',
 
 'doubleredirects' => 'Rindirissamenti doggi',
 
@@ -809,7 +820,7 @@ Chi de segoito ti peu védde a descriçión inta [$2 pàgina de descriçión do
 'mostcategories' => 'Voxi con ciû categorîe',
 'mostimages' => 'Immaggini con ciû collegamenti',
 'mostrevisions' => 'Voxi con ciû revixoîn',
-'prefixindex' => 'Indiçe de voxi pe létie inçiâ',
+'prefixindex' => 'Indiçe arfabetico de voxe',
 'shortpages' => 'Paggine ciû cûrte',
 'longpages' => 'Paggine ciû longhe',
 'deadendpages' => 'Paggine sensa sciortîa',
@@ -825,7 +836,7 @@ Chi de segoito ti peu védde a descriçión inta [$2 pàgina de descriçión do
 'pager-older-n' => '{{PLURAL:$1|1 ciù vêgio|$1 ciù vêgi}}',
 
 # Book sources
-'booksources' => 'Fonti',
+'booksources' => 'Fonte libraie',
 'booksources-search-legend' => 'Çerca e fonti',
 'booksources-isbn' => 'Codice ISBN:',
 'booksources-go' => 'Vànni',
@@ -870,7 +881,7 @@ Ti te peu strinza a vista se ti te çerni un tipo de registro, un nomme de un ut
 # Special:ListGroupRights
 'listgrouprights-members' => '(Elenco di membri)',
 
-# E-mail user
+# Email user
 'emailuser' => "Invia 'na email a st'utente chi",
 'emailpage' => "Mandighe 'na léttia elettronega",
 'defemailsubject' => '{{SITENAME}} posta elettronega',
@@ -885,17 +896,17 @@ Ti te peu strinza a vista se ti te çerni un tipo de registro, un nomme de un ut
 'emailsenttext' => "A teua lettìa elettronega a l'è stæta spèdïa.",
 
 # Watchlist
-'watchlist' => 'A mæ lista in osservassion',
-'mywatchlist' => 'Lista in oservaçion',
+'watchlist' => 'Sotta osservassion',
+'mywatchlist' => 'Sotta oservaçion',
 'watchlistfor2' => 'Pe $1 $2',
 'watchnologin' => "Non ti t'æ entroö",
 'watchnologintext' => 'Devvi [[Special:UserLogin|entrâ]] pe cangiâ a toa lista in osservaçion.',
 'addedwatchtext' => "A paggina \"[[:\$1]]\" a l'è stæta azzonta a-a pròpia [[Special:Watchlist|lista in osservaçion]]. De chì in avanti, i cangiamenti fæti a-a paggina e a-a sêu discûxon sajàn missi in lista lì; o tittolo da paggina o sajà scrîo in '''grascietto''' inta paggina di [[Special:RecentChanges|ûrtimi cangiamenti]] coscì ti o veddi megio. Se ti vêu eliminâla da-a lista in osservaçion ciû târdi, sciacca \"no seguî\" inscia barra de d'âto.",
 'removedwatchtext' => 'A paggina "[[:$1]]" a l\'è stæta scassâa da-a têu lista in osservaçion.',
-'watch' => 'Inta lista in oservaçion',
+'watch' => 'Metti sotta oservaçion',
 'watchthispage' => "Vigilâ 'sta paggina",
-'unwatch' => 'No seguî',
-'watchlist-details' => "A lista d'oservaçión speçiâle a contegne {{PLURAL:$1|inna pàgina (co-a seu pàgina de discusción)|$1 pàgine (co-e lòro pàgine de discusción)}}.",
+'unwatch' => "Leva da sott'oservaçion",
+'watchlist-details' => "A lista d'oservaçión speçiâle a contegne {{PLURAL:$1|ina pàgina (co-a seu pàgina de discusción)|$1 de pàgine (co-e so pàgine de discusción)}}.",
 'watchlistcontains' => "A lista in osservaçion g'ha $1 {{PLURAL:$1|pagine|pagina}}.",
 'wlshowlast' => 'Famme vedde e ûrtime $1 ôe $2 giorni $3',
 'watchlist-options' => 'Inpostaçioìn di oservæ speciâli',
@@ -914,10 +925,10 @@ Ti te peu strinza a vista se ti te çerni un tipo de registro, un nomme de un ut
 'delete-legend' => 'Scassa',
 'historywarning' => "Attension: A paggina c'a se sta pe scassâ a g'ha 'na cronologîa:",
 'confirmdeletetext' => "Ti stæ pe scassâ pe sempre da-o database 'na paggina ò 'n'immaggine, assemme a tûtta a sêu cronologîa. Pe cortexia, conferma che davvei ti vêu andâ avanti con quella cancellassion, che ti capisci perfettamente e conseguense de 'st'assion e che a s'adatta a-e linnie guidda stabilîe in [[{{MediaWiki:Policy-url}}]].",
-'actioncomplete' => 'Açion finïa',
+'actioncomplete' => 'Açion completâ',
 'actionfailed' => 'Açión falîa',
 'deletedtext' => 'A paggina "$1" a l\'è stæta scassâa. Consûltâ o $2 pe \'na lista de-e paggine scassæ de reçente.',
-'dellogpage' => 'Registro de-e cose scassæ',
+'dellogpage' => 'Registro de cose scassæ',
 'deletecomment' => 'Raxon:',
 'deleteotherreason' => 'Ûn âtro motivo',
 'deletereasonotherlist' => "Ûnn'âtra raxon",
@@ -932,8 +943,8 @@ L'ûrtimo cangiamento o ghe l'à fæto [[User:$3|$3]] ([[User talk:$3|Ciæti]]).
 'revertpage' => 'E modificaçioin de [[Special:Contributions/$2|$2]] ([[User talk:$2|Ciæti]]) son stæte eliminæ; riportæ a verscion de primma de [[User:$1|$1]]',
 
 # Protect
-'protectlogpage' => 'Protessioîn',
-'protectedarticle' => 'l\'à protetto "[[$1]]"',
+'protectlogpage' => 'Protessioin',
+'protectedarticle' => 'l\'à protetto "[[$1]]"',
 'prot_1movedto2' => '[[$1]] mesciòu a [[$2]]',
 'protect-legend' => 'Confermâ protession',
 'protectcomment' => 'Raxon:',
@@ -982,13 +993,13 @@ $1',
 'blanknamespace' => '(Prinçipâ)',
 
 # Contributions
-'contributions' => "Contribussioìn de l'utente",
+'contributions' => 'Contribuçioin {{GENDER:$1|utente}}',
 'contributions-title' => 'Contribuçioìn de $1',
-'mycontris' => 'Mæ contribuçioin',
+'mycontris' => 'Contribuçioin',
 'contribsub2' => 'Pe $1 ($2)',
 'uctop' => '(ûrtima pe-a paggina)',
-'month' => 'Partendo da-o méize (e precedénti):',
-'year' => "Partendo da l'anno (e preçedenti):",
+'month' => 'Partindo da-o meize (e precedénti):',
+'year' => "Partindo da l'anno (e precedenti):",
 
 'sp-contributions-newbies' => 'Fanni védde sôlo e contribuçioìn di nêuvi utenti',
 'sp-contributions-newbies-sub' => 'Pe i nêuvi ûtenti',
@@ -998,25 +1009,25 @@ $1',
 'sp-contributions-talk' => 'Ciæti',
 'sp-contributions-search' => 'Riçerca contribuçioìn',
 'sp-contributions-username' => 'Indirìsso IP ò nómme utente:',
-'sp-contributions-toponly' => "Fanni védde sôlo i ùrtimi cangiaménti che son inte l'ùrtime revixioìn da pàgina",
+'sp-contributions-toponly' => "Fanni védde sôlo i cangiaménti ch'en i ùrtime revixoìn da pàgina",
 'sp-contributions-submit' => 'Çerca',
 
 # What links here
-'whatlinkshere' => 'Cöse se colega chì',
+'whatlinkshere' => 'Cöse se colega chì',
 'whatlinkshere-title' => "Pàgine c'apontàn a $1",
 'whatlinkshere-page' => 'Pàgina:',
 'linkshere' => "E pàgine segoenti apontan a '''[[:$1]]''':",
 'nolinkshere' => "Nisciùnn-a pàgina a se collega con '''[[:$1]]'''.",
-'isredirect' => 'redirect',
+'isredirect' => 'Paggina de rindirissamento',
 'istemplate' => 'Incluxon',
 'isimage' => 'Colegamento a file',
-'whatlinkshere-prev' => '{{PLURAL:$1|preçedente|preçedenti $1}}',
+'whatlinkshere-prev' => '{{PLURAL:$1|precedente|precedenti $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|sûccescivo|sûccescivi $1}}',
 'whatlinkshere-links' => '← colegaménti',
-'whatlinkshere-hideredirs' => '$1 redirect',
+'whatlinkshere-hideredirs' => '$1 i rendirissamenti',
 'whatlinkshere-hidetrans' => '$1 Incluxon',
 'whatlinkshere-hidelinks' => '$1 colegaménti',
-'whatlinkshere-hideimages' => '$1 colegaménti da inmàgini',
+'whatlinkshere-hideimages' => '$1 colegaménti di file',
 'whatlinkshere-filters' => 'Filtri',
 
 # Block/unblock
@@ -1031,14 +1042,14 @@ $1',
 'anononlyblock' => 'Non ti tè registroö. Non ti peu fanni de i cangiamenti! (Registräse o non vegne ninte!)',
 'emailblock' => 'posta elettronega affermaä',
 'ipblocklist-empty' => "A lista de e affermaçioin a l'è veua.",
-'blocklink' => 'Afermaçion',
+'blocklink' => 'Blocca',
 'unblocklink' => 'sblòcca',
 'change-blocklink' => 'càngia blòcco',
 'contribslink' => 'Contribuçioìn',
 'autoblocker' => 'Affermoö automaticamente perchè o teu indirisso IP o l\'è stæto usöo da "[[User:$1|$1]]" neuvamente. A razon dæta pe affermâ $1 a l\'è stæta:
 "$2"',
 'blocklogpage' => 'Blòcchi',
-'blocklogentry' => "l'a blocòu [[$1]] pe in periodo de $2 $3",
+'blocklogentry' => 'blocòu [[$1]] pe in periodo de $2 $3',
 'blocklogtext' => "Sta chie a l'è unn-a lista de affermaçioin fæte e levæ.
 I indirissi IP affermæ automaticamente non son  consideræ.
 Veddi a [[Special:BlockList|Lista de i indirissi IP affermæ]] pe e informaçioin neuve.",
@@ -1079,7 +1090,7 @@ Inte 'sti câxi, se o se vêu fâ coscì, o se deive stramûâ ò azzonze manual
 'talkexists' => "'''A paggina a l'è stæta stramûâa correttamente, ma o no l'è stæto poscibbile stramûâ a paggina de discûxon perché ghe n'è zà 'n'âtra co-o nêuvo tittolo. O se deive inserî manualmente i contegnûi de tûtte e doe.'''",
 'movedto' => 'Stramûâa a',
 'movetalk' => 'Stramûâ anche a paggina de discûxon',
-'movelogpage' => 'Lista di remesci',
+'movelogpage' => 'Lista di stramûi',
 'movereason' => 'Raxon',
 'revertmove' => 'Ristorâ',
 'delete_and_move' => 'Scassa e mescia',
@@ -1092,7 +1103,7 @@ Inte 'sti câxi, se o se vêu fâ coscì, o se deive stramûâ ò azzonze manual
 # Namespace 8 related
 'allmessages' => 'Messaggi do scistemma',
 'allmessagesname' => 'Nomme',
-'allmessagesdefault' => 'Testo di default',
+'allmessagesdefault' => 'Testo predefinio',
 'allmessagescurrent' => 'Testo corrente',
 'allmessagestext' => "Sta chie a l'è unn-a lista de messaggi do scistema in ta MediaWiki.",
 'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' o non ti te peu vedde, perchè '''\$wgUseDatabaseMessages''' o non l'è attivo.",
@@ -1112,20 +1123,20 @@ Inte 'sti câxi, se o se vêu fâ coscì, o se deive stramûâ ò azzonze manual
 'tooltip-pt-preferences' => 'E mæ preferense',
 'tooltip-pt-watchlist' => 'A lista de-e pagine che ti æ sotta osservaçion',
 'tooltip-pt-mycontris' => 'E mæ contribuçioìn',
-'tooltip-pt-login' => "Consegiêmo a registraçión, scibén a no l'è d'òbligo.",
+'tooltip-pt-login' => "Consegemmo a registraçión, ma a no l'è obrigatoia.",
 'tooltip-pt-logout' => 'Sciortîa (logout)',
-'tooltip-ca-talk' => 'Fanni védde e discuscioìn in sca pagina.',
-'tooltip-ca-edit' => "O se pêu modificâ sta pagina. Pe piaxei scia dêuvie o pommello d'anteprìmma primma de sarvâla.",
-'tooltip-ca-addsection' => "Iniçia 'na nêuva seçión",
+'tooltip-ca-talk' => 'Discuscion riguardo a sta paggina.',
+'tooltip-ca-edit' => "Ti pêu modificâ sta paggina. Pe piaxei dêuvia o pomello d'anteprimma primma de sarvâla.",
+'tooltip-ca-addsection' => "Inça 'na seçión nêuva",
 'tooltip-ca-viewsource' => "'Sta pagina a l'è protetta, ma ti peu védde o sêu còdice sorgente.",
 'tooltip-ca-history' => 'Verscioìn précedenti da pàgina',
-'tooltip-ca-protect' => "Proteze 'sta paggina",
+'tooltip-ca-protect' => "Protezi 'sta paggina",
 'tooltip-ca-delete' => 'Scancella sta pàgina',
-'tooltip-ca-move' => "Sposta 'sta paggina (cangia tittolo)",
+'tooltip-ca-move' => "Mescia 'sta paggina (cangia tittolo)",
 'tooltip-ca-watch' => "Azónzi 'sta pagina a-a teu lista d'oservaçion",
-'tooltip-ca-unwatch' => "Levâ sta pàgina d'inta têu lista d'oservaçion speçiâ",
+'tooltip-ca-unwatch' => "Leva sta pàgina da sott'oservaçion.",
 'tooltip-search' => 'Çerca {{SITENAME}}',
-'tooltip-search-go' => "Vànni inte 'na pàgina co-o sto tìtolo, se a l'existe",
+'tooltip-search-go' => "Vànni inte 'na pàgina con sto tìtolo, s'a l'existe",
 'tooltip-search-fulltext' => 'Çerca sto testo in scie pàgine',
 'tooltip-p-logo' => 'Vìxita a pàgina prinçipâ',
 'tooltip-n-mainpage' => 'Vìxita a pagina prinçipâ',
@@ -1138,8 +1149,8 @@ Inte 'sti câxi, se o se vêu fâ coscì, o se deive stramûâ ò azzonze manual
 'tooltip-t-whatlinkshere' => 'Lista de tùtte e pagine che son colegæ a sta chì.',
 'tooltip-t-recentchangeslinked' => 'Ùrtimi càngi de pàgine colegæ a quésta',
 'tooltip-feed-atom' => 'Feed Atom pe sta pàgina',
-'tooltip-t-contributions' => "Lista de-e contribûssioîn de quest'utente",
-'tooltip-t-emailuser' => "Inviâ 'n messaggio e-mail a quest'utente",
+'tooltip-t-contributions' => "Lista de contribûssioîn de quest'utente",
+'tooltip-t-emailuser' => "Invia 'n messaggio e-mail a quest'utente",
 'tooltip-t-upload' => 'Carega inmàgini ò archivi moltimedia',
 'tooltip-t-specialpages' => 'Lista de tùtte e pagine speçiâli',
 'tooltip-t-print' => 'Versción da stànpa pe sta pàgina',
@@ -1152,15 +1163,15 @@ Inte 'sti câxi, se o se vêu fâ coscì, o se deive stramûâ ò azzonze manual
 'tooltip-ca-nstab-template' => 'Veddi o template',
 'tooltip-ca-nstab-help' => "Veddi a paggina d'agiûtto",
 'tooltip-ca-nstab-category' => 'Veddi a paggina da categorîa',
-'tooltip-minoredit' => 'Segnalâ comme cangiaménto minô',
+'tooltip-minoredit' => 'Marchilo comme cangiaménto minô',
 'tooltip-save' => 'Sarva i cangiaménti',
-'tooltip-preview' => 'Anteprimma de-e modiffiche (conseggiâa, primma de sarvâ!)',
-'tooltip-diff' => "Ammîa e modiffiche che ti ti gh'æ fæto a-o testo.",
+'tooltip-preview' => 'Anteprimma de modiffiche (fannila, primma de sarvâ!)',
+'tooltip-diff' => "Ammîa e modiffiche che t'æ fæto a-o testo.",
 'tooltip-compareselectedversions' => 'Amia e diferense tra e doê verscioìn seleçionæ de sta paggina chì.',
 'tooltip-watch' => "Azónzi sta pàgina a-a têu lista d'osservæ speçiâli",
 'tooltip-rollback' => "\"Rollback\" scancella i cangiaménti de sta pàgina de l'ùrtimo ch'o l'à fæto 'n càngio co-in click do ràtto",
-'tooltip-undo' => '"Anùlla" o pérmette de anulâ sto cangiaménto e arve il modolo de cangiaménto into mòddo anteprìmma. Ti peu ascì métte a raxón inte l\'ògétto do cangiaménto.',
-'tooltip-summary' => "Scrîvi 'na scintezi",
+'tooltip-undo' => '"Anùlla" o permette de anulâ sto cangiaménto e o l\'arve o modolo de cangiaménto into modalitæ anteprìmma. Ti peu ascì métte a raxón inte l\'ogetto do cangiaménto.',
+'tooltip-summary' => "Scrîvi 'na scintexi",
 
 # Stylesheets
 'common.css' => '/** o codiçe css scrïo chie o vegne azzounto in tutte e pagine */',
@@ -1177,8 +1188,8 @@ Inte 'sti câxi, se o se vêu fâ coscì, o se deive stramûâ ò azzonze manual
 'thumbsize' => 'Dimescion da a imàginetta:',
 'file-info-size' => '$1 × $2 pixel, dimenscioîn: $3, tippo MIME: $4',
 'file-nohires' => 'No ghe son verscioìn a rezoluçion ciù âta.',
-'svg-long-desc' => "archivio in formato SVG, dimenscioìn nominâli $1 × $2 pixel, dimenscioìn de l'archivio: $3",
-'show-big-image' => "Verscion d'ærta resolûxon",
+'svg-long-desc' => 'file in formato SVG, dimenscioìn nominâli $1 × $2 pixel, dimenscioin do file: $3',
+'show-big-image' => 'Verscion a ata resolûçion',
 
 # Special:NewFiles
 'newimages' => 'Gallerîa de nêuvi archivvi',
@@ -1188,12 +1199,12 @@ Inte 'sti câxi, se o se vêu fâ coscì, o se deive stramûâ ò azzonze manual
 # Bad image list
 'bad_image_list' => "O formato o l'è coscì:
 Van conscideræ sôlo e righe che comensan co-o càratere *.
-O primmo inganso in sce ògni riga o deiv'ese 'n inganso ch'o no fonçionn-a
-L'ingansi sucescivi, in scia mæxima riga, van conscideræ comme eceçioìn (pagine donde o file o pêu ese reciamòu normalmente).",
+O primmo ingancio in sce ògni riga o dev'ese 'n ingancio ch'o no fonçionn-a
+I inganci sucescivi, in scia mæxima riga, van conscideræ comme eceçioìn (pagine donde o file o pêu ese reciamòu normalmente).",
 
 # Metadata
 'metadata' => 'Metadati',
-'metadata-help' => "St'archivio o contegne informaçioìn in ciù, fòscia missa da-a fotocamera ò dò-u scanner adêuviòu pe creâla ò digitalissâla. Se l'archivio o l'è stæto cangiòu, çerti detàli porieivan no corisponde a-i cangi aportæ.",
+'metadata-help' => "Sto file o contegne de informaçioìn in ciù, fòscia misse da-a fotocamera ò dò-u scansô dêuviòu pe creâla ò digitalizâla. Se o file o l'è stæto cangiòu, çerti detàggi porieivan no corisponde a-i cangi aportæ.",
 'metadata-expand' => 'Fâ vedde dettaggi',
 'metadata-collapse' => 'Asconde dettaggi',
 'metadata-fields' => "I cànpi relativi a-i metadati EXIF elencæ inte 'sto messaggio saiàn in sciâ pàgina de l'inmàgine quande a tabella di metadati a saiâ inta forma cùrta. Cómme predefinîo, i âtri cànpi saiàn ascozi.
@@ -1218,13 +1229,13 @@ L'ingansi sucescivi, in scia mæxima riga, van conscideræ comme eceçioìn (pag
 'exif-filesource' => 'Reixe do papê',
 
 # External editor support
-'edit-externally' => "Càngia st'archivio con 'na applicaçión esterna",
+'edit-externally' => 'Càngia sto file co-in programma esterno',
 'edit-externally-help' => 'Pe avéi ciù informaçioìn amia e [//www.mediawiki.org/wiki/Manual:External_editors istruçioìn] (in ingléize)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'Tùtti',
 'namespacesall' => 'Tùtti',
-'monthsall' => 'tùtti',
+'monthsall' => 'tutti',
 
 # Multipage image navigation
 'imgmultipageprev' => '← Pagina de primma',
@@ -1257,7 +1268,7 @@ L'ingansi sucescivi, in scia mæxima riga, van conscideræ comme eceçioìn (pag
 'watchlisttools-raw' => 'Modiffica a lista in formato testo',
 
 # Core parser functions
-'duplicate-defaultsort' => 'Atençión: a ciâve de ordinaménto predefinîa "$2" va in çimma a quella de prìmma "$1".',
+'duplicate-defaultsort' => 'Atençión: a ciâve de ordinaménto predefinîa "$2" a sostitoisce quella de primma "$1".',
 
 # Special:Version
 'version' => 'Verscion',
@@ -1266,14 +1277,14 @@ L'ingansi sucescivi, in scia mæxima riga, van conscideræ comme eceçioìn (pag
 'specialpages' => 'Pagine speçiâli',
 
 # External image whitelist
-'external_image_whitelist' => " #Lasciâ sta rîga cómme a l'é<pre>
-#Inserî i pessi de esprescioìn regolari (sôlo a pàrte che va fra //) di segoito
+'external_image_whitelist' => " #Lascia sta riga comm'a l'é<pre>
+#Inseisci i pessi de esprescioìn regolari (sôlo a pàrte ch'a va fra e //) chì sotta
 #Ste chi saiàn misse a confronto co-i indirìssi URL de inmàgini esterne (hotlinked)
-#E corispondense saiàn mostrate cómme inmàgini, âtriménti saiâ mostròu sôlo in colegaménto
-#E righe che iniçian con # son consideræ coménti
-#A diferensa tra maioscole e minoscole a no l'è significatîva
+#E corispondense saiàn mostræ cómme inmàgini, donca saiâ mostròu sôlo in colegaménto
+#E righe che començan con # son conscideræ coménti
+#A diferensa tra maioscole e minoscole a no l'è scignificatîva
 
-#Inserî sovia sta rîga tùtti i frammenti de regex. Lasciâ sta rîga cómme a l'é</pre>",
+#Inseisci sovia sta rîga tùtti i frammenti de regex. Lascia sta rîga ezattamente comm'a l'é</pre>",
 
 # Special:Tags
 'tag-filter' => 'Filtra pe [[Special:Tags|etichetta]]:',
index 6f91fe0..ab46f41 100644 (file)
@@ -213,8 +213,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Rodyti stebinčių naudotojų skaičių',
 'tog-oldsig' => 'Esamo parašo peržiūra:',
 'tog-fancysig' => 'Laikyti parašą vikitekstu (be automatinių nuorodų)',
-'tog-externaleditor' => 'Pagal nutylėjimą naudoti išorinį redaktorių (skirta tik ekspertams, nes reikia atitinkamai paruošti jūsų kompiuterį. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
-'tog-externaldiff' => 'Pagal nutylėjimą naudoti išorinę skirtumų rodymo programą (tik ekspertams, nes reikia atitinkamai  paruošti jūsų kompiuterį. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
 'tog-showjumplinks' => 'Įjungti „peršokti į“ pasiekiamumo nuorodas',
 'tog-uselivepreview' => 'Naudoti tiesioginę peržiūrą (JavaScript) (Eksperimentinis)',
 'tog-forceeditsummary' => 'Klausti, kai palieku tuščią keitimo komentarą',
@@ -228,6 +226,7 @@ $messages = array(
 'tog-diffonly' => 'Nerodyti puslapio turinio po skirtumais',
 'tog-showhiddencats' => 'Rodyti paslėptas kategorijas',
 'tog-norollbackdiff' => 'Nepaisyti skirtumo atlikus atmetimą',
+'tog-useeditwarning' => 'Perspėti mane, kai palieku redagavimo puslapį, o jame yra neišsaugotų pakeitimų',
 
 'underline-always' => 'Visada',
 'underline-never' => 'Niekada',
@@ -946,6 +945,7 @@ Jis jau egzistuoja.',
 'defaultmessagetext' => 'Numatytasis pranešimo tekstas',
 'invalid-content-data' => 'Neleistinas turinys.',
 'content-not-allowed-here' => 'Turinys "$1" puslapyje [[$2]] nėra leistinas.',
+'editwarning-warning' => 'Palikdamas šį puslapį jūs prarasite visus padarytus pakeitimus.',
 
 # Content models
 'content-model-wikitext' => 'wikitekstas',
@@ -1219,15 +1219,6 @@ Prašome patikrinti sąrašus.',
 'search-external' => 'Išorinė paieška',
 'searchdisabled' => 'Projekto {{SITENAME}} paieška yra uždrausta. Galite pamėginti ieškoti Google paieškos sistemoje. Paieškos sistemoje projekto {{SITENAME}} duomenys gali būti pasenę.',
 
-# Quickbar
-'qbsettings' => 'Greitasis pasirinkimas',
-'qbsettings-none' => 'Nerodyti',
-'qbsettings-fixedleft' => 'Fiksuoti kairėje',
-'qbsettings-fixedright' => 'Fiksuoti dešinėje',
-'qbsettings-floatingleft' => 'Plaukiojantis kairėje',
-'qbsettings-floatingright' => 'Plaukiojantis dešinėje',
-'qbsettings-directionality' => 'Pataisyta, priklausomai nuo jūsų rašybos ir kalbos krypties',
-
 # Preferences page
 'preferences' => 'Nustatymai',
 'mypreferences' => 'Mano nustatymai',
@@ -1755,7 +1746,6 @@ Dėl saugumo, img_auth.php yra išjungtas.',
 'http-read-error' => 'HTTP skaitymo klaida.',
 'http-timed-out' => 'HTTP užklausos laikas baigėsi.',
 'http-curl-error' => 'Klaida siunčiantis URL: $1',
-'http-host-unreachable' => 'Nepavyko pasiekti URL.',
 'http-bad-status' => 'Iškilo problemų vykdant HTTP užklausą: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2950,13 +2940,8 @@ Leidžia pridėti atmetimo priežastį komentaruose',
 'pageinfo-category-files' => 'Failų skaičius',
 
 # Skin names
-'skinname-standard' => 'Klasikinė',
-'skinname-nostalgia' => 'Nostalgija',
 'skinname-cologneblue' => 'Kelno mėlyna',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'Mano išvaizda',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Paprasta',
 'skinname-modern' => 'Moderni',
 'skinname-vector' => 'Vektorinė',
 
index 8f60e6c..2d456ae 100644 (file)
@@ -42,8 +42,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Ralvèngtu zât tilang rawh',
 'tog-oldsig' => 'Khàrna hming hman mék:',
 'tog-fancysig' => 'Khàrna hming wikithu angah ngai rawh (zawmna insiam ţül lovin)',
-'tog-externaleditor' => 'Sawi ngai lovin pawnlam siamţhatu hmang rawh (mithiam tan chauh, i khawlthluakneiah setting bîk a ngai. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
-'tog-externaldiff' => 'Sawi ngai lovin pawnlam diff hmang rawh (mithiam tan chauh, i khawlthluakneiah setting bîk a ngai. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
 'tog-showjumplinks' => '"Zuan kahlên rawh" tih zawmna awmtir rawh',
 'tog-uselivepreview' => 'Endikna nung hmang rawh (JavaScript a ngai) (hei hi chhinna chauh a la ni)',
 'tog-forceeditsummary' => 'Siamţhatna ruak ka dahluh palhin min hrilh rawh',
@@ -57,6 +55,7 @@ $messages = array(
 'tog-diffonly' => 'Dnglmn hnuaiah phêk chhúng tilang suh',
 'tog-showhiddencats' => 'Pawl thuhrûkho tilang rawh',
 'tog-norollbackdiff' => 'Lumlêt hnuah dnglmn kalkan rawh',
+'tog-useeditwarning' => 'Ka phêk siam danglamna ka dahţhat theihnghilh palh chuan min hrilh rawh',
 
 'underline-always' => 'Ziah/ngei ngei',
 'underline-never' => 'Ngai lo',
index b673f5c..441f112 100644 (file)
@@ -81,8 +81,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Rādīt uzraudzītāju skaitu',
 'tog-oldsig' => 'Pašreizējais paraksts:',
 'tog-fancysig' => 'Vienkāršs paraksts (bez automātiskās saites)',
-'tog-externaleditor' => 'Pēc noklusējuma izmantot ārēju programmu lapu izmainīšanai (tikai pieredzējušiem lietotājiem, lai darbotos nepieciešami speciāli uzstādījumi tavā datorā sk. [//www.mediawiki.org/wiki/Manual:External_editor šeit])',
-'tog-externaldiff' => 'Pēc noklusējuma izmantot ārēju programmu izmaiņu parādīšanai (tikai pieredzējušiem lietotājiem, lai darbotos nepieciešami speciāli uzstādījumi tavā datorā sk. [//www.mediawiki.org/wiki/Manual:External_editor šeit])',
 'tog-showjumplinks' => 'Rādīt pārlēkšanas saites',
 'tog-uselivepreview' => "Lietot tūlītējo priekšskatījumu (izmanto ''JavaScript''; eksperimentāla iespēja)",
 'tog-forceeditsummary' => 'Atgādināt man, ja kopsavilkuma ailīte ir tukša',
@@ -96,6 +94,7 @@ $messages = array(
 'tog-diffonly' => 'Nerādīt lapu saturu zem izmaiņām',
 'tog-showhiddencats' => 'Rādīt slēptās kategorijas',
 'tog-norollbackdiff' => 'Neņemt vērā atšķirības, veicot atriti',
+'tog-useeditwarning' => 'Brīdināt mani, kad es atstāju lapas rediģēšanu nesaglabājot izmaiņas',
 
 'underline-always' => 'vienmēr',
 'underline-never' => 'nekad',
@@ -435,11 +434,18 @@ Vari turpināt to izmantot anonīmi, vari <span class='plainlinks'>[$1 atgriezti
 Ņem vērā, ka arī pēc iziešanas, dažas lapas var tikt parādītas tā, it kā tu vēl būtu iekšā, līdz tiks iztīrīta pārlūka kešatmiņa.",
 'welcomeuser' => 'Laipni lūgts, $1!',
 'yourname' => 'Tavs lietotājvārds',
+'userlogin-yourname' => 'Lietotājvārds',
+'userlogin-yourname-ph' => 'Ievadiet savu lietotājvārdu',
 'yourpassword' => 'Tava parole:',
+'userlogin-yourpassword' => 'Parole',
+'userlogin-yourpassword-ph' => 'Ievadiet savu paroli',
 'yourpasswordagain' => 'Atkārto paroli',
 'remembermypassword' => 'Atcerēties pēc pārlūka aizvēršanas (spēkā ne vairāk kā $1 {{PLURAL:$1|diena|dienas}}).',
+'userlogin-remembermypassword' => 'Atcerēties mani',
+'userlogin-signwithsecure' => 'Pieslēgties ar drošu serveri',
 'securelogin-stick-https' => 'Saglabāt HTTPS savienojumu pēc pieslēgšanās',
 'yourdomainname' => 'Tavs domēns',
+'password-change-forbidden' => 'Šajā wiki paroles nevar mainīt.',
 'externaldberror' => 'Notikusi vai nu ārējās autentifikācijas datubāzes kļūda, vai arī tev nav atļauts izmainīt savu ārējo kontu.',
 'login' => 'Pieslēgties',
 'nav-login-createaccount' => 'Izveidot jaunu lietotāju vai doties iekšā',
@@ -449,6 +455,7 @@ Vari turpināt to izmantot anonīmi, vari <span class='plainlinks'>[$1 atgriezti
 'logout' => 'Iziet',
 'userlogout' => 'Iziet',
 'notloggedin' => 'Neesi iegājis',
+'userlogin-joinproject' => 'Pievienojieties {{SITENAME}}',
 'nologin' => "Nav lietotājvārda? '''$1'''.",
 'nologinlink' => 'Reģistrējies',
 'createaccount' => 'Izveidot jaunu lietotāju',
@@ -749,6 +756,8 @@ Izskatās, ka lapa ir dzēsta.',
 Tā jau eksistē.',
 'defaultmessagetext' => 'Noklusētais ziņojuma teksts',
 'invalid-content-data' => 'Nederīgi satura dati',
+'editwarning-warning' => 'Atstājot šo lapu tu zaudēsi izdarītās izmaiņas. 
+Ja esi pieteicies, jūs vari atspējot šo brīdinājumu savās izvēlēs sadaļā "rediģēšana"',
 
 # Content models
 'content-model-javascript' => 'JavaScript kods',
index 9169dcb..cea81b7 100644 (file)
@@ -57,8 +57,6 @@ $messages = array(
 'tog-shownumberswatching' => 'ध्यान राखैबला प्रयोक्ताक संख्या',
 'tog-oldsig' => 'अखुनका दस्खत',
 'tog-fancysig' => 'हस्ताक्षरकें विकिटेक्सटक रूपमे देखू (स्वचालित श्रृंखला हीन)',
-'tog-externaleditor' => "↓पूर्वनिर्धारित रूपेँ बाह्य सम्पादक क' उपयोग करू (केवल विशेषज्ञसभक लेल, एकरा लेल संगणक पर विशेष सेटिंग चाही। [//www.mediawiki.org/wiki/Manual:External_editors आओर जानकारी।])",
-'tog-externaldiff' => 'पुरान संस्करणमे अंतर देखेबाक हेतु पूर्वनिविष्ट रूपमे बाहरक परिवर्तनक प्रयोग करू',
 'tog-showjumplinks' => 'करू "तड़पान" भेटैबला लिंक सभ',
 'tog-uselivepreview' => 'करू चल पूर्वावलोकन (जावास्क्रिप्ट चाही) (प्रायोगिक)',
 'tog-forceeditsummary' => 'हमरा सचेत करू जखन हम खाली सम्पादम सारांशमे जाइ',
@@ -1038,15 +1036,6 @@ $3 द्वारा देल कारण अछि ''$2''",
 अहाँक गूगलक माध्यमसँ ऐ बीच ताकि सकै छी।
 मोन राखू जे तकर विवरणी {{अन्तर्जाल}} सामिग्री समयातीत भऽ सकैए।',
 
-# Quickbar
-'qbsettings' => 'त्वरित दृश्य',
-'qbsettings-none' => 'कोनो नै',
-'qbsettings-fixedleft' => 'वाम कात सटल',
-'qbsettings-fixedright' => 'दहिन दिस सटल',
-'qbsettings-floatingleft' => 'वाम कात घुमैत',
-'qbsettings-floatingright' => 'दहिन कात घुमैत',
-'qbsettings-directionality' => 'कीलित, अहाँक भाषाक लिपि दिशा-निर्देशपर आधारित',
-
 # Preferences page
 'preferences' => 'विकल्प',
 'mypreferences' => 'खासमखास',
@@ -1554,7 +1543,6 @@ $1',
 'http-read-error' => 'परिसंविद पठन भ्रम',
 'http-timed-out' => 'परिसंविद आग्रह कालातीत',
 'http-curl-error' => 'भ्रम निकालैबला सार्वत्रिक विभव संकेत:$1',
-'http-host-unreachable' => 'सार्वत्रिक विभव संकेत नै पाबि सकल',
 'http-bad-status' => 'परिसंविद आग्रह काल एकटा समस्या छल: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1860,15 +1848,6 @@ $1',
 'listusers-noresult' => 'कोनो प्रयोक्ता नै',
 'listusers-blocked' => '(प्रतिबन्धित)',
 
-# Special:ActiveUsers
-'activeusers' => 'सक्रिय प्रयोक्ता सभक सूची',
-'activeusers-intro' => 'ई ओहेन प्रयोक्ता सभक सूची अछि जे पछिला $1 {{PLURAL:$1|दिन|दिन}} मे किछु सक्रियता देखेने छथि।',
-'activeusers-count' => '$1 {{PLURAL:$1|सम्पादन|सम्पादन सभ}} paChilaa {{PLURAL:$3|दिन|$3 दिन}}',
-'activeusers-from' => 'प्रयोक्ता प्रदर्शन प्रारम्भ भेल:',
-'activeusers-hidebots' => 'स्वचालन नुकाउ',
-'activeusers-hidesysops' => 'संचालक नुकाउ',
-'activeusers-noresult' => 'कोनो प्रयोक्ता नै भेटल',
-
 # Special:ListGroupRights
 'listgrouprights' => 'प्रयोक्ता संवर्ग अधिकार',
 'listgrouprights-summary' => 'ई सभ प्रयोक्ता संवर्गक एकटा सूची अछि जे ऐ विकीपरपरिभाषित अछि ओकर संसर्गित प्रवेश अधिकारक संग।
@@ -2679,9 +2658,6 @@ $1 एकर प्रतिबन्धक कारण अछि : "$2"',
 'pageinfo-authors' => 'भिन्न लेखक संख्या',
 
 # Skin names
-'skinname-standard' => 'प्राचीन',
-'skinname-nostalgia' => 'गामसँ प्रेम',
-'skinname-simple' => 'साधारण',
 'skinname-modern' => 'आधुनिक',
 'skinname-vector' => 'सदिश',
 
@@ -2770,8 +2746,6 @@ $1',
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-cn' => 'cn',
index 0f67655..2c3ca64 100644 (file)
@@ -46,8 +46,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Tidhokna jumlah pangawas',
 'tog-oldsig' => 'Tapak asma sekiye:',
 'tog-fancysig' => 'Tapak asma dianggep dadi teks wiki (ora nganggo pranala otomatis)',
-'tog-externaleditor' => 'Gunakna editor eksternal sekang gawan (kanggo sing ahli thok, merlokna setelan kusus neng komputeré rika. [//www.mediawiki.org/wiki/Manual:External_editors Informasi selengkapé.])',
-'tog-externaldiff' => 'Gunakna diff eksternal sekang gawan (kanggo sing ahli thok, merlokna setèlan kusus nang komputeré rika. [//www.mediawiki.org/wiki/Manual:External_editors Informasi selengkapé.])',
 'tog-showjumplinks' => 'Aktifna pranala pitulung "mlumpat maring"',
 'tog-uselivepreview' => 'Gunakna pratayang langsung (mbutuhna JavaScript) (egin jajalan)',
 'tog-forceeditsummary' => 'Emutna inyong anggere durung ngisi kotak ringkesan suntingan',
index f43f755..7d7d374 100644 (file)
@@ -247,8 +247,6 @@ $messages = array(
 'tog-shownumberswatching' => "Asehoy ny isan'ny mpikambana manara-maso ny pejy",
 'tog-oldsig' => "Topi-mason'ny sonia :",
 'tog-fancysig' => 'Sonia tsotra (tsy misy rohy)',
-'tog-externaleditor' => "Hampiasa mpanova soratra ivelany (ho an'ny mpikambana havanana ihany, mila fampifanarahana manokana eo amin'ny mpikajinao [//www.mediawiki.org/wiki/Manual:External_editors Fampahalalana fanampiny.])",
-'tog-externaldiff' => "Hampiasa mpampitaha ivelany (ho an'ny mpikambana havanana ihany, mila fampifanarahana manokana eo amin'ny mpikajinao [//www.mediawiki.org/wiki/Manual:External_editors Fampahalalana fanampiny.])",
 'tog-showjumplinks' => 'Ampiasao ny rohy "handeha eto"',
 'tog-uselivepreview' => 'Ampesao ny topi-maso maikamaika (mila Javascript) (mbola am-panandramana)',
 'tog-forceeditsummary' => 'Teneno ahy ra tsy nametraka ny ambangovangony',
@@ -373,7 +371,7 @@ $messages = array(
 'vector-action-protect' => 'Arovy',
 'vector-action-undelete' => 'Avereno',
 'vector-action-unprotect' => 'Hanala ny fiarovana',
-'vector-simplesearch-preference' => "Alefa ny soso-kevitra mikasika ny fikarohana (ho an'ny Vector ihany)",
+'vector-simplesearch-preference' => "Hampiasa ny bara fikarohana notsorina (ho an'ny skin Vector ihany)",
 'vector-view-create' => 'Foronona',
 'vector-view-edit' => 'Hanova',
 'vector-view-history' => 'Hijery ny tantara',
@@ -575,6 +573,8 @@ Mihidy ho azy aloha ny banky angona mandra-pahatratran'ny serveur andevo ny tomp
 'cannotdelete' => "Tsy afaka fafàna ny pejy na ny rakitra « $1 ».
 Mety efa nataon'ny hafa angamba ny famafàna.",
 'cannotdelete-title' => 'Tsy afaka mamafa ny pejy "$1"',
+'delete-hook-aborted' => "Famafana nofoanan'ny itatra.
+Tsy nanome fanazavana.",
 'badtitle' => 'Tsy mety ny lohateny',
 'badtitletext' => "Tsy mety io anaram-pejy nangatahinao io na tsy misy n'inon'inona na rohy dikan-teny vahiny misy diso tsipelina.",
 'perfcached' => "Ao amin'ny voatakona ireo data manaraka ireo ary mety tsy voavao. $1{{PLURAL:}} ihany no isan'ireo zavatra voatahiry ao amin'ny voatakona",
@@ -608,8 +608,13 @@ $2',
 'ns-specialprotected' => "Tsy afaka ovaina ny pejy anatin'ny toeran'anarana « {{ns:special}} » .",
 'titleprotected' => "Voaaron'i [[User:$1|$1]] ity lohateny ity mba tsy hamorona pejy mitondra ity anarana ity.
 Ny antony napetraka dia : « ''$2'' ».",
+'filereadonlyerror' => 'Tsy afaka manova ny rakitra "$1" satria famakiana ihany no tao azo atao amin\'i "$2".
+
+Ny antony nomen\'ny mpandrindra nanidy azy: "$3".',
 'invalidtitle-knownnamespace' => 'Lohateny tsy miady amin\'ny fepetra miaraka amin\'ny anaram-balam-pejy "$2" ary soratra "$3"',
+'invalidtitle-unknownnamespace' => 'Lohateny tsy ekena miaraka amin\'ny laharana anaran-tsehatra $1 ary soratra "$2"',
 'exception-nologin' => 'Tsy tafiditra',
+'exception-nologin-text' => "Mila tafiditra eo amin'ilay wiki vao afaka manao ilay tao.",
 
 # Virus scanner
 'virus-badscanner' => "Diso : Tsy fantatray ny mpitady virus ''$1''",
@@ -692,7 +697,8 @@ Azafady midira rehefa voarainao io imailaka io.',
 Efa nandefasana imailaka fanamarinana ilay adiresy nomenao.
 Alohan'ny handraisanao imailaka hafa, dia araho ny torolalana ao anatin'io imailaka io,
 mba hanaporofoana fa anao io kaonty io.",
-'throttled-mailpassword' => "Nandefa imailaka mety mampatadidy anao ny tenimiafinao izahay nandrintra ny $1 ora farany. Mba tsy hanararaotra, imailaka iray ihany no azo alefa isakin'ny ady ny $1{{PLURAL:}}",
+'throttled-mailpassword' => "Efa nandefasana mailaka famerenana tenimiafiana ianao tanatin'ny {{PLURAL:$1|ora|$1 ora}}.
+Mba tsy hisian'ny fanararaotana dia mailaka famerenana tenimiafiana iray ihany no azo ampiasaina isaky ny adin'ny $1{{PLURAL:}}.",
 'mailerror' => "Nisy olana tamin'ny fandefasana imailaka: $1",
 'acct_creation_throttle_hit' => 'Miala tsiny, efa nanokatra kaonty miisa $1 ianao, ka tsy afaka mamorona hafa intsony.{{PLURAL:}}',
 'emailauthenticated' => "Voamarina tamin'ny $2 $3 ny adiresy imailakao.",
@@ -740,21 +746,22 @@ Mety efa nanova tenimiafina na nanontany tenimiafina miserana angamba ianao.',
 
 # Special:PasswordReset
 'passwordreset' => 'Famafana ary famerenana ny tenimiafina',
-'passwordreset-text' => "Fenoy ity formilera ity ho an'ny fahaozana ny fampahalalana mahakasika ny kaontinao amin'ny imailaka.",
+'passwordreset-text' => 'Fenoy ity fôrmiolera ity mba hamerenana ny tenimiafinao.',
 'passwordreset-legend' => 'Famafana ary famerenana ny tenimiafina',
 'passwordreset-disabled' => "Tsy nalefa ny fanovana tenimiafina adino eto amin'ity wiki ity.",
 'passwordreset-pretext' => '{{PLURAL:$1}}Mampidira singa data eo ambany',
 'passwordreset-username' => 'Anaram-pikambana :',
 'passwordreset-domain' => 'Vala (domain) :',
 'passwordreset-capture' => 'Hijery ny imailaka vokany ?',
+'passwordreset-capture-help' => "Raha marihanao ity boaty ity, ny mailaka (miaraka amin'ilay tenimiafina vonjimaika) dia ho aseho aminao ary koa ho alefa amin'ilay mpikambana.",
 'passwordreset-email' => 'Adiresy imailaka :',
 'passwordreset-emailtitle' => "Antsipirihan'ny kaonty eo amin'i {{SITENAME}}",
-'passwordreset-emailtext-ip' => "Nisy olona (mety ianao ihany angamba, avy amin'ity adiresy IP ity: $1) nangataka fampahalalana manokana mikasika ny kaontinao eo amin'i {{SITENAME}} ($4). {{PLURAL:$3|Ity|Ireto}} adiresy imailaka {{PLURAL:$3|Ity|Ireto}} dia mampiasa ity adiresy imailaka ity :
+'passwordreset-emailtext-ip' => "Nisy olona (izay mety ianao, avy amin'ny adiresy IP $1) nangataka ny hamerina ny tenimiafin'ny kaontim-pikambany ho an'i {{SITENAME}} ($4). Mampiasa ity adiresy mailaka ity {{PLURAL:$3|ity kaontim-pikambana mpikambana io|ireo kaontim-mpikambana ireo}}:
 
 $2
 
-{{PLURAL:$3|Io|Ireo}} ny tenimiafina miserana mitsahatra afaka {{PLURAL:$5|iray andro|$5 andro}}.
-Tokony miditra ianao ary misafidy ny tenimiafinao. Raha olon-kafa no nanao ity hataka ity, na efa tadidinao ny tenimiafinao taloha, ary raha tsy tia hanova azy intony ianao, azonao tsy raharahiana ity hafatra ity ary mbola azonao ampiasaina ilay tenimiafinao taloha.",
+Hitsahatra afaka $5 andro {{PLURAL:$3|io tenimiafina io|ireo tenimiafina ireo}}.
+Tokony miditra ianao ary mifidy tenimiafina vaovao. Raha misy olon-kafa nanao ity hataka ity, na efa tadidinao indray ilay tenimiafinao taloha, ary raha tsy tia hanova azy intsony, azonao tsy raharahiana ity hafatra ity ary mitohy mampiasa ny tenimiafinao taloha.",
 'passwordreset-emailtext-user' => "Nisy mpikambana mitondra anarana $1 eo amin'i {{SITENAME}} nangataka fampatsiahivana mikasika ny kaontinao eo amin'i {{SITENAME}} ($4). Manana io adiresy imailaka {{PLURAL:$3|io kaontim-pikambana io|ireo kaontim-pikambana ireo}} :
 
 $2
@@ -762,9 +769,9 @@ $2
 Hitsahatra afaka {{PLURAL:$5|iray|$5}} andro {{PLURAL:$3|io|ireo}} tenimiafina {{PLURAL:$3|io|ireo}}. Mila miditra dien'izao ianao izao ary mifidy tenimiafina vaovao. Raha tsy avy aminao ity hataka ity na efa nahatadidy ny tenimiafinao taloha ianao, ary raha tsy tianao hovaina intsony ilay tenimiafinao, dia azonao tsy raharahiana ity hafatra ity ary mampiasa ny tenimiafinao taloha.",
 'passwordreset-emailelement' => 'Anaram-pikambana : $1
 Tenimiafina miserana : $2',
-'passwordreset-emailsent' => 'Nalefa ny imailaka fampatsiahivana.',
-'passwordreset-emailsent-capture' => 'Lasa ilay imailaka fahatadidiana, izay aseho eo ambany.',
-'passwordreset-emailerror-capture' => "Voaforona ilay imailaka fitadidiana, izay aseho eo ambany, fa tsy nahomby anefa ny fandefasana azy any amin'ny mpikambana : $1",
+'passwordreset-emailsent' => 'Lasa ny mailaka famerenana tenimiafina.',
+'passwordreset-emailsent-capture' => 'Lasa ilay mailaka famerenana tenimiafina, izay aseho eo ambany.',
+'passwordreset-emailerror-capture' => "Nosoratana ilay mailaka famerenana tenimiafina, izay aseho eo ambany, fa tsy lasa any amin'ilay mpikambana ilay izy : $1",
 
 # Special:ChangeEmail
 'changeemail' => 'Hanova ny adiresy imailaka',
@@ -869,6 +876,9 @@ Azonao atao ny [[Special:Search/{{PAGENAME}}|Tadiavo ny momba ny {{PAGENAME}}]].
 'noarticletext-nopermission' => "Mbola tsy misy lahatsoratra ao amin'io pejy io.
 
 Azonao atao ny [[Special:Search/{{PAGENAME}}|mikaroka ity lohateny ity]] eny amin'ny pejy hafa na <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mitady ao amin'ny laogy misy fifandraisana]</span>, fa tsy azonao atao ny mamorona ity pejy ity.",
+'missing-revision' => 'Tsy misy ny santiôna #$1 ny pejy "{{PAGENAME}}".
+
+Mitranga izany rehefa manaraka rohin-tantara tola mankany amina pejy voafafa. Ahitana fampahalalana fanampiny ny  [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogim-pamafana].',
 'userpage-userdoesnotexist' => 'Mbola tsy nisoratra anarana ato i « <nowiki>$1</nowiki> ». Marino raha tena hamorona ity pejy ity ianao.',
 'userpage-userdoesnotexist-view' => 'Tsy nisoratra anarana ato i « $1 ».',
 'blocked-notice-logextract' => "Ankehitriny ity mpikambana ity dia voasakana.
@@ -991,6 +1001,7 @@ Ao aorian'ny fivelarana, mety namoaka valy lava loatra angamba izy, ary tsy namp
 'expansion-depth-exceeded-category' => 'Pejy manana halalim-panitarana mihoatra',
 'expansion-depth-exceeded-warning' => 'Pejy manana halalim-panitarana mihoatra',
 'parser-unstrip-loop-warning' => 'Nahitana tondro mifolaka tsy azo vahana',
+'converter-manual-rule-error' => "Nahitana hadisoana ao amin'ny fepetra famadihana tanana ny fiteny.",
 
 # "Undo" feature
 'undo-success' => 'Ho voafafa io fanovana io. Marino tsara ny fanovana eo ambany, ary tehirizo rehefa vita.',
@@ -1179,6 +1190,7 @@ $3 santiôna{{PLURAL:}} natsonika tamin'ny [[:$2]]",
 'showhideselectedversions' => 'Aseho/asitrika ireo ny santiôna nofidiana',
 'editundo' => 'esory',
 'diff-multi' => "({{PLURAL:$1|Famerenana tokana|Famerenana $1}} nataon'ny {{PLURAL:$2|mpikambana iray|mpikambana $2}} tsy miseho)",
+'diff-multi-manyusers' => "Tsy naseho ny antiôna $1{{PLURAL:}} nataon'ny mpikambana $2.",
 
 # Search results
 'searchresults' => 'Valim-pikarohana',
@@ -1222,7 +1234,7 @@ $3 santiôna{{PLURAL:}} natsonika tamin'ny [[:$2]]",
 'search-interwiki-default' => "Valiny amin'ny $1 :",
 'search-interwiki-more' => '(be kokoa)',
 'search-relatedarticle' => 'voadinika',
-'mwsuggest-disable' => 'Aza atao ny toro-hevitra AJAX',
+'mwsuggest-disable' => 'Tsy hampiasa ny toro-hevi-pikarohana AJAX',
 'searcheverything-enable' => "Hitady anatin'ny anaran-tsehatra rehetra:",
 'searchrelated' => 'voadinika',
 'searchall' => 'rehetra',
@@ -1245,15 +1257,6 @@ ihany no miseho amin'ny vokatry ny karoka).",
 'search-external' => 'Hikaroka any ivelany',
 'searchdisabled' => "Tsy nalefa ny karoka eto amin'i {{SITENAME}}. Afaka mampiasa an'i Google aloha ianao mandra-paha. Nefa fantaro fa mety ho efa lany daty ny valiny omeny.",
 
-# Quickbar
-'qbsettings' => 'Tsipika fiasàna',
-'qbsettings-none' => 'Tsy misy',
-'qbsettings-fixedleft' => 'Ankavia',
-'qbsettings-fixedright' => 'Ankavanana',
-'qbsettings-floatingleft' => 'Mitsingevaheva any ankavanana',
-'qbsettings-floatingright' => 'Mitsigevaheva any ankavanana',
-'qbsettings-directionality' => "Tsy mihetsika, arakaraky ny fizotran'ny soratra amin'ny teninao (avy any havanana miankavia, na avy any havia miankavanana)",
-
 # Preferences page
 'preferences' => 'Ny momba anao',
 'mypreferences' => 'Safidy',
@@ -1291,6 +1294,7 @@ ihany no miseho amin'ny vokatry ny karoka).",
 'columns' => 'Tsanganana/Tioba :',
 'searchresultshead' => 'Fikarohana',
 'resultsperpage' => "Isa ny valiny isakin'ny pejy :",
+'stub-threshold' => 'Fetra ambony ho an\'i <a href="#" class="stub">rohim-bangovango</a> (oktety):',
 'stub-threshold-disabled' => 'Tsy alefa',
 'recentchangesdays' => "Isa ny andro ho ampiseho eo amin'ny fanovàna farany",
 'recentchangesdays-max' => '($1 andro{{PLURAL:$1||}} fara-faha betsany)',
@@ -1339,6 +1343,7 @@ Fenoy araka ny datin'ny solosainan'ny mpitsidika",
 'yourrealname' => 'Tena anarana marina:',
 'yourlanguage' => 'Tenim-pirenena:',
 'yourvariant' => 'fitenim-paritry ny fitenim-botoatiny :',
+'prefs-help-variant' => "Ny karazan-tsipelina tianao ho ampiasain'ny pejim-botoatiny",
 'yournick' => 'Anaram-bositra:',
 'prefs-help-signature' => 'Ilaina soniavina amin\'ny "<nowiki>~~~~</nowiki>" ny resaka eo amin\'ny pejin-dresaka izay hametraka ny sonianao ary ny daty nanoratanao.',
 'badsig' => 'Tsy mety io sonia io; hamarino ny kialo HTML.',
@@ -1379,7 +1384,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'userrights-lookup-user' => 'Handrindra vondrom-pikambana',
 'userrights-user-editname' => 'Manomeza solonanarana:',
 'editusergroup' => "Hanova satan'ny mpikambana",
-'editinguser' => "Fanovana ny zon'ny mpikambana '''[[user:$1|$1]]''' $2",
+'editinguser' => "Fanovana ny zon'ny mpikambana '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup' => 'Hanova vondrom-pikambana',
 'saveusergroups' => 'Tehirizo ny vondrom-pikambana',
 'userrights-groupsmember' => "Mpikambana amin'ny vondrona:",
@@ -1583,6 +1588,9 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'upload_directory_missing' => "Ny petra-drakitra ampidiran-drakitra ($1) dia tsy misy ary tsy afaka namboarin'ny lohamilin-tranonkala.",
 'upload_directory_read_only' => "Ny répertoire ($1) handraisana ny rakitra alefan'ny mpikambana dia tsy afaka anoratana.",
 'uploaderror' => 'Nisy tsy fetezana ny fandefasana rakitra',
+'upload-recreate-warning' => "'''Tandremo : novain-toerana na nofafana ny rakitra mitondra io anarana io.'''
+
+Aseho eo ambany ho fampahalalana fanampiny ny iditra ao amin'ny laogim-panisahana ary ny laogim-pamafana :",
 'uploadtext' => "Ampiasao ity fisy ity handefasana rakitra. Jereo eto ny [[Special:FileList|lisitry ny rakitra]] nalefan'ny mpikambana, na koa azonao ampiasaina ny [[Special:Log/delete|tantaran'asan'ny fandefasana sy famonoana rakitra]].
 
 Raha hanisy sary ao anaty pejy, dia mampiasà rohy toy ny iray amin'ireto
@@ -1781,7 +1789,6 @@ ity wiki ity dia no-regler-na ho sarababem-bahoaka.",
 'http-read-error' => "Tsy fetezana momban'ny famakiana HTTP.",
 'http-timed-out' => 'Ny fangatahana HTTP dia efa lany daty.',
 'http-curl-error' => 'Tsi-fetezana teo am-pangalana ny URL : $1',
-'http-host-unreachable' => 'URL tsy afaka andehanana',
 'http-bad-status' => 'Nisy tsi-fetezana teo ampandefasana ny hataka HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2005,6 +2012,7 @@ wiki ity aza izy.</p>",
 'pager-newer-n' => '$1 {{PLURAL:$1|vao haingana|vao haingana}}',
 'pager-older-n' => '$1 {{PLURAL:$1|taloha|taloha}}',
 'suppress' => 'Hitondra',
+'querypage-disabled' => 'Tsy ampiasaina ity pejy manokana ity mba hitsitsy ny solosaina',
 
 # Book sources
 'booksources' => 'boky tsiahy',
@@ -2076,17 +2084,11 @@ Protokoly zaka <code>$1</code> aza ampiana ao amin'ny karokao izy ireo.",
 'listusers-noresult' => 'Tsy nahitana mpikambana.',
 'listusers-blocked' => '(voasakana)',
 
-# Special:ActiveUsers
-'activeusers' => 'Lisitry ny mpikambana mavitrika',
-'activeusers-intro' => 'Ity ny lisitry ny mpikambana izay nanao zavatra iray nandritry ny andro $1 farany. {{PLURAL:}}',
-'activeusers-count' => "Nanova in-$1 tao anatin'ny $3 andro{{PLURAL:}}",
-'activeusers-from' => 'Aseho ny mpikambana hatry ny :',
-'activeusers-hidebots' => 'Asitriho ny robo',
-'activeusers-hidesysops' => 'Asitriho ny mpandrindra',
-'activeusers-noresult' => 'Tsy nahitana mpikambana.',
-
 # Special:ListGroupRights
 'listgrouprights' => "Fahefan'ny vondrom-pikambana",
+'listgrouprights-summary' => "Ity pejy ity dia ahitana ny lisitry ny vondrom-pikambana voafaritra ato amin'ity wiki ity ary ny zo ananany. Mety misy [[{{MediaWiki:Listgrouprights-helppage}}|fampahalalana fanampiny]] mikasika ny zo manokana.",
+'listgrouprights-key' => '* <span class="listgrouprights-granted">Zo nomena</span>
+* <span class="listgrouprights-revoked">Zo nofoanana</span>',
 'listgrouprights-group' => 'Vondrona/Gropy',
 'listgrouprights-rights' => 'Fahefana miaraka aminy',
 'listgrouprights-helppage' => "Help:Fahefan'ny vondrona",
@@ -2107,10 +2109,7 @@ Protokoly zaka <code>$1</code> aza ampiana ao amin'ny karokao izy ireo.",
 'emailuser-title-target' => "Handefa mailaka any amin'ity mpikambana ity{{GENDER:$1}}",
 'emailuser-title-notarget' => "Handefa imailaka an'ilay mpikambana",
 'emailpage' => 'Andefaso imailaka io mpikambana io',
-'emailpagetext' => "Raha nametraka adiresy tena miasa tao amin'ny [[Special:Preferences|mombamomba azy io mpikambana io]],
-dia ahafahana mandefa hafatra tokana ho any aminy ity fisy eto ambany ity.
-Ny adiresy imailakao napetrakao tao amin'ny mombamomba anao no hiseho hoe
-adiresin'ny mpandefa izany imailaka izany, koa afaka hovaliany izay hafatra alefanao.",
+'emailpagetext' => 'Azonao ampiasaina io fôrmiolera eo ambany io mba handefa mailaka mankany amin\'ny mpikambana $1. Ho ao amin\'ny saha "Mpandefa" (Expéditeur) ny adiresy mailakao ka ho afaka hamaly anao avy hatrany ilay mpandray ny hafatra.',
 'usermailererror' => "Misy tsy mety amin'ny lohatenin'ny imailaka:",
 'defemailsubject' => '{{SITENAME}} Mailaky ny mpikambana "$1"',
 'usermaildisabled' => 'Tsy azo mifandefa imailaka ny mpikambana',
@@ -2141,7 +2140,7 @@ na tsy maniry handray imailaka avy amin'ny mpikambana hafa izy.",
 'usermessage-editor' => 'Mpampita hafatry ny rindrankajy',
 
 # Watchlist
-'watchlist' => 'Narahiko maso',
+'watchlist' => 'Pejy arahako',
 'mywatchlist' => 'Pejy arahana',
 'watchlistfor2' => "Ho an'i $1 $2",
 'nowatchlist' => 'Tsy manaraka pejy ianao.',
@@ -2149,11 +2148,7 @@ na tsy maniry handray imailaka avy amin'ny mpikambana hafa izy.",
 'watchnologin' => 'Tsy niditra',
 'watchnologintext' => 'Mila [[Special:UserLogin|miditra]] ianao vao afaka manova ny lisitry ny pejy arahanao.',
 'addwatch' => "Ampiana ao amin'ny pejy arahana",
-'addedwatchtext' => "Tafiditra anatin'ny lisitry ny [[Special:Watchlist|Pejy arahanao maso]] ny pejy \"[[:\$1]]\".
-Ny fanovana hisy amin'io pejy io sy ny pejin-dresaka miaraka aminy dia hiseho ao,
-ary rehefa miseho ao amin'ny [[Special:RecentChanges|lisitry ny pejy vao niova]] io pejy io dia hatao ''matavy'' mba hahamora ny fahitana azy.
-
-Aoriana, raha irinao ny hanaisotra azy ao amin'ny pejy arahanao maso, dia tsindrio ilay hoe \"aza arahi-maso intsony\" etsy amin'ny sisiny etsy.",
+'addedwatchtext' => 'Voalisitra ao amin\'ny [[Special:Watchlist|pejy arahanao]] ilay pejy "[[:$1]]". Ny fanovana ho avy ao amin\'ilay pejy ary ao amin\'ilay pejin-dresaka dia ho voalisitra any.',
 'removewatch' => "Alàna amin'ny pejy arahana",
 'removedwatchtext' => 'Tsy [[Special:Watchlist|arahanao]] intsony ny pejy [[:$1]].',
 'watch' => 'Arahana',
@@ -2269,6 +2264,9 @@ miverina any amin'ny santiôna farany nataon'i $2.",
 
 # Edit tokens
 'sessionfailure-title' => 'Tsi-fetezaka mikasika ny kaonty idirana',
+'sessionfailure' => 'Ohatry ny misy olana ny fidirana amin\'ny kaontinao ; 
+nofoanana ilay tao mba tsy hisy fanodinana fotaom-pidirana (session).
+Tsindrio "Mialoha" ary vaozy ilay pejy niavianao ary andramo fanindroany.',
 
 # Protect
 'protectlogpage' => 'Tatitr’asa momban’ny fiarovana',
@@ -2279,7 +2277,7 @@ Ho ann'y fanazavana fanampiny, jereo [[Special:ProtectedPages|ny lisitry ny pejy
 'unprotectedarticle' => "nanala ny fiarovana an'i « [[$1]] »",
 'movedarticleprotection' => 'nanova ny safidim-piarovana : « [[$2]] » lasa « [[$1]] »',
 'protect-title' => "Hanova ny lentam-piarovana ho an'i « $1 »",
-'protect-title-notallowed' => "Hijery ny lentam-piarovana ho an'i « [[$1]] »",
+'protect-title-notallowed' => "Hijery ny lentam-piarovana ho an'i «[[$1]]»",
 'prot_1movedto2' => '[[$1]] voaova anarana ho [[$2]]',
 'protect-badnamespace-title' => 'Anaran-tsehatra tsy azo arovana',
 'protect-badnamespace-text' => "Tsy afaka arovana ny pejy ao amin'io anaran-tsehatra io.",
@@ -2298,9 +2296,9 @@ Ity ny reglajy ny pejy  '''$1'''",
 Ity ny réglage ny pejy '''$1''' :",
 'protect-cascadeon' => "Voaaro ity pejy ity ankehitriny noho ny fisiany anatin'{{PLURAL:$1|ity pejy voaaro ity|ireo pejy voaaro ireo}} miaraka amin'ny « fiarovana an-driana » (protection en cascade). Azonareo ovaina ny fiarovan'ity pejy ity fa tsy ho voakasika ny fiarovana an-driana.",
 'protect-default' => 'Avela daholo ny mpikambana',
-'protect-fallback' => 'Mila manana sata « $1 »',
-'protect-level-autoconfirmed' => 'Sakano ny mpikambana vaovao sy ny mpikambana tsy nisoratra anarana',
-'protect-level-sysop' => 'Sysops ihany',
+'protect-fallback' => 'Hanome alalana ny mpikambana manana ny zo "$1"',
+'protect-level-autoconfirmed' => 'Hanome alalana ny mpikambana voamarina',
+'protect-level-sysop' => 'Hanome alalana ny mpandrindra ihany',
 'protect-summary-cascade' => 'Fiarovana an-driana',
 'protect-expiring' => "Miala amin'ny $1",
 'protect-expiring-local' => 'mitsahatra ny $1',
@@ -2339,6 +2337,7 @@ Ity ny réglage ny pejy '''$1''' :",
 # Undelete
 'undelete' => 'Jereo ny pejy voafafa',
 'undeletepage' => 'Hijery sy hamerina ny pejy efa voafafa',
+'undeletepagetitle' => "'''Ahitana ny santiôna voafafan'i [[:$1|$1]] ity lisitra manaraka.'''",
 'viewdeletedpage' => 'Hijery ny pejy efa nofafana',
 'undeletepagetext' => "Ireto pejy ireto dia efa voafafa nefa mbola voatahiry ao amin'ny tahiry ihany,
 ary mbola afaka averina, mandra-pifafan'ny tahiry. Mety ho voafafa matetitetika
@@ -3313,4 +3312,47 @@ Aseho amin'ny tena habeny ny sary aseho, ny hafa dia alefa miaraka amin'ny rindr
 'logentry-rights-autopromote' => 'Lasa $5 ho azy i $1 izay $4 taloha',
 'rightsnone' => '(tsy misy)',
 
+# Feedback
+'feedback-subject' => 'Lohahevitra:',
+'feedback-message' => 'Hafatra:',
+'feedback-cancel' => 'Foanana',
+'feedback-submit' => 'Handefa ny fanehoan-kevitra',
+'feedback-adding' => "Manampy ny fahenoan-kevitra amin'ilay pejy...",
+'feedback-error1' => "Hadisoana: Valiny avy amin'ny API tsy fantatra",
+'feedback-error2' => 'Hadisoana: Tsy voaòva',
+'feedback-error3' => "Hadisoana: Tsy nisy valiny avy amin'ny API",
+'feedback-thanks' => "Misaotra! lanefa tany amin'ilay pejy ''[$2 $1]'' ilay fanehoan-kevitrao.",
+'feedback-close' => 'Vita',
+
+# API errors
+'api-error-empty-file' => 'Tsy misy na inona na inna ilay rakitra nalefanao.',
+'api-error-emptypage' => 'Tsy azo atao ny mamorona pejy vaovao tsy misy votoatiny.',
+'api-error-fetchfileerror' => 'Hadisoana naaty : misy hadisoana nitranga teo am-pangalana ilay rakitra.',
+'api-error-file-too-large' => 'Lehibe loatra ny rakitra nalefanao.',
+'api-error-filename-tooshort' => "Fohy loatra ny anaran'ilay rakitra.",
+'api-error-filetype-banned' => 'Voarara io karazan-drakitra io.',
+'api-error-filetype-missing' => 'Tsy ampy tovana ilay anaran-drakitra.',
+'api-error-hookaborted' => "Najanon'ny faraingon'itatra ny fanovana nandramanao natao.",
+'api-error-http' => "Hadisoana anaty: Tsy tafaray tamin'ilay lohamilina.",
+'api-error-illegal-filename' => 'Tsy azo ampiasaina io anaran-drakitra io.',
+'api-error-internal-error' => 'Hadisoana anaty: Nisy hadisoana nitranga teo am-pikajikajiana ny rakitrao',
+'api-error-invalid-file-key' => "Hadisoana anaty: Tsy hita tao amin'ilay tahiry vonjimaika ilay rakitra.",
+'api-error-missingparam' => "Hadisoana anaty: Parametatra tsy ampy ao amin'ny hataka.",
+'api-error-missingresult' => 'Hadisoana anaty: Tsy afaka milaza izahay raha tena nahomby ilay fandikana.',
+'api-error-mustbeloggedin' => 'Mila tafiditra ianao mba handefa rakitra.',
+'api-error-mustbeposted' => 'Hadisoana anaty: Mila HTTP POST ilay hataka.',
+'api-error-noimageinfo' => 'Nahomby ilay fandikana, fa tsy nanome antsika fampahalalana mikasika ilay raktira ilay lohamilina.',
+'api-error-nomodule' => 'Hadisoana anaty: Tsy namaritra joro fandefasana.',
+'api-error-ok-but-empty' => "Hadisoana anaty: Tsy nisy valiny avy amin'ilay lohamilina.",
+'api-error-overwrite' => 'Tsy azo atao ny manitsaka rakitra efa misy.',
+'api-error-stashfailed' => 'Hadisoana anaty: Tsy nahomby ny fitahirizana ilay rakitra vonjimaika ilay lohamilina.',
+'api-error-timeout' => "Tsy namaly tanatin'ny fe-potoana nandrasana ilay lohamilina.",
+'api-error-unclassified' => 'Nisy hadisoana tsy fantatra nitranga.',
+'api-error-unknown-code' => "Hadisoana tsy fantatra : ''$1''.",
+'api-error-unknown-error' => 'Hadisoana anaty: Nisy hadisoana tam-pandefasana ny rakitrao.',
+'api-error-unknown-warning' => "Fampitandremana tsy fantatra : ''$1''.",
+'api-error-unknownerror' => "Hadisoana tsy fantatra : ''$1''.",
+'api-error-uploaddisabled' => "Tsy alefa eto amin'ity wiki ity ny fandefasan-drakita.",
+'api-error-verification-error' => 'Mety tapaka ity rakitra ity, na diso tovan-drakitra.',
+
 );
index ed3d6f4..7374f76 100644 (file)
@@ -54,8 +54,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Tunjuakkan jumlah pamantau',
 'tog-oldsig' => 'Tando tangan kini:',
 'tog-fancysig' => 'Jadikan tando tangan manjadi teks wiki (indak jo tautan otomatis)',
-'tog-externaleditor' => 'Gunokan editor dari lua sacaro bawaan (untuak nan ahli sajo, butuah pangaturan khusus di komputer Sanak [//www.mediawiki.org/wiki/Manual:External_editors Informasi labiah lanjuik.])',
-'tog-externaldiff' => 'Gunokan diff eksternal sacaro bawaan (untuak nan ahli sajo, kabutuahan pangaturan khusus pado komputer Sanak [//www.mediawiki.org/wiki/Manual:External_editors Informasi labiah lanjuik.].)',
 'tog-showjumplinks' => 'Aktifkan pautan bantuan "langsuang ka"',
 'tog-uselivepreview' => 'Gunoan pratonton langsuang (JavaScript) (eksperimental)',
 'tog-forceeditsummary' => 'Ingekan ambo bilo kotak ikhtisar suntiangan kosong',
@@ -69,6 +67,7 @@ $messages = array(
 'tog-diffonly' => 'Jan tampilan isi laman di bawah pabedoan suntiangan',
 'tog-showhiddencats' => 'Tampilan kategori tasambunyi',
 'tog-norollbackdiff' => 'Jan tampilan pabedoan sasudah malakukan pangambalian',
+'tog-useeditwarning' => 'Ingekan denai kok denai maninggakan laman suntiang sabalun manyimpan parubahan',
 
 'underline-always' => 'Taruih',
 'underline-never' => 'Indak pernah',
@@ -139,14 +138,14 @@ $messages = array(
 'subcategories' => 'Subkategori',
 'category-media-header' => 'Laman/Media dalam kategori "$1"',
 'category-empty' => "''Kini ko, indak ado laman ataupun media dalam kategori ko.''",
-'hidden-categories' => '{{PLURAL:$1|Kategori tapandam}}',
-'hidden-category-category' => 'Kategori tasambunyi',
+'hidden-categories' => '{{PLURAL:$1|Kategori tasuruak}}',
+'hidden-category-category' => 'Kategori tasuruak',
 'category-subcat-count' => '{{PLURAL:$2|Kategori ko punyo {{PLURAL:$1|$1 subkategori}}, dari total $2.}}',
-'category-subcat-count-limited' => 'Kategori iko mamiliki {{PLURAL:$1|$1 subkategori}} barikuik.',
+'category-subcat-count-limited' => 'Kategori ko punyo {{PLURAL:$1|$1 subkategori}} barikuik.',
 'category-article-count' => '{{PLURAL:$2|Kategori ko punyo {{PLURAL:$1|$1 laman}}, dari total $2.}}',
-'category-article-count-limited' => 'Kategori iko mamiliki {{PLURAL:$1|$1 laman}} barikuik.',
-'category-file-count' => '{{PLURAL:$2|Kategori ko ado {{PLURAL:$1|$1 laman}}, dari $2 laman.}}',
-'category-file-count-limited' => 'Kategori iko mamiliki {{PLURAL:$1|$1 laman}} barikuik.',
+'category-article-count-limited' => 'Kategori ko punyo {{PLURAL:$1|$1 laman}} barikuik.',
+'category-file-count' => '{{PLURAL:$2|Kategori ko ado {{PLURAL:$1|$1 berkas}}, dari total $2 berkas.}}',
+'category-file-count-limited' => 'Kategori ko ado {{PLURAL:$1|$1 berkas}} barikuik.',
 'listingcontinuesabbrev' => 'samb.',
 'index-category' => 'Laman nan diindeks',
 'noindex-category' => 'Laman nan indak diindeks',
@@ -154,18 +153,18 @@ $messages = array(
 
 'about' => 'Perihal',
 'article' => 'Artikel',
-'newwindow' => '(bukak di jandela baru)',
+'newwindow' => '(bukak di jendela baru)',
 'cancel' => 'Batalkan',
 'moredotdotdot' => 'Lainnyo...',
 'morenotlisted' => 'Salabiahnyo...',
 'mypage' => 'Laman',
 'mytalk' => 'Maota',
 'anontalk' => 'Diskusi IP ko',
-'navigation' => 'Pinteh',
+'navigation' => 'Navigasi',
 'and' => '&#32;jo',
 
 # Cologne Blue skin
-'qbfind' => 'Pancarian',
+'qbfind' => 'Cari',
 'qbbrowse' => 'Jalajah',
 'qbedit' => 'Suntiang',
 'qbpageoptions' => 'Laman ko',
@@ -189,7 +188,7 @@ $messages = array(
 'vector-view-viewsource' => 'Caliak sumber',
 'actions' => 'Tindakan',
 'namespaces' => 'Ruang namo',
-'variants' => 'Varian:',
+'variants' => 'Variasi',
 
 'navigation-heading' => 'Menu navigasi',
 'errorpagetitle' => 'Kasalahan',
@@ -210,7 +209,7 @@ $messages = array(
 'edit' => 'Suntiang',
 'create' => 'Buek',
 'editthispage' => 'Suntiang laman ko',
-'create-this-page' => 'Buek laman iko',
+'create-this-page' => 'Buek laman ko',
 'delete' => 'Hapuih',
 'deletethispage' => 'Hapuih laman ko',
 'undelete_short' => 'Batal hapuih $1 {{PLURAL:$1|suntiangan}}',
@@ -226,11 +225,11 @@ $messages = array(
 'specialpage' => 'Laman istimewa',
 'personaltools' => 'Pakakeh pribadi',
 'postcomment' => 'Bagian baru',
-'articlepage' => 'Liek isi laman',
+'articlepage' => 'Lihek isi laman',
 'talk' => 'Rundiang',
 'views' => 'Caliak',
 'toolbox' => 'Kotak pakakeh',
-'userpage' => 'Liek laman pangguno',
+'userpage' => 'Lihek laman pangguno',
 'projectpage' => 'Caliak laman proyek',
 'imagepage' => 'Caliak laman berkas',
 'mediawikipage' => 'Caliak laman pasan',
@@ -245,7 +244,7 @@ $messages = array(
 'viewcount' => 'Laman ko lah dicaliak {{PLURAL:$1|$1 kali}}.',
 'protectedpage' => 'Laman nan dilinduangi',
 'jumpto' => 'Lompek ka:',
-'jumptonavigation' => 'pinteh',
+'jumptonavigation' => 'navigasi',
 'jumptosearch' => 'cari',
 'view-pool-error' => 'Maaf, server sadang kalabiahan baban.
 Banyak bana nan barusaho mancaliak laman ko.
@@ -254,7 +253,7 @@ Tunggu santa koq nio mancubo baliak ka laman ko.
 $1',
 'pool-timeout' => 'Abih wakatu',
 'pool-queuefull' => 'Antrian panuah',
-'pool-errorunknown' => 'Kasalahan nan indak dikatahui',
+'pool-errorunknown' => 'Kasalahan indak jaleh',
 
 # 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) and the disambiguation template definition (see disambiguations).
 'aboutsite' => 'Tantang {{SITENAME}}',
@@ -272,23 +271,23 @@ $1',
 'mainpage-description' => 'Palanta',
 'policy-url' => 'Project:Kabijakan',
 'portal' => 'Portal komunitas',
-'portal-url' => 'Portal:Komunitas',
+'portal-url' => 'Project:Portal komunitas',
 'privacy' => 'Kecipehan privasi',
 'privacypage' => 'Project:Kecipehan privasi',
 
 'badaccess' => 'Kasalahan hak akses',
-'badaccess-group0' => 'Sanak indak diizinkan untuak malakukan tindakan nan Sanak nio.',
-'badaccess-groups' => 'Tindakan nan Sanak nio dibatasi untuak pangguno dalam {{PLURAL:$2|kalompok}}: $1.',
+'badaccess-group0' => 'Sanak indak diizinkan untuak malakuan tindakan ko.',
+'badaccess-groups' => 'Tindakan nan Sanak nio babateh untuak pangguno dalam {{PLURAL:$2|kalompok}}: $1.',
 
-'versionrequired' => 'Dibutuahkan MediaWiki versi $1',
-'versionrequiredtext' => 'MediaWiki versi $1 dibutuahkan untuak manggunokan laman ko. Caliak [[Special:Version|versi laman]]',
+'versionrequired' => 'Dibutuahan MediaWiki versi $1',
+'versionrequiredtext' => 'MediaWiki versi $1 dibutuahan untuak manggunoan laman ko. Lihek [[Special:Version|versi laman]]',
 
 'ok' => 'OK',
 'pagetitle' => '$1 - {{SITENAME}} bahaso Minang',
 'pagetitle-view-mainpage' => '{{SITENAME}} bahaso Minang',
 'backlinksubtitle' => '← $1',
 'retrievedfrom' => 'Didapek dari "$1"',
-'youhavenewmessages' => 'Awak punyo $1 ($2).',
+'youhavenewmessages' => 'Sanak punyo $1 ($2).',
 'newmessageslink' => 'pasan baru',
 'newmessagesdifflink' => 'parubahan tarakhia',
 'youhavenewmessagesfromusers' => 'Sanak mandapek $1 dari {{PLURAL:$3|$3 pangguno}} ($2)',
@@ -313,18 +312,18 @@ $1',
 'feedlinks' => 'Umpan:',
 'feed-invalid' => 'Tipe pamintaan umpan indak tapek.',
 'feed-unavailable' => 'Sindikasi umpan indak tasadio',
-'site-rss-feed' => '$1 Umpan RSS',
-'site-atom-feed' => 'Umpan Atom $1',
-'page-rss-feed' => 'Umpan RSS "$1"',
+'site-rss-feed' => '$1 umpan RSS',
+'site-atom-feed' => '$1 umpan Atom',
+'page-rss-feed' => '"$1" umpan RSS',
 'page-atom-feed' => '"$1" umpan Atom',
 'red-link-title' => '$1 (laman indak ado)',
-'sort-descending' => 'Urutkan manurun',
-'sort-ascending' => 'Urutkan manaik',
+'sort-descending' => 'Uruikan manurun',
+'sort-ascending' => 'Uruikan manaik',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Laman',
 'nstab-user' => 'Laman pangguno',
-'nstab-media' => 'Laman Media',
+'nstab-media' => 'Laman media',
 'nstab-special' => 'Laman istimewa',
 'nstab-project' => 'Laman proyek',
 'nstab-image' => 'Berkas',
@@ -335,7 +334,7 @@ $1',
 
 # Main script and global functions
 'nosuchaction' => 'Indak ado tindakan tasabuik',
-'nosuchactiontext' => 'Tindakan nan diminta dek URL tasabuik indak valid. Sanak mungkin salah mangetikkan URL, atau mangikuiki suatu pautan nan indak batua. Hal iko mungkin juo manunjuakan adonyo suatu bug pado parangkaik lunak nan dipagunoan dek {{SITENAME}}.',
+'nosuchactiontext' => 'Tindakan nan diminta dek URL tasabuik indak valid. Sanak mungkin salah mangetikkan URL, atau mangikuik pautan nan salah. Iko mungkin manunjuakan adonyo suatu bug pado parangkaik lunak nan dipagunoan dek {{SITENAME}}.',
 'nosuchspecialpage' => 'Indak ado laman istimewa tarsabuik',
 'nospecialpagetext' => '<strong>Sanak maminta laman istimewa nan indak sah.</strong>
 
@@ -377,7 +376,7 @@ Silakan laporkan hal iko ka [[Special:ListUsers/sysop|pangurus]], sarato manyabu
 'filedeleteerror' => 'Indak dapek mahapuih berkas "$1".',
 'directorycreateerror' => 'Indak dapek mambuek direktori "$1".',
 'filenotfound' => 'Indak dapek manamukan berkas "$1".',
-'fileexistserror' => 'Indak dapek manuliah berkas "$1": berkas sudah ado',
+'fileexistserror' => 'Indak dapek manulih berkas "$1": berkas lah ado.',
 'unexpected' => 'Nilai di lua jangkauan: "$1"="$2".',
 'formerror' => 'Kasalahan: Indak dapek mangiriman formulir',
 'badarticleerror' => 'Tindakan iko indak dapek dilaksanakan di laman iko.',
@@ -388,37 +387,37 @@ Mungkin alah dihapuih jo urang lain.',
 Indak ado keterangan.',
 'badtitle' => 'Judul indak sah',
 'badtitletext' => 'Pamintaan judul laman indak sah, kosong, atau antarbaso atau antarwiki nan salah sambuang. Mungkin juo ado kandungan karakter nan indak buliah digunoan untuak judul.',
-'perfcached' => 'Data barikuik ko diambiak dari singgahan dan mungkin indak data nan baru. Nan tabanyak dari {{PLURAL:$1|suatu hasil dari|$1 hasilnyo}} ado di singgahan.',
-'perfcachedts' => 'Data barikuik ko singgahan, dan tarakhir diperbarui $1. Nan tabanyak dari {{PLURAL:$1|suatu hasil dari|$1 hasilnyo}} ado di singgahan.',
-'querypage-no-updates' => 'Pamutakhiran dari laman iko sadang dimatian. Data nan ado di siko saat iko indak akan dimuaik ulang.',
+'perfcached' => 'Data barikuik ko diambiak dari singgahan dan mungkin indak data nan baru. Nan tabanyak dari {{PLURAL:$1|$1 hasilnyo}} ado di singgahan.',
+'perfcachedts' => 'Data barikuik ko singgahan, dan tarakhia dipabarui $1. Nan tabanyak dari {{PLURAL:$1|$1 hasilnyo}} ado di singgahan.',
+'querypage-no-updates' => 'Pamutakhiran dari laman ko sadang dimatian. Data nan ado di siko kini ko indak akan dimuaik ulang.',
 'wrong_wfQuery_params' => 'Parameter salah ka wfQuery()<br />Fungsi: $1<br />Pamintaan: $2',
 'viewsource' => 'Caliak sumber',
 'viewsource-title' => 'Caliak sumber untuak $1',
-'actionthrottled' => 'Tindakan dibatasi',
-'actionthrottledtext' => 'Anda dibatasi untuak malakuan tindakan iko talalu banyak dalam waktu singkek. Sila mancubo laik satalah bara menit.',
+'actionthrottled' => 'Tindakan tabateh',
+'actionthrottledtext' => 'Sanak tabateh untuak malakuan tindakan ko banyak-banyak dalam wakatu singkek. Cubo lah laik satalah bara minit.',
 'protectedpagetext' => 'Laman ko alah dikunci untuak manghindari panyuntiangan.',
 'viewsourcetext' => 'Sanak dapek malihek atau manyalin sumber laman iko:',
 'viewyourtext' => 'Sanak dapek mancaliak jo mangkopi sumber untuak "suntiangan sanak" ka laman ko',
-'protectedinterface' => 'Laman iko baisi teks antarmuko untuak digunoan dek parangkaik lunak di wiki iko sajo, dan alah dikunci untuak maindaan kasalahan. 
-Untuak manambah atau maubah tajamahan di sadonyo wiki, harap gunoan [//translatewiki.net/ translatewiki.net], yaitu proyek palokalan MediaWiki.',
+'protectedinterface' => 'Laman ko baisi teks antarmuko untuak digunoan dek parangkaik lunak di wiki ko sajo, dan alah dikunci untuak maindaan kasalahan. 
+Untuak manambah atau maubah tajamahan di kasado wiki, harap gunoan [//translatewiki.net/ translatewiki.net], yaitu proyek palokalan MediaWiki.',
 'editinginterface' => "'''Paringatan:''' Sanak manyuntiang laman nan digunoan untuak manyadiokan teks antarmuko untuak parangkaik lunak.
 Parubahan teks ko akan mampangaruhi tampilan pado antarmuko pangguno untuak pangguno lain.
-Untuak tarjamahan, harap gunokan [//translatewiki.net/wiki/Main_Page?setlang=id translatewiki.net], proyek palokalan MediaWiki.",
-'sqlhidden' => '(Pamintaan SQL disuruakkan)',
-'cascadeprotected' => 'Laman iko alah dilindungi dari panyuntiangan karano disartokan di {{PLURAL:$1|laman|laman-laman}} barikuik nan alah dilindungi jo opsi "runtun":
+Untuak tajamahan, harap gunoan [//translatewiki.net/wiki/Main_Page?setlang=min translatewiki.net], proyek palokalan MediaWiki.",
+'sqlhidden' => '(Pamintaan SQL disuruakan)',
+'cascadeprotected' => 'Laman iko alah dilindungi dari panyuntiangan karano disartokan di {{PLURAL:$1|laman}} barikuik nan alah dilindungi jo opsi "runtun":
 $2',
-'namespaceprotected' => "Sanak ndak mampunyoi hak akses untuak manyuntiang laman di ruang namo '''$1'''.",
+'namespaceprotected' => "Sanak indak mampunyoi hak akses untuak manyuntiang laman di ruang namo '''$1'''.",
 'customcssprotected' => 'Sanak indak mampunyoi izin untuak maubah laman CSS iko, karano manganduang pangaturan pribadi pangguno lain.',
 'customjsprotected' => 'Sanak ndak mampunyo izin untuak maubah laman JavaScript iko, karano manganduang pangaturan pribadi pangguno lain.',
 'ns-specialprotected' => 'Laman istimewa indak dapek disuntiang.',
-'titleprotected' => "Judul iko alah dilindungi dari pambantuakan oleh [[User:$1|$1]].
-Alasan nan diberikan adolah ''$2''.",
-'filereadonlyerror' => 'Indak bisa mangubah berkas "$1" karano repositori berkas "$2" dalam moda baco-sajo.
+'titleprotected' => "Judul ko dilinduangi dari dibuek jo [[User:$1|$1]].
+Alasannyo adolah ''$2''.",
+'filereadonlyerror' => 'Indak bisa mangubah berkas "$1" karano repositori berkas "$2" dalam mode baco-sajo.
 
-Pangurus nan manguncinyo manawarkan penjelasan: "$3"',
+Pangurus nan manguncinyo manawarkan panjalehan: "$3"',
 'invalidtitle-knownnamespace' => '↓Judul nan indak sah jo ruangnamo "$2" dan teks "$3"',
 'invalidtitle-unknownnamespace' => 'Judul nan tak sah jo nomor ruang namo indak diketahui $1 dan teks "$2"',
-'exception-nologin' => 'Indak log masuak',
+'exception-nologin' => 'Indak masuak log',
 'exception-nologin-text' => 'Laman ko hanyo dapek disuntiang dek pangguno nan mandaftar.',
 
 # Virus scanner
@@ -432,15 +431,21 @@ Pangurus nan manguncinyo manawarkan penjelasan: "$3"',
 Sanak dapek taruih manggunoan {{SITENAME}} sacaro anonim, atau Sanak dapek <span class='plainlinks'>[$1 masuak log liak]</span> sabagai pangguno nan samo atau pangguno nan lain.
 Parhatian bahawa bara laman mungkin masih taruih manunjukkan bahawa Sanak masih masuak log sampai Sanak mambarasihan singgahan panjelajah web Sanak.",
 'welcomeuser' => 'Salamaik datang, $1!',
-'welcomecreation-msg' => 'Akun Sanak alah dibuek. Jan lupo maatur konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] Sanak.',
+'welcomecreation-msg' => 'Akun Sanak alah dibuek. Jan lupo maubah [[Special:Preferences|pangaturan {{SITENAME}}]] Sanak.',
 'yourname' => 'Namo pangguno:',
+'userlogin-yourname' => 'Namo pangguno',
+'userlogin-yourname-ph' => 'Masuakan namo pangguno',
 'yourpassword' => 'Kato sandi:',
+'userlogin-yourpassword' => 'Kato sandi',
+'userlogin-yourpassword-ph' => 'Masuakan kato sandi',
 'yourpasswordagain' => 'Ulang baliak kato sandi:',
-'remembermypassword' => 'Kana log masuak denai di komputer ko (salamo $1 {{PLURAL:$1|hari|hari}})',
+'remembermypassword' => 'Ingek log masuak denai di paramban ko (salamo $1 {{PLURAL:$1|hari}})',
+'userlogin-remembermypassword' => 'Ingek denai',
+'userlogin-signwithsecure' => 'Masuak log jo server aman',
 'securelogin-stick-https' => 'Tetap tahubuang ka HTTPS sasudah masuk log',
 'yourdomainname' => 'Domain Sanak:',
-'password-change-forbidden' => 'Sanak indak bisa mengubah kato kunci di wiki ko.',
-'externaldberror' => 'Alah tajadi kasalahan otentikasi basis data eksternal atau Sanak indak diizinan malakuan kamaskini tahadok akun eksternal Sanak.',
+'password-change-forbidden' => 'Sanak indak dapek maubah kato sandi di wiki ko.',
+'externaldberror' => 'Alah tajadi kasalahan otentikasi basis data eksternal atau Sanak indak diizinan malakuan pabaruan tahadok akun eksternal Sanak.',
 'login' => 'Masuak log',
 'nav-login-createaccount' => 'Masuak log / buek akun',
 'loginprompt' => "Sanak harus mangaktifan ''cookies'' untuak dapek masuak log ka {{SITENAME}}.",
@@ -449,45 +454,49 @@ Parhatian bahawa bara laman mungkin masih taruih manunjukkan bahawa Sanak masih
 'logout' => 'Kalua log',
 'userlogout' => 'Kalua log',
 'notloggedin' => 'Alun masuak log',
+'userlogin-noaccount' => 'Alun ado akun?',
+'userlogin-joinproject' => 'Join {{SITENAME}}',
 'nologin' => "Alun mampunyoi akun? '''$1'''.",
 'nologinlink' => 'Buek akun baru',
 'createaccount' => 'Buek akun',
 'gotaccount' => "Alah tadafta sabagai pangguno? '''$1'''.",
 'gotaccountlink' => 'Masuak log',
 'userlogin-resetlink' => 'Lupo rincian info masuak Sanak?',
+'helplogin-url' => 'Help:Masuak log',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Bantuan untuak masuak log]]',
 'createaccountmail' => 'Pakai kato sandi sumbarang samantaro, lalu kirim ka alamaik surel nan di bawah ko',
 'createaccountreason' => 'Alasan:',
-'badretype' => 'Kato sandi nan Sanak masuakkan salah.',
+'badretype' => 'Kato sandi nan Sanak masuakan salah.',
 'userexists' => 'Namo pangguno nan dipiliah alah tapakai.
 Piliah namo nan lain.',
 'loginerror' => 'Kasalahan masuak log',
 'createaccounterror' => 'Indak dapek mambuek akun: $1',
 'nocookiesnew' => 'Akun pangguno alah dibuek, tapi Sanak alun masuak log.
 {{SITENAME}} manggunokan cookies untuak log pangguno.
-Sanak mampunyoi cookie dinonaktifkan.
-Sila aktifan, sasudah itu masuak log jo namo pangguno dan password baharu Sanak.',
+Pangaturan cookie Sanak nonaktif.
+Aktifan dulu, sasudah tu baru masuak log jo namo pangguno dan kato sandi baru Sanak.',
 'nocookieslogin' => '{{SITENAME}} manggunokan cookies untuak log pangguno.
-Sanak mampunyoi cookie nan dinonaktifan.
-Sila aktifan dan cubo baliak.',
+Pangaturan cookie paramban Sanak nonaktif.
+Aktifan dulu dan cubo baliak.',
 'nocookiesfornew' => 'Akun pangguno indak dibuek karano kami indak dapek mamastian sumbernyo.
-Pastian Sanak alah mangaktifan kuki, lalu muek ulang laman iko dan cubo baliak.',
-'noname' => 'Namo pangguno nan Sanak masuakkan indak sah.',
-'loginsuccesstitle' => 'Berhasil masuak log',
+Pastian Sanak alah mangaktifan cokies, lalu muek ulang laman ko dan cubo baliak.',
+'noname' => 'Namo pangguno nan Sanak masuakan indak sah.',
+'loginsuccesstitle' => 'Bahasil masuak log',
 'loginsuccess' => "'''Sanak kini lah masuak log di {{SITENAME}} sabagai \"\$1\".'''",
 'nosuchuser' => 'Indak ado pangguno jo namo "$1".
-Namo psngguno msmbedokan kapitalisasi.
-Pariso baliak ejaan Sanak, atau [[Special:UserLogin/signup|buek akun baharu]].',
+Namo pangguno mambedoan kapitalisasi.
+Pariso baliak ejaan Sanak, atau [[Special:UserLogin/signup|buek akun baru]].',
 'nosuchusershort' => 'Indak ado pangguno jo namo "$1".
 Cubo pariso baliak ejaan Sanak.',
-'nouserspecified' => 'Sanak harus mamasuakkan namo pangguno.',
-'login-userblocked' => 'Pangguno iko diblokir. Indak diizinan/dipabuliahan untuak masuak log.',
-'wrongpassword' => 'Kato sandi nan Sanak masuakkan salah. Sila cubo baliak.',
-'wrongpasswordempty' => 'Sanak ndak mamasuakkan kato sandi. Sila cubo baliak.',
-'passwordtooshort' => 'Kato sandi paliang indak harus tadiri dari {{PLURAL:$1|1 karakter|$1 karakter}}.',
+'nouserspecified' => 'Sanak harus mamasuakan namo pangguno.',
+'login-userblocked' => 'Pangguno ko kanai sakek. Indak diizinan untuak masuak log.',
+'wrongpassword' => 'Kato sandi nan Sanak masuakan salah. Cubolah baliak.',
+'wrongpasswordempty' => 'Sanak indak mamasuakan kato sandi. Cubolah baliak.',
+'passwordtooshort' => 'Kato sandi paliang indak harus tadiri dari {{PLURAL:$1|$1 karakter}}.',
 'password-name-match' => 'Kato sandi Sanak harus babedo dari namo pangguno Sanak.',
-'password-login-forbidden' => 'Panggunoan namo pangguno dan sandi iko alah dilarang.',
+'password-login-forbidden' => 'Panggunoan namo pangguno dan sandi ko alah dilarang.',
 'mailmypassword' => 'Kirim kato sandi baru',
-'passwordremindertitle' => 'Paringatan kato sandi dari {{SITENAME}}',
+'passwordremindertitle' => 'Kato sandi samantaro untuak {{SITENAME}}',
 'passwordremindertext' => 'Sasaurang (mungkin Sanak, dari alamaik IP $1) maminta kato sandi baharu untuak {{SITENAME}} ($4). Kato sandi samantaro untuak pangguno "$2" alah dibuekan dan diset manjadi "$3". Jikok memang Sanak nan mangajukan pamintaan ini, Sanak paralu masuak log dan mamilih kato sandi baharu kini. Kato sandi samantaro Sanak akan kadaluwarsa dalam wakatu {{PLURAL:$5|sahari|$5 hari}}.
 
 Jikok urang lain nan malakukan pamintaan iko, atau jikok Sanak alah mangingek kato sandi Sanak dan akan tetap manggunokan kato sandi tasabuik, sila abaikan pasan iko dan tatap gunokan kato sandi lamo Sanak.',
@@ -498,14 +507,14 @@ Silakan masuak log baliak sasudah manarimo surel tasabuik.',
 'blocked-mailpassword' => 'Alamaik IP Sanak diblokir dari panyuntingan dan karanonyo indak diizinan manggunokan fungsi pangingek kato sandi untuak mancegah panyalahgunoan.',
 'eauthentsent' => 'Surel untuak konfirmasi alah dikirim ka alamaik surel Sanak.
 Ikuti instruksi dalam surel tasabuik untuak malakuan konfirmasi jikok alamaik tasabuik adolah batua punyo Sanak. {{SITENAME}} indak akan mangaktifan fitur surel jikok langkah ko alun dilakuan.',
-'throttled-mailpassword' => 'Suatu pangingat kato sandi alah dikiriman dalam {{PLURAL:$1|jam|$1 jam}} tarakhir.
-Untuak manghindari panyalahgunoan, hanyo ciek kato sandi nan akan dikiriman satiok {{PLURAL:$1|jam|$1 jam}}.',
-'mailerror' => 'Kasalahan dalam mangirimkan surel: $1',
-'acct_creation_throttle_hit' => 'Pangunjung wiki iko jo alamaik IP nan samo jo Sanak alah mambuek {{PLURAL:$1|1 akun|$1 akun}} dalam sahari tarakhir, hinggo jumlah maksimum nan diizinan.
-Karanonyo, pangunjuang jo alamaik IP iko indak dapek baliak mambuek akun lain untuak samantaro.',
+'throttled-mailpassword' => 'Suatu pangingek kato sandi alah dikiriman dalam {{PLURAL:$1|$1 jam}} tarakhia.
+Untuak manghindari panyalahgunoan, hanyo ciek kato sandi nan ka dikirim satiok {{PLURAL:$1|$1 jam}}.',
+'mailerror' => 'Kasalahan dalam mangiriman surel: $1',
+'acct_creation_throttle_hit' => 'Pangunjung wiki iko jo alamaik IP nan samo jo Sanak alah mambuek {{PLURAL:$1|$1 akun}} dalam sahari tarakhia, sampai jumlah maksimum nan diizinan.
+Karanonyo, pangunjuang jo alamaik IP ko indak dapek mambuek akun lain untuak samantaro.',
 'emailauthenticated' => 'Alamaik surel Sanak lah dikonfirmasi pado $3, $2.',
 'emailnotauthenticated' => 'Alamaik surel Sanak alun dikonfirmasi. Sabalun dikonfirmasi Sanak indak dapek manggunoan fitur surel.',
-'noemailprefs' => 'Sanak harus mamasukan alamaik surel di pangaturan Sanak untuak dapek manggunoan fitur-fitur ko.',
+'noemailprefs' => 'Sanak harus mamasuakan alamaik surel di pangaturan Sanak untuak dapek manggunoan fitur-fitur ko.',
 'emailconfirmlink' => 'Konfirmasi alamaik surel Sanak',
 'invalidemailaddress' => 'Alamaik surel iko indak dapek ditarimo dek formatnyo indak sasuai.
 Harap masuakan alamaik surel dalam format nan bana atau kosoangan isian tasabuik.',
@@ -513,21 +522,21 @@ Harap masuakan alamaik surel dalam format nan bana atau kosoangan isian tasabuik
 'emaildisabled' => 'Situs web ko indak dapek mangirim surel.',
 'accountcreated' => 'Akun dibuek',
 'accountcreatedtext' => 'Akun pangguno untuak $1 alah dibuek.',
-'createaccount-title' => 'Pambuekan akun untuak {{SITENAME}}',
+'createaccount-title' => 'Pambuatan akun untuak {{SITENAME}}',
 'createaccount-text' => 'Sasaurang alah mambuek sabuah akun untuak alamaik surel Sanak di {{SITENAME}} ($4) jo namo "$2" dan kato sandi "$3". Sanak dianjuakan untuak masuak log dan mangganti kato sandi Sanak kini.
 
 Sanak dapek mangacuahkan pasan ko jikok akun ko dibuek dek ado kasalahan.',
-'usernamehasherror' => 'Namo pangguno indak bisa mangandung tando paga',
-'login-throttled' => 'Sanak alah bakali-kali mancoba masuak log.
-Sila manunggu sabalun mancubo baliak.',
-'login-abort-generic' => 'Proses masuak Sanak indak berhasil - Dibatalan',
+'usernamehasherror' => 'Namo pangguno indak bisa manganduang tando paga',
+'login-throttled' => 'Sanak alah bakali-kali mancubo masuak log.
+Tunggulah sabanta sabalun mancubo baliak.',
+'login-abort-generic' => 'Proses masuak Sanak indak barasil - Dibatalan',
 'loginlanguagelabel' => 'Baso: $1',
-'suspicious-userlogout' => 'Pamintaan Sanak untuak kalua log ditolak karano tampaknyo dikirim oleh panjalajah nan rusak atau proksi panyinggah.',
+'suspicious-userlogout' => 'Pamintaan Sanak untuak kalua log ditulak karano tampaknyo dikirim oleh paramban nan rusak atau proksi panyinggah.',
 
 # Email sending
-'php-mail-error-unknown' => 'Kasalahan nan indak dikana dalam fungsi mail() PHP',
-'user-mail-no-addy' => 'Mancubo mangirim surel tanpa alamaik surel nan sah.',
-'user-mail-no-body' => 'Mancubo kirim surel kosong atau pasan talalu pendek',
+'php-mail-error-unknown' => 'Kasalahan nan indak jaleh dalam fungsi mail() PHP',
+'user-mail-no-addy' => 'Mancubo mangirim surel tanpa alamaik surel.',
+'user-mail-no-body' => 'Mancubo mangirim surel kosong atau pasan talalu pendek',
 
 # Change password dialog
 'resetpass' => 'Tuka kato sandi',
@@ -549,10 +558,11 @@ Sanak mungkin alah berhasil mangganti kato sandi Sanak atau alah maminto kato sa
 
 # Special:PasswordReset
 'passwordreset' => 'Setel ulang sandi',
-'passwordreset-text' => 'Lengkapi formulir ko untuak manarimo surel pangingek pado detil akun Sanak.',
+'passwordreset-text' => 'Lengkapi formulir ko untuak maubah kato sandi.',
 'passwordreset-legend' => 'Tuka baliak kato sandi',
-'passwordreset-disabled' => 'Panukaran baliak kato sandi alah dimatian di wiki iko.',
-'passwordreset-pretext' => '{{PLURAL:$1||Masuakan ciek data di bawah iko}}',
+'passwordreset-disabled' => 'Pangubahan kato sandi alah dimatian di wiki iko.',
+'passwordreset-emaildisabled' => 'Fitur surel alah dimatian pado wiki iko.',
+'passwordreset-pretext' => '{{PLURAL:$1||Masuakan salah satu data di bawah ko}}',
 'passwordreset-username' => 'Namo pangguno:',
 'passwordreset-domain' => 'Domain:',
 'passwordreset-capture' => 'Caliak kaputusannyo?',
@@ -575,7 +585,7 @@ $2
 Sanak harus masuak dan mamiliah sandi baru. Jikok urang lain mambuek pamintaan ko atau jikok Sanak ingek sandi awal dan indak nio maubahnyo, Sanak dapek mangacuahkan pasan ko dan taruih manggunoan sandi lamo.',
 'passwordreset-emailelement' => 'Namo pangguno: $1
 Sandi samantaro: $2',
-'passwordreset-emailsent' => 'Surel pangingek alah dikiriman.',
+'passwordreset-emailsent' => 'Surel parubahan kato sandi alah dikirim.',
 'passwordreset-emailsent-capture' => 'Surel paringatan alah dikirim, nan nampak di bawah ko.',
 'passwordreset-emailerror-capture' => 'Surel pangingek, nan ditampilkan di bawah, alah dibuek, tapi pengirimannyo gagal ka pangguno: $1',
 
@@ -792,6 +802,7 @@ Nyo alah ado.',
 'content-failed-to-parse' => 'Gagal manjabarkan konten $2 untuak model $1: $3',
 'invalid-content-data' => 'Data kanduangan indak valid.',
 'content-not-allowed-here' => 'Konten "$1" indak diizinan di laman [[$2]]',
+'editwarning-warning' => 'Maninggakan laman ko dapek maakibaikan parubahan nan dibuek hilang. Jikok Sanak lah masuak log, dapek mamatian pasan ko malalui bagian "Panyuntiangan" pado laman pangaturan.',
 
 # Content models
 'content-model-wikitext' => 'Teks wiki',
@@ -1001,15 +1012,6 @@ Cubo awali pamintaan Sanak tu jo ''sadonyo:'' untuak mancari kasado kandungan (t
 Sanak samantaro dapek mancari lewaik Google.
 Ingek indeks Google untuak {{SITENAME}} mungkin lah kadaluarsa.',
 
-# Quickbar
-'qbsettings' => 'Bar pinteh',
-'qbsettings-none' => 'Indak ado',
-'qbsettings-fixedleft' => 'Rato kiri',
-'qbsettings-fixedright' => 'Rato kanan',
-'qbsettings-floatingleft' => 'Mangambang di kiri',
-'qbsettings-floatingright' => 'Mangambang di kanan',
-'qbsettings-directionality' => 'Tetap, tagantuang pado skrip bahaso Sanak',
-
 # Preferences page
 'preferences' => 'Pangaturan',
 'mypreferences' => 'Pangaturan',
@@ -1252,6 +1254,15 @@ Laman pado [[Special:Watchlist|dafta pantau Sanak]] ditandoi jo '''cetak taba'''
 'upload' => 'Muek berkas',
 'uploadbtn' => 'Mamuek berkas',
 'reuploaddesc' => 'Batal dan baliak ka formulir pamuatan',
+'upload-tryagain' => 'Kirim parubahan katarangan berkas',
+'uploadnologin' => 'Alun masuak log',
+'uploadnologintext' => 'Sanak musti [[Special:UserLogin|masuak log]] untuak dapek mamuek berkas.',
+'upload_directory_missing' => 'Direktori pamuatan ($1) indak basobok dan indak dapek dibuek dek server web.',
+'upload_directory_read_only' => 'Direktori pamuatan ($1) indak dapek ditulih jo server web.',
+'uploaderror' => 'Kasalahan pamuatan',
+'upload-recreate-warning' => "'''Paringatan: Berkas jo namo tu alah dihapuih atau dipindahan.'''
+
+Log panghapuihan dan pamindahan laman ko adolah sabagai barikuik:",
 'uploadtext' => "Gunoan formulir di bawah untuak mangunggah berkas.
 Untuak manampilan atau mancari berkas nan sabalumnyo dimuek, gunoan [[Special:FileList|dafta berkas]]. Pangunggahan (ulang) tacatat dalam [[Special:Log/upload|log pangunggahan]], samantaro panghapuihan tacatat dalam [[Special:Log/delete|log panghapuihan]].
 
@@ -1365,9 +1376,24 @@ Informasi dari [$2 laman katarangannyo] ado di bawah.',
 'filedelete' => 'Hapuih $1',
 'filedelete-legend' => 'Hapuih berkas',
 
+# MIME search
+'mimesearch' => 'Pancarian MIME',
+
+# Unwatched pages
+'unwatchedpages' => 'Laman nan indak tapantau',
+
+# List redirects
+'listredirects' => 'Dafta pangaliahan',
+
+# Unused templates
+'unusedtemplates' => 'Templat nan indak tapakai',
+
 # Random page
 'randompage' => 'Laman sumbarang',
 
+# Random redirect
+'randomredirect' => 'Pangaliahan sumbarang',
+
 # Statistics
 'statistics' => 'Statistik',
 'statistics-header-pages' => 'Statistik laman',
@@ -1392,10 +1418,18 @@ Informasi dari [$2 laman katarangannyo] ado di bawah.',
 'disambiguations' => 'Laman nan tahubuang ka laman disambiguasi',
 'disambiguationspage' => 'Template:sanamo',
 
+'pageswithprop' => 'Laman jo laman properti',
+'pageswithprop-legend' => 'Laman jo laman properti',
+
 'doubleredirects' => 'Pangaliahan ganda',
 
+'brokenredirects' => 'Pangaliahan rusak',
+
+'withoutinterwiki' => 'Laman indak ado interwiki',
 'withoutinterwiki-submit' => 'Tunjuakan',
 
+'fewestrevisions' => 'Laman jo parubahan sangenek',
+
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bita}}',
 'ncategories' => '$1 {{PLURAL:$1|kategori}}',
@@ -1407,6 +1441,22 @@ Informasi dari [$2 laman katarangannyo] ado di bawah.',
 'nimagelinks' => 'Digunoan pado $1 {{PLURAL:$1|laman}}',
 'ntransclusions' => 'digunoan pado $1 {{PLURAL:$1|laman}}',
 'lonelypages' => 'Laman yatim',
+'uncategorizedpages' => 'Laman nan indak takategori',
+'uncategorizedcategories' => 'Kategori nan indak takategori',
+'uncategorizedimages' => 'Berkas nan indak takategori',
+'uncategorizedtemplates' => 'Templat nan indak takategori',
+'unusedcategories' => 'Kategori nan indak tapakai',
+'unusedimages' => 'Berkas nan indak digunoan',
+'wantedcategories' => 'Kategori nan diinginan',
+'wantedpages' => 'Laman nan diinginan',
+'wantedfiles' => 'Berkas nan diinginan',
+'wantedtemplates' => 'Templat nan diinginan',
+'mostlinked' => 'Laman nan acok dituju',
+'mostlinkedcategories' => 'Kategori nan acok digunoan',
+'mostlinkedtemplates' => 'Templat nan acok dituju',
+'mostcategories' => 'Laman jo kategori tabanyak',
+'mostimages' => 'Berkas nan paliang acok digunoan',
+'mostinterwikis' => 'Laman jo interwiki paliang banyak',
 'prefixindex' => 'Sado laman jo awalan',
 'prefixindex-namespace' => 'Sado laman jo awalan (ruang namo $1)',
 'shortpages' => 'Laman pendek',
@@ -1416,6 +1466,9 @@ Informasi dari [$2 laman katarangannyo] ado di bawah.',
 'protectedpages' => 'Laman nan dilinduangi',
 'protectedpages-indef' => 'Untuak palinduangan salamonyo',
 'protectedpages-cascade' => 'Untuak palinduangan batingkek',
+'protectedtitles' => 'Judul nan dilinduangi',
+'protectedtitlesempty' => 'Indak ado judul nan dilinduangi jo parameter ko.',
+'listusers' => 'Dafta pangguno',
 'usereditcount' => '$1 {{PLURAL:$1|suntiangan}}',
 'usercreated' => '{{GENDER:$3|Dibuek}} pado $1 pukua $2',
 'newpages' => 'Laman baru',
@@ -1468,7 +1521,7 @@ Sanak dapek mamiliah jenis log nan ado, namo pangguno (bedoan huruf ketek/gadang
 'categories' => 'Kategori',
 'categoriespagetext' => '{{PLURAL:$1|Isi kategori}} ko ado laman atau media.
 [[Special:UnusedCategories|Kategori nan indak tapakai]] indak nampak di siko.
-Lihek pulo [[Special:WantedCategories|kategori nan diinginkan]].',
+Lihek pulo [[Special:WantedCategories|kategori nan diinginan]].',
 'categoriesfrom' => 'Tunjuakan kategori mulai jo:',
 'special-categories-sort-count' => 'uruikan manuruik jumlah',
 'special-categories-sort-abc' => 'uruikan manuruik abjad',
@@ -1491,13 +1544,6 @@ Lihek pulo [[Special:WantedCategories|kategori nan diinginkan]].',
 'listusers-noresult' => 'Pangguno indak basobok.',
 'listusers-blocked' => '(tasakek)',
 
-# Special:ActiveUsers
-'activeusers' => 'Dafta pangguno aktif',
-'activeusers-from' => 'Tunjuakan pangguno mulai dari:',
-'activeusers-hidebots' => 'Suruakan bot',
-'activeusers-hidesysops' => 'Suruakan panguruih',
-'activeusers-noresult' => 'Pangguno indak basobok',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Dafta kalompok pangguno',
 'listgrouprights-group' => 'Kalompok',
@@ -1636,6 +1682,7 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'undeletebtn' => 'Baliakan',
 'undeletelink' => 'caliak/baliakan',
 'undeleteviewlink' => 'caliak',
+'undelete-cleanup-error' => 'Kasalahan sawaktu mangapuih arsip berkas "$1" nan indak digunoan.',
 
 # Namespace form on various pages
 'namespace' => 'Ruangnamo:',
@@ -1839,14 +1886,17 @@ Silakan piliah namo lain.',
 'export' => 'Ekspor laman',
 
 # Namespace 8 related
+'allmessages' => 'Pasan sistem',
 'allmessagesname' => 'Namo',
 'allmessagesdefault' => 'Teks pasan default',
+'allmessages-language' => 'Bahaso:',
 
 # Thumbnails
 'thumbnail-more' => 'Pagadang',
 'thumbnail_error' => 'Gagal mambuek miniatur: $1',
 
 # Special:Import
+'import' => 'Impor laman',
 'importstart' => 'Mangimpor laman...',
 
 # Import log
@@ -1945,13 +1995,8 @@ Sanak hanyo buliah mancaliak sumbernyo sajo',
 'pageinfo-toolboxlink' => 'Informasi laman',
 
 # Skin names
-'skinname-standard' => 'Klasik',
-'skinname-nostalgia' => 'Nostalgia',
 'skinname-cologneblue' => 'Biru Köln',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Sadarano',
 'skinname-modern' => 'Moderen',
 'skinname-vector' => 'Vektor',
 
@@ -2023,8 +2068,6 @@ Satiok pautan salanjuiknyo pado barih nan samo dianggap pangacualian, yaitu lama
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans',
@@ -2153,34 +2196,74 @@ Nan lainnyo akan tasuruak sacaro baku.
 'filepath-submit' => 'Cari',
 
 # Special:FileDuplicateSearch
+'fileduplicatesearch' => 'Pancarian berkas duplikat',
+'fileduplicatesearch-summary' => 'Pancarian berkas duplikat badasaran nilai hash-nyo.',
 'fileduplicatesearch-result-n' => 'Berkas "$1" ado {{PLURAL:$2|$2 duplikat nan samo}}.',
 'fileduplicatesearch-noresults' => 'Indak basobok berkas banamo "$1".',
 
 # Special:SpecialPages
 'specialpages' => 'Laman istimewa',
+'specialpages-note' => '----
+* Laman istimewa normal.
+* <span class="mw-specialpagerestricted">Laman istimewa talarang.</span>
+* <span class="mw-specialpagecached">Laman istimewa tasinggah (mungkin usang).</span>',
+'specialpages-group-maintenance' => 'Laporan pamaliharoan',
+'specialpages-group-other' => 'Lain-lain',
 'specialpages-group-login' => 'Masuak log / mandafta',
+'specialpages-group-changes' => 'Parubahan tabaru jo log',
+'specialpages-group-media' => 'Laporan jo pamuatan berkas',
+'specialpages-group-users' => 'Pangguno jo hak pangguno',
+'specialpages-group-highuse' => 'Nan paliang',
+'specialpages-group-pages' => 'Dafta laman',
+'specialpages-group-pagetools' => 'Pakakeh laman',
+'specialpages-group-wiki' => 'Data jo pakakeh',
+'specialpages-group-redirects' => 'Pancarian jo pangaliahan',
+'specialpages-group-spam' => 'Pakakeh panangka spam',
 
 # Special:BlankPage
 'blankpage' => 'Laman kosong',
+'intentionallyblankpage' => 'Laman ko sangajo dikosoangkan.',
 
 # External image whitelist
 'external_image_whitelist' => '#Bia se barih ko apo adonyo<pre>
 #Latakan fragmen tando regular (hanyo bagian antaro //) di bawah ko
-#Iko akan dicocokan jo URL gambar lua (tahubuang langsuang)
-#Yang mano cocok akan ditampilkan sabagai gambar, sisonyo hanyo sabagai tautan sajo
-#Barih dimulai jo # dipalakuan sabagai komentar
-#Iko indak manbedaan huruf gadang atau ketek
+#Iko akan dicocokan jo URL gambar dari lua (tahubuang langsuang)
+#Nan mano nan cocok ditampilkan sabagai gambar, sisonyo hanyo sabagai tautan sajo
+#Barih nan dimulai jo # dianggap sabagai komentar
+#Iko indak mambedoan huruf gadang jo ketek
 
-#Latakan sado fragmen regex di bawah barih ko. Bia se barih apo adonyo</pre>',
+#Latakan sado fragmen regex di bawah barih ko. Bia se barih ko apo adonyo</pre>',
 
 # Special:Tags
+'tags' => 'Tag parubahan nan sah',
 'tag-filter' => '[[Special:Tags|Tag]] sariang:',
 'tag-filter-submit' => 'Sariang',
 'tags-title' => 'Tag',
+'tags-intro' => 'Laman ko barisi dafta tag nan parangkaik lunak dapek manandoi suntiang jo, dan maknanyo.',
 'tags-tag' => 'Namo tag',
+'tags-display-header' => 'Tampilan di dafta parubahan',
+'tags-description-header' => 'Deskripsi langkok dari makna',
+'tags-hitcount-header' => 'Parubahan ba-tag',
 'tags-edit' => 'suntiang',
 'tags-hitcount' => '$1 {{PLURAL:$1|parubahan}}',
 
+# Special:ComparePages
+'comparepages' => 'Bandiangkan laman',
+'compare-selector' => 'Bandiangkan revisi laman',
+'compare-page1' => 'Laman 1',
+'compare-page2' => 'Laman 2',
+'compare-rev1' => 'Revisi 1',
+'compare-rev2' => 'Revisi 2',
+'compare-submit' => 'Bandiangkan',
+'compare-invalid-title' => 'Judul nan Sanak agiah indak sah.',
+'compare-title-not-exists' => 'Judul nan dituju indak basobok.',
+'compare-revision-not-exists' => 'Revisi nan dituju indak basobok.',
+
+# Database error messages
+'dberr-header' => 'Wiki ko bamasalah',
+'dberr-problems' => 'Maaf!
+Situs ko mangalami masalah teknis.',
+
 # New logging system
 'logentry-newusers-newusers' => 'Akun pangguno $1 lah dibuek',
 'logentry-newusers-create' => '$1 mambuek akun pangguno',
index cfc4f68..0573fbb 100644 (file)
@@ -376,8 +376,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Прикажи го бројот на корисници кои набљудуваат',
 'tog-oldsig' => 'Постоечки потпис:',
 'tog-fancysig' => 'Сметај го потписот за викитекст (без автоматска врска)',
-'tog-externaleditor' => 'По основно користи надворешен уредувач (само за стручњаци, потребно е посебно нагодување на сметачот. [//www.mediawiki.org/wiki/Manual:External_editors?uselang=mk Повеќе информации.])',
-'tog-externaldiff' => 'По основно користи надворешен програм за споредување верзии (само за стручњаци, потребно е специјално нагодување на сметачот. [//www.mediawiki.org/wiki/Manual:External_editors?uselang=mk Повеќе информации.])',
 'tog-showjumplinks' => 'Овозможи врски на пристапност „скокни на“',
 'tog-uselivepreview' => 'Користи преглед во живо (бара JavaScript) (експериментално)',
 'tog-forceeditsummary' => 'Извести ме кога нема опис на промените',
@@ -392,6 +390,7 @@ $messages = array(
 'tog-showhiddencats' => 'Прикажи скриени категории',
 'tog-noconvertlink' => 'Оневозможи претворање на наслов на врска',
 'tog-norollbackdiff' => 'Изостави ја разликата по извршено отповикување',
+'tog-useeditwarning' => 'Предупреди ме кога сакам да напуштам страница за уредување без да ги имам зачувано промените',
 
 'underline-always' => 'Секогаш',
 'underline-never' => 'Никогаш',
@@ -466,7 +465,7 @@ $messages = array(
 'hidden-category-category' => 'Скриени категории',
 'category-subcat-count' => '{{PLURAL:$2|Оваа категорија ја содржи само следнава поткатегорија.|Оваа категорија {{PLURAL:$1|ја содржи следнава поткатегорија|ги содржи следниве $1 поткатегории}} од вкупно $2.}}',
 'category-subcat-count-limited' => 'Оваа категорија {{PLURAL:$1|ја содржи следнава поткатегорија|ги содржи следниве $1 поткатегории}}.',
-'category-article-count' => '{{PLURAL:$2|Ð\9eваа ÐºÐ°Ñ\82егоÑ\80иÑ\98а Ñ\98а Ñ\81одÑ\80жи Ñ\81амо Ñ\81леднаÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а.|{{PLURAL:$1|СледнаÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ðµ|СледниÑ\82е $1 Ñ\81Ñ\82Ñ\80аниÑ\86и Ñ\81е}} Ð²Ð¾ Ð¾Ð²Ð°Ð° ÐºÐ°Ñ\82егоÑ\80иÑ\98а, од вкупно $2.}}',
+'category-article-count' => '{{PLURAL:$2|Ð\9aаÑ\82егоÑ\80иÑ\98аÑ\82а Ñ\98а Ñ\81одÑ\80жи Ñ\81амо Ñ\81леднава Ñ\81Ñ\82Ñ\80аниÑ\86а.|Ð\9aаÑ\82егоÑ\80иÑ\98аÑ\82а {{PLURAL:$1|Ñ\98а Ñ\81одÑ\80жи Ñ\81леднава Ñ\81Ñ\82Ñ\80аниÑ\86а|ги Ñ\81одÑ\80жи Ñ\81ледниве $1 Ñ\81Ñ\82Ñ\80аниÑ\86и}} од вкупно $2.}}',
 'category-article-count-limited' => '{{PLURAL:$1|Следната страница е|Следните $1 страници се}} во оваа категорија.',
 'category-file-count' => '{{PLURAL:$2|Оваа категорија ја содржи само следната податотека.|{{PLURAL:$1|Следната податотека е|Следните $1 податотеки се}} во оваа категорија, од вкупно $2.}}',
 'category-file-count-limited' => '{{PLURAL:$1|Следнава податотека е|Следниве $1 податотеки се}} во оваа категорија.',
@@ -770,9 +769,15 @@ $2',
 'welcomecreation-msg' => 'Вашата корисничка сметка е создадена.
 Не заборавајте да ги измените вашите [[Special:Preferences|{{SITENAME}} нагодувања]].',
 'yourname' => 'Корисничко име:',
+'userlogin-yourname' => 'Корисничко име',
+'userlogin-yourname-ph' => 'Внесете корисничко име',
 'yourpassword' => 'Лозинка:',
+'userlogin-yourpassword' => 'Лозинка',
+'userlogin-yourpassword-ph' => 'Внесете лозинка',
 'yourpasswordagain' => 'Повторете ја лозинката:',
 'remembermypassword' => 'Запомни ме на овој сметач (највеќе $1 {{PLURAL:$1|ден|дена}})',
+'userlogin-remembermypassword' => 'Запомни ме',
+'userlogin-signwithsecure' => 'Најава со безбеден опслужувач',
 'securelogin-stick-https' => 'Останете поврзани со HTTPS по одјавата',
 'yourdomainname' => 'Вашиот домен:',
 'password-change-forbidden' => 'Не можете да ја менувате лозинката на ова вики.',
@@ -785,12 +790,16 @@ $2',
 'logout' => 'Одјава',
 'userlogout' => 'Одјава',
 'notloggedin' => 'Не сте најавени',
+'userlogin-noaccount' => 'Немате сметка?',
+'userlogin-joinproject' => 'Зачленете се на {{SITENAME}}',
 'nologin' => "Немате корисничка сметка? '''$1'''.",
 'nologinlink' => 'Направете нова корисничка сметка',
 'createaccount' => 'Направи сметка',
 'gotaccount' => "Веќе имате корисничка сметка? '''$1'''.",
 'gotaccountlink' => 'Најавете се',
 'userlogin-resetlink' => 'Си ги заборавивте податоците за најава?',
+'helplogin-url' => 'Help:Најава',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Помош со најавата]]',
 'createaccountmail' => 'Дај привремена произволна лозинка и испрати ја на долунаведената адреса',
 'createaccountreason' => 'Причина:',
 'badretype' => 'Внесените лозинки не се совпаѓаат.',
@@ -895,6 +904,7 @@ $2',
 'passwordreset-text' => 'Пополнете го образецов за да ја измените лозинката.',
 'passwordreset-legend' => 'Нова лозинка',
 'passwordreset-disabled' => 'На ова вики е оневозможено задавање на нова лозинка.',
+'passwordreset-emaildisabled' => 'Можностите за е-пошта се исклучени на ова вики',
 'passwordreset-pretext' => '{{PLURAL:$1||Подолу внесете еден податок}}',
 'passwordreset-username' => 'Корисничко име:',
 'passwordreset-domain' => 'Домен:',
@@ -925,7 +935,7 @@ $2
 Привремена лозинка: $2',
 'passwordreset-emailsent' => 'Испратено е писмо за измена на лозинката.',
 'passwordreset-emailsent-capture' => 'Испратено е писмо за измена на лозинката (прикажано подолу).',
-'passwordreset-emailerror-capture' => 'Создадено е писмо за измена на лозинката (прикажано подолу), но не успеав да го испратам на корисникот: $1',
+'passwordreset-emailerror-capture' => 'Создадено е писмо за измена на лозинката (прикажано подолу), но не успеав да го испратам на {{GENDER:$2|корисникот}}: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Смени е-пошта',
@@ -1150,6 +1160,8 @@ $2
 'content-failed-to-parse' => 'Не успеав да ја предадам содржината од типот $2 за моделот $1: $3',
 'invalid-content-data' => 'Неважечки податоци од содржината',
 'content-not-allowed-here' => 'Содржините од моделот „$1“ не се допуштени на страницата [[$2]]',
+'editwarning-warning' => 'Ако ја напуштите страницата ќе ги изгубите сите промени кои сте ги направиле.
+Ако сте најавени, можете да го исклучите ова предупредување во одделот „{{int:prefs-editing}}“ во вашите нагодувања.',
 
 # Content models
 'content-model-wikitext' => 'викитекст',
@@ -3343,8 +3355,6 @@ $1',
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans',
@@ -4204,6 +4214,8 @@ $5
 'htmlform-submit' => 'Поднеси',
 'htmlform-reset' => 'Откажи промени',
 'htmlform-selectorother-other' => 'Друго',
+'htmlform-no' => 'Не',
+'htmlform-yes' => 'Да',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 со поддршка за пребарување по цели текстови',
index 6e9cc11..a4d8ae4 100644 (file)
@@ -365,8 +365,6 @@ $messages = array(
 'tog-shownumberswatching' => 'ശ്രദ്ധിക്കുന്ന ഉപയോക്താക്കളുടെ എണ്ണം കാണിക്കുക',
 'tog-oldsig' => 'നിലവിലുള്ള ഒപ്പ്:',
 'tog-fancysig' => 'ഒപ്പ് ഒരു വിക്കി എഴുത്തായി പരിഗണിക്കുക (കണ്ണി സ്വയം ചേർക്കേണ്ടതില്ല)',
-'tog-externaleditor' => 'സ്വതേ ബാഹ്യ എഡിറ്റർ ഉപയോഗിക്കുക (വിദഗ്ദ്ധ ഉപയോക്താക്കൾക്കു മാത്രം, താങ്കളുടെ കമ്പ്യൂട്ടറിൽ പ്രത്യേക സജ്ജീകരണങ്ങൾ ആവശ്യമാണ്. [//www.mediawiki.org/wiki/Manual:External_editors കൂടുതൽ വിവരങ്ങൾ.])',
-'tog-externaldiff' => 'വ്യത്യാസം അറിയാൻ സ്വതേ ബാഹ്യ ഉപകരണങ്ങൾ ഉപയോഗിക്കുക (വിദഗ്ദ്ധ ഉപയോക്താക്കൾക്കു മാത്രം, താങ്കളുടെ കമ്പ്യൂട്ടറിൽ പ്രത്യേക സജ്ജീകരണങ്ങൾ ആവശ്യമാണ്. [//www.mediawiki.org/wiki/Manual:External_editors കൂടുതൽ വിവരങ്ങൾ.])',
 'tog-showjumplinks' => '"പോവുക" ഗമ്യത കണ്ണികൾ പ്രാപ്തമാക്കുക',
 'tog-uselivepreview' => 'തത്സമയ പ്രിവ്യൂ ഉപയോഗപ്പെടുത്തുക (ജാവാസ്ക്രിപ്റ്റ് ആവശ്യമാണ്) (പരീക്ഷണാടിസ്ഥാനം)',
 'tog-forceeditsummary' => 'തിരുത്തലുകളുടെ ചുരുക്കം നൽകിയില്ലെങ്കിൽ എന്നെ ഓർമ്മിപ്പിക്കുക',
@@ -380,6 +378,7 @@ $messages = array(
 'tog-diffonly' => 'രണ്ട് പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസത്തിനു താഴെ താളിന്റെ ഉള്ളടക്കം കാണിക്കരുത്.',
 'tog-showhiddencats' => 'മറഞ്ഞിരിക്കുന്ന വർഗ്ഗങ്ങളെ കാണിക്കുക',
 'tog-norollbackdiff' => 'റോൾബാക്കിനു ശേഷം വ്യത്യാസം കാണിക്കാതിരിക്കുക',
+'tog-useeditwarning' => 'സേവ് ചെയ്യാത്ത മാറ്റങ്ങളോടു കൂടിയ തിരുത്തൽ താളിൽ നിന്നും പോകുമ്പോൾ എന്നെ അറിയിക്കുക',
 
 'underline-always' => 'എല്ലായ്പ്പോഴും',
 'underline-never' => 'ഒരിക്കലും അരുത്',
@@ -750,9 +749,15 @@ $2',
 'welcomecreation-msg' => 'താങ്കളുടെ അംഗത്വം സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു.
 താങ്കളുടെ [[Special:Preferences|{{SITENAME}} ക്രമീകരണങ്ങളിൽ]] മാറ്റം വരുത്താൻ മറക്കരുത്.',
 'yourname' => 'ഉപയോക്തൃനാമം:',
+'userlogin-yourname' => 'ഉപയോക്തൃനാമം',
+'userlogin-yourname-ph' => 'താങ്കളുടെ ഉപയോക്തൃനാമം നൽകുക',
 'yourpassword' => 'രഹസ്യവാക്ക്:',
+'userlogin-yourpassword' => 'രഹസ്യവാക്ക്',
+'userlogin-yourpassword-ph' => 'താങ്കളുടെ രഹസ്യവാക്ക് നൽകുക',
 'yourpasswordagain' => 'രഹസ്യവാക്ക് ഒരിക്കൽക്കൂടി:',
 'remembermypassword' => 'എന്റെ പ്രവേശനം ഈ ബ്രൗസറിൽ ({{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസം}}) ഓർത്തുവെക്കുക',
+'userlogin-remembermypassword' => 'എന്നെ ഓർത്തുവെയ്ക്കുക',
+'userlogin-signwithsecure' => 'സുരക്ഷിത സെർവർ ഉപയോഗിച്ച് പ്രവേശിക്കുക',
 'securelogin-stick-https' => 'പ്രവേശനത്തിനു ശേഷവും എച്ച്.റ്റി.റ്റി.പി.എസ്. തന്നെ ഉപയോഗിക്കുക',
 'yourdomainname' => 'താങ്കളുടെ ഡൊമെയിൻ:',
 'password-change-forbidden' => 'ഈ വിക്കിയിൽ രഹസ്യവാക്കുകൾ മാറ്റാനാവില്ല.',
@@ -765,12 +770,16 @@ $2',
 'logout' => 'ലോഗൗട്ട്',
 'userlogout' => 'ലോഗൗട്ട്',
 'notloggedin' => 'പ്രവേശിച്ചിട്ടില്ല',
+'userlogin-noaccount' => 'അംഗത്വമില്ലേ?',
+'userlogin-joinproject' => '{{SITENAME}} സം‌രംഭത്തിൽ ചേരുക',
 'nologin' => "അംഗത്വമില്ലേ? '''$1'''.",
 'nologinlink' => 'ഒരംഗത്വമെടുക്കുക',
 'createaccount' => 'അംഗത്വമെടുക്കുക',
 'gotaccount' => "താങ്കൾക്ക് അംഗത്വമുണ്ടോ? '''$1'''.",
 'gotaccountlink' => 'പ്രവേശിക്കുക',
 'userlogin-resetlink' => 'താങ്കളുടെ ലോഗിൻ വിവരങ്ങൾ മറന്നു പോയോ?',
+'helplogin-url' => 'Help:പ്രവേശനം',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|പ്രവേശന സഹായം]]',
 'createaccountmail' => 'താത്കാലികമായ ക്രമരഹിത രഹസ്യവാക്ക് ഉപയോഗിക്കാനനുവാദം നൽകുകയും അത് താഴെ വ്യക്തമാക്കിയിരിക്കുന്ന ഇമെയിൽ വിലാസത്തിലേയ്ക്ക് അയക്കുകയും ചെയ്യുക',
 'createaccountreason' => 'കാരണം:',
 'badretype' => 'താങ്കൾ നൽകിയ രഹസ്യവാക്കുകൾ സമമല്ല.',
@@ -860,6 +869,7 @@ $2',
 'passwordreset-text' => 'രഹസ്യവാക്ക് പുനർസജ്ജീകരിക്കാനായി ഈ ഫോം പൂരിപ്പിക്കുക.',
 'passwordreset-legend' => 'രഹസ്യവാക്ക് പുനഃക്രമീകരിക്കുക',
 'passwordreset-disabled' => 'ഈ വിക്കിയിൽ രഹസ്യവാക്ക് പുനഃക്രമീകരിക്കലുകൾ പ്രവർത്തരഹിതമാക്കിയിരിക്കുകയാണ്.',
+'passwordreset-emaildisabled' => 'ഈ വിക്കിയിൽ ഇമെയിൽ സൗകര്യങ്ങൾ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു.',
 'passwordreset-pretext' => '{{PLURAL:$1||താഴെ ഒരു വിവരശകലം നൽകുക}}',
 'passwordreset-username' => 'ഉപയോക്തൃനാമം:',
 'passwordreset-domain' => 'ഡൊമൈൻ:',
@@ -1088,6 +1098,8 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'content-failed-to-parse' => '$2 ഉള്ളടക്കം $1 മാതൃകയിൽ പാഴ്സ് ചെയ്യൽ പരാജയപ്പെട്ടു: $3',
 'invalid-content-data' => 'അസാധുവായ ഉള്ളടക്ക ഡേറ്റ',
 'content-not-allowed-here' => '"$1" ഉള്ളടക്കം [[$2]] താളിൽ അനുവദിക്കുന്നില്ല',
+'editwarning-warning' => 'ഈ താളിൽ നിന്നു പോകുന്നത് താങ്കൾ വരുത്തിയ മാറ്റങ്ങൾ നഷ്ടപ്പെടാൻ ഇടയാക്കുന്നതാണ്.
+താങ്കൾ ലോഗിൻ ചെയ്തിട്ടുണ്ടെങ്കിൽ, താങ്കളുടെ ക്രമീകരണങ്ങളിൽ "{{int:prefs-editing}}" ഭാഗത്ത് ചെന്ന് ഈ അറിയിപ്പ് ഒഴിവാക്കാവുന്നതാണ്.',
 
 # Content models
 'content-model-wikitext' => 'വിക്കിഎഴുത്ത്',
@@ -2071,6 +2083,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'disambiguations-text' => "താഴെക്കൊടുത്തിരിക്കുന്ന താളുകളിൽ '''വിവക്ഷിതങ്ങൾ താളിലേയ്ക്ക്''' കുറഞ്ഞത് ഒരു കണ്ണിയുണ്ട്. അവ അനുയോജ്യമായ താളിലേയ്ക്ക് കണ്ണിചേർക്കപ്പെടേണ്ടതാവാം. <br />
 [[MediaWiki:Disambiguationspage]] എന്ന താളിൽ കണ്ണി ചേർത്തിട്ടുള്ള ഫലകം ഉപയോഗിക്കുന്ന താളുകളെ വിവക്ഷിതങ്ങൾ താളായി കണക്കാക്കുന്നു.",
 
+'pageswithprop' => 'താളിന്റെ സവിശേഷതകളുള്ള താളുകൾ',
+'pageswithprop-legend' => 'ഒരു താൾ സവിശേഷതയുള്ള താളുകൾ',
 'pageswithprop-submit' => 'പോകൂ',
 
 'doubleredirects' => 'ഇരട്ട തിരിച്ചുവിടലുകൾ',
@@ -3932,6 +3946,8 @@ $5
 'htmlform-submit' => 'സമർപ്പിക്കുക',
 'htmlform-reset' => 'മാറ്റങ്ങൾ വേണ്ട',
 'htmlform-selectorother-other' => 'മറ്റുള്ളവ',
+'htmlform-no' => 'ഇല്ല',
+'htmlform-yes' => 'ശരി',
 
 # SQLite database support
 'sqlite-has-fts' => 'പൂർണ്ണ-എഴുത്ത് തിരച്ചിൽ പിന്തുണയുള്ള $1',
index 92299dc..d2279e1 100644 (file)
@@ -72,8 +72,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Харж буй хэрэглэгчдийн тоог үзүүлэх',
 'tog-oldsig' => 'Одоогийн гарын үсэг:',
 'tog-fancysig' => 'Түүхий гарын үсэг (автомат холбоосгүй)',
-'tog-externaleditor' => 'Үндсэн горимд нэмэлт засварлах багаж хэрэглэх(экспертүүдэд зориулагдсан, таны компьютерт тусгай тохиргоо шаардлагатай)',
-'tog-externaldiff' => 'Үндсэн горим гадаад харьцуулагч программ ашиглах (экспертүүдэд зориулав, таны компьютерт тусгай тохиргоо шаардлагатай)',
 'tog-showjumplinks' => '"Шууд очих" хялбар линкүүдийг ажиллагаатай болгох',
 'tog-uselivepreview' => 'Шууд байдлаар урьдчилж харах (ЖаваСкрипт) (Туршилт)',
 'tog-forceeditsummary' => 'Товч агуулгын талбарыг хоосон үлдээхэд надад мэдэгдэх',
@@ -1097,15 +1095,6 @@ $1",
 Та одоохондоо Google-г ашиглан хайх боломжтой.
 Анхааруулж хэлэхэд, тэдний {{SITENAME}}-н агуулгын индексүүд хоцрогдсон байж магадгүй.',
 
-# Quickbar
-'qbsettings' => 'Шуурхай тавцан',
-'qbsettings-none' => 'Байхгүй',
-'qbsettings-fixedleft' => 'Зүүн талд бэхжүүлсэн',
-'qbsettings-fixedright' => 'Баруун талд бэхжүүлсэн',
-'qbsettings-floatingleft' => 'Зүүн талд хөвсөн',
-'qbsettings-floatingright' => 'Баруун талд хөвсөн',
-'qbsettings-directionality' => 'Тухай хэлний барилаас хамаарч хэлбэрийг бий болгох',
-
 # Preferences page
 'preferences' => 'Хэрэглэгчийн тохиргоо',
 'mypreferences' => 'Миний тохиргоо',
@@ -1659,7 +1648,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization -г харна уу.',
 'http-read-error' => 'HTTP-г унших алдаа.',
 'http-timed-out' => 'HTTP хүсэлтийн хугацаа дуусав.',
 'http-curl-error' => 'Дараах URL-г авчрахад алдаа гарав: $1',
-'http-host-unreachable' => 'URL-д хүрч чадсангүй.',
 'http-bad-status' => 'HTTP хандалтын үед асуудал үүсэв: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1961,15 +1949,6 @@ URL нь зөв болон сайт ажиллагаатай байгаа эсэ
 'listusers-noresult' => 'Хэрэглэгч олдсонгүй.',
 'listusers-blocked' => '(түгжигдсэн)',
 
-# Special:ActiveUsers
-'activeusers' => 'Идэвхитэй хэрэглэгчдийн жагсаалт',
-'activeusers-intro' => 'Энэ нь сүүлийн $1 {{PLURAL:$1|өдөрт|өдөрт}} ямар нэг байдлаар үйлдэл хийсэн хэрэглэгчдийн жагсаалт юм.',
-'activeusers-count' => 'Сүүлийн {{PLURAL:$3|нэг өдөрт|$3 өдөрт}} $1 {{PLURAL:$1|засвар|засвар}}',
-'activeusers-from' => 'Хамгийн эхэлж харуулах хэрэглэгч:',
-'activeusers-hidebots' => 'Ботуудыг нуух',
-'activeusers-hidesysops' => 'Администраторуудыг нуух',
-'activeusers-noresult' => 'Хэрэглэгч олдсонгүй.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Хэрэглэгчийн бүлгийн эрхүүд',
 'listgrouprights-summary' => 'Дараах нь энэ вики дээрх хэрэглэгчийн бүлгүүд болон тэдгээрийн эрх, зөвшөөрлүүдийн жагсаалт юм.
index 9507703..53b7bbb 100644 (file)
@@ -354,8 +354,6 @@ $messages = array(
 'tog-shownumberswatching' => 'पहारा दिलेले सदस्य दाखवा',
 'tog-oldsig' => 'सध्याची सही:',
 'tog-fancysig' => 'सही विकिसंज्ञा म्हणून वापरा (आपोआप दुव्याशिवाय)',
-'tog-externaleditor' => 'कायम बाह्य संपादक वापरा (फक्त प्रशिक्षित सदस्यांसाठीच, संगणकावर विशेष प्रणाली लागते) ([//www.mediawiki.org/wiki/Manual:External_editors अधिक माहिती])',
-'tog-externaldiff' => 'इतिहास पानावर निवडलेल्या आवृत्त्यांमधील बदल दाखविण्यासाठी बाह्य प्रणाली वापरा (फक्त प्रशिक्षित सदस्यांसाठीच, संगणकावर विशेष प्रणाली लागते) ([//www.mediawiki.org/wiki/Manual:External_editors अधिक माहिती])',
 'tog-showjumplinks' => '"कडे जा" सुगम दुवे, उपलब्ध करा.',
 'tog-uselivepreview' => 'संपादन करता करताच झलक दाखवा (जावास्क्रीप्ट)(प्रयोगक्षम)',
 'tog-forceeditsummary' => 'जर ’बदलांचा आढावा’ दिला नसेल तर मला सूचित करा',
@@ -369,6 +367,7 @@ $messages = array(
 'tog-diffonly' => 'निवडलेल्या आवृत्त्यांमधील बदल दाखवताना जुनी आवृत्ती दाखवू नका.',
 'tog-showhiddencats' => 'लपविलेले वर्ग दाखवा',
 'tog-norollbackdiff' => 'द्रुतमाघार घेतल्यास बदल वगळा',
+'tog-useeditwarning' => 'जर मी संपादित करीत असलेल्या पानावरील माझे संपादिलेले बदल जतन न केल्यास मला इशारा द्या',
 
 'underline-always' => 'नेहेमी',
 'underline-never' => 'कधीच नाही',
@@ -1039,6 +1038,8 @@ $2',
 या नावाचे पान आधीच अस्तित्वात आहे.',
 'defaultmessagetext' => 'कसूर पाठ्य मजकूर',
 'invalid-content-data' => 'अवैध माहिती',
+'editwarning-warning' => "या पानावरुन दुसर्‍या पानावर गेल्यास, तुम्ही येथे केलेले बदल जतन होणार नाहीत.
+ही सूचना घालवण्यासाठी ''माझ्या पसंती'' मधील संपादनपसंतीत बदल करा.",
 
 # Content models
 'content-model-wikitext' => 'विकिमजकूर',
@@ -1314,15 +1315,6 @@ $1",
 'search-external' => 'बाह्य शोध',
 'searchdisabled' => '{{SITENAME}} शोध अनुपलब्ध केला आहे.तो पर्यंत गूगलवरून शोध घ्या.{{SITENAME}}च्या मजकुराची त्यांची सूचिबद्धता शिळी असण्याची शक्यता असू शकते हे लक्षात घ्या.',
 
-# Quickbar
-'qbsettings' => 'शीघ्रपट',
-'qbsettings-none' => 'नाही',
-'qbsettings-fixedleft' => 'स्थिर डावे',
-'qbsettings-fixedright' => 'स्थिर ऊजवे',
-'qbsettings-floatingleft' => 'तरंगते डावे',
-'qbsettings-floatingright' => 'तरंगते ऊजवे',
-'qbsettings-directionality' => 'तुमच्या भाशा ची पद्धत दिशात्मक असली पाहिजे.',
-
 # Preferences page
 'preferences' => 'माझ्या पसंती',
 'mypreferences' => 'माझ्या पसंती',
index 43777f4..3b86d67 100644 (file)
@@ -220,8 +220,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Tunjukkan bilangan pemantau',
 'tog-oldsig' => 'Tanda tangan yang sedia ada:',
 'tog-fancysig' => 'Anggap tandatangan sebagai teks wiki (tanpa pautan automatik)',
-'tog-externaleditor' => 'Utamakan penyunting luar (hanya untuk pakar, perlu tetapan khas pada komputer anda. [//www.mediawiki.org/wiki/Manual:External_editors Maklumat lanjut.])',
-'tog-externaldiff' => 'Utamakan pembeza luar (hanya untuk pakar, perlu tetapan khas pada komputer anda. [//www.mediawiki.org/wiki/Manual:External_editors Maklumat lanjut.])',
 'tog-showjumplinks' => 'Bolehkan pautan ketercapaian "lompat ke"',
 'tog-uselivepreview' => 'Gunakan pralihat langsung (JavaScript) (dalam percubaan)',
 'tog-forceeditsummary' => 'Tanya saya jika ringkasan suntingan kosong',
@@ -236,14 +234,15 @@ $messages = array(
 'tog-showhiddencats' => 'Tunjukkan kategori tersembunyi',
 'tog-noconvertlink' => 'Lumpuhkan penukaran tajuk pautan',
 'tog-norollbackdiff' => 'Abaikan perbezaan selepas melakukan pengunduran suntingan.',
+'tog-useeditwarning' => 'Beri saya amaran apabila saya meninggalkan sesebuah laman penyuntingan tanpa menyimpan perubahan.',
 
 'underline-always' => 'Sentiasa',
 'underline-never' => 'Jangan',
-'underline-default' => 'Tetapan azali kulit/pelayar',
+'underline-default' => 'Tetapan lalai kulit/pelayar',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Gaya fon ruang sunting:',
-'editfont-default' => 'Pelayar web utama',
+'editfont-default' => 'Lalaian pelayar web',
 'editfont-monospace' => 'Fon monospace',
 'editfont-sansserif' => 'Fon sans-serif',
 'editfont-serif' => 'Fon serif',
@@ -324,7 +323,7 @@ $messages = array(
 'about' => 'Perihal',
 'article' => 'Laman kandungan',
 'newwindow' => '(dibuka di tetingkap baru)',
-'cancel' => 'Batalkan',
+'cancel' => 'Batal',
 'moredotdotdot' => 'Lagi...',
 'morenotlisted' => 'Lain-lain yang tidak tersenarai...',
 'mypage' => 'Halaman',
@@ -608,9 +607,15 @@ Anda boleh terus menggunakan {{SITENAME}} sebagai pengguna tanpa nama, atau anda
 'welcomecreation-msg' => 'Akaun anda telah dibuka.
 Jangan lupa untuk mengubah [[Special:Preferences|keutamaan anda di {{SITENAME}}]].',
 'yourname' => 'Nama pengguna:',
+'userlogin-yourname' => 'Nama pengguna',
+'userlogin-yourname-ph' => 'Masukkan nama pengguna anda',
 'yourpassword' => 'Kata laluan:',
+'userlogin-yourpassword' => 'Kata laluan',
+'userlogin-yourpassword-ph' => 'Masukkan kata laluan anda',
 'yourpasswordagain' => 'Ulangi kata laluan:',
 'remembermypassword' => 'Ingat log masuk saya pada pelayar ini (tidak melebihi $1 {{PLURAL:$1|hari|hari}})',
+'userlogin-remembermypassword' => 'Ingati saya',
+'userlogin-signwithsecure' => 'Daftar masuk dengan pelayan terlindung',
 'securelogin-stick-https' => 'Kekal disambungkan ke HTTPS selepas log masuk',
 'yourdomainname' => 'Domain anda:',
 'password-change-forbidden' => 'Anda tidak dapat mengubah kata laluan di wiki ini.',
@@ -623,12 +628,16 @@ Jangan lupa untuk mengubah [[Special:Preferences|keutamaan anda di {{SITENAME}}]
 'logout' => 'Log keluar',
 'userlogout' => 'Log keluar',
 'notloggedin' => 'Belum log masuk',
+'userlogin-noaccount' => 'Belum buka akaun?',
+'userlogin-joinproject' => 'Sertai {{SITENAME}}',
 'nologin' => "Belum mempunyai akaun? '''$1'''.",
 'nologinlink' => 'Buka akaun baru',
 'createaccount' => 'Buka akaun',
 'gotaccount' => "Sudah mempunyai akaun? '''$1'''.",
 'gotaccountlink' => 'Log masuk',
 'userlogin-resetlink' => 'Lupa nama pengguna/kata laluan anda?',
+'helplogin-url' => 'Help:Log masuk',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Bantuan untuk log masuk]]',
 'createaccountmail' => 'Gunakan kata laluan rawak yang sementara dan hantarnya ke alamat e-mel yang dinyatakan di bawah',
 'createaccountreason' => 'Sebab:',
 'badretype' => 'Sila ulangi kata laluan dengan betul.',
@@ -724,6 +733,7 @@ Anda mungkin telah pun berjaya menukar kata laluan anda atau meminta kata laluan
 'passwordreset-text' => 'Lengkapkan borang ini untuk mengeset semula kata laluan.',
 'passwordreset-legend' => 'Set semula kata laluan',
 'passwordreset-disabled' => 'Ciri set semula kata laluan telah dimatikan di wiki ini.',
+'passwordreset-emaildisabled' => 'Ciri-ciri e-mel telah dipadamkan di wiki ini.',
 'passwordreset-pretext' => '{{PLURAL:$1||Isikan data di bawah}}',
 'passwordreset-username' => 'Nama pengguna:',
 'passwordreset-domain' => 'Domain:',
@@ -958,6 +968,8 @@ Log penghapusan bagi laman ini dilampirkan di bawah untuk rujukan.',
 'content-failed-to-parse' => 'Kandungan $2 tidak dapat dihuraikan untuk model $1: $3',
 'invalid-content-data' => 'Data kandungan tidak sah',
 'content-not-allowed-here' => 'Kandungan "$1" tidak dibenarkan di halaman [[$2]]',
+'editwarning-warning' => 'Meninggalkan laman ini mungkin akan menyebabkan sebarang perubahan yang telah anda lakukan hilang.
+Jika anda sudah log masuk, anda boleh melumpuhkan amaran ini di bahagian "Menyunting" dalam keutamaan anda.',
 
 # Content models
 'content-model-wikitext' => 'wikiteks',
@@ -3811,6 +3823,8 @@ Imej ditunjuk dalam leraian penuh, jenis fail yang lain dibuka dengan atur cara
 'htmlform-submit' => 'Hantar',
 'htmlform-reset' => 'Undur perubahan',
 'htmlform-selectorother-other' => 'Lain-lain',
+'htmlform-no' => 'Tidak',
+'htmlform-yes' => 'Ya',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 dengan sokongan carian teks penuh',
index e5cc31b..6bee092 100644 (file)
@@ -302,8 +302,6 @@ $messages = array(
 'tog-shownumberswatching' => "Uri n-numru ta' utenti li qegħdin isegwu din il-paġna",
 'tog-oldsig' => 'Firma attwali:',
 'tog-fancysig' => 'Interpreta l-firma bħala test tal-wiki (mingħajr ħolqa awtomatika)',
-'tog-externaleditor' => 'Uża awtomatikament editur estern (għal utenti esperti biss, hemm bżonn preferenzi speċjali fuq il-komputer tiegħek. [//www.mediawiki.org/wiki/Manual:External_editors Iktar informazzjoni.])',
-'tog-externaldiff' => 'Uża awtomatikament diff estern (għal utenti esperti biss, hemm bżonn preferenzi speċjali fuq il-komputer tiegħek. [//www.mediawiki.org/wiki/Manual:External_editors Iktar informazzjoni.])',
 'tog-showjumplinks' => 'Attiva l-ħoloq aċċessibbli "aqbeż għal"',
 'tog-uselivepreview' => "Attiva l-funzjoni ''Live preview'' (bżonn tal-JavaScript; sperimentali)",
 'tog-forceeditsummary' => 'Nebbaħni meta ndaħħal taqsira tal-modifika vojta',
@@ -317,6 +315,7 @@ $messages = array(
 'tog-diffonly' => 'Turiex kontenut tal-paġni wara li tkun għamilt paragun bejn il-verżjonijiet',
 'tog-showhiddencats' => 'Uri kategoriji moħbija',
 'tog-norollbackdiff' => "Turix il-paragun bejn il-verżjonijiet wara li tkun effettwajt ir-''rollback''",
+'tog-useeditwarning' => "Avżani kull meta nħalli paġna ta' modifika b'modifiki li għadhom ma ġewx salvati",
 
 'underline-always' => 'Dejjem',
 'underline-never' => 'Qatt',
@@ -1012,6 +1011,7 @@ Jidher li din ġiet imħassra.',
 'edit-no-change' => 'Il-modifika li għamilt ġiet injorata, minħabba li ebda bidla ma saret lejn it-test.',
 'edit-already-exists' => 'Ma tistax tinħoloq din il-paġna.
 Din teżisti diġà.',
+'editwarning-warning' => 'Jekk tħalli din il-paġna jista\' jwassal sabiex titlef kwalunkwe tibdil li tkun għamilt. Jekk int tinsab fil-kont tiegħek, tista\' tneħħi dan l-avviż fis-sezzjoni "Modifiki" tal-preferenzi tiegħek.',
 
 # Content models
 'content-model-wikitext' => 'test tal-wiki',
@@ -1282,15 +1282,6 @@ Ipprova għamel prefiss għall-inkjesta tiegħek ma' ''all:'' sabiex tfittex il-
 Sadanittant, tista' tipprova tfittex bil-Google.
 Innota però li l-werreja tal-kontenut ta' {{SITENAME}} f'dawn is-siti, jistgħu ma jkunux aġġornati.",
 
-# Quickbar
-'qbsettings' => "''Quickbar''",
-'qbsettings-none' => 'Xejn',
-'qbsettings-fixedleft' => 'Mehmuż fix-xellug',
-'qbsettings-fixedright' => 'Mehmuż fil-lemin',
-'qbsettings-floatingleft' => "''Floating'' lejn ix-xellug",
-'qbsettings-floatingright' => "''Floating'' lejn il-lemin",
-'qbsettings-directionality' => 'Fiss, skont id-direzzjoni tat-test fil-lingwa tiegħek',
-
 # Preferences page
 'preferences' => 'Preferenzi',
 'mypreferences' => 'Preferenzi',
@@ -1800,7 +1791,6 @@ Għal sigurtà ottimali, img_auth.php hija diżattivata.",
 'http-read-error' => 'Żball fil-qari HTTP.',
 'http-timed-out' => 'Rikjesta HTTP skaduta.',
 'http-curl-error' => 'Żball fil-kisba tal-URL: $1',
-'http-host-unreachable' => 'Il-URL ma setgħetx tintlaħaq.',
 'http-bad-status' => 'Kien hemm problema matul ir-rikjesta HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2116,15 +2106,6 @@ Protokolli aċċettati: <code>$1</code> (jekk ma jiġi speċifikat l-ebda protok
 'listusers-noresult' => 'L-ebda utent ma nstab.',
 'listusers-blocked' => '(imblukkat)',
 
-# Special:ActiveUsers
-'activeusers' => 'Lista tal-utenti attivi',
-'activeusers-intro' => "Din hija lista ta' utenti li kellhom xi tip ta' attività f'dawn l-aħħar $1 {{PLURAL:$1|ġurnata|ġurnata}}.",
-'activeusers-count' => '$1 {{PLURAL:$1|modifika|modifika}} fl-aħħar {{PLURAL:$3|jum|$3 jum}}',
-'activeusers-from' => 'Uri utenti li jibdew minn:',
-'activeusers-hidebots' => 'Aħbi l-bots',
-'activeusers-hidesysops' => 'Aħbi amministraturi',
-'activeusers-noresult' => 'L-ebda utent ma nstab.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Drittijiet tal-grupp tal-utenti',
 'listgrouprights-summary' => "Hawn taħt hawn elenkati l-gruppi tal-utenti għal din il-wiki, bid-drittijiet ta' aċċess rispettiv.
@@ -2891,24 +2872,14 @@ Kull azzjonijiet ta' importazzjoni tal-transwiki jiġu reġistrati fil-[[Special
 
 # Stylesheets
 'common.css' => '/* CSS li tpoġġa hawnhekk irrid jiġi applikat fl-iskins kollha */',
-'standard.css' => '/* CSS li tpoġġa hawnhekk se jaffetwa l-utenti li jagħmlu użu mill-iskin Standard */',
-'nostalgia.css' => '/* CSS li tpoġġa hawnhekk se jaffetwa l-utenti li jagħmlu użu mill-aspett grafiku Nostalgia */',
 'cologneblue.css' => '/* CSS li tpoġġa hawnhekk se jaffetwa dawk l-utenti li jagħmlu użu mill-aspett grafiku Cologne Blue */',
 'monobook.css' => "/* CSS li tpoġġa hawnhekk se jaffetwa dawk l-utenti li jagħmlu użu mill-iskin ''Monobook'' */",
-'myskin.css' => "/* CSS li tpoġġa hawnhekk se jaffetwa dawk l-utenti li jagħmlu użu mill-iskin ''L-Iskin tiegħi'' */",
-'chick.css' => '/* CSS li tpoġġa hawnhekk se jaffetwa dawk l-utenti li jagħmlu użu mill-aspett grafiku Ckick */',
-'simple.css' => '/* CSS li tpoġġa hawnhekk se jaffetwa dawk l-utenti li jagħmlu użu mill-aspett grafiku Simple */',
 'modern.css' => '/* CSS li tpoġġa hawnhekk se jaffetwa dawk l-utenti li jagħmlu użu mill-aspett grafiku Modern */',
 
 # Scripts
 'common.js' => "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal kull utent f'kull tniżżil ta' paġna. */",
-'standard.js' => "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''Standard'' */",
-'nostalgia.js' => "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''Nostalgia'' */",
 'cologneblue.js' => "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''Cologne Blue'' */",
 'monobook.js' => "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''Monobook'' */",
-'myskin.js' => "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''MySkin'' */",
-'chick.js' => "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''Chick'' */",
-'simple.js' => "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''Simple'' */",
 'modern.js' => "/* Kull ''JavaScript'' hawnhekk jiġi mniżżel għal dawk l-utenti li qegħdin jagħmlu użu mill-iskin ''Modern''*/",
 
 # Metadata
@@ -2974,13 +2945,8 @@ Kull azzjonijiet ta' importazzjoni tal-transwiki jiġu reġistrati fil-[[Special
 'pageinfo-protect-cascading-from' => 'Protezzjoni li tintiret minn',
 
 # Skin names
-'skinname-standard' => 'Classic',
-'skinname-nostalgia' => 'Nostalgia',
 'skinname-cologneblue' => 'Cologne Blue',
 'skinname-monobook' => 'Monobook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Simple',
 'skinname-modern' => 'Modern',
 
 # Patrolling
index dff0e15..ae6c6b5 100644 (file)
@@ -346,8 +346,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Vis antall brukere som overvåker',
 'tog-oldsig' => 'Nåværende signatur:',
 'tog-fancysig' => 'Behandle signaturen som wikitekst (uten automatisk lenke)',
-'tog-externaleditor' => 'Bruk ekstern behandler som standard (kun for viderekomne brukere, krever spesielle innstillinger på din datamaskin. [//www.mediawiki.org/wiki/Manual:External_editors Mer informasjon.])',
-'tog-externaldiff' => 'Bruk ekstern differanse som standard (kun for viderekomne brukere, krever spesielle innstillinger på din datamaskin. [//www.mediawiki.org/wiki/Manual:External_editors Mer informasjon.])',
 'tog-showjumplinks' => 'Slå på «gå til»-lenker',
 'tog-uselivepreview' => 'Bruk levende forhåndsvisning (eksperimentell JavaScript)',
 'tog-forceeditsummary' => 'Advar meg når jeg ikke gir noen redigeringsforklaring',
@@ -361,6 +359,7 @@ $messages = array(
 'tog-diffonly' => 'Ikke vis sideinnhold under differ',
 'tog-showhiddencats' => 'Vis skjulte kategorier',
 'tog-norollbackdiff' => 'Ikke vis diff etter tilbakestilling',
+'tog-useeditwarning' => 'Si ifra dersom jeg forlater en side jeg har gjort redigeringer på men ikke har lagret siden.',
 
 'underline-always' => 'Alltid',
 'underline-never' => 'Aldri',
@@ -730,9 +729,15 @@ Merk at noen sider kan vise at du fortsatt er logget inn fram til du tømmer mel
 'welcomecreation-msg' => 'Kontoen din har blitt opprettet.
 Ikke glem å endre [[Special:Preferences|innstillingene dine]] på {{SITENAME}}.',
 'yourname' => 'Brukernavn:',
+'userlogin-yourname' => 'Brukernan',
+'userlogin-yourname-ph' => 'Skriv inn brukernavnet ditt',
 'yourpassword' => 'Passord:',
+'userlogin-yourpassword' => 'Passord',
+'userlogin-yourpassword-ph' => 'Skriv inn passordet ditt',
 'yourpasswordagain' => 'Gjenta passord',
 'remembermypassword' => 'Husk meg på denne datamaskinen (i maks $1 {{PLURAL:$1|dag|dager}})',
+'userlogin-remembermypassword' => 'Husk brukernavn og passord',
+'userlogin-signwithsecure' => 'Logg inn med sikker tjener',
 'securelogin-stick-https' => 'Vær fortsatt koblet til HTTPS etter innlogging',
 'yourdomainname' => 'Ditt domene',
 'password-change-forbidden' => 'Du kan ikke endre passord på denne wikien.',
@@ -745,12 +750,16 @@ Ikke glem å endre [[Special:Preferences|innstillingene dine]] på {{SITENAME}}.
 'logout' => 'Logg ut',
 'userlogout' => 'Logg ut',
 'notloggedin' => 'Ikke logget inn',
+'userlogin-noaccount' => 'Ingen konto?',
+'userlogin-joinproject' => 'Bli med på {{SITENAME}}',
 'nologin' => 'Har du ingen konto? $1.',
 'nologinlink' => 'Opprett en konto',
 'createaccount' => 'Opprett konto',
 'gotaccount' => 'Har du allerede en konto? $1.',
 'gotaccountlink' => 'Logg inn',
 'userlogin-resetlink' => 'Har du glemt påloggingsdetaljene dine?',
+'helplogin-url' => 'Help:Innlogging',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjelp med innlogging]]',
 'createaccountmail' => 'Bruk et midlertidig tilfeldig passord, og send det til e-postadressen nedenfor',
 'createaccountreason' => 'Årsak:',
 'badretype' => 'Passordene samsvarte ikke.',
@@ -845,6 +854,7 @@ Du kan ha allerede byttet passordet, eller bedt om et nytt midlertidig passord.'
 'passwordreset-text' => 'Fyll ut dette skjemaet for å tilbakestille passordet ditt.',
 'passwordreset-legend' => 'Nullstill passord',
 'passwordreset-disabled' => 'Nullstilling av passord er deaktivert på denne wikien.',
+'passwordreset-emaildisabled' => 'E-posttjenester er slått av på denne wikien.',
 'passwordreset-pretext' => '{{PLURAL:$1||Skriv inn en av datadelene nedenfor}}',
 'passwordreset-username' => 'Brukernavn:',
 'passwordreset-domain' => 'Domene:',
@@ -1094,6 +1104,7 @@ Slette- og flytteloggen vises nedenfor.',
 'content-failed-to-parse' => 'Klarte ikke å tolke innholdet $2 for innholdsmodellen $1: $3',
 'invalid-content-data' => 'Ugyldig innhold',
 'content-not-allowed-here' => 'Innholdsmodellen «$1» er ikke tillatt på siden [[$2]]',
+'editwarning-warning' => 'Ved å forlate siden kan du miste alle endringer du har utført. Om du er logget inn kan du slå av denne advarselen under «Redigering»-seksjonen i innstillingene.',
 
 # Content models
 'content-model-wikitext' => 'WikiTekst',
@@ -1375,6 +1386,7 @@ For å søke i alle, bruk prefikset ''all:'' (inkluderer diskusjonssider, maler,
 'powersearch-togglenone' => 'Ingen',
 'search-external' => 'Eksternt søk',
 'searchdisabled' => 'Søkefunksjonen er slått av. Du kan søke via Google i mellomtiden. Merk at Googles indeksering av {{SITENAME}} muligens er utdatert.',
+'search-error' => 'En feil oppsto under søk: $1',
 
 # Preferences page
 'preferences' => 'Innstillinger',
@@ -3944,6 +3956,8 @@ Bilder vises med full oppløsning, mens andre filtyper startes direkte gjennom s
 'htmlform-submit' => 'Lagre',
 'htmlform-reset' => 'Omgjør endringer',
 'htmlform-selectorother-other' => 'Andre',
+'htmlform-no' => 'Nei',
+'htmlform-yes' => 'Ja',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 med støtte for fulltekstsøk',
index ec5d9d6..4beb139 100644 (file)
@@ -246,8 +246,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Wies de Tall vun Brukers, de op disse Siet oppasst',
 'tog-oldsig' => 'Gellen Ünnerschrift',
 'tog-fancysig' => 'Signatur as Wikitext behanneln (ahn automaatsch Lenk)',
-'tog-externaleditor' => 'Extern Editor as Standard bruken (Blots för Lüüd, de sik dormit utkennt. Dor mutt noch mehr op dien Reekner instellt warrn, dat dat geiht. [//www.mediawiki.org/wiki/Manual:External_editors Wiedere Informatschonen hierto.])',
-'tog-externaldiff' => 'Extern Warktüüch to’n Wiesen vun Ünnerscheden as Standard bruken (Blots för Lüüd, de sik dormit utkennt. Dor mutt noch mehr op dien Reekner instellt warrn, dat dat geiht. [//www.mediawiki.org/wiki/Manual:External_editors Wiedere Informatschonen hierto.])',
 'tog-showjumplinks' => '„Wesseln-na“-Lenken tolaten',
 'tog-uselivepreview' => 'Live-Vörschau bruken (JavaScript) (Experimental)',
 'tog-forceeditsummary' => 'Segg mi bescheid, wenn ik keen Tosamenfaten geven heff, wat ik allens ännert heff',
index 031dead..4768673 100644 (file)
@@ -336,8 +336,6 @@ $messages = array(
 'tog-shownumberswatching' => 't Antal gebrukers bekieken die disse zied volgt',
 'tog-oldsig' => 'Bestaonde haandtekening:',
 'tog-fancysig' => 'Ondertekening zien as wikitekste (zonder automatiese verwiezing)',
-'tog-externaleditor' => 'Standard n externe tekstbewarker gebruken (allinnig veur gevorderden - veur disse funksie bin spesiale instellingen neudig. [//www.mediawiki.org/wiki/Manual:External_editors Meer informasie]).',
-'tog-externaldiff' => 'Standard n extern vergeliekingsprogramma gebruken (allinnig veur gevorderden - veur disse funksie bin spesiale instellingen neudig. [//www.mediawiki.org/wiki/Manual:External_editors Meer informasie]).',
 'tog-showjumplinks' => '"Gao naor"-verwiezingen toelaoten',
 'tog-uselivepreview' => 'Gebruuk "rechtstreeks naokieken" (mu\'j JavaScript veur hebben - experimenteel)',
 'tog-forceeditsummary' => 'Geef n melding bie n lege samenvatting',
@@ -352,6 +350,7 @@ $messages = array(
 'tog-showhiddencats' => 'Laot verbörgen kategorieën zien',
 'tog-noconvertlink' => 'Ziednaamkonversie uutschakelen',
 'tog-norollbackdiff' => 'Wiezigingen vortlaoten nao t weerummedreien',
+'tog-useeditwarning' => "Waorschuw mien a'k n bewörken zied aof wil sluten die nog niet op-esleugen is",
 
 'underline-always' => 'Altied',
 'underline-never' => 'Nooit',
@@ -1070,6 +1069,8 @@ t Schient dat t vortedaon is.',
 'edit-already-exists' => 'De zied kon niet an-emaakt wörden.
 t Besteet al.',
 'defaultmessagetext' => 'Standardtekste',
+'editwarning-warning' => "A'j disse zied aofsluten dan kan t ween dat der wieziging die'j emaakt hebben kwiet raken.
+A'j an-emeld bin, dan ku'j disse waorschuwing uutzetten in t tabblad \"Bewarken\" in joew veurkeuren.",
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Waorschuwing: disse zied gebruukt te veule kostbaore parserfunksies.
@@ -1340,15 +1341,6 @@ Waorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}
 'search-external' => 'Extern zeuken',
 'searchdisabled' => 'Zeuken in {{SITENAME}} is niet meugelik. Je kunnen gebruukmaken van Google. De gegevens over {{SITENAME}} bin misschien niet bie-ewörken.',
 
-# Quickbar
-'qbsettings' => 'Lieste mit ziejen',
-'qbsettings-none' => 'Gien',
-'qbsettings-fixedleft' => 'Links, vaste',
-'qbsettings-fixedright' => 'Rechts, vaste',
-'qbsettings-floatingleft' => 'Links, zweven',
-'qbsettings-floatingright' => 'Rechts, zweven',
-'qbsettings-directionality' => 'Vaste, aofhankelik van de schriefrichtige van joew taal',
-
 # Preferences page
 'preferences' => 'Veurkeuren',
 'mypreferences' => 'Mien veurkeuren',
@@ -1891,7 +1883,6 @@ Um beveiligingsredens is img_auth.php uutezet.',
 'http-read-error' => 'Fout bie t lezen van HTTP',
 'http-timed-out' => 'Wachttied bie t HTTP verzeuk',
 'http-curl-error' => 'Fout bie t ophaolen van t webadres: $1',
-'http-host-unreachable' => 'Kon webadres niet bereiken.',
 'http-bad-status' => 'Der is n probleem mit t HTTP-verzeuk: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2209,15 +2200,6 @@ Ondersteunde protokollen: <code>$1</code> (zet t niet in joew zeukopdrachte).',
 'listusers-noresult' => 'Gien gebrukers evunnen. Zeuk oek naor variaanten mit kleine letters of heufdletters.',
 'listusers-blocked' => '(eblokkeerd)',
 
-# Special:ActiveUsers
-'activeusers' => 'Aktieve gebrukers',
-'activeusers-intro' => 'Dit is n lieste van gebrukers die de aofgeleupen $1 {{PLURAL:$1|dag|dagen}} enigszins aktief ewest hebben.',
-'activeusers-count' => '$1 leste {{PLURAL:$1|bewarking|bewarkingen}} in de aofgeleupen {{PLURAL:$3|dag|$3 dagen}}',
-'activeusers-from' => 'Laot gebrukers zien vanaof:',
-'activeusers-hidebots' => 'Bots verbargen',
-'activeusers-hidesysops' => 'Beheerders verbargen',
-'activeusers-noresult' => 'Gien aktieve gebrukers evunnen.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Rechten van gebrukersgroepen',
 'listgrouprights-summary' => "Op disse zied staon de gebrukersgroepen van disse wiki beschreven, mit de biebeheurende rechten.
@@ -3055,13 +3037,8 @@ Meestentieds kömp dit deur n uutgaonde verwiezing die op de zwarte lieste steet
 'pageinfo-templates' => '{{PLURAL:$1|Gebruukten mal|Gebruukten mallen}} ($1)',
 
 # Skin names
-'skinname-standard' => 'Klassiek',
-'skinname-nostalgia' => 'Nostalgie',
 'skinname-cologneblue' => 'Keuls blauw',
 'skinname-monobook' => 'Monobook',
-'skinname-myskin' => 'MienSkin',
-'skinname-chick' => 'Deftig',
-'skinname-simple' => 'Eenvoudig',
 'skinname-modern' => 'Niejmoeds',
 
 # Patrolling
index 84c11d4..d0c1f30 100644 (file)
@@ -384,8 +384,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Het aantal gebruikers weergeven dat deze pagina volgt',
 'tog-oldsig' => 'Bestaande ondertekening:',
 'tog-fancysig' => 'Als wikitekst behandelen (zonder automatische koppeling)',
-'tog-externaleditor' => 'Standaard een externe tekstbewerker gebruiken (alleen voor experts - voor deze functie zijn speciale instellingen nodig. [//www.mediawiki.org/wiki/Manual:External_editors Meer informatie]).',
-'tog-externaldiff' => 'Standaard een extern vergelijkingsprogramma gebruiken (alleen voor experts - voor deze functie zijn speciale instellingen nodig. [//www.mediawiki.org/wiki/Manual:External_editors Meer informatie]).',
 'tog-showjumplinks' => '"ga naar"-toegankelijkheidskoppelingen inschakelen',
 'tog-uselivepreview' => '"live voorvertoning" gebruiken (vereist JavaScript – experimenteel)',
 'tog-forceeditsummary' => 'Een melding geven bij een lege bewerkingssamenvatting',
@@ -400,6 +398,7 @@ $messages = array(
 'tog-showhiddencats' => 'Verborgen categorieën weergeven',
 'tog-noconvertlink' => 'Paginanaamconversie uitschakelen',
 'tog-norollbackdiff' => 'Wijzigingen weglaten na terugdraaien',
+'tog-useeditwarning' => 'Waarschuw mij als ik een bewerkte pagina die nog niet is opgeslagen wil verlaten',
 
 'underline-always' => 'Altijd',
 'underline-never' => 'Nooit',
@@ -774,9 +773,15 @@ Mogelijk worden nog een aantal pagina's weergegeven alsof u aangemeld bent totda
 'welcomecreation-msg' => 'Uw gebruiker is aangemaakt.
 Vergeet niet uw [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te passen.',
 'yourname' => 'Gebruikersnaam:',
+'userlogin-yourname' => 'Gebruikersnaam',
+'userlogin-yourname-ph' => 'Geef uw gebruikersnaam op',
 'yourpassword' => 'Wachtwoord:',
+'userlogin-yourpassword' => 'Wachtwoord',
+'userlogin-yourpassword-ph' => 'Geef uw wachtwoord op',
 'yourpasswordagain' => 'Geef uw wachtwoord opnieuw in:',
 'remembermypassword' => 'Aanmeldgegevens onthouden (maximaal $1 {{PLURAL:$1|dag|dagen}})',
+'userlogin-remembermypassword' => 'Aanmeldgegevens onthouden',
+'userlogin-signwithsecure' => 'Aanmelden via beveiligde server',
 'securelogin-stick-https' => 'Verbonden blijven via HTTPS na aanmelden',
 'yourdomainname' => 'Uw domein:',
 'password-change-forbidden' => 'U kunt uw wachtwoord niet wijzigen in deze wiki.',
@@ -789,12 +794,16 @@ Vergeet niet uw [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te pass
 'logout' => 'Afmelden',
 'userlogout' => 'Afmelden',
 'notloggedin' => 'Niet aangemeld',
+'userlogin-noaccount' => 'Hebt u geen geregistreerde gebruiker?',
+'userlogin-joinproject' => 'Word lid van {{SITENAME}}',
 'nologin' => 'Nog geen gebruikersnaam? $1.',
 'nologinlink' => 'Registreren',
 'createaccount' => 'Registreren',
 'gotaccount' => 'Hebt u al een gebruikersnaam? $1.',
 'gotaccountlink' => 'Aanmelden',
 'userlogin-resetlink' => 'Bent u uw aanmeldgegevens vergeten?',
+'helplogin-url' => 'Help:Aanmelden',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hulp bij aanmelden]]',
 'createaccountmail' => 'Gebruik een tijdelijk willekeurig wachtwoord en stuur het naar het e-mailadres dat hieronder is vermeld',
 'createaccountreason' => 'Reden:',
 'badretype' => 'De ingevoerde wachtwoorden verschillen van elkaar.',
@@ -908,6 +917,7 @@ Mogelijk hebt u uw wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aan
 'passwordreset-text' => 'Vul dit formulier in om uw wachtwoord opnieuw in te stellen.',
 'passwordreset-legend' => 'Wachtwoord opnieuw instellen',
 'passwordreset-disabled' => 'Het is in deze wiki niet mogelijk uw wachtwoord opnieuw in te stellen.',
+'passwordreset-emaildisabled' => 'E-mailmogelijkheden zijn uitgeschakeld op deze wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Voer één van de onderstaande velden in}}',
 'passwordreset-username' => 'Gebruiker:',
 'passwordreset-domain' => 'Domein:',
@@ -1159,6 +1169,8 @@ Deze bestaat al.',
 'content-failed-to-parse' => 'Het was niet mogelijk de inhoud van het MIME-type $2 voor het model $1 te verwerken: $3.',
 'invalid-content-data' => 'Ongeldige inhoudsgegevens',
 'content-not-allowed-here' => 'De inhoud "$1" is niet toegestaan op pagina [[$2]].',
+'editwarning-warning' => 'Als u deze pagina verlaat verliest u mogelijk wijzigingen die u hebt gemaakt.
+Als u bent aangemeld, kunt u deze waarschuwing uitschakelen in het tabblad "{{int:prefs-editing}}" in uw voorkeuren.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
@@ -1448,6 +1460,7 @@ U kunt ook een naamruimte als voorvoegsel gebruiken.",
 'searchdisabled' => 'Zoeken in {{SITENAME}} is niet mogelijk.
 U kunt gebruik maken van Google.
 De gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.',
+'search-error' => 'Er is een fout opgetreden tijdens het zoeken: $1',
 
 # Preferences page
 'preferences' => 'Voorkeuren',
@@ -4090,6 +4103,8 @@ Andere bestandstypen worden direct in het met het MIME-type verbonden programma
 'htmlform-submit' => 'Opslaan',
 'htmlform-reset' => 'Wijzigingen ongedaan maken',
 'htmlform-selectorother-other' => 'Anders',
+'htmlform-no' => 'Nee',
+'htmlform-yes' => 'Ja',
 
 # SQLite database support
 'sqlite-has-fts' => 'Versie $1 met ondersteuning voor "full-text" zoeken',
index ef507f0..453c08e 100644 (file)
@@ -342,9 +342,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Vis kor mange som overvakar sida',
 'tog-oldsig' => 'Noverande signatur:',
 'tog-fancysig' => 'Handsam signaturar som wikitekst (utan automatisk lenking)',
-'tog-externaleditor' => 'Bruk eit eksternt handsamingsprogram som standard (berre for vidarekomne, krev eit spesielt oppsett på maskina di. [//www.mediawiki.org/wiki/Manual:External_editors Meir informasjon.])',
-'tog-externaldiff' => 'Bruk eit eksternt skilnadprogram som standard (berre for vidarekomne, krev eit spesielt oppsett på maskina di.
-[//www.mediawiki.org/wiki/Manual:External_editors Meir informasjon.])',
 'tog-showjumplinks' => 'Slå på «gå til»-lenkjer',
 'tog-uselivepreview' => 'Bruk levande førehandsvising (eksperimentelt JavaScript)',
 'tog-forceeditsummary' => 'Spør meg når eg ikkje har skrive noko i endringssamandraget',
@@ -359,6 +356,7 @@ $messages = array(
 'tog-showhiddencats' => 'Vis gøymde kategoriar',
 'tog-noconvertlink' => 'Slå av konvertering av sidetitlar',
 'tog-norollbackdiff' => 'Ikkje vis skilnad etter attenderulling',
+'tog-useeditwarning' => 'Gje ei åtvaring om eg går ut av ei redigeringsside og ikkje alle endringar er lagra',
 
 'underline-always' => 'Alltid',
 'underline-never' => 'Aldri',
@@ -719,9 +717,15 @@ Ver merksam på at nokre sider framleis kan visast fram som om du er innlogga fr
 'welcomecreation-msg' => 'Brukarkontoen din er oppretta.
 Gløym ikkje å endra [[Special:Preferences|innstillingane dine for {{SITENAME}}]].',
 'yourname' => 'Brukarnamn:',
+'userlogin-yourname' => 'Brukarnamn',
+'userlogin-yourname-ph' => 'Skriv inn brukarnamnet ditt',
 'yourpassword' => 'Passord:',
+'userlogin-yourpassword' => 'Passord',
+'userlogin-yourpassword-ph' => 'Skriv inn passordet ditt',
 'yourpasswordagain' => 'Skriv opp att passordet',
 'remembermypassword' => 'Hugs innlogginga mi på denne datamaskinen (høgst {{PLURAL:$1|éin dag|$1 dagar}})',
+'userlogin-remembermypassword' => 'Hugs meg',
+'userlogin-signwithsecure' => 'Logg inn med trygg tenar',
 'securelogin-stick-https' => 'Fortset HTTPS-tilkopling etter innlogging.',
 'yourdomainname' => 'Domenet ditt',
 'password-change-forbidden' => 'Du kan ikkje endra passord på denne wikien.',
@@ -734,12 +738,16 @@ Gløym ikkje å endra [[Special:Preferences|innstillingane dine for {{SITENAME}}
 'logout' => 'Logg ut',
 'userlogout' => 'Logg ut',
 'notloggedin' => 'Ikkje innlogga',
+'userlogin-noaccount' => 'Har du ingen konto?',
+'userlogin-joinproject' => 'Vert med {{SITENAME}}',
 'nologin' => "Har du ingen brukarkonto? '''$1'''.",
 'nologinlink' => 'Registrer deg',
 'createaccount' => 'Opprett ny konto',
 'gotaccount' => "Har du ein brukarkonto? '''$1'''.",
 'gotaccountlink' => 'Logg inn',
 'userlogin-resetlink' => 'Har du gløymd påloggingsopplysingane dine?',
+'helplogin-url' => 'Help:Innlogging',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjelp med innlogging]]',
 'createaccountmail' => 'Bruk eit mellombels tilfeldig passord og send det til e-postadressa som er oppgjeven under',
 'createaccountreason' => 'Årsak:',
 'badretype' => 'Passorda du skreiv inn er ikkje like.',
@@ -828,6 +836,7 @@ Du kan allereie ha byta passordet, eller ha bede om å få eit nytt mellombels p
 'passwordreset-text' => '↓Fyll ut dette skjemaet for å motta ei påminning om kontoopplysningane dine i ein e-post.',
 'passwordreset-legend' => '↓Nullstill passordet',
 'passwordreset-disabled' => '↓Tilbakestilling av passord er ikkje aktivert på denne wikien',
+'passwordreset-emaildisabled' => 'E-postfunksjonen er slegen av på wikien.',
 'passwordreset-pretext' => '↓{{PLURAL:$1||Tast inn ein av datadelane nedanfor}}',
 'passwordreset-username' => 'Brukarnamn:',
 'passwordreset-domain' => 'Domene:',
@@ -1056,6 +1065,8 @@ Det ser ut til at ho er sletta.',
 'content-failed-to-parse' => 'Klarte ikkje å tolke innhaldet «$2» for innhaldsmodellen «$1»: $3',
 'invalid-content-data' => 'Ugyldig innhald',
 'content-not-allowed-here' => 'Innhaldsmodellen «$1» er ikkje tillaten på sida [[$2]]',
+'editwarning-warning' => 'Gjennom å navigera vekk frå denne sida vil du mista alle endringane du måtte ha gjort.
+Denne åtvaringa kan slåast av under {{int:prefs-editing}} i instillingane dine.',
 
 # Content models
 'content-model-wikitext' => 'WikiTekst',
@@ -1336,6 +1347,7 @@ For å søkja i alle, bruk prefikset ''all:'' (det inkluderer diskusjonssider, m
 'searchdisabled' => 'Søkjefunksjonen på {{SITENAME}} er slått av akkurat no.
 I mellomtida kan du søkje gjennom Google.
 Ver merksam på at registra deira kan vera utdaterte.',
+'search-error' => 'Det oppstod ein feil under søket: $1',
 
 # Preferences page
 'preferences' => 'Innstillingar',
@@ -2670,6 +2682,7 @@ IP-adresser som blir automatisk blokkerte er ikkje lista her. Sjå [[Special:Blo
 'proxyblocksuccess' => 'Utført.',
 'sorbsreason' => 'IP-adressa di er lista som ein open mellomtenar i DNSBL.',
 'sorbs_create_account_reason' => 'IP-adressa di er lista som ein open mellomtenar i DNSBL, og difor får du ikkje registrert deg.',
+'xffblockreason' => 'Ei IP-adresse i X-Forwarded-For-tittelen, anten di eller den som høyrer til ein proksytenar du nyttar, er blokkert. Den opphavlege blokkeringsgrunnen var: $1',
 'cant-block-while-blocked' => 'Du kan ikkje blokkere andre medan du sjølv er blokkert.',
 'cant-see-hidden-user' => 'Brukaren du prøver å blokkera har allereie vorte blokkert og skjult. Sidan du ikkje har rett til å skjula brukarar, kan du ikkje sjå eller endra blokkeringa til brukaren.',
 'ipbblocked' => 'Du kan ikkje blokkera eller avblokkera andre brukarar sidan du sjølv er blokkert',
@@ -3847,23 +3860,25 @@ Bilete vert viste i full oppløysing, andre filtypar vert starta direkte i dei t
 'htmlform-submit' => 'Lagre',
 'htmlform-reset' => 'Gjer om endringar',
 'htmlform-selectorother-other' => 'Andre',
+'htmlform-no' => 'Nei',
+'htmlform-yes' => 'Ja',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 med støtte for fulltekstsøk',
 'sqlite-no-fts' => '$1 utan støtte for fulltekstsøk',
 
 # New logging system
-'logentry-delete-delete' => '$1 sletta sida $3',
-'logentry-delete-restore' => '$1 attoppretta sida $3',
-'logentry-delete-event' => '$1 endra synlegdomen av {{PLURAL:$5|éi loggoppføring|$5 loggoppføringar}} på $3: $4',
-'logentry-delete-revision' => '$1 endra synlegdomen til {{PLURAL:$5|éin versjon|$5 versjonar}} på sida $3: $4',
-'logentry-delete-event-legacy' => '$1 endra synlegdomen til loggoppføringar på $3',
-'logentry-delete-revision-legacy' => '$1 endra synlegdomen til versjonar på sida $3',
-'logentry-suppress-delete' => '$1 gøymde sida $3',
-'logentry-suppress-event' => '$1 endra i løyndom synlegdomen til {{PLURAL:$5|éi logghending|$5 logghendingar}} på $3: $4',
-'logentry-suppress-revision' => '$1 endra i løyndom synlegdomen til {{PLURAL:$5|éin versjon|$5 versjonar}} på sida $3: $4',
-'logentry-suppress-event-legacy' => '$1 endra i løyndom synlegdomen til logghendingar på $3',
-'logentry-suppress-revision-legacy' => '$1 endra i løyndom synlegdomen til versjonar på sida $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|sletta}} sida $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|attoppretta}} sida $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|endra}} synlegdomen av {{PLURAL:$5|éi loggoppføring|$5 loggoppføringar}} på $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|endra}} synlegdomen til {{PLURAL:$5|éin versjon|$5 versjonar}} på sida $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|endra}} synlegdomen til loggoppføringar på $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|endra}} synlegdomen til versjonar på sida $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|løynde}} sida $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2|endra}} i løyndom synlegdomen til {{PLURAL:$5|éi logghending|$5 logghendingar}} på $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|endra}} i løyndom synlegdomen til {{PLURAL:$5|éin versjon|$5 versjonar}} på sida $3: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|endra}} i løyndom synlegdomen til logghendingar på $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|endra}} i løyndom synlegdomen til versjonar på sida $3',
 'revdelete-content-hid' => 'innhald gøymt',
 'revdelete-summary-hid' => 'endringsamandrag gøymt',
 'revdelete-uname-hid' => 'brukarnamn gøymt',
@@ -3872,20 +3887,20 @@ Bilete vert viste i full oppløysing, andre filtypar vert starta direkte i dei t
 'revdelete-uname-unhid' => 'brukarnamn gjort synleg',
 'revdelete-restricted' => 'la til avgrensingar for administratorar',
 'revdelete-unrestricted' => 'fjerna avgrensingar for administratorar',
-'logentry-move-move' => '$1 flytte sida $3 til $4',
-'logentry-move-move-noredirect' => '$1 flytte sida $3 til $4 utan å lata etter ei omdirigering',
-'logentry-move-move_redir' => '$1 flytte sida $3 til $4 over ei omdirigering',
-'logentry-move-move_redir-noredirect' => '$1 flytte sida $3 til $4 over ei omdirigering utan å lata etter ei omdirigering',
-'logentry-patrol-patrol' => '$1 merkte versjon $4 av sida $3 som patruljert',
-'logentry-patrol-patrol-auto' => '$1 merkte automatisk versjon $4 av sida $3 som patruljert',
-'logentry-newusers-newusers' => 'Brukarkontoen $1 vart oppretta',
-'logentry-newusers-create' => 'Brukarkontoen $1 vart oppretta',
-'logentry-newusers-create2' => 'Brukarkontoen $3 vart oppretta av $1',
-'logentry-newusers-byemail' => 'Brukarkontoen $3 vart oppretta av $1 og passord vart sendt med e-post',
+'logentry-move-move' => '$1 {{GENDER:$2|flytte}} sida $3 til $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|flytte}} sida $3 til $4 utan å lata etter ei omdirigering',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|flytte}} sida $3 til $4 over ei omdirigering',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|flytte}} sida $3 til $4 over ei omdirigering utan å lata etter ei omdirigering',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|merkte}} versjon $4 av sida $3 som patruljert',
+'logentry-patrol-patrol-auto' => '$1{{GENDER:$2| merkte}} automatisk versjon $4 av sida $3 som patruljert',
+'logentry-newusers-newusers' => 'Brukarkontoen $1 vart {{GENDER:$2|oppretta}}',
+'logentry-newusers-create' => 'Brukarkontoen $1 vart {{GENDER:$2|oppretta}}',
+'logentry-newusers-create2' => 'Brukarkontoen $3 vart {{GENDER:$2|oppretta}} av $1',
+'logentry-newusers-byemail' => 'Brukarkontoen $3 vart {{GENDER:$2|oppretta}} av $1 og passord vart sendt med e-post',
 'logentry-newusers-autocreate' => 'Brukarkontoen $1 vart {{GENDER:$2|oppretta}} av seg sjølv',
-'logentry-rights-rights' => '$1 endra gruppemedlemskap for $3 frå $4 til $5',
-'logentry-rights-rights-legacy' => '$1 endra gruppemedlemskap for $3',
-'logentry-rights-autopromote' => '$1 vart automatisk forfremja frå $4 til $5',
+'logentry-rights-rights' => '$1 {{GENDER:$2|endra}} gruppemedlemskap for $3 frå $4 til $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|endra}} gruppemedlemskap for $3',
+'logentry-rights-autopromote' => '$1 vart automatisk {{GENDER:$2|forfremja}} frå $4 til $5',
 'rightsnone' => '(ingen)',
 
 # Feedback
@@ -3961,4 +3976,7 @@ Om ikkje kan du nytta det enkle skjemaet under. Merknaden din vert lagd til på
 'duration-centuries' => '$1 {{PLURAL:$1|hundreår|hundreår}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tusenår|tusenår}}',
 
+# Image rotation
+'rotate-comment' => 'Biletet vart dreitt $1{{PLURAL:$1|°}} med klokka',
+
 );
index ff44208..ccc71a0 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Oriya (à¬\93à­\9cିଆ)
+/** Oriya (à¬\93ଡ଼ିଆ)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -271,23 +271,21 @@ $messages = array(
 'tog-editsectiononrightclick' => 'ବିଭାଗ ନାମରେ ଡାହାଣ କ୍ଲିକ କରି ବିଭାଗ ସମ୍ପାଦନାକୁ ସଚଳ କରିବେ (ଜାଭାସ୍କ୍ରିପ୍ଟ ଲୋଡ଼ା)',
 'tog-showtoc' => 'ସୂଚୀପତ୍ର ଦେଖାଇବେ (୩ରୁ ଅଧିକ ମୁଖ୍ୟ ନାମ ଥିଲେ)',
 'tog-rememberpassword' => 'ଏହି ବ୍ରାଉଜରରେ (ସବୁଠୁ ଅଧିକ ହେଲେ $1 {{PLURAL:$1|day|ଦିନ}}) ପାଇଁ ମୋ ଲଗଇନ ମନେ ରଖିଥିବେ',
-'tog-watchcreations' => 'ମà­\8b à¬¤à¬¿à¬\86ରି à¬ªà­\83ଷà­\8dଠାସବà­\81à¬\95à­\81 à¬\8fବà¬\82 à¬®à­\8b à¬\85ପଲà­\8bଡà¬\97à­\81ଡିà¬\95à­\81 à¬®à­\8bର à¬¦à­\87à¬\96ଣାତାଲିà¬\95ାରà­\87 à¬¯à­\8bଡନ୍ତୁ',
-'tog-watchdefault' => 'ମà­\81à¬\81 à¬¬à¬¦à¬³à­\87à¬\87ଥିବା à¬ªà­\83ଷà­\8dଠା à¬\8fବà¬\82 à¬«à¬¾à¬\87ଲà¬\97à­\81ଡିà¬\95à­\81 à¬®à­\8bର à¬¦à­\87à¬\96ଣାତାଲିà¬\95ାରà­\87 à¬¯à­\8bଡନ୍ତୁ',
-'tog-watchmoves' => 'ମà­\81à¬\81 à¬\98à­\81à¬\9eà­\8dà¬\9aାà¬\87ଥିବା à¬ªà­\83ଷà­\8dଠା à¬\8fବà¬\82 à¬«à¬¾à¬\87ଲà¬\97à­\81ଡିà¬\95à­\81 à¬®à­\8bର à¬¦à­\87à¬\96ଣାତାଲିà¬\95ାରà­\87 à¬¯à­\8bଡନ୍ତୁ',
-'tog-watchdeletion' => 'ମà­\81à¬\81 à¬²à¬¿à¬­à¬¾à¬\87ଥିବା à¬ªà­\83ଷà­\8dଠା à¬\8fବà¬\82 à¬«à¬¾à¬\87ଲà¬\97à­\81ଡିà¬\95à­\81 à¬®à­\8bର à¬¦à­\87à¬\96ଣାତାଲିà¬\95ାରà­\87 à¬¯à­\8bଡନ୍ତୁ',
-'tog-minordefault' => 'ସବà­\81ଯାà¬\95 à¬¸à¬®à­\8dପାଦନାà¬\95à­\81 à¬\9bାà¬\8fà¬\81 à¬\9fିà¬\95à­\87 ବଦଳ ଭାବରେ ସୂଚିତ କରିବେ',
+'tog-watchcreations' => 'ମà­\8b à¬¤à¬¿à¬\86ରି à¬ªà­\83ଷà­\8dଠାସବà­\81à¬\95à­\81 à¬\8fବà¬\82 à¬®à­\8b à¬\85ପଲà­\8bଡ଼à¬\97à­\81ଡ଼ିà¬\95à­\81 à¬®à­\8bର à¬¦à­\87à¬\96ଣାତାଲିà¬\95ାରà­\87 à¬¯à­\8bଡ଼ନ୍ତୁ',
+'tog-watchdefault' => 'ମà­\81à¬\81 à¬¬à¬¦à¬³à­\87à¬\87ଥିବା à¬ªà­\83ଷà­\8dଠା à¬\8fବà¬\82 à¬«à¬¾à¬\87ଲà¬\97à­\81ଡ଼ିà¬\95à­\81 à¬®à­\8bର à¬¦à­\87à¬\96ଣାତାଲିà¬\95ାରà­\87 à¬¯à­\8bଡ଼ନ୍ତୁ',
+'tog-watchmoves' => 'ମà­\81à¬\81 à¬\98à­\81à¬\9eà­\8dà¬\9aାà¬\87ଥିବା à¬ªà­\83ଷà­\8dଠା à¬\8fବà¬\82 à¬«à¬¾à¬\87ଲà¬\97à­\81ଡ଼ିà¬\95à­\81 à¬®à­\8bର à¬¦à­\87à¬\96ଣାତାଲିà¬\95ାରà­\87 à¬¯à­\8bଡ଼ନ୍ତୁ',
+'tog-watchdeletion' => 'ମà­\81à¬\81 à¬²à¬¿à¬­à¬¾à¬\87ଥିବା à¬ªà­\83ଷà­\8dଠା à¬\8fବà¬\82 à¬«à¬¾à¬\87ଲà¬\97à­\81ଡ଼ିà¬\95à­\81 à¬®à­\8bର à¬¦à­\87à¬\96ଣାତାଲିà¬\95ାରà­\87 à¬¯à­\8bଡ଼ନ୍ତୁ',
+'tog-minordefault' => 'ସବà­\81ଯାà¬\95 à¬¸à¬®à­\8dପାଦନାà¬\95à­\81 à¬\9bାà¬\8fà¬\81 à¬\9bà­\8bà¬\9f ବଦଳ ଭାବରେ ସୂଚିତ କରିବେ',
 'tog-previewontop' => 'ଏଡ଼ିଟ ବାକ୍ସ ଆଗରୁ ଦେଖଣା ଦେଖାଇବେ',
 'tog-previewonfirst' => 'ପ୍ରଥମ ବଦଳର ଦେଖଣା ଦେଖାଇବେ',
 'tog-nocache' => 'ବ୍ରାଉଜର ପୃଷ୍ଠା ସଂରକ୍ଷଣକୁ ଅଚଳ କରିବେ',
-'tog-enotifwatchlistpages' => 'ମୋ ଦେଖଣାତାଲିକାରେ ଥିବା ପୃଷ୍ଠା ବା ଫାଇଲରେ କିଛି ବଦଳ ହେଲେ ମୋତେ ଇ-ମେଲ କରିବେ',
+'tog-enotifwatchlistpages' => 'ମୋ ଦେଖଣାତାଲିକାରେ ଥିବା ପୃଷ୍ଠା ବା ଫାଇଲରେ କିଛି ବଦଳ ହେଲେ ମୋତେ ଇମେଲ କରିବେ',
 'tog-enotifusertalkpages' => 'ମୋର ଆଲୋଚନା ପୃଷ୍ଠାରେ କିଛି ବଦଳ ହେଲେ ମୋତେ ଇ-ମେଲ କରିବେ',
 'tog-enotifminoredits' => 'ପୃଷ୍ଠାରେ ଏବଂ ଫାଇଲଗୁଡିକରେ ଛୋଟ ଛୋଟ ବଦଳ ହେଲେ ବି ମୋତେ ଇ-ମେଲ କରିବେ',
-'tog-enotifrevealaddr' => 'ସୂଚନା ଇ-ମେଲ ରେ ମୋର ଇ-ମେଲ ଠିକଣା ଦେଖାଇବେ',
+'tog-enotifrevealaddr' => 'ସୂଚନା ଇମେଲ ରେ ମୋର ଇମେଲ ଠିକଣା ଦେଖାଇବେ',
 'tog-shownumberswatching' => 'ଦେଖୁଥିବା ବ୍ୟବହାରକାରୀଙ୍କ ସଂଖ୍ୟା ଦେଖାଇବେ',
 'tog-oldsig' => 'ଏବେ ଥିବା ନାମ:',
 'tog-fancysig' => 'ଦସ୍ତଖତକୁ ଉଇକିଟେକ୍ସଟ ଭାବରେ ଗଣିବେ (ଆପେଆପେ ଥିବା ଲିଙ୍କ ବିନା)',
-'tog-externaleditor' => 'ବାହାର ସମ୍ପାଦକଟି ଆପଣାଛାଏଁ ବ୍ୟବହାର କରିବେ (କେବଳ ପଟୁ ସଭ୍ୟଙ୍କ ପାଇଁ, ଏଥି ନିମନ୍ତେ ଆପଣଙ୍କ କମ୍ପୁଟରରେ ବିଶେଷ ସଜାଣି ଲୋଡ଼ା । [//www.mediawiki.org/wiki/Manual:External_editors ଅଧିକ ସୂଚନା])',
-'tog-externaldiff' => 'ବାହାର ବାଛିବା (external diff) ଆପଣାଛାଏଁ ବ୍ୟବହାର କରିବେ (କେବଳ ପଟୁ ସଭ୍ୟଙ୍କ ପାଇଁ, ଏଥି ନିମନ୍ତେ ଆପଣଙ୍କ କମ୍ପୁଟରରେ ବିଶେଷ ସଜାଣି ଲୋଡ଼ା । [//www.mediawiki.org/wiki/Manual:External_editors ଅଧିକ ସୂଚନା])',
 'tog-showjumplinks' => '"ଡେଇଁଯିବେ" ଲିଙ୍କସବୁକୁ ସଚଳ କରିବେ',
 'tog-uselivepreview' => 'ସାଥେ ସାଥେ ଚାଲିଥିବା ଦେଖଣା ବ୍ୟବହାର କରିବେ (ଜାଭାସ୍କ୍ରିପ୍ଟ ଲୋଡ଼ା)',
 'tog-forceeditsummary' => 'ଖାଲି ସମ୍ପାଦନା ସାରକଥାକୁ ଯିବା ବେଳେ ମୋତେ ଜଣାଇବେ',
@@ -301,6 +299,7 @@ $messages = array(
 'tog-diffonly' => 'ତୁଳନା ତଳେ ପୃଷ୍ଠାର ଭିତର ଭାଗ ଦେଖାନ୍ତୁ ନାହିଁ',
 'tog-showhiddencats' => 'ଲୁଚାଯାଇଥିବା ଶ୍ରେଣୀଗୁଡ଼ିକ ଦେଖାଇବେ',
 'tog-norollbackdiff' => 'ରୋଲବ୍ୟାକ କଲାପରେ ତୁଳନା ଦେଖାନ୍ତୁ ନାହିଁ',
+'tog-useeditwarning' => 'ଯେତେବେଳେ ମୁଁ ଗୋଟିଏ ସାଇତାଯାଇନଥିବା ପୃଷ୍ଠାକୁ ବନ୍ଦ କରିଦିଏ ମୋତେ ଚେତାବନୀ ଦେବେ',
 
 'underline-always' => 'ସବୁବେଳେ',
 'underline-never' => 'କେବେନୁହେଁ',
@@ -470,7 +469,7 @@ $messages = array(
 'viewhelppage' => 'ସହଯୋଗ ପୃଷ୍ଠାଗୁଡ଼ିକ ଦେଖନ୍ତୁ',
 'categorypage' => 'ଶ୍ରେଣୀ ପୃଷ୍ଠାଟିକୁ ଦେଖାଇବେ',
 'viewtalkpage' => 'ଆଲୋଚନାଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ',
-'otherlanguages' => 'ଅଲଗା ଭାଷା',
+'otherlanguages' => 'ଅଲଗା ଭାଷାରେ',
 'redirectedfrom' => '($1 ରୁ ଲେଉଟି ଆସିଛି)',
 'redirectpagesub' => 'ଆଉଥରେ ଫେରିବା ପୃଷ୍ଠା',
 'lastmodifiedat' => 'ଏହି ପୃଷ୍ଠାଟି $1 ତାରିଖ $2 ବେଳେ ବଦଳାଯାଇଥିଲା ।',
@@ -671,6 +670,8 @@ $2',
 ନିଜର [[Special:Preferences|{{SITENAME}} ପସନ୍ଦସବୁକୁ]] ବଦଳାଇବାକୁ ଭୁଲିବେ ନାହିଁ ।',
 'yourname' => 'ବ୍ୟବହାରକାରୀଙ୍କ ନାମ:',
 'yourpassword' => 'ପାସୱାର୍ଡ଼',
+'userlogin-yourpassword' => 'ପାସୱାର୍ଡ଼',
+'userlogin-yourpassword-ph' => 'ଆପଣଙ୍କ ପାସୱାର୍ଡ଼ ନିବେଶ କରନ୍ତୁ',
 'yourpasswordagain' => 'ପାସୱାର୍ଡ଼ ଆଉଥରେ:',
 'remembermypassword' => 'ଏହି ବ୍ରାଉଜରରେ (ସବୁଠୁ ଅଧିକ ହେଲେ $1 {{PLURAL:$1|day|ଦିନ}}) ପାଇଁ ମୋ ଲଗଇନ ମନେ ରଖିଥିବେ',
 'securelogin-stick-https' => 'ଲଗ ଇନ କଲାପରେ HTTPS ସହ ଯୋଡ଼ି ହୋଇ ରହନ୍ତୁ',
@@ -685,6 +686,7 @@ $2',
 'logout' => 'ଲଗଆଉଟ',
 'userlogout' => 'ଲଗ ଆଉଟ',
 'notloggedin' => 'ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି',
+'userlogin-noaccount' => 'ଖାତାଟିଏ ନାହିଁ?',
 'nologin' => 'ଖାତାଟିଏ ନାହିଁ? $1।',
 'nologinlink' => 'ନୂଆ ଖାତାଟିଏ ଖୋଲନ୍ତୁ',
 'createaccount' => 'ନୂଆ ଖାତାଟିଏ ଖୋଲନ୍ତୁ',
@@ -741,8 +743,8 @@ continue using your old password.',
 'blocked-mailpassword' => 'ଆପଣଙ୍କ IP ଠିକଣାଟି ସମ୍ପାଦନାରେ ଭାଗ ନେବାରୁ ଅଟକାଯାଇଛି, ତେଣୁ ପାସୱାର୍ଡ଼ ଫେରନ୍ତା କାମ ବ୍ୟବହାର କରି ଅବ୍ୟବହାରକୁ ରୋକିବା ଅନୁମୋଦିତ ନୁହେଁ ।',
 'eauthentsent' => 'ଆପଣଙ୍କ ବଛା ଇ-ମେଲ ଠିକଣାକୁ ଏକ ଥୟ କରିବା ଇ-ମେଲଟିଏ ପଠାଇଦିଆଗଲା ।
 ଖାତାଟି ଆପଣଙ୍କର ବୋଲି ଥୟ କରିବା ନିମନ୍ତେ ଆଉ କେଉଁ ଇ-ମେଲ ଆପଣଙ୍କ ଖାତାକୁ ପଠାହେବା ଆଗରୁ ଆପଣଙ୍କୁ ସେହି ଇ-ମେଲରେ ଥିବା ସୂଚନା ଅନୁସରଣ କରିବାକୁ ପଡ଼ିବ ।',
-'throttled-mailpassword' => 'à¬\97ତ {{PLURAL:$1|à¬\8fà¬\95 à¬\98ଣà­\8dà¬\9fାରà­\87|$1 à¬\98ଣà­\8dà¬\9fାରà­\87}} à¬\86ପଣà¬\99à­\8dà¬\95à­\81 à¬\8fà¬\95 à¬ªà¬¾à¬¸à­±à¬¾à¬°à­\8dଡ଼ à¬®à¬¨à­\87à¬\95ରିବା à¬¸à­\82à¬\9aନାଟିଏ ପଠାଯାଇଛି ।
-à¬\85ବà­\8dà­\9fବହାରà¬\95à­\81 à¬°à­\8bà¬\95ିବା à¬¨à¬¿à¬®à¬¨à­\8dତà­\87, {{PLURAL:$1|à¬\8fà¬\95 à¬\98ଣà­\8dà¬\9fାରà­\87|$1 à¬\98ଣà­\8dà¬\9fାରà­\87}} à¬\95à­\87ବଳ à¬\97à­\8bà¬\9fିà¬\8f à¬ªà¬¾à¬¸à­±à¬¾à¬°à­\8dଡ଼ ହିଁ ପଠାହେବ ।',
+'throttled-mailpassword' => 'à¬\97ତ {{PLURAL:$1|à¬\8fà¬\95 à¬\98ଣà­\8dà¬\9fାରà­\87|$1 à¬\98ଣà­\8dà¬\9fାରà­\87}} à¬\86ପଣà¬\99à­\8dà¬\95à­\81 à¬\8fà¬\95 à¬ªà­\81ନà¬\83ସà­\8dଥାପନ à¬\87ମà­\87ଲଟିଏ ପଠାଯାଇଛି ।
+à¬\85ବà­\8dà­\9fବହାରà¬\95à­\81 à¬°à­\8bà¬\95ିବା à¬¨à¬¿à¬®à¬¨à­\8dତà­\87, {{PLURAL:$1|à¬\8fà¬\95 à¬\98ଣà­\8dà¬\9fାରà­\87|$1 à¬\98ଣà­\8dà¬\9fାରà­\87}} à¬\95à­\87ବଳ à¬\97à­\8bà¬\9fିà¬\8f à¬\87ମà­\87ଲ ହିଁ ପଠାହେବ ।',
 'mailerror' => 'ମେଲ ପଠାଇବାରେ ଭୁଲ : $1',
 'acct_creation_throttle_hit' => 'ଏହି ଉଇକିର ଦେଖଣାହାରୀ ମାନେ ଆପଣଙ୍କ IP ଠିକଣା ବ୍ୟବହାର କରି ବିଗତ ଦିନରେ {{PLURAL:$1|ଖାତାଟିଏ|$1 ଗୋଟି ଖାତା}} ତିଆରି କରିଛନ୍ତି ଯାହା ସେହି ସମୟସୀମା ଭିତରେ ସବୁଠାରୁ ଅଧିକ ଥିଲା ।
 ତେଣୁ, ଏହି IP ଠିକଣାର ଦେଖଣାହାରୀ ଗଣ ଏବେ ଆଉ ଅଧିକ ଖାତା ଖୋଲିପାରିବେ ନାହିଁ ।',
@@ -795,9 +797,10 @@ continue using your old password.',
 
 # Special:PasswordReset
 'passwordreset' => 'ପାସୱାର୍ଡ଼ ପୁନସ୍ଥାପନ କରନ୍ତୁ',
-'passwordreset-text' => 'ନିà¬\9c à¬\96ାତାର à¬¸à¬¬à¬¿à¬¶à­\87ଷ à¬¬à¬¿à¬¬à¬°à¬£à­\80 à¬\8fà¬\95 à¬\87-ମà­\87ଲରà­\87 à¬ªà¬¾à¬\87ବା ପାଇଁ ଏହି ଆବେଦନ ପତ୍ରଟି ପୂରଣ କରନ୍ତୁ ।',
+'passwordreset-text' => 'ନିà¬\9c à¬ªà¬¾à¬¸à­±à¬¾à¬°à­\8dଡ଼à¬\95à­\81 à¬ªà­\81ନà¬\83ସà­\8dଥାପନ à¬\95ରିବା ପାଇଁ ଏହି ଆବେଦନ ପତ୍ରଟି ପୂରଣ କରନ୍ତୁ ।',
 'passwordreset-legend' => 'ପାସୱାର୍ଡ଼ ପୁନସ୍ଥାପନ କରନ୍ତୁ',
 'passwordreset-disabled' => 'ପାସୱାର୍ଡ଼କୁ ପୁରାପୁରି ମୂଳକୁ ଫେରାଇବା ଏହି ଉଇକିରେ ଅଚଳ କରାଯାଇଅଛି ।',
+'passwordreset-emaildisabled' => 'ଏହି ଉଇକିରେ ଇମେଲ ସୁବିଧା ଅଚଳ କରାଯାଇଅଛି ।',
 'passwordreset-pretext' => '{{PLURAL:$1||ତଳେ ଥିବା ତଥ୍ୟସମୂହରୁ କୌଣସି ଗୋଟିଏ ଦିଅନ୍ତୁ}}',
 'passwordreset-username' => 'ବ୍ୟବହାରକାରୀଙ୍କ ନାମ:',
 'passwordreset-domain' => 'ଡୋମେନ:',
@@ -824,8 +827,8 @@ $2
 ଆପଣ ନିଜ ପୁରୁଣା ପାସୱାର୍ଡ଼ଟି ଆଗପରି ବ୍ୟବହାର କରିପାରନ୍ତି ।',
 'passwordreset-emailelement' => 'ଇଉଜର ନାମ: $1
 ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼: $2',
-'passwordreset-emailsent' => 'à¬\8fà¬\95 à¬®à¬¨à­\87ପà¬\95ାà¬\87ବା à¬\87-ମେଲ ପଠାଇଦିଆଯାଇଅଛି ।',
-'passwordreset-emailsent-capture' => 'ତଳà­\87 à¬¦à¬¿à¬\86ଯାà¬\87ଥିବା à¬­à¬³à¬¿ à¬®à¬¨à­\87ପà¬\95ାà¬\87ବା à¬\87-ମà­\87ଲà¬\9fିà¬\8f à¬ªà¬ à¬¾à¬¦à¬¿à¬\86à¬\97ଲା ।',
+'passwordreset-emailsent' => 'à¬\8fà¬\95 à¬ªà¬¾à¬¸à­±à¬¾à¬°à­\8dଡ଼ à¬ªà­\81ନà¬\83ସà­\8dଥାପନ à¬\87ମେଲ ପଠାଇଦିଆଯାଇଅଛି ।',
+'passwordreset-emailsent-capture' => 'ତଳà­\87 à¬¦à­\87à¬\96ାଯାà¬\89ଥିବା à¬­à¬³à¬¿, à¬ªà¬¾à¬¸à­±à¬¾à¬°à­\8dଡ଼ à¬ªà­\81ନà¬\83ସà­\8dଥାପନ à¬\87ମà­\87ଲà¬\9fିà¬\8f à¬ªà¬ à¬¾à¬\87ଦିà¬\86ଯାà¬\87à¬\9bି ।',
 'passwordreset-emailerror-capture' => 'ଗୋଟିଏ ମନେପକାଇବା ଇ-ମେଲ ତିଆରି କରାଯାଇଥିଲା, ଯାହାକି ତଳେ ଅଛି, କିନ୍ତୁ ଏହାକୁ ବ୍ୟବହାରକାରୀକୁ ପଠାଇବାରେ ଅସଫଳ ହେଲା :$1',
 
 # Special:ChangeEmail
@@ -1053,6 +1056,8 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 'content-failed-to-parse' => '$1 ପ୍ରକାର ପାଇଁ $2 ଲେଖାକୁ ବର୍ଣ୍ଣନା କରିପାରିଲା ନାହିଁ: $3',
 'invalid-content-data' => 'ଅବୈଧ ଆଧାର ତଥ୍ୟ',
 'content-not-allowed-here' => '"$1" ବିଷୟଗୁଡିକ [[$2]]ପୃଷ୍ଠାରେ ରହିପାରିବ ନାହିଁ',
+'editwarning-warning' => 'ଏହି ପୃଷ୍ଠାକୁ ଛାଡ଼ି ଚାଲିଗଲେ ହୁଏ ତ ଆପଣ କରିଥିବା କିଛି ସମ୍ପାଦନା ହରାଇ ପାରନ୍ତି ।
+ଯଦି ଆପଣ ଲଗ ଇନ କରିଥାନ୍ତି ତେବେ ଆପଣଙ୍କ ପସନ୍ଦର "ସମ୍ପାଦନା" ଭାଗରେ ଏହି ଚେତାବନୀଟିକୁ ଅଚଳ କରିପାରିବେ ।',
 
 # Content models
 'content-model-wikitext' => 'ଉଇକିଟେକ୍ସଟ',
@@ -1340,15 +1345,6 @@ $1",
 ଆପଣ ଏହି ଭିତରେ ଗୁଗଲ ଦେଖିପାରନ୍ତି ।
 ଜାଣିରଖନ୍ତୁ ଯେ {{SITENAME}}ର ବିଷୟ ସୂଚି ପୁରାତନ ହୋଇଥାଇପାରେ ।',
 
-# Quickbar
-'qbsettings' => 'ସହଳ ପଟି (Quickbar)',
-'qbsettings-none' => 'କିଛି ନାହିଁ',
-'qbsettings-fixedleft' => 'ବାମକୁ ଥୟ କରାଗଲା',
-'qbsettings-fixedright' => 'ଡାହାଣକୁ ଥୟ କରାଗଲା',
-'qbsettings-floatingleft' => 'ବାମରେ ଭାସନ୍ତା',
-'qbsettings-floatingright' => 'ଡାହାଣରେ ଭାସନ୍ତା',
-'qbsettings-directionality' => 'ଆପଣଙ୍କ ଭାଷାର ବାମ-ଡାହାଣ ଲିଖନ ଶୈଳୀ ଅନୁସାରେ ସଜାଡ଼ି ଦିଆଗଲା',
-
 # Preferences page
 'preferences' => 'ପସନ୍ଦ',
 'mypreferences' => 'ପସନ୍ଦ',
@@ -1903,7 +1899,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization ଦେଖନ୍ତୁ
 'http-read-error' => 'HTTP ପଢ଼ିବା ଭୁଲ ।',
 'http-timed-out' => 'HTTP ଅନୁରୋଧ ମିଆଦ ପୁରିଗଲା ।',
 'http-curl-error' => '$1 URL କୁ ପାଇବାରେ ବିଫଳ',
-'http-host-unreachable' => 'URLଟି ପାଇଲୁ ନାହିଁ ।',
 'http-bad-status' => 'HTTP ଅନୁରୋଧ ବେଳେ କିଛି ଅସୁବିଧା ହେଲା : $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2062,6 +2057,8 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 ସେସବୁ ଅଧିକ ଉପଯୁକ୍ତ ପ୍ରସଙ୍ଗ ସହ ଯୋଡ଼ାହେବା ଉଚିତ  ।<br />
 [[MediaWiki:Disambiguationspage]] ସହ ଯୋଡ଼ାଥିବା ଛାଞ୍ଚ ବ୍ୟବହାର କରୁଥିଲେ ପୃଷ୍ଠାଟିଏକୁ ବହୁବିକଳ୍ପ ପୃଷ୍ଠା ବୋଲି କୁହାଯାଏ",
 
+'pageswithprop-submit' => 'ଯିବା',
+
 'doubleredirects' => 'ଯୋଡ଼ା ପୁନପ୍ରେରଣ',
 'doubleredirectstext' => 'ଏହି ପୃଷ୍ଠା ବାକି ବହୁବିକଳ୍ପ ପୃଷ୍ଠାମାନଙ୍କ ସହ ଯୋଡ଼ିଥାଏ ।
 ପ୍ରତ୍ୟେକ ଧାଡ଼ିରେ ପ୍ରଥମ ଓ ଶେଷ ପୁନପ୍ରେରଣ ସହ ଯୋଡ଼ିବା ଲିଙ୍କ ରହିଥାଏ, ଆହୁରି ମଧ୍ୟ ଏଥିରେ ଦ୍ଵିତୀୟ ପୁନପ୍ରେରଣର ଲକ୍ଷ ସହ ଯୋଡ଼ିବାର ଲିଙ୍କ ଥାଏ , ଯାହାକି ସାଧାରଣତ "ପ୍ରକୃତ" ଲକ୍ଷ ପୃଷ୍ଠା ହୋଇଥାଏ, ଯାହାକୁ ପ୍ରଥମ ପୁନପ୍ରେରଣ ପୃଷ୍ଠା ଯୋଡ଼ିଥାଏ ।
@@ -3905,6 +3902,8 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'htmlform-submit' => 'ଦାଖଲକରିବା',
 'htmlform-reset' => 'କରାଯାଇଥିବା ବଦଳ ପଛକୁ ଫେରାଇବେ',
 'htmlform-selectorother-other' => 'ବାକି',
+'htmlform-no' => 'ନାହିଁ',
+'htmlform-yes' => 'ହଁ',
 
 # SQLite database support
 'sqlite-has-fts' => 'ପୁରା ଟେକ୍ସ୍ଟ ଖୋଜା ସହଯୋଗ ସହିତ $1',
index 3a6e545..b079132 100644 (file)
@@ -216,8 +216,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Цал архайæджы фарсмæ сæ цæст дарынц, уый равдис',
 'tog-oldsig' => 'Ныры къухæрфыст:',
 'tog-fancysig' => 'Сæвæрын къухæрфыст викитекстæй (æнæ хæдæвзæргæ æрвитæнæй)',
-'tog-externaleditor' => 'Архайын æддаг ивæнæй (æрмæст эксперттæн, домы сæрмагонд æвæрдтытæ компьютерыл. [//www.mediawiki.org/wiki/Manual:External_editors Лæмбынæг.])',
-'tog-externaldiff' => 'Архайын æндæр иртасæнæй (æрмæст эксперттæн, домы сæрмагонд æвæрдтытæ компьютерыл. [//www.mediawiki.org/wiki/Manual:External_editors Лæмбынæг.])',
 'tog-showjumplinks' => 'Тагъд æрвитæнтæй пайда кæн',
 'tog-uselivepreview' => 'Архайын тагъд разбакастæй (домы JavaScript) (эксперименталон)',
 'tog-forceeditsummary' => 'Фæдзæхсæд иу мæ, кæд ивды афыст афтид уа',
@@ -1013,13 +1011,6 @@ $2
 'powersearch-field' => 'Агуырд',
 'powersearch-toggleall' => 'Иууылдæр',
 
-# Quickbar
-'qbsettings' => 'Навигацион таг',
-'qbsettings-none' => 'Ма равдис',
-'qbsettings-fixedleft' => 'Галиуырдыгæй',
-'qbsettings-fixedright' => 'Рахизырдыгæй',
-'qbsettings-floatingleft' => 'Рахизырдыгæй ленккæнгæ',
-
 # Preferences page
 'preferences' => 'Уагæвæрдтæ',
 'mypreferences' => 'Уагæвæрдтæ',
@@ -1612,12 +1603,8 @@ $3',
 'spamprotectiontitle' => 'Спамы ныхмæ фильтр',
 
 # Skin names
-'skinname-standard' => 'Стандартон',
-'skinname-nostalgia' => 'Æнкъард',
 'skinname-cologneblue' => 'Кёльны æрхæндæг',
 'skinname-monobook' => 'Моно-чиныг',
-'skinname-myskin' => 'Мæхи',
-'skinname-chick' => 'Карк',
 
 # Browsing diffs
 'previousdiff' => '← Зæронддæр ивд',
index 94ff21a..2395626 100644 (file)
@@ -191,66 +191,57 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'ਕੜੀਆਂ ਅਧੋਰੇਖਨ:',
 'tog-justify' => 'ਪਰਿੱਛੇਦ ਸਮਾਨ ਕਰੋ',
-'tog-hideminor' => 'ਹਾਲ â\80\99à¨\9a à¨¹à©\8bà¨\8f à¨¬à¨¦à¨²à¨¾à¨µ à¨µà¨¿à©±à¨\9a à¨\9bà©\8bà¨\9fà©\87 à¨¬à¨¦à¨²à¨¾à¨µ ਛੁਪਾਓ',
-'tog-hidepatrolled' => 'ਹਾਲ â\80\99à¨\9a à¨¹à©\8bà¨\8f à¨¬à¨¦à¨²à¨¾à¨µ à¨µà¨¿à©±à¨\9a à¨\9cਾà¨\82à¨\9aà©\87 à¨¹à©\8bà¨\8f à¨¬à¨¦à¨²à¨¾à¨µ à¨\9bà©\81ਪਾà¨\93',
-'tog-newpageshidepatrolled' => 'ਨਵੀ ਸੁਚੀ ਮੈ ਸੈ ਗਸ਼ਤ ਪਰਚੇ ਕੌ ਛੁਪਾਏ.',
+'tog-hideminor' => 'ਹਾਲ â\80\99à¨\9a à¨¹à©\8bà¨\8f à¨¬à¨¦à¨²à¨¾à¨\85 à¨µà¨¿à©±à¨\9a à¨\9bà©\8bà¨\9fà©\87 à¨¬à¨¦à¨²à¨¾à¨\85 ਛੁਪਾਓ',
+'tog-hidepatrolled' => 'ਤਾà¨\9c਼ਾ à¨¬à¨¦à¨²à¨¾à¨\85 à¨µà¨¿à©±à¨\9a à¨\9cਾà¨\82à¨\9a à¨\95à©\80ਤà©\80à¨\86à¨\82 à¨¸à©\8bਧਾà¨\82 à¨\93ਹਲà©\87',
+'tog-newpageshidepatrolled' => 'ਨਵੀਂ ਸਫ਼ਾ ਸੂਚੀ ਵਿੱਚੋਂ ਨਿਗਰਾਨੀ ਸਫ਼ੇ ਓਹਲੇ ਕਰੋ',
 'tog-extendwatchlist' => 'ਕੇਵਲ ਹਾਲਿਆ ਹੀ ਨਹੀਂ, ਸਗੋਂ ਸਾਰੇ ਪਰਿਵਰਤਨਾਂ ਨੂੰ ਵਿਖਾਉਣ ਲਈ ਧਿਆਨਸੂਚੀ ਨੂੰ ਵਿਸਥਾਰਿਤ ਕਰੋ',
 'tog-usenewrc' => 'ਹਾਲ ’ਚ ਹੋਏ ਬਦਲਾਵ ਅਤੇ ਧਿਆਨਸੂਚੀ ਵਿੱਚ ਪੰਨੇ ਮੁਤਾਬਕ ਬਦਲਾਵ ਦੇ ਗਰੁੱਪ ਬਣਾਓ (ਜਾਵਾਸਕ੍ਰਿਪਟ ਦੀ ਜਰੂਰਤ ਹੈ)',
 'tog-numberheadings' => 'ਆਟੋ-ਨੰਬਰ ਹੈਡਿੰਗ',
-'tog-showtoolbar' => 'à¨\90ਡਿà¨\9f à¨\9fà©\82ਲਬਾਰ à¨µà©\87à¨\96à©\8b (JavaScript)',
-'tog-editondblclick' => 'ਦà©\82ਹਰà©\87 à¨\95ਲਿੱà¨\95 â\80\99ਤà©\87 à¨ªà©°à¨¨à©\87 à¨¨à©\82à©° à¨¸à©°à¨ªà¨¾à¨¦à¨¿à¨¤ à¨\95ਰà©\8b (à¨\9cਾਵਾਸà¨\95à©\8dਰਿਪà¨\9f à¨¦à©\80 à¨\9cਰà©\82ਰਤ à¨¹à©\88)',
+'tog-showtoolbar' => 'ਸà©\8bਧ à¨\9fà©\82ਲਬਾਰ à¨µà©\87à¨\96à©\8b (JavaScript à¨\9aਾਹà©\80ਦà©\80 à¨¹à©\88)',
+'tog-editondblclick' => 'ਦੂਹਰੇ ਕਲਿੱਕ ’ਤੇ ਪੰਨੇ ਨੂੰ ਸੰਪਾਦਤ ਕਰੋ (ਜਾਵਾਸਕ੍ਰਿਪਟ ਦੀ ਜਰੂਰਤ ਹੈ)',
 'tog-editsection' => '[ਸੰਪਾਦਨ] ਕੜੀਆਂ ਦੁਆਰਾ ਅਨੁਭਾਗ ਸੰਪਾਦਨ ਸਮਰੱਥਾਵਾਨ ਕਰੋ',
-'tog-editsectiononrightclick' => 'ਸà©\88à¨\95ਸ਼ਨ ਸਿਰਲੇਖਾਂ ਤੇ ਸੱਜੀ ਕਲਿੱਕ ਦੁਆਰਾ ਸੋਧ ਯੋਗ ਕਰੋ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
-'tog-showtoc' => 'à¨\9fà©\87ਬਲ à¨\86ਫ਼ à¨\95ੰਨà¨\9fà©\88ੱà¨\9f à¨µà©\87à¨\96ਾà¨\93 (for pages with more than 3 headings)',
+'tog-editsectiononrightclick' => 'ਭਾà¨\97 ਸਿਰਲੇਖਾਂ ਤੇ ਸੱਜੀ ਕਲਿੱਕ ਦੁਆਰਾ ਸੋਧ ਯੋਗ ਕਰੋ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
+'tog-showtoc' => 'ਤਤà¨\95ਰਾ à¨µà©\87à¨\96ਾà¨\93 (3 à¨¤à©\8bà¨\82 à¨µà©±à¨§ à¨¸à¨¿à¨°à¨²à©\87à¨\96ਾà¨\82 à¨µà¨¾à¨²à©\87 à¨ªà©°à¨¨à¨¿à¨\86à¨\82 à¨²à¨\88)',
 'tog-rememberpassword' => 'ਇਸ ਬਰਾਊਜ਼ਰ ਉੱਤੇ ਮੇਰਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ ($1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ ਵੱਧ ਤੋਂ ਵੱਧ)',
-'tog-watchcreations' => 'ਮà©\87ਰà©\87 à¨µà¨²à©\8bà¨\82 à¨¬à¨£à¨¾à¨\8f à¨\97à¨\8f à¨ªà©°à¨¨à©\87 à¨\85ਤà©\87 à¨\85ੱਪਲà©\8bਡ à¨\95à©\80ਤà©\80à¨\86à¨\82 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨§à¨¿à¨\86ਨਸà©\82à¨\9aà©\80 à¨µà¨¿à©±à¨\9a à¨ªà¨¾à¨\93',
-'tog-watchdefault' => 'ਮà©\87ਰà©\87 à¨µà©±à¨²à©\8bà¨\82 à¨¸à©°à¨ªà¨¾à¨¦à¨¿à¨¤ à¨\97à¨\8f à¨ªà©°à¨¨à©\87 à¨\85ਤà©\87 à¨«à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨§à¨¿à¨\86ਨਸà©\82à¨\9aà©\80 à¨µà¨¿à©±à¨\9a à¨ªà¨¾à¨\93',
-'tog-watchmoves' => 'ਮà©\87ਰà©\87 à¨µà©±à¨²à©\8bà¨\82 à¨¸à¨¥à¨¾à¨¨à¨¾à¨\82ਤਰਿਤ à¨ªà©°à¨¨à©\87 à¨\85ਤà©\87 à¨«à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨§à¨¿à¨\86ਨਸà©\82à¨\9aà©\80 à¨µà¨¿à©±à¨\9a à¨ªà¨¾à¨\93',
-'tog-watchdeletion' => 'ਮà©\87ਰà©\87 à¨µà¨²à©\8bà¨\82 à¨®à¨¿à¨\9fਾà¨\8f à¨\97à¨\8f à¨¸à¨«à¨¼à©\87 à¨\85ਤà©\87 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿ਚ ਪਾਓ',
-'tog-minordefault' => 'ਸਾਰà©\87 à¨«à©\87ਰ-ਬਦਲਾà¨\82 â\80\99ਤà©\87 à¨®à©\82ਲ à¨°à©\82ਪ à¨µà¨¿à¨\9a à¨\9bà©\8bà¨\9fà©\80à¨\86à¨\82 à¨¹à©\8bਣ à¨¦à¨¾ à¨¨à¨¿à¨¸à¨¼à¨¾à¨¨ à¨²à¨¾à¨\93',
-'tog-previewontop' => 'à¨\90ਡਿà¨\9f à¨¬à¨\95ਸà©\87 ਤੋਂ ਪਹਿਲਾਂ ਝਲਕ ਵੇਖਾਓ',
-'tog-previewonfirst' => 'ਪਹਿਲà©\87 à¨\90ਡਿà¨\9f ਉੱਤੇ ਝਲਕ ਵੇਖਾਓ',
+'tog-watchcreations' => 'ਮੇਰੇ ਵਲੋਂ ਬਣਾਏ ਗਏ ਪੰਨੇ ਅਤੇ ਅੱਪਲੋਡ ਕੀਤੀਆਂ ਫਾਈਲਾਂ ਮੇਰੀ ਧਿਆਨਸੂਚੀ ਵਿੱਚ ਪਾਓ',
+'tog-watchdefault' => 'ਮੇਰੇ ਵੱਲੋਂ ਸੰਪਾਦਤ ਗਏ ਪੰਨੇ ਅਤੇ ਫਾਈਲਾਂ ਮੇਰੀ ਧਿਆਨਸੂਚੀ ਵਿੱਚ ਪਾਓ',
+'tog-watchmoves' => 'ਮੇਰੇ ਵੱਲੋਂ ਸਥਾਨਾਂਤਰਤ ਪੰਨੇ ਅਤੇ ਫਾਈਲਾਂ ਮੇਰੀ ਧਿਆਨਸੂਚੀ ਵਿੱਚ ਪਾਓ',
+'tog-watchdeletion' => 'ਮà©\87ਰà©\87 à¨µà¨²à©\8bà¨\82 à¨¹à¨\9fਾà¨\8f à¨\97à¨\8f à¨ªà©°à¨¨à©\87 à¨\85ਤà©\87 à¨«à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨§à¨¿à¨\86ਨਸà©\82à¨\9aà©\80 à¨µà¨¿à©±ਚ ਪਾਓ',
+'tog-minordefault' => 'ਮà©\87ਰà©\87 à¨¸à¨¾à¨°à©\87 à¨¸à©°à¨ªà¨¾à¨¦à¨¨ à¨\9bà©\8bà¨\9fà©\87 à¨¬à¨¦à¨²à¨¾à¨\85 à¨¹à¨¨',
+'tog-previewontop' => 'ਸà©\8bਧ à¨¬à¨¾à¨\95ਸ ਤੋਂ ਪਹਿਲਾਂ ਝਲਕ ਵੇਖਾਓ',
+'tog-previewonfirst' => 'ਪਹਿਲà©\80 à¨¸à©\8bਧ ਉੱਤੇ ਝਲਕ ਵੇਖਾਓ',
 'tog-nocache' => 'ਬਰਾਊਜ਼ਰ ਸਫ਼ਾ ਕੈਸ਼ ਕਰਨਾ ਬੰਦ ਕਰੋ',
-'tog-enotifwatchlistpages' => 'à¨\9cਦà©\8bà¨\82 à¨®à©\87ਰà©\80 à¨µà¨¾à¨\9a-ਲਿਸà¨\9f à¨µà¨¿à¨\9a à¨¦à¨°à¨\9c à¨\95à©\8bà¨\88 à¨¸à¨«à¨¼à¨¾ à¨¬à¨¦à¨²à¨¿à¨\86 à¨\9cਾਵà©\87 à¨¯à¨¾ à¨®à¨¿à¨¸ਲ ਬਦਲੀ ਜਾਵੇ ਤਾਂ ਮੈਨੂੰ ਈਮੇਲ ਭੇਜੋ',
+'tog-enotifwatchlistpages' => 'à¨\9cਦà©\8bà¨\82 à¨®à©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨ-ਸà©\82à¨\9aà©\80 à¨µà¨¿à¨\9a à¨¦à¨°à¨\9c à¨\95à©\8bà¨\88 à¨¸à¨«à¨¼à¨¾ à¨¬à¨¦à¨²à¨¿à¨\86 à¨\9cਾਵà©\87 à¨\9cਾà¨\82 à¨«à¨¾à¨\87ਲ ਬਦਲੀ ਜਾਵੇ ਤਾਂ ਮੈਨੂੰ ਈਮੇਲ ਭੇਜੋ',
 'tog-enotifusertalkpages' => 'ਜਦੋਂ ਮੇਰਾ ਗੱਲ-ਬਾਤ ਸਫ਼ਾ ਬਦਲਿਆ ਜਾਵੇ ਤਾਂ ਮੈਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
-'tog-enotifminoredits' => 'ਸਫ਼ਿà¨\86à¨\82 à¨\85ਤà©\87 à¨«à¨¼à¨¾à¨\88ਲਾਂ ਦੀਆਂ ਛੋਟੀਆਂ ਤਬਦੀਲੀਆਂ ਲਈ ਵੀ ਮੈਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
-'tog-enotifrevealaddr' => 'à¨\87ਤਲਾਹ à¨¦à©\87ਣ à¨µà¨¾à¨²à¨¼à©\80à¨\86à¨\82 à¨\88-ਮà©\87ਲਾà¨\82 à¨µà¨¿à¨\9a à¨®à©\87ਰਾ à¨\88-ਮà©\87ਲ à¨ªà¨¤à¨¾ à¨\9c਼ਾਹਰ à¨\95ਰà©\8b',
-'tog-shownumberswatching' => 'ਨਜ਼ਰ ਰੱਖ ਰਹੇ ਮੈਂਬਰਾਂ ਦੀ ਗਿਣਤੀ ਵਖਾਓ',
+'tog-enotifminoredits' => 'ਸਫ਼ਿà¨\86à¨\82 à¨\85ਤà©\87 à¨«à¨¾à¨\87ਲਾਂ ਦੀਆਂ ਛੋਟੀਆਂ ਤਬਦੀਲੀਆਂ ਲਈ ਵੀ ਮੈਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
+'tog-enotifrevealaddr' => 'ਇਤਲਾਹ ਦੇਣ ਵਾਲੀਆਂ ਈ-ਮੇਲਾਂ ਵਿਚ ਮੇਰਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਕਰੋ',
+'tog-shownumberswatching' => 'ਨà¨\9c਼ਰ à¨°à©±à¨\96 à¨°à¨¹à©\87 à¨®à©\88à¨\82ਬਰਾà¨\82 à¨¦à©\80 à¨\97ਿਣਤà©\80 à¨µà©\87à¨\96ਾà¨\93',
 'tog-oldsig' => 'ਮੌਜੂਦਾ ਦਸਤਖਤ:',
-'tog-fancysig' => 'ਦਸਤਖ਼ਤ ਨੂੰ ਬਤੌਰ ਵਿਕੀਲਿਖਤ ਵਰਤੋ (ਬਿਨਾਂ ਆਟੋਮੈਟਿਕ ਲਿੰਕ)',
-'tog-externaleditor' => 'ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਬਾਹਰੀ ਸੋਧਕ ਵਰਤੋ (ਸਿਰਫ਼ ਮਾਹਿਰਾਂ ਲਈ ਹੈ, ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਤੇ ਖ਼ਾਸ ਸੈਟਿੰਗਾਂ ਲੋੜੀਂਦੀਆਂ ਹਨ। [//
-www.mediawiki.org/wiki/
-Manual:External_editors More
-information.])',
-'tog-externaldiff' => 'ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਬਾਹਰੀ ਫ਼ਰਕ ਵਰਤੋ (ਸਿਰਫ਼
-ਮਾਹਿਰਾਂ ਲਈ ਹੈ, ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਤੇ ਖ਼ਾਸ
-ਸੈਟਿੰਗਾਂ ਲੋੜੀਂਦੀਆਂ ਹਨ। [//
-www.mediawiki.org/wiki/
-Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
-'tog-showjumplinks' => '"ਇਸ ਤੇ ਜਾਓ" ਦੇ ਲਿੰਕ ਦਿਖਾਣਾ ਸਮਰੱਥ ਕਰੋ',
-'tog-uselivepreview' => 'ਸਿੱਧੀ ਝਲਕ ਵਰਤੋ (ਜਾਵਾਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ) (ਤਜਰਬੇਕਾਰੀ)',
-'tog-forceeditsummary' => 'ਜਦੋਂ ਮੈਂ ਖ਼ਾਲੀ ਸੋਧ ਸਾਰ ਦਾਖ਼ਲ ਕਰਾਂ ਤਾਂ ਮੈਨੂੰ ਖ਼ਬਰਦਾਰ ਕਰੋ',
-'tog-watchlisthideown' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿੱਚੋਂ ਮੇਰੇ ਫੇਰ-ਬਦਲ ਲੁਕਾਓ',
-'tog-watchlisthidebots' => 'ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚੋਂ ਬੋਟਾਂ ਦੇ ਫੇਰ-ਬਦਲ ਲੁਕਾਓ',
-'tog-watchlisthideminor' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚੋਂ ਛੋਟੇ ਫੇਰ-ਬਦਲ ਲੁਕਾਓ',
-'tog-watchlisthideliu' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚੋਂ ਲਾਗ ਇਨ ਮੈਂਬਰਾਂ ਦੇ ਕੀਤੇ ਫੇਰ-ਬਦਲ ਲੁਕਾਓ',
+'tog-fancysig' => 'ਦਸਤਖ਼ਤ ਨੂੰ ਬਤੌਰ ਵਿਕਿਲਿਖਤ ਵਰਤੋਂ (ਬਿਨਾਂ ਆਟੋਮੈਟਿਕ ਲਿੰਕ)',
+'tog-showjumplinks' => '"ਇਸ ਤੇ ਜਾਓ" ਅਸੈਸਬਿਲਟੀ ਲਿੰਕ ਚਾਲੂ ਕਰੋ',
+'tog-uselivepreview' => 'ਸਿੱਧੀ ਝਲਕ ਵਰਤੋਂ (ਜਾਵਾਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ) (ਤਜਰਬੇ-ਅਧੀਨ)',
+'tog-forceeditsummary' => 'ਜਦੋਂ ਮੈਂ ਖ਼ਾਲੀ ਸੋਧ ਸਾਰ ਦੇਵਾਂ ਤਾਂ ਮੈਨੂੰ ਪੁੱਛੋ',
+'tog-watchlisthideown' => 'ਨਿਗਰਾਨ-ਸੂਚੀ ਵਿੱਚੋਂ ਮੇਰੇ ਸੋਧ ਓਹਲੇ ਕਰੋ',
+'tog-watchlisthidebots' => 'ਨਿਗਰਾਨ-ਸੂਚੀ ਵਿੱਚੋਂ ਬੋਟ ਸੋਧਾਂ ਓਹਲੇ ਕਰੋ',
+'tog-watchlisthideminor' => 'ਨਿਗਰਾਨ-ਸੂਚੀ ਵਿੱਚੋਂ ਛੋਟੀਆਂ ਸੋਧਾਂ ਓਹਲੇ ਕਰੋ',
+'tog-watchlisthideliu' => 'ਨਿਗਰਾਨੀ-ਸੂਚੀ ਵਿਚੋਂ ਲਾਗ ਇਨ ਮੈਂਬਰਾਂ ਦੀਆਂ ਸੋਧਾਂ ਓਹਲੇ ਕਰੋ',
 'tog-watchlisthideanons' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚੋਂ ਗੁਮਨਾਮ ਮੈਂਬਰਾਂ ਦੇ ਕੀਤੇ ਫੇਰ-ਬਦਲ ਲੁਕਾਓ',
 'tog-watchlisthidepatrolled' => 'ਵੇਖੀਆਂ ਜਾ ਚੁੱਕੀਆਂ ਸੋਧਾਂ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚੋਂ ਲੁਕਾਓ',
 'tog-ccmeonemails' => 'ਜੋ ਈ-ਮੇਲਾਂ ਮੈਂ ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਭੇਜਦਾ ਹਾਂ ਓਹਨਾਂ ਦੀਆਂ ਨਕਲਾਂ ਮੈਨੂੰ ਭੇਜੋ',
-'tog-diffonly' => 'ਫ਼ਰਕਾਂ ਤੋਂ ਹੇਠ ਸਫ਼ੇ ਦੀ ਸਮੱਗਰੀ ਨਾ ਵਖਾਓ',
-'tog-showhiddencats' => 'ਲà©\81à¨\95à©\80à¨\86à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣà©\80à¨\86à¨\82 à¨µਖਾਓ',
+'tog-diffonly' => 'ਫ਼ਰਕ ਤੋਂ ਹੇਠ ਸਫ਼ੇ ਦੀ ਸਮੱਗਰੀ ਨਾ ਵੇਖਾਓ',
+'tog-showhiddencats' => 'ਲà©\81à¨\95ਵà©\80à¨\86à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣà©\80à¨\86à¨\82 à¨µà©\87ਖਾਓ',
 'tog-norollbackdiff' => '"ਵਾਪਸ ਮੋੜੌ"ਅਮਲ ਵਿਚ ਲਿਆਣ ਬਾਦ ਫ਼ਰਕ ਨਾ ਦਿਖਾਓ',
 
 'underline-always' => 'ਹਮੇਸ਼ਾਂ',
 'underline-never' => 'ਕਦੇ ਨਹੀਂ',
-'underline-default' => 'ਵਿਸ਼ਾ-ਵਸਤà©\82 à¨\9cਾà¨\82 à¨\87à©°à¨\9fਰਨà©\88ੱà¨\9f-à¨\9aਾਰà¨\95 à¨¡à¨¿à¨«à¨¾à¨²à¨\9f',
+'underline-default' => 'ਸà¨\95ਿਨ à¨\9cਾà¨\82 à¨¬à¨°à¨¾à¨\8aà¨\9c਼ਰ à¨®à©\82ਲ',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'ਸੰਪਾਦਨ à¨\96à©\87ਤਰ à¨¦à©\87 à¨\85ੱà¨\96ਰਾà¨\82 à¨¦à©\80 à¨«à¨¼à©\8cà¨\82à¨\9f à¨°à©\80ਤà©\80',
-'editfont-default' => 'ਬਰਾà¨\8aà¨\9c਼ਰ à¨¡à¨¿à¨«à¨¾à¨²à¨\9f',
-'editfont-monospace' => 'à¨\87ੱà¨\95à©\8b à¨\9cਿਹà©\80 à¨\96਼ਾਲà©\80 à¨¥à¨¾à¨\82 à¨µà¨¾à¨²à¨¼à¨¾ à¨\85ੱà¨\96ਰ',
-'editfont-sansserif' => 'Sans-serif à¨¨à¨¾à¨\82 à¨¦à¨¾ à¨«à¨¼à©\8cਂਟ',
-'editfont-serif' => 'ਨà©\8bà¨\95ਦਾਰ à¨\85ੱà¨\96ਰ',
+'editfont-style' => 'ਸà©\8bਧ à¨\96à©\87ਤਰ à¨«à©\8bà¨\82à¨\9f à¨¸à¨\9fਾà¨\87ਲ:',
+'editfont-default' => 'ਬਰਾà¨\8aà¨\9c਼ਰ à¨®à©\82ਲ',
+'editfont-monospace' => 'ਮà©\8bਨà©\8bਸਪà©\87ਸ à¨«à©\8bà¨\82à¨\9f',
+'editfont-sansserif' => 'Sans-serif à¨«à©\8bਂਟ',
+'editfont-serif' => 'ਨà©\8bà¨\95ਦਾਰ à¨«à©\8bà¨\82à¨\9f',
 
 # Dates
 'sunday' => 'ਐਤਵਾਰ',
@@ -259,18 +250,18 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'wednesday' => 'ਬੁੱਧਵਾਰ',
 'thursday' => 'ਵੀਰਵਾਰ',
 'friday' => 'ਸ਼ੁੱਕਰਵਾਰ',
-'saturday' => 'ਸ਼ਨà©\80ਵਾਰ',
+'saturday' => 'ਸ਼ਨਿੱà¨\9aਰਵਾਰ',
 'sun' => 'ਐਤ',
 'mon' => 'ਸੋਮ',
 'tue' => 'ਮੰਗਲ',
 'wed' => 'ਬੁੱਧ',
 'thu' => 'ਵੀਰ',
 'fri' => 'ਸ਼ੁੱਕਰ',
-'sat' => 'ਸ਼ਨà©\80',
+'sat' => 'ਸ਼ਨਿੱà¨\9aਰ',
 'january' => 'ਜਨਵਰੀ',
 'february' => 'ਫਰਵਰੀ',
 'march' => 'ਮਾਰਚ',
-'april' => 'ਅਪਰੈਲ',
+'april' => 'à¨\85ਪà©\8dਰà©\88ਲ',
 'may_long' => 'ਮਈ',
 'june' => 'ਜੂਨ',
 'july' => 'ਜੁਲਾਈ',
@@ -282,7 +273,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'january-gen' => 'ਜਨਵਰੀ',
 'february-gen' => 'ਫ਼ਰਵਰੀ',
 'march-gen' => 'ਮਾਰਚ',
-'april-gen' => 'ਅਪਰੈਲ',
+'april-gen' => 'à¨\85ਪà©\8dਰà©\88ਲ',
 'may-gen' => 'ਮਈ',
 'june-gen' => 'ਜੂਨ',
 'july-gen' => 'ਜੁਲਾਈ',
@@ -290,19 +281,19 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'september-gen' => 'ਸਤੰਬਰ',
 'october-gen' => 'ਅਕਤੂਬਰ',
 'november-gen' => 'ਨਵੰਬਰ',
-'december-gen' => 'ਦਿਸੰਬਰ',
-'jan' => 'ਜਨਵਰੀ',
-'feb' => 'ਫ਼ਰਵਰੀ',
-'mar' => 'ਮਾਰ',
-'apr' => 'à¨\85ਪਰà©\88ਲ',
+'december-gen' => 'ਦਸੰਬਰ',
+'jan' => 'ਜਨ',
+'feb' => 'ਫ਼ਰ',
+'mar' => 'ਮਾਰ',
+'apr' => 'à¨\85ਪà©\8dਰà©\88॰',
 'may' => 'ਮਈ',
 'jun' => 'ਜੂਨ',
-'jul' => 'ਜੁਲਾ',
-'aug' => 'ਅਗਸਤ',
-'sep' => 'ਸਤੰਬਰ',
-'oct' => 'ਅਕਤੂਬਰ',
-'nov' => 'ਨਵੰਬਰ',
-'dec' => 'ਦਸੰਬਰ',
+'jul' => 'ਜੁਲਾ',
+'aug' => 'ਅਗ',
+'sep' => 'ਸਤੰ',
+'oct' => 'ਅਕਤੂ',
+'nov' => 'ਨਵੰ',
+'dec' => 'ਦਸੰ',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|ਸ਼੍ਰੇਣੀ|ਸ਼੍ਰੇਣੀਆਂ}}',
@@ -311,7 +302,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'category-media-header' => 'ਸ਼੍ਰੇਣੀ "$1" ਵਿੱਚ ਮੀਡੀਆ',
 'category-empty' => "''ਇਸ ਸ਼੍ਰੇਣੀ ਵਿੱਚ ਇਸ ਵੇਲੇ ਕੋਈ ਵੀ ਪੰਨਾ ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ ਹੈ।''",
 'hidden-categories' => '{{PLURAL:$1|ਲੁਕਵੀਂ ਸ਼੍ਰੇਣੀ|ਲੁਕਵੀਂਆਂ ਸ਼੍ਰੇਣੀਆਂ}}',
-'hidden-category-category' => 'ਲੁਕੀਆਂ ਕੈਟੇਗਰੀਆਂ',
+'hidden-category-category' => 'ਲà©\81à¨\95ਵà©\80à¨\86à¨\82 à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80à¨\86à¨\82',
 'category-subcat-count' => 'ਇਸ ਸ਼੍ਰੇਣੀ ਵਿੱਚ, ਕੁੱਲ $2 ਵਿੱਚੋਂ, {{PLURAL:$2|ਕੇਵਲ ਇਹ ਉਪਸ਼੍ਰੇਣੀ ਹੈ|ਇਹ {{PLURAL:$1|ਉਪਸ਼੍ਰੇਣੀ ਹੈ|$1 ਉਪਸ਼੍ਰੇਣੀਆਂ ਹਨ}}}}।',
 'category-subcat-count-limited' => 'ਇਸ ਕੈਟੇਗਰੀ ਵਿਚ {{PLURAL:$1|ਸਬ-ਕੈਟੇਗਰੀ ਹੈ|$1 ਸਬ-ਕੈਟੇਗਰੀਆਂ ਹਨ}}।',
 'category-article-count' => '{{PLURAL:$2|ਇਸ ਸ਼੍ਰੇਣੀ ਵਿੱਚ ਕੇਵਲ ਇਹ ਪੰਨਾ ਹੈ।| ਇਸ ਸ਼੍ਰੇਣੀ ਵਿੱਚ, ਕੁੱਲ $2 ਵਿੱਚੋਂ, ਇਹ {{PLURAL:$1|ਪੰਨਾ ਹੈ|$1 ਪੰਨੇ ਹਨ}}}}।',
@@ -319,7 +310,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'category-file-count' => '{{PLURAL:$2|ਇਸ ਸ਼੍ਰੇਣੀ ਵਿੱਚ ਕੇਵਲ ਇਹ ਫ਼ਾਈਲ ਹੈ|ਇਸ ਸ਼੍ਰੇਣੀ ਵਿੱਚ {{PLURAL:$1|ਫ਼ਾਈਲ ਹੈ|$1 ਫ਼ਾਈਲਾਂ ਹਨ}}}}।',
 'category-file-count-limited' => 'ਮੌਜੂਦਾ ਕੈਟੇਗਰੀ ਵਿਚ ਇਹ {{PLURAL:$1|ਫ਼ਾਈਲ ਹੈ|$1 ਫ਼ਾਈਲਾਂ ਹਨ}}।',
 'listingcontinuesabbrev' => 'ਜਾਰੀ',
-'index-category' => 'ਤਤà¨\95ਰà©\87 à¨µà¨¾à¨²à¨¼à©\87 ਸਫ਼ੇ',
+'index-category' => 'ਤਤà¨\95ਰਾ ਸਫ਼ੇ',
 'noindex-category' => 'ਬਿਨਾਂ ਤਤਕਰੇ ਵਾਲੇ ਪੰਨੇ',
 'broken-file-category' => 'ਟੁੱਟੇ ਹੋਏ ਫ਼ਾਈਲ ਜੋੜਾਂ ਵਾਲ਼ੇ ਸਫ਼ੇ',
 
@@ -327,30 +318,30 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'article' => 'ਸਮੱਗਰੀ ਸਫ਼ਾ',
 'newwindow' => '(ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਖੁੱਲ੍ਹਦੀ ਹੈ)',
 'cancel' => 'ਰੱਦ ਕਰੋ',
-'moredotdotdot' => 'ਹੋਰ...',
-'morenotlisted' => 'ਹੋਰ ਨਹੀ ਹੈਗੇ',
-'mypage' => 'ਪੰਨਾ',
+'moredotdotdot' => '...ਹੋਰ',
+'morenotlisted' => '....ਹੋਰ ਸੂਚੀਬੱਧ ਨਹੀਂ',
+'mypage' => 'ਮà©\87ਰਾ à¨ªà©°à¨¨à¨¾',
 'mytalk' => 'ਚਰਚਾ',
 'anontalk' => 'ਇਸ IP ਲਈ ਗੱਲ-ਬਾਤ',
-'navigation' => 'ਰਹਿਨà©\81ਮਾà¨\88',
+'navigation' => 'ਨà©\87ਵà©\80à¨\97à©\87ਸ਼ਨ',
 'and' => '&#32;ਅਤੇ',
 
 # Cologne Blue skin
-'qbfind' => 'ਖੋਜ',
-'qbbrowse' => 'ਬਰਾà¨\8aà¨\9c਼',
-'qbedit' => 'ਸà©\8bਧ',
+'qbfind' => 'ਖੋਜ',
+'qbbrowse' => 'à¨\9dਲà¨\95',
+'qbedit' => 'ਸੰਪਾਦਨ',
 'qbpageoptions' => 'ਇਹ ਪੰਨਾ',
 'qbmyoptions' => 'ਮੇਰੇ ਪੰਨੇ',
-'qbspecialpages' => 'à¨\96ਾਸ ਪੰਨੇ',
-'faq' => 'à¨\85à¨\95ਸਰ à¨ªà©\81ੱà¨\9bà©\87 à¨\9cਾਣ à¨µà¨¾à¨²à©\87 à¨¸à¨µà¨¾à¨²',
-'faqpage' => 'Project:ਸਵਾਲ-à¨\9cਵਾਬ',
+'qbspecialpages' => 'ਵਿਸ਼à©\87ਸ਼ ਪੰਨੇ',
+'faq' => 'à¨\85à¨\95ਸਰ à¨ªà©\81ੱà¨\9bà©\87 à¨\9cਾਣ à¨µà¨¾à¨²à©\87 à¨ªà©\8dਰਸ਼ਨ',
+'faqpage' => 'Project:ਪà©\8dਰਸ਼ਨ-à¨\89ੱਤਰ',
 
 # Vector skin
 'vector-action-addsection' => 'ਵਿਸ਼ਾ ਜੋੜੋ',
 'vector-action-delete' => 'ਹਟਾਓ',
-'vector-action-move' => 'ਸਥਾਨਾà¨\82ਤਰਣ à¨\95ਰà©\8b',
-'vector-action-protect' => 'ਸà©\81ਰੱà¨\96ਿà¨\85ਤ à¨\95ਰà©\8b',
-'vector-action-undelete' => 'à¨\85ਣ-ਮਿà¨\9fਾà¨\89ਣਾ',
+'vector-action-move' => 'ਸਥਾਨਾà¨\82ਤਰਨ',
+'vector-action-protect' => 'ਸà©\81ਰੱà¨\96ਿà¨\86',
+'vector-action-undelete' => 'ਹà¨\9fਾà¨\89ਣਾ-ਵਾਪਸ',
 'vector-action-unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
 'vector-simplesearch-preference' => 'ਸਧਾਰਨ ਖੋਜ ਸਲਾਹ ਪੱਟੀ ਯੋਗ ਕਰੋ (ਸਿਰਫ਼ ਵਿਕਟਰ ਸਕਿੰਨ ਵਿਚ)',
 'vector-view-create' => 'ਬਣਾਓ',
@@ -359,7 +350,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'vector-view-view' => 'ਪੜ੍ਹੋ',
 'vector-view-viewsource' => 'ਸਰੋਤ ਵੇਖੋ',
 'actions' => 'ਕਾਰਵਾਈਆਂ',
-'namespaces' => 'ਨਾਮ-ਥਾਂਵਾਂ',
+'namespaces' => 'ਨਾਮਸਥਾਨ',
 'variants' => 'ਬਦਲ',
 
 'navigation-heading' => 'ਦਿਕਚਾਲਨ ਸੂਚੀ',
@@ -367,13 +358,13 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'returnto' => '$1 ’ਤੇ ਵਾਪਸ ਜਾਓ।',
 'tagline' => '{{SITENAME}} ਤੋਂ',
 'help' => 'ਮਦਦ',
-'search' => 'ਖੋਜ',
-'searchbutton' => 'ਖੋਜ',
+'search' => 'ਖੋਜ',
+'searchbutton' => 'ਖੋਜ',
 'go' => 'ਜਾਓ',
 'searcharticle' => 'ਜਾਓ',
 'history' => 'ਪੰਨੇ ਦਾ ਇਤਿਹਾਸ',
 'history_short' => 'ਇਤਿਹਾਸ',
-'updatedmarker' => 'ਮà©\87ਰà©\80 à¨\86à¨\96਼ਰà©\80 à¨«à©\87ਰà©\80 à¨¤à©\8bà¨\82 à¨¬à¨¾à¨\85ਦ à¨¬à¨¦à¨²à©\87 à¨\97à¨\8f',
+'updatedmarker' => 'ਮà©\87ਰà©\80 à¨\86à¨\96ਰà©\80 à¨«à©\87ਰà©\80 à¨¤à©\8bà¨\82 à¨¬à¨¾à¨\85ਦ à¨¦à©\87 à¨\85ੱਪਡà©\87à¨\9f',
 'printableversion' => 'ਛਪਣਯੋਗ ਵਰਜਨ',
 'permalink' => 'ਪੱਕਾ ਲਿੰਕ',
 'print' => 'ਛਾਪੋ',
@@ -383,48 +374,48 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'editthispage' => 'ਇਹ ਸਫ਼ਾ ਸੋਧੋ',
 'create-this-page' => 'ਇਹ ਸਫ਼ਾ ਬਣਾਓ',
 'delete' => 'ਹਟਾਓ',
-'deletethispage' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨®à¨¿ਟਾਓ',
-'undelete_short' => '{{PLURAL:$1|à¨\87ੱà¨\95 à¨¸à©\8bਧ|$1 à¨¸à©\8bਧਾà¨\82}} à¨\85ਣ-ਮਿà¨\9fਾà¨\93',
-'viewdeleted_short' => '{{PLURAL:$1|à¨\87à¨\95 à¨®à¨¿à¨\9fਾà¨\88 à¨¸à©\8bਧ|$1 à¨®à¨¿ਟਾਈਆਂ ਸੋਧਾਂ}} ਵੇਖੋ',
+'deletethispage' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨¹ਟਾਓ',
+'undelete_short' => '{{PLURAL:$1|à¨\87ੱà¨\95 à¨¸à©\8bਧ|$1 à¨¸à©\8bਧਾà¨\82}} à¨¹à¨\9fਾà¨\89ਣਾ-ਵਾਪਸ',
+'viewdeleted_short' => '{{PLURAL:$1|ਹà¨\9fਾà¨\88 à¨¸à©\8bਧ|$1 à¨¹ਟਾਈਆਂ ਸੋਧਾਂ}} ਵੇਖੋ',
 'protect' => 'ਸੁਰੱਖਿਆ',
-'protect_change' => 'ਬਦਲà©\80',
+'protect_change' => 'ਬਦਲà©\8b',
 'protectthispage' => 'ਇਹ ਸਫ਼ਾ ਸੁਰੱਖਿਅਤ ਕਰੋ',
 'unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
 'unprotectthispage' => 'ਇਹ ਸਫ਼ੇ ਦੀ ਸੁਰੱਖਿਆ ਬਦਲੋ',
-'newpage' => 'ਨਵਾà¨\82 à¨ªà©°à¨¨ਾ',
+'newpage' => 'ਨਵਾà¨\82 à¨¸à¨«à¨¼ਾ',
 'talkpage' => 'ਇਸ ਸਫ਼ੇ ਬਾਰੇ ਚਰਚਾ ਕਰੋ',
 'talkpagelinktext' => 'ਚਰਚਾ',
 'specialpage' => 'ਖ਼ਾਸ ਸਫ਼ਾ',
 'personaltools' => 'ਨਿੱਜੀ ਸੰਦ',
-'postcomment' => 'ਨਵਾà¨\82 à¨¸à©\88à¨\95ਸ਼ਨ',
+'postcomment' => 'ਨਵਾà¨\82 à¨­à¨¾à¨\97',
 'articlepage' => 'ਸਮੱਗਰੀ ਸਫ਼ਾ ਵੇਖੋ',
 'talk' => 'ਚਰਚਾ',
 'views' => 'ਵੇਖੋ',
 'toolbox' => 'ਸੰਦ ਬਕਸਾ',
-'userpage' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨¸à¨«à¨¼ਾ ਵੇਖੋ',
+'userpage' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨ªà©°à¨¨ਾ ਵੇਖੋ',
 'projectpage' => 'ਪ੍ਰੋਜੈਕਟ ਸਫ਼ਾ ਵੇਖੋ',
-'imagepage' => 'ਫ਼ਾà¨\88ਲ ਸਫ਼ਾ ਵੇਖੋ',
+'imagepage' => 'ਫਾà¨\87ਲ ਸਫ਼ਾ ਵੇਖੋ',
 'mediawikipage' => 'ਸੁਨੇਹਾ ਪੇਜ ਵੇਖੋ',
-'templatepage' => 'ਫਰਮਾ à¨¸à¨«à¨¼ਾ ਵੇਖੋ',
-'viewhelppage' => 'ਮਦਦ ਸਫ਼ਾ ਵੇਖੋ',
+'templatepage' => 'ਸਾà¨\82à¨\9aਾ à¨ªà©°à¨¨ਾ ਵੇਖੋ',
+'viewhelppage' => 'ਮੱਦਦ à¨¸à¨«à¨¼à¨¾ à¨µà©\87à¨\96à©\8b',
 'categorypage' => 'ਕੈਟੈਗਰੀ ਸਫ਼ਾ ਵੇਖੋ',
 'viewtalkpage' => 'ਚਰਚਾ ਵੇਖੋ',
-'otherlanguages' => 'ਹੋਰ ਭਾਸ਼ਾਵਾਂ',
+'otherlanguages' => 'ਹੋਰ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ',
 'redirectedfrom' => '($1 ਤੋਂ ਰੀਡਿਰੈਕਟ)',
 'redirectpagesub' => 'ਰੀਡਿਰੈਕਟ ਸਫ਼ਾ',
-'lastmodifiedat' => 'à¨\87ਸ à¨ªà©°à¨¨à¨¾ à¨¦à¨¾ à¨ªà¨¿à©±à¨\9bਲਾ à¨¬à¨¦à¨²à¨¾à¨µ  $1 ਨੂੰ  $2 ਵਜੇ ਹੋਇਆ ਸੀ।',
+'lastmodifiedat' => 'à¨\87ਸ à¨ªà©°à¨¨à¨¾ à¨¦à¨¾ à¨ªà¨¿à©±à¨\9bਲਾ à¨¬à¨¦à¨²à¨¾à¨\85  $1 ਨੂੰ  $2 ਵਜੇ ਹੋਇਆ ਸੀ।',
 'viewcount' => 'ਇਹ ਸਫ਼ਾ {{PLURAL:$1|ਇੱਕ ਵਾਰ|$1 ਵਾਰ}} ਵੇਖਿਆ ਗਿਆ।',
 'protectedpage' => 'ਸੁਰੱਖਿਅਤ ਪੇਜ',
 'jumpto' => 'ਇਸ ’ਤੇ ਜਾਓ:',
-'jumptonavigation' => 'ਰਹਿਨà©\81ਮਾà¨\88',
-'jumptosearch' => 'ਖੋਜ',
-'view-pool-error' => 'à¨\86ਫ਼ਸà©\8bਸ, à¨¸à¨°à¨µà¨° à¨\87ਸ à¨µà©\87ਲ਼ੇ ਓਵਰਲੋਡ ਹੈ।
+'jumptonavigation' => 'ਨà©\87ਵà©\80à¨\97à©\87ਸ਼ਨ',
+'jumptosearch' => 'ਖੋਜ',
+'view-pool-error' => 'à¨\85ਫ਼ਸà©\8bਸ, à¨¸à¨°à¨µà¨° à¨\87ਸ à¨µà©\87ਲੇ ਓਵਰਲੋਡ ਹੈ।
 ਬਹੁਤ ਸਾਰੇ ਮੈਂਬਰ ਇਸ ਸਫ਼ੇ ਨੂੰ ਵੇਖਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਹੇ ਹਨ।
-ਮਿਹਰਬਾਨà©\80 à¨\95ਰà¨\95à©\87 à¨¦à©\81ਬਾਰਾ à¨\95à©\8bਸ਼ਿਸ਼ à¨\95ਰਨ à¨¤à©\8bà¨\82 à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 à¨¥à©\8bà©\9cà©\80 à¨\89ਡà©\80à¨\95 à¨\95ਰà©\8b
+ਫà©\87ਰ à¨\95à©\8bਸ਼ਿਸ਼ à¨\95ਰਨ à¨¤à©\8bà¨\82 à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 à¨¥à©\8bà©\9cà©\80 à¨\89ਡà©\80à¨\95 à¨\95ਰà©\8b à¨\9cà©\80
 $1',
-'pool-timeout' => 'ਲà©\8cਕ ਲਈ ਉਡੀਕ ਦਾ ਵਕਤ ਖ਼ਤਮ ਹੋ ਗਿਆ ਹੈ',
-'pool-queuefull' => 'ਪà©\82ਲ à¨\95ਤਾਰ à¨ªà©\82ਰà©\80 à¨²à©±à¨¦ੀ ਹੈ',
-'pool-errorunknown' => 'à¨\85ਣà¨\9cਾਣ à¨\97਼ਲਤà©\80',
+'pool-timeout' => 'ਲਾਕ ਲਈ ਉਡੀਕ ਦਾ ਵਕਤ ਖ਼ਤਮ ਹੋ ਗਿਆ ਹੈ',
+'pool-queuefull' => 'ਪà©\82ਲ à¨\95ਤਾਰ à¨­à¨°ੀ ਹੈ',
+'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) and the disambiguation template definition (see disambiguations).
 'aboutsite' => '{{SITENAME}} ਬਾਰੇ',
@@ -433,18 +424,18 @@ $1',
 'copyrightpage' => '{{ns:project}}:ਕਾਪੀਰਾਈਟ',
 'currentevents' => 'ਹਾਲ ਦੀਆਂ ਘਟਨਾਵਾਂ',
 'currentevents-url' => 'Project:ਹਾਲ ਦੀਆਂ ਘਟਨਾਵਾਂ',
-'disclaimers' => 'à¨\87ਨà¨\95ਾਰà©\80 à¨\90ਲਾਨ',
-'disclaimerpage' => 'Project:à¨\86ਮ à¨\87ਨà¨\95ਾਰ',
-'edithelp' => 'ਸੰਪਾਦਨ à¨®ਦਦ',
-'edithelppage' => 'Help:ਸੰਪਾਦਨ',
-'helppage' => 'Help:à¨\9aà©\80à¨\9c਼ਾà¨\82',
-'mainpage' => 'ਮà©\81ੱà¨\96 à¨ªà©°à¨¨ਾ',
-'mainpage-description' => 'ਮà©\81ੱà¨\96 à¨ªà©°à¨¨ਾ',
-'policy-url' => 'Project:ਪਾਲਸੀ',
+'disclaimers' => 'ਦਾà¨\85ਵà©\87',
+'disclaimerpage' => 'Project:à¨\86ਮ à¨¦à¨¾à¨\85ਵà©\87',
+'edithelp' => 'ਸà©\8bਧ à¨®à©±ਦਦ',
+'edithelppage' => 'Help:ਸà©\8bਧ',
+'helppage' => 'Help:ਸਮੱà¨\97ਰà©\80',
+'mainpage' => 'ਮà©\81ੱà¨\96 à¨¸à¨«à¨¼ਾ',
+'mainpage-description' => 'ਮà©\81ੱà¨\96 à¨¸à¨«à¨¼ਾ',
+'policy-url' => 'Project:ਨà©\80ਤੀ',
 'portal' => 'ਸਮਾਜ ਮੁੱਖ ਪੰਨਾ',
-'portal-url' => 'Project:ਸਮਾà¨\9c à¨®à©\81ੱà¨\96 à¨ªà©°à¨¨à¨¾',
-'privacy' => 'ਲà©\81à¨\95ਾà¨\85 ਨੀਤੀ',
-'privacypage' => 'Project:ਲà©\81à¨\95ਾà¨\85 ਨੀਤੀ',
+'portal-url' => 'Project:ਸਮਾà¨\9c à¨¸à©±à¨¥',
+'privacy' => 'ਪਰਾà¨\88ਵà©\87ਸà©\80 ਨੀਤੀ',
+'privacypage' => 'Project:ਪਰਾà¨\88ਵà©\87ਸà©\80 ਨੀਤੀ',
 
 'badaccess' => 'ਅਧਿਕਾਰ ਗਲਤੀ',
 'badaccess-group0' => 'ਤੁਹਾਨੂੰ ਉਹ ਐਕਸ਼ਨ ਕਰਨ ਦੀ ਮਨਜ਼ੂਰੀ ਨਹੀਂ, ਜਿਸ ਦੀ ਤੁਸੀਂ ਮੰਗ ਕੀਤੀ ਹੈ।',
@@ -458,24 +449,24 @@ $1',
 'retrievedfrom' => '"$1" ਤੋਂ ਲਿਆ',
 'youhavenewmessages' => 'ਤੁਹਾਡੇ ਲਈ $1। ($2)',
 'newmessageslink' => 'ਨਵੇਂ ਸੁਨੇਹੇ',
-'newmessagesdifflink' => 'ਪਿੱà¨\9bਲਾ à¨¬à¨¦à¨²à¨¾à¨µ',
+'newmessagesdifflink' => 'à¨\86à¨\96ਰà©\80 à¨¬à¨¦à¨²à¨¾à¨\85',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|ਇੱਕ ਵਰਤੋਂਕਾਰ|$3 ਵਰਤੋਂਕਾਰਾਂ}} ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
-'youhavenewmessagesmanyusers' => 'à¨\95à¨\88 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾà¨\82 ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
+'youhavenewmessagesmanyusers' => 'à¨\95à¨\88 à¨¯à©\82à¨\9c਼ਰ ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
 'newmessageslinkplural' => '{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|ਨਵੇਂ ਸੁਨੇਹੇ}} {{PLURAL:$1|ਹੈ|ਹਨ}}',
 'newmessagesdifflinkplural' => 'ਆਖ਼ਰੀ {{PLURAL:$1|ਤਬਦੀਲੀ|ਤਬਦੀਲੀਆਂ}}',
 'youhavenewmessagesmulti' => '$1 ’ਤੇ ਤੁਹਾਡੇ ਲਈ ਨਵੇਂ ਸੁਨੇਹੇ ਹਨ',
-'editsection' => 'ਸੰਪਾਦਨ',
-'editold' => 'ਸੰਪਾਦਨ',
+'editsection' => 'ਸà©\8bਧ',
+'editold' => 'ਸà©\8bਧ',
 'viewsourceold' => 'ਸਰੋਤ ਵੇਖੋ',
-'editlink' => 'ਸੰਪਾਦਨ',
+'editlink' => 'ਸà©\8bਧ',
 'viewsourcelink' => 'ਸਰੋਤ ਵੇਖੋ',
-'editsectionhint' => 'ਭਾà¨\97 à¨¸à©°à¨ªà¨¾à¨¦à¨¨: $1',
+'editsectionhint' => 'ਭਾà¨\97 à¨¸à©\8bਧ: $1',
 'toc' => 'ਵਿਸ਼ਾ ਸੂਚੀ',
-'showtoc' => 'ਵà©\87à¨\96à©\8b',
+'showtoc' => 'ਵà©\87à¨\96ਾà¨\93',
 'hidetoc' => 'ਓਹਲੇ',
 'collapsible-collapse' => 'ਸਮੇਟੋ',
 'collapsible-expand' => 'ਫੈਲਾਓ',
-'thisisdeleted' => '$1 à¨µà©\87à¨\96à©\8b à¨\9cਾà¨\82 à¨®à©\81à©\9c à¨¬à¨¹à¨¾à¨² ਕਰੋ',
+'thisisdeleted' => '$1 à¨µà©\87à¨\96à©\8b à¨\9cਾà¨\82 à¨®à©\81à©\9c à¨¸à¨\9fà©\8bਰ ਕਰੋ',
 'viewdeleted' => '$1 ਵੇਖਣੀਆਂ ਹਨ?',
 'restorelink' => '{{PLURAL:$1|ਇਕ ਮਿਟਾਈ ਹੋਈ ਸੋਧ|$1 ਮਿਟਾਈਆਂ ਹੋਈਆਂ ਸੋਧਾਂ}}',
 'feedlinks' => 'ਫੀਡ:',
@@ -485,20 +476,20 @@ $1',
 'site-atom-feed' => '$1 ਐਟਮ ਫੀਡ',
 'page-rss-feed' => '"$1" RSS ਫੀਡ',
 'page-atom-feed' => '"$1" ਐਟਮ ਫੀਡ',
-'red-link-title' => '$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' => 'ਪੰਨਾ',
-'nstab-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨ªà©°à¨¨à©\87',
+'nstab-main' => 'ਸਫ਼ਾ',
+'nstab-user' => 'ਯà©\82à¨\9c਼ਰ à¨¸à¨«à¨¼à¨¾',
 'nstab-media' => 'ਮੀਡੀਆ ਸਫ਼ਾ',
-'nstab-special' => 'ਵਿਸ਼à©\87ਸ਼ à¨ªà©°à¨¨ਾ',
-'nstab-project' => 'ਪਰਿਯà©\8bà¨\9cਨਾ à¨ªà©°à¨¨ਾ',
-'nstab-image' => 'ਫ਼ਾà¨\88ਲ',
+'nstab-special' => 'à¨\96ਾਸ à¨¸à¨«à¨¼ਾ',
+'nstab-project' => 'ਪਰà©\8bà¨\9cà©\88à¨\95à¨\9f à¨¸à¨«à¨¼ਾ',
+'nstab-image' => 'ਫਾà¨\87ਲ',
 'nstab-mediawiki' => 'ਸੁਨੇਹਾ',
-'nstab-template' => 'ਸਾà¨\82à¨\9aਾ',
-'nstab-help' => 'ਮੱਦਦ à¨ªà©\87à¨\9c',
+'nstab-template' => 'à¨\9fà©\88ਪਲà©\87à¨\9f',
+'nstab-help' => 'ਮੱਦਦ à¨¸à¨«à¨¼à¨¾',
 'nstab-category' => 'ਸ਼੍ਰੇਣੀ',
 
 # Main script and global functions
@@ -512,7 +503,7 @@ $1',
 
 # General errors
 'error' => 'ਗ਼ਲਤੀ',
-'databaseerror' => 'ਡà©\88à¨\9fਾਬà©\87ਸ à¨\97਼ਲਤੀ',
+'databaseerror' => 'ਡਾà¨\9fਾਬà©\87ਸ à¨\97ਲਤੀ',
 'dberrortext' => 'ਡੈਟਾਬੇਸ ਪੁ੍ਛ ਗਿੱਛ ਵਿਚ ਹਿਦਾਇਤਾਂ ਦੀ ਤਰੁੱਟੀ ਮਿਲੀ ਹੈ।
 ਹੋ ਸਕਦਾ ਹੈ ਇਹ ਤਰੁ੍ੱਟੀ ਸਾਫ਼ਟਵੇਅਰ ਦੀ ਹੋਵੇ।
 ਇਸ ਗਣਿਤਫ਼ਲ "<tt>$2</tt>" ਵਿਚੌਂ ਪਿਛਲੀ ਡੈਟਬਾਸ ਪੁੱਛ ਗਿੱਛ ਸੀ: <blockquote><tt>$1</tt></blockquote.
@@ -539,8 +530,8 @@ $1',
 'filerenameerror' => "ਫ਼ਾਈਲ ''$1'' ਦਾ ਨਾਮ ਬਦਲ ਕੇ ''$2'' ਨਹੀਂ ਰੱਖਿਆ ਜਾ ਸਕਿਆ।",
 'filedeleteerror' => "ਫ਼ਾਈਲ ''$1'' ਮਿਟਾਈ ਨਹੀਂ ਜਾ ਸਕੀ।",
 'directorycreateerror' => "''$1'' ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕੀ।",
-'filenotfound' => "ਫ਼ਾà¨\88ਲ ''$1'' ਲੱਭੀ ਨਹੀਂ ਜਾ ਸਕੀ।",
-'fileexistserror' => 'ਮਿਸਲ "$1" à¨¤à©\87 à¨²à¨¿à¨\96 à¨¨à¨¹à©\80à¨\82 à¨¸à¨\95ਦà©\87: à¨®à¨¿à¨¸à¨² à¨¹à©\8cà¨\82ਦ à¨µà¨¿à¨\9a ਹੈ।',
+'filenotfound' => "ਫਾà¨\87ਲ ''$1'' ਲੱਭੀ ਨਹੀਂ ਜਾ ਸਕੀ।",
+'fileexistserror' => 'ਫਾà¨\87ਲ "$1" à¨\89ੱਤà©\87 à¨²à¨¿à¨\96 à¨¨à¨¹à©\80à¨\82 à¨¸à¨\95ਦà©\87: à¨«à¨¾à¨\87ਲ à¨®à©\8cà¨\9cà©\82ਦ ਹੈ।',
 'unexpected' => 'ਅਣਉਮੀਦਿਆ ਮੁੱਲ: "$1"="$2"।',
 'formerror' => 'ਗ਼ਲਤੀ: ਫ਼ਾਰਮ ਪੇਸ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ',
 'badarticleerror' => 'ਇਹ ਕਾਰਵਾਈ ਇਸ ਸਫ਼ੇ ਤੇ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ।',
@@ -580,6 +571,7 @@ $2',
 'exception-nologin-text' => 'ਇਹ ਸਫ਼ਾ ਜਾਂ ਕਾਰਵਾਈ ਤੁਹਾਡਾ ਇਸ ਵਿਕੀ ’ਤੇ ਲਾਗਇਨ ਕੀਤਾ ਹੋਣਾ ਲੋੜਦੀ ਹੈ।',
 
 # Virus scanner
+'virus-scanfailed' => 'ਸਕੈਨ ਫੇਲ੍ਹ ਹੈ (ਕੋਡ $1)',
 'virus-unknownscanner' => 'ਅਣਪਛਾਤਾ ਐਂਟੀਵਾਇਰਸ:',
 
 # Login and logout pages
@@ -587,12 +579,19 @@ $2',
 
 You can continue to use {{SITENAME}} anonymously, or you can log in again as the same or as a different user.
 Note that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
-'welcomeuser' => 'ਸੁਆਗਤ, $1!',
-'welcomecreation-msg' => 'ਤੁਹਾਡਾ ਖਾਤਾ ਬਣ ਚੁੱਕਾ ਹੈ। ਆਪਣੀਆਂ [[Special:Preferences|{{SITENAME}} ਪਸੰਦਾਂ]] ਬਦਲਣੀਆਂ ਨਾ ਭੁੱਲੋ।',
-'yourname' => 'ਵਰਤੋਂਕਾਰ ਨਾਮ:',
+'welcomeuser' => '$1 ਜੀ ਆਇਆਂ ਨੂੰ!',
+'welcomecreation-msg' => 'ਤੁਹਾਡਾ ਖਾਤਾ ਬਣ ਚੁੱਕਾ ਹੈ। ਆਪਣੀਆਂ [[Special:Preferences|{{SITENAME}} ਪਸੰਦ]] ਬਦਲਣੀ ਨਾ ਭੁੱਲੋ।',
+'yourname' => 'ਯੂਜ਼ਰ-ਨਾਂ:',
+'userlogin-yourname' => 'ਯੂਜ਼ਰ ਨਾਂ',
+'userlogin-yourname-ph' => 'ਆਪਣਾ ਯੂਜਰ-ਨਾਂ ਦਿਉ',
 'yourpassword' => 'ਪਾਸਵਰਡ:',
-'yourpasswordagain' => 'ਪਾਸਵਰਡ ਦੁਬਾਰਾ ਲਿਖੋ:',
+'userlogin-yourpassword' => 'ਪਾਸਵਰਡ',
+'userlogin-yourpassword-ph' => 'ਆਪਣਾ ਪਾਸਵਰਡ ਦਿਉ',
+'yourpasswordagain' => 'ਪਾਸਵਰਡ ਮੁੜ ਲਿਖੋ:',
 'remembermypassword' => 'ਇਸ ਕੰਪਿਊਟਰ ’ਤੇ ਮੇਰਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ (ਵੱਧ ਤੋਂ ਵੱਧ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ)',
+'userlogin-remembermypassword' => 'ਮੈਨੂੰ ਯਾਦ ਰੱਖੋ',
+'userlogin-signwithsecure' => 'ਸੁਰੱਖਿਅਤ ਸਰਵਰ ਨਾਲ ਸਾਇਨ ਕਰੋ',
+'securelogin-stick-https' => 'ਲਾਗਇਨ ਕਰਨ ਦੇ ਬਾਅਦ HTTPS ਨਾਲ ਕੁਨੈਕਟ ਰਹੋ',
 'yourdomainname' => 'ਤੁਹਾਡੀ ਡੋਮੇਨ:',
 'password-change-forbidden' => 'ਇਸ ਵਿਕੀ ਤੇ ਤੁਸੀਂ ਪਾਸਵਰਡ ਨਹੀਂ ਬਦਲ ਸਕਦੇ।',
 'login' => 'ਲਾਗ ਇਨ',
@@ -603,13 +602,17 @@ Note that some pages may continue to be displayed as if you were still logged in
 'logout' => 'ਲਾਗ ਆਉਟ',
 'userlogout' => 'ਲਾਗ ਆਉਟ',
 'notloggedin' => 'ਲਾਗਇਨ ਨਹੀਂ',
+'userlogin-noaccount' => 'ਖਾਤਾ ਨਹੀਂ ਹੈ?',
+'userlogin-joinproject' => '{{SITENAME}} ਦਾ ਹਿੱਸਾ ਬਣੋ',
 'nologin' => 'ਖਾਤਾ ਨਹੀਂ ਹੈ? $1।',
 'nologinlink' => 'ਖਾਤਾ ਬਣਾਓ',
 'createaccount' => 'ਖਾਤਾ ਬਣਾਓ',
 'gotaccount' => 'ਖਾਤਾ ਪਹਿਲਾਂ ਹੀ ਹੈ? $1',
 'gotaccountlink' => 'ਲਾਗ ਇਨ',
 'userlogin-resetlink' => 'ਆਪਣੀ ਲਾਗਇਨ ਜਾਣਕਾਰੀ ਭੁੱਲ ਗਏ ਹੋ?',
-'createaccountmail' => 'ਈ-ਮੇਲ ਜ਼ਰੀਏ',
+'helplogin-url' => 'Help: ਲਾਗਇਨ ਕਰਨਾ',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|ਲਾਗਇਨ ਕਰਨ ਬਾਰੇ ਮੱਦਦ]]',
+'createaccountmail' => 'ਆਰਜ਼ੀ ਰਲਵਾਂ ਪਾਸਵਰਡ ਵਰਤੋਂ ਅਤੇ ਇਸ ਨੂੰ ਹੇਠ ਦਿੱਤੇ ਈਮੇਲ ਸਿਰਨਾਵੇਂ ਉੱਤੇ ਭੇਜ ਦਿਉ',
 'createaccountreason' => 'ਕਾਰਨ:',
 'badretype' => 'ਤੁਹਾਡੇ ਵਲੋਂ ਦਿੱਤੇ ਪਾਸਵਰਡ ਮਿਲਦੇ ਨਹੀਂ ਹਨ।',
 'userexists' => 'ਇਹ ਮੈਂਬਰ-ਨਾਮ ਪਹਿਲਾਂ ਹੀ ਵਰਤੋਂ ’ਚ ਹੈ।
@@ -618,9 +621,9 @@ Note that some pages may continue to be displayed as if you were still logged in
 'createaccounterror' => 'ਖਾਤਾ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: $1',
 'nocookiesnew' => 'ਯੂਜ਼ਰ ਅਕਾਊਂਟ ਬਣਾਇਆ ਗਿਆ ਹੈ, ਪਰ ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਹੈ।{{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them, then log in with your new username and password.',
 'nocookieslogin' => '{{SITENAME}} ਯੂਜ਼ਰਾਂ ਨੂੰ ਲਾਗਇਨ ਕਰਨ ਲਈ ਕੂਕੀਜ਼ ਵਰਤਦੀ ਹੈ। ਤੁਹਾਡੇ ਕੂਕੀਜ਼ ਆਯੋਗ ਕੀਤੇ ਹੋਏ ਹਨ। ਉਨ੍ਹਾਂ ਨੂੰ ਯੋਗ ਕਰਕੇ ਮੁੜ ਟਰਾਈ ਕਰੋ।',
-'noname' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ੱà¨\95 à¨¸à¨¹à©\80 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ-ਨਾਂ ਨਹੀਂ ਦਿੱਤਾ ਹੈ।',
-'loginsuccesstitle' => 'ਲਾà¨\97à¨\87ਨ à¨\95ਾਮਯਾਬ',
-'loginsuccess' => "'''ਤà©\81ਸà©\80à¨\82 {{SITENAME}} à¨\89ੱਤà©\87 \"\$1\" à¨µà¨¾à¨\82à¨\97 ਲਾਗਇਨ ਕਰ ਚੁੱਕੇ ਹੋ।'''",
+'noname' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ੱà¨\95 à¨¸à¨¹à©\80 à¨¯à©\82à¨\9c਼ਰ-ਨਾਂ ਨਹੀਂ ਦਿੱਤਾ ਹੈ।',
+'loginsuccesstitle' => 'ਲਾà¨\97à¨\87ਨ à¨¸à¨«à¨¼à¨²',
+'loginsuccess' => "'''ਤà©\81ਸà©\80à¨\82 {{SITENAME}} à¨\89ੱਤà©\87 \"\$1\" à¨µà¨\9cà©\8bà¨\82 ਲਾਗਇਨ ਕਰ ਚੁੱਕੇ ਹੋ।'''",
 'nosuchuser' => '!"$1" ਨਾਂ ਨਾਲ ਕੋਈ ਯੂਜ਼ਰ ਨਹੀਂ ਹੈ। ਆਪਣੇ ਸ਼ਬਦ ਜੋੜ ਧਿਆਨ ਨਾਲ ਚੈਕ ਕਰੋ ਉਪਰ ਹੇਠਾਂ ਦਾ ਕੇਸ ਵਰਤਣ ਨਾਲ ਫ਼ਰਕ ਪੈਂਦਾ ਹੈ ਜਾਂ [[Special:UserLogin/signup|ਨਵਾਂ ਖਾਤਾ ਬਣਾਓ]]',
 'nosuchusershort' => '"$1" ਨਾਂ ਨਾਲ ਕੋਈ ਵੀ ਯੂਜ਼ਰ ਨਹੀਂ ਹੈ। ਆਪਣੇ ਸ਼ਬਦ ਧਿਆਨ ਨਾਲ ਚੈੱਕ ਕਰੋ।',
 'nouserspecified' => 'ਤੁਹਾਨੂੰ ਇੱਕ ਯੂਜ਼ਰ-ਨਾਂ ਦੇਣਾ ਪਵੇਗਾ।',
@@ -692,13 +695,14 @@ Note that some pages may continue to be displayed as if you were still logged in
 'resetpass-temp-password' => 'ਆਰਜ਼ੀ ਪਾਸਵਰਡ:',
 
 # Special:PasswordReset
-'passwordreset' => 'ਪਾਸਵਰਡ à¨°à©\80ਸੈੱਟ ਕਰੋ',
-'passwordreset-text' => 'à¨\86ਪਣà©\87 à¨\96ਾਤà©\87 à¨¦à©\80 à¨¤à¨«à¨¼à¨¸à©\80ਲ à¨¦à©\80 à¨\88-ਮà©\87ਲ à¨¹à¨¾à¨¸à¨² à¨\95ਰਨ à¨²à¨\88 à¨\87ਹ à¨«à¨¼à¨¾à¨°à¨® à¨®à©\81à¨\95ੰਮਲ ਕਰੋ।',
-'passwordreset-legend' => 'ਪਾਸਵਰਡ à¨°à©\80ਸੈੱਟ ਕਰੋ',
+'passwordreset' => 'ਪਾਸਵਰਡ à¨®à©\81à©\9c-ਸੈੱਟ ਕਰੋ',
+'passwordreset-text' => 'à¨\86ਪਣਾ à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨®à©\81à©\9c-ਸà©\88ੱà¨\9f à¨\95ਰਨ à¨²à¨\88 à¨\87ਹ à¨«à¨¾à¨°à¨® à¨ªà©\82ਰਾ ਕਰੋ।',
+'passwordreset-legend' => 'ਪਾਸਵਰਡ à¨®à©\81à©\9c-ਸੈੱਟ ਕਰੋ',
 'passwordreset-disabled' => 'ਇਸ ਵਿਕੀ ਤੇ ਪਾਸਵਰਡ ਰੀਸੈੱਟ ਬੰਦ ਕੀਤੇ ਗਏ ਹਨ।',
-'passwordreset-username' => 'ਮੈਂਬਰ-ਨਾਂ:',
+'passwordreset-emaildisabled' => 'ਇਹ ਵਿਕਿ ਉੱਤੇ ਈਮੇਲ ਫੀਚਰ ਬੰਦ ਕੀਤਾ ਹੋਇਆ ਹੈ।',
+'passwordreset-username' => 'ਯੂਜ਼ਰ-ਨਾਂ:',
 'passwordreset-domain' => 'ਡੋਮੇਨ:',
-'passwordreset-email' => 'à¨\88-ਮà©\87ਲ à¨ªà¨¤à¨¾:',
+'passwordreset-email' => 'à¨\88-ਮà©\87ਲ à¨¸à¨¿à¨°à¨¨à¨¾à¨µà¨¾à¨\82:',
 'passwordreset-emailtitle' => '{{SITENAME}} ਤੇ ਖਾਤੇ ਦੀ ਜਾਣਕਾਰੀ',
 'passwordreset-emailtext-ip' => 'ਕਿਸੇ ਨੇ (ਸ਼ਾਇਦ ਤੁਸੀਂ, IP ਪਤਾ $1 ਤੋਂ) {{SITENAME}}
 ($4) ਲਈ ਖਾਤਾ ਤਫ਼ਸੀਲ ਯਾਦ-ਦਹਾਨੀ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ। ਇਹ {{PLURAL:
@@ -708,58 +712,58 @@ $2
 ਇਹ ਆਰਜ਼ੀ ਪਾਸਵਰਡ
 {{PLURAL:$5|ਇੱਕ ਦਿਨ|$5 ਦਿਨਾਂ}} ਵਿਚ ਖ਼ਤਮ ਹੋ {{PLURAL:$3|ਜਾਵੇਗਾ|ਜਾਣਗੇ}}।
 ਤੁਹਾਨੂੰ ਹੁਣੇ ਲਾਗਇਨ ਕਰਕੇ ਨਵਾਂ ਪਾਸਵਰਡ ਬਣਾਉਣਾ ਚਾਹੀਦਾ ਹੈ। ਜੇ ਕਿਸੇ ਹੋਰ ਨੇ ਇਹ ਬੇਨਤੀ ਕੀਤੀ ਸੀ ਜਾਂ ਜੇ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਾਸਵਰਡ ਯਾਦ ਹੈ ਅਤੇ ਤੁਸੀਂ ਇਸਨੂੰ ਬਦਲਣਾ ਨਹੀਂ ਚਾਹੁੰਦੇ ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਕੇ ਆਪਣਾ ਪੁਰਾਣਾ ਪਾਸਵਰਡ ਵਰਤਣਾ ਜਾਰੀ ਰੱਖ ਸਕਦੇ ਹੋ।',
-'passwordreset-emailelement' => 'ਮà©\88à¨\82ਬਰ-ਨਾਂ: $1
+'passwordreset-emailelement' => 'ਯà©\82à¨\9c਼ਰ-ਨਾਂ: $1
 ਆਰਜ਼ੀ ਪਾਸਵਰਡ: $2',
 'passwordreset-emailsent' => 'ਇੱਕ ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਈ-ਮੇਲ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।',
 'passwordreset-emailsent-capture' => 'ਇੱਕ ਯਾਦ-ਦਹਾਨੀ ਈ-ਮੇਲ, ਜਿਹੜੀ ਕਿ ਹੇਠਾਂ ਦਿੱਸ ਰਹੀ ਹੈ, ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।',
 
 # Special:ChangeEmail
-'changeemail' => 'à¨\88-ਮà©\87ਲ à¨ªà¨¤à¨¾ ਬਦਲੋ',
-'changeemail-header' => 'à¨\96ਾਤà©\87 à¨µà¨¾à¨²à¨¼à¨¾ à¨\88-ਮà©\87ਲ à¨ªà¨¤à¨¾ ਬਦਲੋ',
+'changeemail' => 'à¨\88-ਮà©\87ਲ à¨¸à¨¿à¨°à¨¨à¨¾à¨µà¨¾à¨\82 ਬਦਲੋ',
+'changeemail-header' => 'à¨\96ਾਤà©\87 à¨µà¨¾à¨²à¨¾ à¨\88-ਮà©\87ਲ à¨¸à¨¿à¨°à¨¨à¨¾à¨µà¨¾à¨\82 ਬਦਲੋ',
 'changeemail-text' => 'ਆਪਣਾ ਈ-ਮੇਲ ਪਤਾ ਬਦਲਣ ਲਈ ਇਹ ਫ਼ਾਰਮ ਮੁਕੰਮਲ ਕਰੋ। ਇਸ ਤਬਦੀਲੀ ਨੂੰ ਤਸਦੀਕ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖ਼ਲ ਕਰਨਾ ਪਵੇਗਾ।',
 'changeemail-no-info' => 'ਇਸ ਸਫ਼ੇ ਨੂੰ ਸਿੱਧੇ ਹੀ ਵੇਖਣ ਲਈ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨਾ ਪਵੇਗਾ।',
-'changeemail-oldemail' => 'à¨\9aਾਲà©\82 à¨\88-ਮà©\87ਲ à¨ªà¨¤à¨¾:',
-'changeemail-newemail' => 'ਨਵਾà¨\82 à¨\88-ਮà©\87ਲ à¨ªà¨¤à¨¾:',
+'changeemail-oldemail' => 'ਮà©\8cà¨\9cà©\82ਦਾ à¨\88ਮà©\87ਲ à¨¸à¨¿à¨°à¨¨à¨¾à¨µà¨¾à¨\82:',
+'changeemail-newemail' => 'ਨਵਾà¨\82 à¨\88-ਮà©\87ਲ à¨¸à¨¿à¨°à¨¨à¨¾à¨µà¨¾à¨\82:',
 'changeemail-none' => '(ਕੋਈ ਨਹੀਂ)',
 'changeemail-password' => 'ਤੁਹਾਡਾ {{SITENAME}} ਪਾਸਵਰਡ:',
 'changeemail-submit' => 'ਈ-ਮੇਲ ਬਦਲੋ',
 'changeemail-cancel' => 'ਰੱਦ ਕਰੋ',
 
 # Edit page toolbar
-'bold_sample' => 'à¨\97à©\82à©\9cà©\8dਹà©\80 à¨²à¨¿à¨\96ਾà¨\88',
-'bold_tip' => 'à¨\97à©\81à©\9cà©\8dਹà©\80 à¨²à¨¿à¨\96ਾà¨\88',
-'italic_sample' => 'à¨\9fà©\87ਢà©\80 à¨²à¨¿à¨\96ਤ',
-'italic_tip' => 'à¨\9fà©\87ਢà©\80 à¨²à¨¿à¨\96ਾà¨\88',
-'link_sample' => 'à¨\95à©\9cà©\80 à¨¸à¨¿à¨°à¨²à©\87à¨\96',
-'link_tip' => 'à¨\85ੰਦਰà©\82ਨà©\80 à¨\95à©\9cà©\80',
-'extlink_sample' => 'http://www.example.com à¨²à¨¿à©°à¨\95 à¨¸à¨¿à¨°à¨²à©\87à¨\96',
-'extlink_tip' => 'ਬਾਹਰà©\80 à¨\95à©\9cà©\80 (ਅਗੇਤਰ http:// ਯਾਦ ਰੱਖੋ)',
-'headline_sample' => 'ਸਿਰਲੇਖ',
+'bold_sample' => 'à¨\97à©\82à©\9cà©\8dਹà©\87 à¨\85ੱà¨\96ਰ',
+'bold_tip' => 'à¨\97à©\82à©\9cà©\8dਹà©\87 à¨\85ੱà¨\96ਰ',
+'italic_sample' => 'à¨\9fà©\87ਡà©\87 à¨\85ੱà¨\96ਰ',
+'italic_tip' => 'à¨\9fà©\87ਢà©\80 à¨\85ੱà¨\96ਰ',
+'link_sample' => 'ਲਿੰà¨\95 à¨¨à¨¾à¨\82',
+'link_tip' => 'à¨\85ੰਦਰà©\82ਨà©\80 à¨²à¨¿à©°à¨\95',
+'extlink_sample' => 'http://www.example.com à¨²à¨¿à©°à¨\95 à¨¨à¨¾à¨\82',
+'extlink_tip' => 'ਬਾਹਰà©\80 à¨²à¨¿à©°à¨\95 (ਅਗੇਤਰ http:// ਯਾਦ ਰੱਖੋ)',
+'headline_sample' => 'ਸਿਰਲੇਖ ਸ਼ਬਦ',
 'headline_tip' => 'ਦੂਜੇ ਦਰਜੇ ਦਾ ਸਿਰਲੇਖ',
 'nowiki_sample' => 'ਅਸੰਗਠਿਤ ਪਾਠ (NON -FORMATTED) ਇੱਥੇ ਰਖੋ।',
 'nowiki_tip' => 'ਵਿਕੀ ਫ਼ੌਰਮੈਟਿੰਗ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰੋ',
-'image_tip' => 'à¨\87ੰਬà©\88ੱਡ à¨\9aਿੱਤਰ',
-'media_tip' => 'ਫ਼ਾà¨\88ਲ à¨\95à©\9cà©\80',
+'image_tip' => 'à¨\87ੰਬà©\88ੱਡ à¨«à¨¾à¨\87ਲ',
+'media_tip' => 'ਫਾà¨\87ਲ à¨²à¨¿à©°à¨\95',
 'sig_tip' => 'ਤੁਹਾਡੇ ਦਸਤਖਤ ਸਮੇਂ ਸਮੇਤ',
 'hr_tip' => 'ਲੇਟਵੀਂ ਲਾਈਨ (use sparingly)',
 
 # Edit pages
 'summary' => 'ਸਾਰ:',
 'subject' => 'ਵਿਸ਼ਾ/ਹੈੱਡਲਾਈਨ:',
-'minoredit' => 'à¨\87ਹ à¨\87ੱà¨\95 à¨\9bà©\8bà¨\9fਾ à¨¬à¨¦à¨²à¨¾à¨µ ਹੈ',
+'minoredit' => 'à¨\87ਹ à¨\87ੱà¨\95 à¨\9bà©\8bà¨\9fਾ à¨¬à¨¦à¨²à¨¾à¨\85 ਹੈ',
 'watchthis' => 'ਇਸ ਪੰਨੇ ’ਤੇ ਧਿਆਨ ਰੱਖੋ',
-'savearticle' => 'ਪੰਨਾ à¨¸à¨¾à¨\82ਭੋ',
+'savearticle' => 'ਸਫ਼ਾ à¨¸à©°à¨­à¨¾à¨²ੋ',
 'preview' => 'ਝਲਕ',
-'showpreview' => 'à¨\9dਲà¨\95 à¨µà©\87à¨\96à©\8b',
+'showpreview' => 'à¨\9dਲà¨\95 à¨µà©\87à¨\96ਾà¨\93',
 'showlivepreview' => 'ਲਾਈਵ ਝਲਕ',
-'showdiff' => 'ਬਦਲਾਵ à¨µà¨¿à¨\96ਾà¨\93',
+'showdiff' => 'ਬਦਲਾà¨\85 à¨µà©\87à¨\96à©\8b',
 'anoneditwarning' => "'''ਚੇਤਾਵਨੀ:''' ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਹੈ। ਤੁਹਾਡਾ IP ਐਡਰੈੱਸ ਇਸ ਪੰਨੇ ਦੇ ਇਤਿਹਾਸ ਵਿੱਚ ਰਿਕਾਰਡ ਕੀਤਾ ਜਾਵੇਗਾ।",
 'anonpreviewwarning' => "''ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ। ਤਬਦੀਲੀ ਸਾਂਭਣ ਨਾਲ਼ ਤੁਹਾਡਾ IP ਪਤਾ ਸਫ਼ੇ ਦੇ ਸੋਧ ਅਤੀਤ ਵਿਚ ਰਿਕਾਰਡ ਹੋ ਜਾਵੇਗਾ।''",
 'missingsummary' => "'''ਯਾਦ-ਦਹਾਨੀ:''' ਤੁਸੀਂ ਸੋਧ ਸਾਰ ਮੁਹੱਈਆ ਨਹੀਂ ਕਰਵਾਇਆ। ਜੇ ਤੁਸੀਂ \"{{int:savearticle}}\" ਤੇ ਦੁਬਾਰਾ ਕਲਿੱਕ ਕੀਤਾ ਤਾਂ ਤੁਹਾਡਾ ਸਫ਼ਾ ਇਸਦੇ ਬਿਨਾਂ ਹੀ ਸਾਂਭਿਆ ਜਾਵੇਗਾ।",
 'missingcommenttext' => 'ਹੇਠਾਂ ਇੱਕ ਟਿੱਪਣੀ ਦਿਓ।',
 'summary-preview' => 'ਸੋਧ ਸਾਰ ਦੀ ਝਲਕ:',
 'subject-preview' => 'ਵਿਸ਼ਾ/ਹੈੱਡਲਾਈਨ ਝਲਕ:',
-'blockedtitle' => 'ਯà©\82à¨\9c਼ਰ à¨¬à¨²à¨¾à¨\95 à¨\95à©\80ਤਾ à¨\97ਿà¨\86',
+'blockedtitle' => 'ਯà©\82à¨\9c਼ਰ à¨\89ੱਤà©\87 à¨ªà¨¾à¨¬à©°à¨¦à©\80 à¨²à¨\97ਾà¨\88',
 'blockedtext' => "'''ਤੁਹਾਡੇ ਮੌਮਬਰ ਨਾਮ ਜਾਂ IP ਪਤੇ ’ਤੇ ਪਾਬੰਦੀ ਲੱਗ ਚੁੱਕੀ ਹੈ।'''
 
 ਪਾਬੰਦੀ $1 ਨੇ ਲਾਈ ਹੈ।
@@ -801,7 +805,7 @@ sysop}}|administrator]] ਨਾਲ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ।
 'noarticletext-nopermission' => 'ਫ਼ਿਲਹਾਲ ਇਸ ਪੰਨੇ ’ਤੇ ਕੋਈ ਲਿਖਤ ਨਹੀਂ ਹੈ। ਤੁਸੀਂ ਦੂਸਰੇ ਪੰਨਿਆਂ ’ਤੇ [[Special:Search/{{PAGENAME}}|ਇਸ ਸਿਰਲੇਖ ਦੀ ਖੋਜ]] ਕਰ ਸਕਦੇ ਹੋ, ਸਬੰਧਤ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ਚਿੱਠੇ] ਖੋਜ ਸਕਦੇ ਹੋ ਜਾਂ [{{fullurl:{{FULLPAGENAME}}|action=edit}} ਇਸ ਪੰਨੇ ਵਿੱਚ ਲਿਖ] ਸਕਦੇ ਹੋ।</span>',
 'userpage-userdoesnotexist' => 'ਮੈਂਬਰ ਖਾਤਾ "$1" ਰਜਿਸਟਰ ਨਹੀਂ ਹੈ।
 ਜੇ ਤੁਸੀਂ ਇਸਨੂੰ ਬਣਾਉਣਾ/ਸੋਧਣਾ ਚਾਹੁੰਦੇ ਹੋ ਤਾਂ ਮਿਰਬਾਨੀ ਕਰਕੇ ਜਾਂਚ ਕਰ ਲਓ।',
-'userpage-userdoesnotexist-view' => 'ਮà©\88à¨\82ਬਰ ਖਾਤਾ "$1" ਰਜਿਸਟਰ ਨਹੀਂ ਹੈ।',
+'userpage-userdoesnotexist-view' => 'ਯà©\82à¨\9c਼ਰ ਖਾਤਾ "$1" ਰਜਿਸਟਰ ਨਹੀਂ ਹੈ।',
 'blocked-notice-logextract' => 'ਇਹ ਮੈਂਬਰ ਇਸ ਵੇਲ਼ੇ ਪਾਬੰਦੀਸ਼ੁਦਾ ਹੈ।
 ਹਵਾਲੇ ਲਈ ਪਾਬੰਦੀ ਚਿੱਠੇ ਦਾ ਨਵਾਂ ਦਾਖ਼ਲਾ ਹੇਠ ਦਿੱਤਾ ਗਿਆ ਹੈ:',
 'usercssyoucanpreview' => "'''ਟੋਟਕਾ:''' ਆਪਣੇ ਨਵੇਂ CSS ਸਫ਼ੇ ਨੂੰ ਸਾਂਭਣ ਤੋਂ ਪਹਿਲਾਂ ਪਰਖ ਕਰਨ ਲਈ \"{{int:showpreview}}\" ਬਟਨ ਵਰਤੋ।",
@@ -818,12 +822,12 @@ sysop}}|administrator]] ਨਾਲ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ।
 'note' => "'''ਨੋਟ:'''",
 'previewnote' => "'''ਯਾਦ ਰੱਖੋ, ਇਹ ਕੇਵਲ ਇੱਕ ਝਲਕ ਹੈ।'''
 ਤੁਹਾਡੇ ਬਦਲਾਵ ਹੁਣੇ ਤੱਕ ਸਾਂਭੇ ਨਹੀਂ ਗਏ ਹਨ!",
-'continue-editing' => 'ਸੰਪਾਦਨ à¨\9cਾਰà©\80 à¨°à©±à¨\96à©\8b',
+'continue-editing' => 'ਸੰਪਾਦਨ à¨\96à©\87ਤਰ à¨¨à©\82à©° à¨\9cਾà¨\93',
 'previewconflict' => 'ਇਹ ਝਲਕ ਲਿਖਤ ਦਾ ਓਹ ਅਕਸ ਪੇਸ਼ ਕਰਦੀ ਹੈ ਜਿਵੇਂ ਓਹ ਤੁਹਾਡੇ ਸਾਂਭੇ ਜਾਣ ਤੋਂ ਬਾਅਦ ਦਿੱਸੇਗਾ।',
-'editing' => '$1 à¨¸à©°à¨ªà¨¾à¨¦à¨¨',
-'creating' => '$1 ਬਣਾ ਰਹੇ ਹੋ',
-'editingsection' => '$1 ਸੰਪਾਦਨ (ਭਾਗ)',
-'editingcomment' => '$1 ਸੋਧ ਰਹੇ ਹੋ (ਨਵਾਂ ਸੈਕਸ਼ਨ)',
+'editing' => '$1 à¨¸à©\8bਧ à¨\9cਾਰà©\80',
+'creating' => '$1 ਬਣਾਇਆ ਜਾ ਰਿਹਾ ਹੈ',
+'editingsection' => '$1 (ਭਾਗ) ਸੋਧ ਜਾਰੀ',
+'editingcomment' => '$1 (ਨਵਾਂ ਭਾਗ) ਸੋਧ ਜਾਰੀ',
 'editconflict' => 'ਅਪਵਾਦ ਟਿੱਪਣੀ: $1',
 'yourtext' => 'ਤੁਹਾਡਾ ਟੈਕਸਟ',
 'storedversion' => 'ਸੰਭਾਲਿਆ ਵਰਜਨ',
@@ -860,13 +864,19 @@ $1 ਲੁਕਵੀਆਂ ਸ਼੍ਰੇਣੀਆਂ}} ਦਾ ਮੈਂਬਰ 
 ਇਸਨੂੰ ਮਿਟਾਉਣ ਜਾਂ ਸਿਰਲੇਖ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ।",
 'moveddeleted-notice' => 'ਇਹ ਪੰਨਾ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।
 ਇਸਦੇ ਹਟਾਉਣ ਜਾਂ ਸਿਰਲੇਖ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹਵਾਲੇ ਲਈ ਹੇਠ ਦਿੱਤਾ ਗਿਆ ਹੈ।',
-'log-fulllog' => 'ਪà©\82ਰਾ à¨\9aਿੱਠਾ à¨µà©\87à¨\96à©\8b',
-'edit-gone-missing' => 'ਸਫ਼ਾ à¨\85ਪਡੇਟ ਨਹੀਂ ਹੋ ਸਕਿਆ।
-ਲà¨\97ਦਾ à¨¹à©\88 à¨®à¨¿ਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।',
+'log-fulllog' => 'ਪà©\82ਰਾ à¨²à¨¾à¨\97 à¨µà©\87à¨\96ਾà¨\93',
+'edit-gone-missing' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨\85ੱਪਡੇਟ ਨਹੀਂ ਹੋ ਸਕਿਆ।
+à¨\9cਾਪਦਾ à¨¹à©\88 à¨\95ਿ à¨\87ਹ à¨¹ਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।',
 'edit-no-change' => 'ਤੁਹਾਡੀ ਸੋਧ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਦਿੱਤੀ ਗਈ ਹੈ ਕਿਉਂਕਿ ਲਿਖਤ ਵਿਚ ਕੋਈ ਤਬਦੀਲੀ ਨਹੀਂ ਕੀਤੀ ਗਈ।',
 'edit-already-exists' => 'ਨਵਾਂ ਸਫ਼ਾ ਨਹੀਂ ਬਣਾਇਆ ਜਾ ਸਕਿਆ।
 ਇਹ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ।',
 
+# Content models
+'content-model-wikitext' => 'ਵਿਕਿਟੈਕਸਟ',
+'content-model-text' => 'ਆਮ ਟੈਕਸਟ',
+'content-model-javascript' => 'ਜਾਵਾਸਕ੍ਰਿਪਟ',
+'content-model-css' => 'ਸੀਐਸਐਸ',
+
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''ਖਬਰਦਾਰ:''' ਸਾਂਚਾ ਦਾ ਅਕਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ। ਕੁਝ ਟੈਂਪਲੇਟ ਸ਼ਾਮਲ ਨਹੀਂ ਹੋਣਗੇ।",
 'post-expand-template-inclusion-category' => 'ਓਹ ਪੰਨੇ ਜਿੱਥੇ ਟੈਂਪਲੇਟਾਂ ਦੇ ਸ਼ਾਮਲ ਕਰਨ ਦਾ ਅਕਾਰ ਹੱਦੋਂ ਵਧ ਗਿਆ ਹੈ',
@@ -882,7 +892,7 @@ $1 ਲੁਕਵੀਆਂ ਸ਼੍ਰੇਣੀਆਂ}} ਦਾ ਮੈਂਬਰ 
 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|ਗੱਲ-ਬਾਤ]]) ਦੀ ਸੋਧ $1 ਨਕਾਰੀ',
 
 # Account creation failure
-'cantcreateaccounttitle' => 'à¨\85à¨\95ਾà¨\8aà¨\82à¨\9f ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ',
+'cantcreateaccounttitle' => 'à¨\96ਾਤਾ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ',
 'cantcreateaccount-text' => "[[User:$3|$3]] ਨੇ ਇਸ IP ਪਤੇ ('''$1''') ਤੋਂ ਖਾਤਾ ਬਣਾਉਣ ਤੇ ਪਾਬੰਦੀ ਲਾਈ ਹੈ।
 
 $3 ਨੇ ਕਾਰਨ ਇਹ ਦੱਸਿਆ ਹੈ, ''$2''",
@@ -899,18 +909,18 @@ $3 ਨੇ ਕਾਰਨ ਇਹ ਦੱਸਿਆ ਹੈ, ''$2''",
 'currentrevisionlink' => 'ਸਭ ਤੋ ਨਵਾਂ ਰੀਵਿਜਨ',
 'cur' => 'ਮੌਜੂਦਾ',
 'next' => 'ਅੱਗੇ',
-'last' => 'ਪਿੱà¨\9bਲਾ',
+'last' => 'ਪਿੱà¨\9bà©\87',
 'page_first' => 'ਪਹਿਲਾਂ',
 'page_last' => 'ਆਖਰੀ',
 'histlegend' => "ਅੰਤਰ ਵੇਖੋ:
 ਮੁਕਾਬਲਾ ਕਰਨ ਲਈ ਰੀਵਿਜਨਾਂ ਦੇ ਰੇਡੀਓ ਬਟਨਾਂ ਵਿੱਚ ਨਿਸ਼ਾਨ ਲਾਓ ਅਤੇ ਜਾਓ ਜਾਂ ਸਭ ਤੋਂ ਥੱਲੇ ਵਾਲੇ ਬਟਨ ਤੇ ਕਲਿੱਕ ਕਰੋ। <br />
 ਲੈਜਅੰਡ:
 '''({{int:cur}})''' = ਨਵੇਂ ਰੀਵਿਜਨ ਨਾਲੋਂ ਅੰਤਰ, '''({{int:last}})''' = ਪਿੱਛਲੀ ਰੀਵਿਜਨ ਨਾਲੋਂ ਅੰਤਰ, '''({{int:minoreditletter}})''' = ਛੋਟਾ ਬਦਲਾਵ।",
-'history-fieldset-title' => 'à¨\87ਤਿਹਾਸ à¨¨à©\82à©° à¨¬à©\8dਰਾà¨\8aà¨\9c਼ à¨\95ਰà©\8b',
+'history-fieldset-title' => 'ਬਰਾà¨\8aà¨\9c਼ਰ à¨\85ਤà©\80ਤ',
 'history-show-deleted' => 'ਕੇਵਲ ਹਟਾਏ ਗਏ',
 'histfirst' => 'ਸਭ ਤੋਂ ਪਹਿਲਾਂ ਦੇ',
 'histlast' => 'ਸਭ ਤੋਂ ਨਵਾਂ',
-'historysize' => '($1 ਬਾਈਟ)',
+'historysize' => '({{PLURAL:$1|1 ਬਾਈਟ|$1 ਬਾਈਟ}})',
 'historyempty' => '(ਖਾਲੀ)',
 
 # Revision feed
@@ -922,7 +932,7 @@ $3 ਨੇ ਕਾਰਨ ਇਹ ਦੱਸਿਆ ਹੈ, ''$2''",
 ਵਿਕੀ ਦੇ ਨਵੇਂ ਮੁਨਾਸਿਬ ਸਫ਼ਿਆਂ ਵਿਚ [[Special:Search|ਲੱਭਣ]] ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।',
 
 # Revision deletion
-'rev-deleted-comment' => '(à¨\9fਿੱਪਣà©\80 à¨¹à¨\9fਾà¨\88)',
+'rev-deleted-comment' => '(ਸà©\8bਧ à¨¸à¨¾à¨° à¨¹à¨\9fਾà¨\87à¨\86)',
 'rev-deleted-user' => '(ਯੂਜ਼ਰ ਨਾਂ ਹਟਾਇਆ)',
 'rev-deleted-event' => '(ਐਂਟਰੀ ਹਟਾਈ)',
 'rev-deleted-user-contribs' => '[ਮੈਂਬਰ-ਨਾਂ ਜਾਂ IP ਪਤਾ ਹਟਾਇਆ - ਸੋਧ ਯੋਗਦਾਨਾਂ ਵਿਚੋਂ ਓਹਲੇ ਕੀਤੀ]',
@@ -944,23 +954,23 @@ page={{FULLPAGENAMEE}}}} ਮਿਟਾਉਣ ਦੇ ਚਿੱਠੇ] ਵਿਚ 
 'rev-suppressed-diff-view' => "ਇਸ ਫ਼ਰਕ ਵਿੱਚੋਂ ਇੱਕ ਰੀਵਿਜ਼ਨ '''ਜ਼ਬਤ''' ਕੀਤੀ ਜਾ ਚੁੱਕੀ ਹੈ।
 ਤਫ਼ਸੀਲ [{{fullurl:{{#Special:Log}}/delete|
 page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵੇਖੀ ਜਾ ਸਕਦੀ ਹੈ।",
-'rev-delundel' => 'ਵਿà¨\96ਾà¨\93/à¨\9bà©\81ਪਾà¨\93',
-'rev-showdeleted' => 'ਵਖਾਓ',
-'revisiondelete' => 'ਰà©\80ਵਿà¨\9c਼ਨ à¨®à¨¿à¨\9fਾà¨\93/ਮਿà¨\9fਾà¨\88 à¨°à©±à¨¦ à¨\95ਰà©\8b',
+'rev-delundel' => 'ਵà©\87à¨\96ਾà¨\93/à¨\93ਹਲà©\87',
+'rev-showdeleted' => 'ਵà©\87à¨\96ਾà¨\93',
+'revisiondelete' => 'ਰà©\80ਵਿà¨\9c਼ਨ à¨¹à¨\9fਾà¨\93/ਹà¨\9fਾà¨\87à¨\86-ਵਾਪਸ',
 'revdelete-nooldid-title' => 'ਕੋਈ ਟਾਰਗੇਟ ਰੀਵਿਜ਼ਨ ਨਹੀਂ',
 'revdelete-nologtype-title' => 'ਚਿੱਠੇ ਦੀ ਕਿਸਮ ਨਹੀਂ ਦੱਸੀ ਗਈ',
 'revdelete-nologtype-text' => 'ਇਹ ਕਾਰਵਾਈ ਕਰਨ ਲਈ ਤੁਸੀਂ ਚਿੱਠੇ ਦੀ ਕਿਸਮ ਨਹੀਂ ਦੱਸੀ।',
-'revdelete-no-file' => 'ਦੱਸà©\80 à¨\97à¨\88 à¨«à¨¼à¨¾à¨\88ਲ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।',
+'revdelete-no-file' => 'ਦਿੱਤà©\80 à¨\97à¨\88 à¨«à¨¾à¨\87ਲ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।',
 'revdelete-show-file-confirm' => 'ਤੁਹਾਨੂੰ ਯਕੀਨ ਹੈ ਤੁਸੀਂ $2 ਨੂੰ $3 ਦੀ ਫ਼ਾਈਲ "<nowiki>$1</nowiki>" ਦੀ ਮਿਟਾਈ ਗਈ ਰੀਵਿਜ਼ਨ ਵੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?',
 'revdelete-show-file-submit' => 'ਹਾਂ',
 'revdelete-selected' => "'''[[:$1]] {{PLURAL:$2|ਦੀ ਚੁਣੀ ਹੋਈ ਰੀਵਿਜ਼ਨ|ਦੀਆਂ ਚੁਣੀਆਂ ਹੋਈਆਂ ਰੀਵਿਜ਼ਨਾਂ}}:'''",
-'revdelete-legend' => 'ਪਾਬੰਦੀਆਂ ਸੈੱਟ ਕਰੋ:',
+'revdelete-legend' => 'ਵà©\87à¨\96ਣ à¨ªà¨¾à¨¬à©°à¨¦à©\80à¨\86à¨\82 à¨¸à©\88ੱà¨\9f à¨\95ਰà©\8b:',
 'revdelete-hide-text' => 'ਰੀਵਿਜ਼ਨ ਟੈਕਸਟ ਓਹਲੇ',
 'revdelete-hide-image' => 'ਫਾਇਲ ਸਮੱਗਰੀ ਓਹਲੇ',
-'revdelete-hide-name' => 'à¨\90à¨\95ਸ਼ਨ ਅਤੇ ਟਾਰਗੇਟ ਓਹਲੇ',
-'revdelete-hide-comment' => 'ਸà©\8bਧ à¨¸à¨¾à¨° à¨²à©\81à¨\95ਾà¨\93',
+'revdelete-hide-name' => 'à¨\95ਾਰਵਾà¨\88 ਅਤੇ ਟਾਰਗੇਟ ਓਹਲੇ',
+'revdelete-hide-comment' => 'ਸà©\8bਧ à¨¸à¨¾à¨° à¨\93ਹਲà©\87',
 'revdelete-hide-user' => 'ਸੋਧਣ ਵਾਲ਼ੇ ਦਾ ਮੈਂਬਰ-ਨਾਂ/IP ਪਤਾ ਲੁਕਾਓ',
-'revdelete-radio-same' => '(ਨਹà©\80à¨\82 à¨¬à¨¦à¨²à¨£à¨¾)',
+'revdelete-radio-same' => '(ਨਾ à¨¬à¨¦à¨²à©\8b)',
 'revdelete-radio-set' => 'ਹਾਂ',
 'revdelete-radio-unset' => 'ਨਹੀਂ',
 'revdelete-unsuppress' => 'ਮੁੜ ਬਹਾਲ ਕੀਤੀਆਂ ਰੀਵਿਜ਼ਨਾਂ ਤੋਂ ਰੋਕਾਂ ਹਟਾਓ',
@@ -971,7 +981,7 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'revdel-restore' => 'ਦਿੱਖ ਬਦਲੋ',
 'revdel-restore-deleted' => 'ਹਟਾਏ ਗਏ ਰੀਵੀਜਨ',
 'revdel-restore-visible' => 'ਦਿਸਣਯੋਗ ਰੀਵੀਜਨ',
-'pagehist' => 'ਪà©\87à¨\9c à¨¦ਾ ਅਤੀਤ',
+'pagehist' => 'ਸਫ਼ਾ ਅਤੀਤ',
 'deletedhist' => 'ਹਟਾਇਆ ਗਿਆ ਅਤੀਤ',
 'revdelete-hide-current' => 'ਤਾਰੀਖ &2, $1 ਦੀ ਚੀਜ਼ ਲੁਕਾਉਣ ਵਿਚ ਗਲਤੀ: ਇਹ ਮੌਜੂਦਾ ਰੀਵਿਜ਼ਨ ਹੈ।
 ਇਹ ਲੁਕਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ।',
@@ -1008,7 +1018,7 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'lineno' => 'ਲਾਈਨ $1:',
 'compareselectedversions' => 'ਚੁਣੇ ਵਰਜਨਾਂ ਦੀ ਤੁਲਨਾ',
 'showhideselectedversions' => 'ਚੁਣੇ ਰੀਵਿਜ਼ਨ ਵਖਾਓ/ਲੁਕਾਓ',
-'editundo' => 'à¨\89ਧà©\87à©\9cà©\8b',
+'editundo' => 'ਵਾਪਸ',
 'diff-multi' => '({{PLURAL:$2|ਵਰਤੋਂਕਾਰ ਦੀ|$2 ਵਰਤੋਂਕਾਰਾਂ ਦੀਆਂ}} {{PLURAL:$1|ਵਿਚਕਾਰਲੀ ਰੀਵਿਜਨ ਨਹੀਂ ਦਿਖਾਈ ਜਾ ਰਹੀ|ਵਿਚਕਾਰਲੀਆਂ $1 ਰੀਵਿਜਨਾਂ ਨਹੀਂ ਦਿਖਾਈਆਂ ਜਾ ਰਹੀਆਂ}})',
 
 # Search results
@@ -1021,25 +1031,25 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'notitlematches' => 'ਕੋਈ ਪੇਜ ਟਾਇਟਲ ਨਹੀਂ ਮਿਲਦਾ',
 'textmatches' => 'ਪੇਜ ਟੈਕਸਟ ਮਿਲਦਾ',
 'notextmatches' => 'ਕੋਈ ਪੇਜ ਟੈਕਸਟ ਨਹੀਂ ਮਿਲਦਾ',
-'prevn' => 'ਪਿà¨\9bਲੇ {{PLURAL:$1|$1}}',
-'nextn' => 'à¨\85à¨\97ਲੇ {{PLURAL:$1|$1}}',
+'prevn' => 'ਪਿੱà¨\9bੇ {{PLURAL:$1|$1}}',
+'nextn' => 'à¨\85ੱà¨\97ੇ {{PLURAL:$1|$1}}',
 'prevn-title' => 'ਪਿਛਲੇ $1 {{PLURAL:$1|ਨਤੀਜਾ|ਨਤੀਜੇ}}',
 'nextn-title' => 'ਅਗਲੇ $1 {{PLURAL:$1|ਨਤੀਜਾ|ਨਤੀਜੇ}}',
 'shown-title' => 'ਪ੍ਰਤੀ ਪੰਨਾ $1 {{PLURAL:$1|ਨਤੀਜਾ|ਨਤੀਜੇ}} ਵਖਾਓ',
 'viewprevnext' => 'ਵੇਖੋ ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-legend' => 'à¨\96à©\8bà¨\9c à¨\87à¨\96਼ਤਿà¨\86ਰ',
-'searchmenu-exists' => "'''à¨\87ਸ à¨µà¨¿à¨\95à©\80 â\80\99ਤà©\87 \"[[:\$1]]\" à¨¨à¨¾à¨® à¨¦à¨¾ à¨ªà©°à¨¨ਾ ਹੈ।'''",
+'searchmenu-legend' => 'à¨\96à©\8bà¨\9c à¨\9aà©\8bਣਾà¨\82',
+'searchmenu-exists' => "'''à¨\87ਸ à¨µà¨¿à¨\95à©\80 â\80\99ਤà©\87 \"[[:\$1]]\" à¨¨à¨¾à¨® à¨¦à¨¾ à¨¸à¨«ਾ ਹੈ।'''",
 'searchmenu-new' => "'''ਇਸ ਵਿਕੀ ’ਤੇ \"[[:\$1]]\" ਪੰਨਾ ਬਣਾਓ!'''",
 'searchhelp-url' => 'Help:ਸਮੱਗਰੀ',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|ਇਸ ਅਗੇਤਰ ਵਾਲ਼ੇ ਸਫ਼ੇ ਵੇਖੋ]]',
 'searchprofile-articles' => 'ਸਮੱਗਰੀ ਪੰਨੇ',
-'searchprofile-project' => 'ਮਦਦ à¨\85ਤà©\87 à¨ªà¨°à¨¿à¨¯à©\8bà¨\9cਨਾ à¨ªà©°à¨¨ੇ',
+'searchprofile-project' => 'ਮੱਦਦ à¨¤à©\87 à¨ªà¨°à©\8bà¨\9cà©\88à¨\95à¨\9f à¨¸à¨«à¨¼ੇ',
 'searchprofile-images' => 'ਮਲਟੀਮੀਡੀਆ',
 'searchprofile-everything' => 'ਸਭ ਕੁਝ',
-'searchprofile-advanced' => 'à¨\86ਧà©\81ਨਿà¨\95',
-'searchprofile-articles-tooltip' => '$1 ਵਿੱਚ ਖੋਜ',
-'searchprofile-project-tooltip' => '$1 ਵਿੱਚ ਖੋਜ',
-'searchprofile-images-tooltip' => 'ਫ਼ਾà¨\88ਲਾà¨\82 à¨\96à©\8bà¨\9cà©\8b',
+'searchprofile-advanced' => 'ਤà¨\95ਨà©\80à¨\95à©\80',
+'searchprofile-articles-tooltip' => '$1 ਵਿੱਚ ਖੋਜ',
+'searchprofile-project-tooltip' => '$1 ਵਿੱਚ ਖੋਜ',
+'searchprofile-images-tooltip' => 'ਫਾà¨\87ਲ à¨¦à©\80 à¨\96à©\8bà¨\9c',
 'searchprofile-everything-tooltip' => 'ਸਭ ਚੀਜ਼ਾਂ ਖੋਜੋ (ਚਰਚਾ ਪੰਨਿਆਂ ਸਮੇਤ)',
 'searchprofile-advanced-tooltip' => 'ਆਪਣੇ ਬਣਾਏ ਨਾਮ-ਥਾਂਵਾਂ ਵਿੱਚ ਖੋਜੋ',
 'search-result-size' => '$1 ({{PLURAL:$2|1 ਸ਼ਬਦ|$2 ਸ਼ਬਦ}})',
@@ -1074,7 +1084,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 
 # Preferences page
 'preferences' => 'ਮੇਰੀ ਪਸੰਦ',
-'mypreferences' => 'ਪਸੰਦਾਂ',
+'mypreferences' => 'ਪਸੰਦ',
 'prefs-edits' => 'ਸੋਧਾਂ ਦੀ ਗਿਣਤੀ:',
 'prefsnologin' => 'ਲਾਗਇਨ ਨਹੀਂ',
 'prefsnologintext' => 'ਵਰਤੋਂਕਾਰ ਪਸੰਦਾਂ ਸੈੱਟ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ਲਾਗਇਨ]</span> ਕਰਨਾ ਪਵੇਗਾ।',
@@ -1082,11 +1092,13 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'prefs-skin' => 'ਸਕਿਨ',
 'skin-preview' => 'ਝਲਕ',
 'datedefault' => 'ਕੋਈ ਪਸੰਦ ਨਹੀਂ',
+'prefs-beta' => 'ਬੀਟਾ ਫੀਚਰ',
 'prefs-datetime' => 'ਮਿਤੀ ਅਤੇ ਸਮਾਂ',
-'prefs-user-pages' => 'ਮੈਂਬਰ ਸਫ਼ੇ',
+'prefs-labs' => 'ਲੈਬ ਫੀਚਰ',
+'prefs-user-pages' => 'ਵਰਤੋਂਕਾਰ ਪੰਨਾ',
 'prefs-personal' => 'ਯੂਜ਼ਰ ਪਰੋਫਾਇਲ',
 'prefs-rc' => 'ਤਾਜ਼ਾ ਬਦਲਾਅ',
-'prefs-watchlist' => 'ਵਾà¨\9a-ਲਿਸà¨\9f',
+'prefs-watchlist' => 'ਨਿà¨\97ਰਾਨ-ਸà©\82à¨\9aà©\80',
 'prefs-watchlist-days' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਦਿਖਾਉਣ ਲਈ ਦਿਨ:',
 'prefs-watchlist-days-max' => 'ਵੱਧ ਤੋਂ ਵੱਧ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨ}}',
 'prefs-watchlist-edits' => 'ਵਧਾਈ ਹੋਈ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਦਿਖਾਉਣ ਲਈ ਵੱਧ ਤੋਂ ਵੱਧ ਤਬਦੀਲੀਆਂ:',
@@ -1100,12 +1112,14 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'prefs-rendering' => 'ਦਿੱਖ',
 'saveprefs' => 'ਸੰਭਾਲੋ',
 'resetprefs' => 'ਰੀ-ਸੈੱਟ',
+'restoreprefs' => 'ਸਭ ਮੂਲ ਸੈਟਿੰਗ ਮੁੜ-ਸਟੋਰ ਕਰੋ',
 'prefs-editing' => 'ਸੰਪਾਦਨ',
 'prefs-edit-boxsize' => 'ਸੋਧ ਖਿੜਕੀ ਦਾ ਅਕਾਰ',
 'rows' => 'ਕਤਾਰਾਂ:',
 'columns' => 'ਕਾਲਮ:',
 'searchresultshead' => 'ਖੋਜ',
 'resultsperpage' => 'ਪ੍ਰਤੀ ਪੇਜ ਹਿੱਟ:',
+'stub-threshold-disabled' => 'ਬੰਦ ਹੈ',
 'recentchangesdays' => 'ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਵਿਚ ਦਿਖਾਉਣ ਲਈ ਦਿਨ:',
 'recentchangesdays-max' => 'ਵੱਧ ਤੋਂ ਵੱਧ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨ}}',
 'prefs-help-recentchangescount' => 'ਇਸ ਵਿਚ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ, ਸਫ਼ਿਆਂ ਦੇ ਅਤੀਤ ਅਤੇ ਚਿੱਠੇ ਸ਼ਾਮਲ ਹਨ।',
@@ -1126,18 +1140,18 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'timezoneregion-indian' => 'ਹਿੰਦ ਮਹਾਂਸਾਗਰ',
 'timezoneregion-pacific' => 'ਪ੍ਰਸ਼ਾਂਤ ਮਹਾਂਸਾਗਰ',
 'allowemail' => 'ਹੋਰ ਯੂਜ਼ਰਾਂ ਤੋਂ ਈਮੇਲ ਯੋਗ ਕਰੋ',
-'prefs-searchoptions' => 'ਖੋਜ ਦੇ ਇਖ਼ਤਿਆਰ',
+'prefs-searchoptions' => 'ਖੋਜ',
 'prefs-namespaces' => 'ਥਾਂ-ਨਾਮ',
 'defaultns' => 'ਨਹੀਂ ਤਾਂ ਇਹਨਾਂ ਥਾਂ-ਨਾਂਵਾਂ ਵਿਚ ਖੋਜੋ:',
-'default' => 'ਡਿਫਾਲà¨\9f',
+'default' => 'ਮà©\82ਲ',
 'prefs-files' => 'ਫਾਇਲਾਂ',
-'prefs-emailconfirm-label' => 'à¨\88-ਮà©\87ਲ à¨¤à¨¸à¨¦à©\80à¨\95:',
+'prefs-emailconfirm-label' => 'à¨\88-ਮà©\87ਲ à¨ªà©\81ਸ਼à¨\9fà©\80:',
 'prefs-textboxsize' => 'ਸੋਧ ਖਿੜਕੀ ਦਾ ਅਕਾਰ',
 'youremail' => 'ਈ-ਮੇਲ:',
 'username' => '{{GENDER:$1|ਯੂਜ਼ਰਨਾਂ}}:',
 'uid' => '{{GENDER:$1|User}} ਆਈਡੀ:',
 'prefs-memberingroups' => '{{PLURAL:$1|ਗਰੁੱਪ|ਗਰੁੱਪਾਂ}} ਦਾ ਮੈਂਬਰ:',
-'prefs-registration' => 'ਰà¨\9cਿਸà¨\9fà©\8dਰà©\87ਸ਼ਨ à¨¦à¨¾ à¨µà¨\95ਤ:',
+'prefs-registration' => 'ਰà¨\9cਿਸà¨\9fਰà©\87ਸ਼ਨ à¨¸à¨®à¨¾à¨\82:',
 'yourrealname' => 'ਅਸਲੀ ਨਾਮ:',
 'yourlanguage' => 'ਭਾਸ਼ਾ:',
 'yourvariant' => 'ਸਮੱਗਰੀ ਭਾਸ਼ਾ ਰੂਪ:',
@@ -1157,7 +1171,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'prefs-info' => 'ਮੁੱਢਲੀ ਜਾਣਕਾਰੀ',
 'prefs-i18n' => 'ਅੰਤਰਰਾਸ਼ਟਰੀਕਰਨ',
 'prefs-signature' => 'ਦਸਤਖ਼ਤ',
-'prefs-dateformat' => 'ਤਾਰà©\80à¨\96਼ à¨\85ੰਦਾà¨\9c਼',
+'prefs-dateformat' => 'ਮਿਤà©\80 à¨¸à¨¼à©\88ਲà©\80',
 'prefs-advancedediting' => 'ਤਕਨੀਕੀ ਚੋਣਾਂ',
 'prefs-advancedrc' => 'ਤਕਨੀਕੀ ਚੋਣਾਂ',
 'prefs-advancedrendering' => 'ਤਕਨੀਕੀ ਚੋਣਾਂ',
@@ -1188,16 +1202,16 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 
 # Groups
 'group' => 'ਗਰੁੱਪ:',
-'group-user' => 'ਮà©\88à¨\82ਬਰ',
+'group-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ',
 'group-autoconfirmed' => 'ਖ਼ੁਦ-ਤਸਦੀਕਸ਼ੁਦਾ ਮੈਂਬਰ',
 'group-bot' => 'ਬੋਟ',
 'group-sysop' => 'ਪਰਸ਼ਾਸ਼ਕ',
 'group-all' => '(ਸਭ)',
 
-'group-user-member' => '{{GENDER:$1|ਮà©\88à¨\82ਬਰ}}',
+'group-user-member' => '{{GENDER:$1|ਵਰਤà©\8bà¨\82à¨\95ਾਰ}}',
 'group-bot-member' => 'ਬੋਟ',
 
-'grouppage-user' => '{{ns:project}}:ਮà©\88à¨\82ਬਰ',
+'grouppage-user' => '{{ns:project}}:ਵਰਤà©\8bà¨\82à¨\95ਾਰ',
 
 # Rights
 'right-read' => 'ਸਫ਼ੇ ਪੜ੍ਹਨਾ',
@@ -1207,13 +1221,13 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'right-createaccount' => 'ਨਵੇਂ ਖਾਤੇ ਬਣਾਉਣਾ',
 'right-minoredit' => 'ਸੋਧਾਂ ਦੇ ਛੋਟਾ ਹੋਣ ਲਈ ਨਿਸ਼ਾਨ ਲਾਉਣਾ',
 'right-move' => 'ਸਫ਼ੇ ਭੇਜਣਾ',
-'right-movefile' => 'ਫ਼ਾà¨\88ਲਾà¨\82 à¨¦à©\87 à¨¨à¨¾à¨\82 à¨¬à¨¦à¨²à¨£à¨¾',
-'right-upload' => 'ਫ਼ਾà¨\88ਲਾà¨\82 à¨\85ੱਪਲà©\8bਡ à¨\95ਰਨਾ',
+'right-movefile' => 'ਫਾà¨\87ਲਾà¨\82 à¨­à©\87à¨\9cਣà©\80à¨\86à¨\82',
+'right-upload' => 'ਫਾà¨\87ਲਾà¨\82 à¨\85ੱਪਲà©\8bਡ',
 'right-upload_by_url' => 'URL ਤੋਂ ਫਾਇਲਾਂ ਅੱਪਲੋਡ ਕਰੋ',
 'right-autoconfirmed' => 'ਨੀਮ-ਸੁਰੱਖਿਅਤ ਸਫ਼ਿਆਂ ਨੂੰ ਸੋਧਣਾ',
 'right-delete' => 'ਸਫ਼ੇ ਹਟਾਓ',
-'right-bigdelete' => 'ਵੱਡà©\87 à¨\85ਤà©\80ਤਾà¨\82 à¨µà¨¾à¨²à¨¼à©\87 à¨¸à¨«à¨¼à©\87 à¨®à¨¿ਟਾਉਣੇ',
-'right-browsearchive' => 'ਮਿà¨\9fਾà¨\8f à¨\97à¨\8f à¨¸à¨«à¨¼ੇ ਖੋਜਣਾ',
+'right-bigdelete' => 'ਵੱਡà©\87 à¨\87ਤਿਹਾਸ à¨µà¨¾à¨²à©\87 à¨ªà©°à¨¨à©\87 à¨¹ਟਾਉਣੇ',
+'right-browsearchive' => 'ਹà¨\9fਾà¨\8f à¨\97à¨\8f à¨ªà©°à¨¨ੇ ਖੋਜਣਾ',
 'right-undelete' => 'ਸਫ਼ੇ ਨੂੰ ਅਣ-ਮਿਟਾਇਆ ਕਰਨਾ',
 'right-suppressionlog' => 'ਪ੍ਰਾਈਵੇਟ ਚਿੱਠੇ ਵੇਖਣਾ',
 'right-block' => 'ਦੂਜੇ ਮੈਂਬਰਾਂ ਦੇ ਸੋਧ ਕਰਨ ਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ',
@@ -1225,6 +1239,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'right-userrights-interwiki' => 'ਦੂਜੇ ਵਿਕੀਆਂ ਤੇ ਮੈਂਬਰਾਂ ਦੇ ਮੈਂਬਰ ਹੱਕਾਂ ਵਿਚ ਸੋਧ ਕਰਨਾ',
 'right-siteadmin' => 'ਡੈਟਾਬੇਸ ਨੂੰ ਤਾਲਾ ਲਾਉਣਾ ਤੇ ਖੋਲ੍ਹਣਾ',
 'right-sendemail' => 'ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਈ-ਮੇਲ ਭੇਜਣਾ',
+'right-passwordreset' => 'ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਈਮੇਲ ਵੇਖੋ',
 
 # Special:Log/newusers
 'newuserlogpage' => 'ਬਣਾਏ ਖਾਤਿਆਂ ਦਾ ਚਿੱਠਾ',
@@ -1235,61 +1250,76 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'rightslogtext' => 'ਇਹ ਮੈਂਬਰ ਹੱਕਾਂ ਵਿਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਦਾ ਚਿੱਠਾ ਹੈ।',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-read' => 'à¨\87ਹ à¨¸à¨«à¨¼ਾ ਪੜ੍ਹਨ',
+'action-read' => 'à¨\87ਹ à¨ªà©°à¨¨ਾ ਪੜ੍ਹਨ',
 'action-edit' => 'ਇਹ ਪੰਨੇ ਨੂੰ ਸੰਪਾਦਿਤ ਕਰਨ',
-'action-createpage' => 'ਸਫ਼ੇ ਬਣਾਉਣ',
+'action-createpage' => 'ਪੰਨੇ ਬਣਾਉਣ',
 'action-createtalk' => 'ਚਰਚਾ ਸਫ਼ੇ ਬਣਾਉਣ',
-'action-createaccount' => 'ਮੈਂਬਰ ਖਾਤਾ ਬਣਾਉਣ',
-'action-upload' => 'ਇਹ ਫ਼ਾਈਲ ਅੱਪਲੋਡ ਕਰਨ',
-'action-delete' => 'ਇਹ ਸਫ਼ਾ ਮਿਟਾਉਣ',
-'action-deleterevision' => 'ਇਹ ਰੀਵਿਜ਼ਨ ਮਿਟਾਉਣ',
+'action-createaccount' => 'ਵਰਤੋਂਕਾਰ ਖਾਤਾ ਬਣਾਉਣ',
+'action-minoredit' => 'ਇਹ ਸੋਧ ਨੂੰ ਛੋਟੀ ਤੌਰ ਉੱਤੇ ਮੰਨੋ',
+'action-move' => 'ਇਹ ਸਫ਼ਾ ਭੇਜੋ',
+'action-move-subpages' => 'ਇਹ ਸਫ਼ਾ ਤੇ ਇਸ ਦੇ ਅਧੀਨ-ਸਫ਼ਿਆਂ ਨੂੰ ਭੇਜੋ',
+'action-movefile' => 'ਇਹ ਫਾਇਲ ਭੇਜੋ',
+'action-upload' => 'ਇਹ ਫਾਇਲ ਅੱਪਲੋਡ',
+'action-reupload' => 'ਇਹ ਮੌਜੂਦਾ ਫਾਇਲ ਉੱਤੇ ਲਿਖੋ',
+'action-reupload-shared' => 'ਇਹ ਫਾਇਲ ਨੂੰ ਸਾਂਝੀ ਕੀਤੀ ਰਿਪੋਜ਼ਟਰੀ ਉੱਤੇ ਲਿਖੋ',
+'action-upload_by_url' => 'ਇਹ ਫਾਇਲ ਨੂੰ URL ਤੋਂ ਅੱਪਲੋਡ ਕਰੋ',
+'action-writeapi' => 'ਲਿਖਣ API ਵਰਤੋਂ',
+'action-delete' => 'ਇਹ ਪੰਨਾ ਹਟਾਓ',
+'action-deleterevision' => 'ਇਹ ਰੀਵਿਜਨ ਹਟਾਓ',
 'action-deletedhistory' => 'ਇਸ ਸਫ਼ੇ ਦਾ ਮਿਟਾਇਆ ਅਤੀਤ ਵੇਖਣ',
 'action-browsearchive' => 'ਮਿਟਾਏ ਸਫ਼ੇ ਖੋਜਣ',
 'action-undelete' => 'ਇਹ ਸਫ਼ਾ ਅਣ-ਮਿਟਿਆ ਕਰਨ',
+'action-suppressrevision' => 'ਇਹ ਲੁਕਵਾਂ ਰੀਵਿਜ਼ਨ ਜਾਂਚੋ ਅਤੇ ਮੁੜ-ਸਟੋਰ ਕਰੋ',
+'action-suppressionlog' => 'ਇਹ ਪ੍ਰਾਈਵੇਟ ਲਾਗ ਵੇਖੋ',
 'action-block' => 'ਇਸ ਮੈਂਬਰ ਦੇ ਸੋਧ ਕਰਨ ਤੇ ਪਾਬੰਦੀ ਲਾਉਣ',
 'action-protect' => 'ਇਸ ਸਫ਼ੇ ਦੀ ਸੁਰੱਖਿਆ ਬਦਲਣ',
+'action-import' => 'ਹੋਰ ਵਿਕਿ ਤੋਂ ਇਹ ਸਫ਼ਾ ਇੰਪੋਰਟ ਕਰੋ',
+'action-importupload' => 'ਫਾਇਲ ਅੱਪਲੋਡ ਤੋਂ ਇਹ ਸਫ਼ਾ ਇੰਪੋਰਟ ਕਰੋ',
 'action-unwatchedpages' => 'ਨਜ਼ਰ ਨਾ ਰੱਖੇ ਜਾ ਰਹੇ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ ਵੇਖਣ',
 'action-mergehistory' => 'ਇਸ ਸਫ਼ੇ ਦੇ ਅਤੀਤ ਨੂੰ ਰਲ਼ਾਉਣ',
 'action-userrights' => 'ਸਾਰੇ ਮੈਂਬਰ ਹੱਕ ਸੋਧਣ',
 'action-userrights-interwiki' => 'ਦੂਜੇ ਵਿਕੀਆਂ ਤੇ ਮੈਂਬਰਾਂ ਦੇ ਮੈਂਬਰ ਹੱਕ ਸੋਧਣ',
 'action-siteadmin' => 'ਡੈਟਾਬੇਸ ਨੂੰ ਤਾਲਾ ਲਾਉਣ ਜਾਂ ਖੋਲ੍ਹਣ',
-'action-sendemail' => 'à¨\88-ਮà©\87ਲਾà¨\82 à¨­à©\87à¨\9cਣ',
+'action-sendemail' => 'à¨\88-ਮà©\87ਲਾà¨\82 à¨­à©\87à¨\9cà©\8b',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|ਬਦਲਾਵ}}',
-'recentchanges' => 'ਹਾਲ â\80\99à¨\9a à¨¹à©\8bà¨\8f à¨¬à¨¦à¨²à¨¾à¨µ',
+'nchanges' => '$1 {{PLURAL:$1|ਬਦਲਾà¨\85}}',
+'recentchanges' => 'ਹਾਲ â\80\99à¨\9a à¨¹à©\8bà¨\8f à¨¬à¨¦à¨²à¨¾à¨\85',
 'recentchanges-legend' => 'ਹਾਲ ਦੇ ਪਰਿਵਰਤਨ ਸਬੰਧੀ ਵਿਕਲਪ',
 'recentchanges-summary' => 'ਇਸ ਵਿਕੀ ’ਤੇ ਹੋਈਆਂ ਸਭ ਤੋਂ ਨਵੀਆਂ ਤਬਦੀਲੀਆਂ ਇਸ ਸਫ਼ੇ ’ਤੇ ਵੇਖੋ।',
 'recentchanges-feed-description' => 'ਇਸ ਵਿਕੀ ’ਤੇ ਹਾਲ ‘ਚ ਹੋਏ ਬਦਲਾਵ ਇਸ ਫ਼ੀਡ ’ਚ ਵੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।',
-'recentchanges-label-newpage' => 'à¨\87ਹ à¨¸à©°à¨ªà¨¾à¨¦à¨¨ à¨¨à©\87 à¨¨à¨µà¨¾à¨\82 à¨ªà©°à¨¨à¨¾ à¨¬à¨£à¨¾à¨\87à¨\86 à¨¹à©\88',
+'recentchanges-label-newpage' => 'à¨\87ਹ à¨¸à©°à¨ªà¨¾à¨¦à¨¨ à¨¨à¨¾à¨² à¨¨à¨µà¨¾à¨\82 à¨ªà©°à¨¨à¨¾ à¨¬à¨£à¨¾à¨\87à¨\86 à¨\97ਿà¨\86',
 'recentchanges-label-minor' => 'ਇਹ ਇੱਕ ਛੋਟਾ ਸੰਪਾਦਨ ਹੈ',
-'recentchanges-label-bot' => 'à¨\87ਹ à¨¸à©°à¨ªà¨¾à¨¦à¨¨ à¨¬à©\8bà¨\9f à¨µà¨²à©\8bà¨\82 à¨\95à©\80ਤà©\80 à¨\97à¨\88 à¨¹à©\88',
+'recentchanges-label-bot' => 'à¨\87ਹ à¨¸à©°à¨ªà¨¾à¨¦à¨¨ à¨\87ੱà¨\95 à¨¬à©\8bà¨\9fਾ à¨¦à©\81à¨\86ਰਾ à¨\95à©\80ਤਾ à¨\97ਿà¨\86 à¨¸à©\80',
 'recentchanges-label-unpatrolled' => 'ਇਹ ਫੇਰ-ਬਦਲ ਹਾਲੇ ਵੇਖਿਆ ਨਹੀਂ ਗਿਆ',
 'rcnote' => "$4, $5 ਤੱਕ ਆਖਰੀ {{PLURAL:$2|ਦਿਨ|'''$2''' ਦਿਨਾਂ}} ਵਿੱਚ {{PLURAL:$1|'''1''' ਬਦਲੀ ਹੋਈ ਹੈ।|'''$1''' ਬਦਲੀਆਂ ਹੋਈਆਂ ਹਨ।}}",
 'rcnotefrom' => "'''$2''' ਤੱਕ ('''$1''' ਤੱਕ ਦਿੱਸਦੇ) ਬਦਲਾਵ ਹੇਠ ਦਿੱਤੀਆਂ ਹਨ।",
-'rclistfrom' => '$1 à¨¤à©\8bà¨\82 à¨¸à¨¼à©\81ਰà©\82 à¨\95ਰà¨\95à©\87 à¨¨à¨µà©\87à¨\82 à¨¬à¨¦à¨²à¨¾à¨µ ਵੇਖਾਓ',
-'rcshowhideminor' => '$1 à¨\9bà©\8bà¨\9fà©\87 à¨¬à¨¦à¨²à¨¾à¨µ',
+'rclistfrom' => '$1 à¨¤à©\8bà¨\82 à¨¸à¨¼à©\81ਰà©\82 à¨\95ਰà¨\95à©\87 à¨¨à¨µà©\87à¨\82 à¨¬à¨¦à¨²à¨¾à¨\85 ਵੇਖਾਓ',
+'rcshowhideminor' => '$1 à¨\9bà©\8bà¨\9fà©\87 à¨¬à¨¦à¨²à¨¾à¨\85',
 'rcshowhidebots' => '$1 ਬੋਟ',
 'rcshowhideliu' => '$1 ਲਾਗਇਨ ਹੋਏ ਵਰਤੋਂਕਾਰਾਂ',
-'rcshowhideanons' => '$1 à¨\97à©\81ਮਨਾਮ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ',
+'rcshowhideanons' => '$1 à¨\86à¨\88॰ਪà©\80 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾà¨\82 à¨¦à©\87 à¨¬à¨¦à¨²à¨¾à¨\85',
 'rcshowhidepatr' => 'ਜਾਂਚੇ ਹੋਏ ਸੰਪਾਦਨ $1',
-'rcshowhidemine' => 'ਮà©\87ਰà©\87 à¨¬à¨¦à¨²à¨¾à¨µ $1',
-'rclinks' => 'ਪਿà¨\9bਲà©\87 $2 à¨¦à¨¿à¨¨à¨¾à¨\82 à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\8f $1 à¨¬à¨¦à¨²à¨¾à¨µ ਵੇਖਾਓ<br /> $3',
+'rcshowhidemine' => 'ਮà©\87ਰà©\87 à¨¬à¨¦à¨²à¨¾à¨\85 $1',
+'rclinks' => 'ਪਿੱà¨\9bਲà©\87 $2 à¨¦à¨¿à¨¨à¨¾à¨\82 à¨µà¨¿à©±à¨\9a à¨¹à©\8bà¨\8f $1 à¨¬à¨¦à¨²à¨¾à¨\85 ਵੇਖਾਓ<br /> $3',
 'diff' => 'ਅੰਤਰ',
 'hist' => 'ਇਤਿਹਾਸ',
 'hide' => 'ਛੁਪਾਓ',
-'show' => 'ਵਿਖਾਓ',
+'show' => 'ਵà©\87ਖਾਓ',
 'minoreditletter' => 'ਛੋ',
 'newpageletter' => 'ਨ',
 'boteditletter' => 'ਬੋ',
+'number_of_watching_users_pageview' => '[$1 ਵੇਖ ਰਹੇ ਹਨ {{PLURAL:$1|ਯੂਜ਼ਰ}}]',
 'rc_categories_any' => 'ਕੋਈ ਵੀ',
+'newsectionsummary' => '/* $1 */ ਨਵਾਂ ਭਾਗ',
 'rc-enhanced-expand' => 'ਵੇਰਵਾ ਵੇਖਾਓ (ਜਾਵਾਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
 'rc-enhanced-hide' => 'ਵੇਰਵਾ ਛੁਪਾਓ',
+'rc-old-title' => 'ਅਸਲ ਵਿੱਚ "$1" ਵਜੋਂ ਬਣਾਇਆ',
 
 # Recent changes linked
-'recentchangeslinked' => 'ਸਬੰਧਤ à¨¬à¨¦à¨²à¨¾à¨µ',
+'recentchangeslinked' => 'ਸਬੰਧਤ à¨¬à¨¦à¨²à¨¾à¨\85',
 'recentchangeslinked-feed' => 'ਸਬੰਧਤ ਤਬਦੀਲੀਆਂ',
-'recentchangeslinked-toolbox' => 'ਪੰਨà©\87 à¨¨à¨¾à¨² à¨¸à©°à¨¬à©°à¨§à¨¿à¨¤ à¨¬à¨¦à¨²à¨¾à¨µ',
+'recentchangeslinked-toolbox' => 'ਸਬੰਧਤ à¨¬à¨¦à¨²à¨¾à¨\85',
 'recentchangeslinked-title' => '"$1" ਨਾਲ ਸਬੰਧਿਤ ਬਦਲਾਵ',
 'recentchangeslinked-noresult' => 'ਜੁੜੇ ਪੰਨਿਆਂ ’ਤੇ, ਦਿੱਤੇ ਸਮੇਂ ’ਚ ਕੋਈ ਬਦਲਾਵ ਨਹੀਂ ਹੋਈ।',
 'recentchangeslinked-summary' => 'ਇਹ ਸੂਚੀ ਇੱਕ ਵਿਸ਼ੇਸ਼ ਪੰਨੇ ਨਾਲ ਸਬੰਧਿਤ ਪੰਨਿਆਂ ਜਾਂ ਕਿਸੇ ਵਿਸ਼ੇਸ਼ ਸ਼੍ਰੇਣੀ ਦੇ ਮੈਂਬਰਾਂ ਦੇ ਹਾਲ ‘ਚ ਹੋਏ ਬਦਲਾਵਾਂ ਨੂੰ ਦਰਸਾਂਉਦੀ ਹੈ। [[Special:Watchlist|ਤੁਹਾਡੀ ਧਿਆਨਸੂਚੀ]] ਵਿੱਚ ਮੌਜੂਦ ਪੰਨੇ ਮੋਟੇ ਅੱਖਰਾਂ ਵਿੱਚ ਦਿਖਾਈ ਦੇਣਗੇ।',
@@ -1297,7 +1327,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'recentchangeslinked-to' => 'ਇਸਦੇ ਬਦਲੇ ਇਸ ਪੰਨੇ ਨਾਲ ਜੁੜੇ ਪੰਨਿਆਂ ਵਿੱਚ ਹੋਏ ਬਦਲਾਅ ਵਿਖਾਓ',
 
 # Upload
-'upload' => 'ਫ਼ਾà¨\88ਲ à¨\85ੱਪਲੋਡ ਕਰੋ',
+'upload' => 'ਫਾà¨\88ਲ à¨\85ਪਲੋਡ ਕਰੋ',
 'uploadbtn' => 'ਫਾਇਲ ਅੱਪਲੋਡ ਕਰੋ',
 'reuploaddesc' => 'ਅੱਪਲੋਡ ਫਾਰਮ ਉੱਤੇ ਜਾਓ।',
 'uploadnologin' => 'ਲਾਗਇਨ ਨਹੀਂ ਹੋ',
@@ -1307,10 +1337,11 @@ to upload files.',
 'upload-recreate-warning' => "'''ਖ਼ਬਰਦਾਰ: ਇਸ ਨਾਮ ਦੀ ਫ਼ਾਈਲ ਮਿਟਾਈ ਜਾਂ ਹੋਰ ਨਾਮ ਤੇ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।'''
 ਮਿਟਾਉਣ ਅਤੇ ਭੇਜੇ ਜਾਣ ਦਾ ਚਿੱਠਾ ਸਹੂਲਤ ਲਈ ਇੱਥੇ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
 'uploadlog' => 'ਅੱਪਲੋਡ ਲਾਗ',
-'uploadlogpage' => 'à¨\85ੱਪਲà©\8bਡਾà¨\82 à¨¦à¨¾ à¨\9aਿੱਠਾ',
+'uploadlogpage' => 'ਅਪਲੋਡਾਂ ਦਾ ਚਿੱਠਾ',
 'filename' => 'ਫਾਇਲ ਨਾਂ',
 'filedesc' => 'ਸਾਰ',
 'fileuploadsummary' => 'ਸੰਖੇਪ:',
+'filereuploadsummary' => 'ਫਾਇਲ ਬਦਲਾਅ',
 'filestatus' => 'ਕਾਪੀਰਾਈਟ ਹਾਲਤ:',
 'filesource' => 'ਸੋਰਸ:',
 'uploadedfiles' => 'ਅੱਪਲੋਡ ਕੀਤੀਆਂ ਫਾਇਲਾਂ',
@@ -1319,9 +1350,15 @@ to upload files.',
 'minlength1' => 'ਫਾਇਲ ਨਾਂ ਵਿੱਚ ਘੱਟੋ-ਘੱਟ ਇੱਕ ਅੱਖਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।',
 'badfilename' => 'ਫਾਇਲ ਨਾਂ "$1" ਬਦਲਿਆ ਗਿਆ ਹੈ।',
 'filetype-missing' => 'ਫਾਇਲ ਦੀ ਕੋਈ ਐਕਸ਼ਟੇਸ਼ਨ ਨਹੀਂ ਹੈ (ਜਿਵੇਂ ".jpg").',
-'filename-tooshort' => 'ਫ਼ਾਈਲ ਬਹੁਤ ਛੋਟੀ ਹੈ।',
-'filetype-banned' => 'ਇਸ ਕਿਸਮ ਦੀ ਫ਼ਾਈਲ ਦੀ ਮਨਾਹੀ ਹੈ।',
-'illegal-filename' => 'ਇਸ ਫ਼ਾਈਲ-ਨਾਮ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।',
+'empty-file' => 'ਤੁਹਾਡੇ ਵਲੋਂ ਦਿੱਤੀ ਫਾਇਲ ਖਾਲੀ ਸੀ।',
+'file-too-large' => 'ਤੁਹਾਡੇ ਵਲੋਂ ਦਿੱਤੀ ਫਾਇਲ ਬਹੁਤ ਵੱਡੀ ਸੀ।',
+'filename-tooshort' => 'ਫਾਈਲ ਬਹੁਤ ਛੋਟੀ ਹੈ।',
+'filetype-banned' => 'ਇਸ ਕਿਸਮ ਦੀ ਫਾਈਲ ਦੀ ਮਨਾਹੀ ਹੈ।',
+'verification-error' => 'ਇਹ ਫਾਇਲ ਫਾਇਲ ਜਾਂਚ ਪੂਰੀ ਨਹੀਂ ਕਰਦੀ ਹੈ।',
+'illegal-filename' => 'ਇਸ ਫਾਈਲ-ਨਾਮ ਦੀ ਅਨੁਮਤੀ ਨਹੀਂ ਹੈ।',
+'unknown-error' => 'ਅਣਜਾਣ ਗਲਤੀ ਆਈ ਹੈ।',
+'tmp-create-error' => 'ਆਰਜ਼ੀ ਫਾਇਲ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ ਹੈ।',
+'tmp-write-error' => 'ਆਰਜ਼ੀ ਫਾਇਲ ਲਿਖਣ ਲਈ ਗਲਤੀ ਹੈ।',
 'fileexists' => 'ਇਹ ਫਾਇਲ ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ। ਜੇ ਤੁਸੀਂ ਇਹ ਬਦਲਣ ਬਾਰੇ ਦ੍ਰਿੜ ਨਹੀਂ ਹੋ ਤਾਂ  <strong>[[:$1]]</strong> ਵੇਖੋ ਜੀ। [[$1|thumb]]',
 'fileexists-extension' => 'ਇਸ ਨਾਂ ਨਾਲ ਰਲਦੀ ਫਾਇਲ ਮੌਜੂਦ ਹੈ: [[$2|thumb]]
 * ਅੱਪਲੋਡ ਕੀਤੀ ਜਾਂਦੀ ਫਾਇਲ ਦਾ ਨਾਂ: <strong>[[:$1]]</strong>
@@ -1338,8 +1375,8 @@ to upload files.',
 'sourcefilename' => 'ਸੋਰਸ ਫਾਇਲ ਨਾਂ:',
 'sourceurl' => 'ਸਰੋਤ URL:',
 'destfilename' => 'ਟਿਕਾਣਾ ਫਾਇਲ-ਨਾਂ:',
-'upload-maxfilesize' => 'ਫ਼ਾà¨\88ਲ à¨¦à¨¾ à¨µà©±à¨§ à¨¤à©\8bà¨\82 à¨µà©±à¨§ à¨\85à¨\95ਾਰ: $1',
-'upload-description' => 'ਫ਼ਾà¨\88ਲ à¨¦à¨¾ ਵੇਰਵਾ',
+'upload-maxfilesize' => 'ਫਾਈਲ ਦਾ ਵੱਧ ਤੋਂ ਵੱਧ ਅਕਾਰ: $1',
+'upload-description' => 'ਫਾà¨\88ਲ ਵੇਰਵਾ',
 'upload-options' => 'ਅੱਪਲੋਡ ਚੋਣਾਂ',
 'watchthisupload' => 'ਇਸ ਫ਼ਾਈਲ ’ਤੇ ਨਜ਼ਰ ਰੱਖੋ',
 'upload-success-subj' => 'ਠੀਕ ਤਰ੍ਹਾਂ ਅੱਪਲੋਡ',
@@ -1358,7 +1395,7 @@ to upload files.',
 'backend-fail-store' => 'ਫ਼ਾਈਲ "$1", "$2" ਵਿਚ ਸਾਂਭੀ ਨਹੀਂ ਜਾ ਸਕੀ।',
 'backend-fail-copy' => 'ਫ਼ਾਈਲ "$1", "$2" ਵਿਚ ਨਕਲ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ।',
 'backend-fail-move' => 'ਫ਼ਾਈਲ "$1", "$2" ਤੇ ਭੇਜੀ ਨਹੀਂ ਜਾ ਸਕੀ।',
-'backend-fail-opentemp' => 'à¨\86ਰà¨\9c਼à©\80 à¨«à¨¼ਾਈਲ ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕੀ।',
+'backend-fail-opentemp' => 'à¨\85ਸਥਾà¨\88 à¨«ਾਈਲ ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕੀ।',
 
 # Special:UploadStash
 'uploadstash-refresh' => 'ਫ਼ਾਈਲਾਂ ਦੀ ਲਿਸਟ ਨੂੰ ਤਾਜ਼ਾ ਕਰੋ',
@@ -1372,8 +1409,8 @@ to upload files.',
 ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਦੁਬਾਰਾ ਜਾਂਚ ਕਰੋ ਕਿ URL ਸਹੀ ਹੈ ਅਤੇ ਸਾਈਟ ਉਪਲੱਬਧ ਹੈ।',
 'upload-curl-error28' => 'ਅੱਪਲੋਡ ਟਾਈਮ-ਆਉਟ',
 
-'license' => 'ਲਾਈਸੈਂਸਿੰਗ:',
-'license-header' => 'ਲਸੰਸ',
+'license' => 'ਲਾਈਸੈਂਸ:',
+'license-header' => 'ਲਾà¨\88ਸà©\88à¨\82ਸ',
 'nolicense' => 'ਕੁਝ ਵੀ ਚੁਣਿਆ',
 'license-nopreview' => '(ਝਲਕ ਉਪਲੱਬਧ ਨਹੀਂ)',
 'upload_source_file' => ' (ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਉੱਤੇ ਇੱਕ ਫਾਇਲ)',
@@ -1391,14 +1428,14 @@ to upload files.',
 'listfiles_count' => 'ਵਰਜਨ',
 
 # File description page
-'file-anchor-link' => 'ਫ਼ਾà¨\88ਲ',
-'filehist' => 'ਫ਼ਾà¨\88ਲ à¨¦à¨¾ à¨\87ਤਿਹਾਸ',
+'file-anchor-link' => 'ਫਾਈਲ',
+'filehist' => 'ਫਾਈਲ ਦਾ ਇਤਿਹਾਸ',
 'filehist-help' => 'ਤਾਰੀਖ/ਸਮੇਂ ’ਤੇ ਕਲਿੱਕ ਕਰੋ ਤਾਂ ਉਸ ਸਮੇਂ ਦੀ ਫਾਈਲ ਪੇਸ਼ ਹੋ ਜਾਵੇਗੀ।',
 'filehist-deleteall' => 'ਸਭ ਹਟਾਓ',
 'filehist-deleteone' => 'ਇਹ ਹਟਾਓ',
 'filehist-revert' => 'ਉਲਟਾਓ',
 'filehist-current' => 'ਮੌਜੂਦਾ',
-'filehist-datetime' => 'ਤਾਰà©\80à¨\96/ਸਮà©\87ਂ',
+'filehist-datetime' => 'ਮਿਤà©\80/ਸਮਾਂ',
 'filehist-thumb' => 'ਨਮੂਨਾ',
 'filehist-thumbtext' => '$1 ਦੇ ਸਮੇਂ ਦੇ ਸੰਸਕਰਨ ਦਾ ਅੰਗੂਠਾਕਾਰ ਪ੍ਰਤੀਰੂਪ',
 'filehist-nothumb' => 'ਕੋਈ ਨਮੂਨਾ-ਤਸਵੀਰ ਨਹੀਂ',
@@ -1406,8 +1443,8 @@ to upload files.',
 'filehist-dimensions' => 'ਨਾਪ',
 'filehist-filesize' => 'ਫਾਇਲ ਆਕਾਰ',
 'filehist-comment' => 'ਟਿੱਪਣੀ',
-'filehist-missing' => 'ਫ਼ਾà¨\88ਲ à¨\97à©\81ੰਮ',
-'imagelinks' => 'ਫ਼ਾà¨\88ਲ à¨¦à©\80 ਵਰਤੋਂ',
+'filehist-missing' => 'ਫਾਈਲ ਗੁੰਮ',
+'imagelinks' => 'ਫਾà¨\88ਲ ਵਰਤੋਂ',
 'linkstoimage' => 'ਇਹ {{PLURAL:$1|ਪੰਨੇ ਦੇ ਲਿੰਕ|$1 ਪੰਨੇ}} ਇਸ ਫ਼ਾਈਲ ਨਾਲ ਜੋੜਦੇ ਹਨੇ:',
 'nolinkstoimage' => 'ਕੋਈ ਵੀ ਪੰਨਾ ਇਸ ਫ਼ਾਈਲ ਨਾਲ ਨਹੀਂ ਜੋੜਦਾ।',
 'morelinkstoimage' => 'ਇਸ ਫ਼ਾਈਲ ਨਾਲ਼ ਜੋੜਦੇ [[Special:WhatLinksHere/$1|ਹੋਰ ਲਿੰਕ]] ਵੇਖੋ।',
@@ -1427,7 +1464,7 @@ to upload files.',
 # File reversion
 'filerevert' => '$1 ਰੀਵਰਟ',
 'filerevert-legend' => 'ਫਾਇਲ ਰੀਵਰਟ',
-'filerevert-comment' => 'à¨\9fਿੱਪਣà©\80:',
+'filerevert-comment' => 'à¨\95ਾਰਨ:',
 'filerevert-submit' => 'ਰੀਵਰਟ',
 
 # File deletion
@@ -1473,15 +1510,16 @@ to upload files.',
 'statistics-header-edits' => 'ਸੋਧ ਅੰਕੜੇ',
 'statistics-header-views' => 'ਵੇਖਣ ਅੰਕੜੇ',
 'statistics-header-users' => 'ਯੂਜ਼ਰ ਅੰਕੜੇ',
-'statistics-header-hooks' => 'ਹੋਰ ਆਂਕੜੇ',
+'statistics-header-hooks' => 'ਹੋਰ ਅੰਕੜੇ',
+'statistics-articles' => 'ਸਮੱਗਰੀ ਸਫ਼ੇ',
 'statistics-pages' => 'ਸਫ਼ੇ',
 'statistics-pages-desc' => 'ਇਸ ਵਿਕੀ ਦੇ ਸਾਰੇ ਸਫ਼ੇ, ਗੱਲ-ਬਾਤ ਸਫ਼ਿਆਂ, ਰੀਡਾਇਰੈਕਟਾਂ ਇਤਿਆਦਿ ਨੂੰ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋਏ',
-'statistics-files' => 'à¨\85ੱਪਲà©\8bਡ à¨¹à©\8bà¨\88à¨\86à¨\82 à¨«à¨¼ਾਈਲਾਂ',
+'statistics-files' => 'à¨\85ਪਲà©\8bਡ à¨\95à©\80ਤà©\80à¨\86à¨\82 à¨\97à¨\88à¨\86à¨\82 à¨«ਾਈਲਾਂ',
 'statistics-edits-average' => 'ਪ੍ਰਤੀ ਸਫ਼ਾ ਔਸਤਨ ਸੋਧਾਂ',
-'statistics-users' => 'ਰà¨\9cਿਸà¨\9fਰ à¨¹à©\8bà¨\8f [[Special:ListUsers|ਮà©\88à¨\82ਬਰ]]',
-'statistics-users-active' => 'à¨\9aà©\81ਸਤ à¨®à©\88à¨\82ਬਰ',
+'statistics-users' => 'ਪੰà¨\9cà©\80à¨\95ਰਿਤ [[Special:ListUsers|ਵਰਤà©\8bà¨\82à¨\95ਾਰਾà¨\82]]',
+'statistics-users-active' => 'ਸਰà¨\97ਰਮ à¨¯à©\82à¨\9c਼ਰ',
 'statistics-users-active-desc' => 'ਮੈਂਬਰ, ਜਿੰਨ੍ਹਾ ਨੇ ਆਖ਼ਰੀ {{PLURAL:$1|ਦਿਨ|$1 ਦਿਨਾਂ}} ਵਿਚ ਕੋਈ ਕੰਮ ਕੀਤਾ ਹੈ।',
-'statistics-mostpopular' => 'ਸਭ à¨¤à©\8bà¨\82 à¨µà©±à¨§ à¨µà©\87à¨\96à©\87 à¨ªà©\87à¨\9c',
+'statistics-mostpopular' => 'ਸਭ à¨¤à©\8bà¨\82 à¨µà©±à¨§ à¨µà©\87à¨\96à©\87 à¨¸à¨«à¨¼à©\87',
 
 'disambiguationspage' => 'Template:ਗੁੰਝਲ ਖੋਲ੍ਹ',
 
@@ -1496,7 +1534,7 @@ to upload files.',
 'withoutinterwiki' => 'ਬਿਨਾਂ ਬੋਲੀ ਲਿੰਕਾਂ ਦੇ ਸਫ਼ੇ',
 'withoutinterwiki-summary' => 'ਇਹ ਸਫ਼ੇ ਹੋਰ ਬੋਲੀਆਂ ਵਾਲ਼ੇ ਵਰਜਨਾਂ ਨਾਲ਼ ਨਹੀਂ ਜੁੜਦੇ।',
 'withoutinterwiki-legend' => 'ਅਗੇਤਰ',
-'withoutinterwiki-submit' => 'ਵਖਾਓ',
+'withoutinterwiki-submit' => 'ਵà©\87à¨\96ਾà¨\93',
 
 'fewestrevisions' => 'ਸਭ ਤੋਂ ਘੱਟ ਰੀਵਿਜ਼ਨਾਂ ਵਾਲ਼ੇ ਸਫ਼ੇ',
 
@@ -1506,7 +1544,7 @@ to upload files.',
 'nlinks' => '$1 {{PLURAL:$1|ਲਿੰਕ|ਲਿੰਕ}}',
 'nmembers' => '$1 {{PLURAL:$1|ਮੈਂਬਰ|ਮੈਂਬਰਾਂ}}',
 'nrevisions' => '$1 {{PLURAL:$1|ਰੀਵਿਜ਼ਨ|ਰੀਵਿਜ਼ਨਾਂ}}',
-'nviews' => '$1 {{PLURAL:$1|ਨà¨\9c਼ਾਰਾ|ਨà¨\9c਼ਾਰà©\87}}',
+'nviews' => '$1 {{PLURAL:$1|à¨\9dਲà¨\95|à¨\9dਲà¨\95}}',
 'nimagelinks' => '$1 {{PLURAL:$1|ਸਫ਼ੇ|ਸਫ਼ਿਆਂ}} ’ਤੇ ਵਰਤਿਆ ਹੋਇਆ',
 'ntransclusions' => '$1 {{PLURAL:$1|ਸਫ਼ੇ|ਸਫ਼ਿਆਂ}} ’ਤੇ ਵਰਤਿਆ ਹੋਇਆ',
 'specialpage-empty' => 'ਇਸ ਰਿਪੋਟ ਦਾ ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ ਹੈ।',
@@ -1517,20 +1555,20 @@ to upload files.',
 'uncategorizedtemplates' => 'ਬਗ਼ੈਰ ਕੈਟੇਗਰੀਆਂ ਵਾਲ਼ੇ ਸਾਂਚੇ',
 'unusedcategories' => 'ਅਣਵਰਤੀਆਂ ਕੈਟਾਗਰੀਆਂ',
 'unusedimages' => 'ਅਣਵਰਤੀਆਂ ਫਾਇਲਾਂ',
-'popularpages' => 'ਪਾਪà©\82ਲਰ à¨ªà©\87à¨\9c',
+'popularpages' => 'ਹਰਮਨਪਿà¨\86ਰà©\87 à¨¸à¨«à¨¼à©\87',
 'wantedcategories' => 'ਚਾਹੀਦੀਆਂ ਕੈਟੇਗਰੀਆਂ',
 'wantedpages' => 'ਚਾਹੀਦੇ ਸਫ਼ੇ',
-'wantedfiles' => 'à¨\9aਾਹà©\80ਦà©\80à¨\86à¨\82 à¨«à¨¼à¨¾à¨\88ਲਾਂ',
-'wantedtemplates' => 'à¨\9aਾਹà©\80ਦà©\87 à¨¸à¨¾à¨\82à¨\9aà©\87',
+'wantedfiles' => 'à¨\9aਾਹà©\80ਦà©\80à¨\86à¨\82 à¨«à¨¾à¨\87ਲਾਂ',
+'wantedtemplates' => 'à¨\9aਾਹà©\80ਦà©\87 à¨\9fà©\88ਪਲà©\87à¨\9f',
 'mostcategories' => 'ਸਭ ਤੋਂ ਵੱਧ ਕੈਟੇਗਰੀਆਂ ਵਾਲ਼ੇ ਸਫ਼ੇ',
 'prefixindex' => 'ਇਸ ਅਗੇਤਰ ਵਾਲੇ ਸਾਰੇ ਪੰਨੇ',
-'shortpages' => 'à¨\9bà©\8bà¨\9fà©\87 à¨ªà©\87à¨\9c',
+'shortpages' => 'à¨\9bà©\8bà¨\9fà©\87 à¨¸à¨«à¨¼à©\87',
 'listusers' => 'ਯੂਜ਼ਰ ਲਿਸਟ',
 'usercreated' => '$1 ਨੂੰ $2 ’ਤੇ {{GENDER:$3|ਬਣਾਇਆ}}',
-'newpages' => 'ਨਵà©\87à¨\82 à¨ªà©°à¨¨ੇ',
-'newpages-username' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ-ਨਾਂ:',
+'newpages' => 'ਨਵà©\87à¨\82 à¨¸à¨«à¨¼ੇ',
+'newpages-username' => 'ਯà©\82à¨\9c਼ਰ-ਨਾਂ:',
 'ancientpages' => 'ਸਭ ਤੋਂ ਪੁਰਾਣੇ ਪੇਜ',
-'move' => 'ਸਥਾਨਾà¨\82ਤਰਣ',
+'move' => 'ਸਥਾਨਾà¨\82ਤਰਨ',
 'movethispage' => 'ਇਹ ਪੇਜ ਭੇਜੋ',
 'unusedcategoriestext' => 'ਇਹ ਕੈਟੇਗਰੀ ਸਫ਼ੇ ਮੌਜੂਦ ਹਨ ਹਾਲਾਂਕਿ ਕਿਸੇ ਵੀ ਸਫ਼ੇ ਜਾਂ ਕੈਟੇਗਰੀ ਨੇ ਇਹਨਾਂ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕੀਤੀ।',
 'notargettitle' => 'ਟਾਰਗੇਟ ਨਹੀਂ',
@@ -1553,13 +1591,13 @@ to upload files.',
 'showhideselectedlogentries' => 'ਚਿੱਠੇ ਦੇ ਚੁਣੇ ਹੋਏ ਦਾਖ਼ਲੇ ਵਖਾਓ/ਲੁਕਾਓ',
 
 # Special:AllPages
-'allpages' => 'ਸਭ à¨ªà©°à¨¨ੇ',
+'allpages' => 'ਸਭ à¨¸à¨«à¨¼ੇ',
 'alphaindexline' => '$1 ਤੋਂ $2',
-'nextpage' => 'à¨\85ੱà¨\97à©\87 à¨ªà©\87à¨\9c ($1)',
-'prevpage' => 'ਪਿੱà¨\9bà©\87 à¨ªà©\87à¨\9c ($1)',
+'nextpage' => 'à¨\85ੱà¨\97à©\87 à¨¸à¨«à¨¼à¨¾ ($1)',
+'prevpage' => 'ਪਿੱà¨\9bà©\87 à¨¸à¨«à¨¼à¨¾ ($1)',
 'allpagesfrom' => 'ਇਸਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ ਸਫ਼ੇ ਵਖਾਓ:',
 'allpagesto' => 'ਇਸਤੇ ਖ਼ਤਮ ਹੋਣ ਵਾਲ਼ੇ ਸਫ਼ੇ ਵਖਾਓ:',
-'allarticles' => 'ਸਭ  ਪੰਨੇ',
+'allarticles' => 'ਸਭ ਸਫ਼ੇ',
 'allinnamespace' => 'ਸਭ ਪੇਜ ($1 ਨੇਮਸਪੇਸ)',
 'allnotinnamespace' => 'ਸਭ ਪੇਜ ($1 ਨੇਮਸਪੇਸ ਵਿੱਚ ਨਹੀਂ)',
 'allpagesprev' => 'ਪਿੱਛੇ',
@@ -1584,14 +1622,14 @@ to upload files.',
 'sp-deletedcontributions-contribs' => 'ਯੋਗਦਾਨ',
 
 # Special:LinkSearch
-'linksearch' => 'ਬਾਹਰà©\80 à¨\95à©\9cà©\80 à¨\96à©\8bà¨\9cà©\8b',
+'linksearch' => 'ਬਾਹਰà©\80 à¨²à¨¿à©°à¨\95 à¨\96à©\8bà¨\9c',
 'linksearch-ns' => 'ਥਾਂ-ਨਾਮ:',
-'linksearch-ok' => 'ਖੋਜ',
+'linksearch-ok' => 'ਖੋਜ',
 'linksearch-line' => '$2 ਵਿੱਚ $1 ਬਾਹਰੀ ਸਿਰਨਾਵਾਂ ਹੈ',
 
 # Special:ListUsers
 'listusersfrom' => 'ਇਸਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ ਮੈਂਬਰ ਵਖਾਓ:',
-'listusers-submit' => 'ਵà©\87à¨\96à©\8b',
+'listusers-submit' => 'ਵà©\87à¨\96ਾà¨\93',
 'listusers-noresult' => 'ਕੋਈ ਯੂਜ਼ਰ ਨਹੀਂ ਲੱਭਿਆ।',
 'listusers-blocked' => '(ਪਾਬੰਦੀਸ਼ੁਦਾ)',
 
@@ -1599,7 +1637,7 @@ to upload files.',
 'listgrouprights-group' => 'ਗਰੁੱਪ',
 'listgrouprights-rights' => 'ਹੱਕ',
 'listgrouprights-helppage' => 'Help:ਗਰੁੱਪ ਹੱਕ',
-'listgrouprights-members' => '(ਵਰਤà©\8bà¨\82à¨\95ਾਰਾਂ ਦੀ ਸੂਚੀ)',
+'listgrouprights-members' => '(ਮà©\88à¨\82ਬਰਾਂ ਦੀ ਸੂਚੀ)',
 'listgrouprights-addgroup-all' => 'ਸਾਰੇ ਗਰੁੱਪ ਜੋੜੋ',
 'listgrouprights-removegroup-all' => 'ਸਾਰੇ ਗਰੁੱਪ ਹਟਾਓ',
 
@@ -1607,6 +1645,8 @@ to upload files.',
 'mailnologin' => 'ਕੋਈ ਭੇਜਣ ਐਡਰੈੱਸ ਨਹੀਂ',
 'mailnologintext' => 'ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਈ-ਮੇਲ ਭੇਜਣ ਲਈ ਤੁਹਾਨੂੰ [[Special:UserLogin|ਲਾਗਇਨ]] ਹੋਣਾ ਅਤੇ ਆਪਣੀਆਂ [[Special:Preferences|ਪਸੰਦਾਂ]] ਵਿਚ ਇਕ ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਦੇਣਾ ਪਵੇਗਾ।',
 'emailuser' => 'ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
+'emailuser-title-target' => 'ਇਹ {{GENDER:$1|ਯੂਜ਼ਰ}} ਨੂੰ ਈਮੇਲ ਭੇਜੋ',
+'emailuser-title-notarget' => 'ਯੂਜ਼ਰ ਨੂੰ ਈਮੇਲ',
 'emailpage' => 'ਯੂਜ਼ਰ ਨੂੰ ਈਮੇਲ ਕਰੋ',
 'defemailsubject' => '{{SITENAME}} ਈਮੇਲ',
 'usermaildisabled' => 'ਮੈਂਬਰ ਈ-ਮੇਲ ਬੰਦ ਹੈ',
@@ -1617,7 +1657,7 @@ to upload files.',
 'nowikiemailtext' => 'ਇਸ ਮੈਂਬਰ ਨੇ ਦੂਜੇ ਮੈਂਬਰਾਂ ਤੋਂ ਈ-ਮੇਲ ਨਾ ਪ੍ਰਾਪਤ ਕਰਨਾ ਚੁਣ ਰੱਖਿਆ ਹੈ।',
 'emailnotarget' => 'ਪ੍ਰਾਪਤ ਕਰਤਾ ਦਾ ਨਾ-ਮੌਜੂਦ ਜਾਂ ਗ਼ਲਤ ਮੈਂਬਰ-ਨਾਂ।',
 'emailtarget' => 'ਪ੍ਰਾਪਤ ਕਰਤਾ ਦਾ ਮੈਂਬਰ-ਨਾਂ ਦਾਖ਼ਲ ਕਰੋ',
-'emailusername' => 'ਮà©\88à¨\82ਬਰ-ਨਾਂ:',
+'emailusername' => 'ਯà©\82à¨\9c਼ਰ-ਨਾਂ:',
 'emailusernamesubmit' => 'ਭੇਜੋ',
 'email-legend' => 'ਕਿਸੇ ਦੂਜੇ {{SITENAME}} ਮੈਂਬਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
 'emailfrom' => 'ਵਲੋਂ:',
@@ -1656,7 +1696,7 @@ to upload files.',
 'wlnote' => "$3, $4 ਮੁਤਾਬਕ ਆਖ਼ਰੀ {{PLURAL:$2|ਘੰਟੇ|'''$2''' ਘੰਟਿਆਂ}} ਵਿਚ {{PLURAL:
 $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆਂ}}, ਹੇਠਾਂ ਵੇਖੋ।",
 'wlshowlast' => 'ਪਿੱਛਲੇ $1 ਘੰਟੇ $2 ਦਿਨ $3 ਵੇਖੋ',
-'watchlist-options' => 'ਧਿà¨\86ਨਸà©\82à¨\9aà©\80 à¨¦à©\87 à¨\87à¨\96ਤਿà¨\86ਰ',
+'watchlist-options' => 'ਧਿà¨\86ਨਸà©\82à¨\9aà©\80 à¨µà¨¿à¨\95ਲਪ',
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'ਨਿਗ੍ਹਾ (ਵਾਚ) ਰੱਖੀ ਜਾ ਰਹੀ ਹੈ...',
@@ -1670,7 +1710,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'changed' => 'ਬਦਲਿਆ',
 
 # Delete
-'deletepage' => 'ਪà©\87à¨\9c ਹਟਾਓ',
+'deletepage' => 'ਸਫ਼ਾ ਹਟਾਓ',
 'confirm' => 'ਪੁਸ਼ਟੀ',
 'excontent' => "ਸਮੱਗਰੀ ਸੀ: '$1'",
 'exbeforeblank' => 'ਖ਼ਾਲੀ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਸਮੱਗਰੀ ਸੀ: "$1"',
@@ -1713,7 +1753,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'prot_1movedto2' => '[[$1]] ਨੂੰ [[$2]] ’ਤੇ ਭੇਜਿਆ',
 'protect-badnamespace-title' => 'ਨਾ-ਸੁਰੱਖਿਆਯੋਗ ਥਾਂ-ਨਾਮ',
 'protect-badnamespace-text' => 'ਇਸ ਥਾਂ-ਨਾਮ ਵਿਚਲੇ ਸਫ਼ੇ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕਦੇ।',
-'protect-legend' => 'ਸà©\81ਰੱà¨\96ਿà¨\86 à¨\95ਨਫਰਮ',
+'protect-legend' => 'ਸà©\81ਰੱà¨\96ਿà¨\86 à¨ªà©\81ਸ਼à¨\9fà©\80',
 'protectcomment' => 'ਕਾਰਨ:',
 'protectexpiry' => 'ਮਿਆਦ:',
 'protect_expiry_invalid' => 'ਖ਼ਤਮ ਹੋਣ ਦਾ ਸਮਾਂ ਗ਼ਲਤ ਹੈ।',
@@ -1726,7 +1766,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'protect-summary-cascade' => 'ਕਾਸਕੇਡਿੰਗ',
 'protect-cascade' => 'ਇਸ ਸਫ਼ੇ ਵਿਚ ਸ਼ਾਮਲ ਸਫ਼ੇ ਸੁਰੱਖਿਅਤ ਕਰੋ (ਕਾਸਕੇਡਿੰਗ ਸੁਰੱਖਿਆ)',
 'protect-cantedit' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਦਾ ਸੁਰੱਖਿਆ ਦਰਜਾ ਨਹੀਂ ਬਦਲ ਸਕਦੇ ਕਿਉਂਕਿ ਤੁਹਾਨੂੰ ਇਸਨੂੰ ਸੋਧਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।',
-'protect-othertime' => 'ਹੋਰ ਸਮਾਂ',
+'protect-othertime' => 'ਹੋਰ ਸਮਾਂ:',
 'protect-othertime-op' => 'ਹੋਰ ਸਮਾਂ',
 'protect-existing-expiry' => 'ਖ਼ਤਮ ਹੋਣ ਦਾ ਮੌਜੂਦਾ ਸਮਾਂ: $2, $3',
 'protect-otherreason' => 'ਹੋਰ/ਵਾਧੂ ਕਾਰਨ:',
@@ -1736,7 +1776,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'restriction-type' => 'ਅਧਿਕਾਰ:',
 'restriction-level' => 'ਪਾਬੰਦੀ ਪੱਧਰ:',
 'minimum-size' => 'ਘੱਟੋ-ਘੱਟ ਆਕਾਰ',
-'maximum-size' => 'ਵੱਧੋ-ਵੱਧ ਆਕਾਰ',
+'maximum-size' => 'ਵੱਧੋ-ਵੱਧ ਆਕਾਰ:',
 'pagesize' => '(ਬਾਈਟ)',
 
 # Restrictions (nouns)
@@ -1756,16 +1796,16 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'viewdeletedpage' => 'ਮਿਟਾਏ ਹੋਏ ਸਫ਼ੇ ਵੇਖੋ',
 'undelete-fieldset-title' => 'ਰੀਵਿਜ਼ਨਾਂ ਮੁੜ ਬਹਾਲ ਕਰੋ',
 'undelete-nodiff' => 'ਕੋਈ ਪਿਛਲੀ ਰੀਵਿਜ਼ਨ ਨਹੀਂ ਲੱਭੀ',
-'undeletebtn' => 'ਰà©\80ਸਟੋਰ',
+'undeletebtn' => 'ਮà©\81à©\9c-ਸਟੋਰ',
 'undeletelink' => 'ਵੇਖੋ/ਮੁੜ ਬਹਾਲ ਕਰੋ',
 'undeleteviewlink' => 'ਵੇਖੋ',
-'undeletereset' => 'ਰà©\80-ਸੈੱਟ',
+'undeletereset' => 'ਮà©\81à©\9c-ਸੈੱਟ',
 'undeletecomment' => 'ਕਾਰਨ:',
 'undelete-header' => 'ਤਾਜ਼ੇ ਹਟਾਏ ਗਏ ਪੰਨਿਆਂ ਲਈ [[Special:Log/
 delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'undelete-search-title' => 'ਮਿਟਾਏ ਹੋਏ ਸਫ਼ੇ ਖੋਜੋ',
 'undelete-search-box' => 'ਮਿਟਾਏ ਹੋਏ ਸਫ਼ੇ ਖੋਜੋ',
-'undelete-search-submit' => 'ਖੋਜ',
+'undelete-search-submit' => 'ਖੋਜ',
 'undelete-show-file-submit' => 'ਹਾਂ',
 
 # Namespace form on various pages
@@ -1783,10 +1823,10 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'year' => 'ਇਸ (ਅਤੇ ਪਿਛਲੇ) ਸਾਲ ਤੋਂ :',
 
 'sp-contributions-newbies' => 'ਸਿਰਫ਼ ਨਵੇਂ ਵਰਤੋਂਕਾਰਾਂ ਦੇ ਯੋਗਦਾਨ ਵਖਾਓ',
-'sp-contributions-newbies-sub' => 'ਨਵà©\87à¨\82 à¨\85à¨\95ਾà¨\8aà¨\82à¨\9fਾਂ ਲਈ',
+'sp-contributions-newbies-sub' => 'ਨਵà©\87à¨\82 à¨\96ਾਤਿà¨\86ਂ ਲਈ',
 'sp-contributions-blocklog' => 'ਪਾਬੰਦੀ ਚਿੱਠਾ',
-'sp-contributions-uploads' => 'ਅਪਲੋਡ',
-'sp-contributions-logs' => 'à¨\9aਿੱਠà©\87',
+'sp-contributions-uploads' => 'à¨\85ੱਪਲà©\8bਡ',
+'sp-contributions-logs' => 'ਲਾà¨\97',
 'sp-contributions-talk' => 'ਚਰਚਾ',
 'sp-contributions-blocked-notice' => 'ਇਹ ਮੈਂਬਰ ਇਸ ਵੇਲ਼ੇ ਪਾਬੰਦੀਸ਼ੁਦਾ ਹੈ।
 ਪਾਬੰਦੀ ਚਿੱਠੇ ਦਾ ਤਾਜ਼ਾ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:',
@@ -1795,7 +1835,7 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'sp-contributions-search' => 'ਯੋਗਦਾਨ ਖੋਜੋ',
 'sp-contributions-username' => 'IP ਪਤਾ ਜਾਂ ਵਰਤੋਂਕਾਰਨਾਮ:',
 'sp-contributions-toponly' => 'ਕੇਵਲ ਉਨ੍ਹਾਂ ਸੰਪਾਦਨਾਂ ਨੂੰ ਵਖਾਓ ਜੋ ਨਵੀਨਤਮ ਸੰਸ਼ੋਧਨ ਹਨ',
-'sp-contributions-submit' => 'ਖੋਜ',
+'sp-contributions-submit' => 'ਖੋਜ',
 
 # What links here
 'whatlinkshere' => 'ਕਿਹੜੇ (ਪੰਨੇ) ਇੱਥੇ ਜੋੜਦੇ ਹਨ',
@@ -1805,18 +1845,18 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'nolinkshere' => "ਕੋਈ ਵੀ ਪੰਨਾ '''[[:$1]]''' ਨਾਲ ਨਹੀਂ ਜੋੜਦਾ।",
 'isredirect' => 'ਰੀਡਿਰੈਕਟ ਪੰਨਾ',
 'istemplate' => 'ਟਾਕਰਾ ਕਰੋ',
-'isimage' => 'ਫ਼ਾà¨\88ਲ à¨¦à©\80 à¨\95à©\9cà©\80',
+'isimage' => 'ਫਾà¨\88ਲ à¨²à¨¿à©°à¨\95',
 'whatlinkshere-prev' => '{{PLURAL:$1|ਪਿਛਲਾ|ਪਿਛਲੇ $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|ਅਗਲਾ|ਅਗਲੇ $1}}',
-'whatlinkshere-links' => 'â\86\90 à¨\95à©\9cà©\80à¨\86à¨\82',
+'whatlinkshere-links' => 'â\86\90 à¨²à¨¿à©°à¨\95',
 'whatlinkshere-hideredirs' => 'ਅਸਿੱਧੇ ਰਾਹ $1',
 'whatlinkshere-hidetrans' => '$1 ਇੱਥੇ ਕੀ ਕੀ ਜੁੜਦਾ ਹੈ।',
-'whatlinkshere-hidelinks' => '$1 à¨\95à©\9cà©\80',
-'whatlinkshere-hideimages' => 'ਫ਼ਾà¨\88ਲ à¨²à¨¿à©°à¨\95 $1',
-'whatlinkshere-filters' => 'à¨\9bਾਨਣà©\80à¨\86à¨\82',
+'whatlinkshere-hidelinks' => '$1 à¨²à¨¿à©°à¨\95',
+'whatlinkshere-hideimages' => 'ਫਾਈਲ ਲਿੰਕ $1',
+'whatlinkshere-filters' => 'ਫਿਲà¨\9fਰ',
 
 # Block/unblock
-'blockip' => 'ਯà©\82à¨\9c਼ਰ à¨¬à¨²à¨¾à¨\95 ਕਰੋ',
+'blockip' => 'à¨\85ਵਰà©\8bਧਤ ਕਰੋ',
 'ipadressorusername' => 'IP ਐਡਰੈਸ ਜਾਂ ਯੂਜ਼ਰ ਨਾਂ:',
 'ipbexpiry' => 'ਮਿਆਦ:',
 'ipbreason' => 'ਕਾਰਨ:',
@@ -1831,7 +1871,7 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'badipaddress' => 'ਗਲਤ IP ਐਡਰੈੱਸ',
 'blockipsuccesssub' => 'ਪਾਬੰਦੀ ਕਾਮਯਾਬ',
 'ipb-edit-dropdown' => 'ਪਾਬੰਦੀ ਲਾਉਣ ਦੇ ਕਾਰਨ ਸੋਧੋ',
-'ipb-unblock-addr' => '$1 à¨\85ਣ-ਬਲਾà¨\95',
+'ipb-unblock-addr' => '$1 à¨¤à©\8bà¨\82 à¨ªà¨¾à¨¬à©°à¨¦à©\80 à¨¹à¨\9fਾà¨\93',
 'ipb-unblock' => 'ਇੱਕ ਯੂਜ਼ਰ ਨਾਂ ਜਾਂ IP ਐਡਰੈੱਸ ਅਣ-ਬਲਾਕ ਕਰੋ',
 'ipb-blocklist' => 'ਮੌਜੂਦਾ ਪਾਬੰਦੀਆਂ ਵੇਖੋ',
 'ipb-blocklist-contribs' => '$1 ਦੇ ਯੋਗਦਾਨ',
@@ -1889,7 +1929,7 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'lockdb' => 'ਡਾਟਾਬੇਸ ਲਾਕ',
 
 # Move page
-'move-page-legend' => 'ਪà©\87à¨\9c à¨®à©\82ਵ à¨\95ਰà©\8b',
+'move-page-legend' => 'ਪੰਨਾ à¨¸à¨¥à¨¾à¨¨à¨¾à¨\82ਤਰਨ',
 'movearticle' => 'ਸਫ਼ਾ ਭੇਜੋ:',
 'movenologin' => 'ਲਾਗਇਨ ਨਹੀਂ ਹੋ',
 'movenologintext' => 'ਇਕ ਸਫ਼ੇ ਦਾ ਸਿਰਲੇਖ ਬਦਲਣ ਲਈ ਤੁਸੀਂ ਰਜਿਸਟਰਡ ਮੈਂਬਰ ਹੋਣੇ ਚਾਹੀਦੇ ਹੋ ਅਤੇ [[Special:UserLogin|ਲਾਗਇਨ]] ਕੀਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।',
@@ -1905,7 +1945,7 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'movepage-page-moved' => 'ਸਫ਼ਾ $1 ਨੂੰ $2 ’ਤੇ ਭੇਜਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।',
 'movelogpage' => 'ਸਥਾਨਾਂਤਰਣ ਦਾ ਚਿੱਠਾ',
 'movereason' => 'ਕਾਰਨ:',
-'revertmove' => 'ਰੱਦ à¨\95ਰà©\8b',
+'revertmove' => 'à¨\89ਲà¨\9fਾà¨\93',
 'delete_and_move' => 'ਹਟਾਓ ਅਤੇ ਮੂਵ ਕਰੋ',
 'delete_and_move_confirm' => 'ਹਾਂ, ਸਫ਼ਾ ਮਿਟਾ ਦੇਵੋ',
 'move-leave-redirect' => 'ਪਿੱਛੇ ਇਕ ਰੀਡਿਰੈਕਟ ਛੱਡੋ',
@@ -1924,7 +1964,7 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'allmessagesname' => 'ਨਾਮ',
 'allmessagesdefault' => 'ਡਿਫਾਲਟ ਪਾਠ',
 'allmessagescurrent' => 'ਮੌਜੂਦਾ ਟੈਕਸਟ',
-'allmessages-filter-legend' => 'à¨\9bਾਨਣਾ',
+'allmessages-filter-legend' => 'ਫਿਲà¨\9fਰ',
 'allmessages-filter-all' => 'ਸਭ',
 'allmessages-language' => 'ਭਾਸ਼ਾ:',
 'allmessages-filter-submit' => 'ਜਾਓ',
@@ -1976,7 +2016,7 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'tooltip-p-logo' => 'ਮੁੱਖ ਪੰਨੇ ’ਤੇ ਜਾਓ',
 'tooltip-n-mainpage' => 'ਮੁੱਖ ਪੰਨੇ ’ਤੇ ਜਾਓ',
 'tooltip-n-mainpage-description' => 'ਮੁੱਖ ਪੰਨੇ ’ਤੇ ਜਾਓ',
-'tooltip-n-portal' => 'ਪਰਿਯà©\8bà¨\9cਨਾ à¨¬à¨¾à¨°à©\87, à¨¤à©\81ਸà©\80à¨\82 à¨\95à©\80 à¨\95ਰ à¨¸à¨\95ਦà©\87 à¨¹à©\8b, à¨\95ਿੱਥà©\87 à¨\95à©\81à¨\9d à¨²à©±à¨­à¨£à¨¾ à¨¹à©\88',
+'tooltip-n-portal' => 'ਪਰਯੋਜਨਾ ਬਾਰੇ, ਤੁਸੀਂ ਕੀ ਕਰ ਸਕਦੇ ਹੋ, ਕਿੱਥੇ ਕੁਝ ਲੱਭਣਾ ਹੈ',
 'tooltip-n-currentevents' => 'ਮੌਜੂਦਾ ਸਮਾਗਮ ਬਾਰੇ ਪਿਛਲੀ ਜਾਣਕਾਰੀ ਲੱਭੋ',
 'tooltip-n-recentchanges' => 'ਵਿਕੀ ਵਿੱਚ ਹਾਲ ’ਚ ਹੋਈਆਂ ਬਦਲੀਆਂ ਦੀ ਸੂਚੀ',
 'tooltip-n-randompage' => 'ਇੱਕ ਰਲਵਾਂ ਪੰਨਾ ਲੋਡ ਕਰੋ',
@@ -1986,7 +2026,7 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'tooltip-feed-atom' => 'ਇਸ ਪੰਨੇ ਦੀ ਐਟਮ ਫ਼ੀਡ',
 'tooltip-t-contributions' => 'ਇਸ ਵਰਤੋਂਕਾਰ ਦੇ ਯੋਗਦਾਨ ਦੀ ਸੂਚੀ',
 'tooltip-t-emailuser' => 'ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ',
-'tooltip-t-upload' => 'à¨\9aਿੱਤਰ à¨\9cਾà¨\82 à¨®à©\80ਡà©\80à¨\86 à¨«à¨¾à¨\88ਲਾà¨\82 à¨\85ੱਪਲà©\8bਡ à¨\95ਰà©\8b',
+'tooltip-t-upload' => 'ਚਿੱਤਰ ਜਾਂ ਮੀਡੀਆ ਫਾਈਲਾਂ ਅਪਲੋਡ ਕਰੋ',
 'tooltip-t-specialpages' => 'ਸਾਰੇ ਵਿਸ਼ੇਸ਼ ਪੰਨਿਆਂ ਦੀ ਸੂਚੀ',
 'tooltip-t-print' => 'ਇਹ ਪੰਨੇ ਦਾ ਛਪਣਯੋਗ ਵਰਜਨ',
 'tooltip-t-permalink' => 'ਪੰਨੇ ਦੇ ਇਸ ਰੀਵਿਜਨ ਲਈ ਪੱਕਾ ਲਿੰਕ',
@@ -1994,11 +2034,11 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'tooltip-ca-nstab-user' => 'ਵਰਤੋਂਕਾਰ ਪੰਨਾ ਵੇਖੋ',
 'tooltip-ca-nstab-media' => 'ਮੀਡਿਆ ਪੇਜ ਵੇਖੋ',
 'tooltip-ca-nstab-special' => 'ਇਹ ਵਿਸ਼ੇਸ਼ ਪੰਨਾ ਹੈ, ਤੁਸੀਂ ਇਸ ਪੰਨੇ ਨੂੰ ਬਦਲ ਨਹੀਂ ਸਕਦੇ।',
-'tooltip-ca-nstab-project' => 'ਪਰਿਯà©\8bà¨\9cਨਾ à¨ªà©°à¨¨à¨¾ à¨µà©\87à¨\96à©\8b',
-'tooltip-ca-nstab-image' => 'ਫ਼ਾà¨\88ਲ à¨ªà©°à¨¨à¨¾ à¨µà©\87à¨\96à©\8b',
+'tooltip-ca-nstab-project' => 'ਪਰਯੋਜਨਾ ਪੰਨਾ ਵੇਖੋ',
+'tooltip-ca-nstab-image' => 'ਫਾਈਲ ਪੰਨਾ ਵੇਖੋ',
 'tooltip-ca-nstab-mediawiki' => 'ਸਿਸਟਮ ਸੁਨੇਹੇ ਵੇਖੋ',
 'tooltip-ca-nstab-template' => 'ਸਾਂਚਾ ਵੇਖੋ',
-'tooltip-ca-nstab-help' => 'ਮੱਦਦ à¨ªà©\87à¨\9c ਵੇਖੋ',
+'tooltip-ca-nstab-help' => 'ਮਦਦ à¨ªà©°à¨¨à¨¾ ਵੇਖੋ',
 'tooltip-ca-nstab-category' => 'ਸ਼੍ਰੇਣੀ ਪੰਨਾ ਵੇਖੋ',
 'tooltip-minoredit' => 'ਇਸ ’ਤੇ ਬਤੌਰ ਛੋਟਾ ਬਦਲਾਵ ਨਿਸ਼ਾਨ ਲਾਓ',
 'tooltip-save' => 'ਆਪਣੀਆਂ ਤਬਦੀਲੀਆਂ ਸਾਂਭੋ',
@@ -2007,19 +2047,19 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'tooltip-compareselectedversions' => 'ਇਸ ਪੰਨੇ ਦੇ ਦੋ ਚੁਣੇ ਹੋਏ ਸੋਧਾਂ ਵਿੱਚ ਫ਼ਰਕ ਵੇਖੋ',
 'tooltip-watch' => 'ਇਸ ਪੰਨੇ ਨੂੰ ਆਪਣੀ ਧਿਆਨਸੂਚੀ ਵਿੱਚ ਪਾਓ',
 'tooltip-watchlistedit-normal-submit' => 'ਸਿਰਲੇਖ ਹਟਾਓ',
-'tooltip-watchlistedit-raw-submit' => 'ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨¨à¨µà©\80à¨\82 ਕਰੋ',
-'tooltip-upload' => 'à¨\85ੱਪਲà©\8bਡ à¨¸à¨\9fਾਰà¨\9f ਕਰੋ',
+'tooltip-watchlistedit-raw-submit' => 'ਧਿà¨\86ਨਸà©\82à¨\9aà©\80 à¨\85ਪਡà©\87à¨\9f ਕਰੋ',
+'tooltip-upload' => 'à¨\85ਪਲà©\8bਡ à¨¸à¨¼à©\81ਰà©\82 ਕਰੋ',
 'tooltip-rollback' => "''ਵਾਪਸ ਮੋੜੋ'' ਇੱਕ ਹੀ ਕਲਿੱਕ ਨਾਲ ਆਖਰੀ ਯੋਗਦਾਨ ਨੂੰ ਰੱਦ ਕਰ ਦਿੰਦਾ ਹੈ",
 'tooltip-undo' => '"ਉਧੇੜਨਾ" ਇਸ ਬਦਲਾਵ ਨੂੰ ਰੱਦ ਕਰਕੇ ਸੋਧ ਫ਼ਾਰਮ ਨੂੰ ਝਲਕ ਦੇ ਸ਼ੈਲੀ ਵਿੱਚ ਦਿਖਾਉਂਦਾ ਹੈ।
 ਇੰਝ "ਸਾਰ" ਵਿੱਚ ਬਦਲਾਵ ਨਕਾਰਨ ਦਾ ਕਾਰਨ ਲਿਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।',
-'tooltip-preferences-save' => 'ਪਸੰਦਾਂ ਸਾਂਭੋ',
+'tooltip-preferences-save' => 'ਪਸੰਦ ਸੰਭਾਲੋ',
 'tooltip-summary' => 'ਸੰਖੇਪ ਸਾਰ ਦਰਜ ਕਰੋ',
 
 # Attribution
 'lastmodifiedatby' => 'ਇਹ ਸਫ਼ਾ ਆਖ਼ਰੀ ਵਾਰ $1 ਨੂੰ $2 ’ਤੇ $3 ਨੇ ਸੋਧਿਆ ਸੀ।',
 'others' => 'ਹੋਰ',
 'siteusers' => '{{SITENAME}} {{PLURAL:$2|ਵਰਤੋਂਕਾਰ|ਵਰਤੋਂਕਾਰਾਂ}} $1',
-'creditspage' => 'ਪà©\87à¨\9c ਮਾਣ',
+'creditspage' => 'ਪੰਨਾ ਮਾਣ',
 
 # Spam protection
 'spamprotectiontitle' => 'Spam ਸੁਰੱਖਿਆ ਫਿਲਟਰ',
@@ -2034,7 +2074,7 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'skinname-monobook' => 'ਮੋਨੋਬੁੱਕ',
 
 # Browsing diffs
-'previousdiff' => 'â\86\90 à¨\87ਸ à¨¤à©\8bà¨\82 à¨ªà©\81ਰਾਣਾ à¨¬à¨¦à¨²à¨¾à¨µ',
+'previousdiff' => 'â\86\90 à¨\87ਸ à¨¤à©\8bà¨\82 à¨ªà©\81ਰਾਣਾ à¨¬à¨¦à¨²à¨¾à¨\85',
 'nextdiff' => 'ਤਾਜਾ ਸੰਪਾਦਨ →',
 
 # Media information
@@ -2102,14 +2142,14 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'exif-gpsspeed-k' => 'ਕਿਲੋਮੀਟਰ ਪ੍ਰਤੀ ਘੰਟਾ',
 'exif-gpsspeed-m' => 'ਮੀਲ ਪ੍ਰਤੀ ਘੰਟਾ',
 
-'exif-iimcategory-war' => 'ਯà©\81ੱਧ, à¨¸à©°à¨\98ਰਸ਼ à¨\85ਤà©\87 à¨\85ਸ਼ਾà¨\82à¨\9fੀ',
+'exif-iimcategory-war' => 'ਯà©\81ੱਧ, à¨¸à©°à¨\98ਰਸ਼ à¨\85ਤà©\87 à¨\85ਸ਼ਾà¨\82ਤੀ',
 'exif-iimcategory-wea' => 'ਮੌਸਮ',
 
 'exif-urgency-normal' => 'ਸਧਾਰਨ ($1)',
 
 # External editor support
-'edit-externally' => 'ਬਾਹਰà©\80 à¨\90ਪਲà©\80à¨\95à©\87ਸ਼ਨ à¨µà¨°à¨¤à¨¦à©\87 à¨¹à©\8bà¨\8f à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ à¨¨à©\82à©° à¨¸à©°à¨ªà¨¾à¨¦à¨¨ à¨\95ਰà©\8b।',
-'edit-externally-help' => '(à¨\9c਼ਿà¨\86ਦਾ ਜਾਣਕਾਰੀ ਲਈ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] ਵੇਖੋ)',
+'edit-externally' => 'ਬਾਹਰੀ ਐਪਲੀਕੇਸ਼ਨ ਵਰਤਦੇ ਹੋਏ ਇਸ ਫਾਈਲ ਨੂੰ ਸੰਪਾਦਨ ਕਰੋ।',
+'edit-externally-help' => '(ਹà©\8bਰ ਜਾਣਕਾਰੀ ਲਈ [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] ਵੇਖੋ)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'ਸਭ',
@@ -2135,16 +2175,16 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'confirm_purge_button' => 'ਠੀਕ ਹੈ',
 
 # Multipage image navigation
-'imgmultipageprev' => 'â\86\90 à¨ªà¨¿à¨\9bਲਾ à¨ªà©\87à¨\9c',
-'imgmultipagenext' => 'à¨\85à¨\97ਲਾ à¨ªà©\87à¨\9c →',
+'imgmultipageprev' => 'â\86\90 à¨ªà¨¿à©±à¨\9bਲਾ à¨ªà©°à¨¨à¨¾',
+'imgmultipagenext' => 'à¨\85à¨\97ਲਾ à¨ªà©°à¨¨à¨¾ →',
 'imgmultigo' => 'ਜਾਓ!',
 'imgmultigoto' => '$1 ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ',
 
 # Table pager
-'table_pager_next' => 'à¨\85à¨\97ਲਾ à¨ªà©\87à¨\9c',
-'table_pager_prev' => 'ਪਿà¨\9bਲਾ à¨ªà©\87à¨\9c',
-'table_pager_first' => 'ਪਹਿਲਾ à¨ªà©\87à¨\9c',
-'table_pager_last' => 'à¨\86à¨\96ਰà©\80 à¨ªà©\87à¨\9c',
+'table_pager_next' => 'à¨\85à¨\97ਲਾ à¨ªà©°à¨¨à¨¾',
+'table_pager_prev' => 'ਪਿੱà¨\9bਲਾ à¨ªà©°à¨¨à¨¾',
+'table_pager_first' => 'ਪਹਿਲਾ à¨ªà©°à¨¨à¨¾',
+'table_pager_last' => 'à¨\86à¨\96ਰà©\80 à¨ªà©°à¨¨à¨¾',
 'table_pager_limit' => 'ਹਰੇਕ ਪੇਜ ਲਈ $1 ਆਈਟਮਾਂ',
 'table_pager_limit_label' => 'ਪ੍ਰਤੀ ਸਫ਼ਾ ਆਈਟਮਾਂ:',
 'table_pager_limit_submit' => 'ਜਾਓ',
@@ -2155,8 +2195,8 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'autosumm-new' => '"$1" ਨਾਲ਼ ਸਫ਼ਾ ਬਣਾਇਆ',
 
 # Live preview
-'livepreview-loading' => 'ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…',
-'livepreview-ready' => 'ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...ਤਿਆਰ!',
+'livepreview-loading' => '…ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ',
+'livepreview-ready' => '…ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ। ਤਿਆਰ!',
 
 # Watchlist editor
 'watchlistedit-normal-title' => 'ਧਿਆਨਸੂਚੀ ਬਦਲੋ',
@@ -2166,7 +2206,7 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'watchlistedit-raw-removed' => '{{PLURAL:$1|1 title was|$1 titles were}} ਹਟਾਓ:',
 
 # Watchlist editing tools
-'watchlisttools-view' => 'à¨\86ਧਾਰਿਤ à¨¬à¨¦à¨²à¨¾à¨µ ਵੇਖੋ',
+'watchlisttools-view' => 'à¨\86ਧਾਰਿਤ à¨¬à¨¦à¨²à¨¾à¨\85 ਵੇਖੋ',
 'watchlisttools-edit' => 'ਧਿਆਨਸੂਚੀ ਵੇਖੋ ’ਤੇ ਸੰਪਾਦਨ ਕਰੋ',
 'watchlisttools-raw' => 'ਕੱਚੀ ਧਿਆਨਸੂਚੀ ਸੰਪਾਦਨ ਕਰੋ',
 
@@ -2200,7 +2240,7 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 #ਸਾਰੇ ਰੈਜੈਕਸ ਫ਼ਰੈਗਮੈਂਟ ਇਸ ਲਾਈਨ ਤੋਂ ਉੱਪਰ ਪਾਓ। ਇਸ ਲਾਈਨ ਨੂੰ ਇੰਝ ਹੀ ਰਹਿਣ ਦਿਓ </pre>",
 
 # Special:Tags
-'tag-filter' => '[[Special:Tags|à¨\9fà©\88à¨\97]] à¨\9bਾਨਣà©\80:',
+'tag-filter' => '[[Special:Tags|à¨\9fà©\88à¨\97]] à¨«à¨¿à¨²à¨\9fਰ:',
 'tags-tag' => 'ਟੈਗ ਦਾ ਨਾਮ',
 'tags-edit' => 'ਸੰਪਾਦਨ',
 
@@ -2225,14 +2265,14 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'searchsuggest-search' => 'ਖੋਜ',
 
 # Durations
-'duration-seconds' => '$1 {{PLURAL:$1|ਸà©\87à¨\95à©\8bੰਡ|ਵਧà©\87ਰà©\87 à¨¸à©\87à¨\95à©\8bੰਡ}}',
-'duration-minutes' => '$1 {{PLURAL:$1|ਮਿਨà©\81à¨\9f |ਵਧà©\87ਰà©\87 à¨®à¨¿à¨¨à©\81ਟ }}',
-'duration-hours' => '$1 {{PLURAL:$1|à¨\98à©°à¨\9fà©\87 |ਵਧà©\87ਰà©\87 ਘੰਟੇ }}',
-'duration-days' => '$1 {{PLURAL:$1|ਦਿਨ |ਵਧà©\87ਰà©\87 à¨¦à¨¿à¨¨ }}',
-'duration-weeks' => '$1 {{PLURAL:$1|ਹਫ਼ਤà©\87 |ਵਧà©\87ਰà©\87 ਹਫ਼ਤੇ }}',
-'duration-years' => '$1 {{PLURAL:$1|ਸਾਲ |ਵਧà©\87ਰà©\87 à¨¸à¨¾à¨² }}',
-'duration-decades' => '$1 {{PLURAL:$1|ਦਸ਼à¨\95  |ਵਧà©\87ਰà©\87 à¨¦à¨¸à¨¼à¨\95 }}',
-'duration-centuries' => '$1 {{PLURAL:$1|ਸ਼ਤਾਬਦà©\80 |ਵਧà©\87ਰà©\87 à¨¸à¨¼à¨¤à¨¾à¨¬à¨¦à©\80 }}',
+'duration-seconds' => '$1 {{PLURAL:$1|ਸà¨\95ਿੰà¨\9f|ਸà¨\95ਿੰà¨\9f}}',
+'duration-minutes' => '$1 {{PLURAL:$1|ਮਿੰà¨\9f |ਮਿੰਟ }}',
+'duration-hours' => '$1 {{PLURAL:$1|à¨\98à©°à¨\9fਾ |ਘੰਟੇ }}',
+'duration-days' => '$1 {{PLURAL:$1|ਦਿਨ |ਦਿਨ }}',
+'duration-weeks' => '$1 {{PLURAL:$1|ਹਫ਼ਤਾ |ਹਫ਼ਤੇ }}',
+'duration-years' => '$1 {{PLURAL:$1|ਸਾਲ |ਸਾਲ }}',
+'duration-decades' => '$1 {{PLURAL:$1|ਦਹਾà¨\95ਾ  |ਦਹਾà¨\95à©\87 }}',
+'duration-centuries' => '$1 {{PLURAL:$1|ਸà©\8c |ਸà©\8c }}',
 'duration-millennia' => '$1 {{PLURAL:$1|ਸਾਹਸ਼ਤਾਬਦੀ  |ਵਧੇਰੇ ਸਾਹਸ਼ਤਾਬਦੀ  }}',
 
 );
index 290f4e2..fdb3698 100644 (file)
@@ -53,6 +53,7 @@
  * @author Timpul
  * @author ToSter
  * @author Tsca
+ * @author Ty221
  * @author WTM
  * @author Woytecr
  * @author Wpedzich
@@ -323,14 +324,12 @@ $messages = array(
 'tog-previewonfirst' => 'Pokazuj podgląd strony podczas pierwszej edycji',
 'tog-nocache' => 'Wyłącz pamięć podręczną przeglądarki',
 'tog-enotifwatchlistpages' => 'Wyślij do mnie e‐mail, gdy strona lub plik z mojej listy obserwowanych zostaną zmodyfikowane',
-'tog-enotifusertalkpages' => 'Wyślij do mnie e‐mail kiedy moja strona dyskusji zostanie zmodyfikowana',
+'tog-enotifusertalkpages' => 'Wyślij do mnie e‐mail, gdy moja strona dyskusji zostanie zmodyfikowana',
 'tog-enotifminoredits' => 'Wyślij e‐mail także w przypadku drobnych zmian na stronach lub w plikach',
 'tog-enotifrevealaddr' => 'Nie ukrywaj mojego adresu e‐mail w powiadomieniach',
 'tog-shownumberswatching' => 'Pokaż liczbę użytkowników obserwujących stronę',
 'tog-oldsig' => 'Twój obecny podpis',
 'tog-fancysig' => 'Traktuj podpis jako wikikod (nie linkuj automatycznie całości)',
-'tog-externaleditor' => 'Domyślnie używaj zewnętrznego edytora (tylko dla zaawansowanych użytkowników; wymaga odpowiedniego skonfigurowania komputera)',
-'tog-externaldiff' => 'Domyślnie używaj zewnętrznego programu pokazującego zmiany (tylko dla zaawansowanych użytkowników; wymaga odpowiedniego skonfigurowania komputera)',
 'tog-showjumplinks' => 'Włącz odnośniki „skocz do”',
 'tog-uselivepreview' => 'Używaj dynamicznego podglądu (JavaScript; eksperymentalny)',
 'tog-forceeditsummary' => 'Informuj o niewypełnieniu opisu zmian',
@@ -345,6 +344,7 @@ $messages = array(
 'tog-showhiddencats' => 'Pokazuj ukryte kategorie',
 'tog-noconvertlink' => 'Wyłącz konwersję tytułów w linkach',
 'tog-norollbackdiff' => 'Pomiń pokazywanie zmian po użyciu funkcji „cofnij”',
+'tog-useeditwarning' => 'Ostrzegaj mnie, gdy opuszczam stronę edycji bez zapisania zmian',
 
 'underline-always' => 'zawsze',
 'underline-never' => 'nigdy',
@@ -365,13 +365,13 @@ $messages = array(
 'thursday' => 'czwartek',
 'friday' => 'piątek',
 'saturday' => 'sobota',
-'sun' => 'Nie',
-'mon' => 'Pon',
-'tue' => 'Wto',
-'wed' => 'Śro',
-'thu' => 'Czw',
-'fri' => 'P',
-'sat' => 'Sob',
+'sun' => 'N',
+'mon' => 'Pn',
+'tue' => 'Wt',
+'wed' => 'Śr',
+'thu' => 'Cz',
+'fri' => 'Pt',
+'sat' => 'So',
 'january' => 'styczeń',
 'february' => 'luty',
 'march' => 'marzec',
@@ -477,7 +477,7 @@ $messages = array(
 'go' => 'Przejdź',
 'searcharticle' => 'Przejdź',
 'history' => 'Historia strony',
-'history_short' => 'Historia i autorzy',
+'history_short' => 'Historia',
 'updatedmarker' => 'zmienione od ostatniej wizyty',
 'printableversion' => 'Wersja do druku',
 'permalink' => 'Link do tej wersji',
@@ -715,9 +715,15 @@ Zauważ, że do momentu wyczyszczenia pamięci podręcznej przeglądarki niektó
 'welcomecreation-msg' => 'Twoje konto zostało utworzone.
 Nie zapomnij dostosować [[Special:Preferences|preferencji]].',
 'yourname' => 'Nazwa {{GENDER:|użytkownika|użytkowniczki}}',
+'userlogin-yourname' => 'Nazwa użytkownika',
+'userlogin-yourname-ph' => 'Wprowadź swoją nazwę użytkownika',
 'yourpassword' => 'Hasło',
+'userlogin-yourpassword' => 'Hasło',
+'userlogin-yourpassword-ph' => 'Wpisz swoje hasło',
 'yourpasswordagain' => 'Powtórz hasło',
 'remembermypassword' => 'Zapamiętaj moje hasło na tym komputerze (maksymalnie przez $1 {{PLURAL:$1|dzień|dni}})',
+'userlogin-remembermypassword' => 'Zapamiętaj mnie',
+'userlogin-signwithsecure' => 'Zaloguj się na bezpiecznym serwerze',
 'securelogin-stick-https' => 'Po zalogowaniu utrzymuj połączenie poprzez HTTPS',
 'yourdomainname' => 'Twoja domena',
 'password-change-forbidden' => 'Nie można zmieniać haseł na tej wiki.',
@@ -730,12 +736,16 @@ Nie zapomnij dostosować [[Special:Preferences|preferencji]].',
 'logout' => 'Wyloguj',
 'userlogout' => 'Wyloguj',
 'notloggedin' => 'Nie jesteś zalogowany',
+'userlogin-noaccount' => 'Nie masz konta?',
+'userlogin-joinproject' => 'Dołącz do {{SITENAME}}',
 'nologin' => "Nie masz konta? '''$1'''.",
 'nologinlink' => 'Zarejestruj się',
 'createaccount' => 'Załóż nowe konto',
 'gotaccount' => "Masz już konto? '''$1'''.",
 'gotaccountlink' => 'Zaloguj się',
 'userlogin-resetlink' => 'Zapomniałeś danych do zalogowania się?',
+'helplogin-url' => 'Help:Logowanie',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoc z logowaniem]]',
 'createaccountmail' => 'Użyj tymczasowego hasła wygenerowanego losowo i wyślij je na podany poniżej adres e-mail',
 'createaccountreason' => 'Powód',
 'badretype' => 'Wprowadzone hasła różnią się między sobą.',
@@ -840,6 +850,7 @@ Być może właśnie zmienił{{GENDER:|eś|aś|eś(‐aś)}} swoje hasło lub po
 'passwordreset-text' => 'Wypełnij formularz, aby zresetować swoje hasło.',
 'passwordreset-legend' => 'Zresetuj hasło',
 'passwordreset-disabled' => 'Na tej wiki wyłączono możliwość resetowania haseł.',
+'passwordreset-emaildisabled' => 'Wysyłanie emaili zostało wyłączone na tej wiki',
 'passwordreset-pretext' => '{{PLURAL:$1||Wprowadź jedną z danych poniżej}}',
 'passwordreset-username' => 'Nazwa użytkownika:',
 'passwordreset-domain' => 'Domena',
@@ -1085,6 +1096,8 @@ Strona już istnieje.',
 'content-failed-to-parse' => 'Format zawartości typu $2 (dla modelu: $1) nieprawidłowy: $3',
 'invalid-content-data' => 'Zawartość strony zawiera nieprawidłowe dane',
 'content-not-allowed-here' => 'Zawartość tego typu ($1) nie jest dozwolona na stronie [[$2]]',
+'editwarning-warning' => 'Opuszczenie tej strony może spowodować utratę wprowadzonych przez Ciebie zmian.
+Jeśli jesteś zalogowany możesz wyłączyć wyświetlanie tego ostrzeżenia w zakładce {{int:prefs-editing}} w swoich preferencjach.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
@@ -1367,6 +1380,7 @@ Zazwyczaj jest to spowodowane przestarzałym linkiem do usuniętej strony. Powó
 'searchdisabled' => 'Wyszukiwanie w {{GRAMMAR:MS.lp|{{SITENAME}}}} zostało wyłączone.
 W międzyczasie możesz skorzystać z wyszukiwania Google.
 Jednak informacje o treści {{GRAMMAR:D.lp|{{SITENAME}}}} mogą być w Google nieaktualne.',
+'search-error' => 'Wystąpił błąd podczas wyszukiwania:$1',
 
 # Preferences page
 'preferences' => 'Preferencje',
@@ -2449,7 +2463,7 @@ Naciśnij „wstecz” w przeglądarce, przeładuj stronę, po czym ponownie wyd
 'protectlogtext' => 'Poniżej znajduje się lista zmian w zabezpieczeniu pojedynczych stron.
 Wszystkie aktywne zabezpieczenia odnajdziesz na liście [[Special:ProtectedPages|zabezpieczonych stron]].',
 'protectedarticle' => 'zabezpieczono "[[$1]]"',
-'modifiedarticleprotection' => 'zmieniono poziom zabezpieczenia "[[$1]]"',
+'modifiedarticleprotection' => 'zmieniono stopień zabezpieczenia "[[$1]]"',
 'unprotectedarticle' => 'odbezpieczył [[$1]]',
 'movedarticleprotection' => 'przeniósł ustawienia zabezpieczeń z [[$2]] do [[$1]]',
 'protect-title' => 'Zmiana poziomu zabezpieczenia „$1”',
@@ -2465,12 +2479,12 @@ Wszystkie aktywne zabezpieczenia odnajdziesz na liście [[Special:ProtectedPages
 'protect_expiry_invalid' => 'Podany czas automatycznego odbezpieczenia jest nieprawidłowy.',
 'protect_expiry_old' => 'Podany czas automatycznego odblokowania znajduje się w przeszłości.',
 'protect-unchain-permissions' => 'Odblokuj dodatkowe opcje zabezpieczania',
-'protect-text' => "Możesz tu sprawdzić i zmienić poziom zabezpieczenia strony '''$1'''.",
+'protect-text' => "Możesz tu sprawdzić i zmienić stopień zabezpieczenia strony '''$1'''.",
 'protect-locked-blocked' => "Nie możesz zmienić poziomów zabezpieczenia, ponieważ jesteś zablokowany.
 Obecne ustawienia dla strony '''$1''' to:",
 'protect-locked-dblock' => "Nie można zmienić poziomu zabezpieczenia z powodu działającej blokady bazy danych. Obecne ustawienia dla strony '''$1''' to:",
 'protect-locked-access' => "Nie masz uprawnień do zmiany poziomu zabezpieczenia strony. Obecne ustawienia dla strony '''$1''' to:",
-'protect-cascadeon' => 'Ta strona jest zabezpieczona przed edycją, ponieważ jest używana przez {{PLURAL:$1|następującą stronę, która została zabezpieczona|następujące strony, które zostały zabezpieczone}} z włączoną opcją dziedziczenia. Możesz zmienić poziom zabezpieczenia strony, ale nie wpłynie to na dziedziczenie zabezpieczenia.',
+'protect-cascadeon' => 'Ta strona jest zabezpieczona przed edycją, ponieważ jest używana przez {{PLURAL:$1|następującą stronę, która została zabezpieczona|następujące strony, które zostały zabezpieczone}} z włączoną opcją dziedziczenia. Możesz zmienić stopień zabezpieczenia strony, ale nie wpłynie to na dziedziczenie zabezpieczenia.',
 'protect-default' => 'Dostęp mają wszyscy użytkownicy',
 'protect-fallback' => 'Wymaga uprawnień „$1”',
 'protect-level-autoconfirmed' => 'Dozwolone dla wszystkich poza nowymi i niezalogowanymi użytkownikami',
@@ -2494,7 +2508,7 @@ Obecne ustawienia dla strony '''$1''' to:",
 'protect-edit-reasonlist' => 'Edytuj listę przyczyn zabezpieczenia',
 'protect-expiry-options' => '1 godzina:1 hour,1 dzień:1 day,1 tydzień:1 week,2 tygodnie:2 weeks,1 miesiąc:1 month,3 miesiące:3 months,6 miesięcy:6 months,1 rok:1 year,na zawsze:infinite',
 'restriction-type' => 'Ograniczenia',
-'restriction-level' => 'Poziom',
+'restriction-level' => 'Stopień',
 'minimum-size' => 'Minimalny rozmiar',
 'maximum-size' => 'Maksymalny rozmiar',
 'pagesize' => '(bajtów)',
@@ -2508,7 +2522,7 @@ Obecne ustawienia dla strony '''$1''' to:",
 # Restriction levels
 'restriction-level-sysop' => 'całkowite zabezpieczenie',
 'restriction-level-autoconfirmed' => 'częściowe zabezpieczenie',
-'restriction-level-all' => 'dowolny poziom',
+'restriction-level-all' => 'dowolny stopień',
 
 # Undelete
 'undelete' => 'Odtwórz usuniętą stronę',
@@ -2971,7 +2985,7 @@ Brak katalogu dla plików tymczasowych.',
 # Import log
 'importlogpage' => 'Rejestr importu',
 'importlogpagetext' => 'Rejestr przeprowadzonych importów stron z innych serwisów wiki.',
-'import-logentry-upload' => '{{GENDER:$2|zaimportował|zaimportowała}} [[$1]] przez przesłanie pliku',
+'import-logentry-upload' => 'Zaimportowano [[$1]] przez pobieranie plików',
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|wersja|wersje|wersji}}',
 'import-logentry-interwiki' => '{{GENDER:$2|zaimportował|zaimportowała}} $1 używając transwiki',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|wersja|wersje|wersji}} z $2',
@@ -4009,6 +4023,8 @@ Grafiki są pokazywane w pełnej rozdzielczości. Inne typy plików są otwieran
 'htmlform-submit' => 'Zapisz',
 'htmlform-reset' => 'Cofnij zmiany',
 'htmlform-selectorother-other' => 'Inne',
+'htmlform-no' => 'Nie',
+'htmlform-yes' => 'Tak',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 z obsługą pełnotekstowego wyszukiwania',
index c95684d..48d7955 100644 (file)
@@ -68,29 +68,28 @@ $messages = array(
 'tog-enotifusertalkpages' => 'Mandeme un mëssagi ëd pòsta eletrònica quand a-i son dle modìfiche a mia pàgina dle ciaciarade',
 'tog-enotifminoredits' => "Mandeme un mëssagi an pòsta eletrònica bele che për le modìfiche cite dle pàgine o dj'archivi",
 'tog-enotifrevealaddr' => 'Lassé che a së s-ciàira mia adrëssa ëd pòsta eletrònica ant ij mëssagi ëd notìfica',
-'tog-shownumberswatching' => "Smon ël nùmer d'utent che as ten-o la pàgina sot euj",
+'tog-shownumberswatching' => "Smon-e ël nùmer d'utent che as ten-o la pàgina sot-euj",
 'tog-oldsig' => 'Firma esistenta:',
-'tog-fancysig' => "Trata la firma com test wiki (sensa n'anliura automàtica)",
-'tog-externaleditor' => "Dovré coma stàndard n'editor estern (mach për espert, a-i é dabzògn d'ampostassion speciaj dzora a sò ordinator. [//www.mediawiki.org/wiki/Manual:External_editors Për savèjne ëd pi.])",
-'tog-externaldiff' => "Dovré për stàndard un programa comparator estern (mach për espert, a-i é dabzògn d'ampostassion speciaj ansima a sò ordinator [//www.mediawiki.org/wiki/Manual:External_editors Për savèjne ëd pi.])",
-'tog-showjumplinks' => 'Dovré j\'anliure d\'acessibilità dla sòrt "Va a"',
+'tog-fancysig' => "Traté la firma com dël test wiki (sensa n'anliura automàtica)",
+'tog-showjumplinks' => "Dovré j'anliure d'acessibilità dla sòrt «Andé a»",
 'tog-uselivepreview' => "Dovré la fonsion ''Preuva dal viv'' (a-i va JavaScript) (sperimental)",
-'tog-forceeditsummary' => "Ciama conferma se ël somari dla modìfica a l'é veujd",
-'tog-watchlisthideown' => 'Stërma mie modìfiche ant la ròba che im ten-o sot euj',
-'tog-watchlisthidebots' => 'Stërma le modìfiche fàite daj trigomiro ant la lista dle ròbe che im ten-o sot euj',
-'tog-watchlisthideminor' => "Stërma le modìfiche cite da 'nt lòn che im ten-o sot euj",
-'tog-watchlisthideliu' => "Stërma le modìfiche fàite da j'utent registrà ant la lista dle ròbe che im ten-o sot euj",
-'tog-watchlisthideanons' => "Stërma le modìfiche fàite da j'utent anònim da 'nt lòn che im ten-o sot euj",
-'tog-watchlisthidepatrolled' => "Stërma le modìfiche verificà da 'nt la ròba che im ten-o sot euj",
-'tog-ccmeonemails' => "Mand-me còpia dij messagi ëd pòsta eletrònica che i-j mando a j'àotri utent",
-'tog-diffonly' => 'Smon pa ël contnù dla pàgina dapress a le diferense',
-'tog-showhiddencats' => 'Smon le categorìe stërmà',
+'tog-forceeditsummary' => "Ciamé conferma se ël resumé dla modìfica a l'é veujd",
+'tog-watchlisthideown' => 'Stërmé mie modìfiche ant la ròba che im ten-o sot-euj',
+'tog-watchlisthidebots' => 'Stërmé le modìfiche fàite daj trigomiro ant la lista dle ròbe che im ten-o sot-euj',
+'tog-watchlisthideminor' => "Stërmé le modìfiche cite da 'nt lòn che im ten-o sot-euj",
+'tog-watchlisthideliu' => "Stërmé le modìfiche fàite da j'utent registrà ant la lista dle ròbe che im ten-o sot-euj",
+'tog-watchlisthideanons' => "Stërmé le modìfiche fàite da j'utent anònim da 'nt lòn che im ten-o sot-euj",
+'tog-watchlisthidepatrolled' => "Stërmé le modìfiche dzorvejà da 'nt la ròba che im ten-o sot-euj",
+'tog-ccmeonemails' => "Mandeme na còpia dij mëssagi ëd pòsta eletrònica che i-j mando a j'àotri utent",
+'tog-diffonly' => 'Smon-e pa ël contnù dle pàgine sota le diferense',
+'tog-showhiddencats' => 'Smon-e le categorìe stërmà',
 'tog-noconvertlink' => "Disativé la conversion dij tìtoj ant j'anliure",
-'tog-norollbackdiff' => "Fa nen vëdde le diferense apress d'avèj ripristinà",
+'tog-norollbackdiff' => "Fé nen vëdde le diferense apress d'avèj ripristinà",
+'tog-useeditwarning' => 'Aviseme quand che i chito na pàgina ëd modìfiche con dle modìfiche nen salvà',
 
 'underline-always' => 'Sempe',
 'underline-never' => 'Mai',
-'underline-default' => 'Stàndard dël navigator',
+'underline-default' => 'Stàndard dël navigatoro dël tema',
 
 # Font style option in Special:Preferences
 'editfont-style' => "Stil dël font ëd l'àrea ëd modìfica:",
@@ -811,6 +810,8 @@ A esist già.',
 'content-failed-to-parse' => "Faliment ëd l'anàlisi dël contnù ëd $2 për ël model $1: $3",
 'invalid-content-data' => 'Dat dël contnù pa bon',
 'content-not-allowed-here' => "Ël contnù «$1» a l'é nen autorisà an sla pàgina [[$2]]",
+'editwarning-warning' => "Lassé sta pàgina-sì a peul fé an manera che it perde tute le modìfiche ch'it l'has fàit.
+S'it ses logà, it peule disabilité st'avis-sì ant la session \"{{int:prefs-editing}}\" dij tò gust.",
 
 # Content models
 'content-model-wikitext' => 'test wiki',
index 28ae908..ea4d727 100644 (file)
@@ -51,9 +51,6 @@ $messages = array(
 'tog-shownumberswatching' => 'ویکھن آلے لوکاں دی گنتی وکھاؤ۔',
 'tog-oldsig' => 'ہن والے دسخط:',
 'tog-fancysig' => 'دستخط نوں وکی ٹیکسڈ ونگوں؎ ورتو(without an automatic link)',
-'tog-externaleditor' => 'ہمیشہ بارلا لکھن والا ورتو (ماہر لوکاں واسطے، اس واسطے تواڑے کمپیوٹر تے خاص تبدیلیاں چائیدیاں نیں۔ [//www.mediawiki.org/wiki/Manual:External_editors مزید معلومات.])',
-'tog-externaldiff' => '
-ہمیشہ بارلا تبدیلی کرن والا ورتو (ماہر لوکاں واسطے، اس واسطے تواڑے کمپیوٹر تے خاص تبدیلیاں چائیدیاں نیں۔ [//www.mediawiki.org/wiki/Manual:External_editors مزید معلومات۔])',
 'tog-showjumplinks' => '"ایدر چلو" نوں رلن والے جوڑان نال جوڑو',
 'tog-uselivepreview' => 'لائیو پریویو ورتو',
 'tog-forceeditsummary' => 'مینون اوسے ویلے دسو جدوں خالی سمری تے آؤ۔',
@@ -67,6 +64,7 @@ $messages = array(
 'tog-diffonly' => 'تبدیلی توں علاوہ صفحہ نا وکھاؤ',
 'tog-showhiddencats' => 'لکیاں کیٹاگریاں وکھاؤ',
 'tog-norollbackdiff' => 'صفحے دی واپسی تے تبدیلی کڈ دو',
+'tog-useeditwarning' => 'جدوں میں کوئی صفحہ تبدیلی کر کے بچاۓ بغیر چھڈن لگاں تے منوں دس دیو',
 
 'underline-always' => 'ہمیشہ',
 'underline-never' => 'کدی وی نئیں',
@@ -757,6 +755,8 @@ Custom .css تے .js pages use a lowercase title, e.g. {{ns:user}}:Foo/vector.cs
 'edit-no-change' => 'تواڈی تبدیلی ول کوئی توجہ نئیں، کیوں جے لکھت چ کوئی تبدیلی نئیں۔',
 'edit-already-exists' => 'نواں صفہ نئیں بن سکدا۔
 ایہ پہلے ای ہیگا اے۔',
+'editwarning-warning' => 'اے صفے توں جان تے ہو سکدا اوہ ساریاں تبدیلیاں مک جان جیہڑیاں تساں بناياں نیں۔
+اگر تسیں لاکان او، تسیں ایڈیٹنگ سیکشن چ  اپنی پسنداں چ ایس خبرداری نوں پعلے ناں۔',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''خبردار:''' ایس صفے تے چوکھیاں ساریاں پارسر کلز نیں۔
@@ -1021,15 +1021,6 @@ $1",
 تسیں گوگل تے کھوج کرو۔
 اے گل یاد رکھنا جے انڈیکس {{SITENAME}} دے پرانے ہون۔',
 
-# Quickbar
-'qbsettings' => 'کوئکبار',
-'qbsettings-none' => 'کوئی نئیں',
-'qbsettings-fixedleft' => 'فکسڈ کھبے',
-'qbsettings-fixedright' => 'فکسڈ سجے',
-'qbsettings-floatingleft' => 'ہلدا کھبے',
-'qbsettings-floatingright' => 'ہلدا سجے',
-'qbsettings-directionality' => '!!!!فکسڈ، تھاڈی بولی تے لپی نال',
-
 # Preferences page
 'preferences' => 'تانگاں',
 'mypreferences' => 'میریاں تانگاں',
@@ -1573,7 +1564,6 @@ $1",
 'http-read-error' => 'ایچ ٹی ٹی پی  غلطی پڑھدی اے۔',
 'http-timed-out' => 'ایچ ٹی ٹی پی  دی مانگ ویلیوں بار۔',
 'http-curl-error' => 'ایچ ٹی ٹی پی  : $1 لیان چ غلطی۔',
-'http-host-unreachable' => 'ایچ ٹی ٹی پی  تک ناں پونچ سکیا۔',
 'http-bad-status' => 'ایچ ٹی ٹی پی : $1 $2 دی مانگ ویلے رپھڑ',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1881,15 +1871,6 @@ $1",
 'listusers-noresult' => 'ورتن آلا نئیں لبیا۔',
 'listusers-blocked' => '(روکیا گیا)',
 
-# Special:ActiveUsers
-'activeusers' => 'کم کرن والیاں دی لسٹ',
-'activeusers-intro' => 'اے اوناں ورتن والیاں دی لسٹ اے جنان پچھلے $1 {{PLURAL:$1|دن|دناں}} چ کم کیتا اے۔',
-'activeusers-count' => '$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}} پچھلے{{PLURAL:$3|دن|$3 دن}} چ',
-'activeusers-from' => 'ورتن والے ایس توں شروع ہون والے دسو:',
-'activeusers-hidebots' => 'بوٹ چھپاؤ',
-'activeusers-hidesysops' => 'مکھۓ لکاؤ',
-'activeusers-noresult' => 'کوئی ورتن والا نئیں لبیا۔',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ورتن ٹرلی حق',
 'listgrouprights-summary' => 'تھلے اک لسٹ اے ورتن ٹولیاں دی ای وکی تے، اپنے رلدے حقاں نال۔ 
index bdacefc..9094dc5 100644 (file)
@@ -200,6 +200,8 @@ $messages = array(
 'tog-ccmeonemails' => 'هغه برېښليکونه چې زه يې نورو ته لېږم، د هغو يوه کاپي دې ماته هم راشي',
 'tog-diffonly' => 'د توپيرونو نه لاندې د مخ مېنځپانګه پټول',
 'tog-showhiddencats' => 'پټې وېشنيزې ښکاره کول',
+'tog-norollbackdiff' => 'پرشاتمبولو وروسته توپيرونه نه ښودل',
+'tog-useeditwarning' => 'کله چې يو سمون مخ څخه د بدلونونو د خوندي کولو پرته وځم خبر دې شم',
 
 'underline-always' => 'تل',
 'underline-never' => 'هېڅکله',
@@ -311,6 +313,7 @@ $messages = array(
 'vector-action-protect' => 'ژغورل',
 'vector-action-undelete' => 'ناړنګول',
 'vector-action-unprotect' => 'ژغورنه بدلول',
+'vector-simplesearch-preference' => 'د پلټنې ساده پټه چارنول (يوازې په وېکټور پوښۍ کار کوي)',
 'vector-view-create' => 'جوړول',
 'vector-view-edit' => 'سمول',
 'vector-view-history' => 'پېښليک کتل',
@@ -535,9 +538,14 @@ $1',
 دا په پام کې وساتۍ چې تر څو تاسې د خپل کتنمل حافظه نه وي سپينه کړې، نو ځينې مخونو کې به لا تر اوسه پورې په غونډال کې ننوتي ښکارۍ.",
 'welcomeuser' => '$1، ښه راغلې!',
 'yourname' => 'کارن-نوم:',
+'userlogin-yourname' => 'کارن-نوم',
+'userlogin-yourname-ph' => 'کارن-نوم مو وليکۍ',
 'yourpassword' => 'پټنوم:',
+'userlogin-yourpassword' => 'پټنوم',
+'userlogin-yourpassword-ph' => 'پټنوم مو وليکۍ',
 'yourpasswordagain' => 'پټنوم بيا وليکه',
 'remembermypassword' => 'زما پټنوم په دې کمپيوټر (تر $1 {{PLURAL:$1|ورځې|ورځو}}) په ياد وساته!',
+'userlogin-remembermypassword' => 'ما په ياد لره',
 'securelogin-stick-https' => 'وروسته د ننوتلو HTTPS سره تړلی پاتې کېدل',
 'yourdomainname' => 'ستاسې شپول:',
 'login' => 'ننوتل',
@@ -548,6 +556,8 @@ $1',
 'logout' => 'وتل',
 'userlogout' => 'وتل',
 'notloggedin' => 'غونډال کې نه ياست ننوتي',
+'userlogin-noaccount' => 'ګڼون نه لرې؟',
+'userlogin-joinproject' => 'د {{SITENAME}} سره يوځای شه',
 'nologin' => 'کارن-نوم نه لرې؟ $1.',
 'nologinlink' => 'يو ګڼون جوړول',
 'createaccount' => 'ګڼون جوړول',
@@ -643,7 +653,7 @@ $1',
 
 # Special:PasswordReset
 'passwordreset' => 'پټنوم بياپرځايول',
-'passwordreset-text' => 'د Ø¯Û\90 Ù\84پارÙ\87 Ú\86Û\90 Ø³ØªØ§Ø³Û\90 Ø¯ Ú«Ú¼Ù\88Ù\86 Ø¨Ø´Ù¾Ú\93Û\90 Ú\85رګÙ\86دÙ\86Û\90 Ø¯Ø±Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ø´Ù\8a Ù\86Ù\88 دا فورمه ډکه کړۍ.',
+'passwordreset-text' => 'د Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ø¯  Ø¨Ù\8aاپرÚ\81اÛ\8c Ú©Û\90دÙ\86Û\90 Ù\84پارÙ\87 دا فورمه ډکه کړۍ.',
 'passwordreset-legend' => 'پټنوم بياپرځايول',
 'passwordreset-disabled' => 'په دې ويکي پټنوم بياپرځای کولو کړنه ناچارنه شوې.',
 'passwordreset-pretext' => '{{PLURAL:$1||د لاندې اومتوک يوه برخه مالومات وليکۍ}}',
@@ -655,7 +665,7 @@ $1',
 'passwordreset-emailelement' => 'کارن-نوم: $1
 لنډمهاله پټنوم: $2',
 'passwordreset-emailsent' => 'د پټنوم بيا پرځای کېدنې لپاره برېښليک درولېږل شو.',
-'passwordreset-emailsent-capture' => 'د Ù\8aادÙ\88Ù\86Û\90 Ù\84پارÙ\87 Ù\8aÙ\88 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ù\88Ù\84Û\90Ú\96Ù\84 Ø´Ù\88، برېښليک په لاندې توګه ښودل شوی.',
+'passwordreset-emailsent-capture' => 'د Ù¾Ù¼Ù\86Ù\88Ù\85 Ø¨Ù\8aاپرÚ\81اÛ\8c Ú©Û\90دÙ\86Û\90 Ù\84پار Ù\85Ù\88 Ù\8aÙ\88 Ø¨Ø±Û\90Ú\9aÙ\84Ù\8aÚ© Ø¯Ø±Ù\88Ù\84Û\90Ú\96Ù\87، برېښليک په لاندې توګه ښودل شوی.',
 
 # Special:ChangeEmail
 'changeemail' => 'برېښليک پته بدلول',
@@ -823,6 +833,7 @@ $1',
 'content-model-wikitext' => 'ويکي متن',
 'content-model-text' => 'ساده متن',
 'content-model-javascript' => 'جاواسکرېپټ',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''ګواښنه:''' دا کينډۍ د خپل ټاکلي بريد نه ډېره لويه ده.
@@ -999,6 +1010,7 @@ $1',
 'prefs-beta' => 'د آزمېښتي بڼې ځانګړنې',
 'prefs-datetime' => 'نېټه او وخت',
 'prefs-labs' => 'د آزمېنتون ځانګړنې',
+'prefs-user-pages' => 'کارن مخونه',
 'prefs-personal' => 'د کارن پېژنليک',
 'prefs-rc' => 'وروستي بدلونونه',
 'prefs-watchlist' => 'کتنلړ',
@@ -1185,9 +1197,13 @@ $1',
 'action-deletedhistory' => 'د دې مخ ړنګ شوی پېښليک کتل',
 'action-browsearchive' => 'ړنګ مخونه پلټل',
 'action-undelete' => 'همدا مخ ناړنګول',
+'action-suppressionlog' => 'دا شخصي يادښت کتل',
 'action-block' => 'پر دې کارن د سمون د آسانتياوؤ بنديز لګول',
 'action-protect' => 'د دې مخ د ژغورنې کچه بدلول',
+'action-mergehistory' => 'د دې مخ پېښليک سره اخږل',
 'action-userrights' => 'د کارن ټولې رښتې سمول',
+'action-userrights-interwiki' => 'په نورو ويکي ګانو د کارنانو رښتې سمول',
+'action-siteadmin' => 'توکبنسټ کولپول يا نه کولپول',
 'action-sendemail' => 'برېښليکونه لېږل',
 
 # Recent changes
@@ -1219,9 +1235,11 @@ $1',
 'boteditletter' => 'روباټ',
 'number_of_watching_users_pageview' => '[$1  {{PLURAL:$1|کارن|کارنان}} يې ګوري]',
 'rc_categories_any' => 'هر يو',
+'rc-change-size-new' => '$1 {{PLURAL:$1|بايټ|بايټونه}} د بدلون وروسته',
 'newsectionsummary' => '/* $1 */ نوې برخه',
 'rc-enhanced-expand' => 'تفصيل ښکاره کول (د دې لپاره د JavaScript اړتيا ده)',
 'rc-enhanced-hide' => 'تفصيل پټول',
+'rc-old-title' => 'اصلاً د "$1" په توګه جوړ شو',
 
 # Recent changes linked
 'recentchangeslinked' => 'اړونده بدلونونه',
@@ -1237,6 +1255,8 @@ $1',
 # Upload
 'upload' => 'دوتنه پورته کول',
 'uploadbtn' => 'دوتنه پورته کول',
+'reuploaddesc' => 'پورته کېدنه ناګارل او بېرته د پورته کېدنې فورمې ته ورګرځېدل',
+'upload-tryagain' => 'د بدلون موندلې دوتنې څرګندونې سپارل',
 'uploadnologin' => 'غونډال کې نه ياست ننوتي',
 'uploadnologintext' => 'ددې لپاره چې دوتنې پورته کړای شۍ، نو لومړی غونډال کې [[Special:UserLogin|ورننوځۍ]].',
 'uploaderror' => 'د پورته کولو ستونزه',
@@ -1302,6 +1322,7 @@ $1',
 'upload-failure-subj' => 'د پورته کېدو ستونزه',
 'upload-warning-subj' => 'د پورته کولو ګواښ',
 
+'upload-proto-error' => 'ناسم پروتوکول',
 'upload-file-error' => 'کورنۍ ستونزه',
 'upload-unknown-size' => 'ناڅرګنده کچه',
 'upload-http-error' => 'د HTTP يوه ستونزه رامېنځ ته شوې: $1',
@@ -1428,6 +1449,7 @@ $1',
 'statistics-header-hooks' => 'بل شمار',
 'statistics-articles' => 'مېنځپانګيز مخونه',
 'statistics-pages' => 'مخونه',
+'statistics-pages-desc' => 'د ويکي ټول مخونه، د خبرو اترو، مخ ګرځېدنو، او لا نورو مخونو په ګډون.',
 'statistics-files' => 'پورته شوې دوتنې',
 'statistics-edits' => 'د {{SITENAME}} د جوړېدو راهيسې د مخونو سمون',
 'statistics-edits-average' => 'پر يوه مخ د سمون منځوۍ کچه',
@@ -1441,6 +1463,8 @@ $1',
 'disambiguations' => 'د مبهمو مخونو سره تړلي مخونه',
 'disambiguationspage' => 'Template:ناجوت',
 
+'pageswithprop-submit' => 'ورځه',
+
 'doubleredirects' => 'دوه ځلي ورګرځېدنې',
 
 'brokenredirects' => 'ماتې ورګرځېدنې',
@@ -1744,8 +1768,8 @@ $UNWATCHURL  نه ليدنه وکړۍ
 تاسې د همدې مخ د ژغورنې په کچه کې بدلون راوستلای شی، خو دا به په ځوړاوبيزه ژغورنه اغېزمنه نه کړي.',
 'protect-default' => 'ټول کارنان پرېښودل',
 'protect-fallback' => 'يوازې د "$1" اجازې لرونکي کارنان پرېښودل',
-'protect-level-autoconfirmed' => 'پر Ù\86Ù\88ؤ Ø§Ù\88 Ù\86اثبتÙ\87 Ú©Ø§Ø±Ù\86اÙ\86Ù\88 Ø¨Ù\86دÙ\8aز Ù\84Ú«Ù\88Ù\84',
-'protect-level-sysop' => 'يواځې پازوالان',
+'protect-level-autoconfirmed' => 'Ù\8aÙ\88ازÛ\90 ØªØ§Ù\8aÙ\8aد Ø´Ù\88Ù\8a Ú©Ø§Ø±Ù\86اÙ\86',
+'protect-level-sysop' => 'يواځې پازوالان پرېښودل',
 'protect-summary-cascade' => 'ځوړاوبيز',
 'protect-expiring' => 'په $1 (UTC) پای ته رسېږي',
 'protect-expiring-local' => 'پای نېټه $1',
@@ -2643,17 +2667,19 @@ $5
 'htmlform-submit' => 'سپارل',
 'htmlform-reset' => 'بدلونونه ناکړل',
 'htmlform-selectorother-other' => 'بل',
+'htmlform-no' => 'نه',
+'htmlform-yes' => 'هو',
 
 # New logging system
-'logentry-delete-delete' => '$1 د $3 مخ ړنګ کړ',
+'logentry-delete-delete' => '$1 د $3 مخ {{GENDER:$2|ړنګ کړ}}',
 'revdelete-content-hid' => 'مېنځپانګه پټېدلې',
 'revdelete-uname-hid' => 'کارن نوم پټ شوی',
 'revdelete-content-unhid' => 'مېنځپانګه ښکاره شوی',
 'revdelete-uname-unhid' => 'ښکاره کارن-نوم',
-'logentry-move-move' => '$1 د $3 مخ $4 ته ولېږداوه',
-'logentry-newusers-newusers' => 'د $1 کارن ګڼون جوړ شو',
-'logentry-newusers-create' => 'د $1 کارن ګڼون جوړ شو',
-'logentry-newusers-autocreate' => 'د $1 ګڼون په اتوماتيک ډول جوړ شو',
+'logentry-move-move' => '$1 د $3 مخ $4 ته {{GENDER:$2|ولېږداوه}}',
+'logentry-newusers-newusers' => 'د $1 کارن ګڼون {{GENDER:$2|جوړ شو}}',
+'logentry-newusers-create' => 'د $1 کارن ګڼون {{GENDER:$2|جوړ شو}}',
+'logentry-newusers-autocreate' => 'د $1 ګڼون په اتوماتيک ډول {{GENDER:$2|جوړ شو}}',
 'rightsnone' => '(هېڅ)',
 
 # Feedback
index c51fe22..a11deac 100644 (file)
@@ -342,8 +342,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Mostrar o número de utilizadores a vigiar',
 'tog-oldsig' => 'Assinatura existente:',
 'tog-fancysig' => 'Tratar assinatura como texto wiki (sem link automático)',
-'tog-externaleditor' => 'Por omissão, utilizar um editor externo (só para utilizadores avançados, exige configurações adicionais no seu computador. [//www.mediawiki.org/wiki/Manual:External_editors Mais informações.])',
-'tog-externaldiff' => 'Por omissão, utilizar diferenças externas (só para utilizadores avançados, exige configurações adicionais no seu computador. [//www.mediawiki.org/wiki/Manual:External_editors Mais informações.])',
 'tog-showjumplinks' => 'Possibilitar links de acessibilidade "{{int:jumpto}}"',
 'tog-uselivepreview' => 'Usar a antevisão ao vivo (requer JavaScript; é experimental)',
 'tog-forceeditsummary' => 'Avisar-me se deixar o resumo da edição vazio',
@@ -358,6 +356,7 @@ $messages = array(
 'tog-showhiddencats' => 'Mostrar categorias ocultas',
 'tog-noconvertlink' => 'Impossibilitar a conversão dos títulos de links',
 'tog-norollbackdiff' => 'Omitir diferenças depois de reverter edições em bloco',
+'tog-useeditwarning' => 'Avisar-me ao abandonar uma página editada sem gravar as alterações.',
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Nunca',
@@ -1095,6 +1094,8 @@ Ela parece ter sido eliminada.',
 Ela já existia.',
 'defaultmessagetext' => 'Texto da mensagem padrão',
 'content-not-allowed-here' => 'Conteúdo do tipo "$1" não é permitido na página [[$2]]',
+'editwarning-warning' => 'Sair desta página fará com que você perca todas as alterações feitas por você.
+Se você fez login, pode desabilitar este aviso na seção "{{int:prefs-editing}}" das suas preferências.',
 
 # Content models
 'content-model-wikitext' => 'wikitexto',
@@ -1386,15 +1387,6 @@ Tente usar o prefixo ''all:'' para pesquisar todo o conteúdo (incluindo página
 Entretanto, pode realizar pesquisas através do Google.
 Note, no entanto, que a indexação da {{SITENAME}} neste motor de busca pode estar desactualizada.',
 
-# Quickbar
-'qbsettings' => 'Barra Rápida',
-'qbsettings-none' => 'Nenhuma',
-'qbsettings-fixedleft' => 'Fixa à esquerda',
-'qbsettings-fixedright' => 'Fixa à direita',
-'qbsettings-floatingleft' => 'Flutuante à esquerda',
-'qbsettings-floatingright' => 'Flutuante à direita',
-'qbsettings-directionality' => 'Fixa, conforme a direccionalidade da escrita na sua língua',
-
 # Preferences page
 'preferences' => 'Preferências',
 'mypreferences' => 'Preferências',
@@ -1958,7 +1950,6 @@ Para optimizar a segurança, o img_auth.php está impossibilitado de executar.',
 'http-read-error' => 'Erro de leitura HTTP.',
 'http-timed-out' => 'O pedido HTTP expirou.',
 'http-curl-error' => 'Ocorreu um erro ao aceder à URL: $1',
-'http-host-unreachable' => 'Não foi possível aceder à URL',
 'http-bad-status' => 'Ocorreu um problema durante o pedido HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3068,13 +3059,8 @@ Permite colocar uma justificação no resumo da edição.',
 
 # Stylesheets
 'common.css' => '/* Código CSS colocado aqui será aplicado a todos os temas */',
-'standard.css' => '/* Código CSS colocado aqui afectará os utilizadores do tema Clássico */',
-'nostalgia.css' => '/* Código CSS colocado aqui afectará os utilizadores do tema Nostalgia */',
 'cologneblue.css' => '/* Código CSS colocado aqui afectará os utilizadores do tema Azul colonial */',
 'monobook.css' => '/* Código CSS colocado aqui afectará os utilizadores do tema Monobook */',
-'myskin.css' => '/* Código CSS colocado aqui afectará os utilizadores do tema MySkin */',
-'chick.css' => '/* Código CSS colocado aqui afectará os utilizadores do tema Chique */',
-'simple.css' => '/* Código CSS colocado aqui afectará os utilizadores do tema Simples */',
 'modern.css' => '/* Código CSS colocado aqui afectará os utilizadores do tema Moderno */',
 'vector.css' => '/* Código CSS colocado aqui afectará os utilizadores do tema Vector */',
 'print.css' => '/* Código CSS colocado aqui afectará as impressões */',
@@ -3082,13 +3068,8 @@ Permite colocar uma justificação no resumo da edição.',
 
 # Scripts
 'common.js' => '/* Código Javascript colocado aqui será carregado para todos os utilizadores em cada carregamento de página */',
-'standard.js' => '/* Código Javascript colocado aqui será carregado para utilizadores do tema Clássico */',
-'nostalgia.js' => '/* Código Javascript colocado aqui será carregado para utilizadores do tema Nostalgia */',
 'cologneblue.js' => '/* Código Javascript colocado aqui será carregado para utilizadores do tema Azul colonial */',
 'monobook.js' => '/* Código Javascript colocado aqui será carregado para utilizadores do tema Monobook */',
-'myskin.js' => '/* Código Javascript colocado aqui será carregado para utilizadores do tema MySkin */',
-'chick.js' => '/* Código Javascript colocado aqui será carregado para utilizadores do tema Chick */',
-'simple.js' => '/* Código Javascript colocado aqui será carregado para utilizadores do tema Simples */',
 'modern.js' => '/* Código Javascript colocado aqui será carregado para utilizadores do tema Moderno */',
 'vector.js' => '/* Código Javascript colocado aqui será carregado para utilizadores do tema Vector */',
 
@@ -3158,13 +3139,8 @@ Este bloqueio foi provavelmente causado por um link para um site externo que con
 'pageinfo-category-files' => 'Número de ficheiros',
 
 # Skin names
-'skinname-standard' => 'Clássico',
-'skinname-nostalgia' => 'Nostalgia',
 'skinname-cologneblue' => 'Azul colonial',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Chique',
-'skinname-simple' => 'Simples',
 'skinname-modern' => 'Moderno',
 'skinname-vector' => 'Vector',
 
index 7a64de3..48e83d2 100644 (file)
@@ -43,6 +43,7 @@
  * @author ManoDbo
  * @author McDutchie
  * @author MetalBrasil
+ * @author MisterSanderson
  * @author Opraco
  * @author Pedroca cerebral
  * @author Ppena
@@ -53,6 +54,7 @@
  * @author Teles
  * @author TheGabrielZaum
  * @author Urhixidur
+ * @author Vivaelcelta
  * @author Vuln
  * @author Waldir
  * @author Yves Marques Junqueira
@@ -346,8 +348,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Mostrar o número de usuários que estão vigiando',
 'tog-oldsig' => 'Assinatura existente:',
 'tog-fancysig' => 'Tratar assinatura como wikitexto (sem link automático)',
-'tog-externaleditor' => 'Utilizar editor externo por padrão (apenas para usuários avançados; requer configurações adicionais em seu computador. [//www.mediawiki.org/wiki/Manual:External_editors Mais informações.])',
-'tog-externaldiff' => 'Utilizar comparador de versões externo por padrão (apenas para usuários avançados; requer configurações adicionais em seu computador. [//www.mediawiki.org/wiki/Manual:External_editors Mais informações.])',
 'tog-showjumplinks' => 'Ativar links de acessibilidade "ir para"',
 'tog-uselivepreview' => 'Utilizar pré-visualização em tempo real (JavaScript) (Experimental)',
 'tog-forceeditsummary' => 'Avisar-me ao introduzir um sumário vazio',
@@ -362,6 +362,7 @@ $messages = array(
 'tog-showhiddencats' => 'Exibir categorias ocultas',
 'tog-noconvertlink' => 'Desabilitar conversão de títulos de links',
 'tog-norollbackdiff' => 'Omitir diferenças depois de desfazer edições em bloco',
+'tog-useeditwarning' => 'Avisar-me quando eu deixar uma janela de edição sem ter salvo as alterações',
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Nunca',
@@ -1099,6 +1100,8 @@ Ela já existia.',
 'content-failed-to-parse' => 'Falha ao analisar o conteúdo $2 para o modelo $1: $3',
 'invalid-content-data' => 'Dados de conteúdo inválidos',
 'content-not-allowed-here' => 'Conteúdo do tipo "$1" não é permitido na página [[$2]]',
+'editwarning-warning' => 'Abandonar esta página pode fazer com que você perca todas as alterações que fez.
+Se você estiver autenticado, você pode desabilitar este aviso na seção "{{int:prefs-editing}}" de suas preferências.',
 
 # Content models
 'content-model-wikitext' => 'wikitexto',
@@ -3965,14 +3968,14 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 'logentry-delete-delete' => '$1 apagou a página $3',
 'logentry-delete-restore' => '$1 restaurou a página $3',
 'logentry-delete-event' => '$1 alterou a visibilidade {{PLURAL:$5|de uma entrada|de $5 entradas}} do registro $3: $4',
-'logentry-delete-revision' => '$1 alterou a visibilidade de {{PLURAL:$5|uma revisão|$5 revisões}} em $3: $4',
-'logentry-delete-event-legacy' => '$1 alterou a visibilidade de uma entrada em $3',
-'logentry-delete-revision-legacy' => '$1 alterou a visibilidade de uma revisão em $3',
+'logentry-delete-revision' => '$1 alterou a visibilidade de {{PLURAL:$5|uma revisão|$5 revisões}} na página $3: $4',
+'logentry-delete-event-legacy' => '$1 alterou a visibilidade de eventos de log em $3',
+'logentry-delete-revision-legacy' => '$1 alterou a visibilidade de revisões na página $3',
 'logentry-suppress-delete' => '$1 suprimiu a página $3',
 'logentry-suppress-event' => '$1 alterou secretamente a visibilidade {{PLURAL:$5|de uma entrada|das $5 entradas}} em $3: $4',
 'logentry-suppress-revision' => '$1 alterou secretamente a visibilidade {{PLURAL:$5|de uma revisão|das $5 revisões}} em $3: $4',
 'logentry-suppress-event-legacy' => '$1 alterou secretamente a visibilidade das entradas em $3',
-'logentry-suppress-revision-legacy' => '$1 alterou secretamente a visibilidade das revisões em $3',
+'logentry-suppress-revision-legacy' => '$1 alterou secretamente a visibilidade de revisões na página $3',
 'revdelete-content-hid' => 'conteúdo oculto',
 'revdelete-summary-hid' => 'sumário de edição oculto',
 'revdelete-uname-hid' => 'nome de usuário oculto',
@@ -3991,7 +3994,7 @@ As imagens serão exibidas em sua resolução máxima, outros tipos de arquivos
 'logentry-newusers-create' => 'A conta de usuário $1 foi criada',
 'logentry-newusers-create2' => 'A conta de usuário $3 foi criada por $1',
 'logentry-newusers-byemail' => 'A conta de usuário $3 foi criada por $1, com a senha sendo enviada por e-mail',
-'logentry-newusers-autocreate' => 'A conta $1 foi criada automaticamente',
+'logentry-newusers-autocreate' => 'A conta de usuário $1 foi criada automaticamente',
 'logentry-rights-rights' => '$1 alterou os grupos de usuário de $3 de $4 para $5',
 'logentry-rights-rights-legacy' => '$1 alterou os grupos de $3',
 'logentry-rights-autopromote' => '$1 foi promovido automaticamente de $4 a $5',
index 0abf42e..022b139 100644 (file)
@@ -79,6 +79,7 @@
  * @author Mido
  * @author Mihai
  * @author Minh Nguyen
+ * @author Moha
  * @author Mormegil
  * @author Mpradeep
  * @author Murma174
@@ -185,8 +186,6 @@ Is only shown if {{msg-mw|tog-enotifusertalkpages}} or/and {{msg-mw|tog-enotifwa
 'tog-shownumberswatching' => 'Toggle option used in [[Special:Preferences]], in the section for recent changes. When this option is activated, the entries in recent changes includes the number of users who watch pages. {{Gender}}',
 'tog-oldsig' => 'Used in [[Special:Preferences]], tab User profile. {{Gender}}',
 'tog-fancysig' => 'In user preferences under the signature box.  {{Gender}}',
-'tog-externaleditor' => "[[Special:Preferences]], tab 'Edit'. Offers user to use an external editor by default. {{Gender}}",
-'tog-externaldiff' => "[[Special:Preferences]], tab 'Edit'. Offers user to use an external diff program by default. {{Gender}}",
 'tog-showjumplinks' => 'Toggle option used in [[Special:Preferences]]. The "jump to" part should be the same with {{msg-mw|jumpto}} (or you can use <nowiki>{{int:jumpto}}</nowiki>). These links are shown in some of the older skins as "jump to: navigation, search" but they are hidden by default (you can enable them with this option). {{Gender}}',
 'tog-uselivepreview' => 'Toggle option used in [[Special:Preferences]]. Live preview is an experimental feature (unavailable by default) to use edit preview without loading the page again. {{Gender}}',
 'tog-forceeditsummary' => "Toggle option used in [[Special:Preferences]] to force an edit ''{{msg-mw|summary}}''. {{Gender}}",
@@ -204,6 +203,7 @@ Is only shown if {{msg-mw|tog-enotifusertalkpages}} or/and {{msg-mw|tog-enotifwa
 ''(the message is considered optional because it is only used in wikis with language variants)''",
 'tog-norollbackdiff' => "Option in [[Special:Preferences]], 'Misc' tab. Only shown for users with the rollback right. By default a diff is shown below the return screen of a rollback. Checking this preference toggle will suppress that. {{Gender}}
 {{Identical|Rollback}}",
+'tog-useeditwarning' => 'Used as label for the checkbox in [[Special:Preferences#mw-prefsection-editing|Special:Preferences]].',
 
 'underline-always' => 'Used in [[Special:Preferences#mw-prefsection-rendering|Preferences]].
 
@@ -1042,18 +1042,27 @@ Parameters:
 'yourname' => "{{doc-important|<nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is '''NOT''' supported.}}
 In user preferences.
 {{Identical|Username}}",
+'userlogin-yourname' => 'In new vertical user login & create account forms, label for username field.
+{{Identical|Username}}',
+'userlogin-yourname-ph' => 'Placeholder text in new userlogin/create account form field.',
 'yourpassword' => 'In user preferences
 
 {{Identical|Password}}',
+'userlogin-yourpassword' => 'In new vertical user login & create account forms, label for password field.
+{{Identical|Password}}',
+'userlogin-yourpassword-ph' => 'Placeholder text in new userlogin form for password field.',
 'yourpasswordagain' => 'In user preferences',
 'remembermypassword' => 'A check box in [[Special:UserLogin]]
 
 {{Identical|Remember my login on this computer}}',
+'userlogin-remembermypassword' => 'The text for a check box in the new-style [[Special:UserLogin]].
+{{Identical|Remember me}}',
+'userlogin-signwithsecure' => 'Text of link to HTTPS login form',
 'securelogin-stick-https' => 'Used as label for checkbox.',
 'yourdomainname' => 'Used as label for listbox.',
 'password-change-forbidden' => 'Error message shown when an external authentication source does not allow the password to be changed.',
 'externaldberror' => 'This message is thrown when a valid attempt to change the wiki password for a user fails because of a database error or an error from an external system.',
-'login' => "Shown as the caption of the button at [[Special:UserLogin]], and also to anonymous users in the upper right corner of the page when they can't create an account (otherwise the message {{msg-mw|nav-login-createaccount}} is shown there).
+'login' => "Shown as the caption of the button at [[Special:UserLogin]], and also to anonymous users in the upper right corner of the page when they can't create an account (otherwise the message {{msg-mw|nav-login-createaccount}} is shown there). Also the title of the new login special page, which does not combine Log in & Create account.
 
 See also:
 * {{msg-mw|Login}}
@@ -1081,8 +1090,12 @@ See also:
 'notloggedin' => 'This message is displayed in the standard skin when not logged in. The message is placed above the login link in the top right corner of pages.
 
 {{Identical|Not logged in}}',
+'userlogin-noaccount' => 'In the new-style [[Special:Userlogin]] form, this is the text prior to button inviting user to join project.
+{{Identical|Do not have an account}}',
+'userlogin-joinproject' => 'Text of button inviting user to create an account',
 'nologin' => 'A message shown in the log in form. Parameters:
-* $1 - a link to the account creation form, and the text of it is {{msg-mw|Nologinlink}}',
+* $1 - a link to the account creation form, and the text of it is {{msg-mw|Nologinlink}}
+{{Identical|Do not have an account}}',
 'nologinlink' => 'Text of the link to the account creation form. Before that link, the message {{msg-mw|Nologin}} appears.
 {{Identical|Create an account}}',
 'createaccount' => '{{doc-special|CreateAccount}}
@@ -1097,6 +1110,15 @@ It is also used on the top of the page for logged out users, where it appears ne
 'gotaccountlink' => 'Text of the link to the log in form. Before that link, the message {{msg-mw|Gotaccount}} appears.
 {{Identical|Log in}}',
 'userlogin-resetlink' => 'Used on the login page.',
+'helplogin-url' => '{{doc-important|Do not translate the namespace name <code>Help</code>.}}
+Used as name of the page that provides information about logging into the wiki.
+
+Used as a link target in the message {{msg-mw|Userlogin-helplink}}.',
+'userlogin-helplink' => '{{doc-important|Do not change <code><nowiki>{{MediaWiki:helplogin-url}}</nowiki></code>.}}
+Wikitext linking to login help.
+
+See also:
+* {{msg-mw|Helplogin-url}}',
 'createaccountmail' => 'Button text for creating a new account and sending the new password to the specified e-mail address directly, as used on [[Special:UserLogin/signup]] if creating accounts by e-mail is allowed.',
 'createaccountreason' => '{{Identical|Reason}}',
 'badretype' => 'Used as error message when the new password and its retype do not match.',
@@ -1228,6 +1250,7 @@ See also:
 'passwordreset-text' => 'Text on [[Special:PasswordReset]]',
 'passwordreset-legend' => '{{Identical|Reset password}}',
 'passwordreset-disabled' => 'Used as error message in changing password.',
+'passwordreset-emaildisabled' => "Used as error message in changing password when site's email feature is disabled.",
 'passwordreset-pretext' => 'These instructions are shown on the password reset dialogue, which can, in principle, take the user\'s email address as well as, or instead of, their username. This text displays above one or more fields, at least one of which needs to be completed, and the message does not know which routes are available, so it needs to refer to some vague noun rather than specifically "username".
 "One of the pieces of data" means "an info"/"a datum" (probably to be translatea with a singular noun in your language if available). Parameters:
 * $1 is the number of password reset routes. This is never 1, but always two or more. Thus, the first plural option is empty in English.',
@@ -1264,8 +1287,9 @@ See also:
 See also:
 * {{msg-mw|Passwordreset-emailsent}}
 * {{msg-mw|Passwordreset-emailerror-capture}}',
-'passwordreset-emailerror-capture' => 'Error message displayed in [[Special:PasswordReset]] when sending an e-mail fails. Parameters:
+'passwordreset-emailerror-capture' => 'Error message displayed in [[Special:PasswordReset]] when sending an email fails. Parameters:
 * $1 - error message
+* $2 - username, used for GENDER
 See also:
 * {{msg-mw|Passwordreset-emailsent}}
 * {{msg-mw|Passwordreset-emailsent-capture}}',
@@ -1603,6 +1627,9 @@ See also:
 'content-not-allowed-here' => 'Error message indicating that the desired content model is not supported in given localtion.
 * $1 - the human readable name of the content model: {{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}
 * $2 - the title of the page in question',
+'editwarning-warning' => "{{doc-important|Do ''not'' use <nowiki>{{int:prefs-editing}}</nowiki> for \"Editing\". It is forbidden in this message, see [[mwr:68405]].}}
+
+but you can see the text of that button here: {{msg-mw|Prefs-editing}}",
 
 # Content models
 'content-model-wikitext' => 'Name for the wikitext content model, used when decribing what type of content a page contains.
@@ -2460,6 +2487,8 @@ This option lets your time zone setting use the one that is used on the wiki (of
 'prefs-emailconfirm-label' => 'Sub-heading in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.',
 'prefs-textboxsize' => "Header for the box specifying the size of the editing window, displayed on the 'editing' tab of the [[Special:Preferences|user preferences]] special page.",
 'youremail' => 'Label of the e-mail text box of the "E-mail options" section of [[Special:Preferences]].
+Also used on create account form.
+
 {{Identical|E-mail}}',
 'username' => 'Username field in [[Special:Preferences]]. $1 is the current user name for GENDER distinction (depends on sex setting).
 
@@ -7010,8 +7039,6 @@ Part of variable $1 in {{msg-mw|Ago}}',
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => '{{Optional}}
@@ -7471,7 +7498,7 @@ This is who originally owned the image (a person, stock photo agency, etc). This
 'exif-editstatus' => 'Editorial status of image. This is more intended for use with people making news papers. This denotes whether the image is on the main page, is part of a correction, etc. See 2:07 of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf',
 'exif-urgency' => 'Urgency. How urgent this image is. 1 is very urgent, 5 is normal, 8 is  very low priority.
 {{Related|Exif-urgency}}',
-'exif-fixtureidentifier' => 'Fixture name. Identifies frequently occuring object data, for example a regular column in a news paper.',
+'exif-fixtureidentifier' => 'Fixture name. Identifies frequently occurring object data, for example a regular column in a news paper.',
 'exif-locationdest' => 'Full printable name of location.',
 'exif-locationdestcode' => 'Code of location depicted. Typically this is an ISO country code, but the IPTC-iim standard also defines other codes like XSP for outer space. See appendix D (and tag 2:100) of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf',
 'exif-objectcycle' => 'Time of day that media is intended for. Either morning only, evening only, or all day. Typically only used for news related things that might only be broadcast at a specific time of day.
@@ -8627,8 +8654,10 @@ See also:
 * stub threshold (appearance tab)
 
 {{Identical|Other}}',
-'htmlform-no' => 'Used in form, such as with radio buttons, for generic yes / no questions',
-'htmlform-yes' => 'Used in form, such as with radio buttons, for generic yes / no questions',
+'htmlform-no' => 'Used in form, such as with radio buttons, for generic yes / no questions.
+{{Identical|No}}',
+'htmlform-yes' => 'Used in form, such as with radio buttons, for generic yes / no questions.
+{{Identical|Yes}}',
 
 # SQLite database support
 'sqlite-has-fts' => 'Shown on [[Special:Version]].
index 2fc25b2..a589ca5 100644 (file)
@@ -295,8 +295,6 @@ $messages = array(
 'tog-shownumberswatching' => "Rikuchiy hayk'a watiqaq ruraqkuna",
 'tog-oldsig' => "Kachkaqña silq'uy:",
 'tog-fancysig' => "Silq'uyta wiki qillqa hinata llamk'achiy (mana kikinmanta t'inkichaq silq'uy)",
-'tog-externaleditor' => "Kikinmanta hawa llamk'apunata llamk'achiy (kamayuqkunallapaq, antañiqiqniykipi sapaq allinkachinakuna kananmi. [//www.mediawiki.org/wiki/Manual:External_editors Astawan ñawiriy.])",
-'tog-externaldiff' => "Kikinmanta hawa ''diff'' (wakin kay) nisqata llamk'achiy (kamayuqkunallapaq, antañiqiqniykipi sapaq allinkachinakuna kananmi. [//www.mediawiki.org/wiki/Manual:External_editors Astawan ñawiriy.])",
 'tog-showjumplinks' => "«Chayman phinkiy» aypanalla t'inkikunata saqillay",
 'tog-uselivepreview' => "''Live preview'' nisqa ñawpaq qhawayta llamk'achiy (JavaScript) (llamiy aknaraq)",
 'tog-forceeditsummary' => "Ch'usaq llamk'apuy waqaychasqa kachkaptinqa ch'itiyay.",
@@ -311,6 +309,7 @@ $messages = array(
 'tog-showhiddencats' => 'Pakasqa katiguriyakunata rikuchiy',
 'tog-noconvertlink' => "T'inki suti t'ikrayman ama niy",
 'tog-norollbackdiff' => 'Ruraqpa hukchasqankunata kutichispa ama wakin kayta willaychu',
+'tog-useeditwarning' => "Yuyampaway p'anqata saqiptiy manaraq rurarqusqay hukchasqakunata waqaychaspay.",
 
 'underline-always' => "Hayk'appas",
 'underline-never' => "Mana hayk'appas",
@@ -1018,6 +1017,8 @@ Kachkañam.",
 'defaultmessagetext' => 'Ñawpaq qillqa',
 'invalid-content-data' => 'Samiqmanta willaykunaqa manam allinchu',
 'content-not-allowed-here' => '"$1" nisqa samiqqa [[$2]] sutiyuq p\'anqapi manam saqillasqachu',
+'editwarning-warning' => "Kay p'anqata saqispaykiqa lliw rurarqusqayki hukchasqakunatachá chinkachiykiman.
+Yaykusqa kaspaykiqa, kay yuyampayta hark'ayta atinki allinkachinaykikunapi \"Llamk'apusqa\" rakipi.",
 
 # Content models
 'content-model-wikitext' => 'wiki qillqa',
@@ -1298,15 +1299,6 @@ Imaymanata [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} qulluy ha
 'search-external' => 'Hawapi maskay',
 'searchdisabled' => "{{SITENAME}} nisqapi maskaymanqa ama nisqam. Hinachkaptinqa, maskariy google nisqawan icha huk hawa maskanakunawan, ichataq yuyariy, {{SITENAME}}manta hallch'asqankunaqa manañachá musuqllachu.",
 
-# Quickbar
-'qbsettings' => 'Utqaytawna ("Quickbar") allinkachinakuna',
-'qbsettings-none' => 'Mana imapas',
-'qbsettings-fixedleft' => "Lluq'iman watay",
-'qbsettings-fixedright' => 'Pañaman watay',
-'qbsettings-floatingleft' => "Lluq'iman tuytuy",
-'qbsettings-floatingright' => 'Pañaman tuytuy',
-'qbsettings-directionality' => 'Watasqa, rimayniykip qillqa puririyninmanta wachariq',
-
 # Preferences page
 'preferences' => 'Allinkachinakuna',
 'mypreferences' => 'Allinkachinaykuna',
@@ -1834,7 +1826,6 @@ Lliwmanta aswan alliku kanapaqqa, img_auth.php manam atinchu.',
 'http-read-error' => 'HTTP ñawiriy pantasqa.',
 'http-timed-out' => "HTTP mañakuypa mit'anqa lluqsikusqañam.",
 'http-curl-error' => 'URL apamuypi pantasqa: $1',
-'http-host-unreachable' => 'Manam aypanichu URL-ta.',
 'http-bad-status' => 'HTTP mañakuypi sasachakuymi tukukurqan: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2927,26 +2918,16 @@ Tukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hall
 
 # Stylesheets
 'common.css' => "/* Churamusqa CSS chantakunaqa tukuy qarakunapim llamk'anqa */",
-'standard.css' => "/* Churamusqa CSS chantakunaqa ''Standard skin'' nisqa qarata llamk'achiq ruraqkunapaq llamk'anqa */",
-'nostalgia.css' => "/* Churamusqa CSS chantakunaqa ''Nostalgia skin'' nisqa qarata llamk'achiq ruraqkunapaq llamk'anqa */",
 'cologneblue.css' => "/* Churamusqa CSS chantakunaqa ''Cologne Blue skin'' nisqa qarata llamk'achiq ruraqkunapaq llamk'anqa */",
 'monobook.css' => '/* Kayman churasqa CSS nisqaqa Monobook qaratam hukchanqa tukuy internet tiyanapaq */',
-'myskin.css' => "/* Churamusqa CSS chantakunaqa ''MySkin'' nisqa qarata llamk'achiq ruraqkunapaq llamk'anqa */",
-'chick.css' => "/* Churamusqa CSS chantakunaqa ''Chick skin'' nisqa qarata llamk'achiq ruraqkunapaq llamk'anqa */",
-'simple.css' => "/* Churamusqa CSS chantakunaqa ''Simple skin'' nisqa qarata llamk'achiq ruraqkunapaq llamk'anqa */",
 'modern.css' => "/* Churamusqa CSS chantakunaqa ''Modern skin'' nisqa qarata llamk'achiq ruraqkunapaq llamk'anqa */",
 'print.css' => "/* Churamusqa CSS chantakunaqa ch'ipachinap rikch'akuynintam hukchanqa */",
 'handheld.css' => "/* Churamusqa CSS chantakunaqa makiwan hap'isqa qarapi tiksisqa \$wgHandheldStyle nisqapi allichasqa antakunap llamk'aynintam hukchanqa */",
 
 # Scripts
 'common.js' => "/* Ima kaypi kaq JavaScript qillqapas tukuy ruraqkunapaq tukuy p'anqakunap tukuy chaqnankunapi chaqnamusqa kanqa. */",
-'standard.js' => "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas ''Standard skin'' nisqa sapsi qarata llamk'achiq ruraqkunapaq chaqnasqa kanqa */",
-'nostalgia.js' => "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas ''Nostalgia skin'' nisqa qarata llamk'achiq ruraqkunapaq chaqnasqa kanqa */",
 'cologneblue.js' => "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas ''Cologne Blue skin'' nisqa qarata llamk'achiq ruraqkunapaq chaqnasqa kanqa */",
 'monobook.js' => "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas MonoBook nisqata llamk'achiq ruraqkunapaq chaqnasqa kanqa */",
-'myskin.js' => "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas ''MySkin'' nisqa qarata llamk'achiq ruraqkunapaq chaqnasqa kanqa */",
-'chick.js' => "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas ''Chick skin'' nisqa qarata llamk'achiq ruraqkunapaq chaqnasqa kanqa */",
-'simple.js' => "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas ''Simple skin'' nisqa qarata llamk'achiq ruraqkunapaq chaqnasqa kanqa */",
 'modern.js' => "/* Ima kaypi qillqamusqa JavaScript nisqa wakichi qillqapas ''Modern skin'' nisqa qarata llamk'achiq ruraqkunapaq chaqnasqa kanqa */",
 
 # Metadata
index 8890581..045e1de 100644 (file)
@@ -72,8 +72,6 @@ $messages = array(
 'tog-shownumberswatching' => "Mussar il dumber d'utilisaders che obervan questa pagina",
 'tog-oldsig' => 'Signatura actuala:',
 'tog-fancysig' => "Suttascripziun senza link automatic tar la pagina da l'utilisader.",
-'tog-externaleditor' => 'Utilisar sco standard in editur extern (be per experts, basegna ina configuraziun speziala da des computer. [//www.mediawiki.org/wiki/Manual:External_editors Dapli infurmaziuns.])',
-'tog-externaldiff' => 'Utilisar sco standard in program extern per visualisar differenzas tranter versiuns (be per experts, basegna ina configuraziun speziala da des computer. [//www.mediawiki.org/wiki/Manual:External_editors Dapli infurmaziuns.])',
 'tog-showjumplinks' => 'Activar las colliaziuns "seglir a"',
 'tog-uselivepreview' => 'Utilisar la prevista dinamica (basegna JavaScript) (experiment!)',
 'tog-forceeditsummary' => 'Avertir durant memoriar sche la resumaziun manca',
@@ -1113,15 +1111,6 @@ Scriva il prefix ''all:'' avant il term che ti vuls tschertgar, per tschertgar e
 Ti pos tschertgar en il fratemp cun Google. 
 Considerescha che lur index da {{SITENAME}} po cuntegnair datas ch'èn betg pli actualas.",
 
-# Quickbar
-'qbsettings' => 'Glista laterala',
-'qbsettings-none' => 'Nagins',
-'qbsettings-fixedleft' => 'Sanester, fixà',
-'qbsettings-fixedright' => 'Dretg, fixà',
-'qbsettings-floatingleft' => 'Sanester, flottand',
-'qbsettings-floatingright' => 'Dretg, flottand',
-'qbsettings-directionality' => 'Fixà, dependent da la direcziun da scriver da tia lingua',
-
 # Preferences page
 'preferences' => 'Preferenzas',
 'mypreferences' => 'Preferenzas',
@@ -1672,7 +1661,6 @@ Per cuntanscher segirezza opgimala è img_auth.php deactivà.",
 'http-read-error' => 'Sbagl da leger HTTP.',
 'http-timed-out' => 'Surpassà il temp durant la dumonda HTTP.',
 'http-curl-error' => "Errur cun recuperar l'URL: $1",
-'http-host-unreachable' => "Impussibel da cuntanscher l'URL.",
 'http-bad-status' => 'Durant la dumonda HTTP è ina errur capitada: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1995,15 +1983,6 @@ Dovra almain ina top-level domain, per exempel "*.org".<br />
 'listusers-noresult' => 'Betg chattà in utilisader.',
 'listusers-blocked' => '(bloccà)',
 
-# Special:ActiveUsers
-'activeusers' => 'Glista dals utilisaders activs',
-'activeusers-intro' => "Quai è ina glista dals utilisaders che han gì activitads {{PLURAL:$1|l'ultim di|en ils ultims $1 dis}}.",
-'activeusers-count' => "$1 {{PLURAL:$1|modificaziun|modificaziuns}} {{PLURAL:$3|l'ultim di|ils ultims $3 dis}}",
-'activeusers-from' => 'Mussar utilisaders davent da:',
-'activeusers-hidebots' => 'Zuppentar bots',
-'activeusers-hidesysops' => 'Zuppentar administraturs',
-'activeusers-noresult' => 'Chattà nagins utilisaders.',
-
 # Special:ListGroupRights
 'listgrouprights' => "Dretgs da las gruppas d'utilisaders",
 'listgrouprights-summary' => "Sutvart vegn mussada ina glista da las gruppas d'utilisaders sin questa wiki cun ils dretgs d'access associads.
index 93fb60b..60c2a89 100644 (file)
@@ -328,8 +328,6 @@ pe titlul secțiunii (JavaScript)',
 'tog-shownumberswatching' => 'Arată numărul utilizatorilor care urmăresc',
 'tog-oldsig' => 'Semnătură actuală:',
 'tog-fancysig' => 'Tratează semnătura ca wikitext (fără o legătură automată)',
-'tog-externaleditor' => 'Utilizează, în mod implicit, un editor extern (Doar pentru experți; necesită setări speciale pe calculatorul dumneavoastră. [//www.mediawiki.org/wiki/Manual:External_editors Mai multe informații.])',
-'tog-externaldiff' => 'Utilizează, în mod implicit, un program extern pentru diferențele între versiuni (Doar pentru experți; necesită setări speciale pe calculatorul dumneavoastră. [//www.mediawiki.org/wiki/Manual:External_editors Mai multe informații.])',
 'tog-showjumplinks' => 'Activează legăturile de accesibilitate „sari la”',
 'tog-uselivepreview' => 'Folosește previzualizarea în timp real (JavaScript) (experimental)',
 'tog-forceeditsummary' => 'Avertizează-mă când uit să descriu modificările',
@@ -344,6 +342,7 @@ pe titlul secțiunii (JavaScript)',
 'tog-showhiddencats' => 'Arată categoriile ascunse',
 'tog-noconvertlink' => 'Dezactivează conversia titlurilor',
 'tog-norollbackdiff' => 'Nu arăta diferența după efectuarea unei reveniri',
+'tog-useeditwarning' => 'Avertizează-mă când părăsesc o pagină fără a salva modificările',
 
 'underline-always' => 'Întotdeauna',
 'underline-never' => 'Niciodată',
@@ -717,9 +716,15 @@ Sesiunea dumneavoastră la {{SITENAME}} a fost închisă. Puteți continua să f
 'welcomecreation-msg' => 'Contul dumneavoastră a fost creat.
 Nu uitați să vă modificați [[Special:Preferences|preferințele]] pentru {{SITENAME}}.',
 'yourname' => 'Nume de utilizator:',
+'userlogin-yourname' => 'Nume de utilizator',
+'userlogin-yourname-ph' => 'Introduceți numele de utilizator',
 'yourpassword' => 'Parolă:',
+'userlogin-yourpassword' => 'Parolă',
+'userlogin-yourpassword-ph' => 'Introduceți parola',
 'yourpasswordagain' => 'Repetați parola:',
 'remembermypassword' => 'Autentificare automată de la acest calculator (expiră după {{PLURAL:$1|24 de ore|$1 zile|$1 de zile}})',
+'userlogin-remembermypassword' => 'Ține-mă minte',
+'userlogin-signwithsecure' => 'Autentificare prin serverul securizat',
 'securelogin-stick-https' => 'Rămâi conectat la HTTPS după autentificare',
 'yourdomainname' => 'Domeniul dumneavoastră:',
 'password-change-forbidden' => 'Nu puteți schimba parole pe acest wiki.',
@@ -732,12 +737,16 @@ Nu uitați să vă modificați [[Special:Preferences|preferințele]] pentru {{SI
 'logout' => 'Închidere sesiune',
 'userlogout' => 'Închide sesiunea',
 'notloggedin' => 'Nu sunteți autentificat',
+'userlogin-noaccount' => 'Nu aveți cont încă?',
+'userlogin-joinproject' => 'Înscrieți-vă la {{SITENAME}}',
 'nologin' => "Nu aveți cont încă? '''$1'''.",
 'nologinlink' => 'Creați-vă un cont de utilizator acum',
 'createaccount' => 'Creare cont',
 'gotaccount' => "Aveți deja un cont de utilizator? '''$1'''.",
 'gotaccountlink' => 'Autentificați-vă',
 'userlogin-resetlink' => 'Ați uitat datele de autentificare?',
+'helplogin-url' => 'Help:Autentificare',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajutor la autentificare]]',
 'createaccountmail' => 'Utilizează o parolă temporară aleasă la întâmplare și o trimite la adresa de e-mail specificată mai jos',
 'createaccountreason' => 'Motiv:',
 'badretype' => 'Parolele pe care le-ați introdus diferă.',
@@ -832,6 +841,7 @@ Este posibil să fi reușit deja schimbarea parolei sau să fi cerut o parolă t
 'passwordreset-text' => 'Completați acest formular pentru a vă reseta parola.',
 'passwordreset-legend' => 'Resetare parolă',
 'passwordreset-disabled' => 'Resetarea parolei a fost dezactivată pe acest wiki.',
+'passwordreset-emaildisabled' => 'Funcțiile de e-mail au fost dezactivate de pe acest wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1| | Introduceți mai jos o parte din informații}}',
 'passwordreset-username' => 'Nume de utilizator:',
 'passwordreset-domain' => 'Domeniu:',
@@ -859,7 +869,7 @@ Ar trebui să vă autentificați și să alegeți acum o nouă parolă. Dacă al
 Parolă temporară: $2',
 'passwordreset-emailsent' => 'A fost trimis un e-mail de resetare a parolei.',
 'passwordreset-emailsent-capture' => 'Un mesaj de resetare a parolei a fost trimis, fiind afișat mai jos.',
-'passwordreset-emailerror-capture' => 'Un mesaj de resetare a parolei a fost generat (fiind afișat mai jos), dar trimiterea sa către utilizator a eșuat: $1',
+'passwordreset-emailerror-capture' => 'Un mesaj de resetare a parolei a fost generat (fiind afișat mai jos), dar trimiterea sa către {{GENDER:$2|utilizator}} a eșuat: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Modificare adresă de e-mail',
@@ -1080,6 +1090,8 @@ Ea există deja.',
 'content-failed-to-parse' => 'Nu s-a putut analiza conținutul de tip $2 pentru modelul $1: $3',
 'invalid-content-data' => 'Date de conținut invalide',
 'content-not-allowed-here' => 'Conținutul de tip „$1” nu este permis pe pagina [[$2]]',
+'editwarning-warning' => 'Părăsind această pagină, există riscul pierderii modificărilor efectuate.
+Dacă sunteți autentificat, puteți dezactiva această avertizare în secțiunea „Modificare” a preferințelor dumneavoastră.',
 
 # Content models
 'content-model-wikitext' => 'wikitext',
@@ -3925,6 +3937,8 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'htmlform-submit' => 'Trimite',
 'htmlform-reset' => 'Anulează modificările',
 'htmlform-selectorother-other' => 'Altul',
+'htmlform-no' => 'Nu',
+'htmlform-yes' => 'Da',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 cu suport de căutare în tot textul',
index ed7ae35..6f726f2 100644 (file)
@@ -54,10 +54,6 @@ $messages = array(
 'tog-shownumberswatching' => "Fa vedè 'u numere de le utinde ca uardene",
 'tog-oldsig' => 'Firme esistende:',
 'tog-fancysig' => "Firma grezze cumme a 'nu teste de Uicchi (senza collegamende automatiche)",
-'tog-externaleditor' => "Ause n'editore esterne pe default (sulamende pe l'esperte, abbesogne de 'na configurazione speciele sus a 'u combiuter tune. <br />
-[//www.mediawiki.org/wiki/Manual:External_editors Pe cchiù 'mbormaziune.])",
-'tog-externaldiff' => "Ause 'na differenze esterne pe default (sulamende pe l'esperte, abbesogne de 'na configuraziona speciele sus a 'u computer tune. <br />
-[//www.mediawiki.org/wiki/Manual:External_editors More information.])",
 'tog-showjumplinks' => 'Abbilite "zumbe a" pe scè sus a le collegaminde',
 'tog-uselivepreview' => "Ause l'andeprime da 'u vive (JavaScript) (Sperimendale)",
 'tog-forceeditsummary' => "Ciércame conferme quanne stoche a 'nzerische 'nu riepighe vianghe",
@@ -72,6 +68,7 @@ $messages = array(
 'tog-showhiddencats' => 'Fa vedè le categorije scunnute',
 'tog-noconvertlink' => "Disabbilite 'a conversione d'u titele de collegamende",
 'tog-norollbackdiff' => "Non sce penzanne a le differenze apprisse l'esecuzione de 'nu rollback",
+'tog-useeditwarning' => "Avvisave quanne jie lasse 'na pàgene cangiate senze ca agghie sarvate le cangiaminde",
 
 'underline-always' => 'Sembre',
 'underline-never' => 'Maje',
@@ -454,9 +451,15 @@ Note Bbuene ca certe pàggene ponne condinuà a essere viste cumme ce tu ste ang
 'welcomecreation-msg' => "'U cunde tue ha state ccrejete.
 No te sce scurdanne de cangià le [[Special:Preferences|{{SITENAME}} preferenze tue]].",
 'yourname' => 'Nome utende:',
+'userlogin-yourname' => 'Nome utende',
+'userlogin-yourname-ph' => "Mitte 'u nome utende tune",
 'yourpassword' => 'Passuord:',
+'userlogin-yourpassword' => 'Passuord',
+'userlogin-yourpassword-ph' => "Mitte 'a passuord toje",
 'yourpasswordagain' => "Scrive 'a passuord notra vote:",
 'remembermypassword' => "Arrencuerdete 'u nome mije sus a stu combiuter (pe 'nu massime de $1 {{PLURAL:$1|sciurne|sciurne}})",
+'userlogin-remembermypassword' => 'Arrecuèrdeme',
+'userlogin-signwithsecure' => "Reggistrate cu 'nu server secure",
 'securelogin-stick-https' => "Statte collegate ô HTTPS apprisse 'a trasute",
 'yourdomainname' => "'U nome d'u dominie tue:",
 'password-change-forbidden' => 'Non ge puè cangià le passuord sus a sta uicchi.',
@@ -469,12 +472,16 @@ No te sce scurdanne de cangià le [[Special:Preferences|{{SITENAME}} preferenze
 'logout' => 'Isse',
 'userlogout' => 'Isse',
 'notloggedin' => 'Non ge sì colleghete',
+'userlogin-noaccount' => "Non ge tìne 'nu cunde?",
+'userlogin-joinproject' => "Tràse jndr'à {{SITENAME}}",
 'nologin' => "Non ge tine n'utenze? '''$1'''.",
 'nologinlink' => "Ccreje 'nu cunde utende",
 'createaccount' => "Ccreje 'nu cunde",
 'gotaccount' => "Tine già 'nu cunde? '''$1'''.",
 'gotaccountlink' => 'Tràse',
 'userlogin-resetlink' => "T'è scurdate le dettaglie pe trasè?",
+'helplogin-url' => 'Help:Trasenne',
+'userlogin-helplink' => "[[{{MediaWiki:helplogin-url}}|Aijute cu 'a trasute]]",
 'createaccountmail' => 'Pe e-mail',
 'createaccountreason' => 'Mutive:',
 'badretype' => 'Le passuord ca è scritte non ge sonde uguale.',
@@ -583,6 +590,7 @@ Pò essere ca tu è già cangete 'a password toje o è richieste una temboranea
 'passwordreset-text' => "Comblete stu module pe ricevere 'na mail de promemorie de le dettaglie d'u cunde tune.",
 'passwordreset-legend' => "Azzere 'a passuord",
 'passwordreset-disabled' => "'U reset de le passuord ha state desabbilitate sus a sta uicchi.",
+'passwordreset-emaildisabled' => "Le funziune de l'email onne state disabbilitate sus a sta uicchi.",
 'passwordreset-pretext' => '{{PLURAL:$1||Mitte une de le stuèzze de le date aqquà sotte}}',
 'passwordreset-username' => 'Nome utende:',
 'passwordreset-domain' => 'Dominie:',
@@ -607,7 +615,7 @@ Tu avissa trasè e scacchià 'na passuord nova. Ce quacchedun'otre ha fatte sta
 Passuord temboranèe: $2',
 'passwordreset-emailsent' => "'N'e-mail pe arrecurdarte ha state mannate.",
 'passwordreset-emailsent-capture' => "'Na e-mail pe azzeramende d'a passuord ha state mannate, ca jè fatte vedè aqquà sotte.",
-'passwordreset-emailerror-capture' => "'Na e-mail de azzeramende d'a passuord ha state generate, ca jè fatte vedè aqquà sotte, ma 'u 'nvie a l'utende ha fallite: $1",
+'passwordreset-emailerror-capture' => "'Na e-mail de azzeramende d'a passuord ha state generate, ca jè fatte vedè aqquà sotte, ma 'u 'nvie a {{GENDER:$2|l'utende}} ha fallite: $1",
 
 # Special:ChangeEmail
 'changeemail' => "Cange 'u 'ndirizze e-mail",
@@ -835,6 +843,8 @@ Pare proprie ca l'onne scangellete.",
 'content-failed-to-parse' => "L'analise d'u condenute $2 pu modelle $1 ha fallite: $3",
 'invalid-content-data' => "Condenute d'u date invalide",
 'content-not-allowed-here' => '"$1" condenute non g\'è permesse sus \'a pàgene [[$2]]',
+'editwarning-warning' => 'Assenne da sta pàgene tu puè perdè tutte le date ca è cangiate.
+Ce tu è trasute, tu puè disabbilità st\'avvertimende jndr\'à sezione "Cangiaminde..." de le preferenze tune.',
 
 # Content models
 'content-model-wikitext' => 'Uicchiteste',
@@ -3049,8 +3059,6 @@ Tutte le sottosequenze ca appondene a stessa linea sonde considerete eccezziune,
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans',
@@ -3950,6 +3958,8 @@ Le immaggine sonde fatte vedè jndr'à resoluziona megghie, otre tipe de file re
 'htmlform-submit' => 'Conferme',
 'htmlform-reset' => 'Annulle le cangiaminde',
 'htmlform-selectorother-other' => 'Otre',
+'htmlform-no' => 'None',
+'htmlform-yes' => 'Sìne',
 
 # SQLite database support
 'sqlite-has-fts' => "$1 cu 'u supporte d'a ricerche full-text",
index 0c938b0..c5fd65b 100644 (file)
@@ -47,6 +47,7 @@
  * @author Ignatus
  * @author Illusion
  * @author Iltever
+ * @author Iluvatar
  * @author Incnis Mrsi
  * @author Iniquity
  * @author Innv
@@ -434,8 +435,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Показывать число участников, включивших страницу в свой список наблюдения',
 'tog-oldsig' => 'Текущая подпись:',
 'tog-fancysig' => 'Собственная вики-разметка подписи (без автоматической ссылки)',
-'tog-externaleditor' => 'Использовать по умолчанию внешний редактор (только для специалистов, необходима особая настройка компьютера; [//www.mediawiki.org/wiki/Manual:External_editors подробнее])',
-'tog-externaldiff' => 'Использовать по умолчанию внешнюю программу сравнения (только для специалистов, необходима особая настройка компьютера; [//www.mediawiki.org/wiki/Manual:External_editors подробнее])',
 'tog-showjumplinks' => 'Включить вспомогательные ссылки «перейти к»',
 'tog-uselivepreview' => 'Использовать быстрый предварительный просмотр (JavaScript, экспериментально)',
 'tog-forceeditsummary' => 'Предупреждать, когда не заполнено поле описания правки',
@@ -450,6 +449,7 @@ $messages = array(
 'tog-showhiddencats' => 'Показывать скрытые категории',
 'tog-noconvertlink' => 'Отключить ссылку на преобразование заголовка',
 'tog-norollbackdiff' => 'Не показывать разницу версий после выполнения отката',
+'tog-useeditwarning' => 'Предупреждать, когда я покидаю страницу с несохранёнными изменениями',
 
 'underline-always' => 'Всегда',
 'underline-never' => 'Никогда',
@@ -820,9 +820,15 @@ $2',
 'welcomecreation-msg' => 'Ваша учётная запись создана.
 Не забудьте провести [[Special:Preferences|персональную настройку]] сайта {{SITENAME}}.',
 'yourname' => 'Имя учётной записи:',
+'userlogin-yourname' => 'Имя учётной записи',
+'userlogin-yourname-ph' => 'Введите имя вашей учётной записи',
 'yourpassword' => 'Пароль:',
+'userlogin-yourpassword' => 'Пароль',
+'userlogin-yourpassword-ph' => 'Введите ваш пароль',
 'yourpasswordagain' => 'Повторный набор пароля:',
 'remembermypassword' => 'Помнить мою учётную запись на этом компьютере (не более $1 {{PLURAL:$1|дня|дней|дней}})',
+'userlogin-remembermypassword' => 'Запомнить меня',
+'userlogin-signwithsecure' => 'Выполните вход, используя безопасный сервер',
 'securelogin-stick-https' => 'Продолжить подключение по HTTPS после входа',
 'yourdomainname' => 'Ваш домен:',
 'password-change-forbidden' => 'Вы не можете изменить пароль в этой вики.',
@@ -835,12 +841,14 @@ $2',
 'logout' => 'Завершение сеанса',
 'userlogout' => 'Завершение сеанса',
 'notloggedin' => 'Вы не представились системе',
+'userlogin-noaccount' => 'Нет аккаунта?',
 'nologin' => 'Нет учётной записи? $1.',
 'nologinlink' => 'Создать учётную запись',
 'createaccount' => 'Создать учётную запись',
 'gotaccount' => "Вы уже зарегистрированы? '''$1'''.",
 'gotaccountlink' => 'Представьтесь',
 'userlogin-resetlink' => 'Забыли данные для входа?',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Помощь со входом в систему]]',
 'createaccountmail' => 'Использовать сгенерированный случайным образом временный пароль и выслать мне его на указанный ниже адрес электронной почты:',
 'createaccountreason' => 'Причина:',
 'badretype' => 'Введённые вами пароли не совпадают.',
@@ -1191,6 +1199,8 @@ $2
 'content-failed-to-parse' => 'Содержимое $2 не соответствует типу $1: $3.',
 'invalid-content-data' => 'Недопустимые данные',
 'content-not-allowed-here' => 'Содержимое "$1" недопустимо на странице [[$2]]',
+'editwarning-warning' => 'Переход на другую страницу может привести к потере сделанных вами изменений.
+Если вы зарегистрированы в системе, то вы можете отключить это предупреждение в разделе «{{int:prefs-editing}}» ваших настроек.',
 
 # Content models
 'content-model-wikitext' => 'вики-текст',
@@ -4140,6 +4150,8 @@ MediaWiki распространяется в надежде, что она бу
 'htmlform-submit' => 'Отправить',
 'htmlform-reset' => 'Отменить изменения',
 'htmlform-selectorother-other' => 'Иное',
+'htmlform-no' => 'Нет',
+'htmlform-yes' => 'Да',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 с поддержкой полнотекстового поиска',
index 1f04880..25f1bef 100644 (file)
@@ -148,8 +148,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Вказати кілько хоснователїв придало сторінку до свого списку слїдованых',
 'tog-oldsig' => 'Існуючій підпис:',
 'tog-fancysig' => 'Хосновати про підпис вікітекст (без автоматічного одказу)',
-'tog-externaleditor' => 'Імпліцітно хосновати екстерный едітор (лем про скусеных, выжадує шпеціалне наштелёваня компютера; [//www.mediawiki.org/wiki/Manual:External_editors далшы інформації])',
-'tog-externaldiff' => 'Імпліцітно хосновати проґрам про порівнаваня (лем про скусеных, выжадує шпеціалне наштелёваня компютера; [//www.mediawiki.org/wiki/Manual:External_editors далшы інформації])',
 'tog-showjumplinks' => 'Актівізовати помічны одказы "перейти дo"',
 'tog-uselivepreview' => 'Хосновати швыдкый нагляд (JavaScript, експеріментално)',
 'tog-forceeditsummary' => 'Упозорнити ня, кідь не є выповнене згорнутя едітованя',
@@ -163,6 +161,7 @@ $messages = array(
 'tog-diffonly' => 'Не вказовати обсяг сторінкы під роздїлом  верзій',
 'tog-showhiddencats' => 'Вказати схованы катеґорії',
 'tog-norollbackdiff' => 'По вернутю зміны не вказовати порівнаня роздїлів',
+'tog-useeditwarning' => 'Упозорнити ня, кідь буду опущати сторінку без уложіня змін',
 
 'underline-always' => 'Все',
 'underline-never' => 'Нїґда',
@@ -251,6 +250,7 @@ $messages = array(
 'newwindow' => '(отворить ся в новім окнї)',
 'cancel' => 'Зрушыти',
 'moredotdotdot' => 'Детайлнїше…',
+'morenotlisted' => 'Дале не є ніч ...',
 'mypage' => 'Сторінка',
 'mytalk' => 'Діскузія',
 'anontalk' => 'Діскузія к тїй IP-адресї',
@@ -550,7 +550,7 @@ $2',
 'gotaccount' => "Уж сьте реґістрованы? '''$1'''.",
 'gotaccountlink' => 'Приголошіня',
 'userlogin-resetlink' => 'Забыли сьте вашы даны на приголошіня?',
-'createaccountmail' => 'елекÑ\82Ñ\80ониÑ\87нов Ð¿Ð¾Ñ\88Ñ\82ов',
+'createaccountmail' => 'СÑ\85оÑ\81новаÑ\82и Ð´Ð¾Ñ\87аÑ\81не Ð³ÐµÑ\81ло Ñ\82а Ð·Ð°Ð³Ð½Ð°Ñ\82и Ð³Ð¾ Ð½Ð° Ð½Ð¸Ð¶Ðµ Ð½Ð°Ð¿Ð¸Ñ\81анÑ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83',
 'createaccountreason' => 'Причіна:',
 'badretype' => 'Вами написаны гесла не сугласять.',
 'userexists' => 'Уведжене імя хоснователя ся уж хоснує.
@@ -593,8 +593,8 @@ $2',
 'blocked-mailpassword' => 'Вашій IP адресї была заблокована можность едітації і сучасно з тым є заблокована функція про засланя нового гесла.',
 'eauthentsent' => 'На задану адресу електронічной пошты было послане потверджіня,
 Передтым як вам на тоту адресу буде мочі быти засылана далша пошта, слїдуйте інштрукції в ел. пошті, жебы сьте потвердили, же тота адреса справды належыть вам.',
-'throttled-mailpassword' => 'Ð\93еÑ\81ло Ñ\83ж Ð±Ñ\8bло Ñ\80аз Ð·Ð°Ñ\81лане Ð±Ñ\96гом Ñ\83плÑ\8bнÑ\83лÑ\8bÑ\85 $1 Ð³Ð¾Ð´Ð¸Ð½.
\93есло може быти заслане лем раз за $1 {{PLURAL:$1|годину|годины|годин}}.',
+'throttled-mailpassword' => 'Ð\93еÑ\81ло Ñ\83ж Ð±Ñ\8bло Ñ\80аз Ð·Ð°Ñ\81лане Ð¿Ñ\96д Ñ\87аÑ\81 {{PLURAL:$1|оÑ\81Ñ\82аÑ\82нÑ\91й Ð³Ð¾Ð´Ð¸Ð½Ñ\8b|оÑ\81Ñ\82аÑ\82нÑ\97Ñ\85 $1 Ð³Ð¾Ð´Ð¸Ð½}}.
\96ебÑ\8b Ñ\81Ñ\8f Ñ\82о Ð½Ðµ Ð·Ð»Ð¾Ð²Ð¶Ñ\8bвало Ñ\82а Ð³есло може быти заслане лем раз за $1 {{PLURAL:$1|годину|годины|годин}}.',
 'mailerror' => 'Хыба засыланя ел. пошты: $1',
 'acct_creation_throttle_hit' => 'Хоснователї приходячі з вашой IP адресы уж днесь створили {{PLURAL:$1|конто|конта|конт}}, што є дозволене максімум. Зато теперь не є дозволено з той IP адресы закладати далшы конта.',
 'emailauthenticated' => 'Адреса вашой ел. пошты была овірена дня $2 о $3.',
@@ -621,6 +621,7 @@ $2',
 # Email sending
 'php-mail-error-unknown' => 'Незнама хыба у PHP mail() функції',
 'user-mail-no-addy' => 'Проба одослати електронічну пошту без імейловой адресы.',
+'user-mail-no-body' => 'Спроба послати порожнїй або барз куртый імейл.',
 
 # Change password dialog
 'resetpass' => 'Змінити гесло',
@@ -641,7 +642,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'Ресет гесла',
-'passwordreset-text' => 'Ð\92Ñ\8bповнÑ\8cÑ\82е Ñ\82оÑ\82 Ñ\84оÑ\80мÑ\83лаÑ\80Ñ\8c, Ð¶ÐµÐ±Ñ\8b Ð¾Ð±Ñ\82Ñ\80имаÑ\82и  Ð¿Ñ\80ипомÑ\8fнÑ\83Ñ\82Ñ\8f Ð´ÐµÑ\82айлÑ\96в Ð²Ð°Ñ\88ого ÐºÐ¾Ð½Ñ\82а',
+'passwordreset-text' => 'Ð\92Ñ\8bпиÑ\88Ñ\82е Ñ\82оÑ\82 Ñ\84оÑ\80мÑ\83лаÑ\80Ñ\8c, Ð¶ÐµÐ±Ñ\8b Ñ\81Ñ\8f Ð²Ð°Ð¼ Ð¼Ð¾Ð³Ð»Ð¾ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ\82и Ð³ÐµÑ\81ло',
 'passwordreset-legend' => 'Знову наставити гесло',
 'passwordreset-disabled' => 'Зновунаставлїня гесла є на тій вікі заказане',
 'passwordreset-pretext' => '{{PLURAL:$1||Задайте єден з дат ниже}}',
@@ -877,6 +878,8 @@ $2
 'content-failed-to-parse' => 'Не вдало ся проаналізовати $2 як тіп $1: $3',
 'invalid-content-data' => 'Неприпустны даны',
 'content-not-allowed-here' => 'Обсяг «$1» недозволеный на сторінцї [[$2]]',
+'editwarning-warning' => 'Зохаблїнём той стрінкы ся можуть вшыткы учінены зміны стратити.
+Кідь сьте приголошеный, можете тото варованя выпнути на картї „Едітованя“ в хосновательскім інтерфейсї.',
 
 # Content models
 'content-model-wikitext' => 'вікітекст',
@@ -1159,15 +1162,6 @@ $1",
 'search-external' => 'Екстерне гляданя',
 'searchdisabled' => '<p>Перебачте. Повнотекстове гляданя є дочасно недоступне. Затля можете спробовати гляданя Google; є але можне, же ёго резултаты не мусять быти актуалны.</p>',
 
-# Quickbar
-'qbsettings' => 'Панел навіґації',
-'qbsettings-none' => 'Жадный',
-'qbsettings-fixedleft' => 'Лежыть влїво',
-'qbsettings-fixedright' => 'Лежыть вправо',
-'qbsettings-floatingleft' => 'Плаваюча влїво',
-'qbsettings-floatingright' => 'Плаваюча вправо',
-'qbsettings-directionality' => 'Певный, в залежности на напрями вашого письма',
-
 # Preferences page
 'preferences' => 'Наставлїня',
 'mypreferences' => 'Наставлїня',
@@ -1702,7 +1696,6 @@ $1',
 'http-read-error' => 'Хыба чітаня HTTP.',
 'http-timed-out' => 'Час про HTTP пожадавкы уплинув.',
 'http-curl-error' => 'Хыба при чітаню з URL: $1',
-'http-host-unreachable' => 'Не вдало ся досягнути URL.',
 'http-bad-status' => 'Під час HTTP пожадавкы притрафив ся проблем: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2019,15 +2012,6 @@ $1',
 'listusers-noresult' => 'Ненайдженый жаден хоснователь.',
 'listusers-blocked' => '({{GENDER:$1|заблокованый|заблокована|заблокованый}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Список актівных хоснователїв',
-'activeusers-intro' => 'Тото є список хоснователїв, котры были даяк актівны за {{plural:$1|остатнїй день|остатных $1 днїв}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|едітованя|едітованя|едітовань}} бігом {{PLURAL:$3|остатнёго дня|остатнїх  $3 днїв}}',
-'activeusers-from' => 'Вказати хоснователїв, што ся зачінають на:',
-'activeusers-hidebots' => 'Сховати ботів',
-'activeusers-hidesysops' => 'Сховати адміністраторів',
-'activeusers-noresult' => 'Ненайдженый жаден хоснователь.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Права ґруп хоснователїв',
 'listgrouprights-summary' => 'Тото є список ґруп хоснователїв дефінованых на тій вікіi і&nbsp;їх приступовых прав.
index 10337e8..0c25f6c 100644 (file)
@@ -308,8 +308,6 @@ $messages = array(
 'tog-shownumberswatching' => 'निरीक्षमाणानां योजकानां संख्या दर्श्यताम्',
 'tog-oldsig' => 'विद्यमानं हस्ताङ्कनम्:',
 'tog-fancysig' => 'हस्ताक्षराणि विकिपाठवत् सन्तु (स्वचालित-संबंधनेभ्यः रहितानि)।',
-'tog-externaleditor' => 'Use external editor by default (for experts only, needs special settings on your computer. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
-'tog-externaldiff' => 'अकथिते (बाइ डिफाल्ट् इति), बाह्य अंतरक्रमादेशं प्रयोजयतु (केवलेभ्यः निपुणेभ्यः, भवतः संगणके विशेषाः न्यासाः आवश्यकाः)।',
 'tog-showjumplinks' => '"इत्येतत् प्रति कूर्दयतु" इति संबंधनानि समर्थयतु।',
 'tog-uselivepreview' => 'संपादनेन सहैव प्राग्दृश्यं दर्शयतु (जावालिपिः अपेक्ष्यते) (प्रयोगात्मकम्)।',
 'tog-forceeditsummary' => 'सम्पादनसारांशः न ददामि चेत् तदा मां ज्ञापयतु।',
@@ -323,6 +321,7 @@ $messages = array(
 'tog-diffonly' => 'आवृत्तिसु अंतरं दर्शयन् पुरातनाः आवृत्तयः मा दर्शयतु।',
 'tog-showhiddencats' => 'निगूढाः वर्गाः दर्श्यन्ताम्',
 'tog-norollbackdiff' => 'पूर्णप्रतिगमने कृते मा दर्शयतु तद् अंतरम्।',
+'tog-useeditwarning' => 'सम्पादनानन्तरं रक्षणेन विना पृष्ठत्यागावसरे स्मार्यताम्',
 
 'underline-always' => 'सर्वदा',
 'underline-never' => 'कदापि न',
@@ -1039,6 +1038,8 @@ $2
 'defaultmessagetext' => 'सन्देशपाठं स्थिरयतु ।',
 'invalid-content-data' => 'अमान्यः सामग्रीदत्तांशः',
 'content-not-allowed-here' => '[[$2]] इति पृष्ठे "$1" सामग्री अनुमता नास्ति।',
+'editwarning-warning' => 'अस्मात् पृष्ठात् गमनेन अत्र भवता कृतानि परिवर्तनानि निष्फलानि भवेयुः ।
+भवता यदि प्रविष्टं तर्हि मम इष्टतमानि इत्यत्र अस्मिन् विभागे सम्पादनेन एषः प्रबोधः यथा न आगच्छेत् तथा कर्तुं शक्यते ।',
 
 # Content models
 'content-model-wikitext' => 'विकिपाठः',
@@ -1306,15 +1307,6 @@ You can still [$1 view this revision]",
 अश्मिन् समये भवान् गूगल माध्यमेन अन्वेषणं कर्तुं शक्नोति
 स्मरयतु यत् {{SITENAME}} इति स्थलस्य क्रमाङ्का नैव अद्यातना  इति सोच्यते।',
 
-# Quickbar
-'qbsettings' => 'शीघ्रपट',
-'qbsettings-none' => 'नास्ति',
-'qbsettings-fixedleft' => 'बामे स्थापितः',
-'qbsettings-fixedright' => 'दक्षिणे स्थापितः',
-'qbsettings-floatingleft' => 'वामप्लवनम् ।',
-'qbsettings-floatingright' => 'दक्षिणे प्लवनम् ।',
-'qbsettings-directionality' => 'निश्चितम् । ते भाषालिप्याः दिशात्मकतानुसारं भवति ।',
-
 # Preferences page
 'preferences' => 'इष्टतमानि',
 'mypreferences' => 'मम इष्टतमानि',
index b465a21..eb5f112 100644 (file)
@@ -73,8 +73,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Сирэйи кэтээн көрөр дьон ахсаанын көрдөр',
 'tog-oldsig' => 'Баар илии баттааһын:',
 'tog-fancysig' => 'Бэйэ илии баттааһына (ыйынньыга суох)',
-'tog-externaleditor' => 'Атын этиллибэтэҕинэ тас эрэдээктэри туһан (билэр дьоҥҥо аналлаах, сиһилии [//www.mediawiki.org/wiki/Manual:External_editors манна] көр)',
-'tog-externaldiff' => 'Атын этиллибэтэҕинэ барыллары тэҥниир тас программаны туһан (билэр дьоҥҥо аналлаах, сиһилии [//www.mediawiki.org/wiki/Manual:External_editors манна] көр)',
 'tog-showjumplinks' => '"Манна бар" ыйынньыктары көрдөр',
 'tog-uselivepreview' => 'Тутатына хайдах буоларын көрүү (JavaScript, тургутуу быһыытынан)',
 'tog-forceeditsummary' => 'Тугу уларыппытым туһунан суруйбатахпына сэрэт',
@@ -88,6 +86,7 @@ $messages = array(
 'tog-diffonly' => 'Икки барылы тэҥнииргэ сирэй иһин көрдөрүмэ',
 'tog-showhiddencats' => 'Кистэммит категориялары көрдөр',
 'tog-norollbackdiff' => 'Төннөрүү кэнниттэн барыллар уратыларын көрдөрүмэ',
+'tog-useeditwarning' => 'Эрэдээксийэлиир сирэйтэн уларытыыларбын бигэргэппэккэ тахсаары гыннахпына сэрэтээр',
 
 'underline-always' => 'Куруук',
 'underline-never' => 'Аннынан тардыма',
@@ -520,8 +519,8 @@ $2',
 онон киирии тылы өйдөтөр кыах эмиэ суох.',
 'eauthentsent' => 'Быстах кэмҥэ туттуллар киирии тыл саҥа кыттааччы эл. почтатыгар ыытылынна.
 Бу аадырыс эйиэнэ буоларын бигэргэтэргэ өссө тугу гыныахтааҕыҥ туһунан сурукка кэпсэниллэр.',
-'throttled-mailpassword' => 'Ð\9aииÑ\80ии Ñ\82Ñ\8bлÑ\8b Ó©Ð¹Ð´Ó©Ñ\82Ó©Ñ\80 Ñ\81иÑ\81Ñ\82иÑ\8dма бүтэһик {{PLURAL:$1|чаас|$1 чаас}} иһигэр туттулла сылдьыбыт.
-Киирии тылы {{PLURAL:$1|чааска|$1 чааска}} биирдэ эрэ ыйытыахха сөп.',
+'throttled-mailpassword' => 'Ð\9aииÑ\80ии Ñ\82Ñ\8bлÑ\8b Ó©Ð¹Ð´Ó©Ñ\82Ó©Ñ\80 Ñ\82Ñ\8dÑ\80ил бүтэһик {{PLURAL:$1|чаас|$1 чаас}} иһигэр туттулла сылдьыбыт.
өмүскэнэр соруктан сылтаан киирии тылы {{PLURAL:$1|чааска|$1 чааска}} биирдэ эрэ ыйытыахха сөп.',
 'mailerror' => 'Сурук ыытарга алҕас таҕыста: $1',
 'acct_creation_throttle_hit' => 'Эн IP-гыттан бүгүн {{PLURAL:$1|1 аат оҥоһуллубут|$1 аат бэлиэтэммит}} буолан бүгүҥҥү күннээҕи нуорма туолбут.
 Бу IP-тан киирэр дьон саҥа ааты билигин бэлиэтиир кыахтара суох.',
@@ -573,7 +572,7 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'Киирии тылы саҥаттан',
-'passwordreset-text' => 'Ð\91Ñ\83 Ñ\84оÑ\80манÑ\8b Ñ\82олоÑ\80он Ð°ÐºÐºÐ°Ð°Ñ\83нÑ\83Ò¥ Ñ\82Ñ\83Ò»Ñ\83нан Ñ\81Ñ\83Ñ\80Ñ\83к Ñ\82Ñ\83Ñ\82Ñ\83оÑ\85Ñ\85Ñ\83н Ñ\81өп.',
+'passwordreset-text' => 'УÑ\80Ñ\83ккÑ\83 ÐºÐ¸Ð¸Ñ\80ии Ñ\82Ñ\8bлÑ\8b Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80га Ð±Ñ\83 Ñ\84оÑ\80манÑ\8b Ñ\82олоÑ\80.',
 'passwordreset-legend' => 'Киирии тылы саҥаттан',
 'passwordreset-disabled' => 'Бу биикигэ киирии тылы саҥардыы бобуллубут.',
 'passwordreset-pretext' => '{{PLURAL:$1||Аллара көстөр дааннайдартан биирин талан суруй}}',
@@ -583,17 +582,17 @@ $2',
 'passwordreset-capture-help' => 'Бу бэлиэни туруордаххына кыттааччыга ыытыллар сурук (быстах кэмҥэ туһаныллар киирии тыллаах) көстүө.',
 'passwordreset-email' => 'Электроннай почтата:',
 'passwordreset-emailtitle' => '{{SITENAME}} бырайыакка аатын туһунан',
-'passwordreset-emailtext-ip' => 'Ð\9aим Ñ\8dÑ\80Ñ\8d (баÒ\95аÑ\80 Ñ\8dн Ð±Ñ\83олÑ\83о, Ð±Ñ\83 IP-Ñ\82Ñ\82ан $1)  {{SITENAME}} ($4) Ð±Ñ\8bÑ\80айÑ\8bакка Ð±Ñ\8dлиÑ\8dÑ\82Ñ\8dнииҥ Ñ\82Ñ\83Ò»Ñ\83нан Ñ\81ибидиÑ\8dннÑ\8cÑ\8dни ÐºÓ©Ñ\80дөөбүт.
-Бу электрон аадырыһы кытта бу {{PLURAL:$3|аат ситимнээх|ааттар ситимнээхтэр}}
+'passwordreset-emailtext-ip' => 'Ð\9aим Ñ\8dÑ\80Ñ\8d (баÒ\95аÑ\80 Ñ\8dн Ð±Ñ\83олÑ\83о, Ð±Ñ\83 IP-Ñ\82Ñ\82ан $1)  {{SITENAME}} ($4) Ð±Ñ\8bÑ\80айÑ\8bакка ÐºÐ¸Ð¸Ñ\80ии Ñ\82Ñ\8bлÑ\8b Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80 Ñ\82Ñ\83Ò»Ñ\83нан Ñ\8bйÑ\8bÑ\82Ñ\8bк Ð±Ð¸Ñ\8dÑ\80бит.
+Бу электрон аадырыһы кытта бу {{PLURAL:$3|аат ситимнээх|ааттар ситимнээхтэр}}:
 
 $2
 
 Бу быстах кэмҥэ аналлаах {{PLURAL:$3|киирии тыл|кирии тыллар}} {{PLURAL:$5|биир күн үлэлиэҕэ|$5 күн үлэлиэхтэрэ}}.
 Эн тиһиликкэ ааккын этэн саҥа киирии тылы киллэриэхтээххин.
 Өскө бу ыйытыгы ыыппатах буоллаххына, эбэтэр урукку киирии тылгын өйдөөн кэлбит буоллаххына 
-бу биллэриини аахайыа суоххун сөп.
+бу биллэриини ааххайыа суоххун сөп.
 Оччоҕо урукку киирии тылыҥ оннунан хаалыа.',
-'passwordreset-emailtext-user' => '$1 Ð´Ð¸Ñ\8dн ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b  {{SITENAME}} ($4) Ð±Ñ\8bÑ\80айÑ\8bакка Ð±Ñ\8dлиÑ\8dÑ\82Ñ\8dнииҥ Ñ\82Ñ\83Ò»Ñ\83нан Ñ\81ибидиÑ\8dннÑ\8cÑ\8dни ÐºÓ©Ñ\80дөөбүт.
+'passwordreset-emailtext-user' => '$1 Ð´Ð¸Ñ\8dн ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b  {{SITENAME}} ($4) Ð±Ñ\8bÑ\80айÑ\8bакка ÐºÐ¸Ð¸Ñ\80ии Ñ\82Ñ\8bлгÑ\8bн Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80 Ñ\82Ñ\83Ò»Ñ\83нан Ñ\8bйÑ\8bÑ\82Ñ\8bк Ñ\8bÑ\8bппÑ\8bт.
 Бу электрон аадырыһы кытта бу {{PLURAL:$3|аат ситимнээх|ааттар ситимнээхтэр}}
 
 $2
@@ -601,13 +600,13 @@ $2
 Бу быстах кэмҥэ аналлаах {{PLURAL:$3|киирии тыл|кирии тыллар}} {{PLURAL:$5|биир күн үлэлиэҕэ|$5 күн үлэлиэхтэрэ}}.
 Эн тиһиликкэ ааккын этэн саҥа киирии тылы киллэриэхтээххин.
 Өскө бу ыйытыгы ыыппатах буоллаххына, эбэтэр урукку киирии тылгын өйдөөн кэлбит буоллаххына 
-бу биллэриини аахайыа суоххун сөп.
+бу биллэриини ааххайыа суоххун сөп.
 Оччоҕо урукку киирии тылыҥ оннунан хаалыа.',
 'passwordreset-emailelement' => 'Кыттааччы: $1
 Быстах киирии тыл: $2',
-'passwordreset-emailsent' => 'СанаÑ\82Ñ\8bÑ\8b Ñ\8bÑ\8bÑ\82Ñ\8bлÑ\8bнна.',
-'passwordreset-emailsent-capture' => 'Ð\9cанна Ñ\8bÑ\8bÑ\82Ñ\8bллÑ\8bбÑ\8bÑ\82 Ñ\81анаÑ\82аÑ\80 Ñ\81Ñ\83Ñ\80Ñ\83к көрдөрүлүннэ.',
-'passwordreset-emailerror-capture' => 'Манна санатар сурук көрдөрүлүннэ, бу төрүөттэн сатаан барбата: $1',
+'passwordreset-emailsent' => 'Ð\9aииÑ\80ии Ñ\82Ñ\8bлÑ\8b Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80 Ñ\82Ñ\83Ò»Ñ\83нан Ñ\81Ñ\83Ñ\80Ñ\83к Ð±Ð°Ñ\80да.',
+'passwordreset-emailsent-capture' => 'Ð\9aииÑ\80ии Ñ\82Ñ\8bлÑ\8b Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80 Ñ\82Ñ\83Ò»Ñ\83нан Ñ\81Ñ\83Ñ\80Ñ\83к Ð°Ð»Ð»Ð°Ñ\80а Ñ\8dмиÑ\8d көрдөрүлүннэ.',
+'passwordreset-emailerror-capture' => 'Манна киирии тылы уларытар туһунан сурук көрдөрүлүннэ. Ол эрэн сурук бу төрүөттэн сатаан барбата: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Ааадырыһын уларыт',
@@ -823,6 +822,8 @@ IP-аадырыһа эрэ көстөр.
 'content-failed-to-parse' => '$2 иһинээҕитэ $1 көрүҥэр сөп түбэспэт: $3.',
 'invalid-content-data' => 'Алҕастаах дааннайдар',
 'content-not-allowed-here' => '[[$2]] сирэйгэ "$1" туттуллуо суохтаах',
+'editwarning-warning' => 'Атын сирэйгэ көстөххүнэ билигин оҥорбут уларытыыларыҥ барыта сүтэн хаалыахтара.
+Бэлиэтэммит буоллаҕына, бу сэрэтиини туруорууларыҥ «{{int:prefs-editing}}» сирэйигэр араарыаххын сөп.',
 
 # Content models
 'content-model-wikitext' => 'биики-тиэкис',
@@ -1087,7 +1088,7 @@ $1",
 'search-interwiki-default' => '$1 түмүгэ:',
 'search-interwiki-more' => '(өссө)',
 'search-relatedarticle' => 'Сигэнэр',
-'mwsuggest-disable' => 'AJAX этэн биэриилэрин араар',
+'mwsuggest-disable' => 'Көрдөөһүн этэн биэриилэрин араар',
 'searcheverything-enable' => 'Туох баар аат далларыгар көрдөөһүн',
 'searchrelated' => 'сибээстэммит',
 'searchall' => 'бары',
@@ -1107,15 +1108,6 @@ $1",
 'search-external' => 'Тастан көрдөөһүн',
 'searchdisabled' => '{{SITENAME}} көрдүүр тэрилэ араарыллыбыт. Атын көрдүүр системаларынан наадыйар сирэйдэргитин көрдөтүөххүтүн сөп. Ол гынан баран поисковик кээһигэр баар торум эргэрбит буолуон сөп.',
 
-# Quickbar
-'qbsettings' => 'Навигация панела',
-'qbsettings-none' => 'Көрдөрүмэ',
-'qbsettings-fixedleft' => 'Хаҥас өттө хамсаабат',
-'qbsettings-fixedright' => 'Уҥа өттө хамсаабат',
-'qbsettings-floatingleft' => 'Хаҥас өттө устаҥныыр',
-'qbsettings-floatingright' => 'Уҥа өттө устаҥныыр',
-'qbsettings-directionality' => 'Туттарыллыбыт, тылыҥ суругун-бичигин хайысхатыттан тутулуктаах',
-
 # Preferences page
 'preferences' => 'Уларытыылар',
 'mypreferences' => 'Туруоруулар',
@@ -1669,7 +1661,6 @@ $1',
 'http-read-error' => 'HTTP ааҕыытын алҕаһа.',
 'http-timed-out' => 'HTTP-көрдөбүл толоруллуохтаах болдьоҕо ааста.',
 'http-curl-error' => 'URL-га тахсыы алҕаһа: $1',
-'http-host-unreachable' => 'URL-га тахсыы сатаммата.',
 'http-bad-status' => 'HTTP-ыйытыгы көрүү кэмигэр туох эрэ сатаммата: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1986,15 +1977,6 @@ $1',
 'listusers-noresult' => 'Кыттааччылар булуллубатылар.',
 'listusers-blocked' => '(хааччахтаммыт)',
 
-# Special:ActiveUsers
-'activeusers' => 'Көхтөөх кыттааччылар тиһиктэрэ',
-'activeusers-intro' => 'Бу кэлиҥҥи $1 {{PLURAL:$1|күҥҥэ|күннэргэ}} тугу эмэ гыммыт кыттааччылар тиһиктэрэ.',
-'activeusers-count' => 'Кэнники $3 күҥҥэ саҥа $1 көннөрүү киирбит',
-'activeusers-from' => 'Мантан саҕалаан кыттааччылары көрүү:',
-'activeusers-hidebots' => 'Руобаттары көрдөрүмэ',
-'activeusers-hidesysops' => 'Дьаһабыллары көрдөрүмэ',
-'activeusers-noresult' => 'Кыттааччылар көстүбэтилэр.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Кыттааччылар бөлөхтөрүн бырааптара',
 'listgrouprights-summary' => 'Манна бу биикигэ баар бөлөхтөр уонна кинилэр киирэр бырааптара көстөллөр.
@@ -2510,8 +2492,8 @@ $1',
 Ол аата эн сирэй аатын сыыһа уларыппыт буоллаххына төттөрү урукку аатыгар төннөрүөххүн сөп, ол гынан баран баар сирэйи алҕас сотор кыаҕыҥ суох.
 
 '''Сэрэтии!'''
-Сирэй аатын уларытыы бөдөҥ уонна эрдэттэн өйдөммөтөх содуллаах буолуон сөп.
-Онон, бука диэн салгыаҥ иннинэ үчүгэйдик толкуйдаа.",
+''Элбэхтик туһаныллар'' сирэй аатын уларытыы бөдөҥ уонна эрдэттэн өйдөммөтөх содуллаах буолуон сөп.
+Онон, бука диэн, салгыаҥ иннинэ үчүгэйдик толкуйдаа.",
 'movepagetext-noredirectfixer' => "Манна баар форманы туһанан сирэй аатын уларытыаххын сөп.
 Бу түбэлтэҕэ уларытыы сурунаала саҥа сиргэ көһөр.
 Урукку аат саҥа сирэйгэ утаарар сирэйгэ кубулуйар.
@@ -2852,11 +2834,6 @@ $1',
 'pageinfo-protect-cascading-from' => 'Каскадынан көмүскэл мантан',
 
 # Skin names
-'skinname-standard' => 'Классика',
-'skinname-nostalgia' => 'Мунчаарыы',
-'skinname-myskin' => 'Миэнэ',
-'skinname-chick' => 'Чуппууска',
-'skinname-simple' => 'Судургу',
 'skinname-modern' => 'Билиҥҥи',
 
 # Patrolling
@@ -3654,7 +3631,7 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 
 # New logging system
 'logentry-delete-delete' => '$3 сирэйи $1 соппут',
-'logentry-delete-restore' => '$3 Ñ\81иÑ\80Ñ\8dйи $1 Ñ\82өннөÑ\80бүт',
+'logentry-delete-restore' => '$3 Ñ\81иÑ\80Ñ\8dйи $1 Ñ\81Ó©Ñ\80гүппүт',
 'logentry-delete-event' => 'Сурунаал {{PLURAL:$5|суругун|$5 суруктарын}} көстүүтүн манна $3: $4 $1 уларыппыт',
 'logentry-delete-revision' => 'Сурунаал {{PLURAL:$5|суругун|$5 суруктарын}} көстүүтүн бу сирэйгэ $3: $4 $1 уларыппыт',
 'logentry-delete-event-legacy' => '$3 сурунаал суруктарын көстүүтүн $1 уларыппыт',
@@ -3673,15 +3650,15 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 'revdelete-restricted' => 'хааччахтааһын администраатардарга сыһыаннаах',
 'revdelete-unrestricted' => 'хааччахтааһын админстраатардартан уһулунна',
 'logentry-move-move' => '$1 $3 сирэй аатын маннык $4 уларыппыт',
-'logentry-move-move-noredirect' => '$1 $3 сирэй аатын маннык $4 уларыппыт, утаарыы-сирэй оҥорботох',
+'logentry-move-move-noredirect' => '$3 сирэй аатын $1 маннык $4 уларыппыт, утаарыы-сирэй хаалларбатах',
 'logentry-move-move_redir' => '$3 сирэйи $1 диэн кыттааччы манныкка $4  уларыппыт (утаарыы үрдүнэн)',
-'logentry-move-move_redir-noredirect' => '$1 $3 сирэй аатын утаарыы үрдүнэн маннык $4 уларыппыт, утаарыы-сирэй оҥорботох',
-'logentry-patrol-patrol' => '$1 $3 сирэй $4 барылын ботуруулламмыт курдук бэлиэтээбит',
-'logentry-patrol-patrol-auto' => '$1 $3 сирэй $4 барылын аптамаатынан ботуруулламмыт курдук бэлиэтээбит',
-'logentry-newusers-newusers' => '$1 диэн кыттааччы бэлиэтэннэ',
+'logentry-move-move_redir-noredirect' => '$1 $3 сирэй аатын утаарыы үрдүнэн маннык $4 уларыппыт, утаарыы-сирэй хаалларбатах',
+'logentry-patrol-patrol' => '$3 сирэй $4 барылын $1 ботурууллаабыт',
+'logentry-patrol-patrol-auto' => '$3 сирэй $4 барылын $1 аптамаатынан ботурууллаабыт',
+'logentry-newusers-newusers' => 'Кыттааччы $1 диэн ааты бэлиэтээтэ',
 'logentry-newusers-create' => '$1 диэн кыттааччы бэлиэтэннэ',
-'logentry-newusers-create2' => '$3 кыттааччы аатын $1 бэлиэтээбит',
-'logentry-newusers-autocreate' => 'Ð\9cаннÑ\8bк Ð°Ð°Ñ\82 $1 Ð°Ð¿Ñ\82амааÑ\82Ñ\8bнан Ð±Ñ\8dлиÑ\8dÑ\82Ñ\8dнилиннÑ\8d',
+'logentry-newusers-create2' => '$3 кыттааччы аатын $1 бэлиэтээтэ',
+'logentry-newusers-autocreate' => 'Маннык аат $1 аптамаатынан бэлиэтэннэ',
 'rightsnone' => '(суох)',
 
 # Feedback
index 7060b13..f22b6e8 100644 (file)
@@ -49,8 +49,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Ńelok laṛcaṛkoaḱ songkha uduḱme',
 'tog-oldsig' => 'Menaḱ signạtar',
 'tog-fancysig' => 'Signạcar do wikiṭesk hisạbte moneyemẽ (jahan acte hoyoḱ joṛao bạgikate)',
-'tog-externaleditor' => 'Etohoṕre bahre reaḱ sompadonićaḱ beohar hoyoḱma (khali sẽṛa beoharić lạgit́te, kompeuṭare asokae seṭing jạruṛa. [//www.mediawiki.org/wiki/manual:External_editors More information.])',
-'tog-externaldiff' => 'Etohoṕre bahre reaḱ sompadonićaḱ beohar hoyoḱma (khali sẽṛa beoharić lạgit́te, kompeuṭare asokae seṭing jạruṛa. [//www.mediawiki.org/wiki/manual:External_editors More information.])',
 'tog-showjumplinks' => '"Calaḱmẽ" beohar joṛao ehop hoyoḱma',
 'tog-uselivepreview' => 'Jewet́ ńeloḱ beoharme (JavaScript jaruṛ menaḱa)',
 'tog-forceeditsummary' => 'Khạli sompadon guṭkatha em oktere iń baḍae ocoyiń hoyoḱma',
@@ -737,9 +735,6 @@ Unuduḱ: '''({{int:cur}})''' = nahaḱ nãwã aroeko saõte tulạo, '''({{int:
 'powersearch-toggleall' => 'Sanamaḱ',
 'powersearch-togglenone' => 'Okaṭaḱ hõ baṅ',
 
-# Quickbar
-'qbsettings-none' => 'Okaṭaḱ hõ baṅ',
-
 # Preferences page
 'preferences' => 'Pạsindko',
 'mypreferences' => 'Iñaḱ pạsindko',
index 94ec90a..c6ddce6 100644 (file)
@@ -182,8 +182,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Ammustra lu nùmmiru di utenti ca sèquinu la pàggina',
 'tog-oldsig' => 'Firma attuali:',
 'tog-fancysig' => 'Interpitra li cumanna wiki nâ firma (senza liami automaticu)',
-'tog-externaleditor' => 'Usa di default nu editor esternu (sulu pi li esperti, abbisognanu mpustazzioni particulari pô tò computer. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
-'tog-externaldiff' => "Usa di default un prugramma di diff sternu (sulu pi utilizzatura sperti, addumanna l'usu di mpustazzioni particulari supra lu sò computer. [//www.mediawiki.org/wiki/Manual:External_editors Pi cchiossai nfurmazzioni.])",
 'tog-showjumplinks' => "Attiva li culligamenti accissìbbili 'và a'",
 'tog-uselivepreview' => "Attiva la funzioni ''Live preview'' (richiedi JavaScript; spirimintali)",
 'tog-forceeditsummary' => "Chiedi cunferma siddu l'uggettu dû canciamentu è vacanti",
@@ -1033,14 +1031,6 @@ S'havi accirtari ca la cuntinuità storica di la pàggina nun veni altirata.",
 'search-external' => 'Ricerca sterna',
 'searchdisabled' => 'La circata nterna di {{SITENAME}} hà statu disabbilitata. Nta stu mentri, poi usari la circata supra Google o supra àutri muturi di circata. Accura ca li sò ìnnici dê cuntinuti di {{SITENAME}} ponnu nun èssiri aggiurnati.',
 
-# Quickbar
-'qbsettings' => 'Pusizzioni QuickBar',
-'qbsettings-none' => 'Nuddu',
-'qbsettings-fixedleft' => 'Fissu a manu manca',
-'qbsettings-fixedright' => 'Fissu a manu dritta',
-'qbsettings-floatingleft' => 'Fluttuanti a manu manca',
-'qbsettings-floatingright' => 'Fluttuanti a manu dritta',
-
 # Preferences page
 'preferences' => 'prifirenzi',
 'mypreferences' => 'Li mè prifirenzi',
@@ -1727,14 +1717,6 @@ Protucolli suppurtati: <code>$1</code>',
 'listusers-noresult' => "Nuddu utenti attruvatu. Virificari l'usu di caràttiri maiùsculi/minùsculi.",
 'listusers-blocked' => '(bloccatu)',
 
-# Special:ActiveUsers
-'activeusers' => 'Lista dî utenti attivi',
-'activeusers-count' => "$1 {{PLURAL:$1|canciamentu|canciamenti}} nti {{PLURAL:$3|l'ùrtimu jornu| nti l'ùrtimi $3 jorna}}",
-'activeusers-from' => 'Ammustra li utenti a pàrtiri da:',
-'activeusers-hidebots' => 'Bot ammucciati',
-'activeusers-hidesysops' => 'Amministratura ammucciati',
-'activeusers-noresult' => 'Nussun utenti truvatu.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Diritti dô gruppu utenti',
 'listgrouprights-summary' => "Ccà sutta sunnu elincati li gruppi utenti difiniti pi sta wiki, cu li dritti d'accessu assuciati a iddi. Pi sapìrinni chiossai supra li dritti, lèggiti [[{{MediaWiki:Listgrouprights-helppage}}|sta pàggina]].",
@@ -2016,7 +1998,7 @@ $1',
 'sp-contributions-userrights' => 'gistioni dî dritti utenti',
 'sp-contributions-search' => 'Ricerca cuntribbuti',
 'sp-contributions-username' => 'Nnirizzu IP o nomu utenti:',
-'sp-contributions-toponly' => "Ammuscia sulu li cuntribbuti ca sunnu l'ùrtimi rivisioni pâ pàggina",
+'sp-contributions-toponly' => "Ammuccia sulu li cuntribbuta ca sunnu l'ùrtimi rivisioni pâ pàggina",
 'sp-contributions-submit' => 'Risciduta',
 
 # What links here
@@ -2411,13 +2393,8 @@ Visita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//trans
 'pageinfo-toolboxlink' => 'Nfurmazzioni ncapu la pàggina',
 
 # Skin names
-'skinname-standard' => 'Classicu',
-'skinname-nostalgia' => 'Nustargìa',
 'skinname-cologneblue' => 'Cologne Blu',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Sìmprici',
 'skinname-modern' => 'Mudernu',
 
 # Patrolling
index ffd9dc3..5f8c725 100644 (file)
@@ -237,8 +237,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Prikaži broj korisnika koji prate',
 'tog-oldsig' => 'Postojeći potpis:',
 'tog-fancysig' => 'Smatraj potpis kao wikitekst (bez automatskog linka)',
-'tog-externaleditor' => 'Redovno koristite eksterni editor (samo za naprednije korisnike, potrebne su posebne postavke na vašem računaru)',
-'tog-externaldiff' => 'Redovno koristi vanjski (diff) program za prikaz razlika (samo za naprednije korisnike, potrebne posebne postavke na vašem računaru [//www.mediawiki.org/wiki/Manual:External_editors Više informacija.])',
 'tog-showjumplinks' => 'Omogući opciju "skoči na" linkove',
 'tog-uselivepreview' => 'Koristite pretpregled uživo (potreban JavaScript) (eksperimentalno)',
 'tog-forceeditsummary' => 'Opomeni me pri unosu praznog sažetka',
@@ -1286,15 +1284,6 @@ Pokušajte u svoju pretragu staviti ''all:'' da se pretražuje cjelokupan sadrž
 U međuvremenu možete pretraživati preko Googlea.
 Uzmite u obzir da njegovi indeksi za ovu Wiki ne moraju biti ažurirani.',
 
-# Quickbar
-'qbsettings' => 'Podešavanja brze palete',
-'qbsettings-none' => 'Nikakva',
-'qbsettings-fixedleft' => 'Fiksirana lijevo',
-'qbsettings-fixedright' => 'Fiksirana desno',
-'qbsettings-floatingleft' => 'Plutajuća lijevo',
-'qbsettings-floatingright' => 'Plutajuća desno',
-'qbsettings-directionality' => 'Fiksno, ovisno o smjeru pisma Vašeg jezika',
-
 # Preferences page
 'preferences' => 'Postavke',
 'mypreferences' => 'Postavke',
@@ -1844,7 +1833,6 @@ Za optimalnu sigurnost, img_auth.php je onemogućena.',
 'http-read-error' => 'Greška pri čitanju HTTP.',
 'http-timed-out' => 'Istekao HTTP zahtjev.',
 'http-curl-error' => 'Greška pri otvaranju URLa: $1',
-'http-host-unreachable' => 'Ovaj URL nije bilo moguće otvoriti',
 'http-bad-status' => 'Nastao je problem tokom HTTP zahtjeva: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2167,15 +2155,6 @@ Podržani {{PLURAL:$2|protokol|protokoli}}: <code>$1</code> (default je http://
 'listusers-noresult' => 'Nije pronađen korisnik.',
 'listusers-blocked' => '(blokiran)',
 
-# Special:ActiveUsers
-'activeusers' => 'Spisak aktivnih korisnika',
-'activeusers-intro' => 'Ovo je spisak korisnika koji su napravili neku aktivnost u {{PLURAL:$1|zadnji $1 dan|zadnja $1 dana|zadnjih $1 dana}}.',
-'activeusers-count' => '{{PLURAL:$1|$1 izmjena|$1 izmjene|$1 izmjena}} u {{PLURAL:$3|posljednji $3 dan|posljednja $3 dana|posljednjih $3 dana}}',
-'activeusers-from' => 'Prikaži korisnike koji počinju sa:',
-'activeusers-hidebots' => 'Sakrij botove',
-'activeusers-hidesysops' => 'Sakrij administratore',
-'activeusers-noresult' => 'Nije pronađen korisnik.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Prava korisničkih grupa',
 'listgrouprights-summary' => 'Slijedi spisak korisničkih grupa na ovoj wiki, s njihovim pravima pristupa.
index c7480d1..817bb8a 100644 (file)
@@ -222,8 +222,6 @@ $messages = array(
 'tog-shownumberswatching' => 'මුර කරනු ලබන පරිශීලකයන් සංඛ්‍යාව පෙන්වන්න',
 'tog-oldsig' => 'පවතින අත්සන:',
 'tog-fancysig' => 'අත්සන විකිපෙළ (ස්වයංක්‍රීය සබැඳියක් විරහිතව) ලෙසින් සලකන්න',
-'tog-externaleditor' => 'බාහිර සම්පාදකයක් භාවිත කරන්න (ප්‍රවීණයන් සඳහා පමණි, ඔබගේ පරිගණකයේ විශේෂිත වූ සැකසුම් අවශ්‍ය වේ. [//www.mediawiki.org/wiki/Manual:External_editors තවත් තොරතුරු.])',
-'tog-externaldiff' => 'බාහිර ප්‍රභේදයක් භාවිත කරන්න (ප්‍රවීණයන් සඳහා පමණි, ඔබගේ පරිගණකයේ විශේෂිත වූ සැකසුම් අවශ්‍ය වේ. [//www.mediawiki.org/wiki/Manual:External_editors තවත් තොරතුරු.])',
 'tog-showjumplinks' => '"වෙත පනින්න"  යන ප්‍රවේශතා සබැඳියන් සක්‍රීය කරන්න',
 'tog-uselivepreview' => 'තත්කාල පෙර-දසුන භාවිතා කරන්න (ජාවාස්ක්‍රිප්ට්) (පරීක්ෂණාත්මක)',
 'tog-forceeditsummary' => 'හිස් සංස්කරණ සාරාංශයකට මා ඇතුළු වන විට මාහට ඉඟි කරන්න',
@@ -238,6 +236,7 @@ $messages = array(
 'tog-showhiddencats' => 'සැඟවුනු ප්‍රවර්ග පෙන්වන්න',
 'tog-noconvertlink' => 'සබැඳියන්ගේ ශීර්ෂ පෙරැළීම අක්‍රීය කරන්න',
 'tog-norollbackdiff' => 'පුනරාවර්තනයක් කිරීමෙන් පසු වෙනස්වීම් අත්හරින්න',
+'tog-useeditwarning' => 'මා සංස්කරණ පිටුවක් සුරකිනු නොලැබූ වෙනස්කිරීම් සමඟ අතහැර යන විට අවවාද කරන්න',
 
 'underline-always' => 'සැමවිටම කරන්න',
 'underline-never' => 'කිසිවිටෙක නොකරන්න',
@@ -967,6 +966,8 @@ $2
 එය දැනටමත් පවතියි.',
 'defaultmessagetext' => 'සාමාන්‍ය පණිවුඩ පෙළ',
 'invalid-content-data' => 'වලංගු නොවන අන්තර්ගත දත්ත',
+'editwarning-warning' => 'අවධානයට: මෙම පිටුවෙන් නික්ම යාම ඔබ සිදු කළ වෙනස්කම් නැතිවී යෑමට හේතු විය හැක.
+ඔබ ප්‍රවිෂ්ටවී ඇත්නම්, ඔබගේ වරණයන්වල "සංසකරණය කිරීම්" කොටසේ ඇති මෙම අනතුරු ඇඟවීම අක්‍රීය කළ හැක.',
 
 # Content models
 'content-model-wikitext' => 'විකිපෙළ',
@@ -3054,8 +3055,6 @@ $1',
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans',
index 8fe62a8..bd9dee3 100644 (file)
@@ -311,8 +311,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Zobraziť počet používateľov sledujúcich stránku',
 'tog-oldsig' => 'Súčasný podpis:',
 'tog-fancysig' => 'Považovať podpisy za wikitext (bez automatických odkazov)',
-'tog-externaleditor' => 'Používať štandardne externý editor (iba pre expertov, vyžaduje špeciálne nastavenie vášho počítača. [//www.mediawiki.org/wiki/Manual:External_editors Ďalšie informácie.])',
-'tog-externaldiff' => 'Používať štandardne externý diff (iba pre expertov, vyžaduje špeciálne nastavenie vášho počítača. [//www.mediawiki.org/wiki/Manual:External_editors Ďalšie informácie.])',
 'tog-showjumplinks' => 'Používať odkazy „skočiť na“ pre lepšiu dostupnosť',
 'tog-uselivepreview' => 'Používať živý náhľad (JavaScript) (experimentálna funkcia)',
 'tog-forceeditsummary' => 'Upozoriť ma, keď nevyplním zhrnutie úprav',
@@ -327,6 +325,7 @@ $messages = array(
 'tog-showhiddencats' => 'Zobraziť skryté kategórie',
 'tog-noconvertlink' => 'Vypnúť konverziu názvov odkazov',
 'tog-norollbackdiff' => 'Vynechať rozdiel po vykonaní rollbacku',
+'tog-useeditwarning' => 'Upozorniť ma, keď opúšťam upravovaciu stránku s neuloženými zmenami',
 
 'underline-always' => 'Vždy',
 'underline-never' => 'Nikdy',
@@ -415,6 +414,7 @@ $messages = array(
 'newwindow' => '(otvorí v novom okne)',
 'cancel' => 'Zrušiť',
 'moredotdotdot' => 'Viac...',
+'morenotlisted' => 'Ďalšie neuvedené...',
 'mypage' => 'Stránka',
 'mytalk' => 'Diskusia',
 'anontalk' => 'Diskusia k tejto IP adrese',
@@ -448,6 +448,7 @@ $messages = array(
 'namespaces' => 'Menné priestory',
 'variants' => 'Varianty',
 
+'navigation-heading' => 'Navigačné menu',
 'errorpagetitle' => 'Chyba',
 'returnto' => 'Späť na $1.',
 'tagline' => 'Z {{GRAMMAR:genitív|{{SITENAME}}}}',
@@ -690,10 +691,19 @@ Správca, ktorý ho zamkol ponúkol toto vysvetlenie: „$3“.',
 
 Odteraz môžete používať {{GRAMMAR:akuzatív|{{SITENAME}}}} ako anonymný používateľ alebo sa môžete opäť <span class='plainlinks'>[$1 prihlásiť]</span> pod rovnakým alebo odlišným používateľským menom.
 Uvedomte si, že niektoré stránky sa môžu naďalej zobrazovať ako keby ste boli prihlásený, až kým nevymažete vyrovnávaciu pamäť vášho prehliadača.",
+'welcomeuser' => 'Vitajte,  $1 !',
+'welcomecreation-msg' => 'Váš účet bol vytvorený.
+Nezabudnite zmeniť svoje [[Special:Preferences|Predvoľby {{GRAMMAR:genitív|{{SITENAME}}}}]].',
 'yourname' => 'Používateľské meno:',
+'userlogin-yourname' => 'Používateľské meno',
+'userlogin-yourname-ph' => 'Zadajte svoje používateľské meno',
 'yourpassword' => 'Heslo:',
+'userlogin-yourpassword' => 'Heslo',
+'userlogin-yourpassword-ph' => 'Zadajte svoje heslo',
 'yourpasswordagain' => 'Zopakujte heslo:',
 'remembermypassword' => 'Pamätať si prihlásenie na tomto počítači (naviac $1 {{PLURAL:$1|deň|dni|dní}})',
+'userlogin-remembermypassword' => 'Zapamätať si ma',
+'userlogin-signwithsecure' => 'Prihlásiť sa na zabezpečený server',
 'securelogin-stick-https' => 'Zostať pripojený cez HTTPS po prihlásení',
 'yourdomainname' => 'Vaša doména:',
 'password-change-forbidden' => 'Na tejto wiki si nemôžete zmeniť heslo.',
@@ -706,13 +716,17 @@ Uvedomte si, že niektoré stránky sa môžu naďalej zobrazovať ako keby ste
 'logout' => 'Odhlásiť',
 'userlogout' => 'Odhlásiť',
 'notloggedin' => 'Neprihlásený/á',
+'userlogin-noaccount' => 'Nemáte ešte účet?',
+'userlogin-joinproject' => 'Pridajte sa k {{GRAMMAR:lokál|{{SITENAME}}}}',
 'nologin' => "Nemáte ešte účet? '''$1'''.",
 'nologinlink' => 'Vytvoriť nový účet',
 'createaccount' => 'Vytvoriť nový účet',
 'gotaccount' => "Máte už vytvorený účet? '''$1'''.",
 'gotaccountlink' => 'Prihlásiť',
 'userlogin-resetlink' => 'Zabudli ste svoje prihlasovacie údaje?',
-'createaccountmail' => 'e-mailom',
+'helplogin-url' => 'Pomoc:Prihlasovanie',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoc s prihlásením]]',
+'createaccountmail' => 'Použiť dočasné náhodné heslo a poslať ho na nižšie uvedenú emailovú adresu',
 'createaccountreason' => 'Dôvod:',
 'badretype' => 'Zadané heslá nie sú rovnaké.',
 'userexists' => 'Zadané používateľské meno sa už používa.
@@ -755,8 +769,8 @@ Prosím, prihláste sa znovu, keď ho dostanete.',
 'blocked-mailpassword' => 'Boli zablokované úpravy z vašej IP adresy, a tak nie je dovolené použiť funkciu znovuvyžiadania hesla, aby sa zabránilo zneužitiu.',
 'eauthentsent' => 'Email s potvrdením bol zaslaný na uvedenú emailovú adresu.
 Predtým ako sa na účet pošle akákoľvek ďalšia pošta, musíte splniť inštrukcie v emaili, aby sa potvrdilo, že účet je skutočne váš.',
-'throttled-mailpassword' => 'V priebehu {{PLURAL:$1|poslednej $1 hodiny|posledných $1 hodín}} už došlo k vyžiadaniu hesla.
-Aby sa zabránilo zneužitiu, vyžiadanie hesla je možné vykonať iba raz za {{PLURAL:$1|$1 hodinu|$1 hodiny|$1 hodín}}.',
+'throttled-mailpassword' => 'E-mail na obnovenie hesla už bol odoslaný v priebehu {{PLURAL:$1|poslednej $1 hodiny|posledných $1 hodín}}.
+Aby sa zabránilo zneužitiu, obnovenie hesla emailom je možné vykonať iba raz za {{PLURAL:$1|$1 hodinu|$1 hodiny|$1 hodín}}.',
 'mailerror' => 'Chyba pri posielaní e-mailu: $1',
 'acct_creation_throttle_hit' => 'Návštevníci tejto wiki z vašej IP adresy už za posledný deň vytvorili {{PLURAL:$1|$1 účet|$1 účty|$1 účtov}}, čo je maximálny počet povolený za toto časové obdobie.
 Z tohto dôvodu nemôžu návštevníci z tejto IP adresy momentálne vytvoriť ďalšie účty.',
@@ -784,6 +798,7 @@ Prosím, počkajte predtým, než to skúsite znova.',
 # Email sending
 'php-mail-error-unknown' => 'Neznáma chyba vo funkcii PHP mail()',
 'user-mail-no-addy' => 'Pokus o odoslanie e-mailu bez e-mailovej adresy.',
+'user-mail-no-body' => 'Sa pokúsil poslať email s prázdnym alebo neprimerane krátkym telom správy.',
 
 # Change password dialog
 'resetpass' => 'Zmeniť heslo',
@@ -805,9 +820,10 @@ Je možné, že sa vám už podarilo úspešne zmeniť svoje heslo alebo ste si
 
 # Special:PasswordReset
 'passwordreset' => 'Reset hesla',
-'passwordreset-text' => 'Po vyplnení tohto formulára dostanete emailom podrobnosti o vašom účte.',
+'passwordreset-text' => 'Vyplnením tohto formulára si vytvoríte nové heslo.',
 'passwordreset-legend' => 'Obnoviť heslo',
 'passwordreset-disabled' => 'Obnovenie hesla bolo na tejto wiki zakázané.',
+'passwordreset-emaildisabled' => 'E-mailové funkcie boli na tejto wiki vypnuté.',
 'passwordreset-pretext' => '{{PLURAL:$1|Zadajte nižšie uvedený údaj|Zadajte jeden z nižšie uvedených údajov}}',
 'passwordreset-username' => 'Používateľské meno:',
 'passwordreset-domain' => 'Doména:',
@@ -815,8 +831,7 @@ Je možné, že sa vám už podarilo úspešne zmeniť svoje heslo alebo ste si
 'passwordreset-capture-help' => 'Ak označíte toto políčko, bude e-mail (s dočasným heslom) okrem zaslania používateľovi zobrazený aj vám.',
 'passwordreset-email' => 'Emailová adresa:',
 'passwordreset-emailtitle' => 'Podrobnosti o účte na {{GRAMMAR:lokál|{{SITENAME}}}}',
-'passwordreset-emailtext-ip' => 'Niekto (pravdepodobne vy z IP adresy $1) požiadal pripomenutie podrobností o vašom
-účtu na {{GRAMMAR:genitív|{{SITENAME}}}} ($4). {{PLURAL:$3|Nasledujúci používateľský účet je spojený|Nasledujúce používateľské účty sú spojené}}
+'passwordreset-emailtext-ip' => 'Niekto (pravdepodobne vy z IP adresy $1) požiadal o obnovenie vášho hesla na {{GRAMMAR:genitív|{{SITENAME}}}} ($4). {{PLURAL:$3|Nasledujúci používateľský účet je spojený|Nasledujúce používateľské účty sú spojené}}
 s touto emailovou adresou:
 
 $2
@@ -825,8 +840,7 @@ $2
 Mali by ste sa prihlásiť teraz a zvoliť nové heslo. Ak túto žiadosť podal niekto iný alebo
 ak ste si spomenuli svoje pôvodné heslo a už ho chcete zmeniť, môžete túto správu
 ignorovať a ďalej používať vaše staré heslo.',
-'passwordreset-emailtext-user' => 'Používateľ $1 na {{GRAMMAR:genitív|{{SITENAME}}}} požiadal pripomenutie podrobností o vašom
-účtu na {{GRAMMAR:genitív|{{SITENAME}}}} ($4). {{PLURAL:$3|Nasledujúci používateľský účet je spojený|Nasledujúce používateľské účty sú spojené}}
+'passwordreset-emailtext-user' => 'Používateľ $1 na {{GRAMMAR:genitív|{{SITENAME}}}} požiadal o obnovenie vášho hesla na na {{GRAMMAR:genitív|{{SITENAME}}}} ($4). {{PLURAL:$3|Nasledujúci používateľský účet je spojený|Nasledujúce používateľské účty sú spojené}}
 s touto emailovou adresou:
 
 $2
@@ -837,9 +851,9 @@ ak ste si spomenuli svoje pôvodné heslo a už ho chcete zmeniť, môžete tút
 ignorovať a ďalej používať vaše staré heslo.',
 'passwordreset-emailelement' => 'Používateľské meno: $1
 Dočasné heslo:$2',
-'passwordreset-emailsent' => 'Email s heslom bol odoslaný.',
-'passwordreset-emailsent-capture' => 'Bol vytvorený pripomienkový e-mail, ktorý je zobrazený nižšie.',
-'passwordreset-emailerror-capture' => 'Bol vytvorený pripomienkový e-mail, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať používateľovi: $1',
+'passwordreset-emailsent' => 'Email s novým heslom bol odoslaný.',
+'passwordreset-emailsent-capture' => 'Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie.',
+'passwordreset-emailerror-capture' => 'Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať používateľovi: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Zmeniť emailovú adresu',
@@ -849,6 +863,7 @@ Dočasné heslo:$2',
 'changeemail-oldemail' => 'Súčasná e-mailová adresa:',
 'changeemail-newemail' => 'Nová e-mailová adresa:',
 'changeemail-none' => '(žiadna)',
+'changeemail-password' => 'Vaše heslo k {{GRAMMAR:lokál|{{SITENAME}}}}:',
 'changeemail-submit' => 'Zmeniť e-mail',
 'changeemail-cancel' => 'Zrušiť',
 
@@ -1015,8 +1030,8 @@ z voľného diela (public domain) alebo podobného zdroja neobmedzeného autorsk
 '''NEUMIESTŇUJTE SEM BEZ POVOLENIA DIELA CHRÁNENÉ AUTORSKÝM PRÁVOM!'''",
 'longpageerror' => "'''Chyba: Text, ktorý ste poslali má {{PLURAL:$1|jeden kilobajt|$1 kilobajty|$1 kilobajtov}}, čo je viac ako maximum {{PLURAL:$2|jeden kilobajt|$2 kilobajty|$2 kilobajtov}}.'''",
 'readonlywarning' => "'''UPOZORNENIE: Databáza bola počas upravovania stránky zamknutá z dôvodu údržby,
-takže stránku momentálne nemôžete uložiť. Môžete skopírovať a vložiť
-text do textového súboru a uložiť si ho na neskôr.'''
+takže svoje úpravy momentálne nemôžete uložiť.'''
+Môžete skopírovať a vložiť text do textového súboru a uložiť si ho na neskôr.
 
 Správca, ktorý ju zamkol, uviedol nasledovné vysvetlenie: $1",
 'protectedpagewarning' => "'''Upozornenie: Táto stránka bola zamknutá, takže ju môžu upravovať iba používatelia s oprávnením správcu.''' Dolu je pre informáciu posledná položka zo záznamu:",
@@ -1057,6 +1072,8 @@ Už existuje.',
 'content-failed-to-parse' => 'Nepodarilo sa spracovať obsah $2 pre model $1: $3',
 'invalid-content-data' => 'Neplatné dáta obsahu',
 'content-not-allowed-here' => 'Obsah „$1“ nie je povolený na stránke [[$2]]',
+'editwarning-warning' => 'Ak opustíte túto stránku, môžete tým stratiť všetky vykonané zmeny.
+Ak ste prihlásený, toto upozornenie môžete vypnúť v sekcii „{{int:prefs-editing}}“ svojich nastavení.',
 
 # Content models
 'content-model-wikitext' => 'wikitext',
@@ -1319,7 +1336,7 @@ Podrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'search-interwiki-default' => '$1 výsledkov:',
 'search-interwiki-more' => '(viac)',
 'search-relatedarticle' => 'Súvisiace',
-'mwsuggest-disable' => 'Vypnúť AJAX návrhy',
+'mwsuggest-disable' => 'Vypnúť návrhy vyhľadávania',
 'searcheverything-enable' => 'Vyhľadať vo všetkých menných priestoroch',
 'searchrelated' => 'súvisiace',
 'searchall' => 'všetko',
@@ -1338,15 +1355,7 @@ Podrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'powersearch-togglenone' => 'Žiadne',
 'search-external' => 'Externé vyhľadávanie',
 'searchdisabled' => 'Prepáčte! Fulltextové vyhľadávanie bolo dočasne vypnuté z dôvodu preťaženia. Zatiaľ môžete použiť hľadanie pomocou Google, ktoré však nemusí byť aktuálne.',
-
-# Quickbar
-'qbsettings' => 'Navigačný panel',
-'qbsettings-none' => 'Žiadne',
-'qbsettings-fixedleft' => 'Ukotvené vľavo',
-'qbsettings-fixedright' => 'Ukotvené vpravo',
-'qbsettings-floatingleft' => 'Plávajúce vľavo',
-'qbsettings-floatingright' => 'Plávajúce vpravo',
-'qbsettings-directionality' => 'Pevný, v závislosti na smerovosti písma vášho jazyka',
+'search-error' => 'Pri hľadaní sa vyskytla chyba:$1',
 
 # Preferences page
 'preferences' => 'Nastavenia',
@@ -1427,7 +1436,7 @@ Túto operáciu nemožno vrátiť.',
 'youremail' => 'Váš e-mail²',
 'username' => 'Používateľské meno:',
 'uid' => 'ID používateľa:',
-'prefs-memberingroups' => 'Člen {{PLURAL:$1|skupiny|skupín}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Člen|Členovia}} {{PLURAL:$1|skupiny|skupín}}:',
 'prefs-registration' => 'Čas registrácie:',
 'yourrealname' => 'Skutočné meno *:',
 'yourlanguage' => 'Jazyk:',
@@ -1822,6 +1831,7 @@ Ak problém pretrváva, kontaktujte [[Special:ListUsers/sysop|správcu systému]
 'backend-fail-notsame' => 'Nerovnaký súbor už existuje v $1 .',
 'backend-fail-invalidpath' => '„$1“ nie je platná cesta úložiska.',
 'backend-fail-delete' => 'Nebolo možné vymazať súbor „$1“.',
+'backend-fail-describe' => 'Nie je možné zmeniť metadáta súboru „$1“.',
 'backend-fail-alreadyexists' => 'Súbor „$1“ už existuje.',
 'backend-fail-store' => 'Nebolo možné uložiť súbor „$1“ na „$2“.',
 'backend-fail-copy' => 'Nebolo možné skopírovať súbor „$1“ na „$2“.',
@@ -1899,7 +1909,6 @@ Aby bolo zabezpečenie optimálne, img_auth.php je vypnutý.',
 'http-read-error' => 'Chyba čítania HTTP.',
 'http-timed-out' => 'Vyhradený čas požiadavky HTTP vypršal.',
 'http-curl-error' => 'Chyba pri sťahovaní URL: $1',
-'http-host-unreachable' => 'URL nie je dostupný',
 'http-bad-status' => 'Počas požiadavky HTTP nastal problém: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2051,6 +2060,12 @@ Možno chcete upraviť popis na jeho [$2 popisnej stránke súboru] tam.',
 Mali by však odkazovať priamo na príslušnú tému.<br />
 Stránka sa považuje za rozlišovaciu, keď používa šablónu, na ktorú odkazuje [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Stránky s vlastnosťou stránky',
+'pageswithprop-legend' => 'Stránky s vlastnosťou stránky',
+'pageswithprop-text' => 'Táto stránka obsahuje stránky, ktoré používajú konkrétnu vlastnosť stránky.',
+'pageswithprop-prop' => 'Názov vlastnosti:',
+'pageswithprop-submit' => 'Vykonať',
+
 'doubleredirects' => 'Dvojité presmerovania',
 'doubleredirectstext' => 'Táto stránka obsahuje zoznam stránok, ktoré presmerovávajú na iné presmerovacie stránky.
 Každý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riadok z textu na ktorý odkazuje druhé presmerovanie, ktoré zvyčajne odkazuje na „skutočný“ cieľ, na ktorý má odkazovať prvé presmerovanie.
@@ -2203,8 +2218,8 @@ Pozri aj [[Special:WantedCategories|žiadané kategórie]].',
 'linksearch-ns' => 'Menný priestor:',
 'linksearch-ok' => 'Hľadať',
 'linksearch-text' => 'Je možné používať zástupné znaky, napr. „*.wikipedia.org“.
-Povinná je minimálne doména najvyššej úrovne, napr.. „*.org“.<br />
-Podporované protokoly: <code>$1</code> (ak protokol nie je uvedený, použije sa <code>http://</code>).',
+Povinná je minimálne doména najvyššej úrovne, napr. „*.org“.<br />
+{{PLURAL:$2|Podporovaný protokol|Podporované protokoly}}: <code>$1</code> (ak protokol nie je uvedený, použije sa http://).',
 'linksearch-line' => 'Na $1 odkazuje $2',
 'linksearch-error' => 'Zástupné znaky je možné použiť iba na začiatku názvu domény.',
 
@@ -2214,15 +2229,6 @@ Podporované protokoly: <code>$1</code> (ak protokol nie je uvedený, použije s
 'listusers-noresult' => 'Neboli nájdení používatelia. Prosím, skontrolujte aj varianty s veľkými/malými písmenami.',
 'listusers-blocked' => '(zablokovaný)',
 
-# Special:ActiveUsers
-'activeusers' => 'Zoznam aktívnych používateľov',
-'activeusers-intro' => 'Toto je zoznam používateľov, ktorí $1 {{PLURAL:$1|za posledný 1 deň|za posledné $1 dni|za posledných $1 dní}} vykonali nejakú aktivitu.',
-'activeusers-count' => '$1 {{PLURAL:$1|úprava|úpravy|úprav}} za {{PLURAL:$3|posledný deň|posledné $3 dni|posledných $3 dní}}',
-'activeusers-from' => 'Zobraziť používateľov počínajúc:',
-'activeusers-hidebots' => 'Skryť robotov',
-'activeusers-hidesysops' => 'Skryť správcov',
-'activeusers-noresult' => 'Neboli nájdení žiadni používatelia.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Práva skupiny používateľov',
 'listgrouprights-summary' => 'Toto je zoznam skupín používateľov definovaných na tejto wiki a ich prístupových práv.
@@ -2288,7 +2294,8 @@ Mailová adresa, ktorú ste zadali vo svojich [[Special:Preferences|nastaveniach
 'watchnologin' => 'Nie ste prihlásený/á',
 'watchnologintext' => 'Musíte byť [[Special:UserLogin|prihlásený/á]], aby ste mohli modifikovať vaše sledované stránky.',
 'addwatch' => 'Pridať do zoznamu sledovaných stránok',
-'addedwatchtext' => "Stránka [[:$1]] bola pridaná do zoznamu [[Special:Watchlist|sledovaných stránok]]. Budú tam uvedené ďalšie úpravy tejto stránky a jej diskusie a stránka bude zobrazená '''tučne''' v [[Special:RecentChanges|zozname posledných úprav]], aby ste ju ľahšie našli.",
+'addedwatchtext' => 'Stránka „[[:$1]]“ bola pridaná do vášho zoznamu [[Special:Watchlist|sledovaných stránok]].
+Budú tam uvedené aj budúce úpravy tejto stránky a jej diskusie.',
 'removewatch' => 'Odstrániť zo zoznamu sledovaných',
 'removedwatchtext' => 'Stránka „[[:$1]]“ bola odstránená z vášho [[Special:Watchlist|zoznamu sledovaných stránok]].',
 'watch' => 'Sledovať',
@@ -2317,21 +2324,29 @@ Mailová adresa, ktorú ste zadali vo svojich [[Special:Preferences|nastaveniach
 'enotif_mailer' => 'Upozorňovač {{GRAMMAR:genitív|{{SITENAME}}}}',
 'enotif_reset' => 'Označiť všetky stránky ako „navštívené“',
 'enotif_impersonal_salutation' => 'používateľ {{GRAMMAR:genitív|{{SITENAME}}}}',
+'enotif_subject_deleted' => 'Stránku {{GENDER:genitív|{{SITENAME}}}} „$1“ odstránil používateľ $2',
+'enotif_subject_created' => 'Stránku {{GENDER:genitív|{{SITENAME}}}} „$1“ vytvoril používateľ $2',
+'enotif_subject_moved' => 'Stránku {{GENDER:genitív|{{SITENAME}}}} „$1“ presunul používateľ $2',
+'enotif_subject_restored' => 'Stránku {{GENDER:genitív|{{SITENAME}}}} „$1“ obnovil používateľ $2',
+'enotif_subject_changed' => 'Stránku {{GENDER:genitív|{{SITENAME}}}} „$1“ zmenil používateľ $2',
+'enotif_body_intro_deleted' => 'Stránka {{GENDER:genitív|{{SITENAME}}}} „$1“ zmazal $PAGEEDITDATE používateľ $2, pozri $3.',
+'enotif_body_intro_created' => 'Stránka {{GENDER:genitív|{{SITENAME}}}} „$1“ vytvoril $PAGEEDITDATE používateľ $2, pozri aktuálnu verziu $3.',
+'enotif_body_intro_moved' => 'Stránka {{GENDER:genitív|{{SITENAME}}}} „$1“ presunul $PAGEEDITDATE používateľ $2, pozri aktuálnu verziu $3.',
+'enotif_body_intro_restored' => 'Stránka {{GENDER:genitív|{{SITENAME}}}} „$1“ obnovil $PAGEEDITDATE používateľ $2, pozri aktuálnu verziu $3.',
+'enotif_body_intro_changed' => 'Stránka {{GENDER:genitív|{{SITENAME}}}} „$1“ zmenil $PAGEEDITDATE používateľ $2, pozri aktuálnu verziu $3.',
 'enotif_lastvisited' => 'Všetky zmeny od vašej poslednej návštevy uvidíte na $1.',
 'enotif_lastdiff' => 'Zmenu uvidíte v $1.',
 'enotif_anon_editor' => 'anonymný používateľ $1',
 'enotif_body' => 'Drahý $WATCHINGUSERNAME,
 
-na {{GRAMMAR:lokál|{{SITENAME}}}} $CHANGEDORCREATED používateľ $PAGEEDITOR stránku $PAGETITLE, pozrite si aktuálnu verziu $PAGETITLE_URL .
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Zhrnutie redaktora: $PAGESUMMARY $PAGEMINOREDIT
 Kontaktujte používateľa:
 mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Nedostanete ďalšie upozornenia, aj ak bude stránka znovu upravovaná, kým nenavštívite túto stránku.
+Nedostanete ďalšie upozornenia ani v prípade ďalších aktivít na strínke, kým túto stránku nenavštívite.
 Možete tiež vynulovať upozornenia pre všetky vaše sledované stránky.
 
 Váš upozorňovací systém {{GRAMMAR:genitív|{{SITENAME}}}}
@@ -2413,6 +2428,8 @@ Môžete si pozrieť aj [[Special:ProtectedPages|zoznam momentálne platných oc
 'prot_1movedto2' => '[[$1]] premiestnená na [[$2]]',
 'protect-badnamespace-title' => 'Nezamykateľný menný priestor',
 'protect-badnamespace-text' => 'Stránky v tomto mennom priestore nie je možné zamykať.',
+'protect-norestrictiontypes-text' => 'Túto stránku nie je možné chrániť, pretože nie sú k dispozícii žiadne typy obmedzení.',
+'protect-norestrictiontypes-title' => 'Neochrániteľná stránka',
 'protect-legend' => 'Potvrďte zamknutie',
 'protectcomment' => 'Dôvod:',
 'protectexpiry' => 'Zamknuté do:',
@@ -2428,9 +2445,9 @@ Tu sú aktuálne nastavenia stránky '''$1''':",
 Tu sú aktuálne nastavenia stránky '''$1''':",
 'protect-cascadeon' => 'Táto stránka je momentálne zamknutá, lebo je použitá na {{PLURAL:$1|nasledovnej stránke, ktorá má|nasledovných stránkach, ktoré majú}} zapnutú kaskádovú ochranu. Môžete zmeniť úroveň ochrany tejto stránky, ale neovplyvní to kaskádovú ochranu.',
 'protect-default' => 'Povoliť všetkých používateľov',
-'protect-fallback' => 'Vyžadovať povolenie „$1“',
-'protect-level-autoconfirmed' => 'Zablokovať nových a nezaregistrovaných používateľov',
-'protect-level-sysop' => 'Len pre správcov',
+'protect-fallback' => 'Povoliť iba používateľov s oprávnením „$1“',
+'protect-level-autoconfirmed' => 'Povoliť iba používateľov s potvrdeným emailom',
+'protect-level-sysop' => 'Povoliť iba správcov',
 'protect-summary-cascade' => 'kaskáda',
 'protect-expiring' => 'vyprší o $1 (UTC)',
 'protect-expiring-local' => 'vyprší $1',
@@ -3015,13 +3032,8 @@ Umožnuje do zhrnutia pridanie dôvodu.',
 
 # Stylesheets
 'common.css' => '/* Tu umiestnené CSS bude ovplyvňovať všetky štýly */',
-'standard.css' => '/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Klasický */',
-'nostalgia.css' => '/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Nostalgia */',
 'cologneblue.css' => '/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Kolínska modrá */',
 'monobook.css' => '/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Monobook */',
-'myskin.css' => '/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Môjvzhľad */',
-'chick.css' => '/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Kuriatko */',
-'simple.css' => '/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Jednoduchý */',
 'modern.css' => '/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Moderný */',
 'vector.css' => '/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Vector */',
 'print.css' => '/* Tu umiestnené CSS bude ovplyvňovať tlačový výstup */',
@@ -3034,13 +3046,8 @@ Umožnuje do zhrnutia pridanie dôvodu.',
 
 # Scripts
 'common.js' => '/* Tu uvedený JavaScript sa nahrá všetkým používateľom pri každom nahraní stránky. */',
-'standard.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Klasický */',
-'nostalgia.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Nostalgia */',
 'cologneblue.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Kolínska modrá */',
 'monobook.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Monobook */',
-'myskin.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Môjvzhľad */',
-'chick.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Kuriatko */',
-'simple.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Jednoduchý */',
 'modern.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Moderný */',
 'vector.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Vector */',
 'group-autoconfirmed.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom s potvrdenou emailovou adresou */',
@@ -3114,13 +3121,8 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 'pageinfo-protect-cascading-from' => 'Zámky pochádzajú z kaskádových zamknutí',
 
 # Skin names
-'skinname-standard' => 'Klasický',
-'skinname-nostalgia' => 'Nostalgia',
 'skinname-cologneblue' => 'Kolínska modrá',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'Môj vzhľad',
-'skinname-chick' => 'Kuriatko',
-'skinname-simple' => 'Jednoduchý',
 'skinname-modern' => 'Moderný',
 'skinname-vector' => 'Vector',
 
@@ -3169,6 +3171,7 @@ Jeho spustením môžete kompromitovať svoj systém.",
 'file-nohires' => 'Nie je dostupné vyššie rozlíšenie.',
 '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-preview' => 'Veľkosť tohto náhľadu: $1.',
 'show-big-image-other' => 'Iné {{PLURAL:$2|rozlíšenie|rozlíšenia}}: $1 .',
@@ -3198,6 +3201,8 @@ Jeho spustením môžete kompromitovať svoj systém.",
 'minutes' => '{{PLURAL:$1|$1 minúta|$1 minúty|$1 minút}}',
 'hours' => '{{PLURAL:$1|$1 hodina|$1 hodiny|$1 hodín}}',
 'days' => '{{PLURAL:$1|$1 deň|$1 dni|$1 dní}}',
+'months' => '{{PLURAL:$1|$1 mesiac|$1 mesiace|$1 mesiacov}}',
+'years' => '{{PLURAL:$1|$1 rok|$1 rok|$1 rokov}}',
 'ago' => 'pred: $1',
 'just-now' => 'Pred chvíľkou',
 
@@ -3861,7 +3866,7 @@ Obrázky sa zobrazia v plnom rozlíšení, ostatné typy súborov sa spustia v p
 'specialpages-group-highuse' => 'Často používané stránky',
 'specialpages-group-pages' => 'Zoznamy stránok',
 'specialpages-group-pagetools' => 'Nástroje stránky',
-'specialpages-group-wiki' => 'Wiki údaje a nástroje',
+'specialpages-group-wiki' => 'Údaje a nástroje',
 'specialpages-group-redirects' => 'Špeciálne stránky, ktoré sú presmerovania',
 'specialpages-group-spam' => 'Nástroje proti spamu',
 
@@ -3924,22 +3929,24 @@ Obrázky sa zobrazia v plnom rozlíšení, ostatné typy súborov sa spustia v p
 'htmlform-submit' => 'Odoslať',
 'htmlform-reset' => 'Vrátiť zmeny',
 'htmlform-selectorother-other' => 'Iné',
+'htmlform-no' => 'Nie',
+'htmlform-yes' => 'Áno',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 s podporou vyhľadávania v plnom texte',
 'sqlite-no-fts' => '$1 bez podpory vyhľadávania v plnom texte',
 
 # New logging system
-'logentry-delete-delete' => '$1 zmazal(a) stránku $3',
-'logentry-delete-restore' => '$1 obnovil(a) stránku $3',
-'logentry-delete-event' => '$1 zmenil viditeľnosť {{PLURAL:$5|protokolovacieho záznamu|$5 protokolovacích záznamov}} k stránke $3: $4',
+'logentry-delete-delete' => '$1 zmazal stránku $3',
+'logentry-delete-restore' => '$1 obnovil stránku $3',
+'logentry-delete-event' => '$1 zmenil viditeľnosť {{PLURAL:$5|záznamu udalostí|$5 záznamov udalostí}} k stránke $3: $4',
 'logentry-delete-revision' => '$1 zmenil viditeľnosť {{PLURAL:$5|revízie|$5 revízií}} na stránke $3: $4',
-'logentry-delete-event-legacy' => '$1 zmenil viditeľnosť protokolovacích záznamov k stránke $3',
+'logentry-delete-event-legacy' => '$1 zmenil viditeľnosť záznamov udalostí k stránke $3',
 'logentry-delete-revision-legacy' => '$1 zmenil viditeľnosť revízií na stránke $3',
 'logentry-suppress-delete' => '$1 utajil stránku $3',
-'logentry-suppress-event' => '$1 utajene zmenil viditeľnosť {{PLURAL:$5|protokolovacieho záznamu|$5 protokolovacích záznamov}} k stránke $3: $4',
+'logentry-suppress-event' => '$1 utajene zmenil viditeľnosť {{PLURAL:$5|záznamu udalostí|$5 záznamov udalostí}} k stránke $3: $4',
 'logentry-suppress-revision' => '$1 utajene zmenil viditeľnosť {{PLURAL:$5|revízie|$5 revízií}} na stránke $3: $4',
-'logentry-suppress-event-legacy' => '$1 utajene zmenil viditeľnosť protokolovacích záznamov k stránke $3',
+'logentry-suppress-event-legacy' => '$1 utajene zmenil viditeľnosť záznamov udalostí k stránke $3',
 'logentry-suppress-revision-legacy' => '$1 utajene zmenil viditeľnosť revízií na stránke $3',
 'revdelete-content-hid' => 'obsah skrytý',
 'revdelete-summary-hid' => 'zhrnutie editácie skryté',
@@ -3952,16 +3959,17 @@ Obrázky sa zobrazia v plnom rozlíšení, ostatné typy súborov sa spustia v p
 'logentry-move-move' => '$1 premiestnil stránku $3 na $4',
 'logentry-move-move-noredirect' => '$1 premiestnil stránku $3 na $4, ale neponechal presmerovanie',
 'logentry-move-move_redir' => '$1 premiestnil stránku $3 na $4 prostredníctvom presmerovania',
-'logentry-move-move_redir-noredirect' => '$1 premiestnil stránku $3 na $4 prostredníctvom  presmerovania, ale neponechal presmerovanie',
-'logentry-patrol-patrol' => '$1 označil revíziu $4 stránky $3 ako overenú',
-'logentry-patrol-patrol-auto' => '$1 automaticky označil revíziu $4 stránky $3 ako overenú',
+'logentry-move-move_redir-noredirect' => '$1 premiestnil stránku $3 na $4 prostredníctvom presmerovania, ale neponechal presmerovanie',
+'logentry-patrol-patrol' => '$1 označil revíziu $4 stránky $3 ako stráženú',
+'logentry-patrol-patrol-auto' => '$1 automaticky označil revíziu $4 stránky $3 ako stráženú',
 'logentry-newusers-newusers' => 'Bol vytvorený používateľský účet $1',
 'logentry-newusers-create' => 'Bol vytvorený používateľský účet $1',
 'logentry-newusers-create2' => '$1 vytvoril používateľský účet $3',
-'logentry-newusers-autocreate' => 'Automaticky bol založený účet $1',
-'logentry-rights-rights' => '$1 {{GENDER:$2|zmenil|zmenila}} členstvo $3 v skupinách z $4 na $5',
-'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|zmenil|zmenila}} členstvo $3 v skupinách',
-'logentry-rights-autopromote' => '$1 {{GENDER:$2|bol automaticky povýšený|bola automaticky povýšená}} z $4 na $5',
+'logentry-newusers-byemail' => '$1 vytvoril používateľský účet $3 a heslo bolo poslané emailom',
+'logentry-newusers-autocreate' => 'Používateľský účet $1 bol vytvorený automaticky',
+'logentry-rights-rights' => '$1 zmenil členstvo $3 v skupinách z $4 na $5',
+'logentry-rights-rights-legacy' => '$1 zmenil členstvo $3 v skupinách',
+'logentry-rights-autopromote' => '$1 bol automaticky povýšený z $4 na $5',
 'rightsnone' => '(žiadne)',
 
 # Feedback
@@ -4016,6 +4024,7 @@ V opačnom prípade môžete použiť zjednodušený formulár nižšie. Váš k
 'api-error-ok-but-empty' => 'Vnútorná chyba: Žiadna odpoveď zo servera.',
 'api-error-overwrite' => 'Prepísanie existujúceho súboru nie je povolené.',
 'api-error-stashfailed' => 'Vnútorná chyba: Serveru sa nepodarilo uložiť dočasný súbor.',
+'api-error-publishfailed' => 'Vnútorná chyba: Serveru sa nepodarilo publikovať dočasný súbor.',
 'api-error-timeout' => 'Server neodpovedal v očakávanom čase.',
 'api-error-unclassified' => 'Vyskytla sa neznáma chyba.',
 'api-error-unknown-code' => 'Neznáma chyba: „$1“',
@@ -4036,4 +4045,7 @@ V opačnom prípade môžete použiť zjednodušený formulár nižšie. Váš k
 'duration-centuries' => '$1 {{PLURAL:$1|storočie|storočia|storočí}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tisícročie|tisícročia|tisícročí}}',
 
+# Image rotation
+'rotate-comment' => 'Obrázok otočený o $1 {{PLURAL:$1|stupeň|stupne|stupňov}} v smere hodinových ručičiek',
+
 );
index 3e6e677..d4b8e0e 100644 (file)
@@ -195,7 +195,7 @@ $messages = array(
 'tog-extendwatchlist' => 'Razširi spisek nadzorov, da bo prikazoval vse spremembe, ne le najnovejše',
 'tog-usenewrc' => 'Združi spremembe posamezne strani na zadnjih spremembah in spisku nadzorov (zahteva JavaScript)',
 'tog-numberheadings' => 'Samodejno številči poglavja',
-'tog-showtoolbar' => 'Prikaži urejevalno orodno vrstico',
+'tog-showtoolbar' => 'Prikaži urejevalno orodno vrstico (potrebuje JavaScript)',
 'tog-editondblclick' => 'Omogoči urejanje strani z dvojnim klikom (zahteva JavaScript)',
 'tog-editsection' => 'Omogoči urejanje delov prek povezav [{{int:editsection}}]',
 'tog-editsectiononrightclick' => 'Omogoči urejanje razdelkov z desnim klikanjem njihovih naslovov (zahteva JavaScript)',
@@ -206,7 +206,7 @@ $messages = array(
 'tog-watchmoves' => 'Dodaj strani in datoteke, ki jih premaknem, na moj spisek nadzorov',
 'tog-watchdeletion' => 'Dodaj strani in datoteke, ki jih izbrišem, na moj spisek nadzorov',
 'tog-minordefault' => 'Vsa urejanja označi kot manjša',
-'tog-previewontop' => 'Prikaži predogled pred urejevalnim poljem in ne za njim',
+'tog-previewontop' => 'Prikaži predogled pred urejevalnim poljem',
 'tog-previewonfirst' => 'Ob začetku urejanja prikaži predogled',
 'tog-nocache' => 'Onemogoči predpomnenje strani v brskalniku',
 'tog-enotifwatchlistpages' => 'Ob spremembah strani ali datotek mi pošlji e-pošto',
@@ -216,28 +216,27 @@ $messages = array(
 'tog-shownumberswatching' => 'Prikaži število uporabnikov, ki spremljajo temo',
 'tog-oldsig' => 'Obstoječi podpis:',
 'tog-fancysig' => 'Obravnavaj podpis kot wikibesedilo (brez samodejne povezave)',
-'tog-externaleditor' => 'Po privzetem uporabljaj zunanji urejevalnik (samo za strokovnjake; potrebuje posebne nastavitve na vašem računalniku; [//www.mediawiki.org/wiki/Manual:External_editors več informacij])',
-'tog-externaldiff' => 'Po privzetem uporabljaj zunanje primerjanje (samo za strokovnjake; potrebuje posebne nastavitve na vašem računalniku; [//www.mediawiki.org/wiki/Manual:External_editors več informacij])',
 'tog-showjumplinks' => 'Prikaži pomožni povezavi »Skoči na«',
 'tog-uselivepreview' => 'Uporabi hitri predogled (zahteva JavaScript) (preizkusno)',
 'tog-forceeditsummary' => 'Ob vpisu praznega povzetka urejanja me opozori',
 'tog-watchlisthideown' => 'Na spisku nadzorov skrij moja urejanja',
 'tog-watchlisthidebots' => 'Na spisku nadzorov skrij urejanja botov',
-'tog-watchlisthideminor' => 'Skrij manjša urejanja na spisku nadzorov',
+'tog-watchlisthideminor' => 'Na spisku nadzorov skrij manjša urejanja',
 'tog-watchlisthideliu' => 'Skrij urejanja prijavljenih uporabnikov na spisku nadzorov',
 'tog-watchlisthideanons' => 'Skrij urejanja anonimnih uporabnikov na spisku nadzorov',
-'tog-watchlisthidepatrolled' => 'Skrij pregledana urejanja s spiska nadzorov',
+'tog-watchlisthidepatrolled' => 'Na spisku nadzorov skrij pregledana urejanja',
 'tog-ccmeonemails' => 'Pošlji mi kopijo e-pošt, ki jih pošljem drugim uporabnikom',
-'tog-diffonly' => 'Ne prikaži vsebine strani pod primerjavo',
+'tog-diffonly' => 'Pod primerjavo ne prikaži vsebine strani',
 'tog-showhiddencats' => 'Prikaži skrite kategorije',
 'tog-norollbackdiff' => 'Ne prikaži primerjave po izvedeni vrnitvi',
+'tog-useeditwarning' => 'Opozori me, ko skušam zapreti urejevalno polje z neshranjenimi spremembami',
 
 'underline-always' => 'Vedno',
 'underline-never' => 'Nikoli',
 'underline-default' => 'Koža ali privzeto v brskalniku',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'Uredi področni slog pisave:',
+'editfont-style' => 'Slog pisave urejevalnega polja:',
 'editfont-default' => 'Privzeto po brskalniku',
 'editfont-monospace' => 'Pisava monospace',
 'editfont-sansserif' => 'Pisava sans-serif',
@@ -296,11 +295,11 @@ $messages = array(
 'dec' => 'dec.',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategorija|Kategoriji|Kategorije|Kategorije|Kategorije}}',
+'pagecategories' => '{{PLURAL:$1|Kategorija|Kategoriji|Kategorije}}',
 'category_header' => 'Strani v kategoriji »$1«',
 'subcategories' => 'Podkategorije',
 'category-media-header' => 'Predstavnostno gradivo v kategoriji »$1«',
-'category-empty' => "''Ta kategorija trenutno ne vsebuje člankov ali drugega gradiva.''",
+'category-empty' => "''Kategorija trenutno ne vsebuje strani ali drugega gradiva.''",
 'hidden-categories' => '{{PLURAL:$1|Skrita kategorija|Skriti kategoriji|Skrite kategorije}}',
 'hidden-category-category' => 'Skrite kategorije',
 'category-subcat-count' => 'Ta del kategorije ima $1 {{PLURAL:$1|naslednjo podkategorijo|naslednji podkategoriji|naslednje podkategorije|naslednjih podkategorij}}{{PLURAL:$2||, od skupno $2}}.',
@@ -322,7 +321,7 @@ $messages = array(
 'morenotlisted' => 'Več ni navedenih ...',
 'mypage' => 'Stran',
 'mytalk' => 'Pogovor',
-'anontalk' => 'Pogovorna stran IP',
+'anontalk' => 'Pogovorna stran IP-naslova',
 'navigation' => 'Navigacija',
 'and' => '&#32;in',
 
@@ -331,7 +330,7 @@ $messages = array(
 'qbbrowse' => 'Prebrskaj',
 'qbedit' => 'Uredi',
 'qbpageoptions' => 'Možnosti strani',
-'qbmyoptions' => 'Moje možnosti',
+'qbmyoptions' => 'Moje strani',
 'qbspecialpages' => 'Posebne strani',
 'faq' => 'Najpogostejša vprašanja',
 'faqpage' => 'Project:Najpogostejša vprašanja',
@@ -363,7 +362,7 @@ $messages = array(
 'go' => 'Pojdi na',
 'searcharticle' => 'Pojdi na',
 'history' => 'Zgodovina strani',
-'history_short' => 'Zgodovina strani',
+'history_short' => 'Zgodovina',
 'updatedmarker' => 'Posodobljeno od mojega zadnjega obiska',
 'printableversion' => 'Različica za tisk',
 'permalink' => 'Trajna povezava',
@@ -372,7 +371,7 @@ $messages = array(
 'edit' => 'Uredi stran',
 'create' => 'Ustvari',
 'editthispage' => 'Uredi stran',
-'create-this-page' => 'Ustvari to stran',
+'create-this-page' => 'Ustvari stran',
 'delete' => 'Briši',
 'deletethispage' => 'Briši stran',
 'undelete_short' => 'Vrni $1 {{PLURAL:$1|izbrisano urejanje|izbrisani urejanji|izbrisana urejanja|izbrisanih urejanj|izbrisanih urejanj}}',
@@ -401,7 +400,7 @@ $messages = array(
 'categorypage' => 'Prikaži stran kategorije',
 'viewtalkpage' => '< Pogovor',
 'otherlanguages' => 'V drugih jezikih',
-'redirectedfrom' => '(Preusmerjeno z $1)',
+'redirectedfrom' => '(Preusmerjeno s strani $1)',
 'redirectpagesub' => 'Preusmeritvena stran',
 'lastmodifiedat' => 'Čas zadnje spremembe: $2, $1.',
 'viewcount' => 'Stran je bila naložena {{PLURAL:$1|$1-krat}}.',
@@ -604,9 +603,15 @@ Morda bodo nekatere strani še naprej prikazane, kot da ste prijavljeni, dokler
 'welcomecreation-msg' => 'Ustvarili ste račun.
 Ne pozabite si prilagoditi vaših [[Special:Preferences|nastavitev {{GRAMMAR:rodilnik|{{SITENAME}}}}]].',
 'yourname' => 'Uporabniško ime:',
+'userlogin-yourname' => 'Uporabniško ime',
+'userlogin-yourname-ph' => 'Vnesite svoje uporabniško ime',
 'yourpassword' => 'Geslo:',
+'userlogin-yourpassword' => 'Geslo',
+'userlogin-yourpassword-ph' => 'Vnesite svoje geslo',
 'yourpasswordagain' => 'Ponovno vpišite geslo',
 'remembermypassword' => 'Zapomni si me na tem računalniku (za največ $1 {{PLURAL:$1|dan|dneva|dni}})',
+'userlogin-remembermypassword' => 'Zapomni si me',
+'userlogin-signwithsecure' => 'Vpiši se z varnim strežnikom',
 'securelogin-stick-https' => 'Po prijavi ostani povezan preko HTTPS',
 'yourdomainname' => 'Domena',
 'password-change-forbidden' => 'Na tem wikiju ne morete spreminjati gesel.',
@@ -619,12 +624,16 @@ Ne pozabite si prilagoditi vaših [[Special:Preferences|nastavitev {{GRAMMAR:rod
 'logout' => 'Odjava',
 'userlogout' => 'Odjava',
 'notloggedin' => 'Niste prijavljeni',
+'userlogin-noaccount' => 'Nimate uporabniškega računa?',
+'userlogin-joinproject' => 'Pridružite se {{GRAMMAR:dajalnik|{{SITENAME}}}}',
 'nologin' => 'Še nimate uporabniškega računa? $1!',
 'nologinlink' => 'Registrirajte se',
 'createaccount' => 'Ustvari račun',
 'gotaccount' => 'Račun že imate? $1.',
 'gotaccountlink' => 'Prijavite se',
 'userlogin-resetlink' => 'Ste pozabili svoje prijavne podatke?',
+'helplogin-url' => 'Help:Prijava',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Pomoč pri prijavi]]',
 'createaccountmail' => 'Ustvari začasno naključno geslo in ga pošlji na spodaj navedeni e-poštni naslov',
 'createaccountreason' => 'Razlog:',
 'badretype' => 'Gesli, ki ste ju vnesli, se ne ujemata.',
@@ -731,6 +740,7 @@ Morda ste že uspešno spremenili geslo ali pa ste zahtevali novo začasno geslo
 'passwordreset-text' => 'Izpolnite obrazec, da ponastavite geslo.',
 'passwordreset-legend' => 'Ponastavitev gesla',
 'passwordreset-disabled' => 'Ponastavljanje gesla je na tem wikiju onemogočeno.',
+'passwordreset-emaildisabled' => 'Na tem wikiju so možnosti e-pošte onemogočene.',
 'passwordreset-pretext' => '{{PLURAL:$1||Vnesite enega od dela podatkov spodaj}}',
 'passwordreset-username' => 'Uporabniško ime:',
 'passwordreset-domain' => 'Domena:',
@@ -978,6 +988,8 @@ Izgleda, da je bila izbrisana.',
 'content-failed-to-parse' => 'Nisem mogel razčleniti vsebine $2 za obliko $1: $3',
 'invalid-content-data' => 'Neveljavni podatki vsebine',
 'content-not-allowed-here' => 'Vsebina »$1« ni dovoljena na strani [[$2]]',
+'editwarning-warning' => 'Če zapustite stran, boste morda izgubili vse spremembe, ki ste jih naredili.
+Če ste prijavljeni, lahko to opozorilo onemogočite v razdelku »{{int:prefs-editing}}« v svojih nastavitvah.',
 
 # Content models
 'content-model-wikitext' => 'wikibesedilo',
@@ -1263,6 +1275,7 @@ Podrobnosti lahko najdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENA
 'searchdisabled' => 'Iskanje po {{GRAMMAR:dajalnik|{{SITENAME}}}} je onemogoočeno.
 Medtem lahko iščete preko Googla.
 Upoštevajte, da so njihovi podatki vsebine {{GRAMMAR:rodilnik|{{SITENAME}}}} morda zastareli.',
+'search-error' => 'Med iskanjem je prišlo do napake: $1',
 
 # Preferences page
 'preferences' => 'Nastavitve',
@@ -2389,7 +2402,7 @@ Stopnjo zaščite te strani lahko spremenite, vendar to ne bo vplivalo na kaskad
 'protect-expiring-local' => 'poteče $1',
 'protect-expiry-indefinite' => 'nedoločeno',
 'protect-cascade' => 'Zaščiti strani, ki so vključene v to stran (kaskadna zaščita)',
-'protect-cantedit' => 'Ne morete spreminjati stopnje zaščite te strani, ker nimate dovoljenja za njeno urejanje.',
+'protect-cantedit' => 'Stopnje zaščite te strani ne morete spreminjati, ker nimate dovoljenja za njeno urejanje.',
 'protect-othertime' => 'Drugačen čas:',
 'protect-othertime-op' => 'drugačen čas',
 'protect-existing-expiry' => 'Obstoječ čas izteka: $3, $2',
@@ -3856,6 +3869,8 @@ Ta stran se sooča s tehničnimi težavami.',
 'htmlform-submit' => 'Pošlji',
 'htmlform-reset' => 'Razveljavi spremembe',
 'htmlform-selectorother-other' => 'Drugo',
+'htmlform-no' => 'Ne',
+'htmlform-yes' => 'Da',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 s podporo iskanju polnih besedil',
index 72743f9..1028ff9 100644 (file)
@@ -44,8 +44,6 @@ $messages = array(
 'tog-shownumberswatching' => "I'tus tirada isticmaalayaasha wax waardiyeynaayo",
 'tog-oldsig' => 'Saxiixa jiro:',
 'tog-fancysig' => "u isticmaal saxiixa sida qoraalada wiki  (ayada oo linki auomaatik la'aan)",
-'tog-externaleditor' => "Isticmaal qoraal wax ka bedelyaal ka madaxbanaan (La'iskuogyahay)",
-'tog-externaldiff' => "Isticmaal qoraal wax ka bedelyaal ka madaxbanaan oo (La'iskuogyahay)",
 'tog-showjumplinks' => 'Shid "ku bood" links-ka la geli karo',
 'tog-uselivepreview' => 'Isticmaal horfiirinta tooska ah (JavaScript) (Wuxuu ku jiraa tijaabo)',
 'tog-forceeditsummary' => "I'xasuusi markii uusan qoraalkeyga raacsiisnay faahfaahin gaaban",
@@ -776,9 +774,6 @@ sababteeda neh waxaa laga heli kartaa  [{{fullurl:{{#Special:Log}}/delete|page={
 'powersearch-toggleall' => 'Dhamaan',
 'powersearch-togglenone' => 'Waxna',
 
-# Quickbar
-'qbsettings-none' => 'Waxna',
-
 # Preferences page
 'preferences' => 'Dooqyada',
 'mypreferences' => 'Dooqyadeyda',
@@ -1126,12 +1121,12 @@ $PAGEINTRO $NEWPAGE
 
 Qaybta wax laga bedelay: $PAGESUMMARY $PAGEMINOREDIT
 
-La xariirka Tafaftiraha:
+La xariirka Tifaftiraha:
 mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
 Lama soo diri doono ogeysiin dambe hadii isbedel kale lagu sii sameeyo ilaa aad ka soo booqato bogga.
-Waxaad awoodaa inaad ka saarto liiska waardiyeha booga.
+Waxaad awoodaa inaad ka saarto liiska waardiyeha bogga.
 
                         Nidaamka war gelinta {{SITENAME}} ee E-mailka
 
index 84a2763..58e90d8 100644 (file)
@@ -246,8 +246,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Trego numrin e përdoruesve që vëzhgojnë këtë faqe',
 'tog-oldsig' => 'Nënshkrimi ekzistues:',
 'tog-fancysig' => 'Mbaje nënshkrimin si wikitekst (pa lidhje automatike)',
-'tog-externaleditor' => 'Përdor si rregull program të jashtëm redaktimi (vetëm për ekspertë, kërkon regjistrime speciale të kompjuterit. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
-'tog-externaldiff' => 'Përdor si rregull program të jashtëm diff (vetëm për ekspertë, kërkon regjistrime speciale të kompjuterit. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
 'tog-showjumplinks' => 'Lejo lidhje "shko tek"',
 'tog-uselivepreview' => 'Trego bocetin në mënyrë të drejtëpërdrejtë (kërkon JavaScript) (eksperimentale)',
 'tog-forceeditsummary' => 'Më njofto kur e lë përmbledhjen e redaktimit bosh',
@@ -261,6 +259,7 @@ $messages = array(
 'tog-diffonly' => 'Mos trego përmbajtjen e faqes nën diff-e',
 'tog-showhiddencats' => 'Trego kategoritë e fshehura',
 'tog-norollbackdiff' => 'Ndryshimi pas rikthimit do të fshihet',
+'tog-useeditwarning' => 'Më paralajmëro kur unë lë një redaktim faqeje me ndryshime të paruajtura',
 
 'underline-always' => 'Gjithmonë',
 'underline-never' => 'Asnjëherë',
@@ -350,7 +349,7 @@ $messages = array(
 'cancel' => 'Anulo',
 'moredotdotdot' => 'Më shumë...',
 'mypage' => 'Faqja ime',
-'mytalk' => 'diskutimet',
+'mytalk' => 'Diskutimet',
 'anontalk' => 'Diskutimet për këtë IP',
 'navigation' => 'Shfleto',
 'and' => '&#32;dhe',
@@ -982,6 +981,8 @@ Duket se është grisur.',
 'edit-already-exists' => 'Faqja nuk mundej të hapet.
 Ajo tanimë ekziston.',
 'defaultmessagetext' => 'Teksti i porosisë së parazgjedhur',
+'editwarning-warning' => 'Lënia e kësaj faqeje mund t\'ju shkaktojë humbjen e çdo ndryshimi që keni bërë.
+Nëse keni hyrë brenda, ju mund ta hiqni këtë paralajmërim në seksionin "Redaktimi" tek preferencat tuaja.',
 
 # Content models
 'content-model-text' => 'tekst i thejshtë',
@@ -1249,15 +1250,6 @@ Kini kujdes se përdorimi i lidhjeve të shfletimit do të ndryshojë përzgjedh
 'search-external' => 'Kërkim i jashtëm',
 'searchdisabled' => '<p>Kërkimi me tekst të plotë është bllokuar tani për tani ngaqë shërbyesi është shumë i ngarkuar; shpresojmë ta nxjerrim prapë në gjendje normale pas disa punimeve. Deri atëherë mund të përdorni Google-in për kërkime:</p>',
 
-# Quickbar
-'qbsettings' => 'Vendime të shpejta',
-'qbsettings-none' => 'Asnjë',
-'qbsettings-fixedleft' => 'Lidhur majtas',
-'qbsettings-fixedright' => 'Lidhur djathtas',
-'qbsettings-floatingleft' => 'Pezull majtas',
-'qbsettings-floatingright' => 'Pezull djathtas',
-'qbsettings-directionality' => 'Fikse, në varësi të skriptës së drejtuar në gjuhën tuaj',
-
 # Preferences page
 'preferences' => 'Parapëlqimet',
 'mypreferences' => 'Parapëlqimet',
index 8058926..ee4f694 100644 (file)
@@ -24,6 +24,7 @@
  * @author Slaven Kosanovic
  * @author Јованвб
  * @author Жељко Тодоровић
+ * @author Милан Јелисавчић
  * @author Михајло Анђелковић
  * @author לערי ריינהארט
  */
@@ -422,8 +423,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Прикажи број корисника који надгледају',
 'tog-oldsig' => 'Текући потпис:',
 'tog-fancysig' => 'Сматрај потпис као викитекст (без самоповезивања)',
-'tog-externaleditor' => 'Увек користи спољни уређивач (само за напредне — потребне су посебне поставке на рачунару)',
-'tog-externaldiff' => 'Увек користи спољни програм за упоређивање (само за напредне — потребне су посебне поставке на рачунару)',
 'tog-showjumplinks' => 'Омогући помоћне везе „Иди на“',
 'tog-uselivepreview' => 'Користи тренутан преглед (јаваскрипт, пробна могућност)',
 'tog-forceeditsummary' => 'Опомени ме при уносу празног описа',
@@ -438,6 +437,7 @@ $messages = array(
 'tog-showhiddencats' => 'Прикажи скривене категорије',
 'tog-noconvertlink' => 'Онемогући претварање наслова веза',
 'tog-norollbackdiff' => 'Изостави разлику након извршеног враћања',
+'tog-useeditwarning' => 'Упозори ме када напустим страницу која није сачувана',
 
 'underline-always' => 'увек подвлачи',
 'underline-never' => 'никад не подвлачи',
@@ -817,9 +817,13 @@ $2',
 'welcomecreation-msg' => 'Ваш налог је отворен.
 Не заборавите да промените своја [[Special:Preferences|подешавања]].',
 'yourname' => 'Корисничко име:',
+'userlogin-yourname' => 'Корисничко име',
 'yourpassword' => 'Лозинка:',
+'userlogin-yourpassword' => 'Лозинка',
+'userlogin-yourpassword-ph' => 'Унесите лозинку',
 'yourpasswordagain' => 'Потврда лозинке:',
 'remembermypassword' => 'Запамти ме на овом прегледачу (најдуже $1 {{PLURAL:$1|дан|дана|дана}})',
+'userlogin-remembermypassword' => 'Запамти ме',
 'securelogin-stick-https' => 'Останите повезани са HTTPS након пријаве',
 'yourdomainname' => 'Домен:',
 'password-change-forbidden' => 'Не можете да промените лозинку на овом викију.',
@@ -1190,6 +1194,8 @@ $2
 'content-failed-to-parse' => 'Не могу да рашчланим садржај типа $2 за модел $1: $3',
 'invalid-content-data' => 'Неисправни подаци садржаја',
 'content-not-allowed-here' => 'Садржај модела „$1“ није дозвољен на страници [[$2]]',
+'editwarning-warning' => 'Ако напустите ову страницу, изгубићете све измене које сте направили.
+Ако сте пријављени, можете онемогућити ово упозорење у својим подешавањима, у одељку „Уређивање“.',
 
 # Content models
 'content-model-wikitext' => 'викитекст',
@@ -1478,15 +1484,6 @@ $1",
 У међувремену можете тражити преко Гугла.
 Упамтите да његови пописи овог викија могу бити застарели.',
 
-# Quickbar
-'qbsettings' => 'Бочна палета',
-'qbsettings-none' => 'Ништа',
-'qbsettings-fixedleft' => 'Причвршћена лево',
-'qbsettings-fixedright' => 'Причвршћена десно',
-'qbsettings-floatingleft' => 'Плутајућа лево',
-'qbsettings-floatingright' => 'Плутајућа десно',
-'qbsettings-directionality' => 'Фиксно, у зависности од смера писања вашег језика',
-
 # Preferences page
 'preferences' => 'Подешавања',
 'mypreferences' => 'Подешавања',
@@ -2059,7 +2056,6 @@ $1',
 'http-read-error' => 'HTTP грешка при читању.',
 'http-timed-out' => 'Захтев HTTP је истекао.',
 'http-curl-error' => 'Грешка при отварању адресе: $1',
-'http-host-unreachable' => 'Не могу да приступим адреси.',
 'http-bad-status' => 'Дошло је до проблема током захтева HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3208,13 +3204,8 @@ $1',
 
 # Stylesheets
 'common.css' => '/** CSS постављен овде ће се одразити на све теме */',
-'standard.css' => '/* CSS постављен овде ће утицати на све кориснике теме „Стандардно“ */',
-'nostalgia.css' => '/* CSS постављен овде ће утицати на све кориснике теме „Носталгија“ */',
 'cologneblue.css' => '/* CSS постављен овде ће утицати на све кориснике теме „Келнско плава“ */',
 'monobook.css' => '/* CSS постављен овде ће утицати на све кориснике теме „Монобук“ */',
-'myskin.css' => '/* CSS постављен овде ће утицати на све кориснике теме „Моја тема“ */',
-'chick.css' => '/* CSS постављен овде ће утицати на све кориснике теме „Шик“ */',
-'simple.css' => '/* CSS постављен овде ће утицати на све кориснике теме „Просто“ */',
 'modern.css' => '/* CSS постављен овде ће утицати на све кориснике теме „Савремено“ */',
 'vector.css' => '/* CSS постављен овде ће утицати на све кориснике теме „Векторско“ */',
 'print.css' => '/* CSS постављен овде ће утицати на издање за штампу */',
@@ -3227,13 +3218,8 @@ $1',
 
 # Scripts
 'common.js' => '/* Јаваскрипт постављен овде ће се користити за све кориснике при отварању сваке странице. */',
-'standard.js' => '/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Стандардно“ */',
-'nostalgia.js' => '/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Носталгија“ */',
 'cologneblue.js' => '/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Келнско плава“ */',
 'monobook.js' => '/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Монобук“ */',
-'myskin.js' => '/* Јаваскрипт постављен овде ће се учитати за све оне који користе „Моју тему“ */',
-'chick.js' => '/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Шик“ */',
-'simple.js' => '/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Просто“ */',
 'modern.js' => '/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Савремено“ */',
 'vector.js' => '/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Векторско“ */',
 'group-autoconfirmed.js' => '/* Јаваскрипт постављен овде ће се учитати за самопотврђене кориснике */',
@@ -3307,13 +3293,8 @@ $1',
 'pageinfo-protect-cascading-from' => 'Странице са преносивом заштитом од',
 
 # Skin names
-'skinname-standard' => 'Класично',
-'skinname-nostalgia' => 'Носталгија',
 'skinname-cologneblue' => 'Келнско плава',
 'skinname-monobook' => 'Монобук',
-'skinname-myskin' => 'Моја тема',
-'skinname-chick' => 'Шик',
-'skinname-simple' => 'Просто',
 'skinname-modern' => 'Савремено',
 'skinname-vector' => 'Векторско',
 
@@ -3408,8 +3389,6 @@ $1',
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans',
@@ -4289,6 +4268,8 @@ $5
 'htmlform-submit' => 'Пошаљи',
 'htmlform-reset' => 'Врати измене',
 'htmlform-selectorother-other' => 'Друго',
+'htmlform-no' => 'Не',
+'htmlform-yes' => 'Да',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 с подршком претраге целог текста',
index ea2bc20..b11795d 100644 (file)
@@ -332,8 +332,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Prikaži broj korisnika koji nadgledaju',
 'tog-oldsig' => 'Tekući potpis:',
 'tog-fancysig' => 'Smatraj potpis kao vikitekst (bez samopovezivanja)',
-'tog-externaleditor' => 'Uvek koristi spoljni uređivač (samo za napredne — potrebne su posebne postavke na računaru)',
-'tog-externaldiff' => 'Uvek koristi spoljni program za upoređivanje (samo za napredne — potrebne su posebne postavke na računaru)',
 'tog-showjumplinks' => 'Omogući pomoćne veze „Idi na“',
 'tog-uselivepreview' => 'Koristi trenutan pregled (javaskript, probna mogućnost)',
 'tog-forceeditsummary' => 'Opomeni me pri unosu praznog opisa',
@@ -348,6 +346,7 @@ $messages = array(
 'tog-showhiddencats' => 'Prikaži skrivene kategorije',
 'tog-noconvertlink' => 'Onemogući pretvaranje naslova veza',
 'tog-norollbackdiff' => 'Izostavi razliku nakon izvršenog vraćanja',
+'tog-useeditwarning' => 'Upozori me kada napustim stranicu sa nesačuvanim promenama',
 
 'underline-always' => 'uvek podvlači',
 'underline-never' => 'nikad ne podvlači',
@@ -1095,6 +1094,8 @@ Izgleda da ona već postoji.',
 'content-failed-to-parse' => 'Ne mogu da raščlanim sadržaj tipa $2 za model $1: $3',
 'invalid-content-data' => 'Neispravni podaci sadržaja',
 'content-not-allowed-here' => 'Sadržaj modela „$1“ nije dozvoljen na stranici [[$2]]',
+'editwarning-warning' => 'Ako napustite ovu stranicu, izgubićete sve izmene koje ste napravili.
+Ako ste prijavljeni, možete onemogućiti ovo upozorenje u svojim podešavanjima, u odeljku „Uređivanje“.',
 
 # Content models
 'content-model-wikitext' => 'vikitekst',
@@ -1383,15 +1384,6 @@ Ako želite sve da pretražite, dodajte prefiks '''all:''' ispred traženog sadr
 U međuvremenu možete tražiti preko Gugla.
 Upamtite da njegovi popisi ovog vikija mogu biti zastareli.',
 
-# Quickbar
-'qbsettings' => 'Bočna paleta',
-'qbsettings-none' => 'Ništa',
-'qbsettings-fixedleft' => 'Pričvršćena levo',
-'qbsettings-fixedright' => 'Pričvršćena desno',
-'qbsettings-floatingleft' => 'Plutajuća levo',
-'qbsettings-floatingright' => 'Plutajuća desno',
-'qbsettings-directionality' => 'Fiksno, u zavisnosti od smera pisanja vašeg jezika',
-
 # Preferences page
 'preferences' => 'Podešavanja',
 'mypreferences' => 'Podešavanja',
@@ -1963,7 +1955,6 @@ Radi sigurnosti, img_auth.php je onemogućen.',
 'http-read-error' => 'HTTP greška pri čitanju.',
 'http-timed-out' => 'Zahtev HTTP je istekao.',
 'http-curl-error' => 'Greška pri otvaranju adrese: $1',
-'http-host-unreachable' => 'Ne mogu da pristupim adresi.',
 'http-bad-status' => 'Došlo je do problema tokom zahteva HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2289,15 +2280,6 @@ Podržani protokoli: <code>$1</code> (zadaje http:// ako ne navedete protokol).'
 'listusers-noresult' => 'Korisnik nije pronađen.',
 'listusers-blocked' => '({{GENDER:$1|blokiran|blokirana|blokiran}})',
 
-# Special:ActiveUsers
-'activeusers' => 'Spisak aktivnih korisnika',
-'activeusers-intro' => 'Ovo je spisak korisnika koji su bili aktivni {{PLURAL:$1|prethodni dan|u poslednja $1 dana|u poslednjih $1 dana}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|izmena|izmene|izmena}} {{PLURAL:$3|prethodni dan|u poslednja $3 dana|u poslednjih $3 dana}}',
-'activeusers-from' => 'Prikaži korisnike počev od:',
-'activeusers-hidebots' => 'Sakrij botove',
-'activeusers-hidesysops' => 'Sakrij administratore',
-'activeusers-noresult' => 'Korisnik nije pronađen.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Prava korisničkih grupa',
 'listgrouprights-summary' => 'Sledi spisak korisničkih grupa na ovom vikiju, zajedno s pravima pristupa.
@@ -3111,13 +3093,8 @@ Pokušajte ponovo.',
 
 # Stylesheets
 'common.css' => '/** CSS postavljen ovde će se odraziti na sve teme */',
-'standard.css' => '/* CSS postavljen ovde će uticati na sve korisnike teme „Standardno“ */',
-'nostalgia.css' => '/* CSS postavljen ovde će uticati na sve korisnike teme „Nostalgija“ */',
 'cologneblue.css' => '/* CSS postavljen ovde će uticati na sve korisnike teme „Kelnsko plava“ */',
 'monobook.css' => '/* CSS postavljen ovde će uticati na sve korisnike teme „Monobuk“ */',
-'myskin.css' => '/* CSS postavljen ovde će uticati na sve korisnike teme „Moja tema“ */',
-'chick.css' => '/* CSS postavljen ovde će uticati na sve korisnike teme „Šik“ */',
-'simple.css' => '/* CSS postavljen ovde će uticati na sve korisnike teme „Prosto“ */',
 'modern.css' => '/* CSS postavljen ovde će uticati na sve korisnike teme „Savremeno“ */',
 'vector.css' => '/* CSS postavljen ovde će uticati na sve korisnike teme „Vektorsko“ */',
 'print.css' => '/* CSS postavljen ovde će uticati na izdanje za štampu */',
@@ -3130,13 +3107,8 @@ Pokušajte ponovo.',
 
 # Scripts
 'common.js' => '/* Javaskript postavljen ovde će se koristiti za sve korisnike pri otvaranju svake stranice. */',
-'standard.js' => '/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Standardno“ */',
-'nostalgia.js' => '/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Nostalgija“ */',
 'cologneblue.js' => '/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Kelnsko plava“ */',
 'monobook.js' => '/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Monobuk“ */',
-'myskin.js' => '/* Javaskript postavljen ovde će se učitati za sve one koji koriste „Moju temu“ */',
-'chick.js' => '/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Šik“ */',
-'simple.js' => '/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Prosto“ */',
 'modern.js' => '/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Savremeno“ */',
 'vector.js' => '/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Vektorsko“ */',
 'group-autoconfirmed.js' => '/* Javaskript postavljen ovde će se učitati za samopotvrđene korisnike */',
@@ -3210,13 +3182,8 @@ Ovo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj li
 'pageinfo-protect-cascading-from' => 'Stranice sa prenosivom zaštitom od',
 
 # Skin names
-'skinname-standard' => 'Klasično',
-'skinname-nostalgia' => 'Nostalgija',
 'skinname-cologneblue' => 'Kelnsko plava',
 'skinname-monobook' => 'Monobuk',
-'skinname-myskin' => 'Moja tema',
-'skinname-chick' => 'Šik',
-'skinname-simple' => 'Prosto',
 'skinname-modern' => 'Savremeno',
 'skinname-vector' => 'Vektorsko',
 
@@ -3311,8 +3278,6 @@ Sve daljnje veze u istom redu smatraju se izuzecima.',
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans',
index eef34f2..101ab56 100644 (file)
@@ -350,9 +350,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Visa antalet användare som bevakar',
 'tog-oldsig' => 'Nuvarande signatur:',
 'tog-fancysig' => 'Rå signatur som wikitext (utan en automatisk länk)',
-'tog-externaleditor' => 'Använd extern editor som standard (endast för avancerade användare, speciella inställningar på din dator krävs. [//www.mediawiki.org/wiki/Manual:External_editors Mer information.])',
-'tog-externaldiff' => 'Använd externt diff-verktyg som förval (endast för avancerade användare, kräver speciella inställningar i din dator.
-[//www.mediawiki.org/wiki/Manual:External_editors Mer information.])',
 'tog-showjumplinks' => 'Aktivera "hoppa till"-tillgänglighetslänkar',
 'tog-uselivepreview' => 'Använd direktuppdaterad förhandsgranskning (Javascript, på försöksstadiet)',
 'tog-forceeditsummary' => 'Påminn mig om jag inte fyller i en redigeringskommentar',
@@ -367,6 +364,7 @@ $messages = array(
 'tog-showhiddencats' => 'Visa dolda kategorier',
 'tog-noconvertlink' => 'Stäng av konvertering av sidtitlar',
 'tog-norollbackdiff' => 'Visa inte diff efter tillbakarullning',
+'tog-useeditwarning' => 'Varna mig om jag lämnar en redigeringssida där jag gjort ändringar men inte sparat.',
 
 'underline-always' => 'Alltid',
 'underline-never' => 'Aldrig',
@@ -735,9 +733,15 @@ Observera att det, tills du tömmer din webbläsares cache, på vissa sidor kan
 'welcomecreation-msg' => 'Ditt konto har skapats.
 Glöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]].',
 'yourname' => 'Användarnamn:',
+'userlogin-yourname' => 'Användarnamn',
+'userlogin-yourname-ph' => 'Ange ditt användarnamn',
 'yourpassword' => 'Lösenord:',
+'userlogin-yourpassword' => 'Lösenord',
+'userlogin-yourpassword-ph' => 'Ange ditt lösenord',
 'yourpasswordagain' => 'Upprepa lösenord',
 'remembermypassword' => 'Spara min inloggning på den här datorn (i max $1 {{PLURAL:$1|dygn|dygn}})',
+'userlogin-remembermypassword' => 'Kom ihåg mig',
+'userlogin-signwithsecure' => 'Logga in med säker server',
 'securelogin-stick-https' => 'Fortsätt vara ansluten till HTTPS efter inloggning',
 'yourdomainname' => 'Din domän',
 'password-change-forbidden' => 'Du kan inte ändra lösenord på denna wiki.',
@@ -750,12 +754,16 @@ Glöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]].
 'logout' => 'Logga ut',
 'userlogout' => 'Logga ut',
 'notloggedin' => 'Inte inloggad',
+'userlogin-noaccount' => 'Har du inget konto?',
+'userlogin-joinproject' => 'Gå med i {{SITENAME}}',
 'nologin' => "Har du inget användarkonto? '''$1'''.",
 'nologinlink' => 'Skapa ett användarkonto',
 'createaccount' => 'Skapa ett konto',
 'gotaccount' => "Har du redan ett användarkonto? '''$1'''.",
 'gotaccountlink' => 'Logga in',
 'userlogin-resetlink' => 'Har du glömt dina inloggningsuppgifter?',
+'helplogin-url' => 'Help:Logging in',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Hjälp med inloggning]]',
 'createaccountmail' => 'Använd ett tillfällig slumpartat lösenord och skicka den till e-postadressen som anges nedan',
 'createaccountreason' => 'Orsak:',
 'badretype' => 'De lösenord du uppgett överensstämmer inte med varandra.',
@@ -851,6 +859,7 @@ Du kanske redan har lyckats ändra ditt lösenord eller begärt ett nytt tillfä
 'passwordreset-text' => 'Fyll i detta formulär för att återställa ditt lösenord.',
 'passwordreset-legend' => 'Återställ lösenord',
 'passwordreset-disabled' => 'Lösenordsåterställning har inaktiverats på denna wiki.',
+'passwordreset-emaildisabled' => 'E-postfunktioner har inaktiverats på denna wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Ange en av datadelarna nedan}}',
 'passwordreset-username' => 'Användarnamn:',
 'passwordreset-domain' => 'Domän:',
@@ -874,7 +883,7 @@ Du bör logga in och välja ett nytt lösenord nu. Om någon annan gjorde denna
 Tillfälligt lösenord: $2',
 'passwordreset-emailsent' => 'En lösenordsåterställning via e-post har skickats.',
 'passwordreset-emailsent-capture' => 'En lösenordsåterställning via e-post har skickats, som visas nedan.',
-'passwordreset-emailerror-capture' => 'En lösenordsåterställning via e-post har skapats, som visas nedan, men det gick inte att skicka den till användaren: $1',
+'passwordreset-emailerror-capture' => 'En lösenordsåterställning via e-post har skapats, som visas nedan, men det gick inte att skicka den till {{GENDER:$2|användaren}}: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Ändra e-postadress',
@@ -1092,6 +1101,8 @@ Den finns redan.',
 'content-failed-to-parse' => 'Det gick inte att parsa $2 innehåll för $1 modell: $3',
 'invalid-content-data' => 'Ogiltig innehållsdata',
 'content-not-allowed-here' => 'innehåll av "$1" är inte tillåtet på sidan [[$2]]',
+'editwarning-warning' => 'Om du lämnar den här sidan kommer du att förlora alla ändringar du har gjort.
+Om du är inloggad kan du slå av den här varningen under "{{int:prefs-editing}}" i dina inställningar.',
 
 # Content models
 'content-model-wikitext' => 'wikitext',
@@ -1377,6 +1388,7 @@ Detaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'searchdisabled' => 'Sökfunktionen på {{SITENAME}} är avstängd.
 Du kan istället göra sökningar med hjälp av Google.
 Notera dock att deras indexering av {{SITENAME}} kan vara något föråldrad.',
+'search-error' => 'Ett fel uppstod under sökningen: $1',
 
 # Preferences page
 'preferences' => 'Inställningar',
@@ -3956,6 +3968,8 @@ Bilder visas i full upplösning, andra filtyper öppnas direkt i de program som
 'htmlform-submit' => 'Spara',
 'htmlform-reset' => 'Ogör ändringar',
 'htmlform-selectorother-other' => 'Andra',
+'htmlform-no' => 'Nej',
+'htmlform-yes' => 'Ja',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 med stöd för fulltextsökning',
index 30279d0..6348b22 100644 (file)
@@ -154,8 +154,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Onyesha idadi ya watumiaji waangalizi',
 'tog-oldsig' => 'Sahihi iliyopo:',
 'tog-fancysig' => 'Weka sahihi tu (bila kujiweka kiungo yenyewe)',
-'tog-externaleditor' => 'Tumia kiharirio cha nje inaposhindikana (kwa wataalamu tu, inahitaji marekebisho maalum kwenye tarakilishi yako. [//www.mediawiki.org/wiki/Manual:External_editors Maelezo zaidi.])',
-'tog-externaldiff' => 'Tumia diff za nje inaposhindikana (kwa wataalamu tu, inahitaji marekebisho maalum kwenye tarakilishi yako. [//www.mediawiki.org/wiki/Manual:External_editors Maelezo zaidi.])',
 'tog-showjumplinks' => 'Wezesha "ruka hadi" viungo vya mafikio',
 'tog-uselivepreview' => 'Tumia kihakikio cha papohapo (JavaScript) (Experimental)',
 'tog-forceeditsummary' => 'Nishtue pale ninapoingiza muhtasari mtupu wa kuhariri',
@@ -170,6 +168,7 @@ $messages = array(
 'tog-showhiddencats' => 'Onyesha jamii zilizofichwa',
 'tog-noconvertlink' => 'Lemaza kiungo cha jina la badiliko',
 'tog-norollbackdiff' => 'Ondoa faili za diff baada ya kufanyakazi ya kurejesha',
+'tog-useeditwarning' => 'Unionyeshe ilani ninapotaka kutoka kwenye ukurasa ninouhariri, bila kuhifadhi mabadiliko',
 
 'underline-always' => 'Muda wote',
 'underline-never' => 'Kamwe',
@@ -530,7 +529,11 @@ Sababu zilizotolewa ni "\'\'$2\'\'".',
 Unaweza kuendelea kutumia {{SITENAME}} bila kutaja jina lako, au unaweza <span class='plainlinks'>[$1 kuingia tena]</span> kwenye akaunti yako. Kumbuka kwamba kurasa nyingine zitaendelea kuonekana kana kwamba bado hujatoka kwenye akaunti yako, hadi utakaposafisha kache ya kivinjari.",
 'welcomeuser' => 'Karibu, $1!',
 'yourname' => 'Jina la mtumiaji:',
+'userlogin-yourname' => 'Jina la mtumiaji',
+'userlogin-yourname-ph' => 'Weka jina lako la mtumiaji',
 'yourpassword' => 'Neno la siri:',
+'userlogin-yourpassword' => 'Neno la siri',
+'userlogin-yourpassword-ph' => 'Weka neno lako la siri',
 'yourpasswordagain' => 'Andika tena neno la siri',
 'remembermypassword' => 'Kumbuka kuingia kwangu katika kivinjari hiki (kwa muda usiozidi {{PLURAL:$1|siku}} $1)',
 'securelogin-stick-https' => 'Endelea kuunganishwa na HTTPS baada ya kuingia',
@@ -545,6 +548,8 @@ Unaweza kuendelea kutumia {{SITENAME}} bila kutaja jina lako, au unaweza <span c
 'logout' => 'Toka',
 'userlogout' => 'Toka',
 'notloggedin' => 'Hujaingia',
+'userlogin-noaccount' => 'Huna akaunti ya kuingilia?',
+'userlogin-joinproject' => 'Jiunga na {{SITENAME}}',
 'nologin' => "Huna akaunti ya kuingilia? '''$1'''.",
 'nologinlink' => 'Sajili akaunti',
 'createaccount' => 'Sajili akaunti',
@@ -884,6 +889,8 @@ Inaonekana kwamba ukurasa umefutwa.',
 'edit-already-exists' => 'Haikufanikiwa kuanzisha ukurasa mpya.
 Ukurasa wa jina hilo unapatikana tayari.',
 'defaultmessagetext' => 'Ujumbe uliopo',
+'editwarning-warning' => 'Ukitoka kwenye ukurasa huu labda utapoteza madabiliko uliyoyafanya.
+Unaweza kuondoa ilani hii ukienda kwenye sehemu ya "{{int:prefs-editing}}" kwenye mapendekezo yako.',
 
 # Content models
 'content-model-javascript' => 'HatiJava',
@@ -991,7 +998,7 @@ Wakabidhi wengine wa {{SITENAME}} bado wataweza kuliona lile lililofichwa pamoja
 'revdelete-hide-restricted' => 'Wakabidhi (vilevile wengine) wasiweze kuona data',
 'revdelete-radio-same' => '(isibadilishwe)',
 'revdelete-radio-set' => 'Ndiyo',
-'revdelete-radio-unset' => 'Siyo',
+'revdelete-radio-unset' => 'Hapana',
 'revdelete-suppress' => 'Wakabidhi (vilevile wengine) wasiweze kuona data',
 'revdelete-unsuppress' => 'Uzuio wa kuona mapitio uondolewe, mapitio yanaporudishwa',
 'revdelete-log' => 'Sababu:',
@@ -1122,14 +1129,6 @@ Ukitaka kutafuta kwenye maeneo yote (pamoja na kurasa za majadiliano, vigezo, nk
 Unaweza kutafuta kwa kutumia Google punde si punde.
 Ujue lakini kwamba kumbukumbu za {{SITENAME}} kule Google labda zilipitwa na wakati.',
 
-# Quickbar
-'qbsettings' => 'Mwambaa pembe',
-'qbsettings-none' => 'Hakuna',
-'qbsettings-fixedleft' => 'Kushoto tuli',
-'qbsettings-fixedright' => 'Kulia tuli',
-'qbsettings-floatingleft' => 'Kushoto geugeu',
-'qbsettings-floatingright' => 'Kulia geugeu',
-
 # Preferences page
 'preferences' => 'Mapendekezo',
 'mypreferences' => 'Mapendekezo',
@@ -1609,7 +1608,6 @@ Haliwezi kukaguliwa vilivyo kwa sababu za kiusalama.',
 'http-read-error' => 'Hitilafu ya kusoma HTTP.',
 'http-timed-out' => 'Ombi la HTTP muda umepita.',
 'http-curl-error' => 'Hitilafu ya kuleta URL: $1',
-'http-host-unreachable' => 'KISARA (URL) haikupatikana',
 'http-bad-status' => 'Kulikuwa na tatizo wakati wa kutekeleza ombi la HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3123,6 +3121,8 @@ Tovuti hii inapata matatatizo wakati huu.',
 'htmlform-submit' => 'Wasilisha',
 'htmlform-reset' => 'Tengua mabadiliko',
 'htmlform-selectorother-other' => 'Nyingine',
+'htmlform-no' => 'Hapana',
+'htmlform-yes' => 'Ndiyo',
 
 # New logging system
 'logentry-delete-delete' => '$1 alifuta ukurasa wa $3',
index 03d6c19..9414568 100644 (file)
@@ -94,8 +94,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Pokoż, wjela sprowjorzy dowo pozůr',
 'tog-oldsig' => 'Teroźni wyglůnd Twojygo szrajbowańo',
 'tog-fancysig' => 'Szrajbńij s kodůma wiki (bez autůmatycznygo linka)',
-'tog-externaleditor' => 'Sztandardowo używej zewnyntrzny edytor (jyno do ekspertůw, trza mjyć ekstra sztalowańy we systymje)',
-'tog-externaldiff' => 'Sztandardowo używej zewnyntrzny program do filowańo we pomjyńańach (jyno do ekspertůw, trza mjyć ekstra sztalowańy we systymje)',
 'tog-showjumplinks' => 'Zapńij cajchnůndzki "przyńdź do"',
 'tog-uselivepreview' => 'Używej dynamiczne uobźyrańy (JavaScript) (eksperymentalny)',
 'tog-forceeditsummary' => 'Pedź, kejbych ńic ńy naszkryfloł we uopiśe pomjyńań',
@@ -983,14 +981,6 @@ $1',
 'search-external' => 'Šnupańy zewnyntřne',
 'searchdisabled' => 'Šnupańy we {{GRAMMAR:MS.lp|{{SITENAME}}}} zostouo zawarte. Zańim go zouůnčům, možeš sprůbować šnupańo bez Google. Ino zauwaž, co informacyje uo treśći {{GRAMMAR:MS.lp|{{SITENAME}}}} můgům być we Google ńyakuratne.',
 
-# Quickbar
-'qbsettings' => 'Gurt šybkigo dostympu',
-'qbsettings-none' => 'Brak',
-'qbsettings-fixedleft' => 'Stouy, s lewyj',
-'qbsettings-fixedright' => 'Stouy, s prawyj',
-'qbsettings-floatingleft' => 'Unošůncy śe, s lewyj',
-'qbsettings-floatingright' => 'Unošůncy śe, s prawyj',
-
 # Preferences page
 'preferences' => 'Preferyncyje',
 'mypreferences' => 'Moje preferyncyje',
@@ -1624,11 +1614,6 @@ Uobsůgiwane protokoły: <code>$1</code>',
 'listusers-submit' => 'Pokož',
 'listusers-noresult' => 'Ńy znejdźůno žodnygo užytkowńika.',
 
-# Special:ActiveUsers
-'activeusers-hidebots' => 'Schrůń boty',
-'activeusers-hidesysops' => 'Schrůń adminy',
-'activeusers-noresult' => 'Ńy sům używacze.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Uprawńyńo grup użytkowńikůw',
 'listgrouprights-summary' => 'Půńiży znojdowo śe spis grup użytkowńikůw zdefińjowanych na tyj wiki, s wyszczygůlńyńym przidźelůnych im prow dostympu.
index 3f2d938..ae64fbd 100644 (file)
@@ -112,8 +112,6 @@ $messages = array(
 'tog-shownumberswatching' => 'கவனிக்கும் பயனர்களின் எண்ணிக்கையைக் காட்டவும்',
 'tog-oldsig' => 'நடப்பு கையொப்பம்:',
 'tog-fancysig' => 'வெற்றுக் கையொப்பம் (தானியங்கி இணைப்பின்றி)',
-'tog-externaleditor' => 'இயல்பிருப்பாக வெளித் தொகுப்பு மென்பொருளைப் பயன்படுத்து (இது வல்லுநர்களுக்கு மட்டும், உங்கள் கணினியில் சிறப்பு அமைப்புகள் தேவைப்படும் [மேலும் விவரங்களுக்கு //www.mediawiki.org/wiki/Manual:External_editors .])',
-'tog-externaldiff' => 'வெளி வேறுபாட்டை இயல்பிருப்பாகப் பயன்படுத்து (இது வல்லுநர்களுக்கு மட்டும்; உங்கள் கணினியில் சிறப்பு அமைப்புகள் தேவைப்படும் [மேலும் விவரங்களுக்கு //www.mediawiki.org/wiki/Manual:External_editors .])',
 'tog-showjumplinks' => '"தாவிச் செல்லவும்" இணைப்புகளை செயலாக்கவும்',
 'tog-uselivepreview' => 'நேரடி முன்தோற்றத்தைப் பயன்படுத்து (ஜாவாஸ்கிரிப்ட் தேவை) (சோதனையிலுள்ளது)',
 'tog-forceeditsummary' => 'தொகுப்புச் சுருக்கம் வெற்றாக இருக்கும் போது எனக்கு நினைவூட்டு',
@@ -127,6 +125,7 @@ $messages = array(
 'tog-diffonly' => 'மாற்றங்களை ஒப்பிடும் போது அதன் கீழ் பக்க உள்ளடக்கத்தைக் காட்டாதே',
 'tog-showhiddencats' => 'மறைக்கப்பட்ட பகுப்புகளைக் காட்டு',
 'tog-norollbackdiff' => 'முன்பிருந்த நிலைக்குக் கொண்டுவந்தபின் வித்தியாசங்களை விட்டுவிடவும் (காட்டத்தேவையில்லை).',
+'tog-useeditwarning' => 'தொகுத்துக் கொண்டிருக்கும் பக்கத்தை சேமிக்காமல் வெளியேறினால் எனக்கு எச்சரிக்கை செய்',
 
 'underline-always' => 'எப்பொழுதும்',
 'underline-never' => 'எப்போதுமில்லை',
index 05f81b7..0de5b52 100644 (file)
@@ -174,8 +174,6 @@ $messages = array(
 'tog-shownumberswatching' => 'వీక్షకుల సంఖ్యను చూపించు',
 'tog-oldsig' => 'ప్రస్తుత సంతకం:',
 'tog-fancysig' => 'సంతకాన్ని వికీపాఠ్యంగా తీసుకో (ఆటోమెటిక్‌ లింకు లేకుండా)',
-'tog-externaleditor' => 'మామూలుగా బయటి ఎడిటరును వాడు (నిపుణులకు మాత్రమే. మీ కంప్యూటర్లో ప్రత్యేక అమరికలు అవసరమవుతాయి. [//www.mediawiki.org/wiki/Manual:External_editors మరింత సమాచారం.])',
-'tog-externaldiff' => 'మార్పులను చూడటానికి బయటి సాఫ్టువేరును వాడు (నిపుణులకు మాత్రమే, మీ కంప్యూటర్లో ప్రత్యేక అమరికలు అవసరమవుతాయి. [//www.mediawiki.org/wiki/Manual:External_editors మరింత సమాచారం.])',
 'tog-showjumplinks' => '"ఇక్కడికి గెంతు" లింకులను చూపించు',
 'tog-uselivepreview' => 'రాస్తున్నదానిని ఎప్పటికప్పుడు సరిచూడండి (జావాస్క్రిప్టు) (పరీక్షాదశలో ఉంది)',
 'tog-forceeditsummary' => 'దిద్దుబాటు సారాంశం ఖాళీగా ఉంటే ఆ విషయాన్ని నాకు సూచించు',
@@ -189,6 +187,7 @@ $messages = array(
 'tog-diffonly' => 'తేడాలను చూపిస్తున్నపుడు, కింద చూపించే పేజీలోని సమాచారాన్ని చూపించొద్దు',
 'tog-showhiddencats' => 'దాచిన వర్గాలను చూపించు',
 'tog-norollbackdiff' => 'రద్దు చేసాక తేడాలు చూపించవద్దు',
+'tog-useeditwarning' => 'ఏదైనా పేజీని నేను వదిలివెళ్తున్నప్పుడు దానిలో భద్రపరచని మార్పులు ఉంటే నన్ను హెచ్చరించు',
 
 'underline-always' => 'ఎల్లప్పుడూ',
 'underline-never' => 'ఎప్పటికీ వద్దు',
@@ -552,9 +551,14 @@ $2',
 *వికీని త్వరగా అర్థం చేసుకునేందుకు [[వికీపీడియా:5 నిమిషాల్లో వికీ|5 నిమిషాల్లో వికీ]] పేజీని చూడండి.
 *తెలుగులో రాసేందుకు ఇంగ్లీషు అక్షరాల ఉచ్ఛారణతో తెలుగు టైపు చేసే [[వికీపీడియా:టైపింగు సహాయం| టైపింగ్  సహాయం]] వాడవచ్చు. మరిన్ని ఉపకరణాల కొరకు [[కీ బోర్డు]] మరియు   తెరపై తెలుగు సరిగా లేకపోతే[[వికీపీడియా:Setting up your browser for Indic scripts|ఈ పేజీ]]  చూడండి.',
 'yourname' => 'వాడుకరి పేరు:',
+'userlogin-yourname' => 'వాడుకరి పేరు',
+'userlogin-yourname-ph' => 'మీ వాడుకరి పేరును ఇవ్వండి',
 'yourpassword' => 'సంకేతపదం:',
+'userlogin-yourpassword' => 'సంకేతపదం',
+'userlogin-yourpassword-ph' => 'మీ సంకేతపదాన్ని ఇవ్వండి',
 'yourpasswordagain' => 'సంకేతపదాన్ని మళ్ళీ ఇవ్వండి:',
 'remembermypassword' => 'ఈ కంప్యూటరులో నా ప్రవేశాన్ని గుర్తుంచుకో (గరిష్ఠంగా $1 {{PLURAL:$1|రోజు|రోజుల}}కి)',
+'userlogin-remembermypassword' => 'నన్ను గుర్తుంచుకో',
 'securelogin-stick-https' => 'ప్రవేశం తర్వాత కూడా HTTPSకి అనుసంధానమై ఉండు',
 'yourdomainname' => 'మీ డోమైను',
 'password-change-forbidden' => 'ఈ వికీలో మీరు సంకేతపదాలను మార్చలేరు.',
@@ -567,6 +571,8 @@ $2',
 'logout' => 'నిష్క్రమించు',
 'userlogout' => 'నిష్క్రమించు',
 'notloggedin' => 'లోనికి ప్రవేశించి లేరు',
+'userlogin-noaccount' => 'మీకు ఖాతా లేదా?',
+'userlogin-joinproject' => '{{SITENAME}}లో చేరండి',
 'nologin' => "ఖాతా లేదా? '''$1'''.",
 'nologinlink' => 'ఖాతాని సృష్టించుకోండి',
 'createaccount' => 'ఖాతాని సృష్టించు',
@@ -701,6 +707,7 @@ $2
 'changeemail-oldemail' => 'ప్రస్తుత ఈ-మెయిలు చిరునామా:',
 'changeemail-newemail' => 'కొత్త ఈ-మెయిలు చిరునామా:',
 'changeemail-none' => '(ఏమీలేదు)',
+'changeemail-password' => 'మీ {{SITENAME}} సంకేతపదం:',
 'changeemail-submit' => 'ఈ-మెయిల్ మార్చు',
 'changeemail-cancel' => 'రద్దుచేయి',
 
@@ -887,6 +894,8 @@ $2
 అది ఇప్పటికే ఉంది.',
 'defaultmessagetext' => 'అప్రమేయ సందేశపు పాఠ్యం',
 'invalid-content-data' => 'తప్పుడు విషయం',
+'editwarning-warning' => 'ఈ పేజీని వదిలివెళ్ళడం వల్ల మీరు చేసిన మార్పులను కోల్పోయే అవకాశం ఉంది.
+మీరు ప్రవేశించివుంటే, ఈ హెచ్చరికని మీ అభిరుచులలో "మరపులు" అనే విభాగంలో అచేతనం చేసుకోవచ్చు.',
 
 # Content models
 'content-model-wikitext' => 'వికీపాఠ్యం',
@@ -1157,15 +1166,6 @@ $1",
 'search-external' => 'బయటి అన్వేషణ',
 'searchdisabled' => '{{SITENAME}} అన్వేషణ తాత్కాలికంగా పని చెయ్యడం లేదు. ఈలోగా మీరు గూగుల్‌ ఉపయోగించి అన్వేషించవచ్చు. ఒక గమనిక: గూగుల్‌ ద్వారా కాలదోషం పట్టిన ఫలితాలు రావడానికి అవకాశం ఉంది.',
 
-# Quickbar
-'qbsettings' => 'క్విక్‌బార్',
-'qbsettings-none' => 'ఏదీకాదు',
-'qbsettings-fixedleft' => 'స్థిర ఎడమ',
-'qbsettings-fixedright' => 'స్థిర కుడి',
-'qbsettings-floatingleft' => 'ఎడమకు ఒదిగి',
-'qbsettings-floatingright' => 'కుడికి ఒదిగి',
-'qbsettings-directionality' => 'స్థిరం, మీ లిపి మరియు భాషల యొక్క దిశ ఆధారంగా',
-
 # Preferences page
 'preferences' => 'అభిరుచులు',
 'mypreferences' => 'అభిరుచులు',
index 53b78be..2d36c68 100644 (file)
@@ -226,8 +226,6 @@ $messages = array(
 'tog-shownumberswatching' => 'แสดงจำนวนผู้ใช้ที่เฝ้าดู',
 'tog-oldsig' => 'ลายเซ็นที่ใช้อยู่:',
 'tog-fancysig' => 'ใช้คำสั่งวิกิที่ปรากฏในลายเซ็นนี้ (โดยไม่มีลิงก์อัตโนมัติ)',
-'tog-externaleditor' => 'ใช้โปรแกรมแก้ไขภายนอกโดยปริยาย (สำหรับผู้เชี่ยวชาญเท่านั้น ต้องการการตั้งค่าพิเศษบนคอมพิวเตอร์ของคุณ [//www.mediawiki.org/wiki/Manual:External_editors ข้อมูลเพิ่มเติม])',
-'tog-externaldiff' => 'ใช้โปรแกรมเปรียบเทียบภายนอกโดยปริยาย (สำหรับผู้เชี่ยวชาญเท่านั้น ต้องการการตั้งค่าพิเศษบนคอมพิวเตอร์ของคุณ [//www.mediawiki.org/wiki/Manual:External_editors ข้อมูลเพิ่มเติม])',
 'tog-showjumplinks' => 'เปิดใช้งาน "กระโดด" อัตโนมัติไปตามลิงก์',
 'tog-uselivepreview' => 'แสดงตัวอย่างการแก้ไขแบบทันที (จาวาสคริปต์) (ทดลอง)',
 'tog-forceeditsummary' => 'เตือนเมื่อช่องคำอธิบายอย่างย่อว่าง',
@@ -242,6 +240,7 @@ $messages = array(
 'tog-showhiddencats' => 'แสดงหมวดหมู่ที่ซ่อนอยู่',
 'tog-noconvertlink' => 'ปิดใช้งานการแปลงชื่อเรื่องของลิงก์',
 'tog-norollbackdiff' => 'ไม่แสดงการเปลี่ยนแปลงหลังดำเนินการย้อนกลับฉุกเฉิน',
+'tog-useeditwarning' => 'เตือนฉัน เมื่อฉันกำลังจะออกจากหน้าแก้ไขโดยมีข้อมูลที่ยังไม่ได้บันทึก',
 
 'underline-always' => 'เสมอ',
 'underline-never' => 'ไม่เคย',
@@ -320,7 +319,7 @@ $messages = array(
 'category-article-count-limited' => '$1 หน้าต่อไปนี้อยู่ในหมวดหมู่นี้',
 'category-file-count' => '{{PLURAL:$2|หมวดหมู่นี้มีเพียงไฟล์เดียว|ในหมวดหมู่นี้มี $1 ไฟล์ จากทั้งหมด $2 ไฟล์}}',
 'category-file-count-limited' => '{{PLURAL:$1|ไฟล์|ไฟล์}}ต่อไปนี้อยู่ในหมวดหมู่นี้',
-'listingcontinuesabbrev' => '(ต่อ)',
+'listingcontinuesabbrev' => 'ต่อ',
 'index-category' => 'หน้าที่มีดัชนี',
 'noindex-category' => 'หน้าที่ไม่มีดัชนี',
 'broken-file-category' => 'หน้าที่มีลิงก์ไฟล์เสีย',
@@ -375,7 +374,7 @@ $messages = array(
 'searcharticle' => 'ไป',
 'history' => 'ประวัติหน้า',
 'history_short' => 'ประวัติ',
-'updatedmarker' => 'à¸\81ารปรับตั้งแต่การเข้าชมครั้งล่าสุดของฉัน',
+'updatedmarker' => 'à¸\96ูà¸\81ปรับตั้งแต่การเข้าชมครั้งล่าสุดของฉัน',
 'printableversion' => 'รุ่นพร้อมพิมพ์',
 'permalink' => 'ลิงก์ถาวร',
 'print' => 'พิมพ์',
@@ -391,8 +390,8 @@ $messages = array(
 'protect' => 'ล็อก',
 'protect_change' => 'เปลี่ยน',
 'protectthispage' => 'ล็อกหน้านี้',
-'unprotect' => 'à¹\80à¸\9bลีà¹\88ยà¸\99à¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99',
-'unprotectthispage' => 'à¹\80à¸\9bลีà¹\88ยà¸\99à¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99หน้านี้',
+'unprotect' => 'à¹\80à¸\9bลีà¹\88ยà¸\99à¸\81ารลà¹\87อà¸\81',
+'unprotectthispage' => 'à¹\80à¸\9bลีà¹\88ยà¸\99à¸\81ารลà¹\87อà¸\81หน้านี้',
 'newpage' => 'หน้าใหม่',
 'talkpage' => 'อภิปรายหน้านี้',
 'talkpagelinktext' => 'พูดคุย',
@@ -402,7 +401,7 @@ $messages = array(
 'articlepage' => 'ดูหน้าเนื้อหา',
 'talk' => 'อภิปราย',
 'views' => 'ดู',
-'toolbox' => 'เครื่องมือ',
+'toolbox' => 'à¸\81ลà¹\88อà¸\87à¹\80à¸\84รืà¹\88อà¸\87มือ',
 'userpage' => 'ดูหน้าผู้ใช้',
 'projectpage' => 'ดูหน้าโครงการ',
 'imagepage' => 'ดูหน้าไฟล์',
@@ -421,8 +420,8 @@ $messages = array(
 'jumptonavigation' => 'นำทาง',
 'jumptosearch' => 'ค้นหา',
 'view-pool-error' => 'ขออภัย ขณะนี้เซิร์ฟเวอร์มีภาระเกิน
-à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\9eยายามà¹\80à¸\82à¹\89าà¸\94ูหà¸\99à¹\89าà¸\99ีà¹\89มาà¸\81à¹\80à¸\81ิà¸\99à¹\84à¸\9b
-à¸\81รุà¸\93ารอสัà¸\81à¸\84รูà¹\88à¸\81à¹\88อà¸\99à¸\97ีà¹\88à¸\88ะà¹\80à¸\82à¹\89าà¸\94ูหà¸\99à¹\89าà¸\99ีà¹\89อีà¸\81à¸\84รัà¹\89à¸\87หà¸\99ึà¹\88
+ผู้ใช้พยายามดูหน้านี้มากเกินไป
+à¸\81รุà¸\93ารอสัà¸\81à¸\84รูà¹\88à¸\81à¹\88อà¸\99à¹\80à¸\82à¹\89าหà¸\99à¹\89าà¸\99ีà¹\89อีà¸\81à¸\84รัà¹\89
 
 $1',
 'pool-timeout' => 'เกินเวลารอการล็อก',
@@ -451,10 +450,10 @@ $1',
 
 'badaccess' => 'มีข้อผิดพลาดในการใช้สิทธิ',
 'badaccess-group0' => 'คุณไม่ได้รับอนุญาตให้ดำเนินการตามที่ขอ',
-'badaccess-groups' => 'ปฏิบัติการที่คุณขอนี้สงวนไว้เฉพาะผู้ใช้ใน{{PLURAL:$2|กลุ่ม|กลุ่มหนึ่งกลุ่มใด ดังนี้}}: $1',
+'badaccess-groups' => 'ปฏิบัติการที่คุณขอนี้สงวนไว้เฉพาะผู้ใช้ใน{{PLURAL:$2|กลุ่ม|กลุ่ม}}: $1',
 
 'versionrequired' => 'ต้องการมีเดียวิกิรุ่น $1',
-'versionrequiredtext' => 'à¸\95à¹\89อà¸\87à¸\81ารมีà¹\80à¸\94ียวิà¸\81ิรุà¹\88à¸\99 $1 à¸ªà¸³à¸«à¸£à¸±à¸\9aà¹\83à¸\8aà¹\89à¸\87าà¸\99หà¸\99à¹\89าà¸\99ีà¹\89 ดู[[Special:Version|หน้ารุ่น]]',
+'versionrequiredtext' => 'à¸\81ารà¹\83à¸\8aà¹\89หà¸\99à¹\89าà¸\99ีà¹\89à¸\95à¹\89อà¸\87à¸\81ารมีà¹\80à¸\94ียวิà¸\81ิรุà¹\88à¸\99 $1  ดู[[Special:Version|หน้ารุ่น]]',
 
 'ok' => 'ตกลง',
 'retrievedfrom' => 'รับข้อมูลจาก "$1"',
@@ -478,7 +477,7 @@ $1',
 'collapsible-collapse' => 'ยุบ',
 'collapsible-expand' => 'ขยาย',
 'thisisdeleted' => 'ดูหรือกู้คืน $1 หรือไม่',
-'viewdeleted' => 'ดู $1',
+'viewdeleted' => 'ดู $1 หรือไม่',
 'restorelink' => '$1 การแก้ไขที่ถูกลบ',
 'feedlinks' => 'ฟีด',
 'feed-invalid' => 'ฟีดที่สมัครไม่ถูกชนิด',
@@ -553,13 +552,13 @@ $1',
 'fileexistserror' => 'ไม่สามารถเขียนไฟล์ "$1" ได้ เนื่องจากมีไฟล์อยู่แล้ว',
 'unexpected' => 'ผลที่ไม่คาดคิด: "$1"="$2"',
 'formerror' => 'ผิดพลาด: ไม่สามารถส่งแบบได้',
-'badarticleerror' => 'à¸\81ารà¸\81ระà¸\97ำà¸\99ีà¹\89à¹\84มà¹\88สามารà¸\96à¸\97ำà¹\84à¸\94à¹\89à¹\83à¸\99หà¸\99à¹\89าà¸\99ี้',
+'badarticleerror' => 'à¸\81ารà¸\81ระà¸\97ำà¸\99ีà¹\89à¹\84มà¹\88สามารà¸\96à¸\97ำà¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94้',
 'cannotdelete' => 'ไม่สามารถลบหน้าหรือไฟล์ "$1" 
 อาจมีผู้อื่นลบไปแล้ว',
 'cannotdelete-title' => "ไม่สามารถลบหน้า ''$1''",
 'delete-hook-aborted' => 'การลบถูกฮุกยกเลิก
 โดยไม่มีคำอธิบาย',
-'badtitle' => 'à¹\83à¸\8aà¹\89à¸\8aืà¹\88อหัวà¸\82à¹\89อนี้ไม่ได้',
+'badtitle' => 'à¹\83à¸\8aà¹\89à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87นี้ไม่ได้',
 'badtitletext' => 'ชื่อหน้าที่ขอไม่ถูกต้อง เป็นชื่อว่าง หรือชื่อข้ามภาษาหรือข้ามวิกิที่เชื่อมโยงไม่ถูกต้อง
 อาจมีอักขระที่ไม่สามารถใช้ในชื่อเรื่องได้',
 'perfcached' => 'ข้อมูลต่อไปนี้ถูกเก็บในแคช และอาจล้าสมัย มีผลการค้นหาสูงสุด $1 รายการในแคช',
@@ -609,9 +608,15 @@ $1',
 'welcomecreation-msg' => 'บัญชีของคุณถูกสร้างขึ้นแล้ว
 อย่าลืมเปลี่ยนแปลง[[Special:Preferences|การตั้งค่าใน {{SITENAME}}]] ของคุณ',
 'yourname' => 'ชื่อผู้ใช้',
+'userlogin-yourname' => 'ชื่อผู้ใช้',
+'userlogin-yourname-ph' => 'กรอกชื่อผู้ใช้',
 'yourpassword' => 'รหัสผ่าน',
+'userlogin-yourpassword' => 'รหัสผ่าน',
+'userlogin-yourpassword-ph' => 'กรอกรหัสผ่าน',
 'yourpasswordagain' => 'พิมพ์รหัสผ่านอีกครั้ง:',
 'remembermypassword' => 'จำการล็อกอินของฉันบนเบราเซอร์นี้ (นานสุด $1 วัน)',
+'userlogin-remembermypassword' => 'จำฉัน',
+'userlogin-signwithsecure' => 'ล็อกอินในเซิร์ฟเวอร์ปลอดภัย',
 'securelogin-stick-https' => 'ยังคงเชื่อมต่อกับ HTTPS หลังจากล็อกอิน',
 'yourdomainname' => 'โดเมนของคุณ:',
 'password-change-forbidden' => 'คุณไม่สามารถเปลี่ยนรหัสผ่านบนวิกินี้',
@@ -624,12 +629,16 @@ $1',
 'logout' => 'ล็อกเอาต์',
 'userlogout' => 'ล็อกเอาต์',
 'notloggedin' => 'ไม่ได้ล็อกอิน',
+'userlogin-noaccount' => 'ไม่มีบัญชีหรือ',
+'userlogin-joinproject' => 'เข้าร่วม {{SITENAME}}',
 'nologin' => 'ไม่มีบัญชีหรือ $1',
 'nologinlink' => 'สร้างบัญชี',
 'createaccount' => 'สร้างบัญชี',
 'gotaccount' => "มีบัญชีแล้วใช่ไหม '''$1'''",
 'gotaccountlink' => 'ล็อกอิน',
 'userlogin-resetlink' => 'ลืมรายละเอียดล็อกอินของคุณหรือ',
+'helplogin-url' => 'Help:การล็อกอิน',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|คำอธิบายเรื่องการล็อกอิน]]',
 'createaccountmail' => 'ใช้รหัสผ่านสุ่มชั่วคราวและส่งไปยังที่อยู่อีเมลที่ระบุด้านล่าง',
 'createaccountreason' => 'เหตุผล:',
 'badretype' => 'รหัสผ่านที่ใส่ไม่ตรงกัน',
@@ -716,11 +725,14 @@ $1',
 
 # Special:PasswordReset
 'passwordreset' => 'ตั้งรหัสผ่านใหม่',
-'passwordreset-text' => 'กรอกแบบนี้เพื่อตั้งรหัสผ่านใหม่',
+'passwordreset-text' => 'à¸\81รอà¸\81à¹\81à¸\9aà¸\9aà¸\9fอรà¹\8cมà¸\99ีà¹\89à¹\80à¸\9eืà¹\88อà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88',
 'passwordreset-legend' => 'เปลี่ยนรหัสผ่าน',
 'passwordreset-disabled' => 'การตั้งรหัสผ่านใหม่ปิดใช้งานบนวิกินี้',
+'passwordreset-emaildisabled' => 'คุณลักษณะอีเมลถูกปิดใช้งานบนวิกินี้',
 'passwordreset-username' => 'ชื่อผู้ใช้:',
 'passwordreset-domain' => 'โดเมน:',
+'passwordreset-capture' => 'ดูอีเมลที่ได้หรือไม่',
+'passwordreset-capture-help' => 'หากคุณเลือกกล่องนี้ อีเมลดังกล่าว (พร้อมรหัสผ่านชั่วคราว) จะแสดงแก่คุณ เช่นเดียวกับส่งไปยังผู้ใช้',
 'passwordreset-email' => 'ที่อยู่อีเมล:',
 'passwordreset-emailtitle' => 'รายละเอียดบัญชีบน {{SITENAME}}',
 'passwordreset-emailtext-ip' => 'ใครบางคน (ซึ่งอาจเป็นคุณ ที่ใช้เลขที่อยู่ไอพี $1) ขอตัวเตือนรายละเอียดบัญชีของคุณบน {{SITENAME}} ($4) บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:
@@ -737,9 +749,9 @@ $2
 ตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตัวเตือนรายละเอียดบัญชี หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีกต่อไป คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเก่าของคุณต่อไป',
 'passwordreset-emailelement' => 'ชื่อผู้ใช้: $1
 รหัสผ่านชั่วคราว: $2',
-'passwordreset-emailsent' => 'อีà¹\80มลà¹\81à¸\88à¹\89à¸\87à¹\80à¸\95ือà¸\99à¹\84à¸\94à¹\89ถูกส่งไปแล้ว',
-'passwordreset-emailsent-capture' => 'อีà¹\80มลà¹\81à¸\88à¹\89à¸\87à¹\80à¸\95ือà¸\99à¹\84à¸\94à¹\89ถูกส่งไปแล้ว ซึ่งแสดงด้านล่าง',
-'passwordreset-emailerror-capture' => 'อีà¹\80มลà¹\81à¸\88à¹\89à¸\87à¹\80à¸\95ือà¸\99ถูกสร้างขึ้นแล้ว ซึ่งแสดงข้างล่าง แต่การส่งไปยังผู้ใช้ล้มเหลว: $1',
+'passwordreset-emailsent' => 'อีà¹\80มลà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88ถูกส่งไปแล้ว',
+'passwordreset-emailsent-capture' => 'อีà¹\80มลà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88ถูกส่งไปแล้ว ซึ่งแสดงด้านล่าง',
+'passwordreset-emailerror-capture' => 'อีà¹\80มลà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88ถูกสร้างขึ้นแล้ว ซึ่งแสดงข้างล่าง แต่การส่งไปยังผู้ใช้ล้มเหลว: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'เปลี่ยนที่อยู่อีเมล',
@@ -760,18 +772,18 @@ $2
 'italic_tip' => 'ทำตัวเอน',
 'link_sample' => 'ลิงก์เชื่อมโยง',
 'link_tip' => 'ลิงก์ภายในเว็บ',
-'extlink_sample' => 'http://www.example.com à¸\8aืà¹\88อà¸\84ำอà¸\98ิà¸\9aายลิงก์',
+'extlink_sample' => 'http://www.example.com à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¸\82อà¸\87ลิงก์',
 'extlink_tip' => 'ลิงก์ภายนอก (อย่าลืมใส่ http:// นำหน้าเสมอ)',
-'headline_sample' => 'หัวà¸\82à¹\89อ',
-'headline_tip' => 'หัวà¸\82à¹\89อ',
+'headline_sample' => 'à¸\82à¹\89อà¸\84วามà¸\9eาà¸\94หัว',
+'headline_tip' => 'à¸\9eาà¸\94หัวระà¸\94ัà¸\9a 2',
 'nowiki_sample' => 'แทรกข้อความที่ไม่จัดรูปแบบที่นี่',
 'nowiki_tip' => 'ไม่สนใจการจัดรูปแบบวิกิ',
 'image_sample' => 'ตัวอย่าง.jpg',
 'image_tip' => 'ใส่ไฟล์',
 'media_sample' => 'ตัวอย่าง.ogg',
-'media_tip' => 'เชื่อมโยงไฟล์สื่อ',
+'media_tip' => 'เชื่อมโยงไฟล์',
 'sig_tip' => 'ลายเซ็นของคุณพร้อมตราเวลา',
-'hr_tip' => 'เส้นนอน',
+'hr_tip' => 'เส้นนอน (โปรดใช้อย่างจำกัด)',
 
 # Edit pages
 'summary' => 'คำอธิบายโดยย่อ:',
@@ -789,7 +801,7 @@ $2
 'missingcommenttext' => 'กรุณาใส่ความเห็นด้านล่าง',
 'missingcommentheader' => "'''ประกาศเตือน:''' คุณยังไม่ได้ใส่หัวข้อ/จ่าหัวสำหรับความเห็นนี้ ถ้าคุณกด \"{{int:savearticle}}\" อีกครั้ง การแก้ไขของคุณจะถูกบันทึกโดยไม่มีหัวข้อ",
 'summary-preview' => 'ตัวอย่างคำอธิบายการแก้ไข:',
-'subject-preview' => 'ตัวอย่างหัวข้อ:',
+'subject-preview' => 'ตัวอย่างหัวข้อ/พาดหัว:',
 'blockedtitle' => 'ผู้ใช้ถูกบล็อกอยู่',
 'blockedtext' => "'''ชื่อผู้ใช้หรือเลขที่อยู่ไอพีของคุณถูกบล็อก'''
 
@@ -905,25 +917,25 @@ $2
 ถ้าคุณไม่ต้องการให้งานของคุณถูกแก้ไข หรือไม่ต้องการให้งานเผยแพร่ตามที่กล่าวไว้ อย่าส่งข้อความของคุณเข้ามาที่นี่<br />
 นอกจากนี้คุณแน่ใจว่าข้อความที่ส่งเข้ามาคุณได้เขียนด้วยตัวเอง ไม่ได้คัดลอก ทำซ้ำส่วนหนึ่งส่วนใดหรือทั้งหมดจากแหล่งอื่น (ดูรายละเอียดที่ $1)
 '''อย่าส่งงานที่มีลิขสิทธิ์เข้ามาก่อนได้รับอนุญาตจากเจ้าของ!'''",
-'longpageerror' => "'''ผิดพลาด: ข้อความที่คุณส่งเข้ามามีขนาด $1 กิโลไบต์
-à¸\8bึà¹\88à¸\87à¹\80à¸\81ิà¸\99à¸\81วà¹\88าà¸\82à¸\99าà¸\94à¸\97ีà¹\88กำหนดไว้ที่ $2 กิโลไบต์ จึงไม่สามารถบันทึกได้'''",
-'readonlywarning' => "'''à¸\84ำà¹\80à¸\95ือà¸\99: à¸\90าà¸\99à¸\82à¹\89อมูลà¸\96ูà¸\81ลà¹\87อà¸\81à¹\80à¸\9eืà¹\88อà¸\9aำรุà¸\87รัà¸\81ษา à¸\89ะà¸\99ัà¹\89à¸\99à¸\84ุà¸\93à¸\88ึà¸\87à¹\84มà¹\88สามารà¸\96à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\82อà¸\87à¸\84ุà¸\93à¹\84à¸\94à¹\89à¹\83à¸\99à¸\82à¸\93ะà¸\99ีà¹\89'''
+'longpageerror' => "'''à¸\82à¹\89อà¸\9cิà¸\94à¸\9eลาà¸\94: à¸\82à¹\89อà¸\84วามà¸\97ีà¹\88à¸\84ุà¸\93สà¹\88à¸\87à¹\80à¸\82à¹\89ามามีà¸\82à¸\99าà¸\94 $1 à¸\81ิà¹\82ลà¹\84à¸\9aà¸\95à¹\8c
+à¸\8bึà¹\88à¸\87à¹\80à¸\81ิà¸\99à¸\81วà¹\88าà¸\82à¸\99าà¸\94สูà¸\87สุà¸\94à¸\8bึà¹\88à¸\87กำหนดไว้ที่ $2 กิโลไบต์ จึงไม่สามารถบันทึกได้'''",
+'readonlywarning' => "'''คำเตือน: ฐานข้อมูลถูกล็อกเพื่อบำรุงรักษา คุณจึงไม่สามารถบันทึกการเปลี่ยนแปลงของคุณได้ในขณะนี้'''
 คุณอาจต้องการคัดลอกและวางข้อความของคุณในไฟล์ข้อความ และบันทึกไว้ใช้ภายหลัง
 
 ผู้ดูแลระบบที่ล็อกฐานข้อมูลได้ให้คำอธิบายดังนี้: $1",
 'protectedpagewarning' => "'''คำเตือน: หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น'''
-ปูมล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง:",
+รายà¸\81ารà¸\9bูมลà¹\88าสุà¸\94à¸\96ูà¸\81à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88อà¸\81ารอà¹\89าà¸\87อิà¸\87:",
 'semiprotectedpagewarning' => "'''หมายเหตุ:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้น
 รายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
 'cascadeprotectedwarning' => "'''คำเตือน:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น เนื่องจากหน้านี้สืบทอดการล็อกมาจาก{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้:",
-'titleprotectedwarning' => "'''คำเตือน: หน้านี้ได้รับการป้องกันไว้ให้สร้างได้เฉพาะโดย[[Special:ListGroupRights|ผู้ใช้ที่ได้รับสิทธิ]]เท่านั้น'''
-รายà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ลà¹\88าสุà¸\94à¹\84à¸\94à¹\89à¸\96ูà¸\81à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¸\99ีà¹\89เพื่อการอ้างอิง",
+'titleprotectedwarning' => "'''คำเตือน: หน้านี้ได้รับการป้องกัน สร้างได้เฉพาะผู้ใช้ที่มี[[Special:ListGroupRights|สิทธิจำเพาะ]]เท่านั้น'''
+รายà¸\81ารà¸\9bูมลà¹\88าสุà¸\94à¸\96ูà¸\81à¹\81สà¸\94à¸\87à¹\84วà¹\89à¸\94à¹\89าà¸\99ลà¹\88าà¸\87เพื่อการอ้างอิง",
 'templatesused' => '{{PLURAL:$1|แม่แบบ}}ที่ใช้ในหน้านี้:',
 'templatesusedpreview' => '{{PLURAL:$1|แม่แบบ}}ที่ใช้ในการแสดงตัวอย่าง:',
 'templatesusedsection' => '{{PLURAL:$1|แม่แบบ}}ที่ใช้ในส่วนนี้:',
-'template-protected' => '(ล็อก)',
-'template-semiprotected' => '(กึ่งล็อก)',
-'hiddencategories' => 'หน้านี้มี {{PLURAL:$1|1 หมวดหมู่ที่ซ่อนอยู่|$1 หมวดหมู่ที่ซ่อนอยู่}} :',
+'template-protected' => '(à¸\96ูà¸\81ลà¹\87อà¸\81)',
+'template-semiprotected' => '(à¸\96ูà¸\81à¸\81ึà¹\88à¸\87ลà¹\87อà¸\81)',
+'hiddencategories' => 'หน้านี้มี {{PLURAL:$1|1 หมวดหมู่ที่ซ่อนอยู่|$1 หมวดหมู่ที่ซ่อนอยู่}}:',
 'edittools' => '<!-- ข้อความนี้จะแสดงผลใต้ฟอร์มสำหรับการแก้ไขและอัปโหลด -->',
 'nocreatetext' => '{{SITENAME}} จำกัดการสร้างหน้าใหม่
 คุณสามารถย้อนกลับไปแก้ไขหน้าที่มีอยู่เดิม หรือ[[Special:UserLogin|ล็อกอินหรือสร้างบัญชีผู้ใช้]]',
@@ -949,6 +961,10 @@ $2
 'edit-already-exists' => 'ไม่สามารถสร้างหน้าใหม่ได้
 เพราะมีหน้านี้แล้ว',
 'defaultmessagetext' => 'ข้อความสารโดยปริยาย',
+'invalid-content-data' => 'ข้อมูลเนื้อหาไม่ถูกต้อง',
+'content-not-allowed-here' => 'เนื้อหา "$1" ไม่อนุญาตในหน้า [[$2]]',
+'editwarning-warning' => 'การออกจากหน้านี้อาจทำให้ความเปลี่ยนแปลงที่คุณกระทำสูญหาย
+ถ้าคุณล็อกอินแล้ว คุณสามารถปิดคำเตือนนี้ได้ที่ส่วน "การแก้ไข" ในการตั้งค่าของคุณ',
 
 # Content models
 'content-model-wikitext' => 'ข้อความวิกิ',
@@ -1223,6 +1239,7 @@ $1",
 'powersearch-togglenone' => 'ไม่เลือก',
 'search-external' => 'ค้นหาภายนอก',
 'searchdisabled' => 'การค้นหา {{SITENAME}} ปิดใช้งาน คุณสามารถค้นหาผ่านกูเกิลหรือเซิร์ชเอนจินอื่นในเวลาไม่นาน โปรดทราบว่าดัชนีเนื้อหาของ {{SITENAME}} บนเซิร์ชเอนจินอาจเป็นข้อมูลเก่า',
+'search-error' => 'เกิดข้อผิดพลาดขณะกำลังค้นหา: $1',
 
 # Preferences page
 'preferences' => 'ตั้งค่าส่วนตัว',
@@ -1311,7 +1328,7 @@ $1",
 'yourvariant' => 'อักษรต่างรูปของเนื้อหา:',
 'yournick' => 'ลายเซ็น:',
 'prefs-help-signature' => 'ความเห็นในหน้าพูดคุยควรลงลายเซ็นด้วย "<nowiki>~~~~</nowiki>" ซึ่งจะถูกแปลงเป็นลายเซ็นของคุณและตราเวลา',
-'badsig' => 'ลายà¹\80à¸\8bà¹\87à¸\99à¸\94ิà¸\9aà¹\84มà¹\88สมà¹\80หà¸\95ุสมà¸\9cล à¸\95รวà¸\88สอà¸\9aà¸\9bà¹\89ายระà¸\9aุเอชทีเอ็มแอล',
+'badsig' => 'ลายà¹\80à¸\8bà¹\87à¸\99à¸\94ิà¸\9aà¹\84มà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87 à¹\83หà¹\89à¸\95รวà¸\88สอà¸\9aà¹\81à¸\97à¹\87à¸\81เอชทีเอ็มแอล',
 'badsiglength' => 'ลายเซ็นของคุณยาวเกินไป ต้องยาวไม่เกิน $1 ตัวอักษร',
 'yourgender' => 'เพศ:',
 'gender-unknown' => 'ไม่ระบุ',
@@ -1385,7 +1402,7 @@ $1",
 'grouppage-user' => '{{ns:project}}:ผู้ใช้',
 'grouppage-autoconfirmed' => '{{ns:project}}:ผู้ใช้ทั่วไป',
 'grouppage-bot' => '{{ns:project}}:บอต',
-'grouppage-sysop' => '{{ns:project}}:ผู้ดูแล',
+'grouppage-sysop' => '{{ns:project}}:ผู้ดูแลระบบ',
 'grouppage-bureaucrat' => '{{ns:project}}:ผู้ดูแลสิทธิแต่งตั้ง',
 'grouppage-suppress' => '{{ns:project}}:ผู้ดูแลประวัติ',
 
@@ -1457,7 +1474,7 @@ $1",
 
 # User rights log
 'rightslog' => 'ปูมสิทธิผู้ใช้',
-'rightslogtext' => 'สà¹\88วà¸\99à¸\99ีà¹\89คือปูมการเปลี่ยนแปลงสิทธิผู้ใช้',
+'rightslogtext' => 'à¸\99ีà¹\88คือปูมการเปลี่ยนแปลงสิทธิผู้ใช้',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'อ่านหน้านี้',
@@ -1686,10 +1703,17 @@ $1',
 'backend-fail-closetemp' => 'ไม่สามารถปิดไฟล์ชั่วคราวได้',
 'backend-fail-read' => 'ไม่สามารถอ่านไฟล์ "$1" ได้',
 'backend-fail-create' => 'ไม่สามารถเขียนไฟล์ "$1" ได้',
+'backend-fail-maxsize' => 'ไม่สามารถเขียนไฟล์ "$1" ได้ เพราะมีขนาดใหญ่เกิน $2 ไบต์',
+
+# Lock manager
+'lockmanager-notlocked' => 'ไม่สามารถปลดล็อก "$1" เพราะยังไม่ถูกล็อก',
 
 # ZipDirectoryReader
-'zip-unsupported' => 'ไฟล์ดังกล่าวเป็นไฟล์ ZIP ซึ่งใช้คุณสมบัติ ZIP ที่ไม่ได้รับการสนับสนุนโดย MediaWiki.
-ไฟล์ดังกล่าวนี้ไม่สามารถตรวจสอบเกี่ยวกับการรักษาความปลอดภัยได้อย่างเหมาะสม.',
+'zip-wrong-format' => 'ไฟล์ที่ระบุมิใช่ไฟล์ซิป',
+'zip-bad' => 'ไฟล์วิบัติ หรือมิฉะนั้นก็เป็นไฟล์ซิปที่อ่านไม่ได้ 
+จึงไม่สามารถตรวจสอบความปลอดภัยได้อย่างเหมาะสม',
+'zip-unsupported' => 'ไฟล์ดังกล่าวเป็นไฟล์ซิป ซึ่งใช้คุณสมบัติในการซิปที่ไม่ได้รับการสนับสนุนจากมีเดียวิกิ
+ทำให้ไม่สามารถตรวจสอบความปลอดภัยได้อย่างเหมาะสม',
 
 # Special:UploadStash
 'uploadstash' => 'อัปโหลดไฟล์ซ่อน',
@@ -1720,8 +1744,8 @@ $1',
 'img-auth-bad-query-string' => 'ที่อยู่ URL ดังกล่าวมีชุดข้อความสตริงก์ที่ร้องขอไม่ถูกต้อง',
 
 # HTTP errors
-'http-invalid-url' => 'URL ไม่ถูกต้อง: $1',
-'http-invalid-scheme' => 'ไม่สนับสนุน URL ที่มีรูปแบบ "$1"',
+'http-invalid-url' => 'ยูอาร์แอลไม่ถูกต้อง: $1',
+'http-invalid-scheme' => 'ไม่สนับสนุนยูอาร์แอลที่มีรูปแบบ "$1"',
 'http-request-error' => 'คำขอข้อมูล HTTP ผิดพลาดโดยไม่ทราบสาเหตุ',
 'http-read-error' => 'การอ่านข้อมูล HTTP ผิดพลาด',
 'http-timed-out' => 'คำขอข้อมูล HTTP เกินเวลาที่กำหนด',
@@ -1730,7 +1754,7 @@ $1',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'ไม่สามารถติดต่อยูอาร์แอลได้',
-'upload-curl-error6-text' => 'ยูอารà¹\8cà¹\81อลà¸\97ีà¹\88à¹\83สà¹\88à¸\84à¹\88ามาà¹\84มà¹\88สามารà¸\96à¸\95ิà¸\94à¸\95à¹\88อà¹\84à¸\94à¹\89 à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aอีà¸\81à¸\84รัà¹\89à¸\87วà¹\88ายูอารà¹\8cà¹\81อลà¸\99ัà¹\89à¸\99à¸\96ูà¸\81à¸\95à¹\89อà¸\87 à¹\81ละà¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cà¸\99ัà¹\89à¸\99ยัà¸\87à¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\84à¸\94à¹\89à¸\95ามà¸\9bà¸\81à¸\95ิ',
+'upload-curl-error6-text' => 'à¹\84มà¹\88สามารà¸\96à¹\80à¸\82à¹\89าà¸\96ึà¸\87ยูอารà¹\8cà¹\81อลà¸\97ีà¹\88à¹\83สà¹\88มาà¹\84à¸\94à¹\89 à¸\81รุà¸\93าà¸\95รวà¸\88สอà¸\9aอีà¸\81à¸\84รัà¹\89à¸\87วà¹\88ายูอารà¹\8cà¹\81อลà¸\99ัà¹\89à¸\99à¸\96ูà¸\81à¸\95à¹\89อà¸\87 à¹\81ละà¹\80วà¹\87à¸\9aà¹\84à¸\8bà¸\95à¹\8cà¸\99ัà¹\89à¸\99ยัà¸\87à¹\83à¸\8aà¹\89à¸\87าà¸\99à¹\84à¸\94à¹\89',
 'upload-curl-error28' => 'เวลาอัปโหลดถูกตัด',
 'upload-curl-error28-text' => 'เว็บไซต์นี้ใช้เวลานานเกินไปในการเชื่อมต่อ กรุณาตรวจสอบว่าเว็บนี้ยังใช้งานได้ตามปกติ หรืออาจจะรอสักครู่แล้วลองอัปโหลดใหม่',
 
@@ -1927,6 +1951,8 @@ $1',
 'wantedpages' => 'หน้าที่ต้องการ',
 'wantedpages-badtitle' => 'ชื่อเรื่องไม่สมเหตุสมผลในเซตผลลัพธ์: $1',
 'wantedfiles' => 'ไฟล์ที่ต้องการ',
+'wantedfiletext-cat' => 'ไฟล์ต่อไปนี้มีการเรียกใช้แต่ไม่มีอยู่ ไฟล์จากคลังเก็บภาษาอื่นอาจแสดงรายการแม้จะมีอยู่ ผลบวกลวงใด ๆ จะถูก<del>ขีดฆ่า</del> ยิ่งไปกว่านั้น หน้าที่ฝังตัวไฟล์ที่ไม่มีอยู่จะแสดงรายการใน [[:$1]]',
+'wantedfiletext-nocat' => 'ไฟล์ต่อไปนี้มีการเรียกใช้แต่ไม่มีอยู่ ไฟล์จากคลังเก็บภาษาอื่นอาจแสดงรายการแม้จะมีอยู่ ผลบวกลวงใด ๆ จะถูก<del>ขีดฆ่า</del>',
 'wantedtemplates' => 'แม่แบบที่ต้องการ',
 'mostlinked' => 'หน้าที่มีการเชื่อมโยงหามากที่สุด',
 'mostlinkedcategories' => 'หมวดหมู่ที่มีการเชื่อมโยงหามากที่สุด',
@@ -2007,6 +2033,9 @@ $1',
 'allpages-bad-ns' => '{{SITENAME}} ไม่มีเนมสเปซ "$1"',
 'allpages-hide-redirects' => 'ซ่อนการเปลี่ยนทาง',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'ดูล่าสุด',
+
 # Special:Categories
 'categories' => 'หมวดหมู่',
 'categoriespagetext' => '{{PLURAL:$1|หมวดหมู่นี้|หมวดหมู่ต่อไปนี้}}มีหน้าหรือสื่อต่าง ๆ
@@ -2131,7 +2160,7 @@ $1',
 
 'enotif_mailer' => 'แจ้งการแก้ไขจาก {{SITENAME}}',
 'enotif_reset' => 'ทำเครื่องหมายว่าชมทุกหน้าแล้ว',
-'enotif_impersonal_salutation' => 'ผู้ใช้งาน {{SITENAME}}',
+'enotif_impersonal_salutation' => 'ผู้ใช้{{SITENAME}}',
 'enotif_subject_deleted' => 'หน้า $1 บน {{SITENAME}} ถูกลบโดย {{gender:$2|$2}}',
 'enotif_subject_created' => 'หน้า $1 บน {{SITENAME}} ถูกสร้างโดย {{gender:$2|$2}}',
 'enotif_subject_moved' => 'หน้า $1 บน {{SITENAME}} ถูกย้ายโดย {{gender:$2|$2}}',
@@ -2324,7 +2353,7 @@ $UNWATCHURL
 'undeletedrevisions' => '$1 รุ่นการแก้ไขถูกกู้คืน',
 'undeletedrevisions-files' => '$1 รุ่น และ $2 ไฟล์ถูกกู้คืน',
 'undeletedfiles' => '$1 ไฟล์ถูกกู้คืน',
-'cannotundelete' => 'กู้คืนล้มเหลว:
+'cannotundelete' => 'à¸\81ารà¸\81ูà¹\89à¸\84ืà¸\99ลà¹\89มà¹\80หลว:
 $1',
 'undeletedpage' => "'''$1 ถูกกู้คืน'''
 
@@ -2433,15 +2462,15 @@ $1',
 'ipboptions' => '2 ชั่วโมง:2 hours,1 วัน:1 day,3 วัน:3 days,1 สัปดาห์:1 week,2 สัปดาห์:2 weeks,1 เดือน:1 month,3 เดือน:3 months,6 เดือน:6 months,1 ปี:1 year,ไม่มีกำหนด:infinite',
 'ipbotheroption' => 'เลือกเวลา',
 'ipbotherreason' => 'เหตุผลอื่น',
-'ipbhidename' => 'à¸\8bà¹\88อà¸\99à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\88าà¸\81à¸\9bูมà¸\81ารà¸\9aลà¹\87อà¸\81 à¹\81ละรายà¸\81ารà¸\9cูà¹\89à¸\97ีà¹\88à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81',
+'ipbhidename' => 'à¸\8bà¹\88อà¸\99à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\88าà¸\81à¸\9bูมà¹\81ละรายà¸\81ารà¸\95à¹\88าà¸\87 à¹\86',
 'ipbwatchuser' => 'เฝ้าดูหน้าผู้ใช้และหน้าคุยกับผู้ใช้ของผู้ใช้รายนี้',
 'ipb-disableusertalk' => 'ป้องกันไม่ให้ผู้ใช้นี้แก้ไขหน้าคุยกับผู้ใช้ของตัวเองขณะถูกบล็อก',
 'ipb-change-block' => 'บล็อกผู้ใช้อีกครั้งด้วยการตั้งค่าเหล่านี้',
 'ipb-confirm' => 'ยืนยันการบล็อก',
 'badipaddress' => 'เลขที่อยู่ไอพีไม่ถูกต้อง',
-'blockipsuccesssub' => 'à¸\9aลà¹\87อà¸\81à¹\80รียà¸\9aรà¹\89อย',
+'blockipsuccesssub' => 'à¸\9aลà¹\87อà¸\81สำà¹\80รà¹\87à¸\88',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ได้ถูกบล็อกแล้ว<br />
-ดู[[Special:BlockList|รายการบล็อก]]เพื่อทบทวนการบล็อกดังกล่าว',
+ดู[[Special:BlockList|รายการบล็อก]]เพื่อทบทวนการบล็อก',
 'ipb-blockingself' => 'คุณกำลังบล็อกตัวเอง! แน่ใจแล้วหรือว่าต้องการทำอย่างนั้น',
 'ipb-confirmhideuser' => 'คุณกำลังบล็อกผู้ใช้โดยเป็นผู้ใช้ "ซ่อนผู้ใช้" ซึ่งจะระงับชื่อผู้ใช้ในรายการและหน่วยปูมทั้งหมด คุณแน่ใจหรือว่าต้องการดำเนินการเช่นนั้น',
 'ipb-edit-dropdown' => 'แก้ไขสาเหตุการบล็อก',
@@ -2498,31 +2527,33 @@ $1',
 ดู[[Special:BlockList|รายการบล็อกไอพี]]สำหรับการบล็อกและการระงับในปัจจุบัน',
 'unblocklogentry' => 'เลิกบล็อก $1',
 'block-log-flags-anononly' => 'ผู้ใช้นิรนามเท่านั้น',
-'block-log-flags-nocreate' => 'หà¹\89ามสรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aีà¸\9cูà¹\89à¹\83à¸\8aà¹\89',
-'block-log-flags-noautoblock' => 'ยà¸\81à¹\80ลิà¸\81การบล็อกอัตโนมัติ',
-'block-log-flags-noemail' => 'à¸\9aลà¹\87อà¸\81à¸\81ารสà¹\88à¸\87อีเมล',
-'block-log-flags-nousertalk' => 'à¹\84มà¹\88สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าอภิà¸\9bรายของตนเอง',
+'block-log-flags-nocreate' => 'à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99à¸\81ารสรà¹\89าà¸\87à¸\9aัà¸\8dà¸\8aี',
+'block-log-flags-noautoblock' => 'à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99การบล็อกอัตโนมัติ',
+'block-log-flags-noemail' => 'à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99อีเมล',
+'block-log-flags-nousertalk' => 'à¹\84มà¹\88สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยของตนเอง',
 'block-log-flags-angry-autoblock' => 'การบล็อกอัตโนมัติขั้นสูงเปิดใช้งาน',
 'block-log-flags-hiddenname' => 'ชื่อผู้ใช้ถูกซ่อน',
-'range_block_disabled' => 'ยà¸\81à¹\80ลิà¸\81à¸\81ารà¸\9aลà¹\87อà¸\81à¸\8aà¹\88วà¸\87à¹\84อà¸\9eีà¸\82อà¸\87à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9a',
-'ipb_expiry_invalid' => 'à¸\84à¹\88าวัà¸\99หมà¸\94อายุà¹\84มà¹\88à¸\96ูà¸\81à¸\95à¹\89อà¸\87',
-'ipb_expiry_temp' => 'à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¸\88ะà¸\8bà¹\88อà¸\99à¹\82à¸\94ยถาวร',
-'ipb_hide_invalid' => 'à¹\84มà¹\88สามารà¸\96ยัà¸\9aยัà¹\89à¸\87à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¹\80à¸\9eราะอาà¸\88มีการแก้ไขมากเกินไป',
+'range_block_disabled' => 'à¸\81ารà¸\9aลà¹\87อà¸\81à¸\8aà¹\88วà¸\87à¹\84อà¸\9eีà¸\82อà¸\87à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aà¸\96ูà¸\81à¸\9bิà¸\94à¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99',
+'ipb_expiry_invalid' => 'วันหมดอายุไม่ถูกต้อง',
+'ipb_expiry_temp' => 'à¸\81ารà¸\9aลà¹\87อà¸\81à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¸\8bà¹\88อà¸\99à¸\95à¹\89อà¸\87à¹\80à¸\9bà¹\87à¸\99à¸\81ารà¸\9aลà¹\87อà¸\81ถาวร',
+'ipb_hide_invalid' => 'à¹\84มà¹\88สามารà¸\96ยัà¸\9aยัà¹\89à¸\87à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89à¹\84à¸\94à¹\89 à¸­à¸²à¸\88à¹\80à¸\9eราะมีการแก้ไขมากเกินไป',
 'ipb_already_blocked' => '"$1" ถูกบล็อกแล้วก่อนหน้านี้',
-'ipb-needreblock' => '$1 à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¹\81ลà¹\89ว à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82หรือไม่',
+'ipb-needreblock' => '$1 à¸\96ูà¸\81à¸\9aลà¹\87อà¸\81à¹\81ลà¹\89ว à¸\84ุà¸\93à¸\95à¹\89อà¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าหรือไม่',
 'ipb-otherblocks-header' => '{{PLURAL:$1|การบล็อก}}อื่น ๆ',
-'unblock-hideuser' => 'คุณไม่สามารถยกเลิกการบล็อคผู้ใช้งานรายนี้ได้, เนื่องจากชื่อผู้ใช้ของผู้ใช้งานถูกซ่อนอยู่',
-'ipb_cant_unblock' => 'ปัญหา: หมายเลขบล็อก $1 ไม่พบ อาจเกิดจากได้ถูกยกเลิกการบล็อกแล้ว',
-'ipb_blocked_as_range' => 'มีข้อผิดพลาด: เลขที่อยู่ไอพี $1 ไม่ได้ถูกระงับโดยตรงและไม่สามารถยกเลิกการระงับโดยตรงได้.  อย่างไรก็ตาม ไอพีนี้ถูกระงับในฐานะที่เป็นส่วนหนึ่งของเลขที่อยู่ไอพีในพิสัย $2 ซึ่งสามารถยกเลิกการระงับได้',
+'unblock-hideuser' => 'คุณไม่สามารถยกเลิกการบล็อกผู้ใช้งานรายนี้ได้ เพราะชื่อผู้ใช้ถูกซ่อนอยู่',
+'ipb_cant_unblock' => 'ข้อผิดพลาด: ไม่พบหมายเลขบล็อก $1 การบล็อกดังกล่าวอาจถูกปลดบล็อกแล้ว',
+'ipb_blocked_as_range' => 'ข้อผิดพลาด: เลขที่อยู่ไอพี $1 มิได้ถูกบล็อกโดยตรงและไม่สามารถปลดบล็อกได้
+อย่างไรก็ตาม ไอพีนี้ถูกระงับในฐานะที่เป็นส่วนหนึ่งของเลขที่อยู่ไอพีในพิสัย $2 ซึ่งสามารถปลดบล็อกได้',
 'ip_range_invalid' => 'พิสัยไอพีไม่ถูกต้อง',
-'ip_range_toolarge' => 'à¸\82à¸\99าà¸\94à¸\9aลà¹\87อà¸\81มีà¸\82à¸\99าà¸\94à¹\83หà¸\8dà¹\88à¸\81วà¹\88า / $1 จะไม่ได้รับอนุญาต',
+'ip_range_toolarge' => 'à¸\9eิสัยà¸\9aลà¹\87อà¸\81à¸\97ีà¹\88มีà¸\82à¸\99าà¸\94à¹\83หà¸\8dà¹\88à¸\81วà¹\88า /$1 จะไม่ได้รับอนุญาต',
 'blockme' => 'บล็อกฉัน',
 'proxyblocker' => 'บล็อกพร็อกซี',
-'proxyblocker-disabled' => 'ฟังก์ชั่นนี้ไม่สามารถใช้ได้',
-'proxyblockreason' => 'เลขที่อยู่ไอพีของคุณถูกบล็อกเนื่องจากเป็นพร็อกซีเปิด กรุณาติดต่อผู้ให้บริการอินเทอร์เน็ตที่คุณใช้งานอยู่เกี่ยวกับปัญหานี้',
-'proxyblocksuccess' => 'บล็อกสำเร็จ',
-'sorbsreason' => 'เลขที่อยู่ไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน DNSBL ที่ถูกใช้งานในเว็บไซต์',
-'sorbs_create_account_reason' => 'เลขที่อยู่ไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน DNSBL ที่ถูกใช้งานในเว็บไซต์ ดังนั้นคุณไม่สามารถสร้างชื่อบัญชีผู้ใช้ได้',
+'proxyblocker-disabled' => 'ฟังก์ชันนี้ถูกปิดใช้งาน',
+'proxyblockreason' => 'เลขที่อยู่ไอพีของคุณถูกบล็อกเนื่องจากเป็นพร็อกซีเปิด กรุณาติดต่อผู้ให้บริการอินเทอร์เน็ตหรือฝ่ายสนับสนุนเทคนิคขององค์การคุณ และแจ้งให้พวกเขาทราบถึงปัญหาความปลอดภัยร้ายแรงนี้',
+'proxyblocksuccess' => 'สำเร็จ',
+'sorbsreason' => 'เลขที่อยู่ไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน DNSBL ที่ {{SITENAME}} ใช้',
+'sorbs_create_account_reason' => 'เลขที่อยู่ไอพีของคุณอยู่ในพร็อกซีเปิดในส่วน DNSBL ที่ {{SITENAME}} ใช้ 
+คุณไม่สามารถสร้างบัญชีได้',
 'cant-block-while-blocked' => 'คุณไม่สามารถบล็อกผู้ใช้อื่นในขณะที่คุณกำลังถูกบล็อก',
 'cant-see-hidden-user' => 'ผู้ใช้ที่คุณกำลังพยายามระงับนั้นได้ถูกระงับหรือซ่อนเดิมอยู่แล้ว เนื่องจากคุณไม่มีสิทธิซ่อนผู้ใช้ คุณจึงไม่สามารถดูหรือแก้ไขการระงับผู้ใช้ได้',
 'ipbblocked' => 'คุณไม่สามารถบล็อกหรือปลดบล็อกผู้ใช้คนอื่น เนื่องจากคุณกำลังถูกบล็อก',
@@ -2585,16 +2616,16 @@ $1',
 'movenotallowedfile' => 'คุณไม่มีสิทธิย้ายไฟล์',
 'cant-move-user-page' => 'คุณไม่มีสิทธิย้ายหน้าผู้ใช้ (แยกจากหน้าย่อย)',
 'cant-move-to-user-page' => 'คุณไม่มีสิทธิย้ายหน้าใด ๆ ไปเป็นหน้าผู้ใช้ (ยกเว้นหน้าย่อยของผู้ใช้)',
-'newtitle' => 'à¸\8aืà¹\88อà¹\83หมà¹\88',
-'move-watch' => 'à¹\80à¸\9dà¹\89าà¸\94ูหà¸\99à¹\89าà¸\99ีà¹\89',
+'newtitle' => 'à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\83หมà¹\88:',
+'move-watch' => 'à¹\80à¸\9dà¹\89าà¸\94ูหà¸\99à¹\89าà¸\95à¹\89à¸\99à¸\97าà¸\87à¹\81ละหà¸\99à¹\89าà¸\9bลายà¸\97าà¸\87',
 'movepagebtn' => 'เปลี่ยนชื่อ',
 'pagemovedsub' => 'เปลี่ยนชื่อสำเร็จ',
 'movepage-moved' => '\'\'\'"$1" ถูกเปลี่ยนชื่อเป็น "$2"\'\'\'',
 'movepage-moved-redirect' => 'หน้าเปลี่ยนทางถูกสร้างขึ้น',
 'movepage-moved-noredirect' => 'การสร้างหน้าเปลี่ยนทางถูกระงับ',
 'articleexists' => 'หน้าที่ต้องการมีอยู่แล้ว หรือชื่อที่เลือกไม่ถูกต้อง กรุณาเลือกชื่อใหม่',
-'cantmove-titleprotected' => 'à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¸\99ีà¹\89à¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\8aืà¹\88อà¹\83หมà¹\88à¸\99ีà¹\89à¹\84à¸\94à¹\89รัà¸\9aà¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99à¹\84มà¹\88à¹\83หà¹\89สรà¹\89าà¸\87à¹\83หมà¹\88',
-'talkexists' => "'''à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าสำà¹\80รà¹\87à¸\88 à¹\81à¸\95à¹\88หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\84มà¹\88สามารà¸\96à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\83à¸\99à¸\8aืà¹\88อà¹\83หมà¹\88à¹\81ลà¹\89ว à¹\82à¸\9bรà¸\94รวมà¹\80อà¸\87à¸\94à¹\89วยมือ'''",
+'cantmove-titleprotected' => 'à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¸\99ีà¹\89à¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\83หมà¹\88à¸\96ูà¸\81à¸\9bà¹\89อà¸\87à¸\81ัà¸\99มิà¹\83หà¹\89สรà¹\89าà¸\87',
+'talkexists' => "'''à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าสำà¹\80รà¹\87à¸\88 à¹\81à¸\95à¹\88หà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\84มà¹\88สามารà¸\96à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¹\84à¸\94à¹\89 à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81มีหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¹\83à¸\99à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\83หมà¹\88à¹\81ลà¹\89ว à¹\82à¸\9bรà¸\94รวมหà¸\99à¹\89าà¹\80หลà¹\88าà¸\99ัà¹\89à¸\99à¹\80อà¸\87'''",
 'movedto' => 'เปลี่ยนชื่อเป็น',
 'movetalk' => 'เปลี่ยนชื่อหน้าพูดคุยพร้อมกัน',
 'move-subpages' => 'ย้ายหน้าย่อยทั้งหมด (มากถึง $1 หน้า)',
@@ -2604,7 +2635,7 @@ $1',
 'movepage-page-unmoved' => 'หน้า $1 ไม่สามารถเปลี่ยนชื่อเป็น $2 ได้',
 'movepage-max-pages' => 'หน้า $1 หน้าถูกย้ายไป ซึ่งมากสุดแล้ว และจะไม่มีหน้าใดย้ายอัตโนมัติเพิ่ม',
 'movelogpage' => 'ปูมการเปลี่ยนชื่อ',
-'movelogpagetext' => 'à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¸\97ุà¸\81หà¸\99à¹\89า',
+'movelogpagetext' => 'à¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9bà¹\87à¸\99รายà¸\81ารà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อà¸\97ัà¹\89à¸\87หมà¸\94',
 'movesubpage' => '{{PLURAL:$1|หน้าย่อย|หน้าย่อย}}',
 'movesubpagetext' => 'หน้านี้มีหน้าย่อย $1 หน้า ดังด้านล่าง',
 'movenosubpage' => 'หน้านี้ไม่มีหน้าย่อย',
@@ -2622,7 +2653,7 @@ $1',
 'immobile-target-namespace-iw' => 'ไม่สามารถย้ายไปยังหน้าปลายทางที่เป็นลิงก์ interwiki ได้',
 'immobile-source-page' => 'หน้านี้ไม่สามารถเปลี่ยนชื่อได้',
 'immobile-target-page' => 'ไม่สามารถเปลี่ยนไปยังชื่อที่ต้องการได้',
-'imagenocrossnamespace' => 'à¹\84มà¹\88สามารà¸\96ยà¹\89ายà¹\84à¸\9fลà¹\8cà¹\84à¸\9bยัà¸\87à¹\80à¸\99มสà¹\80à¸\9bà¸\8bà¸\97ีà¹\88à¹\84มà¹\88รอà¸\87รัà¸\9a',
+'imagenocrossnamespace' => 'à¹\84มà¹\88สามารà¸\96ยà¹\89ายà¹\84à¸\9fลà¹\8cà¹\84à¸\9bยัà¸\87à¹\80à¸\99มสà¹\80à¸\9bà¸\8bอืà¹\88à¸\99',
 'nonfile-cannot-move-to-file' => 'ไม่สามารถย้ายจากเนมสเปซอื่นมาเป็นเนมสเปซไฟล์',
 'imagetypemismatch' => 'นามสกุลของไฟล์ใหม่ไม่ตรงกับชนิดของไฟล์',
 'imageinvalidfilename' => 'ชื่อไฟล์เป้าหมายไม่ถูกต้อง',
@@ -2647,9 +2678,10 @@ $1',
 'exportall' => 'ส่งออกข้อมูลทุกหน้า',
 'exportcuronly' => 'เอาเฉพาะรุ่นปัจจุบันเท่านั้น ไม่เอาประวัติทั้งหมด',
 'exportnohistory' => "----
-'''หมายเหตุ:''' การส่งออกประวัติหน้าทั้งหมดผ่านช่องทางนี้ได้ถูกปิดไว้ เนื่องจากปัญหาทางเทคนิคในด้านประสิทธิภาพ",
-'export-submit' => 'ส่งออกมา',
-'export-addcattext' => 'รวมหน้าจากหมวดหมู่:',
+'''หมายเหตุ:''' การส่งออกประวัติหน้าทั้งหมดผ่านแบบนี้ถูกปิดใช้งาน เนื่องจากปัญหาด้านประสิทธิภาพ",
+'exportlistauthors' => 'รวมรายการผู้ร่วมเขียนเต็มของแต่ละหน้า',
+'export-submit' => 'ส่งออก',
+'export-addcattext' => 'เพิ่มหน้าจากหมวดหมู่:',
 'export-addcat' => 'เพิ่ม',
 'export-addnstext' => 'เพิ่มหน้าจากเนมสเปซ:',
 'export-addns' => 'เพิ่ม',
@@ -2726,6 +2758,9 @@ $1',
 'import-token-mismatch' => 'ข้อมูลเซชชันสูญหาย ให้ลองใหม่อีกครั้ง',
 'import-invalid-interwiki' => 'ไม่สามารถนำข้อมูลเข้าจากวิกิที่กำหนดได้',
 'import-error-create' => 'หน้า "$1" ยังไม่ได้ถูกนำเข้า เนื่องจากคุณไม่ได้รับอนุญาตให้สามารถสร้างได้',
+'import-options-wrong' => '{{PLURAL:$2|ตัวเลือก|ตัวเลือก}}ผิด:<nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'หน้าต้นทางที่กำหนดมีชื่อเรื่องไม่ถูกต้อง',
+'import-rootpage-nosubpage' => 'เนมสเปซ "$1" ของหน้าต้นทางไม่อนุญาตหน้าย่อย',
 
 # Import log
 'importlogpage' => 'ปูมการนำเข้า',
@@ -2737,6 +2772,10 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'การทดสอบจาวาสคริปต์',
+'javascripttest-title' => 'กำลังดำเนินงานทดสอบ $1',
+'javascripttest-pagetext-noframework' => 'หน้านี้สงวนไว้สำหรับดำเนินงานการทดสอบจาวาสคริปต์',
+'javascripttest-pagetext-skins' => 'เลือกสกินที่จะดำเนินงานการทดสอบ:',
+'javascripttest-qunit-intro' => 'ดู[$1 เอกสารกำกับการทดสอบ]บน mediawiki.org',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'หน้าผู้ใช้ของคุณ',
@@ -2912,6 +2951,8 @@ $1',
 'markedaspatrollederror' => 'ไม่สามารถทำเครื่องหมายว่าตรวจสอบแล้ว',
 'markedaspatrollederrortext' => 'คุณจำเป็นต้องระบุรุ่นการแก้ไขที่กำหนดว่าตรวจสอบแล้ว',
 'markedaspatrollederror-noautopatrol' => 'คุณไม่สามารถทำเครื่องหมายการแก้ไขของคุณเองว่าตรวจสอบแล้ว',
+'markedaspatrollednotify' => 'การเปลี่ยนแปลงไปยัง $1 ถูกทำเครื่องหมายว่าตรวจสอบแล้ว',
+'markedaspatrollederrornotify' => 'การทำเครื่องหมายว่าตรวจสอบแล้วล้มเหลว',
 
 # Patrol log
 'patrol-log-page' => 'ปูมการตรวจสอบ',
@@ -3120,6 +3161,7 @@ $1',
 'exif-gpsareainformation' => 'ชื่อของพื้นที่จีพีเอส',
 'exif-gpsdatestamp' => 'วันที่จีพีเอส',
 'exif-gpsdifferential' => 'การปรับแค่ข้อแตกต่างจีพีเอส',
+'exif-jpegfilecomment' => 'ความเห็นไฟล์ JPEG',
 'exif-keywords' => 'คำสำคัญ',
 'exif-objectname' => 'ชื่อเรื่องสั้น',
 'exif-headline' => 'พาดหัวข่าว',
@@ -3608,6 +3650,8 @@ $5
 'htmlform-submit' => 'ส่งข้อมูล',
 'htmlform-reset' => 'ยกเลิกการเปลื่ยนแปลง',
 'htmlform-selectorother-other' => 'อื่น ๆ',
+'htmlform-no' => 'ไม่',
+'htmlform-yes' => 'ใช่',
 
 # SQLite database support
 'sqlite-has-fts' => 'รุ่น $1 พร้อมการสนับสนุนการค้นหาข้อความแบบเต็ม',
@@ -3646,23 +3690,31 @@ $5
 'rightsnone' => '(ไม่มี)',
 
 # Feedback
+'feedback-bugornote' => 'หากคุณได้อธิบายปัญหาทางเทคนิคในรายละเอียดแล้ว โปรด[$1 รายงานจุดบกพร่อง]
+มิฉะนั้น คุณสามารถแบบอย่างง่ายด้านล่าง ความเห็นของคุณจะถูกเพิ่มเข้าสู่ "[$3 $2]" ร่วมกับชื่อผู้ใช้ของคุณ',
+'feedback-subject' => 'เรื่อง:',
 'feedback-message' => 'ข้อความ:',
 'feedback-cancel' => 'ยกเลิก',
 'feedback-submit' => 'ส่งคำติชม',
 'feedback-adding' => 'เพิ่มคำติชมเข้าไปที่หน้า...',
+'feedback-thanks' => 'ขอบคุณ! ผลป้อนกลับของคุณถูกโพสต์ไปยังหน้า "[$2 $1]" แล้ว',
 'feedback-close' => 'เสร็จสิ้น',
+'feedback-bugcheck' => 'ยอดเยี่ยม! เพียงตรวจสอบว่าจุดบกพร่องนั้นมิใช่หนึ่งใน[$1 จุดบกพร่องที่ทราบแล้ว]',
+'feedback-bugnew' => 'ฉันตรวจสอบแล้ว รายงานจุดบกพร่องใหม่',
 
 # Search suggestions
 'searchsuggest-search' => 'ค้นหา',
 'searchsuggest-containing' => 'ประกอบไปด้วย...',
 
 # API errors
+'api-error-badaccess-groups' => 'คุณไม่ได้รับอนุญาตให้อัปโหลดไฟล์มายังวิกินี้',
 'api-error-empty-file' => 'ไฟล์ที่คุณส่งมานั้นว่าง',
 'api-error-emptypage' => 'ไม่อนุญาตให้สร้างหน้าใหม่ที่ว่าง',
 'api-error-file-too-large' => 'ไฟล์ที่คุณส่งมาใหญ่เกินไป',
 'api-error-filename-tooshort' => 'ชื่อไฟล์สั้นเกินไป',
 'api-error-filetype-banned' => 'ไฟล์ประเภทนี้ถูกห้าม',
 'api-error-mustbeloggedin' => 'กรุณาลงชื่อเข้าใช้เพื่ออัปโหลดไฟล์',
+'api-error-uploaddisabled' => 'การอัปโหลดถูกปิดใช้งานบนวิกินี้',
 
 # Durations
 'duration-seconds' => '$1 วินาที',
index f8c609a..4957e48 100644 (file)
@@ -176,8 +176,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Ipakita ang bilang ng mga nagbabantay na tagagamit',
 'tog-oldsig' => 'Umiiral na lagda:',
 'tog-fancysig' => 'Ituring ang lagda bilang teksto ng wiki (walang automatikong pagkawing)',
-'tog-externaleditor' => 'Gumamit ng nakatakdang panlabas na pampatnugot ayon sa likas na pagkakatakda (para sa mga dalubhasa lamang, kailangan ng natatanging mga pagtatakda sa iyong kompyuter. [//www.mediawiki.org/wiki/Manual:External_editors Marami pang kabatiran.])',
-'tog-externaldiff' => 'Gumamit ng likas na nakatakdang panlabas na pagkakaiba (para sa mga dalubhasa lamang, kailangan ng natatanging mga pagtatakda sa iyong kompyuter. [//www.mediawiki.org/wiki/Manual:External_editors Mas marami pang kabatiran.])',
 'tog-showjumplinks' => 'Payagan ang mga "tumalon sa" na kawing pampagamit',
 'tog-uselivepreview' => 'Gamitin ang buhay na paunang tingin (JavaScript) (Eksperimental)',
 'tog-forceeditsummary' => 'Pagsabihan ako kapag nagpapasok ng walang-lamang buod ng pagbabago',
@@ -192,6 +190,7 @@ $messages = array(
 'tog-showhiddencats' => 'Ipakita ang mga nakatagong kategorya',
 'tog-noconvertlink' => 'Huwag paganahin ang pagpapalit ng pamagat na pangkawing',
 'tog-norollbackdiff' => 'Alisin ang mga pagkakaiba pagkatapos isagawa ang pagpapagulong na pabalik sa dati',
+'tog-useeditwarning' => 'Magbabala sa akin kapag umalis ako sa isang pahina ng pampatnugot na hindi pa nasasagip ang mga pagbabago',
 
 'underline-always' => 'Palagi',
 'underline-never' => 'Hindi magpakailanman',
@@ -950,6 +949,8 @@ Tila binura na ito.',
 'edit-already-exists' => 'Hindi makalikha ng isang bagong pahina.
 Umiiral na ito.',
 'defaultmessagetext' => 'Nakatakdang teksto ng mensahe',
+'editwarning-warning' => 'Ang paglisan mula sa pahinang ito ay maaaring makasanhi sa iyo ng pagkawala ng anumang mga pagbabagong ginawa mo.
+Kung nakalagda ka, maaari mong huwag paganahin ang babalang ito sa loob ng seksyong "May binabago" ng mga nais mo.',
 
 # Content models
 'content-model-wikitext' => 'wikiteksto',
@@ -1231,15 +1232,6 @@ Subuking lagyan ng unlapi/paunang ''all:'' upang hanapin ang lahat ng mga nialal
 'search-external' => 'Panlabas na paghahanap',
 'searchdisabled' => 'Nakapatay ang paghahanap sa {{SITENAME}}. Maaari kang pansamantalang maghanap sa pamamagitan ng Google. Tandaan na maaaring luma na ang kanilang mga indeks sa nilalaman ng {{SITENAME}}.',
 
-# Quickbar
-'qbsettings' => 'Quickbar',
-'qbsettings-none' => 'Wala',
-'qbsettings-fixedleft' => 'Inayos ang kaliwa',
-'qbsettings-fixedright' => 'Inayos ang kanan',
-'qbsettings-floatingleft' => 'Kaliwa lumulutang',
-'qbsettings-floatingright' => 'Kanan lumulutang',
-'qbsettings-directionality' => 'Naayos na, ayon sa kapupuntahan ng panitik ng wika mo',
-
 # Preferences page
 'preferences' => 'Mga kagustuhan',
 'mypreferences' => 'Mga nais',
@@ -1797,7 +1789,6 @@ Para sa pinakamatatag na kaligtasan, hindi pinagana ang img_auth.php.',
 'http-read-error' => 'Kamalian sa pagbasa ng HTTP.',
 'http-timed-out' => 'Huminto ang kahilingang HTTP.',
 'http-curl-error' => 'Kamalian sa pagsalok ng URL: $1',
-'http-host-unreachable' => 'Hindi marating ang URL.',
 'http-bad-status' => 'Nagkaroon ng suliranin habang hinihiling ang HTTP na: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2119,15 +2110,6 @@ Sinusuportahang mga protokolo: <code>$1</code> (huwag idagdag ang anuman sa mga
 'listusers-noresult' => 'Walang nahanap na tagagamit.',
 'listusers-blocked' => '(hinarang)',
 
-# Special:ActiveUsers
-'activeusers' => 'Tala ng mga aktibong tagagamit',
-'activeusers-intro' => 'Isa itong talaan ng mga tagagamit na nagkaroon ng ilang uri ng galaw sa loob ng huling $1 {{PLURAL:$1|araw|mga araw}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|pagbabago|mga pagbabago}} sa loob ng huling {{PLURAL:$3|araw|$3 mga araw}}',
-'activeusers-from' => 'Ipakita ang mga tagagamit simula sa:',
-'activeusers-hidebots' => 'Itago ang mga bots',
-'activeusers-hidesysops' => 'Itago ang mga tagapangasiwa',
-'activeusers-noresult' => 'Walang natagpuang mga tagagamit.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Mga uri ng tagagamit',
 'listgrouprights-summary' => 'Ang sumusunod ay isang talaan ng mga pangkat ng tagagamit na binigyang kahulugang sa wiking ito, kasama ang kanilang mga kaugnay na mga karapatan.
@@ -2924,13 +2906,8 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.',
 
 # Stylesheets
 'common.css' => '/* Ang inilagay na CSS dito ay gagamitin para sa lahat ng mga pabalat */',
-'standard.css' => '/* Ang inilagay na CSS dito ay makakaapekto sa mga tagagamit ng Karaniwang pabalat */',
-'nostalgia.css' => '/* Ang CSS na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Nostalgia */',
 'cologneblue.css' => "/* Ang Cascading Style Sheets na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Bughaw na Kolown (''Cologne Blue'') */",
 'monobook.css' => '/* Ang CSS na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na Monobook */',
-'myskin.css' => "/* Ang CSS na inilagay dito ay makakaapekto sa lahat ng mga tagagamit ng pabalat na Balatko (''MySkin'') */",
-'chick.css' => "/* Ang CSS na inilagay dito ay makakaapekto sa mga tagagamit ng pabalat na ''Chick'' */",
-'simple.css' => "/* Ang CSS na iniligay dito ay makakaapekto sa mga tagagamit ng Payak (''Simple'') na pabalat */",
 'modern.css' => "/* Ang CSS na iniligay dito ay makakaapekto sa tagagamit ng Makabagong (''Modern'') pabalat */",
 'vector.css' => '/* Ang inilagay na CSS dito ay makakaapekto sa mga tagagamit ng pabalat na Vector */',
 'print.css' => '/* Ang CSS na inilagay dito ay makakaapekto sa kalalabasan o resulta ng paglilimbag */',
@@ -2943,13 +2920,8 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.',
 
 # Scripts
 'common.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa lahat ng mga tagagamit ng bawat pahinang ikinarga. */',
-'standard.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng Karaniwang pabalat */',
-'nostalgia.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na Nostalgia */',
 'cologneblue.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit ng pabalat na Cologne Blue o Bughaw na Kolown */',
 'monobook.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na MonoBook */',
-'myskin.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa tagagamit na gumagamit ng pabalat na MySkin o Balat Ko */',
-'chick.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na Chick */',
-'simple.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng Payak na pabalat */',
 'modern.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng Modernong pabalat */',
 'vector.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na gumagamit ng pabalat na Vector */',
 'group-autoconfirmed.js' => '/* Ang anumang JavaScript dito ay ikakarga para sa mga tagagamit na kusang natiyak lamang */',
@@ -3015,13 +2987,8 @@ Maaaring dahil ito sa isang kawing sa isang nakatalang hinarang dahil di-kinaisn
 'pageinfo-templates' => '{{PLURAL:$1|Suleras|Mga suleras}} ($1) na nasa transklusyon (kasama sa maraming mga lugar)',
 
 # Skin names
-'skinname-standard' => 'Klasiko',
-'skinname-nostalgia' => 'Nostalhiya',
 'skinname-cologneblue' => 'Bughaw na Kolown',
 'skinname-monobook' => 'MonoAklat ("isang aklat")',
-'skinname-myskin' => 'PabalatKo',
-'skinname-chick' => "\"Pambabae\" (''Chick'')",
-'skinname-simple' => 'Payak',
 'skinname-modern' => 'Makabago (Moderno)',
 'skinname-vector' => 'Vector',
 
@@ -3114,8 +3081,6 @@ Anumang susunod na mga kawing sa pinanggalingang linya ay tinuturing na mga ekse
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans',
index 78b8008..f16836a 100644 (file)
@@ -377,8 +377,6 @@ $messages = array(
 'tog-shownumberswatching' => 'İzleyen kullanıcı sayısını göster',
 'tog-oldsig' => 'Mevcut imza:',
 'tog-fancysig' => 'İmzaya vikimetin muamelesi yap (otomatik bir bağlantı olmadan)',
-'tog-externaleditor' => 'Varsayılan olarak harici düzenleyici kullan (deneyimli kullanıcılar içindir ve bilgisayarınızda özel ayarlar gerektirir. [//www.mediawiki.org/wiki/Manual:External_editors Ayrıntılı bilgi için tıklayın.])',
-'tog-externaldiff' => 'Varsayılan olarak harici karşılaştırıcı kullan (deneyimli kullanıcılar içindir ve bilgisayarınızda özel ayarlar gerektirir. [//www.mediawiki.org/wiki/Manual:External_editors Ayrıntılı bilgi için tıklayın.])',
 'tog-showjumplinks' => '"{{int:jumpto}}" erişilebilirlik bağlantısı etkinleştir',
 'tog-uselivepreview' => 'Canlı ön izlemeyi kullan (JavaScript gerektirir ve özellik deneme aşamasındadır)',
 'tog-forceeditsummary' => 'Özeti boş bıraktığımda beni uyar',
@@ -393,6 +391,7 @@ $messages = array(
 'tog-showhiddencats' => 'Gizli kategorileri göster',
 'tog-noconvertlink' => 'Bağlantı başlığı dönüştürmesini devre dışı bırakma',
 'tog-norollbackdiff' => 'Geridönüş uygulandıktan sonra değişikliği atla',
+'tog-useeditwarning' => 'Kaydedilmemiş değişikliğe sahip bir değişiklik sayfasından çıkarken beni uyar',
 
 'underline-always' => 'Daima',
 'underline-never' => 'Asla',
@@ -1103,6 +1102,8 @@ Sayfa zaten mevcut.',
 'defaultmessagetext' => 'Varsayılan mesaj metni',
 'invalid-content-data' => 'Geçersiz içerik verisi',
 'content-not-allowed-here' => '"$1" içeriğine, [[$2]] sayfasında izin verilmemekte.',
+'editwarning-warning' => 'Bu sayfadan ayrılmak yaptığınız herhangi bir değişikliği kaybetmenize sebep olabilir.
+Eğer giriş yaptıysanız, bu uyarıyı, tercihlerinizin "{{int:prefs-editing}}" bölümünde devre dışı bırakabilirsiniz.',
 
 # Content models
 'content-model-wikitext' => 'vikimetin',
@@ -1381,15 +1382,6 @@ Aramanızın başına '''all:''' önekini ekleyerek tüm içeriği aramayı (tar
 '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.',
 
-# Quickbar
-'qbsettings' => 'Hızlı erişim sütun ayarları',
-'qbsettings-none' => 'Hiçbiri',
-'qbsettings-fixedleft' => 'Sola sabitlendi',
-'qbsettings-fixedright' => 'Sağa sabitlendi',
-'qbsettings-floatingleft' => 'Sola yaslanıyor',
-'qbsettings-floatingright' => 'Sağa yaslanıyor',
-'qbsettings-directionality' => 'Sabit, dilinizin komut dosyasının yönüne bağlı',
-
 # Preferences page
 'preferences' => 'Tercihler',
 'mypreferences' => 'Tercihler',
@@ -1912,7 +1904,6 @@ En uygun güvenlik için, img_auth.php devre dışı bırakıldı.",
 'http-read-error' => 'HTTP okuma hatası.',
 'http-timed-out' => 'HTTP isteği zaman aşımına uğradı.',
 'http-curl-error' => 'URL alınırken hata: $1',
-'http-host-unreachable' => "URL'ye ulaşılamıyor.",
 'http-bad-status' => 'HTTP isteği sırasında bir sorun oluştu: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2221,15 +2212,6 @@ Desteklenen {{PLURAL:$2|iletişim kuralı|iletişim kuralları}}: <code>$1</code
 'listusers-noresult' => 'Kullanıcı bulunamadı.',
 'listusers-blocked' => '(engellenmiş)',
 
-# Special:ActiveUsers
-'activeusers' => 'Aktif kullanıcı listesi',
-'activeusers-intro' => 'Bu, son $1 {{PLURAL:$1|günde|günde}} bir çeşit etkinlik göstermiş kullanıcıların listesidir.',
-'activeusers-count' => 'Son {{PLURAL:$3|günde|$3 günde}} $1 {{PLURAL:$1|eylem|eylem}}',
-'activeusers-from' => 'Şununla başlayan kullanıcıları görüntüle:',
-'activeusers-hidebots' => 'Botları gizle',
-'activeusers-hidesysops' => 'Yöneticileri gizle',
-'activeusers-noresult' => 'Kullanıcı bulunamadı.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Kullanıcı grubu hakları',
 'listgrouprights-summary' => 'Aşağıdaki bu vikide tanımlanan kullanıcı gruplarının, ilgili erişim haklarıyla birlikte listesidir.
@@ -3078,10 +3060,6 @@ Geçici dosya kayıp.',
 'pageinfo-category-files' => 'Dosya sayısı',
 
 # Skin names
-'skinname-standard' => 'Klasik',
-'skinname-nostalgia' => 'Nostaljik',
-'skinname-chick' => 'Şık',
-'skinname-simple' => 'Basit',
 'skinname-modern' => 'Modern',
 
 # Patrolling
index e308178..53cd450 100644 (file)
@@ -13,6 +13,7 @@
  * @author Haqmar
  * @author Himiq Dzyu
  * @author KhayR
+ * @author MF-Warburg
  * @author Marat Vildanov
  * @author Reedy
  * @author Rinatus
@@ -239,8 +240,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Битне күзәтү исемлекләренә өстәгән кулланучылар санын күрсәтелсен',
 'tog-oldsig' => 'Хәзерге имза:',
 'tog-fancysig' => 'Имзаның шәхси вики-билгеләмәсе (автоматик сылтамасыз)',
-'tog-externaleditor' => 'Тышкы редактор куллану (бары тик белгечләргә генә һәм санак махсус көйләнгән булу зарур; [//www.mediawiki.org/wiki/Manual:External_editors тулырак...])',
-'tog-externaldiff' => 'Тышкы версия чагыштыру программасын куллану (бары тик белгечләр өчен һшм санак махсус көйләнгән булу зарур; [//www.mediawiki.org/wiki/Manual:External_editors тулырак...])',
 'tog-showjumplinks' => '«Күчү» ярдәмче сылтамалары ялгансын',
 'tog-uselivepreview' => 'Тиз карап алу кулланылсын (JavaScript, эксперименталь)',
 'tog-forceeditsummary' => 'Үзгәртүләрне тасвирлау юлы тутырылмаган булса, кисәтү',
@@ -254,6 +253,7 @@ $messages = array(
 'tog-diffonly' => 'Юрама чагыштыру астында бит эчтәлеге күрсәтелмәсен',
 'tog-showhiddencats' => 'Яшерен төркемнәр күрсәтелсен',
 'tog-norollbackdiff' => 'Кире кайтару ясагач юрамалар аермасы күрсәтелмәсен',
+'tog-useeditwarning' => 'Битне сакламыйча китү вакытында мине кисәтергә',
 
 'underline-always' => 'Һәрвакыт',
 'underline-never' => 'Бервакытта да',
@@ -952,6 +952,8 @@ $2
 'edit-no-change' => 'Текстта үзгәешләр ясалмау сәбәпле, сезнең үзгәртү кире кагыла.',
 'edit-already-exists' => 'Яңа бит төзеп булмый.
 Ул инде бар.',
+'editwarning-warning' => 'Башка биткә күчү вакытында бу мәкаләгә керткән үзгәрешләр югалырга мөмкин.
+Әгәрдә сез теркәлгән булсагыз, бу искәрмәне сез «Көйләнмәләрем» өлешендә үзгәртә аласыз.',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Игътибар:''' бу биттә хәтерне еш кулланучы функцияләр артык күп.
@@ -1169,14 +1171,6 @@ $1",
 'powersearch-togglenone' => 'Бирни дә юк',
 'search-external' => 'Тышкы эзләү',
 
-# Quickbar
-'qbsettings' => 'Күчешләр аслыгы',
-'qbsettings-none' => 'Күрсәтмәү',
-'qbsettings-fixedleft' => 'Сулда күчерелмәс',
-'qbsettings-fixedright' => 'Уңда күчерелмәс',
-'qbsettings-floatingleft' => 'Сулда йөзмә',
-'qbsettings-floatingright' => 'Уңда йөзмә',
-
 # Preferences page
 'preferences' => 'Көйләнмәләр',
 'mypreferences' => 'Көйләнмәләр',
@@ -1703,12 +1697,6 @@ PICT # төрле
 'listusers-noresult' => 'Кулланучыларны табылмады.',
 'listusers-blocked' => '(тыелган)',
 
-# Special:ActiveUsers
-'activeusers' => 'Актив кулланучылар исемлеге',
-'activeusers-hidebots' => 'Ботларны яшер',
-'activeusers-hidesysops' => 'Идарәчеләрне яшер',
-'activeusers-noresult' => 'Кулланучылар табылмады.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Кулланучы төркемнәренең хокуклары',
 'listgrouprights-group' => 'Төркем',
@@ -1911,7 +1899,7 @@ $1',
 'blanknamespace' => '(Төп)',
 
 # Contributions
-'contributions' => '{{GENDER:$1|Кулланучының} кертеме',
+'contributions' => '{{GENDER:$1|Кулланучының}} кертеме',
 'contributions-title' => '$1 исемле кулланучының кертеме',
 'mycontris' => 'Кертем',
 'contribsub2' => '$1 ($2) өчен',
@@ -2161,14 +2149,12 @@ $1',
 # Spam protection
 'spamprotectiontitle' => 'Спам фильтры',
 
+# Info page
+'pageinfo-toolboxlink' => 'Бит турында мәгълүмат',
+
 # Skin names
-'skinname-standard' => 'Классик',
-'skinname-nostalgia' => 'Искә алу',
 'skinname-cologneblue' => 'Зәңгәр сагыш',
 'skinname-monobook' => 'Китап',
-'skinname-myskin' => 'Үзем',
-'skinname-chick' => 'Чеби',
-'skinname-simple' => 'Гади',
 'skinname-modern' => 'Замана',
 'skinname-vector' => 'Сызымлы',
 
index ec55bcb..eefdd5f 100644 (file)
@@ -66,9 +66,6 @@ $messages = array(
 'tog-shownumberswatching' => 'بۇ بەتنى كۆزىتىۋاتقان ئىشلەتكۈچى سانىنى كۆرسەت',
 'tog-oldsig' => 'نۆۋەتتىكى ئىمزا:',
 'tog-fancysig' => 'ئىمزاغا wiki تېكستى سۈپىتىدە مۇئامىلە قىل (ئۆزلۈكىدىن ئۇلانما ھاسىل بولمايدۇ)',
-'tog-externaleditor' => 'كۆڭۈلدىكى ئەھۋالدا سىرتقى تەھرىرلىگۈچ ئىشلىتىدۇ (ئالىي ئىشلەتكۈچىگە تەمىنلىنىدۇ، كومپيۇتېرىڭىزدا بىر قىسىم ئالاھىدە تەڭشەش ئېلىپ بېرىشىڭىز لازىم
-[//www.mediawiki.org/wiki/Manual:External_editors تېخىمۇ كۆپ ئۇچۇر.])',
-'tog-externaldiff' => 'كۆڭۈلدىكى ئەھۋالدا سىرتقى پەرق تەھلىلى ئىشلىتىدۇ (ئالىي ئىشلەتكۈچىگە تەمىنلىنىدۇ، كومپيۇتېرىڭىزدا بىر قىسىم ئالاھىدە تەڭشەش ئېلىپ بېرىشىڭىز لازىم. [//www.mediawiki.org/wiki/Manual:External_editors تېخىمۇ كۆپ ئۇچۇر.])',
 'tog-showjumplinks' => '"ئاتلا" زىيارەت ئۇلانمىسىنى قوزغات',
 'tog-uselivepreview' => 'رىئال ۋاقىتلىق ئالدىن كۆزىتىشنى ئىشلەت (JavaScript زۆرۈر) (سىناق)',
 'tog-forceeditsummary' => 'ئۈزۈندە كىرگۈزمىگەندە مېنى ئەسكەرت',
@@ -1156,15 +1153,6 @@ $1",
 'searchdisabled' => '{{SITENAME}} نىڭ ئىزدىشى چەكلەنگەن. سىز ھازىرچە Google ئىشلىتىپ ئىزدەپ تۇرۇڭ،.
 دىققەت ئۇلار ئىندېكسلىغان {{SITENAME}} مەزمۇنىنىڭ ۋاقتى ئۆتكەن بولۇشى مۇمكىن.',
 
-# Quickbar
-'qbsettings' => 'تېز يولباشچى ستونى',
-'qbsettings-none' => 'يوق',
-'qbsettings-fixedleft' => 'سول تەرەپ مۇقىم',
-'qbsettings-fixedright' => 'ئوڭ تەرەپ مۇقىم',
-'qbsettings-floatingleft' => 'سول تەرەپ لەيلىمە',
-'qbsettings-floatingright' => 'ئوڭ تەرەپ لەيلىمە',
-'qbsettings-directionality' => 'تىلىڭىزدىكى تېكىست ۋە قوليازمىنىڭ يۆنىلىشىگە ئاساسەن مۇقىملاشتۇرىدۇ.',
-
 # Preferences page
 'preferences' => 'مايىللىق',
 'mypreferences' => 'مايىللىق',
@@ -1726,7 +1714,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization',
 'http-read-error' => 'HTTP ئوقۇش خاتالىقى.',
 'http-timed-out' => 'HTTP ئىلتىماسى ۋاقىت ھالقىدى.',
 'http-curl-error' => 'URL ئاجراتقاندا خاتالىق كۆرۈلدى: $1',
-'http-host-unreachable' => 'URL غا ئۇلىشالمىدى.',
 'http-bad-status' => 'HTTP ئىلتىماس قىلغاندا مەسىلە كۆرۈلدى: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2049,15 +2036,6 @@ URL نىڭ توغرىلىقى ۋە تور بېكەتنى زىيارەت قىلى
 'listusers-noresult' => 'ئىشلەتكۈچى تېپىلمىدى.',
 'listusers-blocked' => '(چەكلەنگەن)',
 
-# Special:ActiveUsers
-'activeusers' => 'ئاكتىپ ئەزالار تىزىملىكى',
-'activeusers-intro' => 'بۇ يېقىنقى $1 {{PLURAL:$1| كۈن|كۈن}}دىكى مەشغۇلات قىلغان ئىشلەتكۈچىلەر تىزىملىكى.',
-'activeusers-count' => 'يېقىنقى {{PLURAL:$3|كۈن|$3 كۈن}}دىكى {{PLURAL:$1|مەشغۇلات}} قېتىم سانى $1',
-'activeusers-from' => 'باشلانغان ئىشلەتكۈچىنى كۆرسەت:',
-'activeusers-hidebots' => 'ماشىنا ئادەمنى يوشۇر',
-'activeusers-hidesysops' => 'باشقۇرغۇچىنى يوشۇر',
-'activeusers-noresult' => 'ئىشلەتكۈچى تېپىلمىدى.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'ئىشلەتكۈچى گۇرۇپپا ھوقۇقى',
 'listgrouprights-summary' => 'تۆۋەندىكىسى بۇ wiki دا ئېنىقلىما بېرىلگەن ئىشلەتكۈچى ھوقۇق چېكى تىزىملىكى ۋە ئۇلارنىڭ زىيارەت ھوقۇق چېكى.
@@ -2886,13 +2864,8 @@ $1',
 
 # Stylesheets
 'common.css' => '/* CSS placed here will be applied to all skins */',
-'standard.css' => '/* CSS placed here will affect users of the Standard skin */',
-'nostalgia.css' => '/* CSS placed here will affect users of the Nostalgia skin */',
 'cologneblue.css' => '/* CSS placed here will affect users of the Cologne Blue skin */',
 'monobook.css' => '/* CSS placed here will affect users of the Monobook skin */',
-'myskin.css' => '/* CSS placed here will affect users of the MySkin skin */',
-'chick.css' => '/* CSS placed here will affect users of the Chick skin */',
-'simple.css' => '/* CSS placed here will affect users of the Simple skin */',
 'modern.css' => '/* CSS placed here will affect users of the Modern skin */',
 'vector.css' => '/* CSS placed here will affect users of the Vector skin */',
 'print.css' => '/* CSS placed here will affect the print output */',
@@ -2904,13 +2877,8 @@ $1',
 
 # Scripts
 'common.js' => '/* Any JavaScript here will be loaded for all users on every page load. */',
-'standard.js' => '/* Any JavaScript here will be loaded for users using the Standard skin */',
-'nostalgia.js' => '/* Any JavaScript here will be loaded for users using the Nostalgia skin */',
 'cologneblue.js' => '/* Any JavaScript here will be loaded for users using the Cologne Blue skin */',
 'monobook.js' => '/* Any JavaScript here will be loaded for users using the MonoBook skin */',
-'myskin.js' => '/* Any JavaScript here will be loaded for users using the MySkin skin */',
-'chick.js' => '/* Any JavaScript here will be loaded for users using the Chick skin */',
-'simple.js' => '/* Any JavaScript here will be loaded for users using the Simple skin */',
 'modern.js' => '/* Any JavaScript here will be loaded for users using the Modern skin */',
 'vector.js' => '/* Any JavaScript here will be loaded for users using the Vector skin */',
 'group-autoconfirmed.js' => '/* Any JavaScript here will be loaded for autoconfirmed users only */',
@@ -2990,13 +2958,8 @@ $1',
 'pageinfo-category-files' => 'ھۆججەت سانى',
 
 # Skin names
-'skinname-standard' => 'Classic',
-'skinname-nostalgia' => 'Nostalgia',
 'skinname-cologneblue' => 'Cologne Blue',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Simple',
 'skinname-modern' => 'Modern',
 'skinname-vector' => 'Vector',
 
@@ -3095,8 +3058,6 @@ $1',
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans',
index a0710d5..70ce910 100644 (file)
@@ -385,8 +385,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Показувати число користувачів, які додали сторінку до свого списку спостереження',
 'tog-oldsig' => 'Існуючий підпис:',
 'tog-fancysig' => 'Власна вікі-розмітка підпису (без автоматичного посилання)',
-'tog-externaleditor' => "Використовувати зовнішній редактор за умовчанням (тільки для досвідчених користувачів, вимагає спеціальних налаштувань вашого комп'ютера [//www.mediawiki.org/wiki/Manual:External_editors Детальніше.])",
-'tog-externaldiff' => "Використовувати зовнішню програму порівняння версій за умовчанням (тільки для експертів, вимагає спеціальних налаштувань вашого комп'ютера. [//www.mediawiki.org/wiki/Manual:External_editors Детальніше.])",
 'tog-showjumplinks' => 'Активізувати допоміжні посилання «перейти до»',
 'tog-uselivepreview' => 'Використовувати швидкий попередній перегляд (JavaScript, експериментально)',
 'tog-forceeditsummary' => 'Попереджати, коли не зазначений короткий опис редагування',
@@ -401,6 +399,7 @@ $messages = array(
 'tog-showhiddencats' => 'Показувати приховані категорії',
 'tog-noconvertlink' => 'Вимкнути конвертацію назви посилання',
 'tog-norollbackdiff' => 'Не показувати різницю версій після виконання відкоту',
+'tog-useeditwarning' => 'Попереджати мене, якщо я залишаю сторінку редагування з незбереженими змінами',
 
 'underline-always' => 'Завжди',
 'underline-never' => 'Ніколи',
@@ -773,9 +772,15 @@ $1',
 'welcomecreation-msg' => 'Ваш акаунт було створено.
 Не забудьте змінити свої [[Special:Preferences|налаштування у {{GRAMMAR:genitive|{{SITENAME}}}}]].',
 'yourname' => "Ім'я користувача:",
+'userlogin-yourname' => "Ім'я користувача",
+'userlogin-yourname-ph' => "Введіть ім'я користувача",
 'yourpassword' => 'Пароль:',
+'userlogin-yourpassword' => 'Пароль',
+'userlogin-yourpassword-ph' => 'Введіть ваш пароль',
 'yourpasswordagain' => 'Повторний набір пароля:',
 'remembermypassword' => "Запам'ятати мій обліковий запис на цьому комп'ютері (на строк не більше $1 {{PLURAL:$1|дня|днів}})",
+'userlogin-remembermypassword' => 'Запам’ятати мене',
+'userlogin-signwithsecure' => 'Вхід за допомогою безпечного сервера',
 'securelogin-stick-https' => 'Залишайтись підключенним через HTTPS після входу',
 'yourdomainname' => 'Ваш домен:',
 'password-change-forbidden' => 'Ви не можна змінити пароль на цій вікі.',
@@ -788,12 +793,16 @@ $1',
 'logout' => 'Вихід із системи',
 'userlogout' => 'Вихід із системи',
 'notloggedin' => 'Ви не ввійшли до системи',
+'userlogin-noaccount' => 'Немає облікового запису?',
+'userlogin-joinproject' => 'Приєднатися до {{SITENAME}}',
 'nologin' => "Ви ще не зареєструвались? '''$1'''.",
 'nologinlink' => 'Створіть обліковий запис',
 'createaccount' => 'Зареєструватися',
 'gotaccount' => "Ви вже зареєстровані? '''$1'''.",
 'gotaccountlink' => 'Увійдіть',
 'userlogin-resetlink' => 'Забули дані, потрібні для входу?',
+'helplogin-url' => 'Довідка:Вхід систему',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Допомога в реєстрації]]',
 'createaccountmail' => 'Використати тимчасовий випадковий пароль і надіслати його на адресу електронної пошти, вказану нижче',
 'createaccountreason' => 'Причина:',
 'badretype' => 'Уведені вами паролі не збігаються.',
@@ -844,8 +853,8 @@ $1',
 'blocked-mailpassword' => 'Редагування з вашої IP-адреси заборонено, заблокована також функція відновлення пароля.',
 'eauthentsent' => 'На зазначену адресу електронної пошти надісланий лист із запитом на підтвердження зміни адреси.
 У листі також описані дії, які потрібно виконати для підтвердження того, що ця адреса електронної пошти справді належить вам.',
-'throttled-mailpassword' => 'ФÑ\83нкÑ\86Ñ\96Ñ\8f Ð½Ð°Ð³Ð°Ð´Ñ\83ваннÑ\8f Ð¿Ð°Ñ\80олÑ\8f Ð²Ð¶Ðµ Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83валаÑ\81Ñ\8c Ð¿Ñ\80оÑ\82Ñ\8fгом {{PLURAL:$1|оÑ\81Ñ\82аннÑ\8cоÑ\97 $1 Ð³Ð¾Ð´Ð¸Ð½Ð¸|оÑ\81Ñ\82аннÑ\96Ñ\85 $1 Ð³Ð¾Ð´Ð¸Ð½|останніх $1 годин}}.
\94лÑ\8f Ð¿Ð¾Ð¿ÐµÑ\80едженнÑ\8f Ð·Ð»Ð¾Ð²Ð¶Ð¸Ð²Ð°Ð½Ñ\8c Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð²Ð¸ÐºÐ¾Ð½Ñ\83ваÑ\82и Ð½Ðµ Ð±Ñ\96лÑ\8cÑ\88е Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ð½Ð°Ð³Ð°Ð´Ñ\83ваннÑ\8f Ð·Ð° $1 {{PLURAL:$1|годинÑ\83|години|годин}}.',
+'throttled-mailpassword' => 'Ð\86нÑ\81Ñ\82Ñ\80Ñ\83кÑ\86Ñ\96Ñ\8f Ð¿Ð¾ Ð²Ñ\96дновленнÑ\8e Ð¿Ð°Ñ\80олÑ\8e Ð²Ð¶Ðµ Ð±Ñ\83ла Ð²Ð¸Ñ\81лана ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\8e Ð¿Ð¾Ñ\88Ñ\82оÑ\8e Ð¿Ñ\80оÑ\82Ñ\8fгом {{PLURAL:$1|оÑ\81Ñ\82аннÑ\8cоÑ\97 Ð³Ð¾Ð´Ð¸Ð½Ð¸|останніх $1 годин}}.
\94лÑ\8f Ð¿Ð¾Ð¿ÐµÑ\80едженнÑ\8f Ð·Ð»Ð¾Ð²Ð¶Ð¸Ð²Ð°Ð½Ñ\8c Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð½Ð°Ð´Ñ\81илаÑ\82и Ñ\82Ñ\96лÑ\8cки Ð¾Ð´Ð½Ñ\83 Ñ\96нÑ\81Ñ\82Ñ\80Ñ\83кÑ\86Ñ\96Ñ\8e Ð·Ð° {{PLURAL:$1|годинÑ\83|$1 Ð³Ð¾Ð´Ð¸Ð½Ð¸|$1 годин}}.',
 'mailerror' => 'Помилка при відправці пошти: $1',
 'acct_creation_throttle_hit' => 'Відвідувачі з вашої IP-адреси вже створили $1 {{PLURAL:$1|обліковий запис|облікових записи|облікових записів}} за останню добу, що є максимумом для цього відрізка часу.
 Таким чином, користувачі з цієї IP-адреси не можуть на цей момент створювати нових облікових записів.',
@@ -898,6 +907,7 @@ $1',
 'passwordreset-text' => 'Заповніть цю форму для відновлення пароля.',
 'passwordreset-legend' => 'Перевстановити пароль',
 'passwordreset-disabled' => 'У цій вікі вимкнена можливість скидання пароля.',
+'passwordreset-emaildisabled' => 'Функції електронної пошти вимкнуто в цій вікі.',
 'passwordreset-pretext' => '{{PLURAL:$1||Введіть одну з частин даних}}',
 'passwordreset-username' => "Ім'я користувача:",
 'passwordreset-domain' => 'Домен:',
@@ -909,7 +919,7 @@ $1',
 
 $2
 
-{{PLURAL:$3|Цей тимчасовий пароль|Ці тимчасові паролі}} стануть нечинні через {{PLURAL:$5|день|$5 дні|$5 днів}}.
+{{PLURAL:$3|Цей тимчасовий пароль|Ці тимчасові паролі}} стануть недійсні через {{PLURAL:$5|день|$5 дні|$5 днів}}.
 Ви маєте ввійти в систему і вибрати новий пароль. Якщо ж цей запит зробив хтось інший, або Ви пам'ятаєте свій старий пароль і не бажаєте його змінювати, можете просто проігнорувати це повідомлення та продовжувати використовувати старий пароль.",
 'passwordreset-emailtext-user' => "Користувач $1 з {{SITENAME}} попросив нагадати деталі Вашого облікового запису для {{SITENAME}} ($4). З Вашою електронною скринькою пов'язан{{PLURAL:$3|ий такий запис|і такі записи}}:
 
@@ -1146,6 +1156,8 @@ $2
 'content-failed-to-parse' => 'Не вдалось проаналізувати $2 як тип $1: $3',
 'invalid-content-data' => 'Неприпустимі дані',
 'content-not-allowed-here' => 'Вміст «$1» недопустимий на сторінці [[$2]]',
+'editwarning-warning' => 'Перехід на іншу сторінку призведе до втрати ваших змін.
+Якщо ви ввійшли до системи, то ви можете відключити це попередження в розділі «{{int:prefs-editing}}» ваших налаштувань.',
 
 # Content models
 'content-model-wikitext' => 'вікітекст',
@@ -1429,6 +1441,7 @@ $1",
 'powersearch-togglenone' => 'Жодний',
 'search-external' => 'Зовнішній пошук',
 'searchdisabled' => '<p>Вибачте, повнотекстовий пошук тимчасово недоступний через перевантаження сервера; передбачається, що ця функція буде знову включена після установки нового обладнання. Поки що ми пропонуємо вам скористатися Google чи Yahoo!:</p>',
+'search-error' => 'Сталася помилка під час пошуку:$1',
 
 # Preferences page
 'preferences' => 'Налаштування',
@@ -2813,6 +2826,7 @@ $1',
 'sorbs' => 'DNSBL',
 'sorbsreason' => 'Ваша IP-адреса числиться як відкритий проксі в DNSBL.',
 'sorbs_create_account_reason' => 'Ваша IP-адреса числиться як відкритий проксі в DNSBL. Ви не можете створити обліковий запис.',
+'xffblockreason' => 'IP-адреса в X-Forwarded-For полі заголовка, або ваша, або проксі сервера, що використовується вами, заблокована. Початкова причина блокування була:$1',
 'cant-block-while-blocked' => 'Ви не можете блокувати інших користувачів, поки ви самі заблоковані.',
 'cant-see-hidden-user' => 'Користувача, якого ви хочете заблокувати, вже заблоковано та приховано. Оскільки у вас немає прав щодо приховання користувачів, ви не можете переглянути або змінити дане блокування.',
 'ipbblocked' => 'Ви не можете блокувати чи розблоковувати інших користувачів, оскільки самі заблоковані',
@@ -3328,8 +3342,6 @@ $1',
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'hans',
@@ -4203,6 +4215,8 @@ MediaWiki поширюється в надії, що вона буде кори
 'htmlform-submit' => 'Відправити',
 'htmlform-reset' => 'Відкотити зміни',
 'htmlform-selectorother-other' => 'Інше',
+'htmlform-no' => 'Ні',
+'htmlform-yes' => 'Так',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 з підтримкою повнотекстового пошуку',
@@ -4234,8 +4248,8 @@ MediaWiki поширюється в надії, що вона буде кори
 'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|перейменував|перейменувала}} сторінку $3 на $4 поверх перенаправлення і без залишення перенаправлення',
 'logentry-patrol-patrol' => '$1 {{GENDER:$2|відпатрулював|відпатрулювала}} версію $4 сторінки $3',
 'logentry-patrol-patrol-auto' => '$1 автоматично {{GENDER:$2|відпатрулював|відпатрулювала}} версію $4 сторінки $3',
-'logentry-newusers-newusers' => 'СÑ\82воÑ\80ено Ð¾Ð±Ð»Ñ\96ковий Ð·Ð°Ð¿Ð¸Ñ\81 $1',
-'logentry-newusers-create' => '$1 — створено обліковий запис',
+'logentry-newusers-newusers' => 'Ð\9eблÑ\96ковий Ð·Ð°Ð¿Ð¸Ñ\81 $1 Ð±Ñ\83в {{GENDER:$2|Ñ\81Ñ\82воÑ\80ений}}',
+'logentry-newusers-create' => 'Обліковий запис для $1 було створено',
 'logentry-newusers-create2' => '$1 {{GENDER:$2|створив|створила}} обліковий запис {{GENDER:$4|користувача|користувачки}} $3',
 'logentry-newusers-byemail' => 'Обліковий запис {{GENDER:$2|користувача|користувачки}} створений {{GENDER:$4|користувачем|користувачкою}} $1 і пароль було надіслано електронною поштою',
 'logentry-newusers-autocreate' => '$1 — автоматично створений обліковий запис',
index 1c5ebd4..b3c6d2e 100644 (file)
@@ -133,8 +133,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Sahifani kuzatuv roʻyxatiga olgan foydalanuvchilar sonini koʻrsatish',
 'tog-oldsig' => 'Joriy imzo:',
 'tog-fancysig' => 'Imzoni viki-belgi qilib koʻrsatish (avtomatik ishoratsiz)',
-'tog-externaleditor' => 'Sukut boʻyicha tashqi tahrirlash dasturidan foydalanish (faqat mutaxassislar uchun, kompyuteringizda maxsus moslamalar boʻlishi zarur. [//www.mediawiki.org/wiki/Manual:External_editors Batafsil])',
-'tog-externaldiff' => 'Sukut boʻyicha tashqi taqqoslash dasturidan foydalanish (faqat mutaxassislar uchun, kompyuteringizda maxsus moslamalar boʻlishi zarur. [//www.mediawiki.org/wiki/Manual:External_editors Batafsil])',
 'tog-showjumplinks' => 'yordamchi "tez oʻtish" havolalarini yoqish',
 'tog-uselivepreview' => 'Tez koʻrib chiqish (JavaScript orqali) (sinovda)',
 'tog-forceeditsummary' => 'Qisqa tavsif oynasi toʻldirilmagani haqida ogohlantirish koʻrsatilsin',
@@ -403,14 +401,14 @@ $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Maqola',
-'nstab-user' => 'Foydalanuvchi sahifasi',
+'nstab-user' => 'Foydalanuvchi',
 'nstab-media' => 'Media sahifasi',
 'nstab-special' => 'Maxsus sahifa',
-'nstab-project' => 'Loyiha haqida',
+'nstab-project' => 'Vikipediya',
 'nstab-image' => 'Fayl',
 'nstab-mediawiki' => 'Xabar',
 'nstab-template' => 'Andoza',
-'nstab-help' => 'Yordam sahifasi',
+'nstab-help' => 'Yordam',
 'nstab-category' => 'Turkum',
 
 # Main script and global functions
@@ -429,7 +427,7 @@ $1',
 'viewsource' => 'Manbasini koʻrish',
 'viewsource-title' => "$1 sahifasining manbasini ko'rish",
 'actionthrottled' => "Tezlik bo'yicha cheklov",
-'protectedpagetext' => 'Bu sahifa tahrirlashdan saqlanish maqsadida qulflangan.',
+'protectedpagetext' => 'Bu sahifa tahrirlash va boshqa oʻzgartirishlar kiritishdan himoyalangan.',
 'viewsourcetext' => 'Siz bu sahifaning manbasini koʻrishingiz va uni nusxasini olishingiz mumkin:',
 'editinginterface' => "'''Diqqat:''' Siz dasturiy ta'minot interfeysi matni mavjud bo'lgan sahifani tahrirlamoqdasiz.
 Uning o'zgartirilishi ushbu vikidagi boshqa foydalanuvchilar uchun ham interfeysning tashqi ko'rinishiga ta'sir qiladi.
@@ -604,7 +602,7 @@ Siz shuningdek bu yozganlaringiz sizniki yoki erkin litsenziya ostida ekanligini
 Bundan tashqari, siz ushbu ma'lumotlarni o'zingiz yozgan bo'lishingiz yoki ruxsat berilgan internet manzilidan yoki shu kabi erkin resursdan nusxa olgan bo'lishingiz lozim (Qo'shimcha ma'lumotlar uchun $1 sahifasiga murojaat qiling).
 '''MUALLIFLIK HUQUQI QO'YILGAN ISHLARNI RUXSATSIZ BU YERGA JOYLASHTIRMANG!'''",
 'templatesused' => 'Ushbu sahifada foydalanilgan {{PLURAL:$1|andoza|andozalar}}:',
-'templatesusedpreview' => "Ushbu ko'rib chiqilayotgan sahifada foydalanilgan {{PLURAL:$1|andoza|andozalar}}:",
+'templatesusedpreview' => 'Ushbu sahifada foydalanilgan {{PLURAL:$1|andoza|andozalar}}:',
 'templatesusedsection' => "Ushbu bo'limda foydalanilgan {{PLURAL:$1|andoza|andozalar}}:",
 'template-protected' => '(himoyalangan)',
 'template-semiprotected' => '(yarim-himoyalangan)',
@@ -615,7 +613,7 @@ Ortga qaytib, mavjud sahifani tahrirlashingiz yoki [[Special:UserLogin|tizimga k
 'sectioneditnotsupported-title' => "Bo'limlarni tahrirlash imkoniyati yo'q",
 'sectioneditnotsupported-text' => "Ushbu sahifada bo'limlarni tahrirlash imkoniyati yo'q.",
 'permissionserrors' => 'Ruxsat huquqida xato',
-'permissionserrorstext-withaction' => "Sizda quyidagi {{PLURAL:$1|sabab|sabablar}}ga ko'ra '''$2'''ga ruxsat mavjud emas:",
+'permissionserrorstext-withaction' => "Sizda quyidagi {{PLURAL:$1|sabab|sabablar}}ga koʻra '''$2'''ga ruxsat mavjud emas:",
 'recreate-moveddeleted-warn' => "'''Diqqat: Siz avval yoʻqotilgan sahifani yana yaratmoqchisiz.'''
 
 Bu sahifani yaratishda davom etishdan avval uning nega avval yoʻqotilgani bilan qiziqib koʻring.
@@ -769,14 +767,6 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'powersearch-togglenone' => 'Hech qaysini',
 'search-external' => 'Tashqi qidiruv',
 
-# Quickbar
-'qbsettings' => 'Saytda harakatlanish darchasi',
-'qbsettings-none' => "Ko'rsatmaslik",
-'qbsettings-fixedleft' => "Qo'zg'almas chap",
-'qbsettings-fixedright' => "Qo'zg'almas o'ng",
-'qbsettings-floatingleft' => 'Suzuvchi chap',
-'qbsettings-floatingright' => "Suzuvchi o'ng",
-
 # Preferences page
 'preferences' => 'Moslamalar',
 'mypreferences' => 'Moslamalarim',
@@ -1082,6 +1072,7 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'speciallogtitlelabel' => 'Moʻljal (nom yoki foydalanuvchi):',
 'log' => 'Qaydlar',
 'all-logs-page' => 'Barcha ochiq qaydlar',
+'logempty' => 'Qaydnomada mos keladigan yozuvlar mavjud emas.',
 'log-title-wildcard' => 'Shu matndan boshlanuvchi sarlavhalarni izlash',
 
 # Special:AllPages
@@ -1440,6 +1431,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'movepage-moved' => '\'\'\'"$1" nomli sahifa "$2" nomli sahifaga koʻchirildi\'\'\'',
 'movepage-moved-redirect' => 'Qayta yo‘naltirish yaratildi.',
 'movedto' => 'quyidagiga qayta nomlandi',
+'movetalk' => 'Mos munozara sahifasini qayta nomlash',
 'movelogpage' => 'Koʻchirish qaydlari',
 'movesubpage' => '{{PLURAL:$1|Ostsahifa|Ostsahifalar}}',
 'movesubpagetext' => 'Ushbu sahifada $1 {{PLURAL:$1| ta ostsahifa}} mavjud.',
@@ -1524,14 +1516,14 @@ Umumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumi
 'tooltip-t-print' => 'Ushbu sahifaning bosma uchun versiyasi',
 'tooltip-t-permalink' => 'Sahifaning ushbu versiyasiga doimiy ishorat',
 'tooltip-ca-nstab-main' => 'Sahifani ko‘rish',
-'tooltip-ca-nstab-user' => "Foydalanuvchi sahifasini ko'rish",
-'tooltip-ca-nstab-media' => "Media sahifasini ko'rish",
+'tooltip-ca-nstab-user' => 'Foydalanuvchi sahifasini koʻrish',
+'tooltip-ca-nstab-media' => 'Media sahifasini koʻrish',
 'tooltip-ca-nstab-special' => 'Bu maxsus sahifa, uni tahrirlay olmaysiz.',
-'tooltip-ca-nstab-project' => "Loyiha sahifasini ko'rish",
-'tooltip-ca-nstab-image' => "Rasm sahifasini ko'rish",
-'tooltip-ca-nstab-mediawiki' => "Tizim xabarini ko'rish",
+'tooltip-ca-nstab-project' => 'Loyiha sahifasini koʻrish',
+'tooltip-ca-nstab-image' => 'Rasm sahifasini koʻrish',
+'tooltip-ca-nstab-mediawiki' => 'MediaWiki tizimining xabarini koʻrish',
 'tooltip-ca-nstab-template' => 'Andozani koʻrish',
-'tooltip-ca-nstab-help' => "Yordam sahifasini ko'rish",
+'tooltip-ca-nstab-help' => 'Yordam sahifasini koʻrish',
 'tooltip-ca-nstab-category' => 'Turkum sahifasini koʻrish',
 'tooltip-minoredit' => 'Kichik o‘zgartirish sifatida belgilash',
 'tooltip-save' => 'Oʻzgarishlarni saqlash',
index 1b20b2f..d0a74c8 100644 (file)
@@ -185,8 +185,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Mostra el numaro de utenti che i ga ła pajina en oservasion',
 'tog-oldsig' => 'Anteprima de ła firma:',
 'tog-fancysig' => 'Interpreta i comandi wiki in te la firma (sensa colegamento automatego)',
-'tog-externaleditor' => "Dopara par default un editor de testo esterno (soło par utenti esperti. Richiede l'uxo de inpostasion particołari sol proprio computer)",
-'tog-externaldiff' => "Dopara par default un programa de diff esterno (soło par utenti esperti. Richiede l'uxo de inpostasion particołari sol proprio computer)",
 'tog-showjumplinks' => 'Ativa i cołegamenti acesibiłi "va a"',
 'tog-uselivepreview' => 'Ativa ła funsion "Line preview" (el dimanda JavaScript; sperimentałe)',
 'tog-forceeditsummary' => "Chiedi conferma se l'ozeto de ła modifega el xé vodo",
@@ -200,6 +198,7 @@ $messages = array(
 'tog-diffonly' => 'No visuałisar el contenuo de ła pajina dopo el confronto tra version',
 'tog-showhiddencats' => 'Mostra łe categorie sconte',
 'tog-norollbackdiff' => 'No mostrare el confronto tra version dopo aver efetuà on rollback',
+'tog-useeditwarning' => 'Dime se sto lassando na pagina de modifica sensa aver salvà',
 
 'underline-always' => 'Senpre',
 'underline-never' => 'Mai',
@@ -569,9 +568,15 @@ Ocio che serte pagine podarìa èssar che ti 'e vedi come se te fussi 'ncora dre
 'welcomecreation-msg' => 'El to nome utente el xe stà creà.
 Nó desmentegarte de personałixare łe [[Special:Preferences|prefarense de {{SITENAME}}]].',
 'yourname' => 'Nome utente:',
+'userlogin-yourname' => 'Nome utente',
+'userlogin-yourname-ph' => 'Inserissi el to nome utente',
 'yourpassword' => 'Password:',
+'userlogin-yourpassword' => 'Password',
+'userlogin-yourpassword-ph' => 'Inserisi ła to password',
 'yourpasswordagain' => 'De novo la password:',
 'remembermypassword' => 'Tiente in mente la password su sto conputer (par un massimo de $1 {{PLURAL:$1|zorno|zorni}})',
+'userlogin-remembermypassword' => 'Tiente in mente chi son',
+'userlogin-signwithsecure' => 'Entra con un server seguro',
 'securelogin-stick-https' => 'Resta tacà par HTTPS dopo èssar entrà',
 'yourdomainname' => 'Spesifegare el dominio',
 'password-change-forbidden' => 'Nó xe posibiłe canbiar ła password so sta wiki.',
@@ -584,12 +589,16 @@ Nó desmentegarte de personałixare łe [[Special:Preferences|prefarense de {{SI
 'logout' => 'Và fora',
 'userlogout' => 'và fora',
 'notloggedin' => 'No te sì entrà col to nome utente',
+'userlogin-noaccount' => 'Gheto mia na utensa?',
+'userlogin-joinproject' => 'Unìssete a {{SITENAME}}',
 'nologin' => "No te sito gnancora iscrito? '''$1'''.",
 'nologinlink' => 'Falo desso',
 'createaccount' => 'Crea un utente novo',
 'gotaccount' => "Sito zà iscrito? '''$1'''.",
 'gotaccountlink' => 'Entra',
 'userlogin-resetlink' => "Desmentegà i to dati d'aceso?",
+'helplogin-url' => 'Help:Login',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Ajuto col login]]',
 'createaccountmail' => 'Dopara na password caxuałe tenporanea e inviała al indiriso e-mail spesifegà cuà soto',
 'createaccountreason' => 'Motivassion:',
 'badretype' => 'Le do password le xe difarenti.',
@@ -680,6 +689,7 @@ Forse te ghè zà canbià la to password o te ghè domandà na password tenporan
 'passwordreset-text' => 'Conpleta sto moduło par riçevare i detaji del to account via posta ełetronega.',
 'passwordreset-legend' => 'Rinposta ła password',
 'passwordreset-disabled' => 'Ła rinpostasion deła password xe stà dixabiłità so sto projeto wiki.',
+'passwordreset-emaildisabled' => 'Le funsionalità de posta eletrònega le xe stà disabilità su sta wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1|| Inserisi una dełe porsion de dati cua soto}}',
 'passwordreset-username' => 'Nome utente:',
 'passwordreset-domain' => 'Dominio',
@@ -914,6 +924,8 @@ La esiste de zà.',
 'content-failed-to-parse' => "Inposibiłe anałixare $2 pa'l modèl $1: $3",
 'invalid-content-data' => 'Dati contegnui nó vałidi',
 'content-not-allowed-here' => 'Contegnùo in "$1" nó consentio inte ła pàjina [[$2]]',
+'editwarning-warning' => 'Se te vè via da sta pagina te podaressi pèrdar tute le modìfeghe che te ghè fato.
+Se te sì loggà, te poli disabilitar sto aviso in te la sezion "{{int:prefs-editing}} de le to preferense.',
 
 # Content models
 'content-model-wikitext' => 'wikitesto',
@@ -1192,15 +1204,7 @@ Prova a métarghe \"all:\" davanti al testo che te serchi par vardar in tuti i n
 'powersearch-togglenone' => 'Nissun',
 'search-external' => 'Riserca esterna',
 'searchdisabled' => 'La riserca interna de {{SITENAME}} no la xe ativa; par intanto te pol proár a doparar un motore de riserca esterno come Google. (Nota però che i contenuti de {{SITENAME}} presenti in sti motori i podarìa èssar mìà agiornà.)',
-
-# Quickbar
-'qbsettings' => 'Settaggio barra menu',
-'qbsettings-none' => 'Nessun',
-'qbsettings-fixedleft' => 'Fisso a sinistra',
-'qbsettings-fixedright' => 'Fisso a destra',
-'qbsettings-floatingleft' => 'Fluttuante a sinistra',
-'qbsettings-floatingright' => 'Fluttuante a destra',
-'qbsettings-directionality' => 'Fiso, a seconda de ła diresion del testo nte ła to lengua',
+'search-error' => 'Se gà verifegà un eror durante la riserca: $1',
 
 # Preferences page
 'preferences' => 'Prefarense',
@@ -1738,7 +1742,6 @@ Par na major sicuressa, img_auth.php el xe disabilità.',
 'http-read-error' => 'Eror de letura HTTP.',
 'http-timed-out' => 'Richiesta HTTP scadùa.',
 'http-curl-error' => "Eror nel recupero de l'URL: $1",
-'http-host-unreachable' => 'URL mìa ragiungibile',
 'http-bad-status' => 'Ghe xe stà un problema durante la richiesta HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1892,6 +1895,12 @@ Probabilmente te vui modifegar ła descrision prexente inte ła [$2 pàjina de d
 Łe podaria dover puntar a na pàjina pì apropià.<br />
 Vien considerae pàjine de dixanbiguasion tute cuełe che łe ga drento i modełi elencai in [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Pagine co na proprietà de pagina',
+'pageswithprop-legend' => 'Pagine co na proprietà de pagina',
+'pageswithprop-text' => 'Sta pagina la elenca le pagine che dòpara na particolare proprietà de pagina.',
+'pageswithprop-prop' => 'Nome proprietà:',
+'pageswithprop-submit' => 'Và',
+
 'doubleredirects' => 'Redirect dopi',
 'doubleredirectstext' => 'Sta pagina le elenca pagine che rimanda a altre pagine de rimando.
 Ogni riga la contien dei colegamenti al primo e al secondo rimando, oltre a la destinassion del secondo rimando, che de solito la xe la "vera" pagina de destinassion, a cui dovarìa pontar el primo rimando.
@@ -2054,15 +2063,6 @@ Xe nesesario almanco un dominio de primo liveło, tipo "*.org".<br />
 'listusers-noresult' => 'Nissun utente el risponde ai criteri inpostà.',
 'listusers-blocked' => '(blocà)',
 
-# Special:ActiveUsers
-'activeusers' => 'Lista dei utenti ativi',
-'activeusers-intro' => 'Sta qua xe la lista dei utenti che ga fato calcossa {{PLURAL:$1|sto ultimo zorno|sti ultimi $1 zorni}}.',
-'activeusers-count' => "$1 {{PLURAL:$1|asion}} {{PLURAL:$3|inte'l ultimo xorno|inte i ultimi $3 xorni}}",
-'activeusers-from' => 'Fà védar i utenti a partir da:',
-'activeusers-hidebots' => 'Scondi i bot',
-'activeusers-hidesysops' => 'Scondi i aministradori',
-'activeusers-noresult' => 'Nissun utente catà.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Diriti dei grupi utenti',
 'listgrouprights-summary' => 'Sta qua la xe na lista dei grupi de utenti definìi su sta wiki, coi diriti asocià a ognuno.
@@ -2540,6 +2540,7 @@ Qua soto ghe xe el registro de le sopression:',
 'proxyblocksuccess' => 'Fatto.',
 'sorbsreason' => 'Sto indirizo IP el xe elencà come proxy verto ne la lista nera DNSBL doparà da {{SITENAME}}.',
 'sorbs_create_account_reason' => 'No se pol crear acessi novi da sto indirizo IP parché el xe elencà come proxy verto ne la lista nera DNSBL doparà da {{SITENAME}}.',
+'xffblockreason' => "Un indiriso IP presente ne l'intestasion X-Forwarded-For, tuo o del server proxy che te sì drio doparar, el xe stà blocà. La motivasion originale del bloco la xe: $1",
 'cant-block-while-blocked' => 'No se pode blocar altri utenti finché se xe blocài.',
 'cant-see-hidden-user' => "L'utente che te vol blocar el xe zà stà blocà e sconto. Sicome a no te ghè mia i diriti de hideuser, no te pol mia védar o canbiar el bloco de l'utente.",
 'ipbblocked' => 'No te pui blocare o sblocare altri utenti, parché ti steso te si blocà',
@@ -2886,6 +2887,7 @@ Questo xe probabilmente dovùo a la presenza de un colegamento a un sito foresto
 'pageinfo-robot-noindex' => 'Mia indicizabile',
 'pageinfo-views' => 'Nùmaro de visite',
 'pageinfo-watchers' => "Nùmaro de utenti che tien d'ocio sta pagina",
+'pageinfo-few-watchers' => 'Manco de $1 {{PLURAL:$1|oservador|oservadori}}',
 'pageinfo-redirects-name' => 'Rimandi verso sta pagina',
 'pageinfo-subpages-name' => 'Sotopagine de sta pagina',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|rimandi}}; $3 {{PLURAL:$3|no rimandi}})',
@@ -3706,14 +3708,16 @@ Le imagini le vien mostrà a la risoluzion pi granda che se pol, par i altri tip
 'htmlform-submit' => 'Manda',
 'htmlform-reset' => 'Scancèla modifiche',
 'htmlform-selectorother-other' => 'Altro',
+'htmlform-no' => 'No',
+'htmlform-yes' => 'Sì',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 con la possibilità de riserca completa nel testo',
 'sqlite-no-fts' => '$1 sensa la possibilità de riserca completa nel testo',
 
 # New logging system
-'logentry-delete-delete' => '$1 ga scansełà ła pajina $3',
-'logentry-delete-restore' => '$1 ga ripristinà "$3"',
+'logentry-delete-delete' => '$1 {{GENDER:$2|el|la}} ga scansełà ła pajina $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|el|la}} ga ripristinà "$3"',
 'logentry-delete-event' => '$1 ga canbià ła vixibiłità de {{PLURAL:$5|n\'asion del registro|$5 asion del registro}} de "$3": $4',
 'logentry-delete-revision' => '$1 ga canbià ła vixibiłità de {{PLURAL:$5|na revixion|$5 revixion}} de ła pajina"$3": $4',
 'logentry-delete-event-legacy' => '$1 ga canbià ła vixibiłità de calche asion del registro de "$3"',
@@ -3819,4 +3823,7 @@ Le imagini le vien mostrà a la risoluzion pi granda che se pol, par i altri tip
 'duration-centuries' => '$1 {{PLURAL:$1|secolo|secoli}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenio|mileni}}',
 
+# Image rotation
+'rotate-comment' => 'Imagine girà de $1 {{PLURAL:$1|grado|gradi}} in senso orario',
+
 );
index 3a2a991..bdc04b1 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Apple
  * @author Arisa
+ * @author Cheers!
  * @author DHN
  * @author Kaganer
  * @author Minh Nguyen
@@ -330,8 +331,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Hiển thị số người đang xem',
 'tog-oldsig' => 'Chữ ký hiện tại:',
 'tog-fancysig' => 'Xem chữ ký là mã wiki (không có liên kết tự động)',
-'tog-externaleditor' => 'Mặc định dùng trình soạn thảo bên ngoài (chỉ dành cho người thành thạo, cần thiết lập đặc biệt trên máy tính của bạn; [//www.mediawiki.org/wiki/Manual:External_editors?uselang=vi chi tiết])',
-'tog-externaldiff' => 'Mặc định dùng trình so sánh bên ngoài (chỉ dành cho người thành thạo, cần thiết lập đặc biệt trên máy tính của bạn; [//www.mediawiki.org/wiki/Manual:External_editors?uselang=vi chi tiết])',
 'tog-showjumplinks' => 'Bật liên kết “bước tới” trên đầu trang cho bộ trình duyệt thuần văn bản hay âm thanh',
 'tog-uselivepreview' => 'Xem thử trực tiếp (JavaScript; chưa ổn định)',
 'tog-forceeditsummary' => 'Nhắc tôi khi tôi quên tóm lược sửa đổi',
@@ -346,6 +345,7 @@ $messages = array(
 'tog-showhiddencats' => 'Hiển thị thể loại ẩn',
 'tog-noconvertlink' => 'Tắt liên kết chuyển đổi tựa đề',
 'tog-norollbackdiff' => 'Không so sánh sau khi lùi sửa',
+'tog-useeditwarning' => 'Cảnh báo khi tôi thoát trang sửa đổi mà chưa lưu trang',
 
 'underline-always' => 'Luôn luôn',
 'underline-never' => 'Không bao giờ',
@@ -711,9 +711,15 @@ Bạn có thể tiếp tục dùng {{SITENAME}} một cách vô danh, hoặc b
 'welcomecreation-msg' => 'Tài khoản của bạn đã được mở.
 Hãy nhớ thay đổi [[Special:Preferences|tùy chọn cá nhân {{SITENAME}}]] của bạn.',
 'yourname' => 'Tên người dùng:',
+'userlogin-yourname' => 'Tên đăng nhập',
+'userlogin-yourname-ph' => 'Nhập tên đăng nhập',
 'yourpassword' => 'Mật khẩu:',
+'userlogin-yourpassword' => 'Mật khẩu',
+'userlogin-yourpassword-ph' => 'Nhập mật khẩu',
 'yourpasswordagain' => 'Gõ lại mật khẩu',
 'remembermypassword' => 'Nhớ thông tin đăng nhập của tôi trên máy tính này (cho đến $1 ngày)',
+'userlogin-remembermypassword' => 'Nhớ thông tin đăng nhập của tôi',
+'userlogin-signwithsecure' => 'Đăng nhập bằng máy chủ an toàn',
 'securelogin-stick-https' => 'Giữ kết nối với HTTPS sau khi đăng nhập',
 'yourdomainname' => 'Tên miền của bạn:',
 'password-change-forbidden' => 'Bạn không thể đổi mật khẩu trên wiki này.',
@@ -726,12 +732,16 @@ Hãy nhớ thay đổi [[Special:Preferences|tùy chọn cá nhân {{SITENAME}}]
 'logout' => 'Đăng xuất',
 'userlogout' => 'Đăng xuất',
 'notloggedin' => 'Chưa đăng nhập',
+'userlogin-noaccount' => 'Bạn chưa có tài khoản?',
+'userlogin-joinproject' => 'Tham gia {{SITENAME}}',
 'nologin' => "Bạn chưa có tài khoản ở đây? '''$1'''.",
 'nologinlink' => 'Mở tài khoản mới',
 'createaccount' => 'Mở tài khoản',
 'gotaccount' => "Đã mở tài khoản rồi? '''$1'''.",
 'gotaccountlink' => 'Đăng nhập',
 'userlogin-resetlink' => 'Quên mất thông tin đăng nhập?',
+'helplogin-url' => 'Help:Đăng nhập',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Trợ giúp đăng nhập]]',
 'createaccountmail' => 'Sử dụng mật khẩu ngẫu nhiên tạm và gửi nó cho địa chỉ thư điện tử được chỉ định ở dưới',
 'createaccountreason' => 'Lý do:',
 'badretype' => 'Hai mật khẩu không khớp.',
@@ -819,6 +829,7 @@ Có thể bạn đã thay đổi thành công mật khẩu của mình hoặc đ
 'passwordreset-text' => 'Hãy điền mẫu đơn này để tái tạo mật khẩu.',
 'passwordreset-legend' => 'Tái tạo mật khẩu',
 'passwordreset-disabled' => 'Chức năng tái tạo mật khẩu đã bị tắt trên wiki này.',
+'passwordreset-emaildisabled' => 'Tính năng gửi thư điện tử không được kích hoạt trên wiki này.',
 'passwordreset-pretext' => '{{PLURAL:$1||Nhập một trong những thông tin được yêu cầu ở dưới}}',
 'passwordreset-username' => 'Tên người dùng:',
 'passwordreset-domain' => 'Tên miền:',
@@ -1064,6 +1075,8 @@ Nó đã tồn tại.',
 'content-failed-to-parse' => 'Thất bại phân tích nội dung $2 cho mô hình $1: $3',
 'invalid-content-data' => 'Dữ liệu nội dung không hợp lệ',
 'content-not-allowed-here' => 'Không cho phép đưa nội dung “$1” vào trang [[$2]]',
+'editwarning-warning' => 'Rời khỏi trang này sẽ khiến bạn mất các sửa đổi đã thực hiện.
+Nếu đã đăng nhập, bạn có thể tắt cảnh báo này tại mục “{{int:prefs-editing}}” trong tùy chọn cá nhân.',
 
 # Content models
 'content-model-wikitext' => 'mã wiki',
@@ -3215,8 +3228,6 @@ Các liên kết sau đó trên cùng một dòng được xem là các ngoại
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => 'Giản thể',
@@ -4037,6 +4048,8 @@ Các hình ảnh được hiển thị ở kích thước tối đa, còn các l
 'htmlform-submit' => 'Đăng',
 'htmlform-reset' => 'Hủy các thay đổi',
 'htmlform-selectorother-other' => 'Khác',
+'htmlform-no' => 'Không',
+'htmlform-yes' => 'Có',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 với sự hỗ trợ tìm kiếm toàn văn',
index cd26458..d8ff874 100644 (file)
@@ -94,8 +94,6 @@ $messages = array(
 'tog-shownumberswatching' => 'Igpakita an ihap han mga nangingita nga mga nagamit',
 'tog-oldsig' => 'Aada nga pirma:',
 'tog-fancysig' => 'Tratuha it pirma komo uska wikitext (nga waray automatiko nga sumpay)',
-'tog-externaleditor' => 'Gamit hin ha-gawas nga pagliwat ha default (ha mga experto la ini, nakinahanglan hin mga pinaurog nga mga seting ha imo kompyuter. [//www.mediawiki.org/wiki/Manual:External_editors More information.]  )',
-'tog-externaldiff' => 'Gamit hin ha-gawas nga diff ha default (ha mga experto la, nakinahanglan hin mga pinaurog nga mga seting ha imo kompyuter.  [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
 'tog-showjumplinks' => 'Enable "jump to" accessibility links',
 'tog-uselivepreview' => 'Gamita an buhi nga pahiuna nga pagawas (nagkikinahanglan hin JavaScript) (eksperimental)',
 'tog-forceeditsummary' => 'Pasabti ako kun waray ko ginsurat ha dalikyat-nga-tigaman han pagliwat (edit summary)',
@@ -847,14 +845,6 @@ Diri mo ini malalabtan.',
 Pamilnga la anay pinaagi ha Google ha pagkayana.
 Ginpapasabot nga an sulod han mga panudlok han {{SITENAME}} in bangin daan an.',
 
-# Quickbar
-'qbsettings' => 'Quickbar',
-'qbsettings-none' => 'Waray',
-'qbsettings-fixedleft' => 'Ginayad an wala',
-'qbsettings-fixedright' => 'Gin-ayad an to-o',
-'qbsettings-floatingleft' => 'Nalutaw pawala',
-'qbsettings-floatingright' => 'Nalutaw pato-o',
-
 # Preferences page
 'preferences' => 'Mga karuyag',
 'mypreferences' => 'Mga akon karuyag',
@@ -1213,7 +1203,6 @@ $1',
 'http-read-error' => 'HTTP maysayop ha pagbasa.',
 'http-timed-out' => 'Naubosan hin oras ha pagpaalayon ha HTTP.',
 'http-curl-error' => 'May sayop ha pagkuha hin URL: $1',
-'http-host-unreachable' => 'Diri nakakaabot ha URL.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Diri nakakaabot ha URL',
index 6313f30..fe51e6e 100644 (file)
@@ -47,8 +47,6 @@ $messages = array(
 'tog-shownumberswatching' => '显示监控此页个用户数目',
 'tog-oldsig' => '现在签名个预览:',
 'tog-fancysig' => '拿签名当成wiki文本(弗产生自动链接)',
-'tog-externaleditor' => '默认使用外部编辑器(仅供高手使用,需要来许电脑上作出特殊设置)',
-'tog-externaldiff' => '默认使用外部分析(仅供高手使用,需要来许电脑上作出特殊设置)',
 'tog-showjumplinks' => '启用“跳转”链接',
 'tog-uselivepreview' => '使用实时预览(Javascript)(试验)',
 'tog-forceeditsummary' => '编辑摘要为空个辰光提醒我',
index 8a7c25b..d56591f 100644 (file)
@@ -224,10 +224,6 @@ $messages = array(
 'tog-shownumberswatching' => 'ווייזן דעם נומער פון בלאט אויפֿפאסערס',
 'tog-oldsig' => 'איצטיגער אונטערשריפֿט:',
 'tog-fancysig' => 'באַהאַנדלן  אונטערשריפט אַלס וויקיטעקסט (אָן אויטאמאטישן לינק)',
-'tog-externaleditor' => 'ניצן א דרויסנדיגן רעדאקטירער גרונטלעך (נאר פֿאר מומחים, דאס פֿאדערט באזונדערע קאמפיוטער שטעלונגען).
-[//www.mediawiki.org/wiki/Manual:External_editors ווײַטערע אינפֿארמאַציע.]',
-'tog-externaldiff' => 'ניצן א דרויסנדיגן פֿאַרגלײַכער גרונטלעך (נאר פֿאר מומחים, דאס פֿאדערט באזונדערע קאמפיוטער שטעלונגען)
-[//www.mediawiki.org/wiki/Manual:External_editors ווײַטערע אינפֿארמאַציע.]',
 'tog-showjumplinks' => 'באמעגלעך צוטריט לינקס פון "שפרינג צו"',
 'tog-uselivepreview' => 'באנוצט זיך מיט לייוו פאראויסדיגע ווייזונג (JavaScript) (עקספירענמעטל)',
 'tog-forceeditsummary' => 'ווארן מיך ווען איך לייג א ליידיג קורץ ווארט ענדערונג',
@@ -241,6 +237,7 @@ $messages = array(
 'tog-diffonly' => 'ווייז נישט אינהאלט אונטער די דיפערענץ',
 'tog-showhiddencats' => 'ווײַז באהאלטענע קאטעגאריעס',
 'tog-norollbackdiff' => 'היפט איבער ווײַזן אונטערשייד נאכן אויספֿירן א צוריקדריי',
+'tog-useeditwarning' => 'שטעלן א ווארענונג ווען איך לאז איבער א רעדאקטירונג בלאט מיט נישט אויפגעהיטענע ענדערונגען',
 
 'underline-always' => 'אייביג',
 'underline-never' => 'קיינמאל',
@@ -614,9 +611,15 @@ $2',
 'welcomecreation-msg' => "מ'האט געשאפן אייער קאנטע.
 פארגעסט נישט צו ענדערן אייערע [[Special:Preferences|{{SITENAME}} פרעפערענצן]].",
 'yourname' => 'באַניצער נאָמען:',
+'userlogin-yourname' => 'באַניצער נאָמען',
+'userlogin-yourname-ph' => 'גיט אריין אייער באניצער נאמען',
 'yourpassword' => 'פאסווארט',
+'userlogin-yourpassword' => 'פאַסווארט',
+'userlogin-yourpassword-ph' => 'אַרײַנגעבן אײַער פאַסווארט',
 'yourpasswordagain' => 'ווידער אריינקלאפן פאסווארט',
 'remembermypassword' => 'געדיינק מײַן אַרײַנלאגירן אויף דעם קאמפיוטער (ביז  $1 {{PLURAL:$1|טאָג|טעג}})',
+'userlogin-remembermypassword' => 'געדענק מיך',
+'userlogin-signwithsecure' => 'איינשרייבן מיט זיכערן סארווער',
 'securelogin-stick-https' => 'בלייַבן פארבונדן צו HTTPS נאָכן ארײַנלאָגירן',
 'yourdomainname' => 'אײַער געביט:',
 'password-change-forbidden' => 'איר קען נישט ענדערן פאסווערטער אויף דער וויקי.',
@@ -629,12 +632,16 @@ $2',
 'logout' => 'אַרױסלאָגירן',
 'userlogout' => 'אַרױסלאָגירן',
 'notloggedin' => 'נישט איינגעשריבן',
+'userlogin-noaccount' => 'איר האט נישט קיין קאנטע?',
+'userlogin-joinproject' => 'איינטרעטן ביי {{SITENAME}}',
 'nologin' => "איר האט נישט קיין קאנטע? '''$1'''.",
 'nologinlink' => 'שאַפֿן אַ קאנטע',
 'createaccount' => 'שאַפֿן אַ נײַע קאנטע',
 'gotaccount' => "האסטו שוין א קאנטע? '''$1'''.",
 'gotaccountlink' => 'אַרײַנלאגירן',
 'userlogin-resetlink' => 'פארגעסן אײַערע אַרײַנלאָגירן פרטים?',
+'helplogin-url' => 'Help:אריינלאגירן',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|הילף מיט אריינלאגירן]]',
 'createaccountmail' => 'ניצן א פראוויזאריש פאסווארט און שיקן צום ע-פאסט אדרעס געצייכנט אונטן',
 'createaccountreason' => 'אורזאַך:',
 'badretype' => 'די פאסווערטער וואס איר האט אריינגעלייגט זענען נישט אייניג.',
@@ -737,6 +744,7 @@ $2',
 'passwordreset-text' => 'דערגאַנצט די פאָרעם צוריקצושטעלן אײַער פאַסווארט.',
 'passwordreset-legend' => 'צוריקשטעלן פאַסווארט',
 'passwordreset-disabled' => 'מען האט אומאַקטיוויטר צוריקשטעלן פאַסווערטער אויף דער וויקי.',
+'passwordreset-emaildisabled' => 'ע-פאסט דינסטן זענען געווארן אומאקטיווירט אויף דער דאזיקער וויקי.',
 'passwordreset-pretext' => '{{PLURAL:$1| | קלאַפט אַרײַן איינע פֿון די דאַטן אונטן}}',
 'passwordreset-username' => 'באַניצער נאָמען:',
 'passwordreset-domain' => 'דאמען:',
@@ -766,7 +774,7 @@ $2
 פראוויזארישער פּאַראָל: $2',
 'passwordreset-emailsent' => "מ'האט געשיקט א פאסווארט צוריקשטעלן ע-פּאָסט.",
 'passwordreset-emailsent-capture' => 'מען האט געשיקט א פאסווארט צוריקשטעלן בליצבריוו, וואס ווערט געוויזן אונטן.',
-'passwordreset-emailerror-capture' => 'מען האט געשאפן א פאסווארט צוריקשטעלן בליצבריוו, וואס ווערט געוויזן אונטן, אבער שיקן צום באניצער איז דורכגעפאלן: $1',
+'passwordreset-emailerror-capture' => 'מען האט געשאפן א פאסווארט צוריקשטעלן בליצבריוו, וואס ווערט געוויזן אונטן, אבער שיקן צום {{GENDER:$2|באניצער}}איז דורכגעפאלן: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'ענדערן ע-פּאָסט אַדרעס',
@@ -987,6 +995,8 @@ $2
 'content-failed-to-parse' => 'פארזן $2 אינהאלט פאר $1 מאדעל דורכגעפאלן: $3',
 'invalid-content-data' => 'אומגילטיקע אינהאלט דאטן',
 'content-not-allowed-here' => '"$1" אינהאלט נישט דערלויבט אויף בלאט [[$2]]',
+'editwarning-warning' => 'איבערלאזן דעם בלאט קען גורם זײַן פֿארלירן אײַערע ענדערונגען.
+אויב איר זענט ארײַנלאגירט, קענט איר מבטל זײַן די דאזיגע ווארענונג אין דער "{{int:prefs-editing}}" אפטיילונג פון אײַערע פרעפערענצן.',
 
 # Content models
 'content-model-wikitext' => 'וויקיטעקסט',
@@ -1269,15 +1279,6 @@ $1",
 צווישנצײַט קענט איר זוכן מיט גוגל.
 געב אכט אז ס'איז מעגלעך אַז זייער אינדעקס פֿון {{SITENAME}} אינהאַלט איז אפשר פֿאַרעלטערט.",
 
-# Quickbar
-'qbsettings' => 'גיכפאַס',
-'qbsettings-none' => 'גארנישט',
-'qbsettings-fixedleft' => 'קבוע לינקס',
-'qbsettings-fixedright' => 'קבוע רעכטס',
-'qbsettings-floatingleft' => 'שווימנדיג לינקס',
-'qbsettings-floatingright' => 'שווימנדיג רעכטס',
-'qbsettings-directionality' => 'פֿעסט, אפהענגיק אויף דער שריפֿט ריכטונג פֿון אײַער שפראַך.',
-
 # Preferences page
 'preferences' => 'פרעפֿערענצן',
 'mypreferences' => 'פּרעפֿערענצן',
@@ -1774,7 +1775,6 @@ $1",
 'http-read-error' => 'HTTP לייענען גרײַז.',
 'http-timed-out' => 'HTTP בקשה אויסגעגאַנגען.',
 'http-curl-error' => 'גרײַז בײַם ברענגען URL: $1',
-'http-host-unreachable' => "מ'קען נישט דערגרייכן דעם URL",
 'http-bad-status' => "ס'איז געווען א פראבלעם ביים HTTP פֿאַרלאַנג: $1 $2",
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3602,6 +3602,7 @@ $5
 'version-version' => '(ווערסיע $1)',
 'version-license' => 'ליצענץ',
 'version-poweredby-others' => 'אַנדערע',
+'version-credits-summary' => 'מיר ווילן אנערקענען די פֿאלגנדע מענטשן פֿאר זייער בײַשטײַערוג צו [[Special:Version|מעדיעוויקי]].',
 'version-software' => 'אינסטאַלירט ווייכוואַרג',
 'version-software-product' => 'פראדוקט',
 'version-software-version' => 'ווערסיע',
@@ -3700,6 +3701,8 @@ $5
 'htmlform-submit' => 'אײַנגעבן',
 'htmlform-reset' => 'צוריקשטעלן ענדערונגען',
 'htmlform-selectorother-other' => 'אַנדער',
+'htmlform-no' => 'ניין',
+'htmlform-yes' => 'יא',
 
 # SQLite database support
 'sqlite-has-fts' => '$1 מיט פולן-טעקסט זוכן שטיץ',
index 47d8d0f..84906b9 100644 (file)
@@ -83,8 +83,6 @@ $messages = array(
 'tog-shownumberswatching' => "S'àfihàn iye àwọn oníṣe tí wọn tẹjú mọ́ọ",
 'tog-oldsig' => 'Ìtọwọ́bọ̀wé tówà:',
 'tog-fancysig' => 'Ṣe ìtọwọ́bọ̀wé bíi ìkọ wiki (láìní ìjápọ̀ fúnrararẹ̀)',
-'tog-externaleditor' => 'Lo aláàtúnṣe ọ̀tọ̀ látìbẹ̀rẹ̀ (fún àwọn tó mọ̀ nìkan, ìtò ọ̀tọ̀ọ̀tọ̀ pọndandan lórí kọ̀mpútà yín. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
-'tog-externaldiff' => 'Lo awoìyàtò ọ̀tọ̀ látìbẹ̀rẹ̀ (fún àwọn tó mọ̀ nìkan, ìtò ọ̀tọ̀ọ̀tọ̀ pọndandan lórí kọ̀mpútà yín. [//www.mediawiki.org/wiki/Manual:External_editors Ìfọ̀rọ̀tónilétí mìhínhìn.])',
 'tog-showjumplinks' => 'Ìgbàláyè "fò lọ sí" àwọn ìjápọ̀ ìṣeégbà',
 'tog-uselivepreview' => 'Ìlo àkọ́kọ́yẹ̀wò lẹ́ṣẹ̀kẹṣẹ̀ (JavaScript pọndandan) (aládànhánwò)',
 'tog-forceeditsummary' => 'Kìlọ̀ fún mi tí àkótán àtúnṣe bá jẹ́ òfo',
@@ -98,6 +96,7 @@ $messages = array(
 'tog-diffonly' => 'Kò gbọdọ̀ ṣàfihàn àkóónú ojúewé lábẹ́ àwọn ìyàtọ̀',
 'tog-showhiddencats' => "Ṣ'àfihàn àwọn ẹ̀ka pípamọ́",
 'tog-norollbackdiff' => 'Fo ìyàtọ̀ lẹ́yín síṣe ìyísẹ́yìn',
+'tog-useeditwarning' => 'Kìlọ̀ fún mi tí mo bá únkúrò ní ojúewé àtúnṣe láì tíì mupamọ́',
 
 'underline-always' => 'Nígbà gbogbo',
 'underline-never' => 'Rárá',
@@ -842,6 +841,8 @@ Kò ṣe àlàyé kankan.',
 'content-failed-to-parse' => 'Ìkùnà láti ṣàtúwò àkóónú $2 fún àfijúwe $1: $3',
 'invalid-content-data' => 'Àkóónú dátà tí kò yẹ',
 'content-not-allowed-here' => 'Àkóónú "$1" kò ní ìyọ̀nda lórí ojúewé [[$2]]',
+'editwarning-warning' => 'Kíkúrò ní ojúewé yìí yíò jẹ́ kí ẹ pòfo àwọn àtúnṣe tí ẹ ti ṣe.
+Tó bá jẹ́ pé ẹ ti wọlé, ẹ lè dẹ́kun ìkìlọ̀ yìí nínù abala "Àtúnṣe ṣíṣe" ti àwọn ìfẹ́ràn yín.',
 
 # Content models
 'content-model-wikitext' => 'ìkọ̀rọ̀ wiki',
@@ -1130,15 +1131,6 @@ Kò ṣe é bòmọ́lẹ̀.',
 Ní báyìí ná ẹ le ṣàwárí lọ́dọ̀ Google.
 Àkíyèsí pé àwọn atọ́ka wọn fún àkóónú {{SITENAME}} le mọ́ jẹ́ tuntun.',
 
-# Quickbar
-'qbsettings' => 'Pẹpẹ ìṣárémúlò',
-'qbsettings-none' => 'Ìkankan',
-'qbsettings-fixedleft' => 'Kíkàn sí òsì',
-'qbsettings-fixedright' => 'Kíkàn sí ọ̀tún',
-'qbsettings-floatingleft' => 'Léfòó sí òsì',
-'qbsettings-floatingright' => 'Léfòó sí ọ̀tún',
-'qbsettings-directionality' => 'Fi sí ẹ̀gbẹ́, gẹ́gẹ́ bí ìdojúkọ lẹ́tà-ọ̀rọ̀ èdè yín bá ṣe rí',
-
 # Preferences page
 'preferences' => 'Àwọn ìfẹ́ràn',
 'mypreferences' => 'Àwọn ìfẹ́ràn',
@@ -1693,7 +1685,6 @@ Fún àbò kúnkún, img_auth.php ti jẹ́ dídálẹ́kun.',
 'http-read-error' => 'Àṣìṣe kíkà HTTP.',
 'http-timed-out' => 'Àsìkò ìtọrọ HTTP ti tán.',
 'http-curl-error' => 'Àsìṣe ìmúwá URL: $1',
-'http-host-unreachable' => 'Kò le dé ibi URL.',
 'http-bad-status' => 'Ìṣòro kan ṣẹlẹ̀ nìgbà ìtọrọ HTTP: $1, $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2016,15 +2007,6 @@ Orúkọ ibiàyè pọndandan, fún àpẹrẹ "*.org".<br />
 'listusers-noresult' => 'Kò rí oníṣe kankan.',
 'listusers-blocked' => '(dídínà)',
 
-# Special:ActiveUsers
-'activeusers' => 'Àtòjọ àwọn oníṣe aláàgbéṣe',
-'activeusers-intro' => 'Èyí ni àtòjọ àwọn oníṣe tí wọ́n ní irú àgbéṣe kan láàrin {{PLURAL:$1|ọjọ́|ọjọ́}} $1 sẹ́yìn.',
-'activeusers-count' => '{{PLURAL:$1|Àtúnṣe|Àwọn àtúnṣe}} $1 ní {{PLURAL:$3|ọjọ́|ọjọ́}} $3 sẹ́yìn',
-'activeusers-from' => 'Ìfihàn àwọn oníṣe nípa bíbẹ̀rẹ̀ láti:',
-'activeusers-hidebots' => 'Ìbòmọ́lẹ̀ àwọn bọt',
-'activeusers-hidesysops' => 'Ìbòmọ́lẹ̀ àwọn olùmójútó',
-'activeusers-noresult' => 'Kò rí oníṣe kankan.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Àwọn ẹ̀tọ́ ẹgbẹ́ oníṣe',
 'listgrouprights-summary' => 'Nísàlẹ̀ ni àtòjọ àwọn ẹgbẹ́ oníṣe tó nítumọ̀ lórí wiki yìí, pẹ̀lú àwọn ẹ̀tọ́ lílò wọn.
index 7cbdcdf..c21464d 100644 (file)
@@ -42,6 +42,7 @@
  * @author Mark85296341
  * @author MarkAHershberger
  * @author Mys 721tx
+ * @author Nemo bis
  * @author O
  * @author Onecountry
  * @author PhiLiP
@@ -376,9 +377,7 @@ $messages = array(
 'tog-enotifrevealaddr' => '在通知电子邮件中显示我的电子邮件地址',
 'tog-shownumberswatching' => '显示监视用户数',
 'tog-oldsig' => '当前签名:',
-'tog-fancysig' => '将签名以wiki文本对待(不产生自动链接)',
-'tog-externaleditor' => '默认使用外部编辑器(供高级用户使用,需要在您的计算机上做特别设置。[//www.mediawiki.org/wiki/Manual:External_editors 更多信息。])',
-'tog-externaldiff' => '默认使用外部版本差异工具(供高级用户使用,需要在您的计算机上做特别设置。[//www.mediawiki.org/wiki/Manual:External_editors 更多信息。])',
+'tog-fancysig' => '将签名视为wiki代码(不自动生成链接)',
 'tog-showjumplinks' => '启用“跳转到”访问链接',
 'tog-uselivepreview' => '使用实时预览(需要JavaScript)(实验功能)',
 'tog-forceeditsummary' => '未输入编辑摘要时提醒我',
@@ -389,10 +388,11 @@ $messages = array(
 'tog-watchlisthideanons' => '在监视列表中隐藏匿名用户',
 'tog-watchlisthidepatrolled' => '在监视列表中隐藏已巡查的编辑',
 'tog-ccmeonemails' => '把我给其他用户发送的电子邮件的副本发送给我',
-'tog-diffonly' => '比较版本差异时不显示页面内容',
+'tog-diffonly' => '不在版本差异下面显示页面内容',
 'tog-showhiddencats' => '显示隐藏分类',
 'tog-noconvertlink' => '停用链接文字转换',
 'tog-norollbackdiff' => '执行回退后不显示差异',
+'tog-useeditwarning' => '如在更改未保存时离开页面,则发出警告',
 
 'underline-always' => '总是使用',
 'underline-never' => '从不使用',
@@ -517,7 +517,7 @@ $messages = array(
 
 'navigation-heading' => '导航菜单',
 'errorpagetitle' => '错误',
-'returnto' => '返回$1。',
+'returnto' => '返回$1。',
 'tagline' => '来自{{SITENAME}}',
 'help' => '帮助',
 'search' => '搜索',
@@ -613,7 +613,7 @@ $1',
 'youhavenewmessages' => '你有$1($2)。',
 'newmessageslink' => '新信息',
 'newmessagesdifflink' => '最后更改',
-'youhavenewmessagesfromusers' => 'ä½ æ\9c\89æ\9d¥è\87ª{{PLURAL:$3|å\8f¦ä¸\80ä½\8d用户|$3个用户}}的$1($2)。',
+'youhavenewmessagesfromusers' => 'ä½ æ\9c\89æ\9d¥è\87ª{{PLURAL:$3|å\85¶ä»\96用户|$3个用户}}的$1($2)。',
 'youhavenewmessagesmanyusers' => '你有来自多个用户的$1($2)。',
 'newmessageslinkplural' => '{{PLURAL:$1|一条新信息|新信息}}',
 'newmessagesdifflinkplural' => '最后{{PLURAL:$1|更改}}',
@@ -756,9 +756,15 @@ $2',
 'welcomeuser' => '欢迎,$1!',
 'welcomecreation-msg' => '你的账户已创建。请不要忘记更改你的[[Special:Preferences|{{SITENAME}}系统设置]]。',
 'yourname' => '用户名:',
+'userlogin-yourname' => '用户名',
+'userlogin-yourname-ph' => '输入您的用户名',
 'yourpassword' => '密码:',
+'userlogin-yourpassword' => '密码',
+'userlogin-yourpassword-ph' => '输入您的密码',
 'yourpasswordagain' => '再次输入密码:',
 'remembermypassword' => '在该浏览器保存我的登录状态(最长$1日)',
+'userlogin-remembermypassword' => '记住我',
+'userlogin-signwithsecure' => '通过安全服务器登入',
 'securelogin-stick-https' => '登录后继续使用HTTPS连接',
 'yourdomainname' => '您的域名:',
 'password-change-forbidden' => '您不能在本wiki上更改密码。',
@@ -771,12 +777,16 @@ $2',
 'logout' => '退出',
 'userlogout' => '退出',
 'notloggedin' => '未登录',
+'userlogin-noaccount' => '还没有账号吗?',
+'userlogin-joinproject' => '加入{{SITENAME}}',
 'nologin' => '没有账户?$1。',
 'nologinlink' => '创建账户',
 'createaccount' => '创建账户',
 'gotaccount' => '已经拥有账户?请$1。',
 'gotaccountlink' => '登录',
 'userlogin-resetlink' => '忘记了你的登录信息?',
+'helplogin-url' => 'Help:登入',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|登录说明]]',
 'createaccountmail' => '使用一个临时的随机密码,并将它发送到以下指定的电子邮件地址',
 'createaccountreason' => '原因:',
 'badretype' => '您所输入的密码并不相同。',
@@ -862,6 +872,7 @@ $2',
 'passwordreset-text' => '完成该表格以重设你的密码。',
 'passwordreset-legend' => '重置密码',
 'passwordreset-disabled' => '此wiki已经禁用密码重置。',
+'passwordreset-emaildisabled' => '此Wiki上无法使用邮件功能。',
 'passwordreset-pretext' => '{{PLURAL:$1||输入下面的数据项之一}}',
 'passwordreset-username' => '用户名:',
 'passwordreset-domain' => '域:',
@@ -883,7 +894,7 @@ $2
 临时密码:$2',
 'passwordreset-emailsent' => '密码重置邮件已发送。',
 'passwordreset-emailsent-capture' => '密码重设电子邮件已发送,并在下面显示。',
-'passwordreset-emailerror-capture' => '生成的密码重设电子邮件如下所示,但发送失败:$1',
+'passwordreset-emailerror-capture' => '重置密码邮件已生成,但是无法向下列用户发送:$1',
 
 # Special:ChangeEmail
 'changeemail' => '更改电子邮件地址',
@@ -1072,6 +1083,7 @@ $2
 'content-failed-to-parse' => '未能将 $2 内容转换为 $1:$3',
 'invalid-content-data' => '无效的内容数据',
 'content-not-allowed-here' => '[[$2]]页面上不允许“$1”内容',
+'editwarning-warning' => '离开这个页面会令您遗失之前的所有更改。若您已经登入,您可在您参数设置的“{{int:prefs-editing}}”节中关闭此警告。',
 
 # Content models
 'content-model-wikitext' => 'wiki语法',
@@ -1334,6 +1346,7 @@ $1",
 'powersearch-togglenone' => '全不选',
 'search-external' => '外部搜索',
 'searchdisabled' => '{{SITENAME}}的搜索已被禁用。您可以暂时使用Google进行搜索,须注意他们索引的{{SITENAME}}内容可能会过时。',
+'search-error' => '搜索时发生错误:$1',
 
 # Preferences page
 'preferences' => '设置',
@@ -1635,7 +1648,7 @@ $1",
 'rc_categories' => '分类限制(用“|”分隔)',
 'rc_categories_any' => '任意',
 'rc-change-size-new' => '更改后$1字节',
-'newsectionsummary' => '/*$1*/新段落',
+'newsectionsummary' => '/* $1 */ 新段落',
 'rc-enhanced-expand' => '显示细节(需要JavaScript)',
 'rc-enhanced-hide' => '隐藏细节',
 'rc-old-title' => '最初被创建为" $1 "',
@@ -2274,12 +2287,12 @@ $1',
 'enotif_subject_restored' => '{{SITENAME}}页面$1已被$2恢复',
 'enotif_subject_changed' => '{{SITENAME}}页面$1已被$2更改',
 'enotif_body_intro_deleted' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|删除}},请见$3。',
-'enotif_body_intro_created' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|创建}},请浏览$3查看当前版本。',
-'enotif_body_intro_moved' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|移动}},请浏览$3查看当前版本。',
-'enotif_body_intro_restored' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|恢复}},请浏览$3查看当前版本。',
-'enotif_body_intro_changed' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|更改}},请浏览$3查看当前版本。',
-'enotif_lastvisited' => '请浏览$1查看你上次访问后的所有更改。',
-'enotif_lastdiff' => '请浏览$1查看该更改。',
+'enotif_body_intro_created' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|创建}},请浏览<$3>查看当前版本。',
+'enotif_body_intro_moved' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|移动}},请浏览<$3>查看当前版本。',
+'enotif_body_intro_restored' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|恢复}},请浏览<$3>查看当前版本。',
+'enotif_body_intro_changed' => '{{SITENAME}}页面$1已于$PAGEEDITDATE被$2{{GENDER:$2|更改}},请浏览 $3 查看当前版本。',
+'enotif_lastvisited' => '请浏览 $1 查看你上次访问后的所有更改。',
+'enotif_lastdiff' => '请浏览 $1 查看该更改。',
 'enotif_anon_editor' => '匿名用户$1',
 'enotif_body' => '亲爱的$WATCHINGUSERNAME:
 
@@ -3141,8 +3154,6 @@ $1',
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => '简体',
@@ -3874,6 +3885,8 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'htmlform-submit' => '提交',
 'htmlform-reset' => '撤销更改',
 'htmlform-selectorother-other' => '其他',
+'htmlform-no' => '否',
+'htmlform-yes' => '是',
 
 # SQLite database support
 'sqlite-has-fts' => '带全文搜索的版本$1',
index 9bd56c9..0714d0a 100644 (file)
@@ -27,6 +27,7 @@
  * @author Kuailong
  * @author Lauhenry
  * @author Liangent
+ * @author Liflon
  * @author Mark85296341
  * @author Oapbtommy
  * @author Pbdragonwang
@@ -282,8 +283,6 @@ $messages = array(
 'tog-shownumberswatching' => '顯示監視用戶的數目',
 'tog-oldsig' => '原有簽名:',
 'tog-fancysig' => '將簽名以維基文字對待 (不產生自動連結)',
-'tog-externaleditor' => '預設使用外部編輯器 (進階者專用,需要在您的電腦上作出一些特別設定。[//www.mediawiki.org/wiki/Manual:External_editors 更多信息。])',
-'tog-externaldiff' => '預設使用外部差異分析 (進階者專用,需要在您的電腦上作出一些特別設定。[//www.mediawiki.org/wiki/Manual:External_editors 更多信息。])',
 'tog-showjumplinks' => '啟用「跳轉到」訪問連結',
 'tog-uselivepreview' => '使用實時預覽 (需要JavaScript)(試驗中)',
 'tog-forceeditsummary' => '當沒有輸入摘要時提醒我',
@@ -298,6 +297,7 @@ $messages = array(
 'tog-showhiddencats' => '顯示隱藏分類',
 'tog-noconvertlink' => '不轉換連結標題',
 'tog-norollbackdiff' => '進行回退後略過差異比較',
+'tog-useeditwarning' => '當我在更改未儲存時離開頁面時警告我',
 
 'underline-always' => '總是使用',
 'underline-never' => '從不使用',
@@ -669,9 +669,15 @@ $2',
 'welcomecreation-msg' => '您的賬號已經建立。
 不要忘記設置[[Special:Preferences|{{SITENAME}}的個人參數]]。',
 'yourname' => '用戶名:',
+'userlogin-yourname' => '用戶名',
+'userlogin-yourname-ph' => '輸入你的用戶名',
 'yourpassword' => '您的密碼:',
+'userlogin-yourpassword' => '密碼',
+'userlogin-yourpassword-ph' => '輸入密碼',
 'yourpasswordagain' => '再次輸入密碼:',
 'remembermypassword' => '在這個瀏覽器上記住我的登入資訊(可維持 $1 {{PLURAL:$1|天|天}})',
+'userlogin-remembermypassword' => '記住我',
+'userlogin-signwithsecure' => '使用安全伺服器登入',
 'securelogin-stick-https' => '登入後繼續以HTTPS連接',
 'yourdomainname' => '您的網域:',
 'password-change-forbidden' => '您不可更改此wiki上的密碼。',
@@ -684,12 +690,16 @@ $2',
 'logout' => '登出',
 'userlogout' => '登出',
 'notloggedin' => '未登入',
+'userlogin-noaccount' => '沒有帳戶嗎?',
+'userlogin-joinproject' => '參與 {{SITENAME}}',
 'nologin' => '您還沒有帳號嗎?$1。',
 'nologinlink' => '建立新帳號',
 'createaccount' => '建立新帳號',
 'gotaccount' => '已經擁有帳號?$1。',
 'gotaccountlink' => '登入',
 'userlogin-resetlink' => '忘記了你的登錄信息?',
+'helplogin-url' => 'Help:登入',
+'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|登入説明]]',
 'createaccountmail' => '使用一個臨時的隨機密碼,並將它發送到以下指定的電子郵件地址',
 'createaccountreason' => '理由:',
 'badretype' => '您所輸入的密碼並不相同。',
@@ -783,6 +793,7 @@ $2',
 'passwordreset-text' => '完成此表格以重置您的密碼。',
 'passwordreset-legend' => '重設密碼',
 'passwordreset-disabled' => '此維基上已禁止了重設密碼。',
+'passwordreset-emaildisabled' => '電子郵件功能在此 wiki 上已禁用。',
 'passwordreset-pretext' => '{{PLURAL:$1||輸入下列其中一個}}',
 'passwordreset-username' => '用戶名:',
 'passwordreset-domain' => '域名:',
@@ -809,7 +820,7 @@ $2
 臨時密碼:$2',
 'passwordreset-emailsent' => '已發送重置密碼電郵。',
 'passwordreset-emailsent-capture' => '重置密碼電子郵件已發送,並在下面顯示。',
-'passwordreset-emailerror-capture' => '生成的重置密碼電子郵件如下所示,但發送失敗:$1',
+'passwordreset-emailerror-capture' => '生成的重置密碼電子郵件如下所示,但發送給{{GENDER:$2|用戶}}失敗:$1',
 
 # Special:ChangeEmail
 'changeemail' => '更改電郵地址',
@@ -1019,6 +1030,7 @@ $2
 'content-failed-to-parse' => '未能轉換$2 內容成為$1:$3',
 'invalid-content-data' => '內容資料無效',
 'content-not-allowed-here' => '[[$2]]頁面上不允許「$1」內容',
+'editwarning-warning' => '離開這個頁面可能會令您失去之前作出的所有更改。若您已經登入,您可在偏好設定的「編輯」部份裡關閉此警告。',
 
 # Content models
 'content-model-wikitext' => 'wiki語法',
@@ -1283,6 +1295,7 @@ $1",
 'powersearch-togglenone' => '無',
 'search-external' => '外部搜索',
 'searchdisabled' => '{{SITENAME}}由於性能方面的原因,全文搜索已被暫時停用。您可以暫時透過Google搜索。請留意他們的索引可能會過時。',
+'search-error' => '搜尋時發生錯誤:$1',
 
 # Preferences page
 'preferences' => '偏好設定',
@@ -2248,7 +2261,7 @@ Template:消除歧義',
 'enotif_body_intro_created' => '{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2建立,請見$3瀏覽當前版本。。',
 'enotif_body_intro_moved' => '{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2移動,請見$3瀏覽當前版本。',
 'enotif_body_intro_restored' => '{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2恢復,請見$3瀏覽當前版本。',
-'enotif_body_intro_changed' => '{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2修改,請見$3瀏覽當前版本。',
+'enotif_body_intro_changed' => '{{SITENAME}}的「$1」頁面於$PAGEEDITDATE被$2修改,請見 $3 瀏覽當前版本。',
 'enotif_lastvisited' => '請參閱 $1 檢視你上次訪問後的所有更改。',
 'enotif_lastdiff' => '請參閱 $1 檢視該更改。',
 'enotif_anon_editor' => '匿名用戶$1',
@@ -2372,7 +2385,7 @@ $UNWATCHURL
 'protect-summary-cascade' => '連鎖',
 'protect-expiring' => '終止於 $1 (UTC)',
 'protect-expiring-local' => '$1到期',
-'protect-expiry-indefinite' => '永久',
+'protect-expiry-indefinite' => '無限期',
 'protect-cascade' => '保護本頁中包含的頁面 (連鎖保護)',
 'protect-cantedit' => '您無法更改這個頁面的保護等級,因為您沒有權限去編輯它。',
 'protect-othertime' => '其它時間:',
@@ -2535,7 +2548,7 @@ $1',
 'ipbenableautoblock' => '自動查封此用戶最後所用的IP位址,以及後來試圖編輯所用的所有位址',
 'ipbsubmit' => '查封該地址',
 'ipbother' => '其它時間:',
-'ipboptions' => '2小時:2 hours,1天:1 day,3天:3 days,1周:1 week,2周:2 weeks,1個月:1 month,3個月:3 months,6個月:6 months,1年:1 year,永久:infinite',
+'ipboptions' => '2小時:2 hours,1天:1 day,3天:3 days,1周:1 week,2周:2 weeks,1個月:1 month,3個月:3 months,6個月:6 months,1年:1 year,無限期:infinite',
 'ipbotheroption' => '其他',
 'ipbotherreason' => '其它/附帶原因:',
 'ipbhidename' => '在編輯及列表中隱藏用戶名',
@@ -2576,7 +2589,7 @@ $1',
 'ipblocklist-submit' => '搜尋',
 'ipblocklist-localblock' => '本地封鎖',
 'ipblocklist-otherblocks' => '其他{{PLURAL:$1|封鎖|封鎖}}',
-'infiniteblock' => '永久',
+'infiniteblock' => '無限期',
 'expiringblock' => '$1 $2 到期',
 'anononlyblock' => '僅限匿名用戶',
 'noautoblockblock' => '禁用自動查封',
@@ -3123,8 +3136,6 @@ $1',
 
 /*
 Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language
 */
 'variantname-zh-hans' => '‪中文(简体)',
@@ -3852,6 +3863,8 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'htmlform-submit' => '提交',
 'htmlform-reset' => '撤銷更改',
 'htmlform-selectorother-other' => '其他',
+'htmlform-no' => '否',
+'htmlform-yes' => '是',
 
 # SQLite database support
 'sqlite-has-fts' => '帶全文搜尋的版本$1',
index 56627f7..1910aaf 100644 (file)
@@ -305,7 +305,7 @@ class CLDRPluralRuleConverter {
                                continue;
                        } else {
                                // Operator
-                               if  ( !$expectOperator ) {
+                               if ( !$expectOperator ) {
                                        $token->error( 'unexpected operator' );
                                }
                                // Resolve higher precedence levels
@@ -381,7 +381,7 @@ class CLDRPluralRuleConverter {
 
                // Word
                if ( !preg_match( self::WORD_REGEX, $this->rule, $m, 0, $this->pos ) ) {
-                       $this->error( 'unexpected character "' . $this->rule[$this->pos] . '"'  );
+                       $this->error( 'unexpected character "' . $this->rule[$this->pos] . '"' );
                }
                $word1 = strtolower( $m[0] );
                $word2 = '';
index a13453d..d68b831 100644 (file)
@@ -54,8 +54,8 @@ abstract class Maintenance {
         * Constants for DB access type
         * @see Maintenance::getDbType()
         */
-       const DB_NONE  = 0;
-       const DB_STD   = 1;
+       const DB_NONE = 0;
+       const DB_STD = 1;
        const DB_ADMIN = 2;
 
        // Const for getStdin()
@@ -153,7 +153,7 @@ abstract class Maintenance {
                        return false; // last call should be to this function
                }
                $includeFuncs = array( 'require_once', 'require', 'include', 'include_once' );
-               for( $i=1; $i < $count; $i++ ) {
+               for ( $i = 1; $i < $count; $i++ ) {
                        if ( !in_array( $bt[$i]['function'], $includeFuncs ) ) {
                                return false; // previous calls should all be "requires"
                        }
@@ -428,7 +428,7 @@ abstract class Maintenance {
                                "server name detection may fail in command line scripts.", false, true );
 
                # Save generic options to display them separately in help
-               $this->mGenericParameters = $this->mParams ;
+               $this->mGenericParameters = $this->mParams;
 
                # Script dependant options:
 
@@ -515,7 +515,7 @@ abstract class Maintenance {
                $wgCommandLineMode = true;
 
                # Turn off output buffering if it's on
-               while( ob_get_level() > 0 ) {
+               while ( ob_get_level() > 0 ) {
                        ob_end_flush();
                }
 
@@ -634,7 +634,7 @@ abstract class Maintenance {
                        } elseif ( substr( $arg, 0, 1 ) == '-' ) {
                                # Short options
                                for ( $p = 1; $p < strlen( $arg ); $p++ ) {
-                                       $option = $arg { $p } ;
+                                       $option = $arg { $p };
                                        if ( !isset( $this->mParams[$option] ) && isset( $this->mShortParamsMap[$option] ) ) {
                                                $option = $this->mShortParamsMap[$option];
                                        }
@@ -712,7 +712,7 @@ abstract class Maintenance {
         * @param $force boolean Whether to force the help to show, default false
         */
        protected function maybeHelp( $force = false ) {
-               if( !$force && !$this->hasOption( 'help' ) ) {
+               if ( !$force && !$this->hasOption( 'help' ) ) {
                        return;
                }
 
@@ -743,8 +743,9 @@ abstract class Maintenance {
                                } else {
                                        $output .= '[' . $arg['name'] . ']';
                                }
-                               if ( $k < count( $this->mArgList ) - 1 )
+                               if ( $k < count( $this->mArgList ) - 1 ) {
                                        $output .= ' ';
+                               }
                        }
                }
                $this->output( "$output\n\n" );
@@ -765,7 +766,7 @@ abstract class Maintenance {
                $this->output( "\n" );
 
                $scriptDependantParams = $this->mDependantParameters;
-               if( count($scriptDependantParams) > 0 ) {
+               if ( count($scriptDependantParams) > 0 ) {
                        $this->output( "Script dependant parameters:\n" );
                        // Parameters description
                        foreach ( $scriptDependantParams as $par => $info ) {
@@ -790,7 +791,7 @@ abstract class Maintenance {
                        $this->mGenericParameters,
                        $this->mDependantParameters
                );
-               if( count($scriptSpecificParams) > 0 ) {
+               if ( count($scriptSpecificParams) > 0 ) {
                        $this->output( "Script specific parameters:\n" );
                        // Parameters description
                        foreach ( $scriptSpecificParams as $par => $info ) {
@@ -806,7 +807,7 @@ abstract class Maintenance {
                }
 
                // Print arguments
-               if( count( $this->mArgList ) > 0 ) {
+               if ( count( $this->mArgList ) > 0 ) {
                        $this->output( "Arguments:\n" );
                        // Arguments description
                        foreach ( $this->mArgList as $info ) {
@@ -839,7 +840,7 @@ abstract class Maintenance {
                $wgCommandLineMode = true;
 
                # Override $wgServer
-               if( $this->hasOption( 'server') ) {
+               if ( $this->hasOption( 'server' ) ) {
                        $wgServer = $this->getOption( 'server', $wgServer );
                }
 
@@ -906,7 +907,7 @@ abstract class Maintenance {
 
                if ( isset( $this->mOptions['conf'] ) ) {
                        $settingsFile = $this->mOptions['conf'];
-               } elseif ( defined("MW_CONFIG_FILE") ) {
+               } elseif ( defined( "MW_CONFIG_FILE" ) ) {
                        $settingsFile = MW_CONFIG_FILE;
                } else {
                        $settingsFile = "$IP/LocalSettings.php";
@@ -1190,7 +1191,9 @@ abstract class Maintenance {
                                        $st = fgets( STDIN, 1024 );
                                }
                        }
-                       if ( $st === false ) return false;
+                       if ( $st === false ) {
+                               return false;
+                       }
                        $resp = trim( $st );
                        return $resp;
                }
index e3dc488..9163d69 100644 (file)
@@ -40,17 +40,17 @@ class BackupDumper {
        var $reportingInterval = 100;
        var $reporting = true;
        var $pageCount = 0;
-       var $revCount  = 0;
-       var $server    = null; // use default
-       var $pages     = null; // all pages
+       var $revCount = 0;
+       var $server = null; // use default
+       var $pages = null; // all pages
        var $skipHeader = false; // don't output <mediawiki> and <siteinfo>
        var $skipFooter = false; // don't output </mediawiki>
-       var $startId    = 0;
-       var $endId      = 0;
+       var $startId = 0;
+       var $endId = 0;
        var $revStartId = 0;
-       var $revEndId   = 0;
-       var $sink       = null; // Output filters
-       var $stubText   = false; // include rev_text_id instead of text; for 2-pass dump
+       var $revEndId = 0;
+       var $sink = null; // Output filters
+       var $stubText = false; // include rev_text_id instead of text; for 2-pass dump
        var $dumpUploads = false;
        var $dumpUploadFileContents = false;
        var $lastTime = 0;
@@ -202,8 +202,9 @@ class BackupDumper {
        function dump( $history, $text = WikiExporter::TEXT ) {
                # Notice messages will foul up your XML output even if they're
                # relatively harmless.
-               if ( ini_get( 'display_errors' ) )
+               if ( ini_get( 'display_errors' ) ) {
                        ini_set( 'display_errors', 'stderr' );
+               }
 
                $this->initProgress( $history );
 
@@ -215,8 +216,9 @@ class BackupDumper {
                $wrapper = new ExportProgressFilter( $this->sink, $this );
                $exporter->setOutputSink( $wrapper );
 
-               if ( !$this->skipHeader )
+               if ( !$this->skipHeader ) {
                        $exporter->openStream();
+               }
                # Log item dumps: all or by range
                if ( $history & WikiExporter::LOGS ) {
                        if ( $this->startId || $this->endId ) {
@@ -225,7 +227,7 @@ class BackupDumper {
                                $exporter->allLogs();
                        }
                # Page dumps: all or by page ID range
-               } else if ( is_null( $this->pages ) ) {
+               } elseif ( is_null( $this->pages ) ) {
                        if ( $this->startId || $this->endId ) {
                                $exporter->pagesByRange( $this->startId, $this->endId );
                        } elseif ( $this->revStartId || $this->revEndId ) {
@@ -238,8 +240,9 @@ class BackupDumper {
                        $exporter->pagesByName( $this->pages );
                }
 
-               if ( !$this->skipFooter )
+               if ( !$this->skipFooter ) {
                        $exporter->closeStream();
+               }
 
                $this->report( true );
        }
index 0b8b344..c99f004 100644 (file)
@@ -141,8 +141,9 @@ class TextPassDumper extends BackupDumper {
        function dump( $history, $text = WikiExporter::TEXT ) {
                // Notice messages will foul up your XML output even if they're
                // relatively harmless.
-               if ( ini_get( 'display_errors' ) )
+               if ( ini_get( 'display_errors' ) ) {
                        ini_set( 'display_errors', 'stderr' );
+               }
 
                $this->initProgress( $this->history );
 
@@ -298,7 +299,7 @@ class TextPassDumper extends BackupDumper {
        }
 
        function checkIfTimeExceeded() {
-               if ( $this->maxTimeAllowed &&  ( $this->lastTime - $this->timeOfCheckpoint  > $this->maxTimeAllowed ) ) {
+               if ( $this->maxTimeAllowed && ( $this->lastTime - $this->timeOfCheckpoint > $this->maxTimeAllowed ) ) {
                        return true;
                }
                return false;
@@ -611,17 +612,21 @@ class TextPassDumper extends BackupDumper {
 
        private function closeSpawn() {
                wfSuppressWarnings();
-               if ( $this->spawnRead )
+               if ( $this->spawnRead ) {
                        fclose( $this->spawnRead );
+               }
                $this->spawnRead = false;
-               if ( $this->spawnWrite )
+               if ( $this->spawnWrite ) {
                        fclose( $this->spawnWrite );
+               }
                $this->spawnWrite = false;
-               if ( $this->spawnErr )
+               if ( $this->spawnErr ) {
                        fclose( $this->spawnErr );
+               }
                $this->spawnErr = false;
-               if ( $this->spawnProc )
+               if ( $this->spawnProc ) {
                        pclose( $this->spawnProc );
+               }
                $this->spawnProc = false;
                wfRestoreWarnings();
        }
@@ -631,11 +636,15 @@ class TextPassDumper extends BackupDumper {
 
                $ok = fwrite( $this->spawnWrite, "$id\n" );
                // $this->progress( ">> $id" );
-               if ( !$ok ) return false;
+               if ( !$ok ) {
+                       return false;
+               }
 
                $ok = fflush( $this->spawnWrite );
                // $this->progress( ">> [flush]" );
-               if ( !$ok ) return false;
+               if ( !$ok ) {
+                       return false;
+               }
 
                // check that the text id they are sending is the one we asked for
                // this avoids out of sync revision text errors we have encountered in the past
@@ -649,18 +658,24 @@ class TextPassDumper extends BackupDumper {
 
                $len = fgets( $this->spawnRead );
                // $this->progress( "<< " . trim( $len ) );
-               if ( $len === false ) return false;
+               if ( $len === false ) {
+                       return false;
+               }
 
                $nbytes = intval( $len );
                // actual error, not zero-length text
-               if ( $nbytes < 0 ) return false;
+               if ( $nbytes < 0 ) {
+                       return false;
+               }
 
                $text = "";
 
                // Subprocess may not send everything at once, we have to loop.
                while ( $nbytes > strlen( $text ) ) {
                        $buffer = fread( $this->spawnRead, $nbytes - strlen( $text ) );
-                       if ( $buffer === false ) break;
+                       if ( $buffer === false ) {
+                               break;
+                       }
                        $text .= $buffer;
                }
 
index 98b35b5..9fb39fb 100644 (file)
@@ -48,20 +48,20 @@ abstract class Benchmarker extends Maintenance {
 
                foreach( $benchs as $bench ) {
                        // handle empty args
-                       if(!array_key_exists( 'args', $bench )) {
+                       if( !array_key_exists( 'args', $bench ) ) {
                                $bench['args'] = array();
                        }
 
                        $bench_number++;
                        $start = microtime( true );
-                       for( $i=0; $i<$count; $i++ ) {
+                       for( $i = 0; $i < $count; $i++ ) {
                                call_user_func_array( $bench['function'], $bench['args'] );
                        }
                        $delta = microtime( true ) - $start;
 
                        // function passed as a callback
                        if( is_array( $bench['function'] ) ) {
-                               $ret = get_class( $bench['function'][0] ). '->' . $bench['function'][1];
+                               $ret = get_class( $bench['function'][0] ) . '->' . $bench['function'][1];
                                $bench['function'] = $ret;
                        }
 
@@ -85,7 +85,7 @@ abstract class Benchmarker extends Maintenance {
                                join( ', ', $res['arguments'] )
                        );
                        $ret .= sprintf( "   %6.2fms (%6.2fms each)\n",
-                               $res['delta']   * 1000,
+                               $res['delta'] * 1000,
                                $res['average'] * 1000
                        );
                }
index f598780..7bb44b4 100644 (file)
@@ -38,7 +38,7 @@ class bench_utf8_title_check extends Benchmarker {
        public function __construct() {
                parent::__construct();
 
-               $this->data = array (
+               $this->data = array(
                        "",
                        "United States of America", // 7bit ASCII
                        "S%C3%A9rie%20t%C3%A9l%C3%A9vis%C3%A9e",
index c06c2cd..9e56e1b 100644 (file)
@@ -28,7 +28,7 @@ require_once( __DIR__ . '/commandLine.inc' );
 function cdbShowHelp( $command ) {
        $commandList = array(
                'load' => 'load a cdb file for reading',
-               'get'  => 'get a value for a key',
+               'get' => 'get a value for a key',
                'exit' => 'exit cdb',
                'quit' => 'exit cdb',
                'help' => 'help about a command',
@@ -55,7 +55,9 @@ do {
        static $fileHandle;
 
        $line = Maintenance::readconsole();
-       if ( $line === false ) exit;
+       if ( $line === false ) {
+               exit;
+       }
 
        $args = explode( ' ', $line );
        $command = array_shift( $args );
@@ -67,25 +69,25 @@ do {
                        cdbShowHelp( array_shift( $args ) );
                        break;
                case 'load':
-                       if( !isset( $args[0] ) ) {
+                       if ( !isset( $args[0] ) ) {
                                print "Need a filename there buddy\n";
                                break;
                        }
                        $file = $args[0];
                        print "Loading cdb file $file...";
                        $fileHandle = CdbReader::open( $file );
-                       if( !$fileHandle ) {
+                       if ( !$fileHandle ) {
                                print "not a cdb file or unable to read it\n";
                        } else {
                                print "ok\n";
                        }
                        break;
                case 'get':
-                       if( !$fileHandle ) {
+                       if ( !$fileHandle ) {
                                print "Need to load a cdb file first\n";
                                break;
                        }
-                       if( !isset( $args[0] ) ) {
+                       if ( !isset( $args[0] ) ) {
                                print "Need to specify a key, Luke\n";
                                break;
                        }
index 1e44e23..efb9471 100644 (file)
@@ -221,12 +221,14 @@ class CheckSyntax extends Maintenance {
        private function isSuitableFile( $file ) {
                $file = str_replace( '\\', '/', $file );
                $ext = pathinfo( $file, PATHINFO_EXTENSION );
-               if ( $ext != 'php' && $ext != 'inc' && $ext != 'php5' )
+               if ( $ext != 'php' && $ext != 'inc' && $ext != 'php5' ) {
                        return false;
+               }
                foreach ( $this->mIgnorePaths as $regex ) {
                        $m = array();
-                       if ( preg_match( "~{$regex}~", $file, $m ) )
+                       if ( preg_match( "~{$regex}~", $file, $m ) ) {
                                return false;
+                       }
                }
                return true;
        }
@@ -328,14 +330,15 @@ class CheckSyntax extends Maintenance {
        private function checkForMistakes( $file ) {
                foreach ( $this->mNoStyleCheckPaths as $regex ) {
                        $m = array();
-                       if ( preg_match( "~{$regex}~", $file, $m ) )
+                       if ( preg_match( "~{$regex}~", $file, $m ) ) {
                                return;
+                       }
                }
 
                $text = file_get_contents( $file );
                $tokens = token_get_all( $text );
 
-               $this->checkEvilToken( $file, $tokens, '@', 'Error supression operator (@)');
+               $this->checkEvilToken( $file, $tokens, '@', 'Error supression operator (@)' );
                $this->checkRegex( $file, $text, '/^[\s\r\n]+<\?/', 'leading whitespace' );
                $this->checkRegex( $file, $text, '/\?>[\s\r\n]*$/', 'trailing ?>' );
                $this->checkRegex( $file, $text, '/^[\xFF\xFE\xEF]/', 'byte-order mark' );
index dbc2e0d..87f14d0 100644 (file)
@@ -38,7 +38,7 @@ class CleanupAncientTables extends Maintenance {
        }
 
        public function execute() {
-               if( !$this->hasOption( 'force' ) ) {
+               if ( !$this->hasOption( 'force' ) ) {
                        $this->error( "This maintenance script will remove old columns and indexes.\n"
                                . "It is recommended to backup your database first, and ensure all your data has been migrated to newer tables\n"
                                . "If you want to continue, run this script again with the --force \n"
@@ -61,7 +61,7 @@ class CleanupAncientTables extends Maintenance {
                        'validate', // 1.6
                );
 
-               foreach( $ancientTables as $table ) {
+               foreach ( $ancientTables as $table ) {
                        if ( $db->tableExists( $table, __METHOD__ ) ) {
                                $this->output( "Dropping table $table..." );
                                $db->dropTable( $table, __METHOD__ );
@@ -78,7 +78,7 @@ class CleanupAncientTables extends Maintenance {
                        'user_timestamp',
                        'usertext_timestamp',
                );
-               foreach( $oldIndexes as $index ) {
+               foreach ( $oldIndexes as $index ) {
                        if ( $db->indexExists( 'text', $index, __METHOD__ ) ) {
                                $this->output( "Dropping index $index from the text table..." );
                                $db->query( "DROP INDEX " . $db->addIdentifierQuotes( $index )
@@ -97,7 +97,7 @@ class CleanupAncientTables extends Maintenance {
                        'old_minor_edit',
                        'inverse_timestamp',
                );
-               foreach( $oldFields as $field ) {
+               foreach ( $oldFields as $field ) {
                        if ( $db->fieldExists( 'text', $field, __METHOD__ ) ) {
                                $this->output( "Dropping the $field field from the text table..." );
                                $db->query( "ALTER TABLE  " . $db->tableName( 'text' )
index c0a526b..58c87e5 100644 (file)
@@ -36,7 +36,7 @@ class CleanupPreferences extends Maintenance {
 
                $dbw = wfGetDB( DB_MASTER );
                $dbw->begin( __METHOD__ );
-               foreach( $wgHiddenPrefs as $item ) {
+               foreach ( $wgHiddenPrefs as $item ) {
                        $dbw->delete(
                                'user_properties',
                                array( 'up_property' => $item ),
index 2085da9..700ae1a 100644 (file)
@@ -58,7 +58,7 @@ class CleanupRemovedModules extends Maintenance {
                        $this->output( "Batch $i: $numRows rows\n" );
                        $i++;
                        wfWaitForSlaves( $maxlag );
-               } while( $numRows > 0 );
+               } while ( $numRows > 0 );
                $this->output( "done\n" );
 
                $this->output( "Cleaning up msg_resource table...\n" );
@@ -72,7 +72,7 @@ class CleanupRemovedModules extends Maintenance {
                        $this->output( "Batch $i: $numRows rows\n" );
                        $i++;
                        wfWaitForSlaves( $maxlag );
-               } while( $numRows > 0 );
+               } while ( $numRows > 0 );
                $this->output( "done\n" );
 
                $this->output( "Cleaning up msg_resource_links table...\n" );
@@ -85,7 +85,7 @@ class CleanupRemovedModules extends Maintenance {
                        $this->output( "Batch $i: $numRows rows\n" );
                        $i++;
                        wfWaitForSlaves( $maxlag );
-               } while( $numRows > 0 );
+               } while ( $numRows > 0 );
                $this->output( "done\n" );
        }
 }
index 66f9e87..cbbd5d9 100644 (file)
@@ -83,8 +83,12 @@ class TitleCleanup extends TableCleanup {
                $legalized = preg_replace_callback( "!([^$legal])!",
                        array( &$this, 'hexChar' ),
                        $row->page_title );
-               if ( $legalized == '.' ) $legalized = '(dot)';
-               if ( $legalized == '_' ) $legalized = '(space)';
+               if ( $legalized == '.' ) {
+                       $legalized = '(dot)';
+               }
+               if ( $legalized == '_' ) {
+                       $legalized = '(space)';
+               }
                $legalized = 'Broken/' . $legalized;
 
                $title = Title::newFromText( $legalized );
@@ -121,7 +125,9 @@ class TitleCleanup extends TableCleanup {
 
                        # Old cleanupTitles could move articles there. See bug 23147.
                        $ns = $row->page_namespace;
-                       if ( $ns < 0 ) $ns = 0;
+                       if ( $ns < 0 ) {
+                               $ns = 0;
+                       }
 
                        $clean = 'Broken/' . $prior;
                        $verified = Title::makeTitleSafe( $ns, $clean );
index 441e8ae..97dee97 100644 (file)
@@ -65,7 +65,7 @@ class UploadStashCleanup extends Maintenance {
                } else {
                        // finish the read before starting writes.
                        $keys = array();
-                       foreach( $res as $row ) {
+                       foreach ( $res as $row ) {
                                array_push( $keys, $row->us_key );
                        }
 
@@ -76,7 +76,7 @@ class UploadStashCleanup extends Maintenance {
                        $stash = new UploadStash( $repo );
 
                        $i = 0;
-                       foreach( $keys as $key ) {
+                       foreach ( $keys as $key ) {
                                $i++;
                                try {
                                        $stash->getFile( $key, true );
@@ -94,7 +94,7 @@ class UploadStashCleanup extends Maintenance {
                }
 
                // Delete all the corresponding thumbnails...
-               $dir      = $tempRepo->getZonePath( 'thumb' );
+               $dir = $tempRepo->getZonePath( 'thumb' );
                $iterator = $tempRepo->getBackend()->getFileList( array( 'dir' => $dir ) );
                $this->output( "Deleting old thumbnails...\n" );
                $i = 0;
@@ -112,7 +112,7 @@ class UploadStashCleanup extends Maintenance {
                $this->output( "$i done\n" );
 
                // Apparently lots of stash files are not registered in the DB...
-               $dir      = $tempRepo->getZonePath( 'public' );
+               $dir = $tempRepo->getZonePath( 'public' );
                $iterator = $tempRepo->getBackend()->getFileList( array( 'dir' => $dir ) );
                $this->output( "Deleting orphaned temp files...\n" );
                if ( strpos( $dir, '/local-temp' ) === false ) { // sanity check
index fbab6a3..c3458dc 100644 (file)
@@ -77,9 +77,9 @@ class WatchlistCleanup extends TableCleanup {
                if ( !$this->dryrun && $this->hasOption( 'fix' ) ) {
                        $dbw = wfGetDB( DB_MASTER );
                        $dbw->delete( 'watchlist', array(
-                               'wl_user'      => $row->wl_user,
+                               'wl_user' => $row->wl_user,
                                'wl_namespace' => $row->wl_namespace,
-                               'wl_title'     => $row->wl_title ),
+                               'wl_title' => $row->wl_title ),
                        __METHOD__ );
                        $this->output( "- removed\n" );
                        return 1;
index 1f3ac1c..b361117 100644 (file)
@@ -55,8 +55,8 @@ class CompareParsers extends DumpIterator {
        }
 
        public function checkOptions() {
-               if ( $this->hasOption('save-failed') ) {
-                       $this->saveFailed = $this->getOption('save-failed');
+               if ( $this->hasOption( 'save-failed' ) ) {
+                       $this->saveFailed = $this->getOption( 'save-failed' );
                }
 
                $this->stripParametersEnabled = $this->hasOption( 'strip-parameters' );
@@ -87,8 +87,9 @@ class CompareParsers extends DumpIterator {
 
        public function conclusions() {
                $this->error( "{$this->failed} failed revisions out of {$this->count}" );
-               if ($this->count > 0)
+               if ( $this->count > 0 ) {
                        $this->output( " (" . ( $this->failed / $this->count ) . "%)\n" );
+               }
        }
 
        function stripParameters( $text ) {
index 5f7b02e..7404b5a 100644 (file)
@@ -82,7 +82,7 @@ This gives a huge speed improvement for very large links tables which are MyISAM
 
                list ( $cur, $links, $links_temp, $links_backup ) = $dbw->tableNamesN( 'cur', 'links', 'links_temp', 'links_backup' );
 
-               if( $dbw->tableExists( 'pagelinks' ) ) {
+               if ( $dbw->tableExists( 'pagelinks' ) ) {
                        $this->output( "...have pagelinks; skipping old links table updates\n" );
                        return;
                }
@@ -183,9 +183,10 @@ This gives a huge speed improvement for very large links tables which are MyISAM
                                        }
                                        $dbw->query( implode( "", $sqlWrite ) );
                                        $totalTuplesInserted += $tuplesAdded;
-                                       if ( $reportLinksConvProgress )
+                                       if ( $reportLinksConvProgress ) {
                                                $this->output( " done. Total $totalTuplesInserted tuples inserted.\n" );
-                                               $this->performanceLog( $fh, $totalTuplesInserted . " " . ( $this->getMicroTime() - $baseTime ) . "\n"  );
+                                               $this->performanceLog( $fh, $totalTuplesInserted . " " . ( $this->getMicroTime() - $baseTime ) . "\n" );
+                                       }
                                }
                        }
                        $this->output( "$totalTuplesInserted valid titles and $numBadLinks invalid titles were processed.\n\n" );
index 81fbbb3..94a1876 100644 (file)
@@ -38,7 +38,7 @@ class CreateAndPromote extends Maintenance {
                parent::__construct();
                $this->mDescription = "Create a new user account and/or grant it additional rights";
                $this->addOption( "force", "If acccount exists already, just grant it rights or change password." );
-               foreach( self::$permitRoles as $role ) {
+               foreach ( self::$permitRoles as $role ) {
                        $this->addOption( $role, "Add the account to the {$role} group" );
                }
                $this->addArg( "username", "Username of new user" );
@@ -60,10 +60,10 @@ class CreateAndPromote extends Maintenance {
 
                if ( $exists && !$force ) {
                        $this->error( "Account exists. Perhaps you want the --force option?", true );
-               } else if ( !$exists && !$password ) {
+               } elseif ( !$exists && !$password ) {
                        $this->error( "Argument <password> required!", false );
                        $this->maybeHelp( true );
-               } else if ( $exists ) {
+               } elseif ( $exists ) {
                        $inGroups = $user->getGroups();
                }
 
@@ -72,7 +72,7 @@ class CreateAndPromote extends Maintenance {
                if ( $exists && !$password && count( $promotions ) === 0 ) {
                        $this->output( "Account exists and nothing to do.\n" );
                        return;
-               } else if ( count( $promotions ) !== 0 ) {
+               } elseif ( count( $promotions ) !== 0 ) {
                        $promoText = "User:{$username} into " . implode( ', ', $promotions ) . "...\n";
                        if ( $exists ) {
                                $this->output( wfWikiID() . ": Promoting $promoText" );
index 792ee6c..d58e9a4 100644 (file)
@@ -42,7 +42,7 @@ class DeleteArchivedFilesImplementation {
                        $group = $row->fa_storage_group;
                        $id = $row->fa_id;
                        $path = $repo->getZonePath( 'deleted' ) . '/' . $repo->getDeletedHashPath( $key ) . $key;
-                       if( isset( $row->fa_sha1 ) ) {
+                       if ( isset( $row->fa_sha1 ) ) {
                                $sha1 = $row->fa_sha1;
                        } else {
                                // old row, populate from key
index 4ab6d1d..7f6764b 100644 (file)
@@ -51,7 +51,7 @@ class DeleteDefaultMessages extends Maintenance {
                        )
                );
 
-               if( $dbr->numRows( $res ) == 0 ) {
+               if ( $dbr->numRows( $res ) == 0 ) {
                        # No more messages left
                        $this->output( "done.\n" );
                        return;
index 3c8c5fd..4ac64ca 100644 (file)
@@ -59,13 +59,15 @@ class DeleteImageCache extends Maintenance {
                $total = $this->getImageCount();
 
                foreach ( $res as $row ) {
-                       if ( $i % $this->report == 0 )
+                       if ( $i % $this->report == 0 ) {
                                $this->output( sprintf( "%s: %13s done (%s)\n", wfWikiID(), "$i/$total", wfPercent( $i / $total * 100 ) ) );
+                       }
                        $md5 = md5( $row->img_name );
                        $wgMemc->delete( wfMemcKey( 'Image', $md5 ) );
 
-                       if ( $sleep != 0 )
+                       if ( $sleep != 0 ) {
                                usleep( $sleep );
+                       }
 
                        ++$i;
                }
index f0da9a8..1eb7262 100644 (file)
@@ -54,8 +54,9 @@ class DeleteOrphanedRevisions extends Maintenance {
 
                # Stash 'em all up for deletion (if needed)
                $revisions = array();
-               foreach ( $res as $row )
+               foreach ( $res as $row ) {
                        $revisions[] = $row->rev_id;
+               }
                $count = count( $revisions );
                $this->output( "found {$count}.\n" );
 
@@ -83,8 +84,9 @@ class DeleteOrphanedRevisions extends Maintenance {
         * @param $dbw DatabaseBase class (needs to be a master)
         */
        private function deleteRevs( $id, &$dbw ) {
-               if ( !is_array( $id ) )
+               if ( !is_array( $id ) ) {
                        $id = array( $id );
+               }
                $dbw->delete( 'revision', array( 'rev_id' => $id ), __METHOD__ );
        }
 }
index da220d6..7d16f8a 100644 (file)
@@ -47,7 +47,9 @@ class DeleteSelfExternals extends Maintenance {
                                . $db->buildLike( $wgServer . '/', $db->anyString() ), $this->mBatchSize );
                        $this->output( "Deleting a batch\n" );
                        $db->query( $q );
-                       if ( !$db->affectedRows() ) return;
+                       if ( !$db->affectedRows() ) {
+                               return;
+                       }
                }
        }
 }
index 1d5070b..d277e57 100644 (file)
@@ -25,8 +25,8 @@ if ( PHP_SAPI != 'cli-server' ) {
        die( "This script can only be run by php's cli-server sapi." );
 }
 
-ini_set('display_errors', 1);
-error_reporting(E_ALL);
+ini_set( 'display_errors', 1 );
+error_reporting( E_ALL );
 
 if ( isset( $_SERVER["SCRIPT_FILENAME"] ) ) {
        # Known resource, sometimes a script sometimes a file
@@ -83,16 +83,16 @@ if ( $mime ) {
        # This way we can serve things like .svg files that the built-in
        # PHP webserver doesn't understand.
        # ;) Nicely enough we just happen to bundle a mime.types file
-       $f = fopen($file, 'rb');
+       $f = fopen( $file, 'rb' );
        if ( preg_match( '#^text/#', $mime ) ) {
                # Text should have a charset=UTF-8 (php's webserver does this too)
-               header("Content-Type: $mime; charset=UTF-8");
+               header( "Content-Type: $mime; charset=UTF-8" );
        } else {
-               header("Content-Type: $mime");
+               header( "Content-Type: $mime" );
        }
-       header("Content-Length: " . filesize($file));
+       header( "Content-Length: " . filesize( $file ) );
        // Stream that out to the browser
-       fpassthru($f);
+       fpassthru( $f );
        return true;
 }
 
index 15b0016..2e138e0 100644 (file)
@@ -34,7 +34,7 @@ if ( !defined( 'RUN_MAINTENANCE_IF_MAIN' ) ) {
 // Wasn't included from the file scope, halt execution (probably wanted the class)
 // If a class is using commandLine.inc (old school maintenance), they definitely
 // cannot be included and will proceed with execution
-if( !Maintenance::shouldExecute() && $maintClass != 'CommandLineInc' ) {
+if ( !Maintenance::shouldExecute() && $maintClass != 'CommandLineInc' ) {
        return;
 }
 
@@ -60,10 +60,15 @@ if ( isset( $_SERVER['MW_COMPILED'] ) ) {
        # Get the MWInit class
        require_once( "$IP/includes/Init.php" );
        require_once( "$IP/includes/AutoLoader.php" );
+       # Stub the profiler
+       require_once( "$IP/includes/profiler/Profiler.php" );
 }
 
-# Stub the profiler
-require_once( MWInit::compiledPath( 'includes/profiler/Profiler.php' ) );
+# Start the profiler
+$wgProfiler = array();
+if ( file_exists( "$IP/StartProfiler.php" ) ) {
+       require( "$IP/StartProfiler.php" );
+}
 
 // Some other requires
 if ( !defined( 'MW_COMPILED' ) ) {
@@ -95,8 +100,9 @@ if ( $maintenance->getDbType() === Maintenance::DB_ADMIN &&
 }
 
 if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
-       if ( $wgLocalisationCacheConf['storeClass'] === false && ( $wgLocalisationCacheConf['store'] == 'db' || ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory ) ) )
+       if ( $wgLocalisationCacheConf['storeClass'] === false && ( $wgLocalisationCacheConf['store'] == 'db' || ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory ) ) ) {
                $wgLocalisationCacheConf['storeClass'] = 'LCStore_Null';
+       }
 }
 $maintenance->finalSetup();
 // Some last includes
index c9546c6..8c35023 100644 (file)
@@ -27,7 +27,7 @@
 
 $originalDir = getcwd();
 
-$optionsWithArgs = array( 'pagelist', 'start', 'end', 'revstart', 'revend');
+$optionsWithArgs = array( 'pagelist', 'start', 'end', 'revstart', 'revend' );
 
 require_once( __DIR__ . '/commandLine.inc' );
 require_once( __DIR__ . '/backup.inc' );
index 870d632..2b3417a 100644 (file)
@@ -47,13 +47,13 @@ abstract class DumpIterator extends Maintenance {
        }
 
        public function execute() {
-               if (! ( $this->hasOption('file') ^ $this->hasOption('dump') ) ) {
-                       $this->error("You must provide a file or dump", true);
+               if ( !( $this->hasOption( 'file' ) ^ $this->hasOption( 'dump' ) ) ) {
+                       $this->error( "You must provide a file or dump", true );
                }
 
                $this->checkOptions();
 
-               if ( $this->hasOption('file') ) {
+               if ( $this->hasOption( 'file' ) ) {
                        $revision = new WikiRevision;
 
                        $revision->setText( file_get_contents( $this->getOption( 'file' ) ) );
@@ -64,10 +64,10 @@ abstract class DumpIterator extends Maintenance {
 
                $this->startTime = microtime( true );
 
-               if ( $this->getOption('dump') == '-' ) {
+               if ( $this->getOption( 'dump' ) == '-' ) {
                        $source = new ImportStreamSource( $this->getStdin() );
                } else {
-                       $this->error("Sorry, I don't support dump filenames yet. Use - and provide it on stdin on the meantime.", true);
+                       $this->error( "Sorry, I don't support dump filenames yet. Use - and provide it on stdin on the meantime.", true );
                }
                $importer = new WikiImporter( $source );
 
@@ -82,8 +82,9 @@ abstract class DumpIterator extends Maintenance {
 
                $delta = microtime( true ) - $this->startTime;
                $this->error( "Done {$this->count} revisions in " . round($delta, 2) . " seconds " );
-               if ($delta > 0)
+               if ( $delta > 0 ) {
                        $this->error( round($this->count / $delta, 2) . " pages/sec" );
+               }
 
                # Perform the memory_get_peak_usage() when all the other data has been output so there's no damage if it dies.
                # It is only available since 5.2.0 (since 5.2.1 if you haven't compiled with --enable-memory-limit)
@@ -96,7 +97,7 @@ abstract class DumpIterator extends Maintenance {
                if ( $this->getDbType() == Maintenance::DB_NONE ) {
                        global $wgUseDatabaseMessages, $wgLocalisationCacheConf, $wgHooks;
                        $wgUseDatabaseMessages = false;
-                       $wgLocalisationCacheConf['storeClass'] =  'LCStore_Null';
+                       $wgLocalisationCacheConf['storeClass'] = 'LCStore_Null';
                        $wgHooks['InterwikiLoadPrefix'][] = 'DumpIterator::disableInterwikis';
                }
        }
@@ -122,8 +123,9 @@ abstract class DumpIterator extends Maintenance {
 
                $this->count++;
                if ( isset( $this->from ) ) {
-                       if ( $this->from != $title )
+                       if ( $this->from != $title ) {
                                return;
+                       }
                        $this->output( "Skipped " . ($this->count - 1) . " pages\n" );
 
                        $this->count = 1;
index 7dfbec1..7760beb 100644 (file)
@@ -69,8 +69,9 @@ class DumpLinks extends Maintenance {
                        $link = Title::makeTitle( $row->pl_namespace, $row->pl_title );
                        $this->output( " " . $link->getPrefixedURL() );
                }
-               if ( isset( $lastPage ) )
+               if ( isset( $lastPage ) ) {
                        $this->output( "\n" );
+               }
        }
 }
 
index 1eecfe4..1ddb9ad 100644 (file)
@@ -43,8 +43,9 @@ class DumpSisterSites extends Maintenance {
                $dbr->bufferResults( false );
                $result = $dbr->select( 'page',
                        array( 'page_namespace', 'page_title' ),
-                       array( 'page_namespace'   => NS_MAIN,
-                                  'page_is_redirect' => 0,
+                       array(
+                               'page_namespace' => NS_MAIN,
+                               'page_is_redirect' => 0,
                        ),
                        __METHOD__ );
 
index a705bcc..f166c43 100644 (file)
@@ -45,7 +45,7 @@ class FetchText extends Maintenance {
         *
         * note that that the text string itself is *not* followed by newline
         */
-        public function execute() {
+       public function execute() {
                $db = wfGetDB( DB_SLAVE );
                $stdin = $this->getStdin();
                while ( !feof( $stdin ) ) {
index ab7603d..2e8622b 100644 (file)
@@ -106,10 +106,10 @@ class FixSlaveDesync extends Maintenance {
                        $db = wfGetDB( $i );
                        /*
                        if ( !$db->masterPosWait( $masterFile, $masterPos, 10 ) ) {
-                                  $this->output( "Slave is too lagged, aborting\n" );
-                                  $dbw->commit( __METHOD__ );
-                                  sleep(10);
-                                  return;
+                               $this->output( "Slave is too lagged, aborting\n" );
+                               $dbw->commit( __METHOD__ );
+                               sleep(10);
+                               return;
                        }*/
                        $latest = $db->selectField( 'page', 'page_latest', array( 'page_id' => $pageID ), __METHOD__ );
                        $max = $db->selectField( 'revision', 'MAX(rev_id)', false, __METHOD__ );
index 691ed80..39731b1 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-require_once( __DIR__ .'/Maintenance.php' );
+require_once( __DIR__ . '/Maintenance.php' );
 
 /**
  * Maintenance script that formats RELEASE-NOTE file to wiki text or HTML markup.
index adea97e..44867d0 100644 (file)
@@ -167,7 +167,7 @@ class GenerateSitemap extends Maintenance {
                }
                $this->identifier = $this->getOption( 'identifier', wfWikiID() );
                $this->compress = $this->getOption( 'compress', 'yes' ) !== 'no';
-               $this->skipRedirects = $this->getOption( 'skip-redirects', false ) !== false ;
+               $this->skipRedirects = $this->getOption( 'skip-redirects', false ) !== false;
                $this->dbr = wfGetDB( DB_SLAVE );
                $this->generateNamespaces();
                $this->timestamp = wfTimestamp( TS_ISO_8601, wfTimestampNow() );
@@ -231,7 +231,7 @@ class GenerateSitemap extends Maintenance {
                        wfMkdirParents( $fspath, null, __METHOD__ ) or die( "Can not create directory $fspath.\n" );
                }
 
-               return realpath( $fspath ) . DIRECTORY_SEPARATOR ;
+               return realpath( $fspath ) . DIRECTORY_SEPARATOR;
        }
 
        /**
@@ -255,8 +255,9 @@ class GenerateSitemap extends Maintenance {
                        )
                );
 
-               foreach ( $res as $row )
+               foreach ( $res as $row ) {
                        $this->namespaces[] = $row->page_namespace;
+               }
        }
 
        /**
@@ -346,7 +347,9 @@ class GenerateSitemap extends Maintenance {
                                if ( $wgContLang->hasVariants() ) {
                                        $variants = $wgContLang->getVariants();
                                        foreach ( $variants as $vCode ) {
-                                               if ( $vCode == $wgContLang->getCode() ) continue; // we don't want default variant
+                                               if ( $vCode == $wgContLang->getCode() ) {
+                                                       continue; // we don't want default variant
+                                               }
                                                $entry = $this->fileEntry( $title->getCanonicalURL( '', $vCode ), $date, $this->priority( $namespace ) );
                                                $length += strlen( $entry );
                                                $this->write( $this->file, $entry );
@@ -374,7 +377,7 @@ class GenerateSitemap extends Maintenance {
         */
        function open( $file, $flags ) {
                $resource = $this->compress ? gzopen( $file, $flags ) : fopen( $file, $flags );
-               if( $resource === false ) {
+               if ( $resource === false ) {
                        wfDebugDieBacktrace( __METHOD__ . " error opening file $file with flags $flags. Check permissions?" );
                }
                return $resource;
@@ -384,23 +387,25 @@ class GenerateSitemap extends Maintenance {
         * gzwrite() / fwrite() wrapper
         */
        function write( &$handle, $str ) {
-               if( $handle === true || $handle === false ) {
+               if ( $handle === true || $handle === false ) {
                        wfDebugDieBacktrace( __METHOD__ . " was passed a boolean as a file handle.\n" );
                }
-               if ( $this->compress )
+               if ( $this->compress ) {
                        gzwrite( $handle, $str );
-               else
+               } else {
                        fwrite( $handle, $str );
+               }
        }
 
        /**
         * gzclose() / fclose() wrapper
         */
        function close( &$handle ) {
-               if ( $this->compress )
+               if ( $this->compress ) {
                        gzclose( $handle );
-               else
+               } else {
                        fclose( $handle );
+               }
        }
 
        /**
index 72b1d48..68be9f1 100644 (file)
@@ -39,7 +39,7 @@ class GetLagTimes extends Maintenance {
 
                if ( $lb->getServerCount() == 1 ) {
                        $this->error( "This script dumps replication lag times, but you don't seem to have\n"
-                                                 . "a multi-host db server configuration." );
+                               . "a multi-host db server configuration." );
                } else {
                        $lags = $lb->getLagTimes();
                        foreach ( $lags as $n => $lag ) {
index 904b624..beadb90 100644 (file)
@@ -34,16 +34,16 @@ require_once( __DIR__ . '/Maintenance.php' );
 class BackupReader extends Maintenance {
        public $reportingInterval = 100;
        public $pageCount = 0;
-       public $revCount  = 0;
-       public $dryRun    = false;
-       public $uploads   = false;
+       public $revCount = 0;
+       public $dryRun = false;
+       public $uploads = false;
        public $imageBasePath = false;
-       public $nsFilter  = false;
+       public $nsFilter = false;
 
        function __construct() {
                parent::__construct();
-               $gz = in_array('compress.zlib', stream_get_wrappers()) ? 'ok' : '(disabled; requires PHP zlib module)';
-               $bz2 = in_array('compress.bzip2', stream_get_wrappers()) ? 'ok' : '(disabled; requires PHP bzip2 module)';
+               $gz = in_array( 'compress.zlib', stream_get_wrappers() ) ? 'ok' : '(disabled; requires PHP zlib module)';
+               $bz2 = in_array( 'compress.bzip2', stream_get_wrappers() ) ? 'ok' : '(disabled; requires PHP bzip2 module)';
 
                $this->mDescription = <<<TEXT
 This script reads pages from an XML file as produced from Special:Export or
@@ -73,7 +73,7 @@ TEXT;
        }
 
        public function execute() {
-               if( wfReadOnly() ) {
+               if ( wfReadOnly() ) {
                        $this->error( "Wiki is in read-only mode; you'll need to disable it for import to work.", true );
                }
 
@@ -91,7 +91,7 @@ TEXT;
                        $this->setNsfilter( explode( '|', $this->getOption( 'namespaces' ) ) );
                }
 
-               if( $this->hasArg() ) {
+               if ( $this->hasArg() ) {
                        $this->importFromFile( $this->getArg() );
                } else {
                        $this->importFromStdin();
@@ -247,7 +247,7 @@ TEXT;
 
        function importFromStdin() {
                $file = fopen( 'php://stdin', 'rt' );
-               if( self::posix_isatty( $file ) ) {
+               if ( self::posix_isatty( $file ) ) {
                        $this->maybeHelp( true );
                }
                return $this->importFromHandle( $file );
@@ -259,14 +259,14 @@ TEXT;
                $source = new ImportStreamSource( $handle );
                $importer = new WikiImporter( $source );
 
-               if( $this->hasOption( 'debug' ) ) {
+               if ( $this->hasOption( 'debug' ) ) {
                        $importer->setDebug( true );
                }
                if ( $this->hasOption( 'no-updates' ) ) {
                        $importer->setNoUpdates( true );
                }
                $importer->setPageCallback( array( &$this, 'reportPage' ) );
-               $this->importCallback =  $importer->setRevisionCallback(
+               $this->importCallback = $importer->setRevisionCallback(
                        array( &$this, 'handleRevision' ) );
                $this->uploadCallback = $importer->setUploadCallback(
                        array( &$this, 'handleUpload' ) );
index 2b3d551..5ae6d6b 100644 (file)
@@ -99,7 +99,9 @@ function findAuxFile( $file, $auxExtension, $maxStrip = 1 ) {
                }
 
                $idx = strrpos( $n, '.' );
-               if ( !$idx ) break;
+               if ( !$idx ) {
+                       break;
+               }
 
                $n = substr( $n, 0, $idx );
                $maxStrip -= 1;
index 782f502..abc1b87 100644 (file)
@@ -107,12 +107,12 @@ $timestamp = isset( $options['timestamp'] ) ? $options['timestamp'] : false;
 $comment = 'Importing image file';
 
 if ( isset( $options['comment-file'] ) ) {
-       $comment =  file_get_contents( $options['comment-file'] );
+       $comment = file_get_contents( $options['comment-file'] );
        if ( $comment === false || $comment === null ) {
                die( "failed to read comment file: {$options['comment-file']}\n" );
        }
 } elseif ( isset( $options['comment'] ) ) {
-       $comment =  $options['comment'];
+       $comment = $options['comment'];
 }
 
 $commentExt = isset( $options['comment-ext'] ) ? $options['comment-ext'] : false;
@@ -185,10 +185,11 @@ if ( $count > 0 ) {
                if ( isset( $options['source-wiki-url'] ) ) {
                        /* find comment text directly from source wiki, through MW's API */
                        $real_comment = getFileCommentFromSourceWiki( $options['source-wiki-url'], $base );
-                       if ( $real_comment === false )
+                       if ( $real_comment === false ) {
                                $commentText = $comment;
-                       else
+                       } else {
                                $commentText = $real_comment;
+                       }
 
                        /* find user directly from source wiki, through MW's API */
                        $real_user = getFileUserFromSourceWiki( $options['source-wiki-url'], $base );
@@ -273,7 +274,7 @@ if ( $count > 0 ) {
 
                                        $cascade = false;
                                        $restrictions = array();
-                                       foreach( $title->getRestrictionTypes() as $type ) {
+                                       foreach ( $title->getRestrictionTypes() as $type ) {
                                                $restrictions[$type] = $protectLevel;
                                        }
 
@@ -304,8 +305,9 @@ if ( $count > 0 ) {
        foreach ( array( 'count' => 'Found', 'limit' => 'Limit', 'ignored' => 'Ignored',
                'added' => 'Added', 'skipped' => 'Skipped', 'overwritten' => 'Overwritten',
                'failed' => 'Failed' ) as $var => $desc ) {
-               if ( $$var > 0 )
+               if ( $$var > 0 ) {
                        echo( "{$desc}: {$$var}\n" );
+               }
        }
 
 } else {
index 1990659..84556b2 100644 (file)
@@ -48,7 +48,7 @@ class InitSiteStats extends Maintenance {
                $edits = $counter->edits();
                $this->output( "{$edits}\nCounting number of articles..." );
 
-               $good  = $counter->articles();
+               $good = $counter->articles();
                $this->output( "{$good}\nCounting total pages..." );
 
                $pages = $counter->pages();
index 935a296..56f9259 100644 (file)
@@ -29,7 +29,7 @@ if ( !function_exists( 'version_compare' ) || ( version_compare( phpversion(), '
 define( 'MW_CONFIG_CALLBACK', 'Installer::overrideConfig' );
 define( 'MEDIAWIKI_INSTALL', true );
 
-require_once( dirname( __DIR__ )."/maintenance/Maintenance.php" );
+require_once( dirname( __DIR__ ) . "/maintenance/Maintenance.php" );
 
 /**
  * Maintenance script to install and configure MediaWiki
@@ -109,13 +109,13 @@ class CommandLineInstaller extends Maintenance {
                        InstallerOverrides::getCliInstaller( $siteName, $adminName, $this->mOptions );
 
                $status = $installer->doEnvironmentChecks();
-               if( $status->isGood() ) {
+               if ( $status->isGood() ) {
                        $installer->showMessage( 'config-env-good' );
                } else {
                        $installer->showStatusMessage( $status );
                        return;
                }
-               if( !$this->hasOption( 'env-checks' ) ) {
+               if ( !$this->hasOption( 'env-checks' ) ) {
                        $installer->execute();
                        $installer->writeConfigurationFile( $this->getOption( 'confpath', $IP ) );
                }
index 20fb477..e9d8c86 100644 (file)
@@ -1,5 +1,7 @@
 <?php
-if ( !defined( 'MEDIAWIKI' ) ) die();
+if ( !defined( 'MEDIAWIKI' ) ) {
+       die();
+}
 /**
  * Statistic output classes.
  *
@@ -52,9 +54,9 @@ class wikiStatsOutput extends statsOutput {
                echo "'''Note:''' These statistics can be generated by running <code>php maintenance/language/transstat.php</code>.\n\n";
                echo "For additional information on specific languages (the message names, the actual problems, etc.), run <code>php maintenance/language/checkLanguage.php --lang=foo</code>.\n\n";
                echo 'English (en) is excluded because it is the default localization';
-               if( is_array( $wgDummyLanguageCodes ) ) {
+               if ( is_array( $wgDummyLanguageCodes ) ) {
                        $dummyCodes = array();
-                       foreach( $wgDummyLanguageCodes as $dummyCode => $correctCode ) {
+                       foreach ( $wgDummyLanguageCodes as $dummyCode => $correctCode ) {
                                $dummyCodes[] = Language::fetchLanguageName( $dummyCode ) . ' (' . $dummyCode . ')';
                        }
                        echo ', as well as the following languages that are not intended for system message translations, usually because they redirect to other language codes: ' . implode( ', ', $dummyCodes );
@@ -80,7 +82,9 @@ class wikiStatsOutput extends statsOutput {
                        # Weigh reverse with factor 20 so coloring takes effect more quickly as
                        # this option is used solely for reporting 'bad' percentages.
                        $v = $v * 20;
-                       if ( $v > 255 ) $v = 255;
+                       if ( $v > 255 ) {
+                               $v = 255;
+                       }
                        $v = 255 - $v;
                }
                if ( $v < 128 ) {
index 6abf7b4..55e34be 100644 (file)
@@ -82,12 +82,14 @@ if ( $run ) {
        }
        include( $messagesFile );
        $messageExist = isset( $messages );
-       if ( $messageExist )
+       if ( $messageExist ) {
                $wgMessages[$langCode] = $messages;
+       }
        include( $messagesFileC );
        $messageCExist = isset( $messages );
-       if ( $messageCExist )
+       if ( $messageCExist ) {
                $wgMessages[$langCodeC] = $messages;
+       }
        $count = 0;
 
        if ( ( $messageExist ) && ( $messageCExist ) ) {
@@ -126,9 +128,11 @@ if ( $run ) {
                        }
                }
        } else {
-               if ( !$messageExist )
+               if ( !$messageExist ) {
                        echo "There are no messages defined in $langCode.\n";
-               if ( !$messageCExist )
+               }
+               if ( !$messageCExist ) {
                        echo "There are no messages defined in $langCodeC.\n";
+               }
        }
 }
index 1860f4a..413d650 100644 (file)
@@ -25,7 +25,7 @@
  * @ingroup MaintenanceLanguage
  */
 class CheckLanguageCLI {
-       protected $code  = null;
+       protected $code = null;
        protected $level = 2;
        protected $doLinks = false;
        protected $linksPrefix = '';
@@ -384,7 +384,7 @@ ENDS;
                                                echo "[messages are hidden]\n";
                                        } else {
                                                foreach ( $messages as $key => $value ) {
-                                                       if( !in_array( $check, $this->nonMessageChecks() ) ) {
+                                                       if ( !in_array( $check, $this->nonMessageChecks() ) ) {
                                                                $key = $this->formatKey( $key, $code );
                                                        }
                                                        if ( $this->level == 2 || empty( $value ) ) {
@@ -411,7 +411,7 @@ ENDS;
                        $problems = 0;
                        $detailTextForLangChecks = array();
                        foreach ( $results as $check => $messages ) {
-                               if( in_array( $check, $this->nonMessageChecks() ) ) {
+                               if ( in_array( $check, $this->nonMessageChecks() ) ) {
                                        continue;
                                }
                                $count = count( $messages );
@@ -463,9 +463,9 @@ EOL;
         * @return bool True if there are any results, false if not.
         */
        protected function isEmpty() {
-               foreach( $this->results as $results ) {
-                       foreach( $results as $messages ) {
-                               if( !empty( $messages ) ) {
+               foreach ( $this->results as $results ) {
+                       foreach ( $results as $messages ) {
+                               if ( !empty( $messages ) ) {
                                        return false;
                                }
                        }
@@ -645,15 +645,15 @@ ENDS;
         * @throws MWException
         */
        protected function checkLanguage( $code ) {
-               foreach( $this->extensions as $extension ) {
+               foreach ( $this->extensions as $extension ) {
                        $this->L = $extension;
                        $this->results = array();
                        $this->results[$code] = parent::checkLanguage( $code );
 
-                       if( !$this->isEmpty() ) {
+                       if ( !$this->isEmpty() ) {
                                echo $extension->name() . ":\n";
 
-                               if( $this->level > 0 ) {
+                               if ( $this->level > 0 ) {
                                        switch( $this->output ) {
                                                case 'plain':
                                                        $this->outputText();
index 12823c0..786ba5b 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup MaintenanceLanguage
  */
 
-require_once( __DIR__ .'/../Maintenance.php' );
+require_once( __DIR__ . '/../Maintenance.php' );
 
 /**
  * Generate first letter data files for Collation.php
@@ -102,7 +102,7 @@ class GenerateCollationData extends Maintenance {
                                $error .= "You are using outdated version of ICU ($icuVersion), intended for "
                                        . ( $unicodeVersion ? "Unicode $unicodeVersion" : "an unknown version of Unicode" )
                                        . "; this file might not be avalaible for it, and it's not supported by MediaWiki. "
-                                       ." You are on your own; consider upgrading PHP's intl extension or try "
+                                       . " You are on your own; consider upgrading PHP's intl extension or try "
                                        . "one of the files available at:";
                        } elseif ( version_compare( $icuVersion, "51.0", ">=" ) ) {
                                // Extra recent version
@@ -386,7 +386,7 @@ class UcdXmlReader {
                $this->xml = new XMLReader;
                $this->xml->open( $this->fileName );
                if ( !$this->xml ) {
-                       throw new MWException( __METHOD__.": unable to open {$this->fileName}" );
+                       throw new MWException( __METHOD__ . ": unable to open {$this->fileName}" );
                }
                while ( $this->xml->name !== 'ucd' && $this->xml->read() );
                $this->xml->read();
index ad29efb..dcace15 100644 (file)
@@ -39,8 +39,9 @@ class LangMemUsage extends Maintenance {
        }
 
        public function execute() {
-               if ( !function_exists( 'memory_get_usage' ) )
+               if ( !function_exists( 'memory_get_usage' ) ) {
                        $this->error( "You must compile PHP with --enable-memory-limit", true );
+               }
 
                $langtool = new languages();
                $memlast = $memstart = memory_get_usage();
index dcd9b9b..9fbc0bc 100644 (file)
@@ -154,7 +154,7 @@ class languages {
                        if ( isset( $this->mGeneralMessages['required'][$key] ) ) {
                                $this->mMessages[$code]['required'][$key] = $value;
                                $this->mMessages[$code]['translated'][$key] = $value;
-                       } else if ( isset( $this->mGeneralMessages['optional'][$key] ) ) {
+                       } elseif ( isset( $this->mGeneralMessages['optional'][$key] ) ) {
                                $this->mMessages[$code]['optional'][$key] = $value;
                                $this->mMessages[$code]['translated'][$key] = $value;
                        } else {
@@ -184,7 +184,7 @@ class languages {
                foreach ( $this->mGeneralMessages['all'] as $key => $value ) {
                        if ( in_array( $key, $this->mIgnoredMessages ) ) {
                                $this->mGeneralMessages['ignored'][$key] = $value;
-                       } else if ( in_array( $key, $this->mOptionalMessages ) ) {
+                       } elseif ( in_array( $key, $this->mOptionalMessages ) ) {
                                $this->mGeneralMessages['optional'][$key] = $value;
                                $this->mGeneralMessages['translatable'][$key] = $value;
                        } else {
@@ -466,11 +466,11 @@ class languages {
                        '[POP]' => "\xE2\x80\xAC",
                        '[LRO]' => "\xE2\x80\xAD",
                        '[RLO]' => "\xE2\x80\xAB",
-                       '[ZWSP]'=> "\xE2\x80\x8B",
-                       '[NBSP]'=> "\xC2\xA0",
-                       '[WJ]'  => "\xE2\x81\xA0",
+                       '[ZWSP]' => "\xE2\x80\x8B",
+                       '[NBSP]' => "\xC2\xA0",
+                       '[WJ]' => "\xE2\x81\xA0",
                        '[BOM]' => "\xEF\xBB\xBF",
-                       '[FFFD]'=> "\xEF\xBF\xBD",
+                       '[FFFD]' => "\xEF\xBF\xBD",
                );
                $wrongRegExp = '/(' . implode( '|', array_values( $wrongChars ) ) . ')/sDu';
                $wrongCharsMessages = array();
@@ -500,8 +500,8 @@ class languages {
                foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
                        $matches = array();
                        preg_match_all( "/\[\[([{$tc}]+)(?:\\|(.+?))?]]/sDu", $value, $matches );
-                       for ($i = 0; $i < count($matches[0]); $i++ ) {
-                               if ( preg_match( "/.*project.*/isDu",  $matches[1][$i] ) ) {
+                       for ( $i = 0; $i < count( $matches[0] ); $i++ ) {
+                               if ( preg_match( "/.*project.*/isDu", $matches[1][$i] ) ) {
                                        $messages[$key][] = $matches[0][$i];
                                }
                        }
@@ -563,7 +563,9 @@ class languages {
                $this->loadFile( 'en' );
                $this->loadFile( $code );
                $namespacesDiff = array_diff_key( $this->mNamespaceNames['en'], $this->mNamespaceNames[$code] );
-               if ( isset( $namespacesDiff[NS_MAIN] ) ) unset( $namespacesDiff[NS_MAIN] );
+               if ( isset( $namespacesDiff[NS_MAIN] ) ) {
+                       unset( $namespacesDiff[NS_MAIN] );
+               }
                return $namespacesDiff;
        }
 
@@ -579,7 +581,7 @@ class languages {
                $namespaces = array();
 
                # Check default namespace name
-               if( isset( $this->mNamespaceNames[$code][NS_PROJECT_TALK] ) ) {
+               if ( isset( $this->mNamespaceNames[$code][NS_PROJECT_TALK] ) ) {
                        $default = $this->mNamespaceNames[$code][NS_PROJECT_TALK];
                        if ( strpos( $default, '$1' ) === false ) {
                                $namespaces[$default] = 'default';
@@ -587,7 +589,7 @@ class languages {
                }
 
                # Check namespace aliases
-               foreach( $this->mNamespaceAliases[$code] as $key => $value ) {
+               foreach ( $this->mNamespaceAliases[$code] as $key => $value ) {
                        if ( $value == NS_PROJECT_TALK && strpos( $key, '$1' ) === false ) {
                                $namespaces[$key] = '';
                        }
@@ -758,9 +760,9 @@ class extensionLanguages extends languages {
         * @param $code string The language code.
         */
        protected function loadFile( $code ) {
-               if( !isset( $this->mRawMessages[$code] ) ) {
+               if ( !isset( $this->mRawMessages[$code] ) ) {
                        $this->mRawMessages[$code] = $this->mMessageGroup->load( $code );
-                       if( empty( $this->mRawMessages[$code] ) ) {
+                       if ( empty( $this->mRawMessages[$code] ) ) {
                                $this->mRawMessages[$code] = array();
                        }
                }
index 64ffc09..3b9fadf 100644 (file)
@@ -56,8 +56,6 @@ $wgMessageStructure = array(
                'tog-shownumberswatching',
                'tog-oldsig',
                'tog-fancysig',
-               'tog-externaleditor',
-               'tog-externaldiff',
                'tog-showjumplinks',
                'tog-uselivepreview',
                'tog-forceeditsummary',
@@ -72,6 +70,7 @@ $wgMessageStructure = array(
                'tog-showhiddencats',
                'tog-noconvertlink',
                'tog-norollbackdiff',
+               'tog-useeditwarning',
        ),
        'underline' => array(
                'underline-always',
@@ -430,9 +429,15 @@ $wgMessageStructure = array(
                'welcomeuser',
                'welcomecreation-msg',
                'yourname',
+               'userlogin-yourname',
+               'userlogin-yourname-ph',
                'yourpassword',
+               'userlogin-yourpassword',
+               'userlogin-yourpassword-ph',
                'yourpasswordagain',
                'remembermypassword',
+               'userlogin-remembermypassword',
+               'userlogin-signwithsecure',
                'securelogin-stick-https',
                'yourdomainname',
                'password-change-forbidden',
@@ -446,12 +451,16 @@ $wgMessageStructure = array(
                'userlogout',
                'userlogout-summary',
                'notloggedin',
+               'userlogin-noaccount',
+               'userlogin-joinproject',
                'nologin',
                'nologinlink',
                'createaccount',
                'gotaccount',
                'gotaccountlink',
                'userlogin-resetlink',
+               'helplogin-url',
+               'userlogin-helplink',
                'createaccountmail',
                'createaccountreason',
                'badretype',
@@ -538,6 +547,7 @@ $wgMessageStructure = array(
                'passwordreset-text',
                'passwordreset-legend',
                'passwordreset-disabled',
+               'passwordreset-emaildisabled',
                'passwordreset-pretext',
                'passwordreset-username',
                'passwordreset-domain',
@@ -695,6 +705,7 @@ $wgMessageStructure = array(
                'content-failed-to-parse',
                'invalid-content-data',
                'content-not-allowed-here',
+               'editwarning-warning',
        ),
        'contentmodels' => array(
                'content-model-wikitext',
@@ -2468,7 +2479,7 @@ $wgMessageStructure = array(
                'javascripttest-pagetext-noframework',
                'javascripttest-pagetext-unknownframework',
                'javascripttest-pagetext-frameworks',
-               'javascripttest-pagetext-skins' ,
+               'javascripttest-pagetext-skins',
                'javascripttest-qunit-name',
                'javascripttest-qunit-intro',
                'javascripttest-qunit-heading',
@@ -3157,16 +3168,16 @@ $wgMessageStructure = array(
                'exif-lightsource-255',
        ),
        'exif-flash' => array(
-               'exif-flash-fired-0' ,
-               'exif-flash-fired-1' ,
-               'exif-flash-return-0' ,
-               'exif-flash-return-2' ,
-               'exif-flash-return-3' ,
-               'exif-flash-mode-1' ,
-               'exif-flash-mode-2' ,
-               'exif-flash-mode-3' ,
-               'exif-flash-function-1' ,
-               'exif-flash-redeye-1' ,
+               'exif-flash-fired-0',
+               'exif-flash-fired-1',
+               'exif-flash-return-0',
+               'exif-flash-return-2',
+               'exif-flash-return-3',
+               'exif-flash-mode-1',
+               'exif-flash-mode-2',
+               'exif-flash-mode-3',
+               'exif-flash-function-1',
+               'exif-flash-redeye-1',
        ),
        'exif-focalplaneresolutionunit' => array(
                'exif-focalplaneresolutionunit-2',
@@ -3964,8 +3975,6 @@ XHTML id names.",
        'video-info'          => 'Video information, used by Language::formatTimePeriod() to format lengths in the above messages',
        'badimagelist'        => 'Bad image list',
        'variantname-zh'      => "Short names for language variants used for language conversion links.
-To disable showing a particular link, set it to 'disable', e.g.
-'variantname-zh-sg' => 'disable',
 Variants for Chinese language",
        'variantname-gan'      => 'Variants for Gan language',
        'variantname-sr'      => 'Variants for Serbian language',
index b2e04c7..973e9c4 100644 (file)
@@ -50,25 +50,27 @@ class MessageWriter {
                $sortedMessages = $messages[1];
 
                # Write to the file
-               if ( $messagesFolder )
+               if ( $messagesFolder ) {
                        $filename = Language::getFileName( "$messagesFolder/Messages", $code );
-               else
+               } else {
                        $filename = Language::getMessagesFileName( $code );
+               }
 
-               if ( file_exists( $filename ) )
+               if ( file_exists( $filename ) ) {
                        $contents = file_get_contents( $filename );
-               else
+               } else {
                        $contents = '<?php
 $messages = array(
 );
 ';
+               }
 
-               if( strpos( $contents, '$messages' ) !== false ) {
+               if ( strpos( $contents, '$messages' ) !== false ) {
                        $contents = explode( '$messages', $contents );
-                       if( $messagesText == '$messages' . $contents[1] ) {
+                       if ( $messagesText == '$messages' . $contents[1] ) {
                                echo "Generated messages for language $code. Same as the current file.\n";
                        } else {
-                               if( $write ) {
+                               if ( $write ) {
                                        $new = $contents[0];
                                        $new .= $messagesText;
                                        file_put_contents( $filename, $new );
@@ -77,12 +79,13 @@ $messages = array(
                                        echo "Generated messages for language $code. Please run the script again (without the parameter \"dry-run\") to write the array to the file.\n";
                                }
                        }
-                       if( $listUnknown && isset( $sortedMessages['unknown'] ) && !empty( $sortedMessages['unknown'] ) ) {
-                               if ( $removeUnknown )
+                       if ( $listUnknown && isset( $sortedMessages['unknown'] ) && !empty( $sortedMessages['unknown'] ) ) {
+                               if ( $removeUnknown ) {
                                        echo "\nThe following " . count( $sortedMessages['unknown'] ) . " unknown messages have been removed:\n";
-                               else
+                               } else {
                                        echo "\nThere are " . count( $sortedMessages['unknown'] ) . " unknown messages, please check them:\n";
-                               foreach( $sortedMessages['unknown'] as $key => $value ) {
+                               }
+                               foreach ( $sortedMessages['unknown'] as $key => $value ) {
                                        echo "* " . $key . "\n";
                                }
                        }
@@ -117,12 +120,12 @@ $messages = array(
 
                # Sort messages to blocks
                $sortedMessages['unknown'] = $messages;
-               foreach( self::$messageStructure as $blockName => $block ) {
+               foreach ( self::$messageStructure as $blockName => $block ) {
                        /**
                         * @var $block array
                         */
-                       foreach( $block as $key ) {
-                               if( array_key_exists( $key, $sortedMessages['unknown'] ) ) {
+                       foreach ( $block as $key ) {
+                               if ( array_key_exists( $key, $sortedMessages['unknown'] ) ) {
                                        $sortedMessages[$blockName][$key] = $sortedMessages['unknown'][$key];
                                        unset( $sortedMessages['unknown'][$key] );
                                }
@@ -132,13 +135,13 @@ $messages = array(
                # Write all the messages
                $messagesText = "\$messages = array(
 ";
-               foreach( $sortedMessages as $block => $messages ) {
+               foreach ( $sortedMessages as $block => $messages ) {
                        # Skip if it's the block of unknown messages - handle that in the end of file
-                       if( $block == 'unknown' ) {
+                       if ( $block == 'unknown' ) {
                                continue;
                        }
 
-                       if( $ignoredComments ) {
+                       if ( $ignoredComments ) {
                                $ignored = self::$ignoredMessages;
                                $optional = self::$optionalMessages;
                        } else {
@@ -175,10 +178,10 @@ $messages = array(
                $commentArray = array();
 
                # List of keys only
-               foreach( $messages as $key ) {
-                       if( in_array( $key, $ignored ) ) {
+               foreach ( $messages as $key ) {
+                       if ( in_array( $key, $ignored ) ) {
                                $commentArray[$key] = ' # ' . self::$ignoredComment;
-                       } elseif( in_array( $key, $optional ) ) {
+                       } elseif ( in_array( $key, $optional ) ) {
                                $commentArray[$key] = ' # ' . self::$optionalComment;
                        }
                }
@@ -202,13 +205,13 @@ $messages = array(
                $blockText = '';
 
                # Skip the block if it includes no messages
-               if( empty( $messages ) ) {
+               if ( empty( $messages ) ) {
                        return '';
                }
 
                # Format the block comment (if exists); check for multiple lines comments
-               if( !empty( $blockComment ) ) {
-                       if( strpos( $blockComment, "\n" ) === false ) {
+               if ( !empty( $blockComment ) ) {
+                       if ( strpos( $blockComment, "\n" ) === false ) {
                                $blockText .= "$prefix# $blockComment
 ";
                        } else {
@@ -223,7 +226,7 @@ $blockComment
                $maxKeyLength = max( array_map( 'strlen', array_keys( $messages ) ) );
 
                # Format the messages
-               foreach( $messages as $key => $value ) {
+               foreach ( $messages as $key => $value ) {
                        # Add the key name
                        $blockText .= "$prefix'$key'";
 
@@ -241,16 +244,16 @@ $blockComment
                        $single = "'";
                        $double = '"';
 
-                       if( strpos( $value, $single ) === false ) {
+                       if ( strpos( $value, $single ) === false ) {
                                # Nothing ugly, just use '
-                               $blockText .= $single.$value.$single;
-                       } elseif( strpos( $value, $double ) === false && !preg_match('/\$[a-zA-Z_\x7f-\xff]/', $value) ) {
+                               $blockText .= $single . $value . $single;
+                       } elseif ( strpos( $value, $double ) === false && !preg_match( '/\$[a-zA-Z_\x7f-\xff]/', $value ) ) {
                                # No "-quotes, no variables that need quoting, use "
-                               $blockText .= $double.$value.$double;
+                               $blockText .= $double . $value . $double;
                        } else {
                                # Something needs quoting, pick the quote which causes less quoting
                                $quote = substr_count( $value, $double ) + substr_count( $value, '$' ) >= substr_count( $value, $single ) ? $single : $double;
-                               if( $quote === $double ) {
+                               if ( $quote === $double ) {
                                        $extra = '$';
                                } else {
                                        $extra = '';
@@ -262,7 +265,7 @@ $blockComment
                        $blockText .= ',';
 
                        # Add comments, if there is any
-                       if( array_key_exists( $key, $messageComments ) ) {
+                       if ( array_key_exists( $key, $messageComments ) ) {
                                $blockText .= $messageComments[$key];
                        }
 
index 6ff8a17..4bed0d4 100644 (file)
@@ -48,7 +48,7 @@ if ( $cache ) {
        $servers = $wgObjectCaches[$cache]['servers'];
 } elseif ( $wgMainCacheType === CACHE_MEMCACHED ) {
        $mcc->set_servers( $wgMemCachedServers );
-} elseif( isset( $wgObjectCaches[$wgMainCacheType]['servers'] ) ) {
+} elseif ( isset( $wgObjectCaches[$wgMainCacheType]['servers'] ) ) {
        $mcc->set_servers( $wgObjectCaches[$wgMainCacheType]['servers'] );
 } else {
        print "MediaWiki isn't configured for Memcached usage\n";
@@ -116,7 +116,9 @@ do {
        $quit = false;
 
        $line = Maintenance::readconsole();
-       if ( $line === false ) exit;
+       if ( $line === false ) {
+               exit;
+       }
 
        $args = explode( ' ', $line );
        $command = array_shift( $args );
index 469feca..91a106b 100644 (file)
@@ -34,7 +34,7 @@ class mcTest extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Makes several 'set', 'incr' and 'get' requests on every"
-                                                         . " memcached server and shows a report";
+                       . " memcached server and shows a report";
                $this->addOption( 'i', 'Number of iterations', false, true );
                $this->addOption( 'cache', 'Use servers from this $wgObjectCaches store', false, true );
                $this->addArg( 'server[:port]', 'Memcached server to test, with optional port', false );
@@ -54,7 +54,7 @@ class mcTest extends Maintenance {
                        $servers = array( $this->getArg() );
                } elseif ( $wgMainCacheType === CACHE_MEMCACHED ) {
                        global $wgMemCachedServers;
-                       $servers = $wgMemCachedServers ;
+                       $servers = $wgMemCachedServers;
                } elseif ( isset( $wgObjectCaches[$wgMainCacheType]['servers'] ) ) {
                        $servers = $wgObjectCaches[$wgMainCacheType]['servers'];
                } else {
index fbba977..06cdfb0 100644 (file)
@@ -61,7 +61,7 @@ class MergeMessageFileList extends Maintenance {
                if ( $this->hasOption( 'extensions-dir' ) ) {
                        $extdir = $this->getOption( 'extensions-dir' );
                        $entries = scandir( $extdir );
-                       foreach( $entries as $extname ) {
+                       foreach ( $entries as $extname ) {
                                if ( $extname == '.' || $extname == '..' || !is_dir( "$extdir/$extname" ) ) {
                                        continue;
                                }
index 4fad7a7..6148cc4 100644 (file)
@@ -61,7 +61,7 @@ $doxygenTemplate = $mwPath . 'maintenance/Doxyfile';
 $doxygenInputFilter = "php {$mwPath}maintenance/mwdoc-filter.php";
 
 /** where Phpdoc should output documentation */
-$doxyOutput = $mwPath . 'docs' . DIRECTORY_SEPARATOR ;
+$doxyOutput = $mwPath . 'docs' . DIRECTORY_SEPARATOR;
 
 $doxyVersion = 'master';
 
@@ -122,14 +122,14 @@ function generateConfigFile( $doxygenTemplate, $outputDirectory, $stripFromPath,
        // Replace template placeholders by correct values.
        $replacements = array(
                '{{OUTPUT_DIRECTORY}}' => $outputDirectory,
-               '{{STRIP_FROM_PATH}}'  => $stripFromPath,
-               '{{CURRENT_VERSION}}'  => $currentVersion,
-               '{{INPUT}}'            => $input,
-               '{{EXCLUDE}}'          => $exclude,
+               '{{STRIP_FROM_PATH}}' => $stripFromPath,
+               '{{CURRENT_VERSION}}' => $currentVersion,
+               '{{INPUT}}' => $input,
+               '{{EXCLUDE}}' => $exclude,
                '{{EXCLUDE_PATTERNS}}' => $excludePatterns,
-               '{{HAVE_DOT}}'         => `which dot` ? 'YES' : 'NO',
-               '{{GENERATE_MAN}}'     => $doxyGenerateMan ? 'YES' : 'NO',
-               '{{INPUT_FILTER}}'     => $doxygenInputFilter,
+               '{{HAVE_DOT}}' => `which dot` ? 'YES' : 'NO',
+               '{{GENERATE_MAN}}' => $doxyGenerateMan ? 'YES' : 'NO',
+               '{{INPUT_FILTER}}' => $doxygenInputFilter,
        );
        $tmpCfg = str_replace( array_keys( $replacements ), array_values( $replacements ), $template );
        $tmpFileName = tempnam( wfTempDir(), 'mwdocgen-' );
@@ -147,11 +147,21 @@ unset( $file );
 if ( is_array( $argv ) ) {
        for ($i = 0; $i < count($argv); $i++ ) {
                switch( $argv[$i] ) {
-               case '--all':         $input = 0; break;
-               case '--includes':    $input = 1; break;
-               case '--languages':   $input = 2; break;
-               case '--maintenance': $input = 3; break;
-               case '--skins':       $input = 4; break;
+               case '--all':
+                       $input = 0;
+                       break;
+               case '--includes':
+                       $input = 1;
+                       break;
+               case '--languages':
+                       $input = 2;
+                       break;
+               case '--maintenance':
+                       $input = 3;
+                       break;
+               case '--skins':
+                       $input = 4;
+                       break;
                case '--file':
                        $input = 5;
                        $i++;
@@ -159,7 +169,9 @@ if ( is_array( $argv ) ) {
                                $file = $argv[$i];
                        }
                        break;
-               case '--no-extensions': $input = 6; break;
+               case '--no-extensions':
+                       $input = 6;
+                       break;
                case '--output':
                        $i++;
                        if ( isset( $argv[$i] ) ) {
@@ -217,8 +229,7 @@ Several documentation possibilities:
  5 : only a given file
  6 : all but the extensions directory
 OPTIONS;
-       while ( !is_numeric( $input ) )
-       {
+       while ( !is_numeric( $input ) ) {
                $input = readaline( "\nEnter your choice [0]:" );
                if ( $input == '' ) {
                        $input = 0;
@@ -227,11 +238,21 @@ OPTIONS;
 }
 
 switch ( $input ) {
-case 0: $input = $mwPath;  break;
-case 1: $input = $mwPathI; break;
-case 2: $input = $mwPathL; break;
-case 3: $input = $mwPathM; break;
-case 4: $input = $mwPathS; break;
+case 0:
+       $input = $mwPath;
+       break;
+case 1:
+       $input = $mwPathI;
+       break;
+case 2:
+       $input = $mwPathL;
+       break;
+case 3:
+       $input = $mwPathM;
+       break;
+case 4:
+       $input = $mwPathS;
+       break;
 case 5:
        if ( !isset( $file ) ) {
                $file = readaline( "Enter file name $mwPath" );
index 6067a82..c111b3b 100644 (file)
@@ -207,10 +207,10 @@ class NamespaceConflictChecker extends Maintenance {
         * @return array
         */
        private function getConflicts( $ns, $name ) {
-               $page  = 'page';
+               $page = 'page';
                $table = $this->db->tableName( $page );
 
-               $prefix     = $this->db->strencode( $name );
+               $prefix = $this->db->strencode( $name );
                $encNamespace = $this->db->addQuotes( $ns );
 
                $titleSql = "TRIM(LEADING '$prefix:' FROM {$page}_title)";
@@ -318,12 +318,12 @@ class NamespaceConflictChecker extends Maintenance {
                $this->db->update( $table,
                        array(
                                "{$prefix}_namespace" => $newTitle->getNamespace(),
-                               "{$prefix}_title"     => $newTitle->getDBkey(),
+                               "{$prefix}_title" => $newTitle->getDBkey(),
                        ),
                        array(
                                // "{$prefix}_namespace" => 0,
-                               // "{$prefix}_title"     => $row->oldtitle,
-                               "{$prefix}_id"           => $row->id,
+                               // "{$prefix}_title" => $row->oldtitle,
+                               "{$prefix}_id" => $row->id,
                        ),
                        __METHOD__ );
                $this->output( "ok.\n" );
index c471a44..e18f362 100644 (file)
@@ -66,7 +66,7 @@ class NukeNS extends Maintenance {
                foreach ( $res as $row ) {
                        // echo "$ns_name:".$row->page_title, "\n";
                        $title = Title::makeTitle( $ns, $row->page_title );
-                       $id   = $title->getArticleID();
+                       $id = $title->getArticleID();
 
                        // Get corresponding revisions
                        $res2 = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_page = $id" );
@@ -94,7 +94,7 @@ class NukeNS extends Maintenance {
                                        $n_deleted ++;
                                }
                        } else {
-                         $this->output( "skip: " . $title->getPrefixedText() . "\n" );
+                               $this->output( "skip: " . $title->getPrefixedText() . "\n" );
                        }
                }
                $dbw->commit( __METHOD__ );
index 89dffe0..bca3237 100644 (file)
@@ -54,7 +54,7 @@ class NukePage extends Maintenance {
                $this->output( "Searching for \"$name\"..." );
                $title = Title::newFromText( $name );
                if ( $title ) {
-                       $id   = $title->getArticleID();
+                       $id = $title->getArticleID();
                        $real = $title->getPrefixedText();
                        $isGoodArticle = $title->isContentPage();
                        $this->output( "found \"$real\" with ID $id.\n" );
index a46c5e1..47f5ff7 100644 (file)
@@ -53,7 +53,7 @@ class AlterSharedConstraints extends Maintenance {
                        if ( $wgSharedPrefix != null ) {
                                $ltable = preg_replace( "/^$wgSharedPrefix(.*)/i", "$wgDBprefix\\1", $stable );
                        } else {
-                               $ltable = "{$wgDBprefix}{$stable}" ;
+                               $ltable = "{$wgDBprefix}{$stable}";
                        }
 
                        $result = $dbw->query( "SELECT uc.constraint_name, uc.table_name, ucc.column_name, uccpk.table_name pk_table_name, uccpk.column_name pk_column_name, uc.delete_rule, uc.deferrable, uc.deferred
index 3b1a9b0..bae0b88 100644 (file)
@@ -171,7 +171,7 @@ class Orphans extends Maintenance {
         */
        private function checkSeparation( $fix ) {
                $dbw = wfGetDB( DB_MASTER );
-               $page     = $dbw->tableName( 'page' );
+               $page = $dbw->tableName( 'page' );
                $revision = $dbw->tableName( 'revision' );
 
                if ( $fix ) {
@@ -209,7 +209,7 @@ class Orphans extends Maintenance {
                                                        'revision',
                                                        'rev_id',
                                                        array(
-                                                               'rev_page'      => $row->page_id,
+                                                               'rev_page' => $row->page_id,
                                                                'rev_timestamp' => $row2->max_timestamp ) );
                                                $this->output( "... updating to revision $maxId\n" );
                                                $maxRev = Revision::newFromId( $maxId );
index 58e76b0..14976c9 100644 (file)
@@ -85,12 +85,12 @@ class CLIParser extends Maintenance {
         */
        protected function Wikitext() {
 
-               $php_stdin  = 'php://stdin';
+               $php_stdin = 'php://stdin';
                $input_file = $this->getArg( 0, $php_stdin );
 
-               if( $input_file === $php_stdin ) {
+               if ( $input_file === $php_stdin ) {
                        $ctrl = wfIsWindows() ? 'CTRL+Z' : 'CTRL+D';
-                       $this->error( basename(__FILE__) .": warning: reading wikitext from STDIN. Press $ctrl to parse.\n" );
+                       $this->error( basename(__FILE__) . ": warning: reading wikitext from STDIN. Press $ctrl to parse.\n" );
                }
 
                return file_get_contents( $input_file );
@@ -113,7 +113,7 @@ class CLIParser extends Maintenance {
                $title =
                        $this->getOption( 'title' )
                        ? $this->getOption( 'title' )
-                       : 'CLIParser' ;
+                       : 'CLIParser';
                return Title::newFromText( $title );
        }
 
index 27e692d..3a02d71 100644 (file)
@@ -86,7 +86,7 @@ class PopulateFilearchiveSha1 extends LoggedUpdateMaintenance {
                        }
 
                        $done += $i;
-                       if( $i !== $batchSize ) {
+                       if ( $i !== $batchSize ) {
                                break;
                        }
 
@@ -94,7 +94,7 @@ class PopulateFilearchiveSha1 extends LoggedUpdateMaintenance {
                        $this->output( sprintf(
                                "id %d done (up to %d), %5.3f%%  \r", $lastId, $endId, $lastId / $endId * 100 ) );
                        wfWaitForSlaves();
-               } while( true );
+               } while ( true );
 
                $processingTime = microtime( true ) - $startTime;
                $this->output( sprintf( "\nDone %d files in %.1f seconds\n", $done, $processingTime ) );
index 99d8155..c372891 100644 (file)
@@ -75,7 +75,9 @@ class PopulateLogSearch extends LoggedUpdateMaintenance {
                                if ( LogEventsList::typeAction( $row, $delTypes, 'revision' ) ) {
                                        $params = LogPage::extractParams( $row->log_params );
                                        // Param format: <urlparam> <item CSV> [<ofield> <nfield>]
-                                       if ( count( $params ) < 2 ) continue; // bad row?
+                                       if ( count( $params ) < 2 ) {
+                                               continue; // bad row?
+                                       }
                                        $field = RevisionDeleter::getRelationType( $params[0] );
                                        // B/C, the params may start with a title key (<title> <urlparam> <CSV>)
                                        if ( $field == null ) {
@@ -97,8 +99,9 @@ class PopulateLogSearch extends LoggedUpdateMaintenance {
                                        $log->addRelations( $field, $items, $row->log_id );
                                        // Determine what table to query...
                                        $prefix = substr( $field, 0, strpos( $field, '_' ) ); // db prefix
-                                       if ( !isset( self::$tableMap[$prefix] ) )
+                                       if ( !isset( self::$tableMap[$prefix] ) ) {
                                                continue; // bad row?
+                                       }
                                        $table = self::$tableMap[$prefix];
                                        $userField = $prefix . '_user';
                                        $userTextField = $prefix . '_user_text';
@@ -109,10 +112,11 @@ class PopulateLogSearch extends LoggedUpdateMaintenance {
                                                array( $field => $items )
                                        );
                                        foreach ( $sres as $srow ) {
-                                               if ( $srow->$userField > 0 )
+                                               if ( $srow->$userField > 0 ) {
                                                        $userIds[] = intval( $srow->$userField );
-                                               elseif ( $srow->$userTextField != '' )
+                                               } elseif ( $srow->$userTextField != '' ) {
                                                        $userIPs[] = $srow->$userTextField;
+                                               }
                                        }
                                        // Add item author relations...
                                        $log->addRelations( 'target_author_id', $userIds, $row->log_id );
@@ -121,7 +125,9 @@ class PopulateLogSearch extends LoggedUpdateMaintenance {
                                } elseif ( LogEventsList::typeAction( $row, $delTypes, 'event' ) ) {
                                        $params = LogPage::extractParams( $row->log_params );
                                        // Param format: <item CSV> [<ofield> <nfield>]
-                                       if ( count( $params ) < 1 ) continue; // bad row
+                                       if ( count( $params ) < 1 ) {
+                                               continue; // bad row
+                                       }
                                        $items = explode( ',', $params[0] );
                                        $log = new LogPage( $row->log_type );
                                        // Add item relations...
@@ -133,10 +139,11 @@ class PopulateLogSearch extends LoggedUpdateMaintenance {
                                                array( 'log_id' => $items )
                                        );
                                        foreach ( $sres as $srow ) {
-                                               if ( $srow->log_user > 0 )
+                                               if ( $srow->log_user > 0 ) {
                                                        $userIds[] = intval( $srow->log_user );
-                                               elseif ( IP::isIPAddress( $srow->log_user_text ) )
+                                               } elseif ( IP::isIPAddress( $srow->log_user_text ) ) {
                                                        $userIPs[] = $srow->log_user_text;
+                                               }
                                        }
                                        $log->addRelations( 'target_author_id', $userIds, $row->log_id );
                                        $log->addRelations( 'target_author_ip', $userIPs, $row->log_id );
index e81d4ff..c9b7b99 100644 (file)
@@ -98,8 +98,9 @@ class PopulateParentId extends LoggedUpdateMaintenance {
                                        }
                                }
                                $previousID = intval( $previousID );
-                               if ( $previousID != $row->rev_parent_id )
+                               if ( $previousID != $row->rev_parent_id ) {
                                        $changed++;
+                               }
                                # Update the row...
                                $db->update( 'revision',
                                        array( 'rev_parent_id' => $previousID ),
index 1572869..58f4407 100644 (file)
@@ -48,7 +48,7 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
                $db = $this->getDB( DB_MASTER );
                if ( !$db->tableExists( 'revision' ) ) {
                        $this->error( "revision table does not exist", true );
-               } else if ( !$db->fieldExists( 'revision', 'rev_len', __METHOD__ ) ) {
+               } elseif ( !$db->fieldExists( 'revision', 'rev_len', __METHOD__ ) ) {
                        $this->output( "rev_len column does not exist\n\n", true );
                        return false;
                }
@@ -70,12 +70,16 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
                $fields = Revision::selectFields();
                while ( $blockStart <= $end ) {
                        $this->output( "...doing rev_id from $blockStart to $blockEnd\n" );
-                       $res = $db->select( 'revision',
-                                               $fields,
-                                               array( "rev_id >= $blockStart",
-                                                  "rev_id <= $blockEnd",
-                                                  "rev_len IS NULL" ),
-                                               __METHOD__ );
+                       $res = $db->select(
+                               'revision',
+                               $fields,
+                               array(
+                                       "rev_id >= $blockStart",
+                                       "rev_id <= $blockEnd",
+                                       "rev_len IS NULL"
+                               ),
+                               __METHOD__
+                       );
                        # Go through and update rev_len from these rows.
                        foreach ( $res as $row ) {
                                $rev = new Revision( $row );
index 113eef4..dfe905e 100644 (file)
@@ -48,7 +48,7 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
                        $this->error( "revision table does not exist", true );
                } elseif ( !$db->tableExists( 'archive' ) ) {
                        $this->error( "archive table does not exist", true );
-               } else if ( !$db->fieldExists( 'revision', 'rev_sha1', __METHOD__ ) ) {
+               } elseif ( !$db->fieldExists( 'revision', 'rev_sha1', __METHOD__ ) ) {
                        $this->output( "rev_sha1 column does not exist\n\n", true );
                        return false;
                }
@@ -189,9 +189,9 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
                                array( 'ar_sha1' => Revision::base36Sha1( $text ) ),
                                array(
                                        'ar_namespace' => $row->ar_namespace,
-                                       'ar_title'     => $row->ar_title,
+                                       'ar_title' => $row->ar_title,
                                        'ar_timestamp' => $row->ar_timestamp,
-                                       'ar_len'       => $row->ar_len // extra sanity
+                                       'ar_len' => $row->ar_len // extra sanity
                                ),
                                __METHOD__
                        );
index bb3d68b..3e46205 100644 (file)
@@ -86,9 +86,8 @@ class PreprocessDump extends DumpIterator {
 
                try {
                        $this->mPreprocessor->preprocessToObj( strval( $content->getNativeData() ), 0 );
-               }
-               catch(Exception $e) {
-                       $this->error("Caught exception " . $e->getMessage() . " in " . $rev->getTitle()->getPrefixedText() );
+               } catch ( Exception $e ) {
+                       $this->error( "Caught exception " . $e->getMessage() . " in " . $rev->getTitle()->getPrefixedText() );
                }
        }
 }
index 49c7aee..0a1a9f6 100644 (file)
@@ -29,7 +29,7 @@ class PPFuzzTester {
        public $hairs = array(
                '[[', ']]', '{{', '{{', '}}', '}}', '{{{', '}}}',
                '<', '>', '<nowiki', '<gallery', '</nowiki>', '</gallery>', '<nOwIkI>', '</NoWiKi>',
-               '<!--' , '-->',
+               '<!--', '-->',
                "\n==", "==\n",
                '|', '=', "\n", ' ', "\t", "\x7f",
                '~~', '~~~', '~~~~', 'subst:',
index ff13bd6..8f4caa8 100644 (file)
@@ -67,7 +67,7 @@ class Protect extends Maintenance {
                }
 
                $restrictions = array();
-               foreach( $t->getRestrictionTypes() as $type ) {
+               foreach ( $t->getRestrictionTypes() as $type ) {
                        $restrictions[$type] = $protection;
                }
 
index 2ccf703..c408dcb 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-if( PHP_SAPI != 'cli' ) {
+if ( PHP_SAPI != 'cli' ) {
        die( 1 );
 }
 
@@ -42,7 +42,7 @@ if ( ( isset( $_REQUEST ) && array_key_exists( 'argv', $_REQUEST ) ) || count( $
        $ip = $argv[1];
        $port = $argv[2];
        $url = $argv[3];
-       $host = trim(`hostname`);
+       $host = trim( `hostname` );
        $output = "Connecting to $ip:$port, target $url, this hostname $host\n";
 
        # Open socket
index cd62716..c6a6e29 100644 (file)
@@ -53,8 +53,8 @@ class PurgeDeletedFiles extends Maintenance {
 
                $conds = array(
                        'log_namespace' => NS_FILE,
-                       'log_type'      => $logType,
-                       'log_action'    => array( 'delete', 'revision' )
+                       'log_type' => $logType,
+                       'log_action' => array( 'delete', 'revision' )
                );
                $start = $this->getOption( 'starttime' );
                if ( $start ) {
index fb66db0..52e7fec 100644 (file)
@@ -44,7 +44,7 @@ class PurgeList extends Maintenance {
                if ( $this->hasOption( 'all' ) ) {
                        $this->purgeNamespace( false );
                } elseif ( $this->hasOption( 'namespace' ) ) {
-                       $this->purgeNamespace( intval( $this->getOption( 'namespace') ) );
+                       $this->purgeNamespace( intval( $this->getOption( 'namespace' ) ) );
                } else {
                        $this->doPurge();
                }
@@ -74,7 +74,7 @@ class PurgeList extends Maintenance {
                                }
                        }
                }
-               $this->output( "Purging " . count( $urls ). " urls\n" );
+               $this->output( "Purging " . count( $urls ) . " urls\n" );
                $this->sendPurgeRequest( $urls );
        }
 
@@ -129,7 +129,7 @@ class PurgeList extends Maintenance {
                        }
                } else {
                        if ( $this->hasOption( 'verbose' ) ) {
-                               $this->output( implode( "\n", $urls ) . "\n"  );
+                               $this->output( implode( "\n", $urls ) . "\n" );
                        }
                        $u = new SquidUpdate( $urls );
                        $u->doUpdate();
index 2d79f36..b55a779 100644 (file)
@@ -46,7 +46,7 @@ class ReassignEdits extends Maintenance {
                if ( $this->hasArg( 0 ) && $this->hasArg( 1 ) ) {
                        # Set up the users involved
                        $from = $this->initialiseUser( $this->getArg( 0 ) );
-                       $to   = $this->initialiseUser( $this->getArg( 1 ) );
+                       $to = $this->initialiseUser( $this->getArg( 1 ) );
 
                        # If the target doesn't exist, and --force is not set, stop here
                        if ( $to->getId() || $this->hasOption( 'force' ) ) {
index 3165b97..f3a42c4 100644 (file)
@@ -153,8 +153,9 @@ class RebuildFileCache extends Maintenance {
                $this->output( "Done!\n" );
 
                // Remove these to be safe
-               if ( isset( $wgTitle ) )
+               if ( isset( $wgTitle ) ) {
                        unset( $wgTitle );
+               }
        }
 }
 
index a70e591..dfaae24 100644 (file)
@@ -45,8 +45,9 @@ class RebuildMessages extends Maintenance {
                foreach ( $databases as $db ) {
                        $this->output( "Deleting message cache for {$db}... " );
                        $messageMemc->delete( "{$db}:messages" );
-                       if ( $wgEnableSidebarCache )
+                       if ( $wgEnableSidebarCache ) {
                                $messageMemc->delete( "{$db}:sidebar" );
+                       }
                        $this->output( "Deleted\n" );
                }
        }
index bfaaab5..6609531 100644 (file)
@@ -61,9 +61,9 @@ class RebuildRecentchanges extends Maintenance {
                $this->output( '$wgRCMaxAge=' . $wgRCMaxAge );
                $days = $wgRCMaxAge / 24 / 3600;
                if ( intval( $days ) == $days ) {
-                               $this->output( " (" . $days . " days)\n" );
+                       $this->output( " (" . $days . " days)\n" );
                } else {
-                               $this->output( " (approx. " .  intval( $days ) . " days)\n" );
+                       $this->output( " (approx. " . intval( $days ) . " days)\n" );
                }
 
                $cutoff = time() - $wgRCMaxAge;
@@ -105,7 +105,7 @@ class RebuildRecentchanges extends Maintenance {
 
                # Fill in the rc_last_oldid field, which points to the previous edit
                $sql = "SELECT rc_cur_id,rc_this_oldid,rc_timestamp FROM $recentchanges " .
-                 "ORDER BY rc_cur_id,rc_timestamp";
+                       "ORDER BY rc_cur_id,rc_timestamp";
                $res = $dbw->query( $sql, DB_MASTER );
 
                $lastCurId = 0;
@@ -142,12 +142,12 @@ class RebuildRecentchanges extends Maintenance {
                                $dbw->update( 'recentchanges',
                                        array(
                                                'rc_last_oldid' => $lastOldId,
-                                               'rc_new'        => $new,
-                                               'rc_type'       => $new,
-                                               'rc_old_len'    => $lastSize,
-                                               'rc_new_len'    => $size,
+                                               'rc_new' => $new,
+                                               'rc_type' => $new,
+                                               'rc_old_len' => $lastSize,
+                                               'rc_new_len' => $size,
                                        ), array(
-                                               'rc_cur_id'     => $lastCurId,
+                                               'rc_cur_id' => $lastCurId,
                                                'rc_this_oldid' => $obj->rc_this_oldid,
                                        ),
                                        __METHOD__
index 534b7ca..8ff2b7b 100644 (file)
@@ -147,7 +147,7 @@ class RebuildTextIndex extends Maintenance {
                $searchindex = $this->db->tableName( 'searchindex' );
                $this->output( "\nRebuild the index...\n" );
                $sql = "ALTER TABLE $searchindex ADD FULLTEXT si_title (si_title), " .
-                 "ADD FULLTEXT si_text (si_text)";
+                       "ADD FULLTEXT si_text (si_text)";
                $this->db->query( $sql, __METHOD__ );
        }
 
index 55f5b4a..a53548d 100644 (file)
@@ -151,7 +151,7 @@ class RefreshImageMetadata extends Maintenance {
                        }
                        $conds2 = array( 'img_name > ' . $dbw->addQuotes( $row->img_name ) );
                        wfWaitForSlaves();
-               } while( $res->numRows() === $this->mBatchSize );
+               } while ( $res->numRows() === $this->mBatchSize );
 
                $total = $upgraded + $leftAlone;
                if ( $force ) {
@@ -173,7 +173,7 @@ class RefreshImageMetadata extends Maintenance {
                $like = $this->getOption( 'metadata-contains', false );
 
                if ( $end !== false ) {
-                       $conds[] = 'img_name <= ' . $dbw->addQuotes( $end ) ;
+                       $conds[] = 'img_name <= ' . $dbw->addQuotes( $end );
                }
                if ( $mime !== false ) {
                        list( $major, $minor ) = File::splitMime( $mime );
index 7b25566..e3820f0 100644 (file)
@@ -281,12 +281,13 @@ class RefreshLinks extends Maintenance {
                        $this->output( "Retrieving illegal entries from $table... " );
 
                        // SELECT DISTINCT( $field ) FROM $table LEFT JOIN page ON $field=page_id WHERE page_id IS NULL;
-                       $results = $dbr->select( array( $table, 'page' ),
-                                                 $field,
-                                                 array( 'page_id' => null ),
-                                                 __METHOD__,
-                                                 'DISTINCT',
-                                                 array( 'page' => array( 'LEFT JOIN', "$field=page_id" ) )
+                       $results = $dbr->select(
+                               array( $table, 'page' ),
+                               $field,
+                               array( 'page_id' => null ),
+                               __METHOD__,
+                               'DISTINCT',
+                               array( 'page' => array( 'LEFT JOIN', "$field=page_id" ) )
                        );
 
                        $counter = 0;
index 2ba2b3d..3938915 100644 (file)
@@ -70,8 +70,9 @@ class DumpRenderer extends Maintenance {
 
                $delta = microtime( true ) - $this->startTime;
                $this->error( "Rendered {$this->count} pages in " . round($delta, 2) . " seconds " );
-               if ($delta > 0)
+               if ( $delta > 0 ) {
                        $this->error( round($this->count / $delta, 2) . " pages/sec" );
+               }
                $this->error( "\n" );
        }
 
index e113916..9b1b6e7 100644 (file)
@@ -38,8 +38,9 @@ class BatchedQueryRunner extends Maintenance {
        }
 
        public function execute() {
-               if ( !$this->hasArg() )
+               if ( !$this->hasArg() ) {
                        $this->error( "No query specified. Specify the query as a command line parameter.", true );
+               }
 
                $query = $this->getArg();
                $n = 1;
index 66d8028..1f48ffe 100644 (file)
@@ -61,10 +61,11 @@ class RunJobs extends Maintenance {
                        $procs = intval( $this->getOption( 'procs' ) );
                        if ( $procs < 1 || $procs > 1000 ) {
                                $this->error( "Invalid argument to --procs", true );
-                       }
-                       $fc = new ForkController( $procs );
-                       if ( $fc->start() != 'child' ) {
-                               exit( 0 );
+                       } elseif ( $procs != 1 ) {
+                               $fc = new ForkController( $procs );
+                               if ( $fc->start() != 'child' ) {
+                                       exit( 0 );
+                               }
                        }
                }
                $maxJobs = $this->getOption( 'maxjobs', false );
@@ -94,6 +95,7 @@ class RunJobs extends Maintenance {
 
                                // Run the job...
                                $t = microtime( true );
+                               wfProfileIn( __METHOD__ . '-' . get_class( $job ) );
                                try {
                                        $status = $job->run();
                                        $error = $job->getLastError();
@@ -101,6 +103,7 @@ class RunJobs extends Maintenance {
                                        $status = false;
                                        $error = get_class( $e ) . ': ' . $e->getMessage();
                                }
+                               wfProfileOut( __METHOD__ . '-' . get_class( $job ) );
                                $timeMs = intval( ( microtime( true ) - $t ) * 1000 );
 
                                // Mark the job as done on success or when the job cannot be retried
index 831746d..e7ddfa8 100644 (file)
@@ -44,7 +44,7 @@ class ShowJobs extends Maintenance {
                $group = JobQueueGroup::singleton();
                if ( $this->hasOption( 'group' ) ) {
                        foreach ( $group->getQueueTypes() as $type ) {
-                               $queue   = $group->get( $type );
+                               $queue = $group->get( $type );
                                $pending = $queue->getSize();
                                $claimed = $queue->getAcquiredCount();
                                $abandoned = $queue->getAbandonedCount();
index dbbdab9..11f3a43 100644 (file)
@@ -60,7 +60,7 @@ class ShowSiteStats extends Maintenance {
                $max_length_value = $max_length_desc = 0;
                foreach ( $fields as $field => $desc ) {
                        $max_length_value = max( $max_length_value, strlen( $stats->$field ) );
-                       $max_length_desc  = max( $max_length_desc,  strlen( $desc ) ) ;
+                       $max_length_desc = max( $max_length_desc, strlen( $desc ) );
                }
 
                // Show them
index 1169990..b10a379 100644 (file)
@@ -70,9 +70,9 @@ class MwSql extends Maintenance {
 
                $wholeLine = '';
                $newPrompt = '> ';
-               $prompt    = $newPrompt;
+               $prompt = $newPrompt;
                while ( ( $line = Maintenance::readconsole( $prompt ) ) !== false ) {
-                       if( !$line ) {
+                       if ( !$line ) {
                                # User simply pressed return key
                                continue;
                        }
@@ -94,9 +94,9 @@ class MwSql extends Maintenance {
                        try{
                                $res = $dbw->query( $wholeLine );
                                $this->sqlPrintResult( $res, $dbw );
-                               $prompt    = $newPrompt;
+                               $prompt = $newPrompt;
                                $wholeLine = '';
-                       } catch (DBQueryError $e) {
+                       } catch ( DBQueryError $e ) {
                                $doDie = ! Maintenance::posix_isatty( 0 );
                                $this->error( $e, $doDie );
                        }
index 16568ac..49f4e00 100644 (file)
@@ -73,7 +73,9 @@ class Sqlite {
 
                        $tables = $db->query( "SELECT name FROM sqlite_master WHERE type='table'", __METHOD__ );
                        foreach ( $tables as $table ) {
-                               if ( strpos( $table->name, 'sqlite_' ) === 0 ) continue;
+                               if ( strpos( $table->name, 'sqlite_' ) === 0 ) {
+                                       continue;
+                               }
 
                                $columns = $db->query( "PRAGMA table_info({$table->name})", __METHOD__ );
                                foreach ( $columns as $col ) {
@@ -89,4 +91,4 @@ class Sqlite {
                $db->close();
                return true;
        }
- };
+};
index fd9393f..b9bfe81 100644 (file)
@@ -75,7 +75,7 @@ class CheckStorage {
                        'fixable' => array(),
                );
 
-               for ( $chunkStart = 1 ; $chunkStart < $maxRevId; $chunkStart += $chunkSize ) {
+               for ( $chunkStart = 1; $chunkStart < $maxRevId; $chunkStart += $chunkSize ) {
                        $chunkEnd = $chunkStart + $chunkSize - 1;
                        // print "$chunkStart of $maxRevId\n";
 
index d636283..b766fe9 100644 (file)
@@ -53,7 +53,7 @@ class CompressOld extends Maintenance {
         * @todo document
         */
        const LS_INDIVIDUAL = 0;
-       const LS_CHUNKED    = 1;
+       const LS_CHUNKED = 1;
 
        public function __construct() {
                parent::__construct();
@@ -113,9 +113,9 @@ class CompressOld extends Maintenance {
                $this->output( "Starting from old_id $start...\n" );
                $dbw = wfGetDB( DB_MASTER );
                do {
-                       $res = $dbw->select( 'text', array( 'old_id','old_flags','old_text' ),
+                       $res = $dbw->select( 'text', array( 'old_id', 'old_flags', 'old_text' ),
                                "old_id>=$start", __METHOD__, array( 'ORDER BY' => 'old_id', 'LIMIT' => $chunksize, 'FOR UPDATE' ) );
-                       if( $res->numRows() == 0 ) {
+                       if ( $res->numRows() == 0 ) {
                                break;
                        }
                        $last = $start;
@@ -126,7 +126,7 @@ class CompressOld extends Maintenance {
                        }
                        $start = $last + 1; # Deletion may leave long empty stretches
                        $this->output( "$start...\n" );
-               } while( true );
+               } while ( true );
        }
 
        /**
@@ -254,8 +254,8 @@ class CompressOld extends Maintenance {
 
                        # Get the page row
                        $pageRes = $dbr->select( 'page',
-                               array('page_id', 'page_namespace', 'page_title','page_latest'),
-                               $pageConds + array('page_id' => $pageId), __METHOD__ );
+                               array( 'page_id', 'page_namespace', 'page_title', 'page_latest' ),
+                               $pageConds + array( 'page_id' => $pageId ), __METHOD__ );
                        if ( $pageRes->numRows() == 0 ) {
                                continue;
                        }
@@ -352,20 +352,21 @@ class CompressOld extends Maintenance {
                                                # Move blob objects to External Storage
                                                $stored = $storeObj->store( $extdb, serialize( $chunk ));
                                                if ($stored === false) {
-                                                       $this->error(  "Unable to store object" );
+                                                       $this->error( "Unable to store object" );
                                                        return false;
                                                }
                                                # Store External Storage URLs instead of Stub placeholders
                                                foreach ($stubs as $stub) {
-                                                       if ($stub===false)
+                                                       if ( $stub === false ) {
                                                                continue;
+                                                       }
                                                        # $stored should provide base path to a BLOB
-                                                       $url = $stored."/".$stub->getHash();
+                                                       $url = $stored . "/" . $stub->getHash();
                                                        $dbw->update( 'text',
                                                                array( /* SET */
                                                                        'old_text' => $url,
                                                                        'old_flags' => 'external,utf-8',
-                                                               ), array ( /* WHERE */
+                                                               ), array( /* WHERE */
                                                                        'old_id' => $stub->getReferrer(),
                                                                )
                                                        );
index 39f08f9..3fffb82 100644 (file)
@@ -46,7 +46,7 @@ class DumpRev extends Maintenance {
                        $this->error( "Row not found", true );
                }
 
-               $flags = explode( ',',  $row->old_flags );
+               $flags = explode( ',', $row->old_flags );
                $text = $row->old_text;
                if ( in_array( 'external', $flags ) ) {
                        $this->output( "External $text\n" );
index 030a147..2a6d017 100644 (file)
@@ -279,7 +279,7 @@ class RecompressTracked {
         */
        function dispatchToSlave( $slaveId, $args ) {
                $args = (array)$args;
-               $cmd = implode( ' ',  $args );
+               $cmd = implode( ' ', $args );
                fwrite( $this->slavePipes[$slaveId], "$cmd\n" );
        }
 
index f69a9b0..e225ebb 100644 (file)
@@ -83,7 +83,7 @@ class UpdateMediaWiki extends Maintenance {
        function execute() {
                global $wgVersion, $wgTitle, $wgLang, $wgAllowSchemaUpdates;
 
-               if( !$wgAllowSchemaUpdates && !( $this->hasOption( 'force' ) || $this->hasOption( 'schema' ) || $this->hasOption( 'noschema' ) ) ) {
+               if ( !$wgAllowSchemaUpdates && !( $this->hasOption( 'force' ) || $this->hasOption( 'schema' ) || $this->hasOption( 'noschema' ) ) ) {
                        $this->error( "Do not run update.php on this wiki. If you're seeing this you should\n"
                                . "probably ask for some help in performing your schema updates or use\n"
                                . "the --noschema and --schema options to get an SQL file for someone\n"
@@ -92,12 +92,12 @@ class UpdateMediaWiki extends Maintenance {
                }
 
                $this->fileHandle = null;
-               if( substr( $this->getOption( 'schema' ), 0, 2 ) === "--" ) {
+               if ( substr( $this->getOption( 'schema' ), 0, 2 ) === "--" ) {
                        $this->error( "The --schema option requires a file as an argument.\n", true );
-               } else if( $this->hasOption( 'schema' ) ) {
+               } elseif ( $this->hasOption( 'schema' ) ) {
                        $file = $this->getOption( 'schema' );
                        $this->fileHandle = fopen( $file, "w" );
-                       if( $this->fileHandle === false ) {
+                       if ( $this->fileHandle === false ) {
                                $err = error_get_last();
                                $this->error( "Problem opening the schema file for writing: $file\n\t{$err['message']}", true );
                        }
@@ -122,7 +122,7 @@ class UpdateMediaWiki extends Maintenance {
                $db = wfGetDB( DB_MASTER );
 
                $this->output( "Going to run database updates for " . wfWikiID() . "\n" );
-               if( $db->getType() === 'sqlite' ) {
+               if ( $db->getType() === 'sqlite' ) {
                        $this->output( "Using SQLite file: '{$db->mDatabaseFile}'\n" );
                }
                $this->output( "Depending on the size of your database this may take a while!\n" );
@@ -135,13 +135,13 @@ class UpdateMediaWiki extends Maintenance {
                $shared = $this->hasOption( 'doshared' );
 
                $updates = array( 'core', 'extensions' );
-               if( !$this->hasOption('schema') ) {
-                       if( $this->hasOption('noschema') ) {
+               if ( !$this->hasOption( 'schema' ) ) {
+                       if ( $this->hasOption( 'noschema' ) ) {
                                $updates[] = 'noschema';
                        }
                        $updates[] = 'stats';
 
-                       if( !$this->hasOption('nopurge') ) {
+                       if ( !$this->hasOption( 'nopurge' ) ) {
                                $updates[] = 'purge';
                        }
                }
@@ -149,7 +149,7 @@ class UpdateMediaWiki extends Maintenance {
                $updater = DatabaseUpdater::newForDb( $db, $shared, $this );
                $updater->doUpdates( $updates );
 
-               foreach( $updater->getPostDatabaseUpdateMaintenance() as $maint ) {
+               foreach ( $updater->getPostDatabaseUpdateMaintenance() as $maint ) {
                        $child = $this->runChild( $maint );
 
                        // LoggedUpdateMaintenance is checking the updatelog itself
@@ -166,7 +166,7 @@ class UpdateMediaWiki extends Maintenance {
                        }
                }
 
-               if( !$this->hasOption('nopurge') ) {
+               if ( !$this->hasOption( 'nopurge' ) ) {
                        $updater->purgeCache();
                }
 
index ac78484..1030338 100644 (file)
@@ -60,7 +60,7 @@ class UpdateSearchIndex extends Maintenance {
                        # We can safely delete the file when we're done though.
                        $start = file_get_contents( 'searchUpdate.pos' );
                        unlink( 'searchUpdate.pos' );
-               } elseif( is_readable( $posFile ) ) {
+               } elseif ( is_readable( $posFile ) ) {
                        $start = file_get_contents( $posFile );
                } else {
                        $start = wfTimestamp( TS_MW, time() - 86400 );
@@ -97,9 +97,8 @@ class UpdateSearchIndex extends Maintenance {
 
                $page = $dbw->tableName( 'page' );
                $sql = "SELECT rc_cur_id FROM $recentchanges
-                 JOIN $page ON rc_cur_id=page_id AND rc_this_oldid=page_latest
-                 WHERE rc_type != " . RC_LOG . " AND rc_timestamp BETWEEN '$start' AND '$end'
-                 ";
+                       JOIN $page ON rc_cur_id=page_id AND rc_this_oldid=page_latest
+                       WHERE rc_type != " . RC_LOG . " AND rc_timestamp BETWEEN '$start' AND '$end'";
                $res = $dbw->query( $sql, __METHOD__ );
 
                $this->updateSearchIndex( $maxLockTime, array( $this, 'searchIndexUpdateCallback' ), $dbw, $res );
index f92f67a..9c21bb5 100644 (file)
@@ -100,7 +100,7 @@ class UpdateSpecialPages extends Maintenance {
                        }
 
                        if ( !$this->hasOption( 'only' ) || $this->getOption( 'only' ) == $queryPage->getName() ) {
-                               $this->output( sprintf( '%-30s ',  $special ) );
+                               $this->output( sprintf( '%-30s ', $special ) );
                                if ( $queryPage->isExpensive() ) {
                                        $t1 = explode( ' ', microtime() );
                                        # Do the query
index be45a11..6fb29be 100644 (file)
@@ -112,9 +112,9 @@ class UserDupes {
                $count = count( $dupes );
 
                $this->out( "Found $count accounts with duplicate records on " . wfWikiID() . ".\n" );
-               $this->trimmed    = 0;
+               $this->trimmed = 0;
                $this->reassigned = 0;
-               $this->failed     = 0;
+               $this->failed = 0;
                foreach ( $dupes as $name ) {
                        $this->examine( $name, $doDelete );
                }
@@ -223,7 +223,7 @@ class UserDupes {
                        __METHOD__ );
 
                $firstRow = $this->db->fetchObject( $result );
-               $firstId  = $firstRow->user_id;
+               $firstId = $firstRow->user_id;
                $this->out( "Record that will be used for '$name' is user_id=$firstId\n" );
 
                foreach ( $result as $row ) {
index cbe6b05..ddbda49 100644 (file)
@@ -38,7 +38,7 @@ class userOptions {
        public $mOldValue;
        public $mNewValue;
 
-       private $mMode, $mReady ;
+       private $mMode, $mReady;
 
        /** Constructor. Will show usage and exit if script options are not correct */
        function __construct( $opts, $args ) {
@@ -60,9 +60,9 @@ class userOptions {
         */
        private function checkOpts( $opts, $args ) {
                // The three possible ways to run the script:
-               $list   = isset( $opts['list'] );
-               $usage  = isset( $opts['usage'] ) && ( count( $args ) <= 1 );
-               $change = isset( $opts['old'] ) && isset( $opts['new'] ) && ( count( $args ) <= 1 ) ;
+               $list = isset( $opts['list'] );
+               $usage = isset( $opts['usage'] ) && ( count( $args ) <= 1 );
+               $change = isset( $opts['old'] ) && isset( $opts['new'] ) && ( count( $args ) <= 1 );
 
                // We want only one of them
                $isValid = ( ( $list + $usage + $change ) == 1 );
@@ -82,18 +82,18 @@ class userOptions {
 
                $this->mQuick = isset( $opts['nowarn'] );
                $this->mQuiet = isset( $opts['quiet'] );
-               $this->mDry   = isset( $opts['dry'] );
+               $this->mDry = isset( $opts['dry'] );
 
                // Set object properties, specially 'mMode' used by run()
                if ( isset( $opts['list'] ) ) {
-                       $this->mMode = 'LISTER' ;
+                       $this->mMode = 'LISTER';
                } elseif ( isset( $opts['usage'] ) ) {
-                       $this->mMode = 'USAGER' ;
-                       $this->mAnOption = isset( $args[0] ) ? $args[0] : false ;
+                       $this->mMode = 'USAGER';
+                       $this->mAnOption = isset( $args[0] ) ? $args[0] : false;
                } elseif ( isset( $opts['old'] ) && isset( $opts['new'] ) ) {
-                       $this->mMode = 'CHANGER' ;
-                       $this->mOldValue = $opts['old'] ;
-                       $this->mNewValue = $opts['new'] ;
+                       $this->mMode = 'CHANGER';
+                       $this->mOldValue = $opts['old'];
+                       $this->mNewValue = $opts['new'];
                        $this->mAnOption = $args[0];
                } else {
                        die( "There is a bug in the software, this should never happen\n" );
@@ -212,7 +212,9 @@ class userOptions {
                                if ( !$this->mDry ) {
                                        $user->saveSettings();
                                }
-                               if ( !$this->mQuiet ) { print " OK\n"; }
+                               if ( !$this->mQuiet ) {
+                                       print " OK\n";
+                               }
 
                        } elseif ( !$this->mQuiet ) {
                                print "Not changing '$username' using <{$this->mAnOption}> = '$curValue'\n";
index 0db3e20..c96184e 100644 (file)
@@ -20,7 +20,7 @@
  * @file
  */
 
-if( !defined( 'MEDIAWIKI' ) ) {
+if ( !defined( 'MEDIAWIKI' ) ) {
        die( 'Not an entry point.' );
 }
 
@@ -737,6 +737,12 @@ return array(
        'mediawiki.action.view.rightClickEdit' => array(
                'scripts' => 'resources/mediawiki.action/mediawiki.action.view.rightClickEdit.js',
        ),
+       'mediawiki.action.edit.editWarning' => array(
+               'scripts' => 'resources/mediawiki.action/mediawiki.action.edit.editWarning.js',
+               'messages' => array(
+                       'editwarning-warning',
+               ),
+       ),
        // Alias for backwards compatibility
        'mediawiki.action.watch.ajax' => array(
                'dependencies' => 'mediawiki.page.watch.ajax'
@@ -896,7 +902,7 @@ return array(
        ),
        'mediawiki.special.preferences' => array(
                'scripts' => 'resources/mediawiki.special/mediawiki.special.preferences.js',
-               'styles'  => 'resources/mediawiki.special/mediawiki.special.preferences.css',
+               'styles' => 'resources/mediawiki.special/mediawiki.special.preferences.css',
        ),
        'mediawiki.special.recentchanges' => array(
                'scripts' => 'resources/mediawiki.special/mediawiki.special.recentchanges.js',
@@ -931,6 +937,13 @@ return array(
        'mediawiki.special.userlogin.signup' => array(
                'scripts' => 'resources/mediawiki.special/mediawiki.special.userLogin.signup.js',
        ),
+       'mediawiki.special.userlogin.vform' => array(
+               'styles' => array(
+                       'resources/mediawiki.special/mediawiki.special.vforms.css',
+                       'resources/mediawiki.special/mediawiki.special.userLogin.vform.css',
+               ),
+               'position' => 'top',
+       ),
        'mediawiki.special.javaScriptTest' => array(
                'scripts' => 'resources/mediawiki.special/mediawiki.special.javaScriptTest.js',
                'messages' => array_merge( Skin::getSkinNameMessages(), array(
@@ -1030,4 +1043,11 @@ return array(
                'remoteBasePath' => $GLOBALS['wgStylePath'],
                'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
+       'mediawiki.ui' => array(
+               'skinStyles' => array(
+                       'default' => 'resources/mediawiki.ui/mediawiki.ui.default.css',
+                       'vector' => 'resources/mediawiki.ui/mediawiki.ui.vector.css',
+               ),
+               'position' => 'top',
+       ),
 );
index e08c9aa..a552237 100644 (file)
                ts.dateRegex[0] = new RegExp( /^\s*(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{2,4})\s*?/i);
 
                // Written Month name, dmy
-               ts.dateRegex[1] = new RegExp( '^\\s*(\\d{1,2})[\\,\\.\\-\\/\'\\s]*(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]*(\\d{2,4})\\s*$', 'i' );
+               ts.dateRegex[1] = new RegExp( '^\\s*(\\d{1,2})[\\,\\.\\-\\/\'\\s]+(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]+(\\d{2,4})\\s*$', 'i' );
 
                // Written Month name, mdy
-               ts.dateRegex[2] = new RegExp( '^\\s*(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]*(\\d{1,2})[\\,\\.\\-\\/\'\\s]*(\\d{2,4})\\s*$', 'i' );
+               ts.dateRegex[2] = new RegExp( '^\\s*(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]+(\\d{1,2})[\\,\\.\\-\\/\'\\s]+(\\d{2,4})\\s*$', 'i' );
 
        }
 
diff --git a/resources/mediawiki.action/mediawiki.action.edit.editWarning.js b/resources/mediawiki.action/mediawiki.action.edit.editWarning.js
new file mode 100644 (file)
index 0000000..cfe9762
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Javascript for module editWarning
+ */
+( function ( mw, $ ) {
+       $( document ).ready( function () {
+               // Check if EditWarning is enabled and if we need it
+               if ( $( '#wpTextbox1' ).length === 0 ) {
+                       return true;
+               }
+               // Get the original values of some form elements
+               $( '#wpTextbox1, #wpSummary' ).each( function () {
+                       $( this ).data( 'origtext', $( this ).val() );
+               });
+               var savedWindowOnBeforeUnload;
+               $( window )
+                       .on( 'beforeunload.editwarning', function () {
+                               var retval;
+
+                               // Check if the current values of some form elements are the same as
+                               // the original values
+                               if (
+                                       mw.config.get( 'wgAction' ) === 'submit' ||
+                                               $( '#wpTextbox1' ).data( 'origtext' ) !== $( '#wpTextbox1' ).val() ||
+                                               $( '#wpSummary' ).data( 'origtext' ) !== $( '#wpSummary' ).val()
+                               ) {
+                                       // Return our message
+                                       retval = mw.msg( 'editwarning-warning' );
+                               }
+
+                               // Unset the onbeforeunload handler so we don't break page caching in Firefox
+                               savedWindowOnBeforeUnload = window.onbeforeunload;
+                               window.onbeforeunload = null;
+                               if ( retval !== undefined ) {
+                                       // ...but if the user chooses not to leave the page, we need to rebind it
+                                       setTimeout( function () {
+                                               window.onbeforeunload = savedWindowOnBeforeUnload;
+                                       }, 1 );
+                                       return retval;
+                               }
+                       } )
+                       .on( 'pageshow.editwarning', function () {
+                               // Re-add onbeforeunload handler
+                               if ( !window.onbeforeunload ) {
+                                       window.onbeforeunload = savedWindowOnBeforeUnload;
+                               }
+                       } );
+
+               // Add form submission handler
+               $( '#editform' ).submit( function () {
+                       // Unbind our handlers
+                       $( window ).off( '.editwarning' );
+               } );
+       } );
+
+}( mediaWiki, jQuery ) );
+
diff --git a/resources/mediawiki.special/images/glyph-people-large.png b/resources/mediawiki.special/images/glyph-people-large.png
new file mode 100644 (file)
index 0000000..2c251d7
Binary files /dev/null and b/resources/mediawiki.special/images/glyph-people-large.png differ
diff --git a/resources/mediawiki.special/images/icon-lock.png b/resources/mediawiki.special/images/icon-lock.png
new file mode 100644 (file)
index 0000000..306f1f1
Binary files /dev/null and b/resources/mediawiki.special/images/icon-lock.png differ
diff --git a/resources/mediawiki.special/mediawiki.special.userLogin.vform.css b/resources/mediawiki.special/mediawiki.special.userLogin.vform.css
new file mode 100644 (file)
index 0000000..312f811
--- /dev/null
@@ -0,0 +1,36 @@
+/* Styles just for VForm user login */
+#mw-userlogin-help {
+       text-align: center;
+}
+
+.mw-ui-vform .mw-secure {
+       /* @embed */
+       background: url(images/icon-lock.png) no-repeat scroll left center transparent;
+       margin: 0 0 0 1px;
+       padding: 0 0 0 11px;
+}
+
+/* The login form invites users to create an account */
+#mw-createaccount-cta {
+       width: 20em;
+       height: 10em;
+       text-align: center;
+       /* @embed */
+       background: url(images/glyph-people-large.png) no-repeat 50%;
+       margin: 0 auto;
+}
+
+#mw-createaccount-cta h3 {
+       font-size: 0.9em;
+       font-weight: normal;
+       text-align: center;
+       padding-top: 4em;
+}
+
+#mw-createaccount-join {
+       margin-left: 0.75em;
+       /* Separate from background image */
+       box-shadow: 4px 4px 4px 4px rgba(255, 255, 255, 1);
+       width: auto;
+       display: inline-block;
+}
diff --git a/resources/mediawiki.special/mediawiki.special.vforms.css b/resources/mediawiki.special/mediawiki.special.vforms.css
new file mode 100644 (file)
index 0000000..d9b950b
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * When inside the VForm style, disable the border that Vector and other skins
+ * put on the div surrounding the login/create account form.
+ * Also disable the margin and padding that Vector puts around the form.
+ */
+.mw-ui-container #userloginForm,
+.mw-ui-container #userlogin {
+       border: 0;
+       margin: 0;
+       padding: 0;
+}
+
+/* Reposition and resize language links, which appear on a per-wiki basis */
+.mw-ui-container #languagelinks {
+       margin-bottom: 2em;
+       font-size: 0.8em;
+}
+
+/*
+ * Besides errorbox there could be warningbox, successbox, msgbox, though
+ * spage has never seen these in practice.
+ * Vector has styles coloring warningbox cream and successbox green.
+ */
+.mw-ui-vform .errorbox,
+.mw-ui-vform .warningbox,
+.mw-ui-vform .successbox {
+       -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+       box-sizing: border-box;
+       font-size: 0.9em;
+       margin: 0 0 1em 0;
+       padding: 0.5em;
+       color: #cc0000;
+       border: 1px solid #fac5c5;
+       background-color: #fae3e3;
+       text-shadow: 0 1px #fae3e3;
+       word-wrap: break-word;
+}
diff --git a/resources/mediawiki.ui/mediawiki.ui.default.css b/resources/mediawiki.ui/mediawiki.ui.default.css
new file mode 100644 (file)
index 0000000..2568f5a
--- /dev/null
@@ -0,0 +1,235 @@
+/**
+ * Provide Agora appearance for mw-ui-* classes when using a skin other than
+ * Vector.
+ * Compass builds these Agora styles from source Sass files in
+ * extensions/Agora/modules/scss
+ */
+/* _effects.scss */
+/* Mixins for visual effects in CSS3 */
+/* line 7, sourcefiles/scss/components/_utilities.scss */
+.mw-ui-flush-left {
+  float: left;
+  margin-left: 0;
+  padding-left: 0;
+}
+
+/* line 11, sourcefiles/scss/components/_utilities.scss */
+.mw-ui-flush-right {
+  float: right;
+  margin-right: 0;
+  padding-right: 0;
+}
+
+/* line 15, sourcefiles/scss/components/_utilities.scss */
+.mw-ui-center-block {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+/* line 4, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button {
+  display: -moz-inline-stack;
+  display: inline-block;
+  vertical-align: middle;
+  *vertical-align: auto;
+  zoom: 1;
+  *display: inline;
+  padding: 0.4em 1em 0.4em 1em;
+  margin: 0;
+  background-color: #c9c9c9;
+  *background-color: #c9c9c9;
+  *zoom: 1;
+  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFDCDCDC', endColorstr='#FFC9C9C9');
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #c9c9c9));
+  background-image: -webkit-linear-gradient(top, #dcdcdc, #c9c9c9);
+  background-image: -moz-linear-gradient(top, #dcdcdc, #c9c9c9);
+  background-image: -o-linear-gradient(top, #dcdcdc, #c9c9c9);
+  background-image: linear-gradient(top, #dcdcdc, #c9c9c9);
+  color: #4a4a4a;
+  text-shadow: 0 1px 1px rgba(201, 201, 201, 0.3);
+  border: 1px solid #c4c4c4;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  -ms-border-radius: 3px;
+  -o-border-radius: 3px;
+  border-radius: 3px;
+  vertical-align: middle;
+  text-align: center;
+  text-decoration: none;
+  font-weight: bold;
+  cursor: pointer;
+}
+/* line 38, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button:hover, .mw-ui-button.mw-ui-hover {
+  background-color: gainsboro;
+  *background-color: gainsboro;
+  *zoom: 1;
+  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFE9E9E9', endColorstr='#FFDCDCDC');
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e9e9e9), color-stop(100%, #dcdcdc));
+  background-image: -webkit-linear-gradient(top, #e9e9e9, #dcdcdc);
+  background-image: -moz-linear-gradient(top, #e9e9e9, #dcdcdc);
+  background-image: -o-linear-gradient(top, #e9e9e9, #dcdcdc);
+  background-image: linear-gradient(top, #e9e9e9, #dcdcdc);
+  text-decoration: none;
+}
+/* line 44, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button:active, .mw-ui-button.mw-ui-active {
+  background-image: none;
+  background-color: #c1c1c1;
+  text-shadow: none;
+}
+/* line 54, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button:disabled, .mw-ui-button.mw-ui-disabled {
+  background-image: none;
+  background-color: #c9c9c9;
+  opacity: 0.5;
+  text-shadow: none;
+}
+/* line 30, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button:disabled, .mw-ui-button.mw-ui-disabled {
+  cursor: default;
+}
+/* line 36, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button.mw-ui-big {
+  font-size: 1.3em;
+}
+/* line 41, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button.mw-ui-block {
+  display: block;
+  width: 100%;
+}
+
+/* line 48, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button-group > * {
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  -ms-border-radius: 0;
+  -o-border-radius: 0;
+  border-radius: 0;
+  float: left;
+}
+/* line 52, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button-group > *:first-child {
+  -moz-border-radius-topleft: 3px;
+  -webkit-border-top-left-radius: 3px;
+  border-top-left-radius: 3px;
+  -moz-border-radius-bottomleft: 3px;
+  -webkit-border-bottom-left-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+/* line 57, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button-group > *:last-child {
+  -moz-border-radius-topright: 3px;
+  -webkit-border-top-right-radius: 3px;
+  border-top-right-radius: 3px;
+  -moz-border-radius-bottomright: 3px;
+  -webkit-border-bottom-right-radius: 3px;
+  border-bottom-right-radius: 3px;
+}
+
+/* line 14, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-vform {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 290px;
+}
+/* line 19, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-vform > div {
+  display: block;
+  margin: 0 0 15px 0;
+  padding: 0;
+  width: 100%;
+}
+/* line 28, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-vform > div input,
+.mw-ui-vform > div label,
+.mw-ui-vform > div .mw-ui-button {
+  display: block;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  margin: 0;
+  width: 100%;
+}
+/* line 35, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-vform > div input {
+  outline: 0;
+  border-style: solid;
+  border-width: 1px;
+  border-color: #c9c9c9;
+  color: #252525;
+  padding: 0.35em 0 0.35em 0.5em;
+}
+/* line 12, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-vform > div input:focus {
+  box-shadow: #4091ed 0px 0px 5px;
+  border-color: #4091ed;
+}
+/* line 39, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-vform > div label {
+  font-size: 0.9em;
+  color: #7d7d7d;
+  width: auto;
+  margin: 0 0 0.2em 0;
+  padding: 0;
+}
+/* line 34, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-vform > div label * {
+  font-weight: normal;
+}
+/* line 49, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-vform > div input[type="checkbox"],
+.mw-ui-vform > div input[type="radio"] {
+  display: inline;
+  -webkit-box-sizing: content-box;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+  width: auto;
+}
+
+/* line 65, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-input {
+  outline: 0;
+  border-style: solid;
+  border-width: 1px;
+  border-color: #c9c9c9;
+  color: #252525;
+  padding: 0.35em 0 0.35em 0.5em;
+}
+/* line 12, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-input:focus {
+  box-shadow: #4091ed 0px 0px 5px;
+  border-color: #4091ed;
+}
+
+/* line 72, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-label {
+  font-size: 0.9em;
+  color: #7d7d7d;
+}
+/* line 34, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-label * {
+  font-weight: normal;
+}
+
+/* line 81, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-checkbox-label, .mw-ui-radio-label {
+  margin-bottom: 0.5em;
+  cursor: pointer;
+  vertical-align: bottom;
+  line-height: normal;
+  font-weight: normal;
+}
+/* line 50, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-checkbox-label > input[type="checkbox"], .mw-ui-checkbox-label > input[type="radio"], .mw-ui-radio-label > input[type="checkbox"], .mw-ui-radio-label > input[type="radio"] {
+  width: auto;
+  height: auto;
+  margin: 0 0.1em 0em 0;
+  padding: 0;
+  border-style: solid;
+  border-width: 1px;
+  border-color: #c9c9c9;
+  cursor: pointer;
+}
diff --git a/resources/mediawiki.ui/mediawiki.ui.vector.css b/resources/mediawiki.ui/mediawiki.ui.vector.css
new file mode 100644 (file)
index 0000000..fd1ed47
--- /dev/null
@@ -0,0 +1,380 @@
+/**
+ * Provide Agora appearance for mw-ui-* classes when using the Vector skin.
+ * Compass builds these Agora styles from source Sass files in
+ * extensions/Agora/modules/scss
+ */
+/* _effects.scss */
+/* Mixins for visual effects in CSS3 */
+/* line 7, sourcefiles/scss/components/_utilities.scss */
+.mw-ui-flush-left {
+  float: left;
+  margin-left: 0;
+  padding-left: 0;
+}
+
+/* line 11, sourcefiles/scss/components/_utilities.scss */
+.mw-ui-flush-right {
+  float: right;
+  margin-right: 0;
+  padding-right: 0;
+}
+
+/* line 15, sourcefiles/scss/components/_utilities.scss */
+.mw-ui-center-block {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+/* line 4, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button {
+  display: -moz-inline-stack;
+  display: inline-block;
+  vertical-align: middle;
+  *vertical-align: auto;
+  zoom: 1;
+  *display: inline;
+  padding: 0.4em 1em 0.4em 1em;
+  margin: 0;
+  background-color: #c9c9c9;
+  *background-color: #c9c9c9;
+  *zoom: 1;
+  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFDCDCDC', endColorstr='#FFC9C9C9');
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dcdcdc), color-stop(100%, #c9c9c9));
+  background-image: -webkit-linear-gradient(top, #dcdcdc, #c9c9c9);
+  background-image: -moz-linear-gradient(top, #dcdcdc, #c9c9c9);
+  background-image: -o-linear-gradient(top, #dcdcdc, #c9c9c9);
+  background-image: linear-gradient(top, #dcdcdc, #c9c9c9);
+  color: #4a4a4a;
+  text-shadow: 0 1px 1px rgba(201, 201, 201, 0.3);
+  border: 1px solid #c4c4c4;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  -ms-border-radius: 3px;
+  -o-border-radius: 3px;
+  border-radius: 3px;
+  vertical-align: middle;
+  text-align: center;
+  text-decoration: none;
+  font-weight: bold;
+  cursor: pointer;
+}
+/* line 38, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button:hover, .mw-ui-button.mw-ui-hover {
+  background-color: gainsboro;
+  *background-color: gainsboro;
+  *zoom: 1;
+  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFE9E9E9', endColorstr='#FFDCDCDC');
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e9e9e9), color-stop(100%, #dcdcdc));
+  background-image: -webkit-linear-gradient(top, #e9e9e9, #dcdcdc);
+  background-image: -moz-linear-gradient(top, #e9e9e9, #dcdcdc);
+  background-image: -o-linear-gradient(top, #e9e9e9, #dcdcdc);
+  background-image: linear-gradient(top, #e9e9e9, #dcdcdc);
+  text-decoration: none;
+}
+/* line 44, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button:active, .mw-ui-button.mw-ui-active {
+  background-image: none;
+  background-color: #c1c1c1;
+  text-shadow: none;
+}
+/* line 54, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button:disabled, .mw-ui-button.mw-ui-disabled {
+  background-image: none;
+  background-color: #c9c9c9;
+  opacity: 0.5;
+  text-shadow: none;
+}
+/* line 30, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button:disabled, .mw-ui-button.mw-ui-disabled {
+  cursor: default;
+}
+/* line 36, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button.mw-ui-big {
+  font-size: 1.3em;
+}
+/* line 41, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button.mw-ui-block {
+  display: block;
+  width: 100%;
+}
+
+/* line 48, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button-group > * {
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  -ms-border-radius: 0;
+  -o-border-radius: 0;
+  border-radius: 0;
+  float: left;
+}
+/* line 52, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button-group > *:first-child {
+  -moz-border-radius-topleft: 3px;
+  -webkit-border-top-left-radius: 3px;
+  border-top-left-radius: 3px;
+  -moz-border-radius-bottomleft: 3px;
+  -webkit-border-bottom-left-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+/* line 57, sourcefiles/scss/components/default/_buttons.scss */
+.mw-ui-button-group > *:last-child {
+  -moz-border-radius-topright: 3px;
+  -webkit-border-top-right-radius: 3px;
+  border-top-right-radius: 3px;
+  -moz-border-radius-bottomright: 3px;
+  -webkit-border-bottom-right-radius: 3px;
+  border-bottom-right-radius: 3px;
+}
+
+/* line 3, sourcefiles/scss/components/vector/_buttons.scss */
+.mw-ui-button {
+  font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
+  font-size: 1em;
+  line-height: 1.4em;
+}
+/* line 6, sourcefiles/scss/components/vector/_buttons.scss */
+.mw-ui-button.mw-ui-primary {
+  background-color: #3366bb;
+  *background-color: #3366bb;
+  *zoom: 1;
+  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF4779CD', endColorstr='#FF3366BB');
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4779cd), color-stop(100%, #3366bb));
+  background-image: -webkit-linear-gradient(top, #4779cd, #3366bb);
+  background-image: -moz-linear-gradient(top, #4779cd, #3366bb);
+  background-image: -o-linear-gradient(top, #4779cd, #3366bb);
+  background-image: linear-gradient(top, #4779cd, #3366bb);
+  color: white;
+  text-shadow: 0 1px 1px rgba(51, 102, 187, 0.75);
+  border: 1px solid #3162b3;
+}
+/* line 38, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button.mw-ui-primary:hover, .mw-ui-button.mw-ui-primary.mw-ui-hover {
+  background-color: #4779cd;
+  *background-color: #4779cd;
+  *zoom: 1;
+  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF5B88D2', endColorstr='#FF4779CD');
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #5b88d2), color-stop(100%, #4779cd));
+  background-image: -webkit-linear-gradient(top, #5b88d2, #4779cd);
+  background-image: -moz-linear-gradient(top, #5b88d2, #4779cd);
+  background-image: -o-linear-gradient(top, #5b88d2, #4779cd);
+  background-image: linear-gradient(top, #5b88d2, #4779cd);
+  text-decoration: none;
+}
+/* line 44, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button.mw-ui-primary:active, .mw-ui-button.mw-ui-primary.mw-ui-active {
+  background-image: none;
+  background-color: #305faf;
+  text-shadow: none;
+}
+/* line 54, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button.mw-ui-primary:disabled, .mw-ui-button.mw-ui-primary.mw-ui-disabled {
+  background-image: none;
+  background-color: #3366bb;
+  opacity: 0.5;
+  text-shadow: none;
+}
+/* line 10, sourcefiles/scss/components/vector/_buttons.scss */
+.mw-ui-button.mw-ui-constructive {
+  background-color: #27aa65;
+  *background-color: #27aa65;
+  *zoom: 1;
+  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF2EC977', endColorstr='#FF27AA65');
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2ec977), color-stop(100%, #27aa65));
+  background-image: -webkit-linear-gradient(top, #2ec977, #27aa65);
+  background-image: -moz-linear-gradient(top, #2ec977, #27aa65);
+  background-image: -o-linear-gradient(top, #2ec977, #27aa65);
+  background-image: linear-gradient(top, #2ec977, #27aa65);
+  color: white;
+  text-shadow: 0 1px 1px rgba(39, 170, 101, 0.75);
+  border: 1px solid #25a260;
+}
+/* line 38, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button.mw-ui-constructive:hover, .mw-ui-button.mw-ui-constructive.mw-ui-hover {
+  background-color: #2ec977;
+  *background-color: #2ec977;
+  *zoom: 1;
+  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FF3ED384', endColorstr='#FF2EC977');
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #3ed384), color-stop(100%, #2ec977));
+  background-image: -webkit-linear-gradient(top, #3ed384, #2ec977);
+  background-image: -moz-linear-gradient(top, #3ed384, #2ec977);
+  background-image: -o-linear-gradient(top, #3ed384, #2ec977);
+  background-image: linear-gradient(top, #3ed384, #2ec977);
+  text-decoration: none;
+}
+/* line 44, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button.mw-ui-constructive:active, .mw-ui-button.mw-ui-constructive.mw-ui-active {
+  background-image: none;
+  background-color: #249e5e;
+  text-shadow: none;
+}
+/* line 54, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button.mw-ui-constructive:disabled, .mw-ui-button.mw-ui-constructive.mw-ui-disabled {
+  background-image: none;
+  background-color: #27aa65;
+  opacity: 0.5;
+  text-shadow: none;
+}
+/* line 14, sourcefiles/scss/components/vector/_buttons.scss */
+.mw-ui-button.mw-ui-destructive {
+  background-color: #cc0000;
+  *background-color: #cc0000;
+  *zoom: 1;
+  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFF20000', endColorstr='#FFCC0000');
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f20000), color-stop(100%, #cc0000));
+  background-image: -webkit-linear-gradient(top, #f20000, #cc0000);
+  background-image: -moz-linear-gradient(top, #f20000, #cc0000);
+  background-image: -o-linear-gradient(top, #f20000, #cc0000);
+  background-image: linear-gradient(top, #f20000, #cc0000);
+  color: white;
+  text-shadow: 0 1px 1px rgba(204, 0, 0, 0.75);
+  border: 1px solid #c20000;
+}
+/* line 38, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button.mw-ui-destructive:hover, .mw-ui-button.mw-ui-destructive.mw-ui-hover {
+  background-color: #f20000;
+  *background-color: #f20000;
+  *zoom: 1;
+  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFFF0D0D', endColorstr='#FFF20000');
+  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ff0d0d), color-stop(100%, #f20000));
+  background-image: -webkit-linear-gradient(top, #ff0d0d, #f20000);
+  background-image: -moz-linear-gradient(top, #ff0d0d, #f20000);
+  background-image: -o-linear-gradient(top, #ff0d0d, #f20000);
+  background-image: linear-gradient(top, #ff0d0d, #f20000);
+  text-decoration: none;
+}
+/* line 44, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button.mw-ui-destructive:active, .mw-ui-button.mw-ui-destructive.mw-ui-active {
+  background-image: none;
+  background-color: #bd0000;
+  text-shadow: none;
+}
+/* line 54, sourcefiles/scss/mixins/_effects.scss */
+.mw-ui-button.mw-ui-destructive:disabled, .mw-ui-button.mw-ui-destructive.mw-ui-disabled {
+  background-image: none;
+  background-color: #cc0000;
+  opacity: 0.5;
+  text-shadow: none;
+}
+
+/* line 14, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-vform {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 290px;
+}
+/* line 19, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-vform > div {
+  display: block;
+  margin: 0 0 15px 0;
+  padding: 0;
+  width: 100%;
+}
+/* line 28, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-vform > div input,
+.mw-ui-vform > div label,
+.mw-ui-vform > div .mw-ui-button {
+  display: block;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  margin: 0;
+  width: 100%;
+}
+/* line 35, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-vform > div input {
+  outline: 0;
+  border-style: solid;
+  border-width: 1px;
+  border-color: #c9c9c9;
+  color: #252525;
+  padding: 0.35em 0 0.35em 0.5em;
+}
+/* line 12, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-vform > div input:focus {
+  box-shadow: #4091ed 0px 0px 5px;
+  border-color: #4091ed;
+}
+/* line 39, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-vform > div label {
+  font-size: 0.9em;
+  color: #7d7d7d;
+  width: auto;
+  margin: 0 0 0.2em 0;
+  padding: 0;
+}
+/* line 34, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-vform > div label * {
+  font-weight: normal;
+}
+/* line 49, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-vform > div input[type="checkbox"],
+.mw-ui-vform > div input[type="radio"] {
+  display: inline;
+  -webkit-box-sizing: content-box;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+  width: auto;
+}
+
+/* line 65, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-input {
+  outline: 0;
+  border-style: solid;
+  border-width: 1px;
+  border-color: #c9c9c9;
+  color: #252525;
+  padding: 0.35em 0 0.35em 0.5em;
+}
+/* line 12, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-input:focus {
+  box-shadow: #4091ed 0px 0px 5px;
+  border-color: #4091ed;
+}
+
+/* line 72, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-label {
+  font-size: 0.9em;
+  color: #7d7d7d;
+}
+/* line 34, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-label * {
+  font-weight: normal;
+}
+
+/* line 81, sourcefiles/scss/components/default/_forms.scss */
+.mw-ui-checkbox-label, .mw-ui-radio-label {
+  margin-bottom: 0.5em;
+  cursor: pointer;
+  vertical-align: bottom;
+  line-height: normal;
+  font-weight: normal;
+}
+/* line 50, sourcefiles/scss/mixins/_forms.scss */
+.mw-ui-checkbox-label > input[type="checkbox"], .mw-ui-checkbox-label > input[type="radio"], .mw-ui-radio-label > input[type="checkbox"], .mw-ui-radio-label > input[type="radio"] {
+  width: auto;
+  height: auto;
+  margin: 0 0.1em 0em 0;
+  padding: 0;
+  border-style: solid;
+  border-width: 1px;
+  border-color: #c9c9c9;
+  cursor: pointer;
+}
+
+/* line 5, sourcefiles/scss/components/vector/_forms.scss */
+.mw-ui-vform,
+.mw-ui-vform > div input,
+.mw-ui-input {
+  font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
+  font-size: 1em;
+  line-height: 1.4em;
+}
+
+/* line 3, sourcefiles/scss/components/vector/_containers.scss */
+.mw-ui-container {
+  font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
+  font-size: 1em;
+  line-height: 1.4em;
+}
diff --git a/resources/mediawiki.ui/sourcefiles/Makefile b/resources/mediawiki.ui/sourcefiles/Makefile
new file mode 100644 (file)
index 0000000..dea9013
--- /dev/null
@@ -0,0 +1,24 @@
+DATE=$(shell date +%I:%M%p)
+CHECK=\033[32m✔\033[39m
+HR=\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#
+
+build:
+       @echo "\n${HR}"
+       @echo "Building Agora..."
+       @echo "${HR}\n"
+       @compass compile
+       @echo "Compiling Compass project...            ${CHECK} Done"
+       @rm -rf .sass-cache
+       @echo "Removing .sass-cache...                 ${CHECK} Done"
+       @echo "\n${HR}"
+       @echo "Agora successfully built at ${DATE}."
+       @echo "${HR}\n"
+
+all: build
+
+watch:
+       @echo "\n${HR}"
+       @echo "Watching SCSS files for Agora..."
+       @echo "${HR}\n"
+       @compass watch
+       @echo "Started watching modules/scss at ${DATE}..."
diff --git a/resources/mediawiki.ui/sourcefiles/config.rb b/resources/mediawiki.ui/sourcefiles/config.rb
new file mode 100644 (file)
index 0000000..28c6524
--- /dev/null
@@ -0,0 +1,27 @@
+# Require any additional compass plugins here.
+
+# Set this to the root of your project when deployed:
+# (unused so far): http_path = "/"
+
+# Output to parent of build directory
+css_dir = ".."
+sass_dir = "scss"
+# (unused so far): images_dir = "modules/img"
+# (unused so far): javascripts_dir = "modules/js"
+
+# You can select your preferred output style here (can be overridden via the command line):
+# output_style = :expanded or :nested or :compact or :compressed
+output_style = :expanded
+
+# To enable relative paths to assets via compass helper functions. Uncomment:
+relative_assets = true
+
+# To disable debugging comments that display the original location of your selectors. Uncomment:
+line_comments = true
+
+
+# If you prefer the indented syntax, you might want to regenerate this
+# project again passing --syntax sass, or you can uncomment this:
+# preferred_syntax = :sass
+# and then run:
+# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/_default.scss b/resources/mediawiki.ui/sourcefiles/scss/components/_default.scss
new file mode 100644 (file)
index 0000000..e7090eb
--- /dev/null
@@ -0,0 +1,3 @@
+@import "utilities";
+@import "default/buttons";
+@import "default/forms";
\ No newline at end of file
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/_utilities.scss b/resources/mediawiki.ui/sourcefiles/scss/components/_utilities.scss
new file mode 100644 (file)
index 0000000..4f1dba2
--- /dev/null
@@ -0,0 +1,17 @@
+// Generic helper classes that could be used in many elements/layouts
+
+// --------------------------------------------------------------------------
+// Positioning
+// --------------------------------------------------------------------------
+
+.mw-ui-flush-left {
+    @include agora-flush-left;
+}
+
+.mw-ui-flush-right {
+    @include agora-flush-right;
+}
+
+.mw-ui-center-block {
+    @include agora-center-block;
+}
\ No newline at end of file
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/_vector.scss b/resources/mediawiki.ui/sourcefiles/scss/components/_vector.scss
new file mode 100644 (file)
index 0000000..d7cb34a
--- /dev/null
@@ -0,0 +1,4 @@
+@import "utilities";
+@import "vector/buttons";
+@import "vector/forms";
+@import "vector/containers";
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/default/_buttons.scss b/resources/mediawiki.ui/sourcefiles/scss/components/default/_buttons.scss
new file mode 100644 (file)
index 0000000..1ea9a18
--- /dev/null
@@ -0,0 +1,61 @@
+$buttonBorderRadius: 3px;
+
+// Button styling
+.mw-ui-button {
+    // Container layout
+    @include inline-block;
+    padding: 0.4em 1em 0.4em 1em;
+    margin: 0;
+
+    // Container styling
+    @include buttonColors($agoraGray);
+    @include border-radius($buttonBorderRadius);
+
+    // Content styling
+    vertical-align: middle;
+
+    text: {
+        align: center;
+        decoration: none;
+    }
+
+    font: {
+        weight: bold;
+    }
+
+    // Interaction styling
+    cursor: pointer;
+
+    &:disabled,
+    &.mw-ui-disabled {
+        cursor: default;
+    }
+
+    // Button sizes and displays
+    // -----------------------------------------
+    &.mw-ui-big {
+        font: {
+            size: $baseFontSize * 1.3;
+        }
+    }
+    &.mw-ui-block {
+        display: block;
+        width: 100%;
+    }
+}
+
+// Button groups
+.mw-ui-button-group > * {
+  @include border-radius(0);
+  float: left;
+
+  &:first-child{
+    @include border-top-left-radius($buttonBorderRadius);
+    @include border-bottom-left-radius($buttonBorderRadius);
+  }
+
+  &:last-child{
+    @include border-top-right-radius($buttonBorderRadius);
+    @include border-bottom-right-radius($buttonBorderRadius);
+  }
+}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/default/_forms.scss b/resources/mediawiki.ui/sourcefiles/scss/components/default/_forms.scss
new file mode 100644 (file)
index 0000000..86a891a
--- /dev/null
@@ -0,0 +1,83 @@
+// Form elements and layouts
+
+// --------------------------------------------------------------------------
+// Layouts
+// --------------------------------------------------------------------------
+
+// The FancyCaptcha image CAPTCHA used on WMF wikis drives the width of the
+// 'VForm' design, the form can't be narrower than this.
+$captchaContainerWidth: 290px;
+$defaultFormWidth: $captchaContainerWidth;
+
+// Style a compact vertical stacked form ("VForm") and the elements in divs
+// within it.
+.mw-ui-vform {
+    @include box-sizing(border-box);
+
+    width: $defaultFormWidth;
+
+    & > div {
+        display: block;
+        margin: 0 0 15px 0;
+        padding: 0;
+        width: 100%;
+
+        // MW currently doesn't use the type attribute everywhere on inputs.
+        input,
+        label,
+        .mw-ui-button {
+            display: block;
+            @include box-sizing(border-box);
+            margin: 0;
+            width: 100%;
+        }
+
+        input {
+            @include agora-field-styling; // mixins/_forms.scss
+        }
+
+        label {
+            @include agora-label-styling;
+
+            width: auto;
+            margin: 0 0 0.2em 0;
+            padding: 0;
+        }
+
+        // Override input styling just for checkboxes and radio inputs.
+        input[type="checkbox"],
+        input[type="radio"] {
+            display: inline;
+            @include box-sizing(content-box);
+            width: auto;
+        }
+
+    }
+}
+
+// --------------------------------------------------------------------------
+// Elements
+// --------------------------------------------------------------------------
+
+// Apply mw-ui-input to individual input fields to style them.
+// You generally don't need to use this class if <input> is within an Agora
+// form container such as mw-ui-vform
+.mw-ui-input {
+    @include agora-field-styling; // mixins/_forms.scss
+}
+
+// Apply mw-ui-label to individual elements to style them.
+// You generally don't need to use this class if <label> is within an Agora
+// form container such as mw-ui-vform
+.mw-ui-label {
+    @include agora-label-styling; // mixins/_forms.scss
+}
+
+// Nesting an input checkbox or radio button inside a label with this class
+// improves alignment, e.g.
+//   <label class="mw-ui-checkbox-label">
+//       <input type="checkbox">The label text
+//   </label>
+.mw-ui-checkbox-label, .mw-ui-radio-label {
+    @include agora-inline-label-styling;
+}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/vector/_buttons.scss b/resources/mediawiki.ui/sourcefiles/scss/components/vector/_buttons.scss
new file mode 100644 (file)
index 0000000..8d5f0b6
--- /dev/null
@@ -0,0 +1,19 @@
+@import "../default/buttons"; // Layer Vector on top of the default settings.
+
+.mw-ui-button {
+    // Button colors determined by function.
+    // -----------------------------------------
+    &.mw-ui-primary {
+        @include buttonColors($agoraBlue);
+    }
+
+    &.mw-ui-constructive {
+        @include buttonColors($agoraGreen);
+    }
+
+    &.mw-ui-destructive {
+        @include buttonColors($agoraRed);
+    }
+
+    @include vector-type;
+}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/vector/_containers.scss b/resources/mediawiki.ui/sourcefiles/scss/components/vector/_containers.scss
new file mode 100644 (file)
index 0000000..ed01603
--- /dev/null
@@ -0,0 +1,5 @@
+// No default settings for containers yet.
+
+.mw-ui-container {
+    @include vector-type;
+}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/components/vector/_forms.scss b/resources/mediawiki.ui/sourcefiles/scss/components/vector/_forms.scss
new file mode 100644 (file)
index 0000000..73ea24e
--- /dev/null
@@ -0,0 +1,7 @@
+@import "../default/forms"; // Layer Vector on top of the default settings.
+
+.mw-ui-vform,
+.mw-ui-vform > div input,
+.mw-ui-input {
+    @include vector-type;
+}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.default.scss b/resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.default.scss
new file mode 100644 (file)
index 0000000..e6db523
--- /dev/null
@@ -0,0 +1,16 @@
+/**
+ * Provide Agora appearance for mw-ui-* classes when using a skin other than
+ * Vector.
+ * Compass builds these Agora styles from source Sass files in
+ * extensions/Agora/modules/scss
+ */
+
+@charset "UTF-8";
+
+@import "compass";
+
+@import "settings/all";
+
+@import "mixins/all";
+
+@import "components/default";
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.vector.scss b/resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.vector.scss
new file mode 100644 (file)
index 0000000..ac113ee
--- /dev/null
@@ -0,0 +1,15 @@
+/**
+ * Provide Agora appearance for mw-ui-* classes when using the Vector skin.
+ * Compass builds these Agora styles from source Sass files in
+ * extensions/Agora/modules/scss
+ */
+
+@charset "UTF-8";
+
+@import "compass";
+
+@import "settings/all";
+
+@import "mixins/all";
+
+@import "components/vector";
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mixins/_all.scss b/resources/mediawiki.ui/sourcefiles/scss/mixins/_all.scss
new file mode 100644 (file)
index 0000000..adc48cd
--- /dev/null
@@ -0,0 +1,4 @@
+@import "utilities";
+@import "type";
+@import "effects";
+@import "forms";
\ No newline at end of file
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mixins/_effects.scss b/resources/mediawiki.ui/sourcefiles/scss/mixins/_effects.scss
new file mode 100644 (file)
index 0000000..03fae1b
--- /dev/null
@@ -0,0 +1,62 @@
+/* _effects.scss */
+
+/* Mixins for visual effects in CSS3 */
+
+// ----------------------------------------------------------------------------
+// Gradients
+// ----------------------------------------------------------------------------
+@mixin vertical-gradient ($startColor: lighten($agoraGray, 95%), $endColor: $agoraGray) {
+       // Fallback
+    background-color: $endColor;
+    *background-color: $endColor; // IE7
+
+    // IE6-8
+    @include filter-gradient($startColor, $endColor, vertical);
+
+    // IE9+, Opera, Gecko, WebKit
+    @include background-image(linear-gradient(top, $startColor, $endColor));
+}
+
+// ----------------------------------------------------------------------------
+// Button styling
+// ----------------------------------------------------------------------------
+@mixin buttonColors ($baseColor: $agoraGray) {
+       // Background color
+       @include vertical-gradient(lighten($baseColor, 7.5%), $baseColor);
+
+       @if $baseColor == $agoraGray {
+               color: darken($baseColor, 50%);
+               @include text-shadow(0 1px 1px rgba($baseColor, 0.3));
+       } @else {
+               color: white;
+               @include text-shadow(0 1px 1px rgba($baseColor, 0.75));
+       }
+
+       border: 1px solid darken($baseColor, 2%);
+
+       &:hover,
+       &.mw-ui-hover {
+               @include vertical-gradient(lighten($baseColor, 12.5%), lighten($baseColor, 7.5%));
+               text-decoration: none;
+       }
+
+       &:active,
+       &.mw-ui-active {
+               background: {
+                       image: none;
+                       color: darken($baseColor, 3%);
+               }
+
+               text-shadow: none;
+       }
+
+       &:disabled,
+       &.mw-ui-disabled {
+               background: {
+                       image: none;
+                       color: $baseColor;
+               }
+               opacity: 0.5;
+               text-shadow: none;
+       }
+}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mixins/_forms.scss b/resources/mediawiki.ui/sourcefiles/scss/mixins/_forms.scss
new file mode 100644 (file)
index 0000000..6316232
--- /dev/null
@@ -0,0 +1,62 @@
+// Font is not included.
+// For Vector, that should be layered on top with vector-type
+@mixin agora-field-styling() {
+    @include reset-focus;  // Removes OS field focus
+
+    border: {
+        style: solid;
+        width: 1px;
+        color: $agoraGray;
+    };
+
+    &:focus {
+        // @include box-shadow generates unneeded prefixes
+        // https://github.com/chriseppstein/compass/issues/1054 , so specify
+        // directly.
+        box-shadow: $agoraBlueShadow 0px 0px 5px;
+
+        border: {
+            color: $agoraBlueShadow;
+        };
+    }
+
+    color: $agoraTextColor;
+    padding: 0.35em 0 0.35em 0.5em;
+}
+
+@mixin agora-label-styling() {
+    font: {
+        //weight: bold;
+        size: 0.9em;
+    };
+    color: darken($agoraGray, 30%);
+
+    & * {
+        font-weight: normal;
+    }
+}
+
+@mixin agora-inline-label-styling() {
+    margin-bottom: 0.5em;
+    cursor: pointer;
+    vertical-align: bottom;
+    line-height: normal;
+
+    font: {
+        weight: normal;
+    };
+
+    & > input[type="checkbox"],
+    & > input[type="radio"] {
+        width: auto;
+        height: auto;
+        margin: 0 0.1em 0em 0;
+        padding: 0;
+        border: {
+            style: solid;
+            width: 1px;
+            color: $agoraGray;
+        }
+        cursor: pointer;
+    }
+}
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mixins/_type.scss b/resources/mediawiki.ui/sourcefiles/scss/mixins/_type.scss
new file mode 100644 (file)
index 0000000..964d590
--- /dev/null
@@ -0,0 +1,7 @@
+@mixin vector-type {
+    font: {
+        family: $baseFontFamily;
+        size: $baseFontSize;
+    }
+    line-height: $baseLineHeight;
+}
\ No newline at end of file
diff --git a/resources/mediawiki.ui/sourcefiles/scss/mixins/_utilities.scss b/resources/mediawiki.ui/sourcefiles/scss/mixins/_utilities.scss
new file mode 100644 (file)
index 0000000..71a93b6
--- /dev/null
@@ -0,0 +1,19 @@
+@mixin agora-flush-left() {
+    float: left;
+    margin-left: 0;
+    padding-left: 0;
+}
+
+@mixin agora-flush-right() {
+    float: right;
+    margin-right: 0;
+    padding-right: 0;
+}
+
+@mixin agora-center-block() {
+    display: block;
+    margin: {
+        left: auto;
+        right: auto;
+    };
+}
\ No newline at end of file
diff --git a/resources/mediawiki.ui/sourcefiles/scss/settings/_all.scss b/resources/mediawiki.ui/sourcefiles/scss/settings/_all.scss
new file mode 100644 (file)
index 0000000..21ac292
--- /dev/null
@@ -0,0 +1,2 @@
+@import "colors";
+@import "typography";
\ No newline at end of file
diff --git a/resources/mediawiki.ui/sourcefiles/scss/settings/_colors.scss b/resources/mediawiki.ui/sourcefiles/scss/settings/_colors.scss
new file mode 100644 (file)
index 0000000..0c18bdb
--- /dev/null
@@ -0,0 +1,17 @@
+// Grays
+// -----------------------------------------
+$agoraGray: #c9c9c9;
+$agoraTextColor: #252525;
+
+// Blues
+// -----------------------------------------
+$agoraBlue: #3366bb;
+$agoraBlueShadow: #4091ed;
+
+// Greens
+// -----------------------------------------
+$agoraGreen: #27aa65;
+
+// Reds
+// -----------------------------------------
+$agoraRed: #cc0000;
diff --git a/resources/mediawiki.ui/sourcefiles/scss/settings/_typography.scss b/resources/mediawiki.ui/sourcefiles/scss/settings/_typography.scss
new file mode 100644 (file)
index 0000000..5f0cea2
--- /dev/null
@@ -0,0 +1,6 @@
+$baseFontSize: 1em;
+$baseFontFamily: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
+$baseLineHeight: 1.4 * $baseFontSize;
+$baseFontColor: $agoraTextColor;
+
+$smallFontSize: 0.75em;
\ No newline at end of file
index 643e5c3..a2d4d6c 100644 (file)
                                        uri = this,
                                        matches = parser[ options.strictMode ? 'strict' : 'loose' ].exec( str );
                                $.each( properties, function ( i, property ) {
-                                       uri[ property ] = matches[ i+1 ];
+                                       uri[ property ] = matches[ i + 1 ];
                                } );
 
                                // uri.query starts out as the query string; we will parse it into key-val pairs then make
                                q = {};
                                // using replace to iterate over a string
                                if ( uri.query ) {
-                                       uri.query.replace( /(?:^|&)([^&=]*)(?:(=)([^&]*))?/g, function ($0, $1, $2, $3) {
+                                       uri.query.replace( /(?:^|&)([^&=]*)(?:(=)([^&]*))?/g, function ( $0, $1, $2, $3 ) {
                                                var k, v;
                                                if ( $1 ) {
                                                        k = Uri.decode( $1 );
index 88af3c6..986917a 100644 (file)
                        $( '<colgroup>' ).css( 'width', 350 ).appendTo( $table );
 
 
-                       entryTypeText = function( entryType ) {
+                       entryTypeText = function ( entryType ) {
                                switch ( entryType ) {
                                        case 'log':
                                                return 'Log';
index 9f3ccf4..e036dc9 100644 (file)
                 * expiration time is reset each time the ID is queried, so in most cases this ID will
                 * persist until the browser's cookies are cleared or the user doesn't visit for 1 year.
                 *
-                * @return String: User name or random session ID
+                * @return {string} User name or random session ID
                 */
-               this.id = function() {
+               this.id = function () {
                        var id,
                                name = user.getName();
                        if ( name ) {
index 21b07f7..1669de7 100644 (file)
@@ -22,7 +22,7 @@
  * @ingroup Skins
  */
 
-if( !defined( 'MEDIAWIKI' ) ) {
+if ( !defined( 'MEDIAWIKI' ) ) {
        die( -1 );
 }
 
@@ -127,7 +127,7 @@ class CologneBlueTemplate extends BaseTemplate {
         *
         * @return string
         */
-       function processBottomLink( $key, $navlink, $message=null ) {
+       function processBottomLink( $key, $navlink, $message = null ) {
                if ( !$navlink ) {
                        // Empty navlinks might be passed.
                        return null;
@@ -234,7 +234,7 @@ class CologneBlueTemplate extends BaseTemplate {
 
                // Use the regular navigational link, but replace its text. Everything else stays unmodified.
                $namespacesLinks = $this->data['content_navigation']['namespaces'];
-               return $this->processBottomLink( $message,  $namespacesLinks[$key], $message );
+               return $this->processBottomLink( $message, $namespacesLinks[$key], $message );
        }
 
        /**
@@ -246,7 +246,7 @@ class CologneBlueTemplate extends BaseTemplate {
         * @param $navlink array Navigational link generated by SkinTemplate
         * @param $idPrefix mixed Prefix to add to id of this navlink. If false, id is removed entirely. Default is 'cb-'.
         */
-       function processNavlinkForDocument( $navlink, $idPrefix='cb-' ) {
+       function processNavlinkForDocument( $navlink, $idPrefix = 'cb-' ) {
                if ( $navlink['id'] ) {
                        $navlink['single-id'] = $navlink['id']; // to allow for tooltip generation
                        $navlink['tooltiponly'] = true; // but no accesskeys
@@ -255,7 +255,7 @@ class CologneBlueTemplate extends BaseTemplate {
                        if ( $idPrefix === false ) {
                                unset( $navlink['id'] );
                        } else {
-                               $navlink['id'] =  $idPrefix . $navlink['id'];
+                               $navlink['id'] = $idPrefix . $navlink['id'];
                        }
                }
 
@@ -376,7 +376,7 @@ class CologneBlueTemplate extends BaseTemplate {
                );
 
                $personalUrls = $this->getPersonalTools();
-               foreach ( array ( 'logout', 'createaccount', 'login', 'anonlogin' ) as $key ) {
+               foreach ( array( 'logout', 'createaccount', 'login', 'anonlogin' ) as $key ) {
                        if ( $personalUrls[$key] ) {
                                $s[] = $this->makeListItem( $key, $personalUrls[$key], array( 'tag' => 'span' ) );
                        }
@@ -417,7 +417,7 @@ class CologneBlueTemplate extends BaseTemplate {
 
                // Personal tools ("My pages")
                $qbmyoptions = $this->getPersonalTools();
-               foreach ( array ( 'logout', 'createaccount', 'login', 'anonlogin' ) as $key ) {
+               foreach ( array( 'logout', 'createaccount', 'login', 'anonlogin' ) as $key ) {
                        $qbmyoptions[$key] = null;
                }
 
@@ -533,16 +533,16 @@ class CologneBlueTemplate extends BaseTemplate {
                $search = $this->getSkin()->getRequest()->getText( 'search' );
                $action = $this->data['searchaction'];
                $s = "<form id=\"searchform-" . htmlspecialchars($which) . "\" method=\"get\" class=\"inline\" action=\"$action\">";
-               if( $which == 'footer' ) {
+               if ( $which == 'footer' ) {
                        $s .= wfMessage( 'qbfind' )->text() . ": ";
                }
 
                $s .= "<input type='text' class=\"mw-searchInput\" name=\"search\" size=\"14\" value=\""
                        . htmlspecialchars( substr( $search, 0, 256 ) ) . "\" />"
-                       . ($which == 'footer' ? " " : "<br />")
+                       . ( $which == 'footer' ? " " : "<br />" )
                        . "<input type='submit' class=\"searchButton\" name=\"go\" value=\"" . wfMessage( 'searcharticle' )->escaped() . "\" />";
 
-               if( $wgUseTwoButtonsSearchForm ) {
+               if ( $wgUseTwoButtonsSearchForm ) {
                        $s .= " <input type='submit' class=\"searchButton\" name=\"fulltext\" value=\"" . wfMessage( 'searchbutton' )->escaped() . "\" />\n";
                } else {
                        $s .= '<div><a href="' . $action . '" rel="search">' . wfMessage( 'powersearch-legend' )->escaped() . "</a></div>\n";
index 9dbefb1..9177895 100644 (file)
@@ -22,8 +22,9 @@
  * @ingroup Skins
  */
 
-if( !defined( 'MEDIAWIKI' ) )
+if ( !defined( 'MEDIAWIKI' ) ) {
        die( -1 );
+}
 
 /**
  * Inherit main code from SkinTemplate, set the CSS and template filter.
@@ -39,7 +40,7 @@ class SkinModern extends SkinTemplate {
         */
        function setupSkinUserCss( OutputPage $out ) {
                parent::setupSkinUserCss( $out );
-               $out->addModuleStyles ('skins.modern');
+               $out->addModuleStyles( 'skins.modern' );
        }
 }
 
@@ -68,7 +69,7 @@ class ModernTemplate extends MonoBookTemplate {
        <div id="mw_header"><h1 id="firstHeading" lang="<?php
                $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getCode();
                $this->html( 'pageLanguage' );
-       ?>"><span dir="auto"><?php $this->html('title') ?></span></h1></div>
+       ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1></div>
 
        <div id="mw_main">
        <div id="mw_contentwrapper">
@@ -82,30 +83,30 @@ class ModernTemplate extends MonoBookTemplate {
             for the margins -->
        <div id="mw_contentholder" class="mw-body">
                <div class='mw-topboxes'>
-                       <div id="mw-js-message" style="display:none;"<?php $this->html('userlangattributes')?>></div>
-                       <div class="mw-topbox" id="siteSub"><?php $this->msg('tagline') ?></div>
-                       <?php if($this->data['newtalk'] ) {
-                               ?><div class="usermessage mw-topbox"><?php $this->html('newtalk')  ?></div>
+                       <div id="mw-js-message" style="display:none;"<?php $this->html( 'userlangattributes' )?>></div>
+                       <div class="mw-topbox" id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
+                       <?php if ( $this->data['newtalk'] ) {
+                               ?><div class="usermessage mw-topbox"><?php $this->html( 'newtalk' ) ?></div>
                        <?php } ?>
-                       <?php if($this->data['sitenotice']) {
-                               ?><div class="mw-topbox" id="siteNotice"><?php $this->html('sitenotice') ?></div>
+                       <?php if ( $this->data['sitenotice'] ) {
+                               ?><div class="mw-topbox" id="siteNotice"><?php $this->html( 'sitenotice' ) ?></div>
                        <?php } ?>
                </div>
 
-               <div id="contentSub"<?php $this->html('userlangattributes') ?>><?php $this->html('subtitle') ?></div>
+               <div id="contentSub"<?php $this->html( 'userlangattributes' ) ?>><?php $this->html( 'subtitle' ) ?></div>
 
-               <?php if($this->data['undelete']) { ?><div id="contentSub2"><?php     $this->html('undelete') ?></div><?php } ?>
-               <?php if($this->data['showjumplinks']) { ?><div id="jump-to-nav"><?php $this->msg('jumpto') ?> <a href="#mw_portlets"><?php $this->msg('jumptonavigation') ?></a><?php $this->msg( 'comma-separator' ) ?><a href="#searchInput"><?php $this->msg('jumptosearch') ?></a></div><?php } ?>
+               <?php if ( $this->data['undelete'] ) { ?><div id="contentSub2"><?php $this->html( 'undelete' ) ?></div><?php } ?>
+               <?php if ( $this->data['showjumplinks'] ) { ?><div id="jump-to-nav"><?php $this->msg( 'jumpto' ) ?> <a href="#mw_portlets"><?php $this->msg( 'jumptonavigation' ) ?></a><?php $this->msg( 'comma-separator' ) ?><a href="#searchInput"><?php $this->msg( 'jumptosearch' ) ?></a></div><?php } ?>
 
-               <?php $this->html('bodytext') ?>
+               <?php $this->html( 'bodytext' ) ?>
                <div class='mw_clear'></div>
-               <?php if($this->data['catlinks']) { $this->html('catlinks'); } ?>
-               <?php $this->html ('dataAfterContent') ?>
+               <?php if ( $this->data['catlinks'] ) { $this->html( 'catlinks' ); } ?>
+               <?php $this->html( 'dataAfterContent' ) ?>
        </div><!-- mw_contentholder -->
        </div><!-- mw_content -->
        </div><!-- mw_contentwrapper -->
 
-       <div id="mw_portlets"<?php $this->html("userlangattributes") ?>>
+       <div id="mw_portlets"<?php $this->html( "userlangattributes" ) ?>>
        <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
 
        <!-- portlets -->
@@ -120,11 +121,11 @@ class ModernTemplate extends MonoBookTemplate {
 
        <!-- personal portlet -->
        <div class="portlet" id="p-personal" role="navigation">
-               <h3><?php $this->msg('personaltools') ?></h3>
+               <h3><?php $this->msg( 'personaltools' ) ?></h3>
                <div class="pBody">
                        <ul>
-<?php          foreach($this->getPersonalTools() as $key => $item) { ?>
-                               <?php echo $this->makeListItem($key, $item); ?>
+<?php          foreach ( $this->getPersonalTools() as $key => $item ) { ?>
+                               <?php echo $this->makeListItem( $key, $item ); ?>
 
 <?php          } ?>
                        </ul>
@@ -133,19 +134,19 @@ class ModernTemplate extends MonoBookTemplate {
 
 
        <!-- footer -->
-       <div id="footer" role="contentinfo"<?php $this->html('userlangattributes') ?>>
+       <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
                        <ul id="f-list">
 <?php
-               foreach( $this->getFooterLinks("flat") as $aLink ) {
-                       if( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {
+               foreach ( $this->getFooterLinks( "flat" ) as $aLink ) {
+                       if ( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {
 ?>                             <li id="<?php echo$aLink?>"><?php $this->html($aLink) ?></li>
 <?php          }
                }
 ?>
                        </ul>
 <?php
-               foreach ( $this->getFooterIcons("nocopyright") as $blockName => $footerIcons ) { ?>
-                       <div id="mw_<?php echo htmlspecialchars($blockName); ?>">
+               foreach ( $this->getFooterIcons( "nocopyright" ) as $blockName => $footerIcons ) { ?>
+                       <div id="mw_<?php echo htmlspecialchars( $blockName ); ?>">
 <?php
                        foreach ( $footerIcons as $icon ) { ?>
                                <?php echo $this->getSkin()->makeFooterIcon( $icon, 'withoutImage' ); ?>
index f03d31b..b704173 100644 (file)
@@ -25,8 +25,9 @@
  * @ingroup Skins
  */
 
-if( !defined( 'MEDIAWIKI' ) )
+if ( !defined( 'MEDIAWIKI' ) ) {
        die( -1 );
+}
 
 /**
  * Inherit main code from SkinTemplate, set the CSS and template filter.
@@ -48,7 +49,7 @@ class SkinMonoBook extends SkinTemplate {
                $out->addModuleStyles( 'skins.monobook' );
 
                // Ugh. Can't do this properly because $wgHandheldStyle may be a URL
-               if( $wgHandheldStyle ) {
+               if ( $wgHandheldStyle ) {
                        // Currently in testing... try 'chick/main.css'
                        $out->addStyle( $wgHandheldStyle, 'handheld' );
                }
@@ -82,39 +83,39 @@ class MonoBookTemplate extends BaseTemplate {
 ?><div id="globalWrapper">
 <div id="column-content"><div id="content" class="mw-body-primary" role="main">
        <a id="top"></a>
-       <?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
+       <?php if ( $this->data['sitenotice'] ) { ?><div id="siteNotice"><?php $this->html( 'sitenotice' ) ?></div><?php } ?>
 
        <h1 id="firstHeading" class="firstHeading" lang="<?php
                $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getCode();
                $this->html( 'pageLanguage' );
-       ?>"><span dir="auto"><?php $this->html('title') ?></span></h1>
+       ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
        <div id="bodyContent" class="mw-body">
-               <div id="siteSub"><?php $this->msg('tagline') ?></div>
-               <div id="contentSub"<?php $this->html('userlangattributes') ?>><?php $this->html('subtitle') ?></div>
-<?php if($this->data['undelete']) { ?>
-               <div id="contentSub2"><?php $this->html('undelete') ?></div>
-<?php } ?><?php if($this->data['newtalk'] ) { ?>
-               <div class="usermessage"><?php $this->html('newtalk')  ?></div>
-<?php } ?><?php if($this->data['showjumplinks']) { ?>
-               <div id="jump-to-nav" class="mw-jump"><?php $this->msg('jumpto') ?> <a href="#column-one"><?php $this->msg('jumptonavigation') ?></a><?php $this->msg( 'comma-separator' ) ?><a href="#searchInput"><?php $this->msg('jumptosearch') ?></a></div>
+               <div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
+               <div id="contentSub"<?php $this->html( 'userlangattributes' ) ?>><?php $this->html( 'subtitle' ) ?></div>
+<?php if ( $this->data['undelete'] ) { ?>
+               <div id="contentSub2"><?php $this->html( 'undelete' ) ?></div>
+<?php } ?><?php if ( $this->data['newtalk'] ) { ?>
+               <div class="usermessage"><?php $this->html( 'newtalk' )  ?></div>
+<?php } ?><?php if ( $this->data['showjumplinks'] ) { ?>
+               <div id="jump-to-nav" class="mw-jump"><?php $this->msg( 'jumpto' ) ?> <a href="#column-one"><?php $this->msg( 'jumptonavigation' ) ?></a><?php $this->msg( 'comma-separator' ) ?><a href="#searchInput"><?php $this->msg( 'jumptosearch' ) ?></a></div>
 <?php } ?>
                <!-- start content -->
-<?php $this->html('bodytext') ?>
-               <?php if($this->data['catlinks']) { $this->html('catlinks'); } ?>
+<?php $this->html( 'bodytext' ) ?>
+               <?php if ( $this->data['catlinks'] ) { $this->html( 'catlinks' ); } ?>
                <!-- end content -->
-               <?php if($this->data['dataAfterContent']) { $this->html ('dataAfterContent'); } ?>
+               <?php if ( $this->data['dataAfterContent'] ) { $this->html( 'dataAfterContent' ); } ?>
                <div class="visualClear"></div>
        </div>
 </div></div>
-<div id="column-one"<?php $this->html('userlangattributes')  ?>>
+<div id="column-one"<?php $this->html( 'userlangattributes' )  ?>>
        <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
 <?php $this->cactions(); ?>
        <div class="portlet" id="p-personal" role="navigation">
-               <h3><?php $this->msg('personaltools') ?></h3>
+               <h3><?php $this->msg( 'personaltools' ) ?></h3>
                <div class="pBody">
-                       <ul<?php $this->html('userlangattributes') ?>>
-<?php          foreach($this->getPersonalTools() as $key => $item) { ?>
-                               <?php echo $this->makeListItem($key, $item); ?>
+                       <ul<?php $this->html( 'userlangattributes' ) ?>>
+<?php          foreach ( $this->getPersonalTools() as $key => $item ) { ?>
+                               <?php echo $this->makeListItem( $key, $item ); ?>
 
 <?php          } ?>
                        </ul>
@@ -125,7 +126,7 @@ class MonoBookTemplate extends BaseTemplate {
                        echo Html::element( 'a', array(
                                'href' => $this->data['nav_urls']['mainpage']['href'],
                                'style' => "background-image: url({$this->data['logopath']});" )
-                               + Linker::tooltipAndAccesskeyAttribs('p-logo') ); ?>
+                               + Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ); ?>
 
        </div>
 <?php
@@ -138,7 +139,7 @@ class MonoBookTemplate extends BaseTemplate {
        $validFooterLinks = $this->getFooterLinks( "flat" ); // Additional footer links
 
        if ( count( $validFooterIcons ) + count( $validFooterLinks ) > 0 ) { ?>
-<div id="footer" role="contentinfo"<?php $this->html('userlangattributes') ?>>
+<div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
 <?php
                $footerEnd = '</div>';
        } else {
@@ -157,7 +158,7 @@ class MonoBookTemplate extends BaseTemplate {
                if ( count( $validFooterLinks ) > 0 ) {
 ?>     <ul id="f-list">
 <?php
-                       foreach( $validFooterLinks as $aLink ) { ?>
+                       foreach ( $validFooterLinks as $aLink ) { ?>
                <li id="<?php echo $aLink ?>"><?php $this->html($aLink) ?></li>
 <?php
                        }
@@ -181,13 +182,20 @@ echo $footerEnd;
         * @param $sidebar array
         */
        protected function renderPortals( $sidebar ) {
-               if ( !isset( $sidebar['SEARCH'] ) ) $sidebar['SEARCH'] = true;
-               if ( !isset( $sidebar['TOOLBOX'] ) ) $sidebar['TOOLBOX'] = true;
-               if ( !isset( $sidebar['LANGUAGES'] ) ) $sidebar['LANGUAGES'] = true;
+               if ( !isset( $sidebar['SEARCH'] ) ) {
+                       $sidebar['SEARCH'] = true;
+               }
+               if ( !isset( $sidebar['TOOLBOX'] ) ) {
+                       $sidebar['TOOLBOX'] = true;
+               }
+               if ( !isset( $sidebar['LANGUAGES'] ) ) {
+                       $sidebar['LANGUAGES'] = true;
+               }
 
-               foreach( $sidebar as $boxName => $content ) {
-                       if ( $content === false )
+               foreach ( $sidebar as $boxName => $content ) {
+                       if ( $content === false ) {
                                continue;
+                       }
 
                        if ( $boxName == 'SEARCH' ) {
                                $this->searchBox();
@@ -205,19 +213,19 @@ echo $footerEnd;
                global $wgUseTwoButtonsSearchForm;
 ?>
        <div id="p-search" class="portlet" role="search">
-               <h3><label for="searchInput"><?php $this->msg('search') ?></label></h3>
+               <h3><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h3>
                <div id="searchBody" class="pBody">
-                       <form action="<?php $this->text('wgScript') ?>" id="searchform">
-                               <input type='hidden' name="title" value="<?php $this->text('searchtitle') ?>"/>
-                               <?php echo $this->makeSearchInput(array( "id" => "searchInput" )); ?>
+                       <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
+                               <input type='hidden' name="title" value="<?php $this->text( 'searchtitle' ) ?>"/>
+                               <?php echo $this->makeSearchInput( array( "id" => "searchInput" ) ); ?>
 
-                               <?php echo $this->makeSearchButton("go", array( "id" => "searchGoButton", "class" => "searchButton" ));
-                               if ($wgUseTwoButtonsSearchForm): ?>&#160;
-                               <?php echo $this->makeSearchButton("fulltext", array( "id" => "mw-searchButton", "class" => "searchButton" ));
-                               else: ?>
+                               <?php echo $this->makeSearchButton( "go", array( "id" => "searchGoButton", "class" => "searchButton" ) );
+                               if ( $wgUseTwoButtonsSearchForm ) { ?>&#160;
+                               <?php echo $this->makeSearchButton( "fulltext", array( "id" => "mw-searchButton", "class" => "searchButton" ) );
+                               } else { ?>
 
-                               <div><a href="<?php $this->text('searchaction') ?>" rel="search"><?php $this->msg('powersearch-legend') ?></a></div><?php
-                               endif; ?>
+                               <div><a href="<?php $this->text( 'searchaction' ) ?>" rel="search"><?php $this->msg( 'powersearch-legend' ) ?></a></div><?php
+                               } ?>
 
                        </form>
                </div>
@@ -232,10 +240,10 @@ echo $footerEnd;
        function cactions() {
 ?>
        <div id="p-cactions" class="portlet" role="navigation">
-               <h3><?php $this->msg('views') ?></h3>
+               <h3><?php $this->msg( 'views' ) ?></h3>
                <div class="pBody">
                        <ul><?php
-                               foreach($this->data['content_actions'] as $key => $tab) {
+                               foreach ( $this->data['content_actions'] as $key => $tab ) {
                                        echo '
                                ' . $this->makeListItem( $key, $tab );
                                } ?>
@@ -249,12 +257,12 @@ echo $footerEnd;
        function toolbox() {
 ?>
        <div class="portlet" id="p-tb" role="navigation">
-               <h3><?php $this->msg('toolbox') ?></h3>
+               <h3><?php $this->msg( 'toolbox' ) ?></h3>
                <div class="pBody">
                        <ul>
 <?php
                foreach ( $this->getToolbox() as $key => $tbitem ) { ?>
-                               <?php echo $this->makeListItem($key, $tbitem); ?>
+                               <?php echo $this->makeListItem( $key, $tbitem ); ?>
 
 <?php
                }
@@ -269,14 +277,14 @@ echo $footerEnd;
 
        /*************************************************************************************************/
        function languageBox() {
-               if( $this->data['language_urls'] ) {
+               if ( $this->data['language_urls'] ) {
 ?>
        <div id="p-lang" class="portlet" role="navigation">
-               <h3<?php $this->html('userlangattributes') ?>><?php $this->msg('otherlanguages') ?></h3>
+               <h3<?php $this->html( 'userlangattributes' ) ?>><?php $this->msg( 'otherlanguages' ) ?></h3>
                <div class="pBody">
                        <ul>
-<?php          foreach($this->data['language_urls'] as $key => $langlink) { ?>
-                               <?php echo $this->makeListItem($key, $langlink); ?>
+<?php          foreach ( $this->data['language_urls'] as $key => $langlink ) { ?>
+                               <?php echo $this->makeListItem( $key, $langlink ); ?>
 
 <?php          } ?>
                        </ul>
@@ -304,8 +312,8 @@ echo $footerEnd;
                <div class='pBody'>
 <?php   if ( is_array( $cont ) ) { ?>
                        <ul>
-<?php                  foreach($cont as $key => $val) { ?>
-                               <?php echo $this->makeListItem($key, $val); ?>
+<?php                  foreach ( $cont as $key => $val ) { ?>
+                               <?php echo $this->makeListItem( $key, $val ); ?>
 
 <?php                  } ?>
                        </ul>
index d0f9995..f8d55c5 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup Skins
  */
 
-if( !defined( 'MEDIAWIKI' ) ) {
+if ( !defined( 'MEDIAWIKI' ) ) {
        die( -1 );
 }
 
@@ -159,11 +159,11 @@ class VectorTemplate extends BaseTemplate {
                <div id="content" class="mw-body" role="main">
                        <a id="top"></a>
                        <div id="mw-js-message" style="display:none;"<?php $this->html( 'userlangattributes' ) ?>></div>
-                       <?php if ( $this->data['sitenotice'] ): ?>
+                       <?php if ( $this->data['sitenotice'] ) { ?>
                        <!-- sitenotice -->
                        <div id="siteNotice"><?php $this->html( 'sitenotice' ) ?></div>
                        <!-- /sitenotice -->
-                       <?php endif; ?>
+                       <?php } ?>
                        <!-- firstHeading -->
                        <h1 id="firstHeading" class="firstHeading" lang="<?php
                                $this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getCode();
@@ -172,25 +172,25 @@ class VectorTemplate extends BaseTemplate {
                        <!-- /firstHeading -->
                        <!-- bodyContent -->
                        <div id="bodyContent">
-                               <?php if ( $this->data['isarticle'] ): ?>
+                               <?php if ( $this->data['isarticle'] ) { ?>
                                <!-- tagline -->
                                <div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
                                <!-- /tagline -->
-                               <?php endif; ?>
+                               <?php } ?>
                                <!-- subtitle -->
                                <div id="contentSub"<?php $this->html( 'userlangattributes' ) ?>><?php $this->html( 'subtitle' ) ?></div>
                                <!-- /subtitle -->
-                               <?php if ( $this->data['undelete'] ): ?>
+                               <?php if ( $this->data['undelete'] ) { ?>
                                <!-- undelete -->
                                <div id="contentSub2"><?php $this->html( 'undelete' ) ?></div>
                                <!-- /undelete -->
-                               <?php endif; ?>
-                               <?php if( $this->data['newtalk'] ): ?>
+                               <?php } ?>
+                               <?php if ( $this->data['newtalk'] ) { ?>
                                <!-- newtalk -->
                                <div class="usermessage"><?php $this->html( 'newtalk' )  ?></div>
                                <!-- /newtalk -->
-                               <?php endif; ?>
-                               <?php if ( $this->data['showjumplinks'] ): ?>
+                               <?php } ?>
+                               <?php if ( $this->data['showjumplinks'] ) { ?>
                                <!-- jumpto -->
                                <div id="jump-to-nav" class="mw-jump">
                                        <?php $this->msg( 'jumpto' ) ?>
@@ -198,27 +198,27 @@ class VectorTemplate extends BaseTemplate {
                                        <a href="#p-search"><?php $this->msg( 'jumptosearch' ) ?></a>
                                </div>
                                <!-- /jumpto -->
-                               <?php endif; ?>
+                               <?php } ?>
                                <!-- bodycontent -->
                                <?php $this->html( 'bodycontent' ) ?>
                                <!-- /bodycontent -->
-                               <?php if ( $this->data['printfooter'] ): ?>
+                               <?php if ( $this->data['printfooter'] ) { ?>
                                <!-- printfooter -->
                                <div class="printfooter">
                                <?php $this->html( 'printfooter' ); ?>
                                </div>
                                <!-- /printfooter -->
-                               <?php endif; ?>
-                               <?php if ( $this->data['catlinks'] ): ?>
+                               <?php } ?>
+                               <?php if ( $this->data['catlinks'] ) { ?>
                                <!-- catlinks -->
                                <?php $this->html( 'catlinks' ); ?>
                                <!-- /catlinks -->
-                               <?php endif; ?>
-                               <?php if ( $this->data['dataAfterContent'] ): ?>
+                               <?php } ?>
+                               <?php if ( $this->data['dataAfterContent'] ) { ?>
                                <!-- dataAfterContent -->
                                <?php $this->html( 'dataAfterContent' ); ?>
                                <!-- /dataAfterContent -->
-                               <?php endif; ?>
+                               <?php } ?>
                                <div class="visualClear"></div>
                                <!-- debughtml -->
                                <?php $this->html( 'debughtml' ); ?>
@@ -251,26 +251,26 @@ class VectorTemplate extends BaseTemplate {
                </div>
                <!-- footer -->
                <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
-                       <?php foreach( $this->getFooterLinks() as $category => $links ): ?>
+                       <?php foreach ( $this->getFooterLinks() as $category => $links ) { ?>
                                <ul id="footer-<?php echo $category ?>">
-                                       <?php foreach( $links as $link ): ?>
+                                       <?php foreach ( $links as $link ) { ?>
                                                <li id="footer-<?php echo $category ?>-<?php echo $link ?>"><?php $this->html( $link ) ?></li>
-                                       <?php endforeach; ?>
+                                       <?php } ?>
                                </ul>
-                       <?php endforeach; ?>
-                       <?php $footericons = $this->getFooterIcons("icononly");
-                       if ( count( $footericons ) > 0 ): ?>
+                       <?php } ?>
+                       <?php $footericons = $this->getFooterIcons( "icononly" );
+                       if ( count( $footericons ) > 0 ) { ?>
                                <ul id="footer-icons" class="noprint">
-<?php                  foreach ( $footericons as $blockName => $footerIcons ): ?>
+<?php                  foreach ( $footericons as $blockName => $footerIcons ) { ?>
                                        <li id="footer-<?php echo htmlspecialchars( $blockName ); ?>ico">
-<?php                          foreach ( $footerIcons as $icon ): ?>
+<?php                          foreach ( $footerIcons as $icon ) { ?>
                                                <?php echo $this->getSkin()->makeFooterIcon( $icon ); ?>
 
-<?php                          endforeach; ?>
+<?php                          } ?>
                                        </li>
-<?php                  endforeach; ?>
+<?php                  } ?>
                                </ul>
-                       <?php endif; ?>
+                       <?php } ?>
                        <div style="clear:both"></div>
                </div>
                <!-- /footer -->
@@ -299,8 +299,9 @@ class VectorTemplate extends BaseTemplate {
                }
                // Render portals
                foreach ( $portals as $name => $content ) {
-                       if ( $content === false )
+                       if ( $content === false ) {
                                continue;
+                       }
 
                        echo "\n<!-- {$name} -->\n";
                        switch( $name ) {
@@ -337,24 +338,24 @@ class VectorTemplate extends BaseTemplate {
        <h3<?php $this->html( 'userlangattributes' ) ?>><?php $msgObj = wfMessage( $msg ); echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg ); ?></h3>
        <div class="body">
 <?php
-               if ( is_array( $content ) ): ?>
+               if ( is_array( $content ) ) { ?>
                <ul>
 <?php
-                       foreach( $content as $key => $val ): ?>
+                       foreach ( $content as $key => $val ) { ?>
                        <?php echo $this->makeListItem( $key, $val ); ?>
 
 <?php
-                       endforeach;
+                       }
                        if ( $hook !== null ) {
                                wfRunHooks( $hook, array( &$this, true ) );
                        }
                        ?>
                </ul>
 <?php
-               else: ?>
+               } else { ?>
                <?php echo $content; /* Allow raw HTML block to be defined by extensions */ ?>
 <?php
-               endif; ?>
+               } ?>
        </div>
 </div>
 <?php
@@ -380,35 +381,35 @@ class VectorTemplate extends BaseTemplate {
                // Render elements
                foreach ( $elements as $name => $element ) {
                        echo "\n<!-- {$name} -->\n";
-                       switch ( $element ) {
+                       switch( $element ) {
                                case 'NAMESPACES':
 ?>
-<div id="p-namespaces" role="navigation" class="vectorTabs<?php if ( count( $this->data['namespace_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
+<div id="p-namespaces" role="navigation" class="vectorTabs<?php if ( count( $this->data['namespace_urls'] ) == 0 ) { echo ' emptyPortlet'; } ?>">
        <h3><?php $this->msg( 'namespaces' ) ?></h3>
        <ul<?php $this->html( 'userlangattributes' ) ?>>
-               <?php foreach ( $this->data['namespace_urls'] as $link ): ?>
+               <?php foreach ( $this->data['namespace_urls'] as $link ) { ?>
                        <li <?php echo $link['attributes'] ?>><span><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] ) ?></a></span></li>
-               <?php endforeach; ?>
+               <?php } ?>
        </ul>
 </div>
 <?php
                                break;
                                case 'VARIANTS':
 ?>
-<div id="p-variants" role="navigation" class="vectorMenu<?php if ( count( $this->data['variant_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
+<div id="p-variants" role="navigation" class="vectorMenu<?php if ( count( $this->data['variant_urls'] ) == 0 ) { echo ' emptyPortlet'; } ?>">
        <h3 id="mw-vector-current-variant">
-       <?php foreach ( $this->data['variant_urls'] as $link ): ?>
-               <?php if ( stripos( $link['attributes'], 'selected' ) !== false ): ?>
+       <?php foreach ( $this->data['variant_urls'] as $link ) { ?>
+               <?php if ( stripos( $link['attributes'], 'selected' ) !== false ) { ?>
                        <?php echo htmlspecialchars( $link['text'] ) ?>
-               <?php endif; ?>
-       <?php endforeach; ?>
+               <?php } ?>
+       <?php } ?>
        </h3>
        <h3><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h3>
        <div class="menu">
                <ul>
-                       <?php foreach ( $this->data['variant_urls'] as $link ): ?>
+                       <?php foreach ( $this->data['variant_urls'] as $link ) { ?>
                                <li<?php echo $link['attributes'] ?>><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" lang="<?php echo htmlspecialchars( $link['lang'] ) ?>" hreflang="<?php echo htmlspecialchars( $link['hreflang'] ) ?>" <?php echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] ) ?></a></li>
-                       <?php endforeach; ?>
+                       <?php } ?>
                </ul>
        </div>
 </div>
@@ -417,29 +418,29 @@ class VectorTemplate extends BaseTemplate {
                                case 'VIEWS':
 ?>
 <div id="p-views" role="navigation" class="vectorTabs<?php if ( count( $this->data['view_urls'] ) == 0 ) { echo ' emptyPortlet'; } ?>">
-       <h3><?php $this->msg('views') ?></h3>
-       <ul<?php $this->html('userlangattributes') ?>>
-               <?php foreach ( $this->data['view_urls'] as $link ): ?>
+       <h3><?php $this->msg( 'views' ) ?></h3>
+       <ul<?php $this->html( 'userlangattributes' ) ?>>
+               <?php foreach ( $this->data['view_urls'] as $link ) { ?>
                        <li<?php echo $link['attributes'] ?>><span><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php
                                // $link['text'] can be undefined - bug 27764
                                if ( array_key_exists( 'text', $link ) ) {
-                                       echo array_key_exists( 'img', $link ) ?  '<img src="' . $link['img'] . '" alt="' . $link['text'] . '" />' : htmlspecialchars( $link['text'] );
+                                       echo array_key_exists( 'img', $link ) ? '<img src="' . $link['img'] . '" alt="' . $link['text'] . '" />' : htmlspecialchars( $link['text'] );
                                }
                                ?></a></span></li>
-               <?php endforeach; ?>
+               <?php } ?>
        </ul>
 </div>
 <?php
                                break;
                                case 'ACTIONS':
 ?>
-<div id="p-cactions" role="navigation" class="vectorMenu<?php if ( count( $this->data['action_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
+<div id="p-cactions" role="navigation" class="vectorMenu<?php if ( count( $this->data['action_urls'] ) == 0 ) { echo ' emptyPortlet'; } ?>">
        <h3><span><?php $this->msg( 'actions' ) ?></span><a href="#"></a></h3>
        <div class="menu">
                <ul<?php $this->html( 'userlangattributes' ) ?>>
-                       <?php foreach ( $this->data['action_urls'] as $link ): ?>
+                       <?php foreach ( $this->data['action_urls'] as $link ) { ?>
                                <li<?php echo $link['attributes'] ?>><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] ) ?></a></li>
-                       <?php endforeach; ?>
+                       <?php } ?>
                </ul>
        </div>
 </div>
@@ -447,7 +448,7 @@ class VectorTemplate extends BaseTemplate {
                                break;
                                case 'PERSONAL':
 ?>
-<div id="p-personal" role="navigation" class="<?php if ( count( $this->data['personal_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
+<div id="p-personal" role="navigation" class="<?php if ( count( $this->data['personal_urls'] ) == 0 ) { echo ' emptyPortlet'; } ?>">
        <h3><?php $this->msg( 'personaltools' ) ?></h3>
        <ul<?php $this->html( 'userlangattributes' ) ?>>
 <?php
@@ -465,21 +466,21 @@ class VectorTemplate extends BaseTemplate {
 <div id="p-search" role="search">
        <h3<?php $this->html( 'userlangattributes' ) ?>><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h3>
        <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
-               <?php if ( $wgVectorUseSimpleSearch && $this->getSkin()->getUser()->getOption( 'vector-simplesearch' ) ): ?>
+               <?php if ( $wgVectorUseSimpleSearch && $this->getSkin()->getUser()->getOption( 'vector-simplesearch' ) ) { ?>
                <div id="simpleSearch">
-                       <?php if ( $this->data['rtl'] ): ?>
+                       <?php if ( $this->data['rtl'] ) { ?>
                        <?php echo $this->makeSearchButton( 'image', array( 'id' => 'searchButton', 'src' => $this->getSkin()->getSkinStylePath( 'images/search-rtl.png' ), 'width' => '12', 'height' => '13' ) ); ?>
-                       <?php endif; ?>
+                       <?php } ?>
                        <?php echo $this->makeSearchInput( array( 'id' => 'searchInput', 'type' => 'text' ) ); ?>
-                       <?php if ( !$this->data['rtl'] ): ?>
+                       <?php if ( !$this->data['rtl'] ) { ?>
                        <?php echo $this->makeSearchButton( 'image', array( 'id' => 'searchButton', 'src' => $this->getSkin()->getSkinStylePath( 'images/search-ltr.png' ), 'width' => '12', 'height' => '13' ) ); ?>
-                       <?php endif; ?>
-               <?php else: ?>
+                       <?php } ?>
+               <?php } else { ?>
                <div>
                        <?php echo $this->makeSearchInput( array( 'id' => 'searchInput' ) ); ?>
                        <?php echo $this->makeSearchButton( 'go', array( 'id' => 'searchGoButton', 'class' => 'searchButton' ) ); ?>
                        <?php echo $this->makeSearchButton( 'fulltext', array( 'id' => 'mw-searchButton', 'class' => 'searchButton' ) ); ?>
-               <?php endif; ?>
+               <?php } ?>
                        <input type='hidden' name="title" value="<?php $this->text( 'searchtitle' ) ?>"/>
                </div>
        </form>
index 4341891..83c2fcb 100644 (file)
@@ -47,6 +47,7 @@ $wgAutoloadClasses += array(
 
        //db
        'ORMTableTest' => "$testDir/phpunit/includes/db/ORMTableTest.php",
+       'DatabaseTestHelper' => "$testDir/phpunit/includes/db/DatabaseTestHelper.php",
 
        # tests/phpunit/includes/api
        'ApiFormatTestBase' => "$testDir/phpunit/includes/api/format/ApiFormatTestBase.php",
index 1d4102c..540b6f4 100644 (file)
@@ -3751,7 +3751,6 @@ parsoid
 <table>
 <tbody>
 <tr>
-<td></td>
 <td>foo</td></tr></tbody></table>
 !! end
 
@@ -4467,7 +4466,7 @@ Horizontal ruler -- eats additional dashes on the same line
 !! end
 
 !! test
-Horizontal ruler -- does not collaps dashes on consecutive lines
+Horizontal ruler -- does not collapse dashes on consecutive lines
 !! input
 ----
 ----
@@ -11743,6 +11742,27 @@ bar
 </pre>
 !! end
 
+!!test
+Parsing of overlapping (improperly nested) inline html tags (PHP parser)
+!!options
+php
+!!input
+<span><s>x</span></s>
+!!result
+<p><span><s>x&lt;/span&gt;</s></span>
+</p>
+!!end
+
+!!test
+Parsing of overlapping (improperly nested) inline html tags (Parsoid)
+!!options
+parsoid
+!!input
+<span><s>x</span></s>
+!!result
+<p><span><s>x</s></span><s></s>
+</p>
+!!end
 
 ###
 ### Language variants related tests
@@ -14505,7 +14525,7 @@ RT-ed inter-element separators should be valid separators
 Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out
 (Parsoid-only since PHP parser relies on Tidy for correct output)
 !!options
-disabled parsoid
+parsoid
 !!input
 {|
 |<small>foo
@@ -14537,11 +14557,30 @@ Empty TD followed by TD with tpl-generated attribute
 
 !!end
 
+!!test
+Indented table with an empty td
+!!input
+ {|
+ |-
+ |
+ |foo
+ |}
+!!result
+<table>
+
+<tr>
+<td>
+</td>
+<td>foo
+</td></tr></table>
+
+!!end
+
 !!test
 Empty TR followed by a template-generated TR
 (Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext)
 !!options
-disabled parsoid
+parsoid
 !!input
 {|
 |-
@@ -14551,11 +14590,35 @@ disabled parsoid
 <table>
 <tbody>
 <tr>
-<td></td></tr>
+</tr>
 <tr>
 <td>foo</td></tr></tbody></table>
 !!end
 
+## PHP and parsoid output differ for this, and since this is primarily
+## for testing Parsoid's serializer, marking this Parsoid only
+!!test
+Empty TR followed by mixed-ws-comment line should RT correctly
+!!options
+parsoid
+!!input
+{|
+|-
+ <!--c-->
+|-
+<!--c--> <!--d-->
+|}
+!!result
+<table>
+<tbody>
+<tr>
+<td> <!--c--></td></tr>
+<tr>
+<td><!--c--> <!--d--></td></tr>
+</table>
+
+!!end
+
 !!test
 Multi-line image caption generated by templates with/without trailing newlines
 !!options
@@ -14569,6 +14632,21 @@ parsoid
 
 !!end
 
+## PHP emits broken html for this, and since this is primarily
+## a Parsoid serializer test, marking this Parsoid only
+!!test
+Improperly nested inline or quotes tags with whitespace in between
+!!options
+parsoid
+!!input
+<span> <s>x</span> </s>
+''' ''x''' ''
+!!result
+<p><span> <s>x</s></span><s> </s>
+<b> <i>x</i></b><i> </i></span>
+</p>
+!!end
+
 TODO:
 more images
 more tables
index 9aa867b..115cdc9 100644 (file)
@@ -1,26 +1,26 @@
 <?php
-$result = array (
+$result = array(
        'xmp-exif' =>
-       array (
+       array(
                'CameraOwnerName' => 'Me!',
        ),
        'xmp-general' =>
-       array (
+       array(
                'LicenseUrl' => 'http://creativecommons.com/cc-by-2.9',
                'ImageDescription' =>
-               array (
+               array(
                        'x-default' => 'Test image for the cc: xmp: xmpRights: namespaces in xmp',
                        '_type' => 'lang',
                ),
                'ObjectName' =>
-               array (
+               array(
                        'x-default' => 'xmp core/xmp rights/cc ns test',
                        '_type' => 'lang',
                ),
                'DateTimeDigitized' => '2005:04:03',
                'Software' => 'The one true editor: Vi (ok i used gimp)',
                'Identifier' =>
-               array (
+               array(
                        0 => 'http://example.com/identifierurl',
                        1 => 'urn:sha1:342524abcdef',
                        '_type' => 'ul',
@@ -33,12 +33,12 @@ $result = array (
                'RightsCertificate' => 'http://example.com/rights-certificate/',
                'Copyrighted' => 'True',
                'CopyrightOwner' =>
-               array (
+               array(
                        0 => 'Bawolff is copyright owner',
                        '_type' => 'ul',
                ),
                'UsageTerms' =>
-               array (
+               array(
                        'x-default' => 'do whatever you want',
                        'en-gb' => 'Do whatever you want in british english',
                        '_type' => 'lang',
@@ -46,7 +46,7 @@ $result = array (
                'WebStatement' => 'http://example.com/web_statement',
        ),
        'xmp-deprecated' =>
-       array (
+       array(
                'Identifier' => 'http://example.com/identifierurl/wrong',
        ),
 );
index 0f37182..02546fa 100644 (file)
@@ -51,6 +51,8 @@ class BlockTest extends MediaWikiLangTestCase {
                } else {
                        throw new MWException( "Failed to insert block for BlockTest; old leftover block remaining?" );
                }
+
+               $this->addXffBlocks();
        }
 
        /**
@@ -229,39 +231,46 @@ class BlockTest extends MediaWikiLangTestCase {
                $this->assertEquals( 0, $block->getBy(), 'Correct blocker id' );
        }
 
-       function testBlocksOnXff() {
+       protected function addXffBlocks() {
+               static $inited = false;
+
+               if ( $inited ) {
+                       return;
+               }
+
+               $inited = true;
 
                $blockList = array(
                        array( 'target' => '70.2.0.0/16',
-                               'type' =>  Block::TYPE_RANGE,
+                               'type' => Block::TYPE_RANGE,
                                'desc' => 'Range Hardblock',
                                'ACDisable' => false,
                                'isHardblock' => true,
                                'isAutoBlocking' => false,
                        ),
                        array( 'target' => '2001:4860:4001::/48',
-                               'type' =>  Block::TYPE_RANGE,
+                               'type' => Block::TYPE_RANGE,
                                'desc' => 'Range6 Hardblock',
                                'ACDisable' => false,
                                'isHardblock' => true,
                                'isAutoBlocking' => false,
                        ),
                        array( 'target' => '60.2.0.0/16',
-                               'type' =>  Block::TYPE_RANGE,
+                               'type' => Block::TYPE_RANGE,
                                'desc' => 'Range Softblock with AC Disabled',
                                'ACDisable' => true,
                                'isHardblock' => false,
                                'isAutoBlocking' => false,
                        ),
                        array( 'target' => '50.2.0.0/16',
-                               'type' =>  Block::TYPE_RANGE,
+                               'type' => Block::TYPE_RANGE,
                                'desc' => 'Range Softblock',
                                'ACDisable' => false,
                                'isHardblock' => false,
                                'isAutoBlocking' => false,
                        ),
                        array( 'target' => '50.1.1.1',
-                               'type' =>  Block::TYPE_IP,
+                               'type' => Block::TYPE_IP,
                                'desc' => 'Exact Softblock',
                                'ACDisable' => false,
                                'isHardblock' => false,
@@ -288,8 +297,10 @@ class BlockTest extends MediaWikiLangTestCase {
                        $block->isAutoblocking( $insBlock['isAutoBlocking'] );
                        $block->insert();
                }
+       }
 
-               $xffHeaders = array(
+       public static function providerXff() {
+               return array(
                        array( 'xff' => '1.2.3.4, 70.2.1.1, 60.2.1.1, 2.3.4.5',
                                'count' => 2,
                                'result' => 'Range Hardblock'
@@ -331,14 +342,16 @@ class BlockTest extends MediaWikiLangTestCase {
                                'result' => 'Range6 Hardblock'
                        ),
                );
+       }
 
-               foreach ( $xffHeaders as $test ) {
-                       $list = array_map( 'trim', explode( ',', $test['xff'] ) );
-                       $xffblocks = Block::getBlocksForIPList( $list, true );
-                       $this->assertEquals( $test['count'], count( $xffblocks ), 'Number of blocks for ' . $test['xff'] );
-                       $block = Block::chooseBlock( $xffblocks, $list );
-                       $this->assertEquals( $test['result'], $block->mReason, 'Correct block type for XFF header ' . $test['xff'] );
-               }
-
+       /**
+        * @dataProvider providerXff
+        */
+       function testBlocksOnXff( $xff, $exCount, $exResult ) {
+               $list = array_map( 'trim', explode( ',', $xff ) );
+               $xffblocks = Block::getBlocksForIPList( $list, true );
+               $this->assertEquals( $exCount, count( $xffblocks ), 'Number of blocks for ' . $xff );
+               $block = Block::chooseBlock( $xffblocks, $list );
+               $this->assertEquals( $exResult, $block->mReason, 'Correct block type for XFF header ' . $xff );
        }
 }
index 58cf6b9..87193fa 100644 (file)
@@ -29,7 +29,8 @@ class WfGetCallerTest extends MediaWikiTestCase {
                $this->assertEquals( 'WfGetCallerTest::testN', self::intermediateFunction( 2, 0 ) );
                $this->assertEquals( 'WfGetCallerTest::intermediateFunction', self::intermediateFunction( 1, 0 ) );
 
-               for ( $i = 0; $i < 10; $i++ )
+               for ( $i = 0; $i < 10; $i++ ) {
                        $this->assertEquals( 'WfGetCallerTest::intermediateFunction', self::intermediateFunction( $i + 1, $i ) );
+               }
        }
 }
index 0979243..caa3368 100644 (file)
@@ -2,35 +2,40 @@
 
 /**
  * Test the abstract database layer
- * Using Mysql for the sql at the moment TODO
- *
- * @group Database
+ * This is a non DBMS depending test.
  */
 class DatabaseSQLTest extends MediaWikiTestCase {
 
+       private $database;
+
        protected function setUp() {
                parent::setUp();
-               // TODO support other DBMS or find another way to do it
-               if ( $this->db->getType() !== 'mysql' ) {
-                       $this->markTestSkipped( 'No mysql database' );
-               }
+               $this->database = new DatabaseTestHelper( __CLASS__ );
+       }
+
+       protected function assertLastSql( $sqlText ) {
+               $this->assertEquals(
+                       $this->database->getLastSqls(),
+                       $sqlText
+               );
        }
 
        /**
-        * @dataProvider provideSelectSQLText
+        * @dataProvider provideSelect
         */
-       function testSelectSQLText( $sql, $sqlText ) {
-               $this->assertEquals( trim( $this->db->selectSQLText(
-                       isset( $sql['tables'] ) ? $sql['tables'] : array(),
-                       isset( $sql['fields'] ) ? $sql['fields'] : array(),
+       function testSelect( $sql, $sqlText ) {
+               $this->database->select(
+                       $sql['tables'],
+                       $sql['fields'],
                        isset( $sql['conds'] ) ? $sql['conds'] : array(),
                        __METHOD__,
                        isset( $sql['options'] ) ? $sql['options'] : array(),
                        isset( $sql['join_conds'] ) ? $sql['join_conds'] : array()
-               ) ), $sqlText );
+               );
+               $this->assertLastSql( $sqlText );
        }
 
-       public static function provideSelectSQLText() {
+       public static function provideSelect() {
                return array(
                        array(
                                array(
@@ -38,8 +43,8 @@ class DatabaseSQLTest extends MediaWikiTestCase {
                                        'fields' => array( 'field', 'alias' => 'field2' ),
                                        'conds' => array( 'alias' => 'text' ),
                                ),
-                               "SELECT  field,field2 AS alias  " .
-                                       "FROM `unittest_table`  " .
+                               "SELECT field,field2 AS alias " .
+                                       "FROM table " .
                                        "WHERE alias = 'text'"
                        ),
                        array(
@@ -49,9 +54,9 @@ class DatabaseSQLTest extends MediaWikiTestCase {
                                        'conds' => array( 'alias' => 'text' ),
                                        'options' => array( 'LIMIT' => 1, 'ORDER BY' => 'field' ),
                                ),
-                               "SELECT  field,field2 AS alias  " .
-                                       "FROM `unittest_table`  " .
-                                       "WHERE alias = 'text'  " .
+                               "SELECT field,field2 AS alias " .
+                                       "FROM table " .
+                                       "WHERE alias = 'text' " .
                                        "ORDER BY field " .
                                        "LIMIT 1"
                        ),
@@ -65,9 +70,9 @@ class DatabaseSQLTest extends MediaWikiTestCase {
                                                'LEFT JOIN', 'tid = t2.id'
                                        ) ),
                                ),
-                               "SELECT  tid,field,field2 AS alias,t2.id  " .
-                                       "FROM `unittest_table` LEFT JOIN `unittest_table2` `t2` ON ((tid = t2.id))  " .
-                                       "WHERE alias = 'text'  " .
+                               "SELECT tid,field,field2 AS alias,t2.id " .
+                                       "FROM table LEFT JOIN table2 t2 ON ((tid = t2.id)) " .
+                                       "WHERE alias = 'text' " .
                                        "ORDER BY field " .
                                        "LIMIT 1"
                        ),
@@ -81,9 +86,9 @@ class DatabaseSQLTest extends MediaWikiTestCase {
                                                'LEFT JOIN', 'tid = t2.id'
                                        ) ),
                                ),
-                               "SELECT  tid,field,field2 AS alias,t2.id  " .
-                                       "FROM `unittest_table` LEFT JOIN `unittest_table2` `t2` ON ((tid = t2.id))  " .
-                                       "WHERE alias = 'text'  " .
+                               "SELECT tid,field,field2 AS alias,t2.id " .
+                                       "FROM table LEFT JOIN table2 t2 ON ((tid = t2.id)) " .
+                                       "WHERE alias = 'text' " .
                                        "GROUP BY field HAVING COUNT(*) > 1 " .
                                        "LIMIT 1"
                        ),
@@ -97,12 +102,405 @@ class DatabaseSQLTest extends MediaWikiTestCase {
                                                'LEFT JOIN', 'tid = t2.id'
                                        ) ),
                                ),
-                               "SELECT  tid,field,field2 AS alias,t2.id  " .
-                                       "FROM `unittest_table` LEFT JOIN `unittest_table2` `t2` ON ((tid = t2.id))  " .
-                                       "WHERE alias = 'text'  " .
+                               "SELECT tid,field,field2 AS alias,t2.id " .
+                                       "FROM table LEFT JOIN table2 t2 ON ((tid = t2.id)) " .
+                                       "WHERE alias = 'text' " .
                                        "GROUP BY field,field2 HAVING (COUNT(*) > 1) AND field = '1' " .
                                        "LIMIT 1"
                        ),
+                       array(
+                               array(
+                                       'tables' => array( 'table' ),
+                                       'fields' => array( 'alias' => 'field' ),
+                                       'conds' => array( 'alias' => array( 1, 2, 3, 4 ) ),
+                               ),
+                               "SELECT field AS alias " .
+                                       "FROM table " .
+                                       "WHERE alias IN ('1','2','3','4')"
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideUpdate
+        */
+       function testUpdate( $sql, $sqlText ) {
+               $this->database->update(
+                       $sql['table'],
+                       $sql['values'],
+                       $sql['conds'],
+                       __METHOD__,
+                       isset( $sql['options'] ) ? $sql['options'] : array()
+               );
+               $this->assertLastSql( $sqlText );
+       }
+
+       public static function provideUpdate() {
+               return array(
+                       array(
+                               array(
+                                       'table' => 'table',
+                                       'values' => array( 'field' => 'text', 'field2' => 'text2' ),
+                                       'conds' => array( 'alias' => 'text' ),
+                               ),
+                               "UPDATE table " .
+                                       "SET field = 'text'" .
+                                       ",field2 = 'text2' " .
+                                       "WHERE alias = 'text'"
+                       ),
+                       array(
+                               array(
+                                       'table' => 'table',
+                                       'values' => array( 'field = other', 'field2' => 'text2' ),
+                                       'conds' => array( 'id' => '1' ),
+                               ),
+                               "UPDATE table " .
+                                       "SET field = other" .
+                                       ",field2 = 'text2' " .
+                                       "WHERE id = '1'"
+                       ),
+                       array(
+                               array(
+                                       'table' => 'table',
+                                       'values' => array( 'field = other', 'field2' => 'text2' ),
+                                       'conds' => '*',
+                               ),
+                               "UPDATE table " .
+                                       "SET field = other" .
+                                       ",field2 = 'text2'"
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideDelete
+        */
+       function testDelete( $sql, $sqlText ) {
+               $this->database->delete(
+                       $sql['table'],
+                       $sql['conds'],
+                       __METHOD__
+               );
+               $this->assertLastSql( $sqlText );
+       }
+
+       public static function provideDelete() {
+               return array(
+                       array(
+                               array(
+                                       'table' => 'table',
+                                       'conds' => array( 'alias' => 'text' ),
+                               ),
+                               "DELETE FROM table " .
+                                       "WHERE alias = 'text'"
+                       ),
+                       array(
+                               array(
+                                       'table' => 'table',
+                                       'conds' => '*',
+                               ),
+                               "DELETE FROM table"
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideDeleteJoin
+        */
+       function testDeleteJoin( $sql, $sqlText ) {
+               $this->database->deleteJoin(
+                       $sql['delTable'],
+                       $sql['joinTable'],
+                       $sql['delVar'],
+                       $sql['joinVar'],
+                       $sql['conds'],
+                       __METHOD__
+               );
+               $this->assertLastSql( $sqlText );
+       }
+
+       public static function provideDeleteJoin() {
+               return array(
+                       array(
+                               array(
+                                       'delTable' => 'table',
+                                       'joinTable' => 'table_join',
+                                       'delVar' => 'field',
+                                       'joinVar' => 'field_join',
+                                       'conds' => array( 'alias' => 'text' ),
+                               ),
+                               "DELETE FROM table " .
+                                       "WHERE field IN (" .
+                                               "SELECT field_join FROM table_join WHERE alias = 'text'" .
+                                       ")"
+                       ),
+                       array(
+                               array(
+                                       'delTable' => 'table',
+                                       'joinTable' => 'table_join',
+                                       'delVar' => 'field',
+                                       'joinVar' => 'field_join',
+                                       'conds' => '*',
+                               ),
+                               "DELETE FROM table " .
+                                       "WHERE field IN (" .
+                                               "SELECT field_join FROM table_join " .
+                                       ")"
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideInsert
+        */
+       function testInsert( $sql, $sqlText ) {
+               $this->database->insert(
+                       $sql['table'],
+                       $sql['rows'],
+                       __METHOD__,
+                       isset( $sql['options'] ) ? $sql['options'] : array()
+               );
+               $this->assertLastSql( $sqlText );
+       }
+
+       public static function provideInsert() {
+               return array(
+                       array(
+                               array(
+                                       'table' => 'table',
+                                       'rows' => array( 'field' => 'text', 'field2' => 2 ),
+                               ),
+                               "INSERT INTO table " .
+                                       "(field,field2) " .
+                                       "VALUES ('text','2')"
+                       ),
+                       array(
+                               array(
+                                       'table' => 'table',
+                                       'rows' => array( 'field' => 'text', 'field2' => 2 ),
+                                       'options' => 'IGNORE',
+                               ),
+                               "INSERT IGNORE INTO table " .
+                                       "(field,field2) " .
+                                       "VALUES ('text','2')"
+                       ),
+                       array(
+                               array(
+                                       'table' => 'table',
+                                       'rows' => array(
+                                               array( 'field' => 'text', 'field2' => 2 ),
+                                               array( 'field' => 'multi', 'field2' => 3 ),
+                                       ),
+                                       'options' => 'IGNORE',
+                               ),
+                               "INSERT IGNORE INTO table " .
+                                       "(field,field2) " .
+                                       "VALUES " .
+                                               "('text','2')," .
+                                               "('multi','3')"
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideInsertSelect
+        */
+       function testInsertSelect( $sql, $sqlText ) {
+               $this->database->insertSelect(
+                       $sql['destTable'],
+                       $sql['srcTable'],
+                       $sql['varMap'],
+                       $sql['conds'],
+                       __METHOD__,
+                       isset( $sql['insertOptions'] ) ? $sql['insertOptions'] : array(),
+                       isset( $sql['selectOptions'] ) ? $sql['selectOptions'] : array()
+               );
+               $this->assertLastSql( $sqlText );
+       }
+
+       public static function provideInsertSelect() {
+               return array(
+                       array(
+                               array(
+                                       'destTable' => 'insert_table',
+                                       'srcTable' => 'select_table',
+                                       'varMap' => array( 'field_insert' => 'field_select', 'field' => 'field2' ),
+                                       'conds' => '*',
+                               ),
+                               "INSERT INTO insert_table " .
+                                       "(field_insert,field) " .
+                                       "SELECT field_select,field2 " .
+                                               "FROM select_table"
+                       ),
+                       array(
+                               array(
+                                       'destTable' => 'insert_table',
+                                       'srcTable' => 'select_table',
+                                       'varMap' => array( 'field_insert' => 'field_select', 'field' => 'field2' ),
+                                       'conds' => array( 'field' => 2 ),
+                               ),
+                               "INSERT INTO insert_table " .
+                                       "(field_insert,field) " .
+                                       "SELECT field_select,field2 " .
+                                               "FROM select_table " .
+                                               "WHERE field = '2'"
+                       ),
+                       array(
+                               array(
+                                       'destTable' => 'insert_table',
+                                       'srcTable' => 'select_table',
+                                       'varMap' => array( 'field_insert' => 'field_select', 'field' => 'field2' ),
+                                       'conds' => array( 'field' => 2 ),
+                                       'insertOptions' => 'IGNORE',
+                                       'selectOptions' => array( 'ORDER BY' => 'field' ),
+                               ),
+                               "INSERT IGNORE INTO insert_table " .
+                                       "(field_insert,field) " .
+                                       "SELECT field_select,field2 " .
+                                               "FROM select_table " .
+                                               "WHERE field = '2' " .
+                                               "ORDER BY field"
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideReplace
+        */
+       function testReplace( $sql, $sqlText ) {
+               $this->database->replace(
+                       $sql['table'],
+                       $sql['uniqueIndexes'],
+                       $sql['rows'],
+                       __METHOD__
+               );
+               $this->assertLastSql( $sqlText );
+       }
+
+       public static function provideReplace() {
+               return array(
+                       array(
+                               array(
+                                       'table' => 'replace_table',
+                                       'uniqueIndexes' => array( 'field' ),
+                                       'rows' => array( 'field' => 'text', 'field2' => 'text2' ),
+                               ),
+                               "DELETE FROM replace_table " .
+                                       "WHERE ( field='text' ); " .
+                                       "INSERT INTO replace_table " .
+                                               "(field,field2) " .
+                                               "VALUES ('text','text2')"
+                       ),
+                       array(
+                               array(
+                                       'table' => 'module_deps',
+                                       'uniqueIndexes' => array( array( 'md_module', 'md_skin' ) ),
+                                       'rows' => array(
+                                               'md_module' => 'module',
+                                               'md_skin' => 'skin',
+                                               'md_deps' => 'deps',
+                                       ),
+                               ),
+                               "DELETE FROM module_deps " .
+                                       "WHERE ( md_module='module' AND md_skin='skin' ); " .
+                                       "INSERT INTO module_deps " .
+                                               "(md_module,md_skin,md_deps) " .
+                                               "VALUES ('module','skin','deps')"
+                       ),
+                       array(
+                               array(
+                                       'table' => 'module_deps',
+                                       'uniqueIndexes' => array( array( 'md_module', 'md_skin' ) ),
+                                       'rows' => array(
+                                               array(
+                                                       'md_module' => 'module',
+                                                       'md_skin' => 'skin',
+                                                       'md_deps' => 'deps',
+                                               ), array(
+                                                       'md_module' => 'module2',
+                                                       'md_skin' => 'skin2',
+                                                       'md_deps' => 'deps2',
+                                               ),
+                                       ),
+                               ),
+                               "DELETE FROM module_deps " .
+                                       "WHERE ( md_module='module' AND md_skin='skin' ); " .
+                                       "INSERT INTO module_deps " .
+                                               "(md_module,md_skin,md_deps) " .
+                                               "VALUES ('module','skin','deps'); " .
+                               "DELETE FROM module_deps " .
+                                       "WHERE ( md_module='module2' AND md_skin='skin2' ); " .
+                                       "INSERT INTO module_deps " .
+                                               "(md_module,md_skin,md_deps) " .
+                                               "VALUES ('module2','skin2','deps2')"
+                       ),
+                       array(
+                               array(
+                                       'table' => 'module_deps',
+                                       'uniqueIndexes' => array( 'md_module', 'md_skin' ),
+                                       'rows' => array(
+                                               array(
+                                                       'md_module' => 'module',
+                                                       'md_skin' => 'skin',
+                                                       'md_deps' => 'deps',
+                                               ), array(
+                                                       'md_module' => 'module2',
+                                                       'md_skin' => 'skin2',
+                                                       'md_deps' => 'deps2',
+                                               ),
+                                       ),
+                               ),
+                               "DELETE FROM module_deps " .
+                                       "WHERE ( md_module='module' ) OR ( md_skin='skin' ); " .
+                                       "INSERT INTO module_deps " .
+                                               "(md_module,md_skin,md_deps) " .
+                                               "VALUES ('module','skin','deps'); " .
+                               "DELETE FROM module_deps " .
+                                       "WHERE ( md_module='module2' ) OR ( md_skin='skin2' ); " .
+                                       "INSERT INTO module_deps " .
+                                               "(md_module,md_skin,md_deps) " .
+                                               "VALUES ('module2','skin2','deps2')"
+                       ),
+                       array(
+                               array(
+                                       'table' => 'module_deps',
+                                       'uniqueIndexes' => array(),
+                                       'rows' => array(
+                                               'md_module' => 'module',
+                                               'md_skin' => 'skin',
+                                               'md_deps' => 'deps',
+                                       ),
+                               ),
+                               "INSERT INTO module_deps " .
+                                       "(md_module,md_skin,md_deps) " .
+                                       "VALUES ('module','skin','deps')"
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideNativeReplace
+        */
+       function testNativeReplace( $sql, $sqlText ) {
+               $this->database->nativeReplace(
+                       $sql['table'],
+                       $sql['rows'],
+                       __METHOD__
+               );
+               $this->assertLastSql( $sqlText );
+       }
+
+       public static function provideNativeReplace() {
+               return array(
+                       array(
+                               array(
+                                       'table' => 'replace_table',
+                                       'rows' => array( 'field' => 'text', 'field2' => 'text2' ),
+                               ),
+                               "REPLACE INTO replace_table " .
+                                       "(field,field2) " .
+                                       "VALUES ('text','text2')"
+                       ),
                );
        }
 
@@ -110,7 +508,7 @@ class DatabaseSQLTest extends MediaWikiTestCase {
         * @dataProvider provideConditional
         */
        function testConditional( $sql, $sqlText ) {
-               $this->assertEquals( trim( $this->db->conditional(
+               $this->assertEquals( trim( $this->database->conditional(
                        $sql['conds'],
                        $sql['true'],
                        $sql['false']
@@ -145,4 +543,116 @@ class DatabaseSQLTest extends MediaWikiTestCase {
                        ),
                );
        }
+
+       /**
+        * @dataProvider provideBuildConcat
+        */
+       function testBuildConcat( $stringList, $sqlText ) {
+               $this->assertEquals( trim( $this->database->buildConcat(
+                       $stringList
+               ) ), $sqlText );
+       }
+
+       public static function provideBuildConcat() {
+               return array(
+                       array(
+                               array( 'field', 'field2' ),
+                               "CONCAT(field,field2)"
+                       ),
+                       array(
+                               array( "'test'", 'field2' ),
+                               "CONCAT('test',field2)"
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideBuildLike
+        */
+       function testBuildLike( $array, $sqlText ) {
+               $this->assertEquals( trim( $this->database->buildLike(
+                       $array
+               ) ), $sqlText );
+       }
+
+       public static function provideBuildLike() {
+               return array(
+                       array(
+                               'text',
+                               "LIKE 'text'"
+                       ),
+                       array(
+                               array( 'text', new LikeMatch( '%' ) ),
+                               "LIKE 'text%'"
+                       ),
+                       array(
+                               array( 'text', new LikeMatch( '%' ), 'text2' ),
+                               "LIKE 'text%text2'"
+                       ),
+                       array(
+                               array( 'text', new LikeMatch( '_' ) ),
+                               "LIKE 'text_'"
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideUnionQueries
+        */
+       function testUnionQueries( $sql, $sqlText ) {
+               $this->assertEquals( trim( $this->database->unionQueries(
+                       $sql['sqls'],
+                       $sql['all']
+               ) ), $sqlText );
+       }
+
+       public static function provideUnionQueries() {
+               return array(
+                       array(
+                               array(
+                                       'sqls' => array( 'RAW SQL', 'RAW2SQL' ),
+                                       'all' => true,
+                               ),
+                               "(RAW SQL) UNION ALL (RAW2SQL)"
+                       ),
+                       array(
+                               array(
+                                       'sqls' => array( 'RAW SQL', 'RAW2SQL' ),
+                                       'all' => false,
+                               ),
+                               "(RAW SQL) UNION (RAW2SQL)"
+                       ),
+                       array(
+                               array(
+                                       'sqls' => array( 'RAW SQL', 'RAW2SQL', 'RAW3SQL' ),
+                                       'all' => false,
+                               ),
+                               "(RAW SQL) UNION (RAW2SQL) UNION (RAW3SQL)"
+                       ),
+               );
+       }
+
+       function testTransactionCommit() {
+               $this->database->begin( __METHOD__ );
+               $this->database->commit( __METHOD__ );
+               $this->assertLastSql( 'BEGIN; COMMIT' );
+       }
+
+       function testTransactionRollback() {
+               $this->database->begin( __METHOD__ );
+               $this->database->rollback( __METHOD__ );
+               $this->assertLastSql( 'BEGIN; ROLLBACK' );
+       }
+
+       function testDropTable() {
+               $this->database->setExistingTables( array( 'table' ) );
+               $this->database->dropTable( 'table', __METHOD__ );
+               $this->assertLastSql( 'DROP TABLE table' );
+       }
+
+       function testDropNonExistingTable() {
+               $this->assertFalse(
+                       $this->database->dropTable( 'non_existing', __METHOD__ )
+               );
+       }
 }
diff --git a/tests/phpunit/includes/db/DatabaseTestHelper.php b/tests/phpunit/includes/db/DatabaseTestHelper.php
new file mode 100644 (file)
index 0000000..1efa279
--- /dev/null
@@ -0,0 +1,164 @@
+<?php
+
+/**
+ * Helper for testing the methods from the DatabaseBase class
+ * @since 1.22
+ */
+class DatabaseTestHelper extends DatabaseBase {
+
+       /**
+        * __CLASS__ of the test suite,
+        * used to determine, if the function name is passed every time to query()
+        */
+       protected $testName = array();
+
+       /**
+        * Array of lastSqls passed to query(),
+        * This is an array since some methods in DatabaseBase can do more than one
+        * query. Cleared when calling getLastSqls().
+        */
+       protected $lastSqls = array();
+
+       /**
+        * Array of tables to be considered as existing by tableExist()
+        * Use setExistingTables() to alter.
+        */
+       protected $tablesExists;
+
+       public function __construct( $testName ) {
+               $this->testName = $testName;
+       }
+
+       /**
+        * Returns SQL queries grouped by '; '
+        * Clear the list of queries that have been done so far.
+        */
+       public function getLastSqls() {
+               $lastSqls = implode( '; ', $this->lastSqls );
+               $this->lastSqls = array();
+               return $lastSqls;
+       }
+
+       public function setExistingTables( $tablesExists ) {
+               $this->tablesExists = (array)$tablesExists;
+       }
+
+       protected function addSql( $sql ) {
+               // clean up spaces before and after some words and the whole string
+               $this->lastSqls[] = trim( preg_replace(
+                       '/\s{2,}(?=FROM|WHERE|GROUP BY|ORDER BY|LIMIT)|(?<=SELECT|INSERT|UPDATE)\s{2,}/',
+                       ' ', $sql
+               ) );
+       }
+
+       protected function checkFunctionName( $fname ) {
+               if ( substr( $fname, 0, strlen( $this->testName ) ) !== $this->testName ) {
+                       throw new MWException( 'function name does not start with test class. ' .
+                               $fname . ' vs. ' . $this->testName . '. ' .
+                               'Please provide __METHOD__ to database methods.' );
+               }
+       }
+
+       function strencode( $s ) {
+               // Choose apos to avoid handling of escaping double quotes in quoted text
+               return str_replace( "'", "\'", $s );
+       }
+
+       public function addIdentifierQuotes( $s ) {
+               // no escaping to avoid handling of double quotes in quoted text
+               return $s;
+       }
+
+       public function query( $sql, $fname = '', $tempIgnore = false ) {
+               $this->checkFunctionName( $fname );
+               $this->addSql( $sql );
+
+               return parent::query( $sql, $fname, $tempIgnore );
+       }
+
+       public function tableExists( $table, $fname = __METHOD__ ) {
+               $this->checkFunctionName( $fname );
+               return in_array( $table, (array)$this->tablesExists );
+       }
+
+       // Redeclare parent method to make it public
+       public function nativeReplace( $table, $rows, $fname ) {
+               return parent::nativeReplace( $table, $rows, $fname );
+       }
+
+       function getType() {
+               return 'test';
+       }
+
+       function open( $server, $user, $password, $dbName ) {
+               return false;
+       }
+
+       function fetchObject( $res ) {
+               return false;
+       }
+
+       function fetchRow( $res ) {
+               return false;
+       }
+
+       function numRows( $res ) {
+               return -1;
+       }
+
+       function numFields( $res ) {
+               return -1;
+       }
+
+       function fieldName( $res, $n ) {
+               return 'test';
+       }
+
+       function insertId() {
+               return -1;
+       }
+
+       function dataSeek( $res, $row ) {
+               /* nop */
+       }
+
+       function lastErrno() {
+               return -1;
+       }
+
+       function lastError() {
+               return 'test';
+       }
+
+       function fieldInfo( $table, $field ) {
+               return false;
+       }
+
+       function indexInfo( $table, $index, $fname = 'Database::indexInfo' ) {
+               return false;
+       }
+
+       function affectedRows() {
+               return -1;
+       }
+
+       static function getSoftwareLink() {
+               return 'test';
+       }
+
+       function getServerVersion() {
+               return 'test';
+       }
+
+       function getServerInfo() {
+               return 'test';
+       }
+
+       protected function closeConnection() {
+               return false;
+       }
+
+       protected function doQuery( $sql ) {
+               return array();
+       }
+}
index 39611cb..3991c93 100644 (file)
@@ -13,7 +13,8 @@ class FileBackendTest extends MediaWikiTestCase {
        protected function setUp() {
                global $wgFileBackends;
                parent::setUp();
-               $tmpPrefix = wfTempDir() . '/filebackend-unittest-' . time() . '-' . mt_rand();
+               $uniqueId = time() . '-' . mt_rand();
+               $tmpPrefix = wfTempDir() . '/filebackend-unittest-' . $uniqueId;
                if ( $this->getCliArg( 'use-filebackend=' ) ) {
                        if ( self::$backendToUse ) {
                                $this->singleBackend = self::$backendToUse;
@@ -39,6 +40,7 @@ class FileBackendTest extends MediaWikiTestCase {
                                'name' => 'localtesting',
                                'lockManager' => 'fsLockManager',
                                #'parallelize' => 'implicit',
+                               'wikiId' => wfWikiID() . $uniqueId,
                                'containerPaths' => array(
                                        'unittest-cont1' => "{$tmpPrefix}-localtesting-cont1",
                                        'unittest-cont2' => "{$tmpPrefix}-localtesting-cont2" )
@@ -48,6 +50,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        'name' => 'localtesting',
                        'lockManager' => 'fsLockManager',
                        'parallelize' => 'implicit',
+                       'wikiId' => wfWikiId() . $uniqueId,
                        'backends' => array(
                                array(
                                        'name' => 'localmultitesting1',
@@ -889,6 +892,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->backend = $this->singleBackend;
                $this->tearDownFiles();
                $this->doTestConcatenate( $op, $srcs, $srcsContent, $alreadyExists, $okStatus );
+               $this->filesToPrune[] = $op['dst']; # avoid file leaking
                $this->tearDownFiles();
 
                $this->backend = $this->multiBackend;
@@ -2193,7 +2197,9 @@ class FileBackendTest extends MediaWikiTestCase {
 
        function tearDownFiles() {
                foreach ( $this->filesToPrune as $file ) {
-                       @unlink( $file );
+                       if ( is_file( $file ) ) {
+                               unlink( $file );
+                       }
                }
                $containers = array( 'unittest-cont1', 'unittest-cont2' );
                foreach ( $containers as $container ) {
index a905f06..820f8c5 100644 (file)
@@ -106,6 +106,9 @@ class JobQueueTest extends MediaWikiTestCase {
                $queue->flushCaches();
                $this->assertEquals( 2, $queue->getSize(), "Queue size is correct ($desc)" );
                $this->assertEquals( 0, $queue->getAcquiredCount(), "No jobs active ($desc)" );
+               $jobs = iterator_to_array( $queue->getAllQueuedJobs() );
+               $this->assertEquals( 2, count( $jobs ), "Queue iterator size is correct ($desc)" );
+
 
                $job1 = $queue->pop();
                $this->assertFalse( $queue->isEmpty(), "Queue is not empty ($desc)" );